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