#!/bin/sh
# Copyright (c) 1999-2012, International Business Machines Corporation and
# others. All Rights Reserved.

# runConfigureICU: This script will run the "configure" script for the appropriate platform
# Only supported platforms are recognized

me=`basename $0`
OPTS=

usage()
{
    ec=0$1
    if test $ec -eq 0
    then
        uletter=U
    else
        uletter=u
    fi

    echo "${uletter}sage: $me [ -h, --help ]  [ --enable-debug | --disable-release ] platform [ configurearg ... ]"
    if test $ec -eq 0
    then
        cat <<EOE

Options: -h, --help         Print this message and exit
         --enable-debug     Enable support for debugging
         --disable-release  Disable presetting optimization flags

The following names can be supplied as the argument for platform:

    AIX                 Use the IBM Visual Age xlc_r/xlC_r compilers on AIX
    AIX/GCC             Use the GNU gcc/g++ compilers on AIX
    Cygwin              Use the GNU gcc/g++ compilers on Cygwin
    Cygwin/MSVC         Use the Microsoft Visual C++ compiler on Cygwin
    Cygwin/MSVC2005     Use the Microsoft Visual C++ 2005 compiler on Cygwin
    Cygwin/ICL          Use the Intel C++ compiler on Cygwin
    FreeBSD             Use the GNU gcc/g++ compilers on Free BSD
    HP-UX/ACC           Use the HP ANSI C/Advanced C++ compilers on HP-UX 11
    IBMi                Use the iCC compilers on IBM i, i5/OS, OS/400
    Linux               Use the GNU gcc/g++ compilers on Linux
    Linux/ECC           Use the Intel ECC compiler on Linux
    Linux/ICC           Use the Intel ICC compiler on Linux
    Linux/VA            Use the IBM Visual Age compiler on Power PC Linux
    MacOSX              Use the GNU gcc/g++ compilers on MacOS X (Darwin)
    MinGW               Use the GNU gcc/g++ compilers on MinGW
    QNX                 Use the QNX QCC compiler on QNX/Neutrino
    Solaris             Use the Sun cc/CC compilers on Solaris
    Solaris/GCC         Use the GNU gcc/g++ compilers on Solaris
    SolarisX86          Use the Sun cc/CC compilers on Solaris x86
    TRU64V5.1/CXX       Use the Compaq cxx compiler on Tru64 (OSF)
    zOS                 Use the IBM cxx compiler on z/OS (os/390)
    zOSV1R2             Use the IBM cxx compiler for z/OS 1.2
EOE
    fi

    exit $ec
}

# Parse arguments

platform=
debug=0
release=1

while test $# -ne 0
do
    case "$1" in
    -h|--help)
        usage 0
        ;;
    --enable-debug)
        debug=1
        OPTS="$OPTS --enable-debug"
        ;;
    --disable-release)
        release=0
        OPTS="$OPTS --disable-release"
        ;;
    *)
        platform="$1"
        shift
        break
        ;;
    esac
    shift
done

if test x$platform = x
then
   usage 1
fi

# Go.

rm -f config.cache
rm -f config.log
rm -f config.status

DEBUG_CFLAGS='-g'
DEBUG_CXXFLAGS='-g'

if test x$configure = x
then
    if test -f ./configure
    then
        configuredir=.
    else
        configuredir=`echo $0 | sed 's,[^/]*$,,'`
        if test x$configuredir = x$0
        then
            configuredir=.
        fi
    fi

    if test x$configuredir = x
    then
        configuredir=.
    fi

    configure=$configuredir/configure
fi

