#!/bin/sh
# Copyright (C) 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
# Copyright (c) 1999-2015, 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

If you want to add custom CFLAGS or CXXFLAGS or similar, provide them _before_
the runConfigureICU command:

    CXXFLAGS=xyz path/to/runConfigureICU --enable-debug ...

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

    AIX                 Use the IBM XL xlclang/xlclang 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 clang/clang++ or GNU gcc/g++ compilers on FreeBSD
    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 clang/clang++ or GNU gcc/g++ compilers on Linux
    Linux/gcc           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 XL compiler on Power PC Linux
    MacOSX              Use the default compilers on MacOS X (Darwin)
    MacOSX/GCC          Use the GNU gcc/g++ compilers on MacOSX (Darwin)
    MinGW               Use the GNU gcc/g++ compilers on MinGW
    MSYS/MSVC           Use the Microsoft Visual C++ computer on MSYS
    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="xlclang"
        CC=`which xlclang`; export CC
        if [ ! -x $CC ]; then
           echo "ERROR: xlclang was not found, please check the PATH to make sure it is correct."; exit 1
        fi
        CXX=`which xlclang++`; export CXX
        if [ ! -x $CXX ]; then
           echo "ERROR: xlclang++ was not found, please check the PATH to make sure it is correct."; exit 1
        fi
        RELEASE_CFLAGS="-O3 -qstrict=ieeefp"
        RELEASE_CXXFLAGS="-O3 -qstrict=ieeefp"
        ;;
    AIX/GCC)
        THE_OS=AIX
        THE_COMP="the GNU C++"
        CC=gcc; export CC
        CXX=g++; export CXX
        DEBUG_CFLAGS='-g -O0'
        DEBUG_CXXFLAGS='-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 XL C++ Compiler"
        CC=`which xlclang`; export CC
        CXX=`which xlclang++`; export CXX
        RELEASE_CFLAGS="-O3"
        RELEASE_CXXFLAGS="-O3"
        ;;
    Linux/gcc)
        THE_OS="Linux"
        THE_COMP="the GNU C++"
        CC=gcc; export CC
        CXX=g++; export CXX
        RELEASE_CFLAGS='-O3'
        RELEASE_CXXFLAGS='-O3'
        DEBUG_CFLAGS='-g'
        DEBUG_CXXFLAGS='-g'
        ;;
    Linux*)
        THE_OS="Linux"
        THE_COMP="the clang or else GNU C++"
        RELEASE_CFLAGS='-O3'
        RELEASE_CXXFLAGS='-O3'
        DEBUG_CFLAGS='-g'
        DEBUG_CXXFLAGS='-g'
        ;;
    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='-FS -Zi -MDd'
        DEBUG_CXXFLAGS='-FS -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 default"
        RELEASE_CFLAGS='-O2'
        RELEASE_CXXFLAGS='-O2'
        DEBUG_CFLAGS='-g -O0'
        DEBUG_CXXFLAGS='-g -O0'
        ;;
    MacOSX/GCC)
        THE_OS="MacOS X (Darwin)"
        THE_COMP="the GNU C++"
        RELEASE_CFLAGS='-O2'
        RELEASE_CXXFLAGS='-O2'
        DEBUG_CFLAGS='-g -O0'
        DEBUG_CXXFLAGS='-g -O0'
        CC=gcc; export CC
        CXX=g++; export CXX
        ;;
    MinGW)
        THE_OS="MinGW"
        THE_COMP="the GNU C++"
        RELEASE_CFLAGS='-O3'
        RELEASE_CXXFLAGS='-O3'
        export CXXFLAGS
        ;;
    MSYS/MSVC)
        THE_OS="MSYS"
        THE_COMP="Microsoft Visual C++"
        CC=cl; export CC
        CXX=cl; export CXX
        RELEASE_CFLAGS='-Gy -MD'
        RELEASE_CXXFLAGS='-Gy -MD'
        DEBUG_CFLAGS='-FS -Zi -MDd'
        DEBUG_CXXFLAGS='-FS -Zi -MDd'
        DEBUG_LDFLAGS='-DEBUG'
        ;;
    *BSD)
        THE_OS="BSD"
        THE_COMP="the GNU C++"
        DEBUG_CFLAGS='-g -O0'
        DEBUG_CXXFLAGS='-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="$RELEASE_CFLAGS $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="$RELEASE_CXXFLAGS $CXXFLAGS"
    fi
    if test "$RELEASE_LDFLAGS" != ""
    then
        LDFLAGS="$RELEASE_LDFLAGS $LDFLAGS"
    fi
fi

if test $debug -eq 1
then
    if test "$DEBUG_CFLAGS" != ""
    then
        CFLAGS="$DEBUG_CFLAGS $CFLAGS"
    fi
    if test "$DEBUG_CXXFLAGS" != ""
    then
        CXXFLAGS="$DEBUG_CXXFLAGS $CXXFLAGS"
    fi
    if test "$DEBUG_LDFLAGS" != ""
    then
        LDFLAGS="$DEBUG_LDFLAGS $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
