From df12a53d55b90400dc36338977bc7fa72a9b6aa8 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Fri, 3 Oct 2025 14:50:12 -0300 Subject: [PATCH] {cc,bintools}-wrapper: use executable extension when set On windows platforms we want links to executables to have the .exe extension, but wrapper scripts shouldn't. --- .../bintools-wrapper/default.nix | 13 +++++---- pkgs/build-support/cc-wrapper/default.nix | 29 ++++++++++--------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/pkgs/build-support/bintools-wrapper/default.nix b/pkgs/build-support/bintools-wrapper/default.nix index 8f5613e9e7bb..36b121378be4 100644 --- a/pkgs/build-support/bintools-wrapper/default.nix +++ b/pkgs/build-support/bintools-wrapper/default.nix @@ -92,6 +92,7 @@ let # TODO(@Ericson2314) Make unconditional, or optional but always true by # default. targetPrefix = optionalString (targetPlatform != hostPlatform) (targetPlatform.config + "-"); + exeSuffix = stdenvNoCC.hostPlatform.extensions.executable; bintoolsVersion = getVersion bintools; bintoolsName = removePrefix targetPrefix (getName bintools); @@ -257,17 +258,17 @@ stdenvNoCC.mkDerivation { + '' for binary in objdump objcopy size strings as ar nm gprof dwp c++filt addr2line \ ranlib readelf elfedit dlltool dllwrap windmc windres; do - if [ -e $ldPath/${targetPrefix}''${binary} ]; then - ln -s $ldPath/${targetPrefix}''${binary} $out/bin/${targetPrefix}''${binary} + if [ -e $ldPath/${targetPrefix}''${binary}${exeSuffix} ]; then + ln -s $ldPath/${targetPrefix}''${binary}${exeSuffix} $out/bin/${targetPrefix}''${binary}${exeSuffix} fi done - if [ -e ''${ld:-$ldPath/${targetPrefix}ld} ]; then - wrap ${targetPrefix}ld ${./ld-wrapper.sh} ''${ld:-$ldPath/${targetPrefix}ld} + if [ -e ''${ld:-$ldPath/${targetPrefix}ld}${exeSuffix} ]; then + wrap ${targetPrefix}ld ${./ld-wrapper.sh} ''${ld:-$ldPath/${targetPrefix}ld}${exeSuffix} fi - for variant in $ldPath/${targetPrefix}ld.*; do - basename=$(basename "$variant") + for variant in $ldPath/${targetPrefix}ld.*${exeSuffix}; do + basename=$(basename "${if exeSuffix != "" then "\${variant%${exeSuffix}}" else "$variant"}") wrap $basename ${./ld-wrapper.sh} $variant done ''; diff --git a/pkgs/build-support/cc-wrapper/default.nix b/pkgs/build-support/cc-wrapper/default.nix index fe23d342a014..8ab3c8202ab8 100644 --- a/pkgs/build-support/cc-wrapper/default.nix +++ b/pkgs/build-support/cc-wrapper/default.nix @@ -118,6 +118,7 @@ let # # TODO(@Ericson2314) Make unconditional, or optional but always true by default. targetPrefix = optionalString (targetPlatform != hostPlatform) (targetPlatform.config + "-"); + exeSuffix = stdenvNoCC.hostPlatform.extensions.executable; ccVersion = getVersion cc; ccName = removePrefix targetPrefix (getName cc); @@ -524,34 +525,34 @@ stdenvNoCC.mkDerivation { export named_cc=${targetPrefix}cc export named_cxx=${targetPrefix}c++ - if [ -e $ccPath/${targetPrefix}gcc ]; then - wrap ${targetPrefix}gcc $wrapper $ccPath/${targetPrefix}gcc + if [ -e $ccPath/${targetPrefix}gcc${exeSuffix} ]; then + wrap ${targetPrefix}gcc $wrapper $ccPath/${targetPrefix}gcc${exeSuffix} ln -s ${targetPrefix}gcc $out/bin/${targetPrefix}cc export named_cc=${targetPrefix}gcc export named_cxx=${targetPrefix}g++ - elif [ -e $ccPath/clang ]; then - wrap ${targetPrefix}clang $wrapper $ccPath/clang + elif [ -e $ccPath/clang${exeSuffix} ]; then + wrap ${targetPrefix}clang $wrapper $ccPath/clang${exeSuffix} ln -s ${targetPrefix}clang $out/bin/${targetPrefix}cc export named_cc=${targetPrefix}clang export named_cxx=${targetPrefix}clang++ - elif [ -e $ccPath/arocc ]; then - wrap ${targetPrefix}arocc $wrapper $ccPath/arocc + elif [ -e $ccPath/arocc${exeSuffix} ]; then + wrap ${targetPrefix}arocc $wrapper $ccPath/arocc${exeSuffix} ln -s ${targetPrefix}arocc $out/bin/${targetPrefix}cc export named_cc=${targetPrefix}arocc fi - if [ -e $ccPath/${targetPrefix}g++ ]; then - wrap ${targetPrefix}g++ $wrapper $ccPath/${targetPrefix}g++ + if [ -e $ccPath/${targetPrefix}g++${exeSuffix} ]; then + wrap ${targetPrefix}g++ $wrapper $ccPath/${targetPrefix}g++${exeSuffix} ln -s ${targetPrefix}g++ $out/bin/${targetPrefix}c++ - elif [ -e $ccPath/clang++ ]; then - wrap ${targetPrefix}clang++ $wrapper $ccPath/clang++ + elif [ -e $ccPath/clang++${exeSuffix} ]; then + wrap ${targetPrefix}clang++ $wrapper $ccPath/clang++${exeSuffix} ln -s ${targetPrefix}clang++ $out/bin/${targetPrefix}c++ fi - if [ -e $ccPath/${targetPrefix}cpp ]; then - wrap ${targetPrefix}cpp $wrapper $ccPath/${targetPrefix}cpp - elif [ -e $ccPath/cpp ]; then - wrap ${targetPrefix}cpp $wrapper $ccPath/cpp + if [ -e $ccPath/${targetPrefix}cpp${exeSuffix} ]; then + wrap ${targetPrefix}cpp $wrapper $ccPath/${targetPrefix}cpp${exeSuffix} + elif [ -e $ccPath/cpp${exeSuffix} ]; then + wrap ${targetPrefix}cpp $wrapper $ccPath/cpp${exeSuffix} fi ''