#!/bin/sh # # setgcc [ ] [ ] abiDir=/boot/develop/abi/ abiLink=$abiDir/current usage() { cat << EOF Usage: $0 [ ] [ ] Sets the current gcc version, respectively prints it, if no arguments are given. - The architecture to set. Supported values: "x86". - The major gcc version to set. Supported values: "gcc2", "gcc4". EOF } if [ $# -gt 2 ]; then usage exit 1 fi if [ $# -eq 0 ]; then if [ -h $abiLink ]; then abi=$(readlink $abiLink 2> /dev/null) || { echo "Failed to read GCC symlink." >&2 exit 1 } echo "Current GCC: $abi" exit else echo "GCC symlink not installed." >&2 exit 1 fi fi arch= gcc= # parse the args while [ $# -gt 0 ]; do case $1 in -h,--help) usage; exit;; x86) arch=$1;; gcc2|gcc4) gcc=$1;; *) usage; exit 1;; esac shift done # use the native arch, if not given if [ -z "$arch" ]; then case $(uname -m) in BePC) arch=x86;; *) echo "Can't guess native architecture. Please specify!" >&2 exit 1;; esac fi # guess the native gcc version, if not given if [ -z "$gcc" ]; then if [ -e /system/lib/gcc2 ]; then gcc=gcc4 elif [ -e /system/lib/gcc4 ]; then gcc=gcc2 elif [ -e /system/lib/libstdc++.r4.so ]; then gcc=gcc2 else echo "Can't guess native GCC version. Please specify!" >&2 exit 1 fi fi # check whether the gcc exits if [ ! -e $abiDir/$arch/$gcc/tools/current/bin/gcc ]; then echo "Can't set GCC $arch/$gcc -- not installed." >&2 exit 1 fi # create the symlink ( rm $abiLink && ln -sf $arch/$gcc $abiLink ) || { echo "Failed to set GCC $arch/$gcc." >&2 exit 1 }