case $platform in
    AIX)
        THE_OS=AIX
        THE_COMP="xlC_r"
        CC=`which xlc_r`; export CC
        if [ ! -x $CC ]; then
           echo "ERROR: xlc_r was not found, please check the PATH to make sure it is correct."; exit 1
        fi
        CXX=`which xlC_r`; export CXX
        if [ ! -x $CXX ]; then
           echo "ERROR: xlC_r was not found, please check the PATH to make sure it is correct."; exit 1
        fi
        RELEASE_CFLAGS="-O2 -qmaxmem=-1"
        RELEASE_CXXFLAGS="-O2 -qmaxmem=-1"
        ;;
    AIX/GCC)
        THE_OS=AIX
        THE_COMP="the GNU C++"
        CC=gcc; export CC
        CXX=g++; export CXX
        DEBUG_CFLAGS='-g -O0'
        DEBUG_CXFLAGS='-g -O0'
        ;;
    Solaris)
        THE_OS=SOLARIS
        THE_COMP="Sun's CC"
        CC=`which cc`; export CC
        CXX=`which CC`; export CXX
        RELEASE_CFLAGS="-xO1 -xlibmil"
        RELEASE_CXXFLAGS="-O4 -xlibmil"
        ;;
    Solaris/GCC)
        THE_OS=SOLARIS
        THE_COMP="the GNU C++"
        CC=gcc; export CC
        CXX=g++; export CXX
        RELEASE_CFLAGS=-O1
        RELEASE_CXXFLAGS=-O2
        ;;
    SolarisX86)
        THE_OS="SOLARIS X86"
        THE_COMP="Sun's CC"
        CC=`which cc`; export CC
        CXX=`which CC`; export CXX
        LDFLAGS="${LDFLAGS} -lCrun";export LDFLAGS
        RELEASE_CFLAGS=-xO3
        RELEASE_CXXFLAGS=-O3
        ;;
    HP-UX/ACC)
        THE_OS="HP-UX 11"
        THE_COMP="aCC"
        CC=cc; export CC
        CXX=aCC; export CXX
        RELEASE_CFLAGS='+O2 +Ofltacc'
        RELEASE_CXXFLAGS='+O2 +Ofltacc'
        ;;
    IBMi)
        THE_OS="IBM i"
        THE_COMP="the iCC C++"
        CC=icc; export CC
        CXX=icc; export CXX
        CPP="$CC -c -qpponly"; export CPP
        MAKE=gmake; export MAKE
        U_MAKE=gmake; export U_MAKE
        # gmake is a .pgm and may not be on the path.  Don't use a full path, just use gmake.
        ac_cv_path_U_MAKE=gmake; export ac_cv_path_U_MAKE
        RELEASE_CFLAGS='-O4'
        RELEASE_CXXFLAGS='-O4'
        ;;
    Linux/ECC)
        THE_OS="Linux"
        THE_COMP="Intel ECC 7.1"
        CC=ecc; export CC
        CXX=ecpc; export CXX
        RELEASE_CFLAGS='-O2'
        RELEASE_CXXFLAGS='-O2'
        ;;
    Linux/ICC)
        THE_OS="Linux"
        CC=`which icc`; export CC
        CXX=`which icpc`; export CXX
	ICC_VER=`${CC} -v 2>&1`
        RELEASE_CFLAGS='-O'
        RELEASE_CXXFLAGS='-O'
        export CFLAGS="-fp-model precise"
        export CXXFLAGS="-fp-model precise"
	if [ "${ICC_VER}" = "Version 9.0 " ]; then
		RELEASE_CFLAGS=''
		RELEASE_CXXFLAGS=''
		export CFLAGS="${CFLAGS} -O0"
		export CXXFLAGS="${CXXFLAGS} -O0"
		echo "ICC 9.0 does not work with optimization- disabling optimizations"
	fi
        THE_COMP="Intel ${ICC_VER}"
        ;;
    Linux/VA)
        THE_OS="Linux"
        THE_COMP="IBM Visual Age C++ Compiler"
        CC=`which xlc_r`; export CC
        CXX=`which xlC_r`; export CXX
        RELEASE_CFLAGS="-O2 -qmaxmem=-1"
        RELEASE_CXXFLAGS="-O2 -qmaxmem=-1"
        ;;
    Linux*)
        THE_OS="Linux"
        THE_COMP="the GNU C++"
        DEBUG_CFLAGS='-g -O0'
        DEBUG_CXFLAGS='-g -O0'
        ;;
    Cygwin)
        THE_OS="Cygwin"
        THE_COMP="the GNU C++"
        RELEASE_CFLAGS='-O3'
        RELEASE_CXXFLAGS='-O3'
        ;;
    Cygwin/MSVC)
        THE_OS="Windows with Cygwin"
        THE_COMP="Microsoft Visual C++"
        CC=cl; export CC
        CXX=cl; export CXX
        RELEASE_CFLAGS='/Gy /MD'
        RELEASE_CXXFLAGS='/Gy /MD'
        DEBUG_CFLAGS='/Zi /MDd'
        DEBUG_CXXFLAGS='/Zi /MDd'
        DEBUG_LDFLAGS='/DEBUG'
        ;;
    Cygwin/MSVC2005)
        THE_OS="Windows with Cygwin"
        THE_COMP="Microsoft Visual C++ 2005"
        CC=cl; export CC
        CXX=cl; export CXX
        RELEASE_CFLAGS='/Gy /MD'
        RELEASE_CXXFLAGS='/Gy /MD'
        DEBUG_CFLAGS='/Zi /MDd'
        DEBUG_CXXFLAGS='/Zi /MDd'
        DEBUG_LDFLAGS='/DEBUG'
        ;;
    Cygwin/ICL)
        THE_OS="Windows with Cygwin"
        THE_COMP="Intel C++"
        CC=icl; export CC
        CXX=icl; export CXX
        # The Intel compiler has optimization bugs. So we disable optimization.
        RELEASE_CFLAGS='/Od'
        RELEASE_CXXFLAGS='/Od'
        DEBUG_CFLAGS='/Zi'
        DEBUG_CXXFLAGS='/Zi'
        DEBUG_LDFLAGS='/DEBUG'
        ;;
    MacOSX)
        THE_OS="MacOS X (Darwin)"
        THE_COMP="the GNU C++"
        RELEASE_CFLAGS='-O2'
        RELEASE_CXXFLAGS='-O2'
        DEBUG_CFLAGS='-g -O0'
        DEBUG_CXXFLAGS='-g -O0'
        ;;
    MinGW)
        THE_OS="MinGW"
        THE_COMP="the GNU C++"
        RELEASE_CFLAGS='-O3'
        RELEASE_CXXFLAGS='-O3'
        ;;
    *BSD)
        THE_OS="BSD"
        THE_COMP="the GNU C++"
        CC=gcc; export CC
        CXX=g++; export CXX
        DEBUG_CFLAGS='-g -O0'
        DEBUG_CXFLAGS='-g -O0'
        ;;
    TRU64V5.1/CXX)
        THE_OS="OSF1"
        THE_COMP="Compaq cxx"
        CC=cc; export CC
        CXX=cxx; export CXX
        ;;
    QNX)
        THE_OS="QNX"
        THE_COMP="QNX cc"
        CC=qcc; export CC
        CXX=QCC; export CXX
        ;;
    zOS)
        THE_OS="z/OS (OS/390)"
        THE_COMP="z/OS C/C++"
        CC=xlc; export CC
        CXX=xlC; export CXX
        RELEASE_CFLAGS="-O2 -Wc,'inline(AUTO,NOREPORT,1000,8000)'"
        RELEASE_CXXFLAGS="-O2 -Wc,'inline(AUTO,NOREPORT,1000,8000)'"
        ;;
    zOSV1R2)
        THE_OS="z/OS 1.2"
        THE_COMP="z/OS 1.2 C/C++"
        CC=cc; export CC
        CXX=cxx; export CXX
        export COMPILE_LINK_ENVVAR='_CXX_CICC_VER}=0x41020000 _C89_CVERSION=0x41020000 _CC_CVERSION=0x41020000 _CXX_PVERSION=0x41020000 _C89_PVERSION=0x41020000 _CC_PVERSION=0x41020000'
        export _CXX_CVERSION=0x41020000 _C89_CVERSION=0x41020000 _CC_CVERSION=0x41020000 _CXX_PVERSION=0x41020000 _C89_PVERSION=0x41020000 _CC_PVERSION=0x41020000
        export LDFLAGS="-Wl,'compat=pm3'"
        export CFLAGS="-Wc,'target(zOSV1R2)'"
        export CXXFLAGS="-Wc,'target(zOSV1R2)'"
        RELEASE_CFLAGS="-2 -Wc,'inline(auto,noreport,500,4000)'"
        RELEASE_CXXFLAGS="-2 -Wc,'inline(auto,noreport,500,4000)'"
        ;;
    *)
        >&2 echo "$me: unrecognized platform \"$platform\" (use --help for help)"
        exit 1;;
