summary refs log tree commit diff
path: root/pkgs/build-support/gcc-wrapper/ld-solaris-wrapper.sh
diff options
context:
space:
mode:
authorDanny Wilson <danny@prime.vc>2013-02-23 13:59:59 +0000
committerDanny Wilson <danny@onlinetouch.nl>2013-02-28 20:04:02 +0100
commit15e865ac09c93093c9cada2f247b14dba084c71a (patch)
tree352ed3af8ac0f5234e03be2d35c75899afa422a6 /pkgs/build-support/gcc-wrapper/ld-solaris-wrapper.sh
parentbcaea92a1217f6adb79bdb400f2bfffef97955ed (diff)
downloadnixpkgs-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.sh40
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