summary refs log tree commit diff
path: root/pkgs/build-support/gcc-upc-wrapper/ld-wrapper.sh
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2008-03-04 16:20:11 +0000
committerLudovic Courtès <ludo@gnu.org>2008-03-04 16:20:11 +0000
commit8b34b723f7f6019cd8073b2348d10e01b3003ab6 (patch)
treed5c935bb2ca4a257a06e0f148bb21a0781f4f7d1 /pkgs/build-support/gcc-upc-wrapper/ld-wrapper.sh
parentcfe56735b02dab0fb62540a2d3004826931615a5 (diff)
downloadnixpkgs-8b34b723f7f6019cd8073b2348d10e01b3003ab6.tar
nixpkgs-8b34b723f7f6019cd8073b2348d10e01b3003ab6.tar.gz
nixpkgs-8b34b723f7f6019cd8073b2348d10e01b3003ab6.tar.bz2
nixpkgs-8b34b723f7f6019cd8073b2348d10e01b3003ab6.tar.lz
nixpkgs-8b34b723f7f6019cd8073b2348d10e01b3003ab6.tar.xz
nixpkgs-8b34b723f7f6019cd8073b2348d10e01b3003ab6.tar.zst
nixpkgs-8b34b723f7f6019cd8073b2348d10e01b3003ab6.zip
Add GCC-UPC, a compiler for the UPC distributed shared memory language.
svn path=/nixpkgs/trunk/; revision=10956
Diffstat (limited to 'pkgs/build-support/gcc-upc-wrapper/ld-wrapper.sh')
-rw-r--r--pkgs/build-support/gcc-upc-wrapper/ld-wrapper.sh145
1 files changed, 145 insertions, 0 deletions
diff --git a/pkgs/build-support/gcc-upc-wrapper/ld-wrapper.sh b/pkgs/build-support/gcc-upc-wrapper/ld-wrapper.sh
new file mode 100644
index 00000000000..94241e42ce9
--- /dev/null
+++ b/pkgs/build-support/gcc-upc-wrapper/ld-wrapper.sh
@@ -0,0 +1,145 @@
+#! @shell@ -e
+
+if test -n "$NIX_LD_WRAPPER_START_HOOK"; then
+    source "$NIX_LD_WRAPPER_START_HOOK"
+fi
+
+if test -z "$NIX_GCC_WRAPPER_FLAGS_SET"; then
+    source @out@/nix-support/add-flags.sh
+fi
+
+source @out@/nix-support/utils.sh
+
+
+# Optionally filter out paths not refering to the store.
+params=("$@")
+if test "$NIX_ENFORCE_PURITY" = "1" -a -n "$NIX_STORE" \
+        -a \( -z "$NIX_IGNORE_LD_THROUGH_GCC" -o -z "$NIX_LDFLAGS_SET" \); then
+    rest=()
+    n=0
+    while test $n -lt ${#params[*]}; do
+        p=${params[n]}
+        p2=${params[$((n+1))]}
+        if test "${p:0:3}" = "-L/" && badPath "${p:2}"; then
+            skip $p
+        elif test "$p" = "-L" && badPath "$p2"; then
+            n=$((n + 1)); skip $p2
+        elif test "$p" = "-rpath" && badPath "$p2"; then
+            n=$((n + 1)); skip $p2
+        elif test "$p" = "-dynamic-linker" && badPath "$p2"; then
+            n=$((n + 1)); skip $p2
+        elif test "${p:0:1}" = "/" && badPath "$p"; then
+            # We cannot skip this; barf.
+            echo "impure path \`$p' used in link" >&2
+            exit 1
+        else
+            rest=("${rest[@]}" "$p")
+        fi
+        n=$((n + 1))
+    done
+    params=("${rest[@]}")
+fi
+
+
+extra=()
+extraBefore=()
+
+if test -z "$NIX_LDFLAGS_SET"; then
+    extra=(${extra[@]} $NIX_LDFLAGS)
+    extraBefore=(${extraBefore[@]} $NIX_LDFLAGS_BEFORE)
+fi
+
+
+# Add all used dynamic libraries to the rpath.
+if test "$NIX_DONT_SET_RPATH" != "1"; then
+
+    # First, find all -L... switches.
+    allParams=("${params[@]}" ${extra[@]})
+    libPath=""
+    addToLibPath() {
+        local path="$1"
+        if test "${path:0:1}" != "/"; then return 0; fi
+        case "$path" in
+            *..*|*./*|*/.*|*//*)
+                local path2
+                if path2=$(readlink -f "$path"); then
+                    path="$path2"
+                fi
+                ;;
+        esac
+        case $libPath in
+            *\ $path\ *) return 0 ;;
+        esac
+        libPath="$libPath $path "
+    }
+    n=0
+    while test $n -lt ${#allParams[*]}; do
+        p=${allParams[n]}
+        p2=${allParams[$((n+1))]}
+        if test "${p:0:3}" = "-L/"; then
+            addToLibPath ${p:2}
+        elif test "$p" = "-L"; then
+            addToLibPath ${p2}
+            n=$((n + 1))
+        fi
+        n=$((n + 1))
+    done
+
+    # Second, for each -l... switch, find the directory containing the
+    # library and add it to the rpath.
+    rpath=""
+    addToRPath() {
+        # If the path is not in the store, don't add it to the rpath.
+        # This typically happens for libraries in /tmp that are later
+        # copied to $out/lib.  If not, we're screwed.
+        if test "${1:0:${#NIX_STORE}}" != "$NIX_STORE"; then return 0; fi
+        case $rpath in
+            *\ $1\ *) return 0 ;;
+        esac
+        rpath="$rpath $1 "
+    }
+    findLib() {
+        for i in $libPath; do
+            if test -f $i/lib$1.so; then
+                addToRPath $i
+            fi
+        done
+    }
+    n=0
+    while test $n -lt ${#allParams[*]}; do
+        p=${allParams[n]}
+        p2=${allParams[$((n+1))]}
+        if test "${p:0:2}" = "-l"; then
+            findLib ${p:2}
+        elif test "$p" = "-l"; then
+            # I haven't seen `-l foo', but you never know...
+            findLib ${p2}
+            n=$((n + 1))
+        fi
+        n=$((n + 1))
+    done
+
+    # Finally, add `-rpath' switches.
+    for i in $rpath; do
+        extra=(${extra[@]} -rpath $i)
+    done
+fi
+
+
+# Optionally print debug info.
+if test "$NIX_DEBUG" = "1"; then
+  echo "original flags to @ld@:" >&2
+  for i in "${params[@]}"; do
+      echo "  $i" >&2
+  done
+  echo "extra flags to @ld@:" >&2
+  for i in ${extra[@]}; do
+      echo "  $i" >&2
+  done
+fi
+
+if test -n "$NIX_LD_WRAPPER_EXEC_HOOK"; then
+    source "$NIX_LD_WRAPPER_EXEC_HOOK"
+fi
+
+exec @ld@ ${extraBefore[@]} "${params[@]}" ${extra[@]}