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