OpenWrt – Rev 1

Subversion Repositories:
Rev:
#!/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