diff options
author | Danny Wilson <danny@prime.vc> | 2013-02-23 13:59:59 +0000 |
---|---|---|
committer | Danny Wilson <danny@onlinetouch.nl> | 2013-02-28 20:04:02 +0100 |
commit | 15e865ac09c93093c9cada2f247b14dba084c71a (patch) | |
tree | 352ed3af8ac0f5234e03be2d35c75899afa422a6 /pkgs/build-support/gcc-wrapper/ld-solaris-wrapper.sh | |
parent | bcaea92a1217f6adb79bdb400f2bfffef97955ed (diff) | |
download | nixpkgs-15e865ac09c93093c9cada2f247b14dba084c71a.tar nixpkgs-15e865ac09c93093c9cada2f247b14dba084c71a.tar.gz nixpkgs-15e865ac09c93093c9cada2f247b14dba084c71a.tar.bz2 nixpkgs-15e865ac09c93093c9cada2f247b14dba084c71a.tar.lz nixpkgs-15e865ac09c93093c9cada2f247b14dba084c71a.tar.xz nixpkgs-15e865ac09c93093c9cada2f247b14dba084c71a.tar.zst nixpkgs-15e865ac09c93093c9cada2f247b14dba084c71a.zip |
GCC 4.7.2 + updated libraries compiles on Illumos/SmartOS!
- Add solaris native ld support to GCC build wrapper - Add solaris ld wrapper that fixes -L argument order
Diffstat (limited to 'pkgs/build-support/gcc-wrapper/ld-solaris-wrapper.sh')
-rw-r--r-- | pkgs/build-support/gcc-wrapper/ld-solaris-wrapper.sh | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/pkgs/build-support/gcc-wrapper/ld-solaris-wrapper.sh b/pkgs/build-support/gcc-wrapper/ld-solaris-wrapper.sh new file mode 100644 index 00000000000..5a7b92b5ad7 --- /dev/null +++ b/pkgs/build-support/gcc-wrapper/ld-solaris-wrapper.sh @@ -0,0 +1,40 @@ +#!/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 |