1#!@shell@ 2set -eu -o pipefail 3shopt -s nullglob 4 5if (( "${NIX_DEBUG:-0}" >= 7 )); then 6 set -x 7fi 8 9declare -a args=("$@") 10# I've also tried adding -z direct and -z lazyload, but it gave too many problems with C++ exceptions :'( 11# Also made sure libgcc would not be lazy-loaded, as suggested here: https://www.illumos.org/issues/2534#note-3 12# but still no success. 13declare -a argsBefore=(-z ignore) argsAfter=() 14 15# This loop makes sure all -L arguments are before -l arguments, or ld may complain it cannot find a library. 16# GNU binutils does not have this problem: 17# http://stackoverflow.com/questions/5817269/does-the-order-of-l-and-l-options-in-the-gnu-linker-matter 18while (( $# )); do 19 case "${args[$i]}" in 20 -L) argsBefore+=("$1" "$2"); shift ;; 21 -L?*) argsBefore+=("$1") ;; 22 *) argsAfter+=("$1") ;; 23 esac 24 shift 25done 26 27# Trace: 28set -x 29exec "@ld@" "${argsBefore[@]}" "${argsAfter[@]}"