esac


# Tweak flags

if test $release -eq 1
then
    if test "$RELEASE_CFLAGS" = ""
    then
        case $CC in
            gcc|*/gcc|*-gcc-*|*/*-gcc-*)
                RELEASE_CFLAGS=-O3
                ;;
        esac
    fi
    if test "$RELEASE_CFLAGS" != ""
    then
        CFLAGS="$CFLAGS $RELEASE_CFLAGS"
    fi
    if test "$RELEASE_CXXFLAGS" = ""
    then
        case $CXX in
            g++|*/g++|*-g++-*|*/*-g++-*)
                RELEASE_CXXFLAGS=-O3
                ;;
        esac
    fi
    if test "$RELEASE_CXXFLAGS" != ""
    then
        CXXFLAGS="$CXXFLAGS $RELEASE_CXXFLAGS"
    fi
    if test "$RELEASE_LDFLAGS" != ""
    then
        LDFLAGS="$LDFLAGS $RELEASE_LDFLAGS"
    fi
fi

if test $debug -eq 1
then
    if test "$DEBUG_CFLAGS" != ""
    then
        CFLAGS="$CFLAGS $DEBUG_CFLAGS"
    fi
    if test "$DEBUG_CXXFLAGS" != ""
    then
        CXXFLAGS="$CXXFLAGS $DEBUG_CXXFLAGS"
    fi
    if test "$DEBUG_LDFLAGS" != ""
    then
        LDFLAGS="$LDFLAGS $DEBUG_LDFLAGS"
    fi
fi

export CFLAGS
export CXXFLAGS
export LDFLAGS

# Run configure

echo "export CPP=$CPP CC=$CC CXX=$CXX CPPFLAGS=$CPPFLAGS CFLAGS=$CFLAGS CXXFLAGS=$CXXFLAGS LDFLAGS=$LDFLAGS MAKE=$MAKE"
echo "Running ./configure $OPTS $@ for $THE_OS using $THE_COMP compiler"
echo
if $configure $OPTS $@
then
	echo
	echo If the result of the above commands looks okay to you, go to the directory
	echo source in the ICU distribution to build ICU. Please remember that ICU needs
	echo GNU make to build properly...
else
	echo $0: ./configure failed
	exit 1
fi
