# Make a copy from tmpdir/gas/as and tmpdir/gas/ld to the assembler
# and linker in the build tree, so that we can use a -B option to gcc
# to force it to use the newly built assembler/linker.
-if {![file isdirectory tmpdir/gas]} then {
- catch "exec mkdir tmpdir/gas" status
- if {[file isfile ../gas/as-new[exe_ext]]} then {
- catch "exec cp ../gas/as-new[exe_ext] tmpdir/gas/as[exe_ext]" status
- } else {
- # For non-Windows hosts there may be an executable
- # without a .exe suffix, so try copying that instead.
- catch "exec cp ../gas/as-new tmpdir/gas/as[exe_ext]" status
- }
- # This may not be needed any more...
- if {[file isfile ../ld/ld-new[exe_ext]]} then {
- catch "exec cp ../ld/ld-new[exe_ext] tmpdir/gas/ld[exe_ext]" status
- } else {
- catch "exec cp ../ld/ld-new tmpdir/gas/ld[exe_ext]" status
- }
+if {![file isdirectory tmpdir/gas]} {catch "exec mkdir tmpdir/gas" status}
+
+proc link_or_copy { src dst } {
+ if ![catch "exec ln -sf ../../../$src tmpdir/gas/$dst" status] then {return 0}
+ if ![catch "exec ln -f ../$src tmpdir/gas/$dst" status] then {return 0}
+ catch "exec cp -fpu ../$src tmpdir/gas/$dst" status
+}
+
+if {[file isfile gas/as-new[exe_ext]]} then {
+ link_or_copy gas/as-new[exe_ext] as[exe_ext]
+} else {
+ # For non-Windows hosts there may be an executable
+ # without a .exe suffix, so try copying that instead.
+ link_or_copy gas/as-new as[exe_ext]
+}
+# This may not be needed any more...
+if {[file isfile ld/ld-new[exe_ext]]} then {
+ link_or_copy ld/ld-new[exe_ext] ld[exe_ext]
+} else {
+ link_or_copy ld/ld-new ld[exe_ext]
}
set gcc_gas_flag "-B[pwd]/tmpdir/gas/"
set dlltool_gas_flag "-S [pwd]/tmpdir/gas/as[exe_ext]"