summary refs log blame commit diff
path: root/pkgs/build-support/cc-wrapper/ld-solaris-wrapper.sh
blob: 5a7b92b5ad7db6c71db1f1aad8a8a563e9ab998a (plain) (tree)
1
2
3
4
5
6
7
8
9







                                                                                                               
                    






























                                                                                                             
#!/bin/bash

set -e
set -u

# 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=("$@");

# 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
    case "${args[$i]}" in
        -L)  cmd="$cmd ${args[$i]} ${args[($i+1)]}"; i=($i+1); ;;
        -L*) cmd="$cmd ${args[$i]}" ;;
        *)   ;;
    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);
done

# Trace:
set -x
exec $cmd

exit 0