1# -*-autoconf-*-
2AC_COPYRIGHT([ Copyright (C) 2016 and later: Unicode, Inc. and others. License & terms of use: http://www.unicode.org/copyright.html ])
3# AC_COPYRIGHT([ Copyright (c) 1999-2015, International Business Machines Corporation and others. All Rights Reserved. ])
4# configure.in for ICU
5# Stephen F. Booth, heavily modified by Yves and others
6
7# NOTE: please use 'autoreconf' to rebuild, otherwise 'aclocal && autoconf'.
8
9# Check for autoconf version
10AC_PREREQ(2.69)
11
12# Process this file with autoreconf to produce a configure script
13AC_INIT([ICU],
14        m4_esyscmd_s([sed -n 's/^[ 	]*#[ 	]*define[ 	]*U_ICU_VERSION[ 	]*"\([^"]*\)".*/\1/p' "./common/unicode/uvernum.h]"),
15        [http://icu-project.org/bugs],
16        [International Components for Unicode],
17        [http://icu-project.org])
18
19AC_CONFIG_MACRO_DIR([config/m4])
20AC_CONFIG_SRCDIR([common/unicode/utypes.h])
21
22PACKAGE="icu"
23AC_SUBST(PACKAGE)
24
25# Use custom echo test for newline option
26# Current autoconf (2.65) gives incorrect echo newline option
27# for icu-config
28# This may be removed later - mow (June 17, 2010)
29ICU_ECHO_C= ICU_ECHO_N= ICU_ECHO_T=
30case `/bin/sh -c "echo -n x"` in
31-n*)
32  case `/bin/sh -c "echo 'x\c'"` in
33  *c*) ICU_ECHO_T=' ';;     # ECHO_T is single tab character.
34  *)   ICU_ECHO_C='\c';;
35  esac;;
36*)
37  ICU_ECHO_N='-n';;
38esac
39AC_SUBST(ICU_ECHO_N)
40AC_SUBST(ICU_ECHO_C)
41AC_SUBST(ICU_ECHO_T)
42
43AC_MSG_CHECKING(for ICU version numbers)
44
45# Get the ICU version from uversion.h or other headers
46geticuversion() {
47    [sed -n 's/^[ 	]*#[ 	]*define[ 	]*U_ICU_VERSION[ 	]*"\([^"]*\)".*/\1/p' "$@"]
48}
49getuversion() {
50    [sed -n 's/^[ 	]*#[ 	]*define[ 	]*U_UNICODE_VERSION[ 	]*"\([^"]*\)".*/\1/p' "$@"]
51}
52VERSION=`geticuversion $srcdir/common/unicode/uvernum.h`
53if test x"$VERSION" = x; then
54   as_fn_error $? "Cannot determine ICU version number from uvernum.h header file" "$LINENO" 5
55fi
56
57#TODO: IcuBug:8502
58#if test "$VERSION" != "$PACKAGE_VERSION"; then
59#   AC_MSG_ERROR([configure was generated for $PACKAGE_VERSION but uvernum.h has $VERSION - please rerun autoconf])
60#fi
61
62UNICODE_VERSION=`getuversion $srcdir/common/unicode/uchar.h`
63if test x"$UNICODE_VERSION" = x; then
64    AC_MSG_ERROR([Cannot determine Unicode version number from uchar.h header file])
65fi
66# Compute a reasonable library version from the release version. This is
67# very bad, but that's wanted... We want to make sure that the LIB_VERSION
68# has at least a dot in it, so we'll add a .0 if needed.
69#[LIB_VERSION=`echo $VERSION | sed -e 's/\.//' -e 's/^\([^.]*\)$/\1.0/'`]
70LIB_VERSION=$VERSION
71LIB_VERSION_MAJOR=`echo $LIB_VERSION | sed 's/\..*//'`
72AC_SUBST(VERSION)
73AC_SUBST(LIB_VERSION)
74AC_SUBST(LIB_VERSION_MAJOR)
75AC_MSG_RESULT([release $VERSION, library $LIB_VERSION, unicode version $UNICODE_VERSION])
76
77AC_SUBST(UNICODE_VERSION)
78
79# Determine the host system
80AC_CANONICAL_HOST
81
82AC_SUBST(CPPFLAGS)
83
84# This variable is needed on z/OS because the C++ compiler only recognizes .C
85_CXX_CXXSUFFIX=cpp
86export _CXX_CXXSUFFIX
87
88# Accumulate #defines
89
90# CONFIG_CPPFLAGS: These are defines that are set for ICU Build time only.
91# They are only needed for building ICU itself. Example: platform stuff
92CONFIG_CPPFLAGS=""
93# UCONFIG_CPPFLAGS: These are defines which are set for ICU build time,
94# and also a notice is output that they need to be set
95# for end-users of ICU also. uconfig.h.prepend is generated
96# with, for example, "#define U_DISABLE_RENAMING 1"
97# Example: ICU configuration stuff
98UCONFIG_CPPFLAGS=""
99# UCONFIG_CFLAGS: contains a copy of anything that needs to be set by end users
100# such as -std
101UCONFIG_CFLAGS=""
102
103# Check whether to build debug libraries
104AC_MSG_CHECKING([whether to build debug libraries])
105enabled=no
106ENABLE_DEBUG=0
107AC_ARG_ENABLE(debug,
108    [  --enable-debug          build debug libraries and enable the U_DEBUG define [default=no]],
109    [ case "${enableval}" in
110         yes|"") enabled=yes; ENABLE_DEBUG=1; CONFIG_CPPFLAGS="$CONFIG_CPPFLAGS -DU_DEBUG=1" ;;
111         *) ;;
112    esac],
113)
114AC_MSG_RESULT($enabled)
115AC_SUBST(ENABLE_DEBUG)
116
117# Check whether to build release libraries
118AC_MSG_CHECKING([whether to build release libraries])
119enabled=yes
120ENABLE_RELEASE=1
121AC_ARG_ENABLE(release,
122    [  --enable-release        build release libraries [default=yes]],
123    [ case "${enableval}" in
124         no) enabled=no; ENABLE_RELEASE=0 ;;
125         *) ;;
126    esac],
127)
128AC_MSG_RESULT($enabled)
129AC_SUBST(ENABLE_RELEASE)
130
131# Don't use the default C/CXXFLags
132: ${CFLAGS=""}
133: ${CXXFLAGS=""}
134
135# Checks for compilers
136AC_PROG_CC([clang gcc cc c99 c89 xlc_r xlc cl.exe icc])
137# Make sure that we try clang++ first, which provides C++11 support.
138# The g++ compiler is less likely to support C++11.
139AC_PROG_CXX([clang++ g++ c++ gpp xlC_r xlC aCC CC cxx cc++ cl.exe icc FCC KCC RCC])
140
141# pkg-config is needed for harfbuzz support
142PKG_PROG_PKG_CONFIG([0.20])
143PKG_CHECK_MODULES(ICULEHB, icu-le-hb, have_icu_le_hb=true, :)
144
145# Ensure that if CXXFLAGS/CFLAGS were not set when calling configure, set it correctly based on (enable/disable) debug or release option
146# The release mode use is the default one for autoconf
147if test "$GCC" = yes; then
148    if test "$CFLAGS" = ""; then
149        if test "$ENABLE_DEBUG" = 1; then
150            CFLAGS=-g
151        fi
152        if test "$ENABLE_RELEASE" = 1; then
153            CFLAGS="$CFLAGS -O2"
154        fi
155    fi
156    if test "$CXXFLAGS" = ""; then
157        if test "$ENABLE_DEBUG" = 1; then
158            CXXFLAGS=-g
159        fi
160        if test "$ENABLE_RELEASE" = 1; then
161            CXXFLAGS="$CXXFLAGS -O2"
162        fi
163    fi
164fi
165
166AC_PROG_CPP
167
168AC_PROG_INSTALL
169
170AC_SUBST(cross_compiling)
171
172dnl use the pld hack to get ac_fn_cxx_try_link defined globally and not local
173AC_LANG_PUSH([C++])
174AC_LINK_IFELSE([AC_LANG_PROGRAM()])
175AC_LANG_POP([C++])
176
177# make sure install is relative to srcdir - if a script
178if test "$srcdir" = "."; then
179  # If srcdir isn't just ., then (srcdir) is already prepended.
180  if test "${ac_install_sh}" = "${INSTALL}"; then
181   INSTALL="\\\$(top_srcdir)/${ac_install_sh}"
182  fi
183fi
184
185#AC_CHECK_PROG(AUTOCONF, autoconf, autoconf, true)
186#AC_CHECK_PROG(STRIP, strip, strip, true)
187
188# Check for the platform make
189AC_PATH_PROGS(U_MAKE, gmake gnumake, make)
190AC_SUBST(U_MAKE)
191
192
193AC_ARG_WITH(cross-build,
194	[  --with-cross-build=dir specify an absolute path to the build directory of an ICU built for the current platform [default=no cross dir]],
195	[cross_buildroot="${withval}"],
196        [cross_buildroot=""])
197
198if test "X$cross_buildroot" = "X"; then
199    if test "$cross_compiling" = "yes"; then
200        AC_MSG_ERROR([Error! Cross compiling but no --with-cross-build option specified - please supply the path to an executable ICU's build root])
201	dnl '
202    fi
203else
204    if test -f "${cross_buildroot}/config/icucross.mk"; then
205        AC_MSG_RESULT([Using cross buildroot: $cross_buildroot])
206    else
207        if test -d "${cross_buildroot}"; then
208            AC_MSG_ERROR([${cross_buildroot}/config/icucross.mk not found. Please build ICU in ${cross_buildroot} first.])
209        else
210            AC_MSG_ERROR([No such directory ${cross_buildroot} supplied as the argument to --with-cross-build. Use an absolute path.])
211        fi
212    fi
213fi
214AC_SUBST(cross_buildroot)
215
216# Check for doxygen to generate documentation
217AC_PATH_PROG(DOXYGEN,doxygen,,$PATH:/usr/local/bin:/usr/bin)
218
219# Check that the linker is usable
220ICU_PROG_LINK
221
222# Determine the executable suffix
223# We don't use AC_EXEEXT because some compilers output separate debugging
224# files, which confuses the AC_EXEEXT macro.
225AC_MSG_CHECKING(checking for executable suffix)
226case "${host}" in
227    *-*-cygwin*|*-*-mingw*)  EXEEXT=.exe ;;
228    *)      EXEEXT="" ;;
229esac
230ac_exeext=$EXEEXT
231AC_MSG_RESULT($EXEEXT)
232AC_SUBST(EXEEXT)
233
234# Determine how strict we want to be when compiling
235AC_CHECK_STRICT_COMPILE
236
237# Check if we can build and use 64-bit libraries
238AC_CHECK_64BIT_LIBS
239AC_SUBST(ARFLAGS)
240AC_SUBST(COMPILE_LINK_ENVVAR)
241
242# Determine the Makefile fragment
243ICU_CHECK_MH_FRAG
244
245# Checks for libraries and other host specific stuff
246# On HP/UX, don't link to -lm from a shared lib because it isn't
247#  PIC (at least on 10.2)
248case "${host}" in
249	*-*-hpux*) 	AC_CHECK_LIB(m, floor, LIB_M="-lm") ;;
250
251	*) 		AC_CHECK_LIB(m, floor)
252			LIB_M="" ;;
253esac
254AC_SUBST(LIB_M)
255
256# Check whether to build shared libraries
257AC_MSG_CHECKING([whether to build shared libraries])
258enabled=no
259AC_ARG_ENABLE(shared,
260    [  --enable-shared         build shared libraries [default=yes]],
261    [ case "${enableval}" in
262	     yes|"") enabled=yes; ENABLE_SHARED=YES ;;
263	     no);;
264	     *) ;;
265    esac],
266    [enabled=yes; ENABLE_SHARED=YES]
267)
268AC_MSG_RESULT($enabled)
269AC_SUBST(ENABLE_SHARED)
270
271# Check whether to build static libraries
272AC_MSG_CHECKING([whether to build static libraries])
273enabled=no
274AC_ARG_ENABLE(static,
275    [  --enable-static         build static libraries [default=no]],
276    [ case "${enableval}" in
277	     yes|"") enabled=yes; ENABLE_STATIC=YES ;;
278	     no) ;;
279	     *) ;;
280    esac],
281)
282AC_MSG_RESULT($enabled)
283AC_SUBST(ENABLE_STATIC)
284
285# When building release static library, there might be some optimization flags we can use
286if test "$ENABLE_STATIC" = "YES"; then
287    if test "$ENABLE_SHARED" != "YES"; then
288        if test "$ENABLE_RELEASE" = 1; then
289            AC_MSG_CHECKING([whether we can use static library optimization option])
290            CHECK_STATIC_OPT_FLAG=no
291
292            OLD_CPPFLAGS="${CPPFLAGS}"
293            OLD_LDFLAGS="${LDFLAGS}"
294
295            case "${host}" in
296            *-linux*|i*86-*-*bsd*|i*86-pc-gnu)
297                if test "$GCC" = yes; then
298                    CPPFLAGS="${CPPFLAGS} -ffunction-sections -fdata-sections"
299                    LDFLAGS="${LDFLAGS} -Wl,--gc-sections"
300                fi
301                ;;
302            *)
303                ;;
304            esac
305
306            AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [CHECK_STATIC_OPT_FLAG=yes], [CHECK_STATIC_OPT_FLAG=no])
307            AC_MSG_RESULT($CHECK_STATIC_OPT_FLAG)
308            if test "$CHECK_STATIC_OPT_FLAG" = no; then
309                CPPFLAGS="${OLD_CPPFLAGS}"
310                LDFLAGS="${OLD_LDFLAGS}"
311            fi
312        fi
313    fi
314fi
315
316
317# Check whether to enable auto cleanup of libraries
318AC_MSG_CHECKING([whether to enable auto cleanup of libraries])
319enabled=no
320UCLN_NO_AUTO_CLEANUP=1
321AC_ARG_ENABLE(auto-cleanup,
322    [  --enable-auto-cleanup   enable auto cleanup of libraries [default=no]],
323    [ case "${enableval}" in
324         yes) enabled=yes;
325         CONFIG_CPPFLAGS="$CONFIG_CPPFLAGS -DUCLN_NO_AUTO_CLEANUP=0";
326         UCLN_NO_AUTO_CLEANUP=0
327          ;;
328         *) ;;
329    esac],
330)
331AC_MSG_RESULT($enabled)
332AC_SUBST(UCLN_NO_AUTO_CLEANUP)
333
334# MSVC floating-point option
335MSVC_RELEASE_FLAG=""
336if test $enabled = yes
337then
338    if test $icu_cv_host_frag = mh-cygwin-msvc -o $icu_cv_host_frag = mh-msys-msvc
339    then
340        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
341    #if defined _MSC_VER && _MSC_VER >= 1400
342    #else
343    Microsoft Visual C++ < 2005
344    #endif
345        ]], [[]])],[MSVC_RELEASE_FLAG="/fp:precise"],[MSVC_RELEASE_FLAG="/Op"])
346
347        CFLAGS="${CFLAGS} ${MSVC_RELEASE_FLAG}"
348        CXXFLAGS="${CXXFLAGS} ${MSVC_RELEASE_FLAG}"
349    fi
350fi
351
352# Check whether to enabled draft APIs
353AC_MSG_CHECKING([whether to enable draft APIs])
354enabled=yes
355U_DEFAULT_SHOW_DRAFT=1
356AC_ARG_ENABLE(draft,
357    [  --enable-draft          enable draft APIs (and internal APIs) [default=yes]],
358    [ case "${enableval}" in
359         no) enabled=no; U_DEFAULT_SHOW_DRAFT=0;
360         CONFIG_CPPFLAGS="$CONFIG_CPPFLAGS -DU_DEFAULT_SHOW_DRAFT=0"
361          ;;
362         *) ;;
363    esac],
364)
365AC_MSG_RESULT($enabled)
366# Make sure that we can use draft API in ICU.
367if test "$U_DEFAULT_SHOW_DRAFT" = 0; then
368    CONFIG_CPPFLAGS="$CONFIG_CPPFLAGS -DU_SHOW_DRAFT_API -DU_SHOW_INTERNAL_API"
369fi
370AC_SUBST(U_DEFAULT_SHOW_DRAFT)
371
372AC_PROG_RANLIB
373
374# need sed
375AC_PROG_SED
376
377# look for 'ar' the proper way
378AC_CHECK_TOOL(AR, ar, false)
379
380AC_MSG_CHECKING([whether to enable renaming of symbols])
381enabled=yes
382U_DISABLE_RENAMING=0
383AC_ARG_ENABLE(renaming,
384    [  --enable-renaming       add a version suffix to symbols [default=yes]],
385    [ case "${enableval}" in
386	     yes|"") enabled=yes ;;
387	     no) enabled=no; U_DISABLE_RENAMING=1;
388             UCONFIG_CPPFLAGS="${UCONFIG_CPPFLAGS} -DU_DISABLE_RENAMING=1"
389              ;;
390	     *) ;;
391    esac],
392)
393AC_MSG_RESULT($enabled)
394AC_SUBST(U_DISABLE_RENAMING)
395
396AC_MSG_CHECKING([whether to enable function and data tracing])
397enabled=no
398U_ENABLE_TRACING=0
399AC_ARG_ENABLE(tracing,
400    [  --enable-tracing        enable function and data tracing [default=no]],
401    [ case "${enableval}" in
402	     yes|"") enabled=yes;
403                     CONFIG_CPPFLAGS="$CONFIG_CPPFLAGS -DU_ENABLE_TRACING=1";
404                     U_ENABLE_TRACING=1 ;;
405	     no) enabled=no; U_ENABLE_TRACING=0 ;;
406	     *) ;;
407    esac],
408)
409AC_MSG_RESULT($enabled)
410AC_SUBST(U_ENABLE_TRACING)
411
412# check if elf.h is present.
413AC_CHECK_HEADERS([elf.h])
414if test "x$ac_cv_header_elf_h" = "xyes"; then
415    CONFIG_CPPFLAGS="$CONFIG_CPPFLAGS -DU_HAVE_ELF_H=1";
416fi
417
418# Enable/disable plugins
419AC_ARG_ENABLE(plugins,
420	[  --enable-plugins        enable plugins [default=no]],
421	[case "${enableval}" in
422		yes) plugins=true ;;
423		no)  plugins=false ;;
424		*) AC_MSG_ERROR(bad value ${enableval} for --enable-plugins) ;;
425		esac],
426	plugins=false)
427ICU_CONDITIONAL(PLUGINS, test "$plugins" = true)
428
429if test "x$plugins" = "xtrue"; then
430   UCONFIG_CPPFLAGS="$UCONFIG_CPPFLAGS -DUCONFIG_ENABLE_PLUGINS=1"
431fi
432
433
434U_ENABLE_DYLOAD=1
435enable=yes
436AC_MSG_CHECKING([whether to enable dynamic loading of plugins. Ignored if plugins disabled.])
437AC_ARG_ENABLE(dyload,
438    [  --disable-dyload        disable dynamic loading [default=no]],
439    [ case "${enableval}" in
440	     yes|"")
441		     U_ENABLE_DYLOAD=1
442                     enable=yes
443                     ;;
444	     no)
445	     	 U_ENABLE_DYLOAD=0;
446                 enable=no;
447                 CONFIG_CPPFLAGS="$CONFIG_CPPFLAGS -DU_ENABLE_DYLOAD=0";
448                 ;;
449	     *) ;;
450    esac],
451)
452AC_MSG_RESULT($enable)
453AC_SUBST(U_ENABLE_DYLOAD)
454
455if test "$enable" = "yes"; then
456   AC_CHECK_HEADERS([dlfcn.h])
457   #AC_MSG_RESULT($enabled)
458   AC_SEARCH_LIBS([dlopen], [dl])
459   AC_CHECK_FUNCS([dlopen])
460
461   if test "x$ac_cv_func_dlopen" != xyes; then
462      CONFIG_CPPFLAGS="$CONFIG_CPPFLAGS -DHAVE_DLOPEN=0"
463   fi
464fi
465
466# Check for miscellanous functions.
467# So, use for putil / tools only.
468# Note that this will generate HAVE_GETTIMEOFDAY, not U_HAVE_GETTIMEOFDAY
469AC_CHECK_FUNCS([gettimeofday])
470
471
472# Check whether to use the evil rpath or not
473AC_ARG_ENABLE(rpath,
474    [  --enable-rpath          use rpath when linking [default is only if necessary]],
475    [ case "${enableval}" in
476	     yes|"") ENABLE_RPATH=YES ;;
477	     no) ;;
478	     *) ;;
479    esac],
480    [ENABLE_RPATH=NO]
481)
482AC_SUBST(ENABLE_RPATH)
483
484
485
486AC_LANG_PUSH([C++])
487AC_MSG_CHECKING([[if we have a C++ compiler]])
488AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[cxx_okay=yes],[cxx_okay=no])
489if test $cxx_okay = yes
490then
491	AC_MSG_RESULT([[Good]])
492else
493	AC_MSG_RESULT([[no]])
494	AC_MSG_ERROR([[C++ compiler $CXX does not work or no compiler found]])
495fi
496
497if [[ "$GXX" = yes ]]; then
498    # if CXXFLAGS does not have a "-std=" setting, set it now to -std=c++11,
499    # and check that the compiler still works.
500    if ! echo "$CXXFLAGS" | grep '\-std=' >/dev/null 2>&1; then
501        OLD_CXXFLAGS="${CXXFLAGS}"
502        CXXFLAGS="$CXXFLAGS -std=c++11"
503        AC_MSG_CHECKING([[if we have a C++11 compiler]])
504        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[cxx11_okay=yes],[cxx11_okay=no])
505        AC_MSG_RESULT($cxx11_okay)
506        if [[ $cxx11_okay = yes ]]; then
507            AC_MSG_NOTICE([Adding CXXFLAGS option -std=c++11])
508            UCONFIG_CXXFLAGS="${UCONFIG_CXXFLAGS} -std=c++11"
509        else
510            CXXFLAGS="$OLD_CXXFLAGS"
511        fi
512        case "${host}" in
513        *-*-solaris*)
514            CXXFLAGS="$OLD_CXXFLAGS"
515            ;;
516        esac
517    fi
518fi
519
520AC_MSG_CHECKING([[if #include <atomic> works]])
521AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <atomic>]], [[]])], [ac_cv_header_atomic=yes], [ac_cv_header_atomic=no])
522AC_MSG_RESULT($ac_cv_header_atomic)
523if test $ac_cv_header_atomic = yes
524then
525	U_HAVE_ATOMIC=1
526else
527        U_HAVE_ATOMIC=0
528fi
529# Make this available via CPPFLAGS
530CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_ATOMIC=${U_HAVE_ATOMIC}"
531AC_SUBST(U_HAVE_ATOMIC)
532
533AC_LANG_POP([C++])
534
535# Always build ICU with multi-threading support.
536OLD_LIBS=${LIBS}
537
538# For Compaq Tru64 (OSF1), we must look for pthread_attr_init
539# and must do this before seaching for pthread_mutex_destroy, or
540# we will pick up libpthreads.so not libpthread.so
541# If this fails, then we must test for HPUX specials, before
542# moving on to a more generic test
543
544AC_CHECK_LIB(pthread, pthread_attr_init)
545if test $ac_cv_lib_pthread_pthread_attr_init = yes; then
546  :
547else
548  # Locate the right library for POSIX threads. We look for the
549  # symbols in the libraries first, because on Solaris libc provides
550  # pthread_create but libpthread has the real code :(
551  # AIX uses libpthreads instead of libpthread, and HP/UX uses libpthread
552  # FreeBSD users may need libpthread if they do not have libc_r.
553
554  AC_SEARCH_LIBS_FIRST(pthread_mutex_destroy, pthread pthreads c_r )
555
556  if test "$ac_cv_search_pthread_mutex_destroy" != no; then
557    :
558  else
559    # For HP 11
560    AC_CHECK_LIB(pthread, pthread_mutex_init)
561    if test $ac_cv_lib_pthread_pthread_mutex_init = yes; then
562      :
563    fi
564  fi
565
566  AC_CHECK_FUNC(pthread_mutex_lock)
567
568  if test $ac_cv_func_pthread_mutex_lock = yes; then
569    :
570  fi
571fi
572# Check to see if we are using CygWin with MSVC
573case "${host}" in
574*-pc-cygwin*|*-pc-mingw*)
575  # For gcc, the thread options are set by mh-mingw/mh-cygwin
576  # For msvc, the thread options are set by runConfigureICU
577  :
578  ;;
579*-*-hpux*)
580  # Add -mt because it does several nice things on newer compilers.
581  case "${icu_cv_host_frag}" in
582    mh-hpux-acc)
583      OLD_CXXFLAGS="${CXXFLAGS}"
584      CXXFLAGS="${CXXFLAGS} -mt"
585      if test x"`${CXX} ${CXXFLAGS} 2>&1`" != x""; then
586         CXXFLAGS="${OLD_CXXFLAGS}"
587      else
588         UCONFIG_CXXFLAGS="${UCONFIG_CXXFLAGS} -mt"
589      fi
590    ;;
591  esac
592  ;;
593*-*-solaris*)
594  case "${icu_cv_host_frag}" in
595    mh-solaris)
596         LIBS="${LIBS} -mt"
597    ;;
598  esac
599  ;;
600esac
601
602AC_ARG_ENABLE(weak-threads,
603	[  --enable-weak-threads   weakly reference the threading library [default=no]],
604	[case "${enableval}" in
605		yes)
606            LIB_THREAD="${LIBS%${OLD_LIBS}}"
607            LIBS=${OLD_LIBS}
608            ;;
609		no)  ;;
610		*) AC_MSG_ERROR(bad value ${enableval} for --enable-weak-threads) ;;
611		esac])
612AC_SUBST(LIB_THREAD)
613
614# Check for mmap()
615
616# The AC_FUNC_MMAP macro doesn't work properly.  It seems to be too specific.
617# Do this check instead.
618HAVE_MMAP=0
619AC_MSG_CHECKING([for mmap])
620AC_CACHE_VAL(ac_cv_func_mmap_ok,
621    [AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <unistd.h>
622#include <sys/mman.h>
623#include <sys/stat.h>
624#include <fcntl.h>], [mmap((void *)0, 0, PROT_READ, 0, 0, 0);])],[ac_cv_func_mmap_ok=yes],[ac_cv_func_mmap_ok=no])] )
625AC_MSG_RESULT($ac_cv_func_mmap_ok)
626if test $ac_cv_func_mmap_ok = yes
627then
628    HAVE_MMAP=1
629else
630    CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_MMAP=0"
631fi
632AC_SUBST(HAVE_MMAP)
633
634AC_MSG_CHECKING([for genccode assembly])
635
636# Check to see if genccode can generate simple assembly.
637GENCCODE_ASSEMBLY=
638case "${host}" in
639*-linux*|*-kfreebsd*-gnu*|i*86-*-*bsd*|i*86-pc-gnu)
640    if test "$GCC" = yes; then
641        # We're using gcc, and the simple -a gcc command line works for genccode
642        GENCCODE_ASSEMBLY="-a gcc"
643    fi ;;
644i*86-*-solaris*)
645    if test "$GCC" = yes; then
646        # When using gcc, look if we're also using GNU as.
647        # When using GNU as, the simple -a gcc command line works for genccode.
648        asv=`"${CC}" -print-prog-name=as 2>/dev/null`
649        asv=`"${asv}" --version 2>/dev/null`
650        case "X${asv}" in
651        X*GNU*) GENCCODE_ASSEMBLY="-a gcc" ;;
652        X*) GENCCODE_ASSEMBLY="-a sun-x86" ;;
653        esac
654        unset asv
655    else
656        GENCCODE_ASSEMBLY="-a sun-x86"
657    fi ;;
658sparc-*-solaris*)
659    GENCCODE_ASSEMBLY="-a sun"
660    ;;
661ia64-*-hpux*)
662# There has been some issues with building ICU data on HPUX ia64 aCC
663# when using the assemble code setting below.  For now, build without
664# assemble code for this platform.  This will increase the build time.
665#    GENCCODE_ASSEMBLY="-a aCC-ia64"
666    ;;
667esac
668AC_SUBST(GENCCODE_ASSEMBLY)
669
670AC_MSG_RESULT($GENCCODE_ASSEMBLY)
671
672# Checks for header files
673AC_CHECK_HEADERS(inttypes.h)
674if test $ac_cv_header_inttypes_h = no; then
675 U_HAVE_INTTYPES_H=0
676 CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_INTTYPES_H=0"
677else
678 U_HAVE_INTTYPES_H=1
679fi
680if test "$CC" = ccc; then
681 AC_MSG_RESULT("C compiler set to CCC ${CC}" )
682 case "${host}" in
683        alpha*-*-*) U_HAVE_INTTYPES_H=0;
684        CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_INTTYPES_H=0"
685 esac
686fi
687
688AC_SUBST(U_HAVE_INTTYPES_H)
689
690AC_CHECK_HEADERS(dirent.h)
691if test $ac_cv_header_dirent_h = no; then
692 U_HAVE_DIRENT_H=0
693 CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_DIRENT_H=0"
694else
695 U_HAVE_DIRENT_H=1
696fi
697
698AC_SUBST(U_HAVE_DIRENT_H)
699
700# Check for endianness
701AC_C_BIGENDIAN()
702if test $ac_cv_c_bigendian = no; then
703U_IS_BIG_ENDIAN=0
704U_ENDIAN_CHAR="l"
705else
706U_IS_BIG_ENDIAN=1
707U_ENDIAN_CHAR="b"
708fi
709AC_SUBST(U_IS_BIG_ENDIAN)
710
711# Do various POSIX related checks
712U_HAVE_NL_LANGINFO_CODESET=0
713U_NL_LANGINFO_CODESET=-1
714AC_CHECK_FUNC(nl_langinfo,[U_HAVE_NL_LANGINFO=1],[U_HAVE_NL_LANGINFO=0])
715dnl AC_SUBST(U_HAVE_NL_LANGINFO)
716if test $U_HAVE_NL_LANGINFO -eq 1; then
717  AC_CACHE_CHECK([for nl_langinfo's argument to obtain the codeset],
718  ac_cv_nl_langinfo_codeset,
719  [ac_cv_nl_langinfo_codeset="unknown"
720  for a in CODESET _NL_CTYPE_CODESET_NAME; do
721  AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <langinfo.h>]], [[nl_langinfo($a);]])],[ac_cv_nl_langinfo_codeset="$a"; break],[])]
722  done)
723  if test x$ac_cv_nl_langinfo_codeset != xunknown
724  then
725      U_HAVE_NL_LANGINFO_CODESET=1
726      U_NL_LANGINFO_CODESET=$ac_cv_nl_langinfo_codeset
727      if test "x${ac_cv_nl_langinfo_codeset}" != "xCODESET"
728      then
729        CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DNL_LANGINFO_CODESET=${ac_cv_nl_langinfo_codeset}"
730      fi
731  else
732      CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_NL_LANGINFO_CODESET=0"
733  fi
734fi
735AC_SUBST(U_HAVE_NL_LANGINFO_CODESET)
736AC_SUBST(U_NL_LANGINFO_CODESET)
737
738# Namespace support checks
739AC_LANG(C++)
740AC_MSG_CHECKING([for namespace support])
741AC_CACHE_VAL(ac_cv_namespace_ok,
742    [AC_LINK_IFELSE([AC_LANG_PROGRAM([namespace x_version {void f(){}}
743    namespace x = x_version;
744    using namespace x_version;
745    ], [f();])],[ac_cv_namespace_ok=yes],[ac_cv_namespace_ok=no])] )
746AC_MSG_RESULT($ac_cv_namespace_ok)
747if test $ac_cv_namespace_ok = no
748then
749    AC_MSG_ERROR(Namespace support is required to build ICU.)
750fi
751
752AC_MSG_CHECKING([for properly overriding new and delete])
753U_OVERRIDE_CXX_ALLOCATION=0
754U_HAVE_PLACEMENT_NEW=0
755AC_CACHE_VAL(ac_cv_override_cxx_allocation_ok,
756    [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
757    class UMemory {
758    public:
759    void *operator new(size_t size) {return malloc(size);}
760    void *operator new[](size_t size) {return malloc(size);}
761    void operator delete(void *p) {free(p);}
762    void operator delete[](void *p) {free(p);}
763    };
764    ]], [])],[ac_cv_override_cxx_allocation_ok=yes],[ac_cv_override_cxx_allocation_ok=no])] )
765AC_MSG_RESULT($ac_cv_override_cxx_allocation_ok)
766if test $ac_cv_override_cxx_allocation_ok = yes
767then
768    U_OVERRIDE_CXX_ALLOCATION=1
769    AC_MSG_CHECKING([for placement new and delete])
770    AC_CACHE_VAL(ac_cv_override_placement_new_ok,
771        [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
772        class UMemory {
773        public:
774        void *operator new(size_t size) {return malloc(size);}
775        void *operator new[](size_t size) {return malloc(size);}
776        void operator delete(void *p) {free(p);}
777        void operator delete[](void *p) {free(p);}
778        void * operator new(size_t, void *ptr) { return ptr; }
779        void operator delete(void *, void *) {}
780        };
781        ]], [])],[ac_cv_override_placement_new_ok=yes],[ac_cv_override_placement_new_ok=no])] )
782    AC_MSG_RESULT($ac_cv_override_placement_new_ok)
783    if test $ac_cv_override_placement_new_ok = yes
784    then
785        U_HAVE_PLACEMENT_NEW=1
786    else
787        CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_PLACEMENT_NEW=0"
788    fi
789else
790    CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_OVERRIDE_CXX_ALLOCATION=0"
791fi
792AC_SUBST(U_OVERRIDE_CXX_ALLOCATION)
793AC_SUBST(U_HAVE_PLACEMENT_NEW)
794
795AC_LANG(C)
796AC_CHECK_FUNC(popen)
797if test x$ac_cv_func_popen = xyes
798then
799     U_HAVE_POPEN=1
800else
801     CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_POPEN=0"
802     U_HAVE_POPEN=0
803fi
804AC_SUBST(U_HAVE_POPEN)
805
806AC_CHECK_FUNC(tzset)
807U_HAVE_TZSET=0
808if test x$ac_cv_func_tzset = xyes
809then
810    U_TZSET=tzset
811    U_HAVE_TZSET=1
812else
813    AC_CHECK_FUNC(_tzset)
814    if test x$ac_cv_func__tzset = xyes
815    then
816        U_TZSET=_tzset
817        U_HAVE_TZSET=1
818    else
819      CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_TZSET=0"
820    fi
821fi
822AC_SUBST(U_HAVE_TZSET)
823AC_SUBST(U_TZSET)
824
825U_HAVE_TZNAME=0
826AC_CACHE_CHECK(for tzname,ac_cv_var_tzname,
827[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#ifndef _XOPEN_SOURCE
828#define _XOPEN_SOURCE
829#endif
830#include <stdlib.h>
831#include <time.h>
832#ifndef tzname /* For SGI.  */
833extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
834#endif]], [atoi(*tzname);])],[ac_cv_var_tzname=yes],[ac_cv_var_tzname=no])])
835if test $ac_cv_var_tzname = yes; then
836  U_TZNAME=tzname
837  U_HAVE_TZNAME=1
838else
839  AC_CACHE_CHECK(for _tzname,ac_cv_var__tzname,
840  [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
841  #include <time.h>
842  extern char *_tzname[];]], [atoi(*_tzname);])],[ac_cv_var__tzname=yes],[ac_cv_var__tzname=no])])
843    if test $ac_cv_var__tzname = yes; then
844      U_TZNAME=_tzname
845      U_HAVE_TZNAME=1
846    else
847     CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_TZNAME=0"
848    fi
849fi
850AC_SUBST(U_HAVE_TZNAME)
851AC_SUBST(U_TZNAME)
852
853AC_CACHE_CHECK(for timezone,ac_cv_var_timezone,
854[AC_LINK_IFELSE([AC_LANG_PROGRAM([#ifndef _XOPEN_SOURCE
855#define _XOPEN_SOURCE
856#endif
857#include <time.h>
858], [[timezone = 1;]])],[ac_cv_var_timezone=yes],[ac_cv_var_timezone=no])])
859U_HAVE_TIMEZONE=0
860if test $ac_cv_var_timezone = yes; then
861  U_TIMEZONE=timezone
862  U_HAVE_TIMEZONE=1
863else
864  AC_CACHE_CHECK(for __timezone,ac_cv_var___timezone,
865  [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[__timezone = 1;]])],[ac_cv_var___timezone=yes],[ac_cv_var___timezone=no])])
866  if test $ac_cv_var___timezone = yes; then
867    U_TIMEZONE=__timezone
868    U_HAVE_TIMEZONE=1
869  else
870    AC_CACHE_CHECK(for _timezone,ac_cv_var__timezone,
871    [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[_timezone = 1;]])],[ac_cv_var__timezone=yes],[ac_cv_var__timezone=no])])
872    if test $ac_cv_var__timezone = yes; then
873      U_TIMEZONE=_timezone
874      U_HAVE_TIMEZONE=1
875    else
876     CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_TIMEZONE=0"
877    fi
878  fi
879fi
880AC_SUBST(U_HAVE_TIMEZONE)
881AC_SUBST(U_TIMEZONE)
882
883AC_CHECK_FUNC(strtod_l)
884if test x$ac_cv_func_strtod_l = xyes
885then
886    U_HAVE_STRTOD_L=1
887    AC_CHECK_HEADER(xlocale.h)
888    if test "$ac_cv_header_xlocale_h" = yes; then
889      U_HAVE_XLOCALE_H=1
890      CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=1 -DU_HAVE_XLOCALE_H=1"
891    else
892      U_HAVE_XLOCALE_H=0
893      CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=1 -DU_HAVE_XLOCALE_H=0"
894    fi
895else
896    CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=0"
897    U_HAVE_STRTOD_L=0
898fi
899AC_SUBST(U_HAVE_STRTOD_L)
900
901# Checks for typedefs
902AC_CHECK_TYPE(int8_t,signed char)
903AC_CHECK_TYPE(uint8_t,unsigned char)
904AC_CHECK_TYPE(int16_t,signed short)
905AC_CHECK_TYPE(uint16_t,unsigned short)
906AC_CHECK_TYPE(int32_t,signed long)
907AC_CHECK_TYPE(uint32_t,unsigned long)
908AC_CHECK_TYPE(int64_t,signed long long)
909AC_CHECK_TYPE(uint64_t,unsigned long long)
910
911if test $ac_cv_type_int8_t = no; then
912CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_INT8_T=0"
913fi
914
915if test $ac_cv_type_uint8_t = no; then
916CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_UINT8_T=0"
917fi
918
919if test $ac_cv_type_int16_t = no; then
920CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_INT16_T=0"
921fi
922
923if test $ac_cv_type_uint16_t = no; then
924CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_UINT16_T=0"
925fi
926
927if test $ac_cv_type_int32_t = no; then
928CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_INT32_T=0"
929fi
930
931if test $ac_cv_type_uint32_t = no; then
932CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_UINT32_T=0"
933fi
934
935if test $ac_cv_type_int64_t = no; then
936CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_INT64_T=0"
937fi
938
939if test $ac_cv_type_uint64_t = no; then
940CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_UINT64_T=0"
941fi
942
943# Do various wchar_t related checks
944AC_CHECK_HEADER(wchar.h)
945if test "$ac_cv_header_wchar_h" = no
946then
947    U_HAVE_WCHAR_H=0
948    U_HAVE_WCSCPY=0
949    CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_WCHAR_H=0 -DU_HAVE_WCSCPY=0"
950else
951    AC_DEFINE([HAVE_WCHAR_H], [1], [wchar.h was found.])
952    U_HAVE_WCHAR_H=1
953    # Some broken systems have wchar.h but not some of its functions...
954    AC_SEARCH_LIBS(wcscpy, wcs w)
955    if test "$ac_cv_search_wcscpy" != no; then
956      U_HAVE_WCSCPY=1
957    else
958      U_HAVE_WCSCPY=0
959      CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_WCSCPY=0"
960    fi
961fi
962AC_SUBST(U_HAVE_WCHAR_H)
963AC_SUBST(U_HAVE_WCSCPY)
964
965AC_CHECK_SIZEOF([wchar_t], 0, [
966#if STDC_HEADERS
967#include <stddef.h>
968#endif
969#include <stdlib.h>
970#if HAVE_WCHAR_H
971#include <string.h>
972#include <wchar.h>
973#endif])
974U_SIZEOF_WCHAR_T=$ac_cv_sizeof_wchar_t
975# We do this check to verify that everything is okay.
976if test $U_SIZEOF_WCHAR_T = 0; then
977    if test $U_HAVE_WCHAR_H=1; then
978       AC_MSG_ERROR(There is wchar.h but the size of wchar_t is 0)
979    fi
980fi
981
982AC_MSG_CHECKING([for UTF-16 string literal support])
983U_CHECK_UTF16_STRING=1
984CHECK_UTF16_STRING_RESULT="unknown"
985
986case "${host}" in
987*-*-aix*|powerpc64-*-linux*)
988    if test "$GCC" = no; then
989        OLD_CFLAGS="${CFLAGS}"
990        OLD_CXXFLAGS="${CXXFLAGS}"
991        CFLAGS="${CFLAGS} -qutf"
992        CXXFLAGS="${CXXFLAGS} -qutf"
993        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[const unsigned short hello[] = u"hello";]], [[]])],[U_CHECK_UTF16_STRING=1],[U_CHECK_UTF16_STRING=0])
994        if test "$U_CHECK_UTF16_STRING" = 0; then
995            CFLAGS="${OLD_CFLAGS}"
996            CXXFLAGS="${OLD_CXXFLAGS}"
997        else
998            UCONFIG_CXXFLAGS="${UCONFIG_CXXFLAGS} -qutf"
999            CHECK_UTF16_STRING_RESULT="-qutf"
1000        fi
1001    fi
1002    ;;
1003*-*-solaris*)
1004    if test "$GCC" = no; then
1005        OLD_CFLAGS="${CFLAGS}"
1006        OLD_CXXFLAGS="${CXXFLAGS}"
1007        CFLAGS="${CFLAGS} -xustr=ascii_utf16_ushort"
1008        CXXFLAGS="${CXXFLAGS} -xustr=ascii_utf16_ushort"
1009        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[const unsigned short hello[] = U"hello";]], [[]])],[U_CHECK_UTF16_STRING=1],[U_CHECK_UTF16_STRING=0])
1010        if test "$U_CHECK_UTF16_STRING" = 0; then
1011            CFLAGS="${OLD_CFLAGS}"
1012            CXXFLAGS="${OLD_CXXFLAGS}"
1013        else
1014            CHECK_UTF16_STRING_RESULT="-xustr=ascii_utf16_ushort"
1015            UCONFIG_CXXFLAGS="${UCONFIG_CXXFLAGS} -xustr=ascii_utf16_ushort"
1016            UCONFIG_CFLAGS="${UCONFIG_CFLAGS} -xustr=ascii_utf16_ushort"
1017            # Since we can't detect the availability of this UTF-16 syntax at compile time,
1018            # we depend on configure telling us that we can use it.
1019            # Since we can't ensure ICU users use -xustr=ascii_utf16_ushort,
1020            # we only use this macro within ICU.
1021            # If an ICU user uses icu-config, this feature will be enabled.
1022            CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_CHECK_UTF16_STRING=1"
1023            U_CHECK_UTF16_STRING=0
1024        fi
1025    fi
1026    ;;
1027*-*-hpux*)
1028    if test "$GCC" = no; then
1029        # The option will be detected at compile time without additional compiler options.
1030        CHECK_UTF16_STRING_RESULT="available"
1031    fi
1032    ;;
1033*-*-cygwin)
1034    # wchar_t can be used
1035    CHECK_UTF16_STRING_RESULT="available"
1036    ;;
1037*)
1038    ;;
1039esac
1040
1041# GCC >= 4.4 supports UTF16 string literals. The CFLAGS and CXXFLAGS may change in the future.
1042if test "$CHECK_UTF16_STRING_RESULT" = "unknown"; then
1043    if test "$GCC" = yes; then
1044        OLD_CFLAGS="${CFLAGS}"
1045        CFLAGS="${CFLAGS} -std=gnu99"
1046        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1047static const char16_t test[] = u"This is a UTF16 literal string.";
1048        ]], [[]])],[CC_UTF16_STRING=1],[CC_UTF16_STRING=0])
1049        if test "$CC_UTF16_STRING" = 1; then
1050            UCONFIG_CFLAGS="${UCONFIG_CFLAGS} -std=gnu99"
1051            CHECK_UTF16_STRING_RESULT="C only";
1052        else
1053            CFLAGS="${OLD_CFLAGS}"
1054        fi
1055    fi
1056    if test "$GXX" = yes; then
1057        # -Wno-return-type-c-linkage is desired so that stable ICU API is not warned about.
1058        AC_LANG_PUSH([C++])
1059        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1060static const char16_t test[] = u"This is a UTF16 literal string.";
1061        ]], [[]])],[CXX_UTF16_STRING=1],[CXX_UTF16_STRING=0])
1062        AC_LANG_POP([C++])
1063        if test "$CXX_UTF16_STRING" = 1; then
1064            if test "$CC_UTF16_STRING" = 1; then
1065                CHECK_UTF16_STRING_RESULT="available";
1066            else
1067                CHECK_UTF16_STRING_RESULT="C++ only";
1068            fi
1069        fi
1070    fi
1071fi
1072AC_MSG_RESULT($CHECK_UTF16_STRING_RESULT)
1073
1074# Enable/disable extras
1075AC_ARG_ENABLE(extras,
1076	[  --enable-extras         build ICU extras [default=yes]],
1077	[case "${enableval}" in
1078		yes) extras=true ;;
1079		no)  extras=false ;;
1080		*) AC_MSG_ERROR(bad value ${enableval} for --enable-extras) ;;
1081		esac],
1082	extras=true)
1083ICU_CONDITIONAL(EXTRAS, test "$extras" = true)
1084AC_ARG_ENABLE(icuio,
1085	[  --enable-icuio          build ICU's icuio library [default=yes]],
1086	[case "${enableval}" in
1087		yes) icuio=true ;;
1088		no)  icuio=false ;;
1089		*) AC_MSG_ERROR(bad value ${enableval} for --enable-icuio) ;;
1090		esac],
1091	icuio=true)
1092ICU_CONDITIONAL(ICUIO, test "$icuio" = true)
1093
1094# Enable/disable layoutex
1095AC_ARG_ENABLE(layoutex,
1096	[  --enable-layoutex         build ICU's Paragraph Layout library [default=yes].
1097            icu-le-hb must be installed via pkg-config. See http://harfbuzz.org],
1098	[case "${enableval}" in
1099		yes) layoutex=$have_icu_le_hb ;;
1100		no)  layoutex=false ;;
1101		*) AC_MSG_ERROR(bad value ${enableval} for --enable-layoutex) ;;
1102		esac],
1103	layoutex=$have_icu_le_hb)
1104ICU_CONDITIONAL(LAYOUTEX, test "$layoutex" = true)
1105
1106# Enable/disable layout
1107AC_ARG_ENABLE(layout,
1108	[],
1109	[case "${enableval}" in
1110		yes) AC_MSG_ERROR(The ICU Layout Engine has been removed.) ;;
1111		no)   ;;
1112		*) ;;
1113		esac],
1114	)
1115
1116# Enable/disable tools
1117AC_ARG_ENABLE(tools,
1118	[  --enable-tools         build ICU's tools [default=yes]],
1119	[case "${enableval}" in
1120		yes) tools=true ;;
1121		no)  tools=false ;;
1122		*) AC_MSG_ERROR(bad value ${enableval} for --enable-tools) ;;
1123		esac],
1124	tools=true)
1125ICU_CONDITIONAL(TOOLS, test "$tools" = true)
1126
1127AC_ARG_WITH(data-packaging,
1128	[  --with-data-packaging     specify how to package ICU data. Possible values:
1129        files    raw files (.res, etc)
1130        archive  build a single icudtXX.dat file
1131        library  shared library (.dll/.so/etc.)
1132        static   static library (.a/.lib/etc.)
1133        auto     build shared if possible (default)
1134           See http://userguide.icu-project.org/icudata for more info.],
1135	[case "${withval}" in
1136                files|archive|library) datapackaging=$withval ;;
1137		auto) datapackaging=$withval ;;
1138		common) datapackaging=archive ;;
1139		dll) datapackaging=library ;;
1140		static) datapackaging=static ;;
1141		*) AC_MSG_ERROR(bad value ${withval} for --with-data-packaging) ;;
1142		esac],
1143        [datapackaging=])
1144
1145# Note:  'thesysconfdir' is an evaluated version, for Man pages, so also for thedatadir, thelibdir, etc..
1146# thesysconfdir=`eval echo $sysconfdir`
1147dnl# AC_SUBST(thesysconfdir)
1148dnl# thelibdir=`test "x$exec_prefix" = xNONE && exec_prefix="$prefix"; eval echo $libdir`
1149dnl# AC_SUBST(thelibdir)
1150thedatadir=`eval echo $datadir`
1151dnl# AC_SUBST(thedatadir)
1152# Always put raw data files in share/icu/{version}, etc.   Never use lib/icu/{version} for data files.. Actual shared libraries will go in {libdir}.
1153pkgicudatadir=$datadir
1154thepkgicudatadir=$thedatadir
1155AC_SUBST(pkgicudatadir)
1156AC_SUBST(thepkgicudatadir)
1157
1158dnl# Shouldn't need the AC_SUBST
1159
1160if test x"$datapackaging" = x -o x"$datapackaging" = xauto; then
1161	# default to library
1162	datapackaging=library
1163	if test "$ENABLE_STATIC" = "YES"; then
1164		if test "$ENABLE_SHARED" != "YES"; then
1165			datapackaging=static
1166		fi
1167	fi
1168fi
1169
1170datapackaging_dir=`eval echo $thedatadir`"/icu/${VERSION}"
1171
1172datapackaging_msg="(No explaination for mode $datapackaging.)"
1173
1174datapackaging_msg_path="ICU will look in $datapackaging_dir which is the installation location. Call u_setDataDirectory() or use the ICU_DATA environment variable to override."
1175datapackaging_msg_set="ICU will use the linked data library. If linked with the stub library located in stubdata/, the application can use udata_setCommonData() or set a data path to override."
1176datapackaging_howfound="(unknown)"
1177
1178case "$datapackaging" in
1179    files)
1180    DATA_PACKAGING_MODE=files
1181    datapackaging_msg="ICU data will be stored in individual files."
1182    datapackaging_howfound="$datapackaging_msg_path"
1183    ;;
1184    archive)
1185    DATA_PACKAGING_MODE=common
1186    datapackaging_msg="ICU data will be stored in a single .dat file."
1187    datapackaging_howfound="$datapackaging_msg_path"
1188    ;;
1189    library)
1190    DATA_PACKAGING_MODE=dll
1191    datapackaging_msg="ICU data will be linked with ICU."
1192    if test "$ENABLE_STATIC" = "YES"; then
1193        datapackaging_msg="$datapackaging_msg A static data library will be built. "
1194    fi
1195    if test "$ENABLE_SHARED" = "YES"; then
1196        datapackaging_msg="$datapackaging_msg A shared data library will be built. "
1197    fi
1198    datapackaging_howfound="$datapackaging_msg_set"
1199    ;;
1200    static)
1201    DATA_PACKAGING_MODE=static
1202    datapackaging_msg="ICU data will be stored in a static library."
1203    datapackaging_howfound="$datapackaging_msg_set"
1204    ;;
1205esac
1206AC_SUBST(DATA_PACKAGING_MODE)
1207
1208# Sets a library suffix
1209AC_MSG_CHECKING([for a library suffix to use])
1210AC_ARG_WITH(library-suffix,
1211	[  --with-library-suffix=suffix    tag a suffix to the library names [default=]],
1212	[ICULIBSUFFIX="${withval}"],
1213	[ICULIBSUFFIX=])
1214msg=$ICULIBSUFFIX
1215if test "$msg" = ""; then
1216    msg=none
1217fi
1218AC_MSG_RESULT($msg)
1219AC_SUBST(ICULIBSUFFIX)
1220if test "$ICULIBSUFFIX" != ""
1221then
1222    U_HAVE_LIB_SUFFIX=1
1223    ICULIBSUFFIXCNAME=`echo _$ICULIBSUFFIX | sed 's/[^A-Za-z0-9_]/_/g'`
1224    UCONFIG_CPPFLAGS="${UCONFIG_CPPFLAGS} -DU_HAVE_LIB_SUFFIX=1 -DU_LIB_SUFFIX_C_NAME=${ICULIBSUFFIXCNAME} "
1225else
1226    U_HAVE_LIB_SUFFIX=0
1227fi
1228AC_SUBST(U_HAVE_LIB_SUFFIX)
1229AC_SUBST(ICULIBSUFFIXCNAME)
1230
1231# Enable/disable tests
1232AC_ARG_ENABLE(tests,
1233	[  --enable-tests          build ICU tests [default=yes]],
1234	[case "${enableval}" in
1235		yes) tests=true ;;
1236		no)  tests=false ;;
1237		*) AC_MSG_ERROR(bad value ${enableval} for --enable-tests) ;;
1238		esac],
1239	tests=true)
1240ICU_CONDITIONAL(TESTS, test "$tests" = true)
1241
1242# Enable/disable samples
1243AC_ARG_ENABLE(samples,
1244	[  --enable-samples        build ICU samples [default=yes]
1245
1246Additionally, the variable FORCE_LIBS may be set before calling configure.
1247If set, it will REPLACE any automatic list of libraries.],
1248	[case "${enableval}" in
1249		yes) samples=true ;;
1250		no)  samples=false ;;
1251		*) AC_MSG_ERROR(bad value ${enableval} for --enable-samples) ;;
1252		esac],
1253	samples=true)
1254ICU_CONDITIONAL(SAMPLES, test "$samples" = true)
1255
1256ICUDATA_CHAR=$U_ENDIAN_CHAR
1257
1258# Platform-specific Makefile setup
1259# set ICUDATA_CHAR to 'e' for any EBCDIC (which should be big endian) platform.
1260case "${host}" in
1261	*-*-solaris*) 	platform=U_SOLARIS ;;
1262	*-*-linux*|*-*-gnu|*-*-k*bsd*-gnu|*-*-kopensolaris*-gnu)        platform=U_LINUX ;;
1263	*-*-*bsd*|*-*-dragonfly*) 	platform=U_BSD ;;
1264	*-*-aix*) 	platform=U_AIX ;;
1265	*-*-hpux*) 	platform=U_HPUX ;;
1266	*-apple-darwin*|*-apple-rhapsody*)	platform=U_DARWIN ;;
1267	*-*-cygwin*)	platform=U_CYGWIN ;;
1268	*-*-mingw*)	platform=U_MINGW ;;
1269	*-*ibm-openedition*|*-*-os390*)	platform=OS390
1270			if test "${ICU_ENABLE_ASCII_STRINGS}" != "1"; then
1271				ICUDATA_CHAR="e"
1272			fi ;;
1273	*-*-os400*)	platform=OS400
1274			if test "${ICU_ENABLE_ASCII_STRINGS}" != "1"; then
1275				ICUDATA_CHAR="e"
1276			fi ;;
1277	*-*-nto*)	platform=U_QNX ;;
1278	*-dec-osf*) 	platform=U_OSF ;;
1279	*-*-beos)		platform=U_BEOS ;;
1280	*-*-irix*)		platform=U_IRIX ;;
1281	*-ncr-*)		platform=U_MPRAS ;;
1282	*) 		platform=U_UNKNOWN_PLATFORM ;;
1283esac
1284AC_SUBST(ICUDATA_CHAR)
1285AC_SUBST(platform)
1286platform_make_fragment_name="$icu_cv_host_frag"
1287platform_make_fragment='$(top_srcdir)/config/'"$platform_make_fragment_name"
1288AC_SUBST(platform_make_fragment_name)
1289AC_SUBST(platform_make_fragment)
1290
1291if test "${FORCE_LIBS}" != ""; then
1292   echo " *** Overriding automatically chosen [LIBS=$LIBS], using instead [FORCE_LIBS=${FORCE_LIBS}]"  1>&6
1293   LIBS=${FORCE_LIBS}
1294fi
1295
1296# Now that we're done using CPPFLAGS etc. for tests, we can change it
1297# for build.
1298
1299if test "${CC}" == "clang"; then
1300   CLANGCFLAGS="-Qunused-arguments -Wno-parentheses-equality"
1301else
1302   CLANGCFLAGS=""
1303fi
1304
1305if test "${CXX}" == "clang++"; then
1306   CLANGCXXFLAGS="-Qunused-arguments -Wno-parentheses-equality"
1307else
1308   CLANGCXXFLAGS=""
1309fi
1310
1311CPPFLAGS="$CPPFLAGS \$(THREADSCPPFLAGS)"
1312CFLAGS="$CFLAGS \$(THREADSCFLAGS) $CLANGCFLAGS"
1313CXXFLAGS="$CXXFLAGS \$(THREADSCXXFLAGS) $CLANGCXXFLAGS"
1314
1315AC_SUBST(LIBCFLAGS)
1316AC_SUBST(LIBCXXFLAGS)
1317
1318# append all config cppflags
1319CPPFLAGS="$CPPFLAGS $CONFIG_CPPFLAGS $UCONFIG_CPPFLAGS"
1320
1321echo "CPPFLAGS=$CPPFLAGS"
1322echo "CFLAGS=$CFLAGS"
1323echo "CXXFLAGS=$CXXFLAGS"
1324
1325
1326# output the Makefiles
1327AC_CONFIG_FILES([icudefs.mk \
1328		Makefile \
1329		data/pkgdataMakefile \
1330		config/Makefile.inc \
1331		config/icu.pc \
1332		config/pkgdataMakefile \
1333		data/Makefile \
1334		stubdata/Makefile \
1335		common/Makefile \
1336		i18n/Makefile \
1337		layoutex/Makefile \
1338		io/Makefile \
1339		extra/Makefile \
1340		extra/uconv/Makefile \
1341		extra/uconv/pkgdataMakefile \
1342		extra/scrptrun/Makefile \
1343		tools/Makefile \
1344		tools/ctestfw/Makefile \
1345		tools/toolutil/Makefile \
1346		tools/makeconv/Makefile \
1347		tools/genrb/Makefile \
1348		tools/genccode/Makefile \
1349		tools/gencmn/Makefile \
1350		tools/gencnval/Makefile \
1351		tools/gendict/Makefile \
1352		tools/gentest/Makefile \
1353		tools/gennorm2/Makefile \
1354		tools/genbrk/Makefile \
1355		tools/gensprep/Makefile \
1356		tools/icuinfo/Makefile \
1357		tools/icupkg/Makefile \
1358		tools/icuswap/Makefile \
1359		tools/pkgdata/Makefile \
1360		tools/tzcode/Makefile \
1361		tools/gencfu/Makefile \
1362		tools/escapesrc/Makefile \
1363		test/Makefile \
1364		test/compat/Makefile \
1365		test/testdata/Makefile \
1366		test/testdata/pkgdataMakefile \
1367		test/hdrtst/Makefile \
1368		test/intltest/Makefile \
1369		test/cintltst/Makefile \
1370		test/iotest/Makefile \
1371		test/letest/Makefile \
1372		test/perf/Makefile \
1373		test/perf/collationperf/Makefile \
1374		test/perf/collperf/Makefile \
1375		test/perf/collperf2/Makefile \
1376		test/perf/dicttrieperf/Makefile \
1377		test/perf/ubrkperf/Makefile \
1378		test/perf/charperf/Makefile \
1379		test/perf/convperf/Makefile \
1380		test/perf/normperf/Makefile \
1381		test/perf/DateFmtPerf/Makefile \
1382		test/perf/howExpensiveIs/Makefile \
1383		test/perf/strsrchperf/Makefile \
1384		test/perf/unisetperf/Makefile \
1385		test/perf/usetperf/Makefile \
1386		test/perf/ustrperf/Makefile \
1387		test/perf/utfperf/Makefile \
1388		test/perf/utrie2perf/Makefile \
1389		test/perf/leperf/Makefile \
1390		samples/Makefile samples/date/Makefile \
1391		samples/cal/Makefile samples/layout/Makefile])
1392AC_OUTPUT
1393
1394echo
1395echo "ICU for C/C++ $VERSION is ready to be built."
1396echo "=== Important Notes: ==="
1397
1398echo "Data Packaging: $datapackaging"
1399echo " This means: $datapackaging_msg"
1400echo " To locate data: $datapackaging_howfound"
1401
1402if test -n "`$U_MAKE -v 2>&1 | grep '^GNU Make'`"; then
1403echo "Building ICU: Use a GNU make such as $U_MAKE to build ICU."
1404else
1405echo "** WARNING: $U_MAKE may not be GNU make."
1406echo "This may cause ICU to fail to build. Please make sure that GNU make"
1407echo "is in your PATH so that the configure script can detect its location."
1408fi
1409if test "x$AR" = "xfalse"; then
1410  echo "*** WARNING: Archiver ar not found. Set AR= or fix PATH. Some builds (such as static) may fail."
1411fi
1412
1413AC_MSG_CHECKING([the version of "$U_MAKE"])
1414if "$U_MAKE" -f "$srcdir/config/gmakever.mk" PLATFORM="$platform"; then
1415AC_MSG_RESULT([ok])
1416else
1417AC_MSG_RESULT([too old or test failed - try upgrading GNU Make])
1418fi
1419
1420AC_SUBST(UCONFIG_CPPFLAGS)
1421if test -n "$UCONFIG_CPPFLAGS"; then
1422   HDRFILE="uconfig.h.prepend"
1423   echo "*** WARNING: You must set the following flags before code compiled against this ICU will function properly:"
1424   echo
1425   echo "   ${UCONFIG_CPPFLAGS}"
1426   echo
1427   echo 'The recommended way to do this is to prepend the following lines to source/common/unicode/uconfig.h or #include them near the top of that file.'
1428   echo "Creating the file ${HDRFILE}"
1429   echo
1430   echo '---------------   ' "${HDRFILE}"
1431   echo > "${HDRFILE}"
1432   echo '/* ICU customizations: put these lines at the top of uconfig.h */' >> "${HDRFILE}"
1433   echo >> "${HDRFILE}"
1434   for flag in ${UCONFIG_CPPFLAGS};
1435   do
1436        echo " /* $flag */" >> "${HDRFILE}"
1437        case "${flag}" in
1438        -D*=*)
1439          [ \echo "${flag}" | sed -n 's%-D\([^=]*\)=%#define \1 %p' >> "${HDRFILE}" ]
1440          \echo >> "${HDRFILE}"
1441          ;;
1442        -D*)
1443          [ \echo "${flag}" | sed -n 's%-D\([^=]*\)%#define \1 %p' >> "${HDRFILE}" ]
1444          \echo >> "${HDRFILE}"
1445          ;;
1446        *)
1447          \echo "/*  Not sure how to handle this argument: ${flag} */" >> "${HDRFILE}"
1448          \echo >> "${HDRFILE}"
1449          ;;
1450        esac
1451   done
1452   cat "${HDRFILE}"
1453   \echo  "/* End of ${HDRFILE} ------------ */" >> "${HDRFILE}"
1454   echo >> "${HDRFILE}"
1455   echo '--------------- end ' "${HDRFILE}"
1456fi
1457
1458AC_SUBST(UCONFIG_CFLAGS)
1459if test -n "$UCONFIG_CFLAGS"; then
1460   echo "C   apps may want to build with CFLAGS   = ${UCONFIG_CFLAGS}"
1461fi
1462AC_SUBST(UCONFIG_CXXFLAGS)
1463if test -n "$UCONFIG_CXXFLAGS"; then
1464   echo "C++ apps may want to build with CXXFLAGS = ${UCONFIG_CXXFLAGS}"
1465fi
1466
1467if test "$tools" = false;
1468then
1469        echo "## Note: you have disabled ICU's tools. This ICU cannot build its own data or tests."
1470        echo "## Expect build failures in the 'data', 'test', and other directories."
1471fi
1472
1473$as_unset _CXX_CXXSUFFIX
1474