123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #!/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 %: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
|