#!/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' 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` 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 ;; 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 # the architecture case "$UNAME_MACHINE" in i*86*) ARCH=x86 ;; x86_64|amd64) ARCH=x86_64 ;; sun4u) ARCH=sun4u ;; sparc64) ARCH=sparc64 ;; armv6l) ARCH=armv6l ;; *) 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='gcc' else ( $CC -v | grep tcc ) 2>/dev/null 1>/dev/null if test $? = 0; then COMPILER='tcc' else # ( $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 ( $CC -xhelp=readme 2>&1 | head -n 1 | grep 'Sun Studio' ) >/dev/null if test $? = 0; then COMPILER='spro' else ( $CC -v 2>&1 | head -n 1 | grep 'pcc' ) >/dev/null if test $? = 0; then COMPILER='pcc' else ( $CC --version 2>&1 | head -n 1 | grep 'clang' ) >/dev/null if test $? = 0; then COMPILER='clang' else COMPILER='unknown' fi fi 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 tcc (Tiny C compiler) 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) 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) 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 # version of pcc (Portable C Compiler) 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 # version of clang (LLVM C frontend) if test $COMPILER = "clang"; then CLANG_VERSION=`$CC --version | head -n 1 | cut -d ' ' -f 3` CLANG_MAJOR_VERSION=`echo $CLANG_VERSION | cut -d . -f 1` CLANG_MINOR_VERSION=`echo $CLANG_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 ;; --clang-major-version) echo $CLANG_MAJOR_VERSION ;; --clang-minor-version) echo $CLANG_MINOR_VERSION ;; 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" <