From 716ca530e1c4515d8683c9d5be3d56b301758b66 Mon Sep 17 00:00:00 2001 From: James <> Date: Wed, 4 Nov 2015 11:49:21 +0000 Subject: trunk-47381 --- scripts/patch-specs.sh | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100755 scripts/patch-specs.sh (limited to 'scripts/patch-specs.sh') diff --git a/scripts/patch-specs.sh b/scripts/patch-specs.sh new file mode 100755 index 0000000..3307b6b --- /dev/null +++ b/scripts/patch-specs.sh @@ -0,0 +1,90 @@ +#!/usr/bin/env bash + +DIR="$1" + +if [ -d "$DIR" ]; then + DIR="$(cd "$DIR"; pwd)" +else + echo "Usage: $0 toolchain-dir" + exit 1 +fi + +echo -n "Locating cpp ... " +for bin in bin usr/bin usr/local/bin; do + for cmd in "$DIR/$bin/"*-cpp; do + if [ -x "$cmd" ]; then + echo "$cmd" + CPP="$cmd" + break + fi + done +done + +if [ ! -x "$CPP" ]; then + echo "Can't locate a cpp executable in '$DIR' !" + exit 1 +fi + +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 + done + + [ $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 -- cgit v1.2.3