diff options
author | Ludovic Courtès <ludo@gnu.org> | 2008-03-04 16:20:11 +0000 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2008-03-04 16:20:11 +0000 |
commit | 8b34b723f7f6019cd8073b2348d10e01b3003ab6 (patch) | |
tree | d5c935bb2ca4a257a06e0f148bb21a0781f4f7d1 /pkgs/build-support/gcc-upc-wrapper/ld-wrapper.sh | |
parent | cfe56735b02dab0fb62540a2d3004826931615a5 (diff) | |
download | nixpkgs-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.sh | 145 |
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[@]} |