diff options
Diffstat (limited to 'makefiles/gmake/guess_env')
-rwxr-xr-x | makefiles/gmake/guess_env | 371 |
1 files changed, 202 insertions, 169 deletions
diff --git a/makefiles/gmake/guess_env b/makefiles/gmake/guess_env index 2e4f3de..60e039a 100755 --- a/makefiles/gmake/guess_env +++ b/makefiles/gmake/guess_env @@ -1,103 +1,154 @@ #!/bin/sh -# operating system and major, minor version, more should not be necessary - -UNAME_SYSTEM=`(uname -s) 2>/dev/null` -UNAME_RELEASE=`(uname -r) 2>/dev/null` -UNAME_VERSION=`(uname -v) 2>/dev/null` -UNAME_MACHINE=`(uname -m) 2>/dev/null` - -case "$UNAME_SYSTEM.$UNAME_RELEASE" in - Linux*) PLATFORM=LINUX - OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1` - OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2` - - if test -f /etc/arch-release; then - LINUX_DIST='arch' - LINUX_REV='current' - elif test -f /etc/debian_version; then - LINUX_DIST='debian' - LINUX_REV=`cat /etc/debian_version | cut -d . -f 1` - elif test -f /etc/slackware-version; then - LINUX_DIST='slackware' - LINUX_REV=`cat /etc/slackware-version | cut -d ' ' -f 2 | cut -d . -f 1` - elif test -f /etc/redhat-release; then - LINUX_DIST='redhat' - LINUX_REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*// | cut -f 1 -d .` - else - LINUX_DIST='unknown' - LINUX_REV='unknown' - fi - ;; - - FreeBSD*) PLATFORM=FREEBSD - OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1` - OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2 | cut -d - -f 1` - ;; - - OpenBSD*) PLATFORM=OPENBSD - OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1` - OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2 | cut -d - -f 1` - ;; - - NetBSD*) PLATFORM=NETBSD - OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1` - OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2 | cut -d - -f 1` - ;; - - SunOS*) PLATFORM=SUNOS - OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1` - OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2` - ;; - - CYGWIN_NT*) PLATFORM=CYGWIN - _tmp=`echo $UNAME_SYSTEM | cut -d - -f 2` - OS_MAJOR_VERSION=`echo $_tmp | cut -d . -f 1` - OS_MINOR_VERSION=`echo $_tmp | cut -d . -f 2` - ;; - - *) - PLATFORM=UNKNOWN - echo "Unknown platform '$UNAME_SYSTEM $UNAME_RELEASE'" - exit 1 -esac +# bail out fast if we already have a cache file, otherwise building is far too slow! -# the architecture - -case "$UNAME_MACHINE" in - i*86*) ARCH=x86 - ;; - x86_64) ARCH=x86_64 - ;; - sun4u) ARCH=sun4u - ;; - - *) ARCH=UNKNOWN - echo "Unknown architecture '$UNAME_MACHINE'" - exit 1 - -esac - -# get last line, old 'tail' syntax and POSIX syntax, both exist out there -if test "x${PLATFORM}" = "xSUNOS"; then - TAIL1='tail -1' +MAKEFILE_DIR="$3/$4" +if test -f "${MAKEFILE_DIR}/makefiles/gmake/platform.vars"; then + . "${MAKEFILE_DIR}/makefiles/gmake/platform.vars" else - TAIL1='tail -n 1' -fi -# the compiler and version + # operating system and major, minor version, more should not be necessary -# what compiler do we have (we can't relly on it's name as it may be a cc link to the binary!) -CC=$2 -(( $CC -v 2>&1 | $TAIL1 ) | grep -i GCC ) 2>/dev/null 1>/dev/null -if test $? = 0; then - COMPILER='gcc' -else - ( $CC -v | grep tcc ) 2>/dev/null 1>/dev/null + UNAME_SYSTEM=`(uname -s) 2>/dev/null` + UNAME_RELEASE=`(uname -r) 2>/dev/null` + UNAME_VERSION=`(uname -v) 2>/dev/null` + UNAME_MACHINE=`(uname -m) 2>/dev/null` + + case "$UNAME_SYSTEM.$UNAME_RELEASE" in + Linux*) PLATFORM=LINUX + OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1` + OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2` + + # LSB-system? Check for lsb-release + if test -x /usr/bin/lsb_release; then + dist=`/usr/bin/lsb_release -i | cut -f 2` + rev=`/usr/bin/lsb_release -r | cut -f 2` + case "$dist" in + Ubuntu) + LINUX_DIST='ubuntu' + LINUX_REV=$rev + ;; + + Debian) + LINUX_DIST='debian' + LINUX_REV=`echo $rev | cut -f 1 -d.` + ;; + + SUSE*LINUX) + LINUX_DIST='suse' + LINUX_REV=`echo $rev | tr -s ' ' '\t' | cut -f 2 -d ' '` + ;; + + *) + LINUX_DIST='unknown' + LINUX_REV='unknown' + ;; + esac + else + # try the older way with release files in /etc + + if test -f /etc/arch-release; then + LINUX_DIST='arch' + LINUX_REV='current' + if test "$OS_MAJOR_VERSION" = "3"; then + OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2 | cut -d - -f 1` + fi + elif test -f /etc/debian_version; then + LINUX_DIST='debian' + LINUX_REV=`cat /etc/debian_version | cut -d . -f 1` + elif test -f /etc/slackware-version; then + LINUX_DIST='slackware' + LINUX_REV=`cat /etc/slackware-version | cut -d ' ' -f 2 | cut -d . -f 1,2` + elif test -f /etc/redhat-release; then + LINUX_DIST='redhat' + LINUX_REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*// | cut -f 1 -d .` + elif test -f /etc/fedora-release; then + LINUX_DIST='redhat' + LINUX_REV=`cat /etc/fedora-release | cut -f 3 -d ' '` + elif test -f /etc/SuSE-release; then + grep "SUSE Linux Enterprise Server" /etc/SuSE-release + if test $? = 0; then + LINUX_DIST='sles' + LINUX_REV=`grep VERSION /etc/SuSE-release | cut -f 3 -d ' '` + else + LINUX_DIST='suse' + LINUX_REV=`grep VERSION /etc/SuSE-release | cut -f 3 -d ' '` + fi + else + LINUX_DIST='unknown' + LINUX_REV='unknown' + fi + fi + ;; + + FreeBSD*) PLATFORM=FREEBSD + OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1` + OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2 | cut -d - -f 1` + ;; + + OpenBSD*) PLATFORM=OPENBSD + OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1` + OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2 | cut -d - -f 1` + ;; + + NetBSD*) PLATFORM=NETBSD + OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1` + OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2` + ;; + + SunOS*) PLATFORM=SUNOS + OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1` + OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2` + ;; + + CYGWIN_NT*) PLATFORM=CYGWIN + _tmp=`echo $UNAME_SYSTEM | cut -d - -f 2` + OS_MAJOR_VERSION=`echo $_tmp | cut -d . -f 1` + OS_MINOR_VERSION=`echo $_tmp | cut -d . -f 2` + ;; + + *) + PLATFORM=UNKNOWN + echo "Unknown platform '$UNAME_SYSTEM $UNAME_RELEASE'" + exit 1 + esac + + # the architecture + + case "$UNAME_MACHINE" in + i*86*) ARCH=x86 + ;; + x86_64|amd64) ARCH=x86_64 + ;; + sun4u) ARCH=sun4u + ;; + + *) ARCH=UNKNOWN + echo "Unknown architecture '$UNAME_MACHINE'" + exit 1 + + esac + + # get last line, old 'tail' syntax and POSIX syntax, both exist out there + if test "x${PLATFORM}" = "xSUNOS"; then + TAIL1='tail -1' + else + TAIL1='tail -n 1' + fi + + # the compiler and version + + # do we have ccache or distcc in CC, then check the compiler, not the wrapper + CC=$2 + CC=`echo $CC | sed 's/distcc//g' | sed 's/ccache//g'` + + # what compiler do we have (we can't relly on it's name as it may be a cc link to the binary!) + (( $CC -v 2>&1 | $TAIL1 ) | grep -i GCC ) 2>/dev/null 1>/dev/null if test $? = 0; then - COMPILER='tcc' + COMPILER='gcc' else - ( $CC -V 2>&1 | grep l_cproc_p ) >/dev/null + # ( $CC -V 2>&1 | grep l_cproc_p ) >/dev/null + ( $CC -V 2>&1 | grep "Intel(R) C" | grep "Compiler" ) >/dev/null if test $? = 0; then COMPILER='icc' else @@ -105,120 +156,102 @@ else if test $? = 0; then COMPILER='spro' else - ( $CC -v | head -n 1 | grep 'pcc' ) >/dev/null - if test $? = 0; then - COMPILER='pcc' - else - COMPILER='unknown' - fi + COMPILER='unknown' fi fi fi -fi - -# version of gcc (GNU C compiler) -if test $COMPILER = "gcc"; then - GCC_VERSION=`gcc -dumpversion` - GCC_MAJOR_VERSION=`echo $GCC_VERSION | cut -d . -f 1` - GCC_MINOR_VERSION=`echo $GCC_VERSION | cut -d . -f 2` -fi + # version of gcc (GNU C compiler) -# version of tcc (Tiny C compiler) + if test $COMPILER = "gcc"; then + GCC_VERSION=`gcc -dumpversion` + GCC_MAJOR_VERSION=`echo $GCC_VERSION | cut -d . -f 1` + GCC_MINOR_VERSION=`echo $GCC_VERSION | cut -d . -f 2` + fi -if test $COMPILER = "tcc"; then - TCC_VERSION=`tcc -v | cut -d ' ' -f 3` - TCC_MAJOR_VERSION=`echo $ICC_VERSION | cut -d . -f 1` - TCC_MINOR_VERSION=`echo $ICC_VERSION | cut -d . -f 2` -fi + # version of icc (Intel C compiler) -# version of icc (Intel C compiler) + if test $COMPILER = "icc"; then + ICC_VERSION=`icc -dumpversion` + ICC_MAJOR_VERSION=`echo $ICC_VERSION | cut -d . -f 1` + ICC_MINOR_VERSION=`echo $ICC_VERSION | cut -d . -f 2` + fi -if test $COMPILER = "icc"; then - ICC_VERSION=`icc -dumpversion` - ICC_MAJOR_VERSION=`echo $ICC_VERSION | cut -d . -f 1` - ICC_MINOR_VERSION=`echo $ICC_VERSION | cut -d . -f 2` -fi + # version of spro (Sun Pro compiler, Sun Studio) -# version of spro (Sun Pro compiler, Sun Studio) + if test $COMPILER = "spro"; then + SPRO_VERSION=`$CC -xhelp=readme | head -n 1 | cut -d ' ' -f 3` + SPRO_MAJOR_VERSION=`echo $SPRO_VERSION | cut -d : -f 1` + fi -if test $COMPILER = "spro"; then - SPRO_VERSION=`$CC -xhelp=readme | head -n 1 | cut -d ' ' -f 3` - SPRO_MAJOR_VERSION=`echo $SPRO_VERSION | cut -d : -f 1` -fi + # generate the makefile snippet with conditional variables + # (conditional, so that users can overwrite them for instance + # for cross-compilation) + cat >"${MAKEFILE_DIR}/makefiles/gmake/platform.mk.vars" <<EOF +ARCH?=$ARCH +PLATFORM?=$PLATFORM +OS_MAJOR_VERSION?=$OS_MAJOR_VERSION +OS_MINOR_VERSION?=$OS_MINOR_VERSION +COMPILER?=$COMPILER +GCC_MAJOR_VERSION?=$GCC_MAJOR_VERSION +GCC_MINOR_VERSION?=$GCC_MINOR_VERSION +ICC_MAJOR_VERSION?=$ICC_MAJOR_VERSION +ICC_MINOR_VERSION?=$ICC_MINOR_VERSION +SPRO_MAJOR_VERSION?=$SPRO_MAJOR_VERSION +LINUX_DIST?=$LINUX_DIST +LINUX_REV?=$LINUX_REV +EOF -# version of pcc (Portable C Compiler) + # write the cache file (to protect against constant recomputations!) + cat >"${MAKEFILE_DIR}/makefiles/gmake/platform.vars" <<EOF +ARCH=$ARCH +PLATFORM=$PLATFORM +OS_MAJOR_VERSION=$OS_MAJOR_VERSION +OS_MINOR_VERSION=$OS_MINOR_VERSION +COMPILER=$COMPILER +GCC_MAJOR_VERSION=$GCC_MAJOR_VERSION +GCC_MINOR_VERSION=$GCC_MINOR_VERSION +ICC_MAJOR_VERSION=$ICC_MAJOR_VERSION +ICC_MINOR_VERSION=$ICC_MINOR_VERSION +SPRO_MAJOR_VERSION=$SPRO_MAJOR_VERSION +LINUX_DIST=$LINUX_DIST +LINUX_REV=$LINUX_REV +EOF -if test $COMPILER = "pcc"; then - PCC_VERSION=`$CC -v | head -n 1 | cut -d ' ' -f 2` - PCC_MAJOR_VERSION=`echo $PCC_VERSION | cut -d . -f 1` - PCC_MINOR_VERSION=`echo $PCC_VERSION | cut -d . -f 2` fi case "$1" in --platform) echo $PLATFORM ;; - + --os-major-version) echo $OS_MAJOR_VERSION ;; - + --os-minor-version) echo $OS_MINOR_VERSION ;; - + --arch) echo $ARCH ;; --compiler) echo $COMPILER ;; - + --gcc-major-version) echo $GCC_MAJOR_VERSION ;; - + --gcc-minor-version) echo $GCC_MINOR_VERSION ;; - --tcc-major-version) echo $TCC_MAJOR_VERSION - ;; - - --tcc-minor-version) echo $TCC_MINOR_VERSION - ;; - --icc-major-version) echo $ICC_MAJOR_VERSION ;; - + --icc-minor-version) echo $ICC_MINOR_VERSION ;; - + --spro-major-version) echo $SPRO_MAJOR_VERSION ;; - --pcc-major-version) echo $PCC_MAJOR_VERSION - ;; - - --pcc-minor-version) echo $PCC_MINOR_VERSION - ;; + *) echo "unkown flag '$1' requested!" + exit 1 esac -MAKEFILE_DIR="$3/$4" - -# regenerate the cache file, otherwise building is far too slow! -if test ! -f "${MAKEFILE_DIR}/makefiles/gmake/platform.mk.vars"; then - cat >"${MAKEFILE_DIR}/makefiles/gmake/platform.mk.vars" <<EOF -ARCH=$ARCH -PLATFORM=$PLATFORM -OS_MAJOR_VERSION=$OS_MAJOR_VERSION -OS_MINOR_VERSION=$OS_MINOR_VERSION -COMPILER=$COMPILER -GCC_MAJOR_VERSION=$GCC_MAJOR_VERSION -GCC_MINOR_VERSION=$GCC_MINOR_VERSION -TCC_MAJOR_VERSION=$TCC_MAJOR_VERSION -TCC_MINOR_VERSION=$TCC_MINOR_VERSION -ICC_MAJOR_VERSION=$ICC_MAJOR_VERSION -ICC_MINOR_VERSION=$ICC_MINOR_VERSION -SPRO_MAJOR_VERSION=$SPRO_MAJOR_VERSION -PCC_MAJOR_VERSION=$PCC_MAJOR_VERSION -PCC_MINOR_VERSION=$PCC_MINOR_VERSION -LINUX_DIST=$LINUX_DIST -LINUX_REV=$LINUX_REV -EOF -fi |