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