• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
10me=`basename $0`
11OPTS=
12
13usage()
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
28Options: -h, --help         Print this message and exit
29         --enable-debug     Enable support for debugging
30         --disable-release  Disable presetting optimization flags
31
32If you want to add custom CFLAGS or CXXFLAGS or similar, provide them _before_
33the runConfigureICU command:
34
35    CXXFLAGS=xyz path/to/runConfigureICU --enable-debug ...
36
37The 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
64EOE
65    fi
66
67    exit $ec
68}
69
70# Parse arguments
71
72platform=
73debug=0
74release=1
75
76while test $# -ne 0
77do
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
97done
98
99if test x$platform = x
100then
101   usage 1
102fi
103
104# Go.
105
106rm -f config.cache
107rm -f config.log
108rm -f config.status
109
110DEBUG_CFLAGS='-g'
111DEBUG_CXXFLAGS='-g'
112
113if test x$configure = x
114then
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
132fi
133
134case $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;;
374esac
375
376
377# Tweak flags
378
379if test $release -eq 1
380then
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
409fi
410
411if test $debug -eq 1
412then
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
425fi
426
427export CFLAGS
428export CXXFLAGS
429export LDFLAGS
430
431# Run configure
432
433echo "export CPP=$CPP CC=$CC CXX=$CXX CPPFLAGS=$CPPFLAGS CFLAGS=$CFLAGS CXXFLAGS=$CXXFLAGS LDFLAGS=$LDFLAGS MAKE=$MAKE"
434echo "Running ./configure $OPTS $@ for $THE_OS using $THE_COMP compiler"
435echo
436if $configure $OPTS $@
437then
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...
442else
443	echo $0: ./configure failed
444	exit 1
445fi
446