[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-a3cf2f4a3e73master
parent
5da516bb55
commit
2c6847fa45
|
@ -1,7 +1,6 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
DIR="$1"
|
DIR="$1"
|
||||||
FOUND=0
|
|
||||||
|
|
||||||
if [ -d "$DIR" ]; then
|
if [ -d "$DIR" ]; then
|
||||||
DIR="$(cd "$DIR"; pwd)"
|
DIR="$(cd "$DIR"; pwd)"
|
||||||
|
@ -26,39 +25,66 @@ if [ ! -x "$CPP" ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for lib in $(STAGING_DIR="$dir" "$CPP" -x c -v /dev/null 2>&1 | sed -ne 's#:# #g; s#^LIBRARY_PATH=##p'); do
|
patch_specs() {
|
||||||
if [ -d "$lib" ]; then
|
local found=0
|
||||||
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
|
|
||||||
|
|
||||||
if [ $FOUND -lt 1 ]; then
|
for lib in $(STAGING_DIR="$DIR" "$CPP" -x c -v /dev/null 2>&1 | sed -ne 's#:# #g; s#^LIBRARY_PATH=##p'); do
|
||||||
echo "Failed to locate library directory!"
|
if [ -d "$lib" ]; then
|
||||||
exit 1
|
grep -qs "STAGING_DIR" "$lib/specs" && rm -f "$lib/specs"
|
||||||
else
|
if [ $found -lt 1 ]; then
|
||||||
echo "Toolchain successfully patched."
|
echo -n "Patching specs ... "
|
||||||
exit 0
|
STAGING_DIR="$DIR" "$CPP" -dumpspecs | awk '
|
||||||
fi
|
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 | 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
|
||||||
|
|
Loading…
Reference in New Issue