diff options
author | jow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2012-01-29 17:42:58 +0000 |
---|---|---|
committer | jow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2012-01-29 17:42:58 +0000 |
commit | e23aeca7d2e1bf518e4cf5a4e044acaa1cf10e44 (patch) | |
tree | 8c78e4de5ece7abb3264b1fe69c11c9ec8d42408 | |
parent | 33451c5fb021f40c016a9d5344931264c275002e (diff) |
[scripts] patch-specs.sh: fallback to ext-toolchain.sh --wrap if spec file patching is not possible (gcc < 4.3.0)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@29945 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rwxr-xr-x | scripts/patch-specs.sh | 96 |
1 files changed, 61 insertions, 35 deletions
diff --git a/scripts/patch-specs.sh b/scripts/patch-specs.sh index 4d02a009e..2ab779084 100755 --- a/scripts/patch-specs.sh +++ b/scripts/patch-specs.sh @@ -1,7 +1,6 @@ #!/usr/bin/env bash DIR="$1" -FOUND=0 if [ -d "$DIR" ]; then DIR="$(cd "$DIR"; pwd)" @@ -26,39 +25,66 @@ if [ ! -x "$CPP" ]; then exit 1 fi -for lib in $(STAGING_DIR="$dir" "$CPP" -x c -v /dev/null 2>&1 | sed -ne 's#:# #g; s#^LIBRARY_PATH=##p'); do - if [ -d "$lib" ]; then - grep -qs "STAGING_DIR" "$lib/specs" && rm -f "$lib/specs" - if [ $FOUND -lt 1 ]; then - echo -n "Patching specs ... " - STAGING_DIR="$dir" "$CPP" -dumpspecs | awk ' - mode ~ "link" { - sub("%{L.}", "%{L*} -L %:getenv(STAGING_DIR /usr/lib) -rpath-link %:getenv(STAGING_DIR /usr/lib)") - } - mode ~ "cpp" { - $0 = $0 " -idirafter %:getenv(STAGING_DIR /usr/include)" - } - { - print $0 - mode = "" - } - /^\*cpp:/ { - mode = "cpp" - } - /^\*link.*:/ { - mode = "link" - } - ' > "$lib/specs" - echo "ok" - FOUND=1 +patch_specs() { + local found=0 + + for lib in $(STAGING_DIR="$DIR" "$CPP" -x c -v /dev/null 2>&1 | sed -ne 's#:# #g; s#^LIBRARY_PATH=##p'); do + if [ -d "$lib" ]; then + grep -qs "STAGING_DIR" "$lib/specs" && rm -f "$lib/specs" + if [ $found -lt 1 ]; then + echo -n "Patching specs ... " + STAGING_DIR="$DIR" "$CPP" -dumpspecs | awk ' + mode ~ "link" { + sub("%{L.}", "%{L*} -L %:getenv(STAGING_DIR /usr/lib) -rpath-link %:getenv(STAGING_DIR /usr/lib)") + } + mode ~ "cpp" { + $0 = $0 " -idirafter %:getenv(STAGING_DIR /usr/include)" + } + { + print $0 + mode = "" + } + /^\*cpp:/ { + mode = "cpp" + } + /^\*link.*:/ { + mode = "link" + } + ' > "$lib/specs" + echo "ok" + found=1 + fi fi - fi -done + done -if [ $FOUND -lt 1 ]; then - echo "Failed to locate library directory!" - exit 1 -else - echo "Toolchain successfully patched." - exit 0 -fi + [ $found -gt 0 ] + return $? +} + + +VERSION="$(STAGING_DIR="$DIR" "$CPP" --version | head -n1)" +VERSION="${VERSION:-unknown}" + +case "${VERSION##* }" in + 2.*|3.*|4.0.*|4.1.*|4.2.*) + echo "The compiler version does not support getenv() in spec files." + echo -n "Wrapping binaries instead ... " + + if "${0%/*}/ext-toolchain.sh" --toolchain "$DIR" --wrap "${CPP%/*}"; then + echo "ok" + exit 0 + else + echo "failed" + exit $? + fi + ;; + *) + if patch_specs; then + echo "Toolchain successfully patched." + exit 0 + else + echo "Failed to locate library directory!" + exit 1 + fi + ;; +esac |