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