Home | History | Annotate | Download | only in source
      1 #!/bin/sh
      2 # Copyright (C) 2016 and later: Unicode, Inc. and others.
      3 # License & terms of use: http://www.unicode.org/copyright.html
      4 # Copyright (c) 1999-2015, International Business Machines Corporation and
      5 # others. All Rights Reserved.
      6 
      7 # runConfigureICU: This script will run the "configure" script for the appropriate platform
      8 # Only supported platforms are recognized
      9 
     10 me=`basename $0`
     11 OPTS=
     12 
     13 usage()
     14 {
     15     ec=0$1
     16     if test $ec -eq 0
     17     then
     18         uletter=U
     19     else
     20         uletter=u
     21     fi
     22 
     23     echo "${uletter}sage: $me [ -h, --help ]  [ --enable-debug | --disable-release ] platform [ configurearg ... ]"
     24     if test $ec -eq 0
     25     then
     26         cat <<EOE
     27 
     28 Options: -h, --help         Print this message and exit
     29          --enable-debug     Enable support for debugging
     30          --disable-release  Disable presetting optimization flags
     31 
     32 If you want to add custom CFLAGS or CXXFLAGS or similar, provide them _before_
     33 the runConfigureICU command:
     34 
     35     CXXFLAGS=xyz path/to/runConfigureICU --enable-debug ...
     36 
     37 The following names can be supplied as the argument for platform:
     38 
     39     AIX                 Use the IBM Visual Age xlc_r/xlC_r compilers on AIX
     40     AIX/GCC             Use the GNU gcc/g++ compilers on AIX
     41     Cygwin              Use the GNU gcc/g++ compilers on Cygwin
     42     Cygwin/MSVC         Use the Microsoft Visual C++ compiler on Cygwin
     43     Cygwin/MSVC2005     Use the Microsoft Visual C++ 2005 compiler on Cygwin
     44     Cygwin/ICL          Use the Intel C++ compiler on Cygwin
     45     FreeBSD             Use the clang/clang++ or GNU gcc/g++ compilers on FreeBSD
     46     HP-UX/ACC           Use the HP ANSI C/Advanced C++ compilers on HP-UX 11
     47     IBMi                Use the iCC compilers on IBM i, i5/OS, OS/400
     48     Linux               Use the clang/clang++ or GNU gcc/g++ compilers on Linux
     49     Linux/gcc           Use the GNU gcc/g++ compilers on Linux
     50     Linux/ECC           Use the Intel ECC compiler on Linux
     51     Linux/ICC           Use the Intel ICC compiler on Linux
     52     Linux/VA            Use the IBM Visual Age compiler on Power PC Linux
     53     MacOSX              Use the default compilers on MacOS X (Darwin)
     54     MacOSX/GCC          Use the GNU gcc/g++ compilers on MacOSX (Darwin)
     55     MinGW               Use the GNU gcc/g++ compilers on MinGW
     56     MSYS/MSVC           Use the Microsoft Visual C++ computer on MSYS
     57     QNX                 Use the QNX QCC compiler on QNX/Neutrino
     58     Solaris             Use the Sun cc/CC compilers on Solaris
     59     Solaris/GCC         Use the GNU gcc/g++ compilers on Solaris
     60     SolarisX86          Use the Sun cc/CC compilers on Solaris x86
     61     TRU64V5.1/CXX       Use the Compaq cxx compiler on Tru64 (OSF)
     62     zOS                 Use the IBM cxx compiler on z/OS (os/390)
     63     zOSV1R2             Use the IBM cxx compiler for z/OS 1.2
     64 EOE
     65     fi
     66 
     67     exit $ec
     68 }
     69 
     70 # Parse arguments
     71 
     72 platform=
     73 debug=0
     74 release=1
     75 
     76 while test $# -ne 0
     77 do
     78     case "$1" in
     79     -h|--help)
     80         usage 0
     81         ;;
     82     --enable-debug)
     83         debug=1
     84         OPTS="$OPTS --enable-debug"
     85         ;;
     86     --disable-release)
     87         release=0
     88         OPTS="$OPTS --disable-release"
     89         ;;
     90     *)
     91         platform="$1"
     92         shift
     93         break
     94         ;;
     95     esac
     96     shift
     97 done
     98 
     99 if test x$platform = x
    100 then
    101    usage 1
    102 fi
    103 
    104 # Go.
    105 
    106 rm -f config.cache
    107 rm -f config.log
    108 rm -f config.status
    109 
    110 DEBUG_CFLAGS='-g'
    111 DEBUG_CXXFLAGS='-g'
    112 
    113 if test x$configure = x
    114 then
    115     if test -f ./configure
    116     then
    117         configuredir=.
    118     else
    119         configuredir=`echo $0 | sed 's,[^/]*$,,'`
    120         if test x$configuredir = x$0
    121         then
    122             configuredir=.
    123         fi
    124     fi
    125 
    126     if test x$configuredir = x
    127     then
    128         configuredir=.
    129     fi
    130 
    131     configure=$configuredir/configure
    132 fi
    133 
    134 case $platform in
    135     AIX)
    136         THE_OS=AIX
    137         THE_COMP="xlC_r"
    138         CC=`which xlc_r`; export CC
    139         if [ ! -x $CC ]; then
    140            echo "ERROR: xlc_r was not found, please check the PATH to make sure it is correct."; exit 1
    141         fi
    142         CXX=`which xlC_r`; export CXX
    143         if [ ! -x $CXX ]; then
    144            echo "ERROR: xlC_r was not found, please check the PATH to make sure it is correct."; exit 1
    145         fi
    146         RELEASE_CFLAGS="-O2 -qmaxmem=-1"
    147         RELEASE_CXXFLAGS="-O2 -qmaxmem=-1"
    148         ;;
    149     AIX/GCC)
    150         THE_OS=AIX
    151         THE_COMP="the GNU C++"
    152         CC=gcc; export CC
    153         CXX=g++; export CXX
    154         DEBUG_CFLAGS='-g -O0'
    155         DEBUG_CXXFLAGS='-g -O0'
    156         ;;
    157     Solaris)
    158         THE_OS=SOLARIS
    159         THE_COMP="Sun's CC"
    160         CC=`which cc`; export CC
    161         CXX=`which CC`; export CXX
    162         RELEASE_CFLAGS="-xO1 -xlibmil"
    163         RELEASE_CXXFLAGS="-O4 -xlibmil"
    164         ;;
    165     Solaris/GCC)
    166         THE_OS=SOLARIS
    167         THE_COMP="the GNU C++"
    168         CC=gcc; export CC
    169         CXX=g++; export CXX
    170         RELEASE_CFLAGS=-O1
    171         RELEASE_CXXFLAGS=-O2
    172         ;;
    173     SolarisX86)
    174         THE_OS="SOLARIS X86"
    175         THE_COMP="Sun's CC"
    176         CC=`which cc`; export CC
    177         CXX=`which CC`; export CXX
    178         LDFLAGS="${LDFLAGS} -lCrun";export LDFLAGS
    179         RELEASE_CFLAGS=-xO3
    180         RELEASE_CXXFLAGS=-O3
    181         ;;
    182     HP-UX/ACC)
    183         THE_OS="HP-UX 11"
    184         THE_COMP="aCC"
    185         CC=cc; export CC
    186         CXX=aCC; export CXX
    187         RELEASE_CFLAGS='+O2 +Ofltacc'
    188         RELEASE_CXXFLAGS='+O2 +Ofltacc'
    189         ;;
    190     IBMi)
    191         THE_OS="IBM i"
    192         THE_COMP="the iCC C++"
    193         CC=icc; export CC
    194         CXX=icc; export CXX
    195         CPP="$CC -c -qpponly"; export CPP
    196         MAKE=gmake; export MAKE
    197         U_MAKE=gmake; export U_MAKE
    198         # gmake is a .pgm and may not be on the path.  Don't use a full path, just use gmake.
    199         ac_cv_path_U_MAKE=gmake; export ac_cv_path_U_MAKE
    200         RELEASE_CFLAGS='-O4'
    201         RELEASE_CXXFLAGS='-O4'
    202         ;;
    203     Linux/ECC)
    204         THE_OS="Linux"
    205         THE_COMP="Intel ECC 7.1"
    206         CC=ecc; export CC
    207         CXX=ecpc; export CXX
    208         RELEASE_CFLAGS='-O2'
    209         RELEASE_CXXFLAGS='-O2'
    210         ;;
    211     Linux/ICC)
    212         THE_OS="Linux"
    213         CC=`which icc`; export CC
    214         CXX=`which icpc`; export CXX
    215 	ICC_VER=`${CC} -v 2>&1`
    216         RELEASE_CFLAGS='-O'
    217         RELEASE_CXXFLAGS='-O'
    218         export CFLAGS="-fp-model precise"
    219         export CXXFLAGS="-fp-model precise"
    220 	if [ "${ICC_VER}" = "Version 9.0 " ]; then
    221 		RELEASE_CFLAGS=''
    222 		RELEASE_CXXFLAGS=''
    223 		export CFLAGS="${CFLAGS} -O0"
    224 		export CXXFLAGS="${CXXFLAGS} -O0"
    225 		echo "ICC 9.0 does not work with optimization- disabling optimizations"
    226 	fi
    227         THE_COMP="Intel ${ICC_VER}"
    228         ;;
    229     Linux/VA)
    230         THE_OS="Linux"
    231         THE_COMP="IBM Visual Age C++ Compiler"
    232         CC=`which xlc_r`; export CC
    233         CXX=`which xlC_r`; export CXX
    234         RELEASE_CFLAGS="-O2 -qmaxmem=-1"
    235         RELEASE_CXXFLAGS="-O2 -qmaxmem=-1"
    236         ;;
    237     Linux/gcc)
    238         THE_OS="Linux"
    239         THE_COMP="the GNU C++"
    240         CC=gcc; export CC
    241         CXX=g++; export CXX
    242         RELEASE_CFLAGS='-O3'
    243         RELEASE_CXXFLAGS='-O3'
    244         DEBUG_CFLAGS='-g'
    245         DEBUG_CXXFLAGS='-g'
    246         ;;
    247     Linux*)
    248         THE_OS="Linux"
    249         THE_COMP="the clang or else GNU C++"
    250         RELEASE_CFLAGS='-O3'
    251         RELEASE_CXXFLAGS='-O3'
    252         DEBUG_CFLAGS='-g'
    253         DEBUG_CXXFLAGS='-g'
    254         ;;
    255     Cygwin)
    256         THE_OS="Cygwin"
    257         THE_COMP="the GNU C++"
    258         RELEASE_CFLAGS='-O3'
    259         RELEASE_CXXFLAGS='-O3'
    260         ;;
    261     Cygwin/MSVC)
    262         THE_OS="Windows with Cygwin"
    263         THE_COMP="Microsoft Visual C++"
    264         CC=cl; export CC
    265         CXX=cl; export CXX
    266         RELEASE_CFLAGS='-Gy -MD'
    267         RELEASE_CXXFLAGS='-Gy -MD'
    268         DEBUG_CFLAGS='-Zi -MDd'
    269         DEBUG_CXXFLAGS='-Zi -MDd'
    270         DEBUG_LDFLAGS='-DEBUG'
    271         ;;
    272     Cygwin/MSVC2005)
    273         THE_OS="Windows with Cygwin"
    274         THE_COMP="Microsoft Visual C++ 2005"
    275         CC=cl; export CC
    276         CXX=cl; export CXX
    277         RELEASE_CFLAGS='/Gy /MD'
    278         RELEASE_CXXFLAGS='/Gy /MD'
    279         DEBUG_CFLAGS='/Zi /MDd'
    280         DEBUG_CXXFLAGS='/Zi /MDd'
    281         DEBUG_LDFLAGS='/DEBUG'
    282         ;;
    283     Cygwin/ICL)
    284         THE_OS="Windows with Cygwin"
    285         THE_COMP="Intel C++"
    286         CC=icl; export CC
    287         CXX=icl; export CXX
    288         # The Intel compiler has optimization bugs. So we disable optimization.
    289         RELEASE_CFLAGS='/Od'
    290         RELEASE_CXXFLAGS='/Od'
    291         DEBUG_CFLAGS='/Zi'
    292         DEBUG_CXXFLAGS='/Zi'
    293         DEBUG_LDFLAGS='/DEBUG'
    294         ;;
    295     MacOSX)
    296         THE_OS="MacOS X (Darwin)"
    297         THE_COMP="the default"
    298         RELEASE_CFLAGS='-O2'
    299         RELEASE_CXXFLAGS='-O2'
    300         DEBUG_CFLAGS='-g -O0'
    301         DEBUG_CXXFLAGS='-g -O0'
    302         ;;
    303     MacOSX/GCC)
    304         THE_OS="MacOS X (Darwin)"
    305         THE_COMP="the GNU C++"
    306         RELEASE_CFLAGS='-O2'
    307         RELEASE_CXXFLAGS='-O2'
    308         DEBUG_CFLAGS='-g -O0'
    309         DEBUG_CXXFLAGS='-g -O0'
    310         CC=gcc; export CC
    311         CXX=g++; export CXX
    312         ;;
    313     MinGW)
    314         THE_OS="MinGW"
    315         THE_COMP="the GNU C++"
    316         RELEASE_CFLAGS='-O3'
    317         RELEASE_CXXFLAGS='-O3'
    318         CXXFLAGS="--std=c++03"
    319         export CXXFLAGS
    320         ;;
    321     MSYS/MSVC)
    322         THE_OS="MSYS"
    323         THE_COMP="Microsoft Visual C++"
    324         CC=cl; export CC
    325         CXX=cl; export CXX
    326         RELEASE_CFLAGS='-Gy -MD'
    327         RELEASE_CXXFLAGS='-Gy -MD'
    328         DEBUG_CFLAGS='-Zi -MDd'
    329         DEBUG_CXXFLAGS='-Zi -MDd'
    330         DEBUG_LDFLAGS='-DEBUG'
    331         ;;
    332     *BSD)
    333         THE_OS="BSD"
    334         THE_COMP="the GNU C++"
    335         DEBUG_CFLAGS='-g -O0'
    336         DEBUG_CXXFLAGS='-g -O0'
    337         ;;
    338     TRU64V5.1/CXX)
    339         THE_OS="OSF1"
    340         THE_COMP="Compaq cxx"
    341         CC=cc; export CC
    342         CXX=cxx; export CXX
    343         ;;
    344     QNX)
    345         THE_OS="QNX"
    346         THE_COMP="QNX cc"
    347         CC=qcc; export CC
    348         CXX=QCC; export CXX
    349         ;;
    350     zOS)
    351         THE_OS="z/OS (OS/390)"
    352         THE_COMP="z/OS C/C++"
    353         CC=xlc; export CC
    354         CXX=xlC; export CXX
    355         RELEASE_CFLAGS="-O2 -Wc,'inline(AUTO,NOREPORT,1000,8000)'"
    356         RELEASE_CXXFLAGS="-O2 -Wc,'inline(AUTO,NOREPORT,1000,8000)'"
    357         ;;
    358     zOSV1R2)
    359         THE_OS="z/OS 1.2"
    360         THE_COMP="z/OS 1.2 C/C++"
    361         CC=cc; export CC
    362         CXX=cxx; export CXX
    363         export COMPILE_LINK_ENVVAR='_CXX_CICC_VER}=0x41020000 _C89_CVERSION=0x41020000 _CC_CVERSION=0x41020000 _CXX_PVERSION=0x41020000 _C89_PVERSION=0x41020000 _CC_PVERSION=0x41020000'
    364         export _CXX_CVERSION=0x41020000 _C89_CVERSION=0x41020000 _CC_CVERSION=0x41020000 _CXX_PVERSION=0x41020000 _C89_PVERSION=0x41020000 _CC_PVERSION=0x41020000
    365         export LDFLAGS="-Wl,'compat=pm3'"
    366         export CFLAGS="-Wc,'target(zOSV1R2)'"
    367         export CXXFLAGS="-Wc,'target(zOSV1R2)'"
    368         RELEASE_CFLAGS="-2 -Wc,'inline(auto,noreport,500,4000)'"
    369         RELEASE_CXXFLAGS="-2 -Wc,'inline(auto,noreport,500,4000)'"
    370         ;;
    371     *)
    372         >&2 echo "$me: unrecognized platform \"$platform\" (use --help for help)"
    373         exit 1;;
    374 esac
    375 
    376 
    377 # Tweak flags
    378 
    379 if test $release -eq 1
    380 then
    381     if test "$RELEASE_CFLAGS" = ""
    382     then
    383         case $CC in
    384             gcc|*/gcc|*-gcc-*|*/*-gcc-*)
    385                 RELEASE_CFLAGS=-O3
    386                 ;;
    387         esac
    388     fi
    389     if test "$RELEASE_CFLAGS" != ""
    390     then
    391         CFLAGS="$RELEASE_CFLAGS $CFLAGS"
    392     fi
    393     if test "$RELEASE_CXXFLAGS" = ""
    394     then
    395         case $CXX in
    396             g++|*/g++|*-g++-*|*/*-g++-*)
    397                 RELEASE_CXXFLAGS=-O3
    398                 ;;
    399         esac
    400     fi
    401     if test "$RELEASE_CXXFLAGS" != ""
    402     then
    403         CXXFLAGS="$RELEASE_CXXFLAGS $CXXFLAGS"
    404     fi
    405     if test "$RELEASE_LDFLAGS" != ""
    406     then
    407         LDFLAGS="$RELEASE_LDFLAGS $LDFLAGS"
    408     fi
    409 fi
    410 
    411 if test $debug -eq 1
    412 then
    413     if test "$DEBUG_CFLAGS" != ""
    414     then
    415         CFLAGS="$DEBUG_CFLAGS $CFLAGS"
    416     fi
    417     if test "$DEBUG_CXXFLAGS" != ""
    418     then
    419         CXXFLAGS="$DEBUG_CXXFLAGS $CXXFLAGS"
    420     fi
    421     if test "$DEBUG_LDFLAGS" != ""
    422     then
    423         LDFLAGS="$DEBUG_LDFLAGS $LDFLAGS"
    424     fi
    425 fi
    426 
    427 export CFLAGS
    428 export CXXFLAGS
    429 export LDFLAGS
    430 
    431 # Run configure
    432 
    433 echo "export CPP=$CPP CC=$CC CXX=$CXX CPPFLAGS=$CPPFLAGS CFLAGS=$CFLAGS CXXFLAGS=$CXXFLAGS LDFLAGS=$LDFLAGS MAKE=$MAKE"
    434 echo "Running ./configure $OPTS $@ for $THE_OS using $THE_COMP compiler"
    435 echo
    436 if $configure $OPTS $@
    437 then
    438 	echo
    439 	echo If the result of the above commands looks okay to you, go to the directory
    440 	echo source in the ICU distribution to build ICU. Please remember that ICU needs
    441 	echo GNU make to build properly...
    442 else
    443 	echo $0: ./configure failed
    444 	exit 1
    445 fi
    446