diff options
Diffstat (limited to 'pkgs/build-support/cc-wrapper/ld-solaris-wrapper.sh')
-rwxr-xr-x | pkgs/build-support/cc-wrapper/ld-solaris-wrapper.sh | 35 |
1 files changed, 10 insertions, 25 deletions
diff --git a/pkgs/build-support/cc-wrapper/ld-solaris-wrapper.sh b/pkgs/build-support/cc-wrapper/ld-solaris-wrapper.sh index 263ea5408e9a..72c999ff8bc8 100755 --- a/pkgs/build-support/cc-wrapper/ld-solaris-wrapper.sh +++ b/pkgs/build-support/cc-wrapper/ld-solaris-wrapper.sh @@ -1,40 +1,25 @@ #!@shell@ +set -eu -o pipefail +shopt -s nullglob -set -e -set -u - +declare -a args=("$@") # I've also tried adding -z direct and -z lazyload, but it gave too many problems with C++ exceptions :'( # Also made sure libgcc would not be lazy-loaded, as suggested here: https://www.illumos.org/issues/2534#note-3 # but still no success. -cmd="@ld@ -z ignore" - -args=("$@"); +declare -a argsBefore=(-z ignore) argsAfter=() # This loop makes sure all -L arguments are before -l arguments, or ld may complain it cannot find a library. # GNU binutils does not have this problem: # http://stackoverflow.com/questions/5817269/does-the-order-of-l-and-l-options-in-the-gnu-linker-matter -i=0; -while [[ $i -lt $# ]]; do +while (( $# )); do case "${args[$i]}" in - -L) cmd="$cmd ${args[$i]} ${args[($i+1)]}"; i=($i+1); ;; - -L*) cmd="$cmd ${args[$i]}" ;; - *) ;; + -L) argsBefore+=("$1" "$2"); shift ;; + -L?*) argsBefore+=("$1") ;; + *) argsAfter+=("$1") ;; esac - i=($i+1); -done - -i=0; -while [[ $i -lt $# ]]; do - case "${args[$i]}" in - -L) i=($i+1); ;; - -L*) ;; - *) cmd="$cmd ${args[$i]}" ;; - esac - i=($i+1); + shift done # Trace: set -x -exec $cmd - -exit 0 +exec "@ld@" "${argsBefore[@]}" "${argsAfter[@]}" |