mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-25 08:23:09 +00:00
ld-wrapper: use a temporary file for reponse file
This changes ld-wrapper to use a temporary file for the response file passed to ld instead of using process substitution. ld64 does not handle long command-lines when reading from the response file, which defeats the point of using a response file to handle long command-lines. cctools-port was patched to work around this, but nixpkgs is now using Apple’s source release directly instead of the port. Since it’s preferable not to patch Apple’s release heavily (to reduce the difficulty of updating to new versions and to match upstream’s behavior), use the approach that was adopted in cc-wrapper to work around issues with response files in newer versions of clang. Related PRs (cctools-port): - https://github.com/NixOS/nixpkgs/pull/213831 - https://github.com/tpoechtrager/cctools-port/pull/132 Related PRs (cc-wrapper): - https://github.com/NixOS/nixpkgs/pull/245282 - https://github.com/NixOS/nixpkgs/pull/258608
This commit is contained in:
parent
5a56b5dfb1
commit
1cb1853573
@ -257,10 +257,13 @@ PATH="$path_backup"
|
||||
# Old bash workaround, see above.
|
||||
|
||||
if (( "${NIX_LD_USE_RESPONSE_FILE:-@use_response_file_by_default@}" >= 1 )); then
|
||||
@prog@ @<(printf "%q\n" \
|
||||
${extraBefore+"${extraBefore[@]}"} \
|
||||
${params+"${params[@]}"} \
|
||||
${extraAfter+"${extraAfter[@]}"})
|
||||
responseFile=$(mktemp "${TMPDIR:-/tmp}/ld-params.XXXXXX")
|
||||
trap 'rm -f -- "$responseFile"' EXIT
|
||||
printf "%q\n" \
|
||||
${extraBefore+"${extraBefore[@]}"} \
|
||||
${params+"${params[@]}"} \
|
||||
${extraAfter+"${extraAfter[@]}"} > "$responseFile"
|
||||
@prog@ "@$responseFile"
|
||||
else
|
||||
@prog@ \
|
||||
${extraBefore+"${extraBefore[@]}"} \
|
||||
|
Loading…
Reference in New Issue
Block a user