X-Git-Url: http://git.ozo.com/?p=openwrt-10.03%2F.git;a=blobdiff_plain;f=scripts%2Fpatch-specs.sh;fp=scripts%2Fpatch-specs.sh;h=3307b6b0904501a83a5f8bc8824d91c9304c6fd1;hp=4d02a009ecbfd84d3a1babfd3094198a3be4dc14;hb=56f4c0efd7892eb47980358a72fc76c13f843f6f;hpb=910a073805ca58f559fa6582702a0027a94ad496 diff --git a/scripts/patch-specs.sh b/scripts/patch-specs.sh index 4d02a009e..3307b6b09 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 | sed -ne 's/^.* (.*) //; s/ .*$//; 1p')" +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