#!/usr/bin/env bash DIR="$1" FOUND=0 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 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 if [ $FOUND -lt 1 ]; then echo "Failed to locate library directory!" exit 1 else echo "Toolchain successfully patched." exit 0 fi