• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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"
369fi
370AC_SUBST(U_DEFAULT_SHOW_DRAFT)
371
372AC_PROG_RANLIB
373
374# look for 'ar' the proper way
375AC_CHECK_TOOL(AR, ar, false)
376
377AC_MSG_CHECKING([whether to enable renaming of symbols])
378enabled=yes
379U_DISABLE_RENAMING=0
380AC_ARG_ENABLE(renaming,
381    [  --enable-renaming       add a version suffix to symbols [default=yes]],
382    [ case "${enableval}" in
383	     yes|"") enabled=yes ;;
384	     no) enabled=no; U_DISABLE_RENAMING=1;
385             UCONFIG_CPPFLAGS="${UCONFIG_CPPFLAGS} -DU_DISABLE_RENAMING=1"
386              ;;
387	     *) ;;
388    esac],
389)
390AC_MSG_RESULT($enabled)
391AC_SUBST(U_DISABLE_RENAMING)
392
393AC_MSG_CHECKING([whether to enable function and data tracing])
394enabled=no
395U_ENABLE_TRACING=0
396AC_ARG_ENABLE(tracing,
397    [  --enable-tracing        enable function and data tracing [default=no]],
398    [ case "${enableval}" in
399	     yes|"") enabled=yes;
400                     CONFIG_CPPFLAGS="$CONFIG_CPPFLAGS -DU_ENABLE_TRACING=1";
401                     U_ENABLE_TRACING=1 ;;
402	     no) enabled=no; U_ENABLE_TRACING=0 ;;
403	     *) ;;
404    esac],
405)
406AC_MSG_RESULT($enabled)
407AC_SUBST(U_ENABLE_TRACING)
408
409# check if elf.h is present.
410AC_CHECK_HEADERS([elf.h])
411if test "x$ac_cv_header_elf_h" = "xyes"; then
412    CONFIG_CPPFLAGS="$CONFIG_CPPFLAGS -DU_HAVE_ELF_H=1";
413fi
414
415# Enable/disable plugins
416AC_ARG_ENABLE(plugins,
417	[  --enable-plugins        enable plugins [default=no]],
418	[case "${enableval}" in
419		yes) plugins=true ;;
420		no)  plugins=false ;;
421		*) AC_MSG_ERROR(bad value ${enableval} for --enable-plugins) ;;
422		esac],
423	plugins=false)
424ICU_CONDITIONAL(PLUGINS, test "$plugins" = true)
425
426if test "x$plugins" = "xtrue"; then
427   UCONFIG_CPPFLAGS="$UCONFIG_CPPFLAGS -DUCONFIG_ENABLE_PLUGINS=1"
428fi
429
430
431U_ENABLE_DYLOAD=1
432enable=yes
433AC_MSG_CHECKING([whether to enable dynamic loading of plugins. Ignored if plugins disabled.])
434AC_ARG_ENABLE(dyload,
435    [  --disable-dyload        disable dynamic loading [default=no]],
436    [ case "${enableval}" in
437	     yes|"")
438		     U_ENABLE_DYLOAD=1
439                     enable=yes
440                     ;;
441	     no)
442	     	 U_ENABLE_DYLOAD=0;
443                 enable=no;
444                 CONFIG_CPPFLAGS="$CONFIG_CPPFLAGS -DU_ENABLE_DYLOAD=0";
445                 ;;
446	     *) ;;
447    esac],
448)
449AC_MSG_RESULT($enable)
450AC_SUBST(U_ENABLE_DYLOAD)
451
452if test "$enable" = "yes"; then
453   AC_CHECK_HEADERS([dlfcn.h])
454   #AC_MSG_RESULT($enabled)
455   AC_SEARCH_LIBS([dlopen], [dl])
456   AC_CHECK_FUNCS([dlopen])
457
458   if test "x$ac_cv_func_dlopen" != xyes; then
459      CONFIG_CPPFLAGS="$CONFIG_CPPFLAGS -DHAVE_DLOPEN=0"
460   fi
461fi
462
463# Check for miscellanous functions.
464# So, use for putil / tools only.
465# Note that this will generate HAVE_GETTIMEOFDAY, not U_HAVE_GETTIMEOFDAY
466AC_CHECK_FUNCS([gettimeofday])
467
468
469# Check whether to use the evil rpath or not
470AC_ARG_ENABLE(rpath,
471    [  --enable-rpath          use rpath when linking [default is only if necessary]],
472    [ case "${enableval}" in
473	     yes|"") ENABLE_RPATH=YES ;;
474	     no) ;;
475	     *) ;;
476    esac],
477    [ENABLE_RPATH=NO]
478)
479AC_SUBST(ENABLE_RPATH)
480
481
482
483AC_LANG_PUSH([C++])
484AC_MSG_CHECKING([[if we have a C++ compiler]])
485AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[cxx_okay=yes],[cxx_okay=no])
486if test $cxx_okay = yes
487then
488	AC_MSG_RESULT([[Good]])
489else
490	AC_MSG_RESULT([[no]])
491	AC_MSG_ERROR([[C++ compiler $CXX does not work or no compiler found]])
492fi
493
494if [[ "$GXX" = yes ]]; then
495    # if CXXFLAGS does not have a "-std=" setting, set it now to -std=c++0x,
496    # and check that the compiler still works.
497    if ! echo "$CXXFLAGS" | grep '\-std=' >/dev/null 2>&1; then
498        OLD_CXXFLAGS="${CXXFLAGS}"
499        CXXFLAGS="$CXXFLAGS --std=c++0x"
500        AC_MSG_CHECKING([[if we have a C++11 compiler]])
501        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[cxx11_okay=yes],[cxx11_okay=no])
502        AC_MSG_RESULT($cxx11_okay)
503        if [[ $cxx11_okay = yes ]]; then
504            AC_MSG_NOTICE([Adding CXXFLAGS option --std=c++0x])
505            UCONFIG_CXXFLAGS="${UCONFIG_CXXFLAGS} --std=c++0x"
506        else
507            CXXFLAGS="$OLD_CXXFLAGS"
508        fi
509        case "${host}" in
510        *-*-solaris*)
511            CXXFLAGS="$OLD_CXXFLAGS"
512            ;;
513        esac
514    fi
515fi
516
517AC_MSG_CHECKING([[if #include <string> works]])
518AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <string>]], [[]])], [ac_cv_header_stdstring=yes], [ac_cv_header_stdstring=no])
519AC_MSG_RESULT($ac_cv_header_stdstring)
520if test $ac_cv_header_stdstring = yes
521then
522	U_HAVE_STD_STRING=1
523else
524        U_HAVE_STD_STRING=0
525        CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STD_STRING=0"
526fi
527AC_SUBST(U_HAVE_STD_STRING)
528
529
530AC_MSG_CHECKING([[if #include <atomic> works]])
531AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <atomic>]], [[]])], [ac_cv_header_atomic=yes], [ac_cv_header_atomic=no])
532AC_MSG_RESULT($ac_cv_header_atomic)
533if test $ac_cv_header_atomic = yes
534then
535	U_HAVE_ATOMIC=1
536else
537        U_HAVE_ATOMIC=0
538fi
539# Make this available via CPPFLAGS
540CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_ATOMIC=${U_HAVE_ATOMIC}"
541AC_SUBST(U_HAVE_ATOMIC)
542
543AC_LANG_POP([C++])
544
545# Always build ICU with multi-threading support.
546OLD_LIBS=${LIBS}
547
548# For Compaq Tru64 (OSF1), we must look for pthread_attr_init
549# and must do this before seaching for pthread_mutex_destroy, or
550# we will pick up libpthreads.so not libpthread.so
551# If this fails, then we must test for HPUX specials, before
552# moving on to a more generic test
553
554AC_CHECK_LIB(pthread, pthread_attr_init)
555if test $ac_cv_lib_pthread_pthread_attr_init = yes; then
556  :
557else
558  # Locate the right library for POSIX threads. We look for the
559  # symbols in the libraries first, because on Solaris libc provides
560  # pthread_create but libpthread has the real code :(
561  # AIX uses libpthreads instead of libpthread, and HP/UX uses libpthread
562  # FreeBSD users may need libpthread if they do not have libc_r.
563
564  AC_SEARCH_LIBS_FIRST(pthread_mutex_destroy, pthread pthreads c_r )
565
566  if test "$ac_cv_search_pthread_mutex_destroy" != no; then
567    :
568  else
569    # For HP 11
570    AC_CHECK_LIB(pthread, pthread_mutex_init)
571    if test $ac_cv_lib_pthread_pthread_mutex_init = yes; then
572      :
573    fi
574  fi
575
576  AC_CHECK_FUNC(pthread_mutex_lock)
577
578  if test $ac_cv_func_pthread_mutex_lock = yes; then
579    :
580  fi
581fi
582# Check to see if we are using CygWin with MSVC
583case "${host}" in
584*-pc-cygwin*|*-pc-mingw*)
585  # For gcc, the thread options are set by mh-mingw/mh-cygwin
586  # For msvc, the thread options are set by runConfigureICU
587  :
588  ;;
589*-*-hpux*)
590  # Add -mt because it does several nice things on newer compilers.
591  case "${icu_cv_host_frag}" in
592    mh-hpux-acc)
593      OLD_CXXFLAGS="${CXXFLAGS}"
594      CXXFLAGS="${CXXFLAGS} -mt"
595      if test x"`${CXX} ${CXXFLAGS} 2>&1`" != x""; then
596         CXXFLAGS="${OLD_CXXFLAGS}"
597      else
598         UCONFIG_CXXFLAGS="${UCONFIG_CXXFLAGS} -mt"
599      fi
600    ;;
601  esac
602  ;;
603*-*-solaris*)
604  case "${icu_cv_host_frag}" in
605    mh-solaris)
606         LIBS="${LIBS} -mt"
607    ;;
608  esac
609  ;;
610esac
611
612AC_ARG_ENABLE(weak-threads,
613	[  --enable-weak-threads   weakly reference the threading library [default=no]],
614	[case "${enableval}" in
615		yes)
616            LIB_THREAD="${LIBS%${OLD_LIBS}}"
617            LIBS=${OLD_LIBS}
618            ;;
619		no)  ;;
620		*) AC_MSG_ERROR(bad value ${enableval} for --enable-weak-threads) ;;
621		esac])
622AC_SUBST(LIB_THREAD)
623
624# Check for mmap()
625
626# The AC_FUNC_MMAP macro doesn't work properly.  It seems to be too specific.
627# Do this check instead.
628HAVE_MMAP=0
629AC_MSG_CHECKING([for mmap])
630AC_CACHE_VAL(ac_cv_func_mmap_ok,
631    [AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <unistd.h>
632#include <sys/mman.h>
633#include <sys/stat.h>
634#include <fcntl.h>], [mmap((void *)0, 0, PROT_READ, 0, 0, 0);])],[ac_cv_func_mmap_ok=yes],[ac_cv_func_mmap_ok=no])] )
635AC_MSG_RESULT($ac_cv_func_mmap_ok)
636if test $ac_cv_func_mmap_ok = yes
637then
638    HAVE_MMAP=1
639else
640    CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_MMAP=0"
641fi
642AC_SUBST(HAVE_MMAP)
643
644AC_MSG_CHECKING([for genccode assembly])
645
646# Check to see if genccode can generate simple assembly.
647GENCCODE_ASSEMBLY=
648case "${host}" in
649*-linux*|*-kfreebsd*-gnu*|i*86-*-*bsd*|i*86-pc-gnu)
650    if test "$GCC" = yes; then
651        # We're using gcc, and the simple -a gcc command line works for genccode
652        GENCCODE_ASSEMBLY="-a gcc"
653    fi ;;
654i*86-*-solaris*)
655    if test "$GCC" = yes; then
656        # When using gcc, look if we're also using GNU as.
657        # When using GNU as, the simple -a gcc command line works for genccode.
658        asv=`"${CC}" -print-prog-name=as 2>/dev/null`
659        asv=`"${asv}" --version 2>/dev/null`
660        case "X${asv}" in
661        X*GNU*) GENCCODE_ASSEMBLY="-a gcc" ;;
662        X*) GENCCODE_ASSEMBLY="-a sun-x86" ;;
663        esac
664        unset asv
665    else
666        GENCCODE_ASSEMBLY="-a sun-x86"
667    fi ;;
668sparc-*-solaris*)
669    GENCCODE_ASSEMBLY="-a sun"
670    ;;
671ia64-*-hpux*)
672# There has been some issues with building ICU data on HPUX ia64 aCC
673# when using the assemble code setting below.  For now, build without
674# assemble code for this platform.  This will increase the build time.
675#    GENCCODE_ASSEMBLY="-a aCC-ia64"
676    ;;
677esac
678AC_SUBST(GENCCODE_ASSEMBLY)
679
680AC_MSG_RESULT($GENCCODE_ASSEMBLY)
681
682# Checks for header files
683AC_CHECK_HEADERS(inttypes.h)
684if test $ac_cv_header_inttypes_h = no; then
685 U_HAVE_INTTYPES_H=0
686 CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_INTTYPES_H=0"
687else
688 U_HAVE_INTTYPES_H=1
689fi
690if test "$CC" = ccc; then
691 AC_MSG_RESULT("C compiler set to CCC ${CC}" )
692 case "${host}" in
693        alpha*-*-*) U_HAVE_INTTYPES_H=0;
694        CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_INTTYPES_H=0"
695 esac
696fi
697
698AC_SUBST(U_HAVE_INTTYPES_H)
699
700AC_CHECK_HEADERS(dirent.h)
701if test $ac_cv_header_dirent_h = no; then
702 U_HAVE_DIRENT_H=0
703 CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_DIRENT_H=0"
704else
705 U_HAVE_DIRENT_H=1
706fi
707
708AC_SUBST(U_HAVE_DIRENT_H)
709
710# Check for endianness
711AC_C_BIGENDIAN()
712if test $ac_cv_c_bigendian = no; then
713U_IS_BIG_ENDIAN=0
714U_ENDIAN_CHAR="l"
715else
716U_IS_BIG_ENDIAN=1
717U_ENDIAN_CHAR="b"
718fi
719AC_SUBST(U_IS_BIG_ENDIAN)
720
721# Do various POSIX related checks
722U_HAVE_NL_LANGINFO_CODESET=0
723U_NL_LANGINFO_CODESET=-1
724AC_CHECK_FUNC(nl_langinfo,[U_HAVE_NL_LANGINFO=1],[U_HAVE_NL_LANGINFO=0])
725dnl AC_SUBST(U_HAVE_NL_LANGINFO)
726if test $U_HAVE_NL_LANGINFO -eq 1; then
727  AC_CACHE_CHECK([for nl_langinfo's argument to obtain the codeset],
728  ac_cv_nl_langinfo_codeset,
729  [ac_cv_nl_langinfo_codeset="unknown"
730  for a in CODESET _NL_CTYPE_CODESET_NAME; do
731  AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <langinfo.h>]], [[nl_langinfo($a);]])],[ac_cv_nl_langinfo_codeset="$a"; break],[])]
732  done)
733  if test x$ac_cv_nl_langinfo_codeset != xunknown
734  then
735      U_HAVE_NL_LANGINFO_CODESET=1
736      U_NL_LANGINFO_CODESET=$ac_cv_nl_langinfo_codeset
737      if test "x${ac_cv_nl_langinfo_codeset}" != "xCODESET"
738      then
739        CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DNL_LANGINFO_CODESET=${ac_cv_nl_langinfo_codeset}"
740      fi
741  else
742      CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_NL_LANGINFO_CODESET=0"
743  fi
744fi
745AC_SUBST(U_HAVE_NL_LANGINFO_CODESET)
746AC_SUBST(U_NL_LANGINFO_CODESET)
747
748# Namespace support checks
749AC_LANG(C++)
750AC_MSG_CHECKING([for namespace support])
751AC_CACHE_VAL(ac_cv_namespace_ok,
752    [AC_LINK_IFELSE([AC_LANG_PROGRAM([namespace x_version {void f(){}}
753    namespace x = x_version;
754    using namespace x_version;
755    ], [f();])],[ac_cv_namespace_ok=yes],[ac_cv_namespace_ok=no])] )
756AC_MSG_RESULT($ac_cv_namespace_ok)
757if test $ac_cv_namespace_ok = no
758then
759    AC_MSG_ERROR(Namespace support is required to build ICU.)
760fi
761
762AC_MSG_CHECKING([for properly overriding new and delete])
763U_OVERRIDE_CXX_ALLOCATION=0
764U_HAVE_PLACEMENT_NEW=0
765AC_CACHE_VAL(ac_cv_override_cxx_allocation_ok,
766    [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
767    class UMemory {
768    public:
769    void *operator new(size_t size) {return malloc(size);}
770    void *operator new[](size_t size) {return malloc(size);}
771    void operator delete(void *p) {free(p);}
772    void operator delete[](void *p) {free(p);}
773    };
774    ]], [])],[ac_cv_override_cxx_allocation_ok=yes],[ac_cv_override_cxx_allocation_ok=no])] )
775AC_MSG_RESULT($ac_cv_override_cxx_allocation_ok)
776if test $ac_cv_override_cxx_allocation_ok = yes
777then
778    U_OVERRIDE_CXX_ALLOCATION=1
779    AC_MSG_CHECKING([for placement new and delete])
780    AC_CACHE_VAL(ac_cv_override_placement_new_ok,
781        [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
782        class UMemory {
783        public:
784        void *operator new(size_t size) {return malloc(size);}
785        void *operator new[](size_t size) {return malloc(size);}
786        void operator delete(void *p) {free(p);}
787        void operator delete[](void *p) {free(p);}
788        void * operator new(size_t, void *ptr) { return ptr; }
789        void operator delete(void *, void *) {}
790        };
791        ]], [])],[ac_cv_override_placement_new_ok=yes],[ac_cv_override_placement_new_ok=no])] )
792    AC_MSG_RESULT($ac_cv_override_placement_new_ok)
793    if test $ac_cv_override_placement_new_ok = yes
794    then
795        U_HAVE_PLACEMENT_NEW=1
796    else
797        CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_PLACEMENT_NEW=0"
798    fi
799else
800    CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_OVERRIDE_CXX_ALLOCATION=0"
801fi
802AC_SUBST(U_OVERRIDE_CXX_ALLOCATION)
803AC_SUBST(U_HAVE_PLACEMENT_NEW)
804
805AC_LANG(C)
806AC_CHECK_FUNC(popen)
807if test x$ac_cv_func_popen = xyes
808then
809     U_HAVE_POPEN=1
810else
811     CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_POPEN=0"
812     U_HAVE_POPEN=0
813fi
814AC_SUBST(U_HAVE_POPEN)
815
816AC_CHECK_FUNC(tzset)
817U_HAVE_TZSET=0
818if test x$ac_cv_func_tzset = xyes
819then
820    U_TZSET=tzset
821    U_HAVE_TZSET=1
822else
823    AC_CHECK_FUNC(_tzset)
824    if test x$ac_cv_func__tzset = xyes
825    then
826        U_TZSET=_tzset
827        U_HAVE_TZSET=1
828    else
829      CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_TZSET=0"
830    fi
831fi
832AC_SUBST(U_HAVE_TZSET)
833AC_SUBST(U_TZSET)
834
835U_HAVE_TZNAME=0
836AC_CACHE_CHECK(for tzname,ac_cv_var_tzname,
837[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#ifndef _XOPEN_SOURCE
838#define _XOPEN_SOURCE
839#endif
840#include <stdlib.h>
841#include <time.h>
842#ifndef tzname /* For SGI.  */
843extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
844#endif]], [atoi(*tzname);])],[ac_cv_var_tzname=yes],[ac_cv_var_tzname=no])])
845if test $ac_cv_var_tzname = yes; then
846  U_TZNAME=tzname
847  U_HAVE_TZNAME=1
848else
849  AC_CACHE_CHECK(for _tzname,ac_cv_var__tzname,
850  [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
851  #include <time.h>
852  extern char *_tzname[];]], [atoi(*_tzname);])],[ac_cv_var__tzname=yes],[ac_cv_var__tzname=no])])
853    if test $ac_cv_var__tzname = yes; then
854      U_TZNAME=_tzname
855      U_HAVE_TZNAME=1
856    else
857     CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_TZNAME=0"
858    fi
859fi
860AC_SUBST(U_HAVE_TZNAME)
861AC_SUBST(U_TZNAME)
862
863AC_CACHE_CHECK(for timezone,ac_cv_var_timezone,
864[AC_LINK_IFELSE([AC_LANG_PROGRAM([#ifndef _XOPEN_SOURCE
865#define _XOPEN_SOURCE
866#endif
867#include <time.h>
868], [[timezone = 1;]])],[ac_cv_var_timezone=yes],[ac_cv_var_timezone=no])])
869U_HAVE_TIMEZONE=0
870if test $ac_cv_var_timezone = yes; then
871  U_TIMEZONE=timezone
872  U_HAVE_TIMEZONE=1
873else
874  AC_CACHE_CHECK(for __timezone,ac_cv_var___timezone,
875  [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[__timezone = 1;]])],[ac_cv_var___timezone=yes],[ac_cv_var___timezone=no])])
876  if test $ac_cv_var___timezone = yes; then
877    U_TIMEZONE=__timezone
878    U_HAVE_TIMEZONE=1
879  else
880    AC_CACHE_CHECK(for _timezone,ac_cv_var__timezone,
881    [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[_timezone = 1;]])],[ac_cv_var__timezone=yes],[ac_cv_var__timezone=no])])
882    if test $ac_cv_var__timezone = yes; then
883      U_TIMEZONE=_timezone
884      U_HAVE_TIMEZONE=1
885    else
886     CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_TIMEZONE=0"
887    fi
888  fi
889fi
890AC_SUBST(U_HAVE_TIMEZONE)
891AC_SUBST(U_TIMEZONE)
892
893AC_CHECK_FUNC(strtod_l)
894if test x$ac_cv_func_strtod_l = xyes
895then
896     CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=1"
897     U_HAVE_STRTOD_L=1
898else
899     CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=0"
900     U_HAVE_STRTOD_L=0
901fi
902AC_SUBST(U_HAVE_STRTOD_L)
903
904# Checks for typedefs
905AC_CHECK_TYPE(int8_t,signed char)
906AC_CHECK_TYPE(uint8_t,unsigned char)
907AC_CHECK_TYPE(int16_t,signed short)
908AC_CHECK_TYPE(uint16_t,unsigned short)
909AC_CHECK_TYPE(int32_t,signed long)
910AC_CHECK_TYPE(uint32_t,unsigned long)
911AC_CHECK_TYPE(int64_t,signed long long)
912AC_CHECK_TYPE(uint64_t,unsigned long long)
913
914if test $ac_cv_type_int8_t = no; then
915CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_INT8_T=0"
916fi
917
918if test $ac_cv_type_uint8_t = no; then
919CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_UINT8_T=0"
920fi
921
922if test $ac_cv_type_int16_t = no; then
923CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_INT16_T=0"
924fi
925
926if test $ac_cv_type_uint16_t = no; then
927CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_UINT16_T=0"
928fi
929
930if test $ac_cv_type_int32_t = no; then
931CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_INT32_T=0"
932fi
933
934if test $ac_cv_type_uint32_t = no; then
935CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_UINT32_T=0"
936fi
937
938if test $ac_cv_type_int64_t = no; then
939CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_INT64_T=0"
940fi
941
942if test $ac_cv_type_uint64_t = no; then
943CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_UINT64_T=0"
944fi
945
946# Do various wchar_t related checks
947AC_CHECK_HEADER(wchar.h)
948if test "$ac_cv_header_wchar_h" = no
949then
950    U_HAVE_WCHAR_H=0
951    U_HAVE_WCSCPY=0
952    CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_WCHAR_H=0 -DU_HAVE_WCSCPY=0"
953else
954    AC_DEFINE([HAVE_WCHAR_H], [1], [wchar.h was found.])
955    U_HAVE_WCHAR_H=1
956    # Some broken systems have wchar.h but not some of its functions...
957    AC_SEARCH_LIBS(wcscpy, wcs w)
958    if test "$ac_cv_search_wcscpy" != no; then
959      U_HAVE_WCSCPY=1
960    else
961      U_HAVE_WCSCPY=0
962      CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_WCSCPY=0"
963    fi
964fi
965AC_SUBST(U_HAVE_WCHAR_H)
966AC_SUBST(U_HAVE_WCSCPY)
967
968AC_CHECK_SIZEOF([wchar_t], 0, [
969#if STDC_HEADERS
970#include <stddef.h>
971#endif
972#include <stdlib.h>
973#if HAVE_WCHAR_H
974#include <string.h>
975#include <wchar.h>
976#endif])
977U_SIZEOF_WCHAR_T=$ac_cv_sizeof_wchar_t
978# We do this check to verify that everything is okay.
979if test $U_SIZEOF_WCHAR_T = 0; then
980    if test $U_HAVE_WCHAR_H=1; then
981       AC_MSG_ERROR(There is wchar.h but the size of wchar_t is 0)
982    fi
983fi
984
985AC_MSG_CHECKING([for UTF-16 string literal support])
986U_CHECK_UTF16_STRING=1
987CHECK_UTF16_STRING_RESULT="unknown"
988
989case "${host}" in
990*-*-aix*|powerpc64-*-linux*)
991    if test "$GCC" = no; then
992        OLD_CFLAGS="${CFLAGS}"
993        OLD_CXXFLAGS="${CXXFLAGS}"
994        CFLAGS="${CFLAGS} -qutf"
995        CXXFLAGS="${CXXFLAGS} -qutf"
996        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[const unsigned short hello[] = u"hello";]], [[]])],[U_CHECK_UTF16_STRING=1],[U_CHECK_UTF16_STRING=0])
997        if test "$U_CHECK_UTF16_STRING" = 0; then
998            CFLAGS="${OLD_CFLAGS}"
999            CXXFLAGS="${OLD_CXXFLAGS}"
1000        else
1001            UCONFIG_CXXFLAGS="${UCONFIG_CXXFLAGS} -qutf"
1002            CHECK_UTF16_STRING_RESULT="-qutf"
1003        fi
1004    fi
1005    ;;
1006*-*-solaris*)
1007    if test "$GCC" = no; then
1008        OLD_CFLAGS="${CFLAGS}"
1009        OLD_CXXFLAGS="${CXXFLAGS}"
1010        CFLAGS="${CFLAGS} -xustr=ascii_utf16_ushort"
1011        CXXFLAGS="${CXXFLAGS} -xustr=ascii_utf16_ushort"
1012        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[const unsigned short hello[] = U"hello";]], [[]])],[U_CHECK_UTF16_STRING=1],[U_CHECK_UTF16_STRING=0])
1013        if test "$U_CHECK_UTF16_STRING" = 0; then
1014            CFLAGS="${OLD_CFLAGS}"
1015            CXXFLAGS="${OLD_CXXFLAGS}"
1016        else
1017            CHECK_UTF16_STRING_RESULT="-xustr=ascii_utf16_ushort"
1018            UCONFIG_CXXFLAGS="${UCONFIG_CXXFLAGS} -xustr=ascii_utf16_ushort"
1019            UCONFIG_CFLAGS="${UCONFIG_CFLAGS} -xustr=ascii_utf16_ushort"
1020            # Since we can't detect the availability of this UTF-16 syntax at compile time,
1021            # we depend on configure telling us that we can use it.
1022            # Since we can't ensure ICU users use -xustr=ascii_utf16_ushort,
1023            # we only use this macro within ICU.
1024            # If an ICU user uses icu-config, this feature will be enabled.
1025            CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_CHECK_UTF16_STRING=1"
1026            U_CHECK_UTF16_STRING=0
1027        fi
1028    fi
1029    ;;
1030*-*-hpux*)
1031    if test "$GCC" = no; then
1032        # The option will be detected at compile time without additional compiler options.
1033        CHECK_UTF16_STRING_RESULT="available"
1034    fi
1035    ;;
1036*-*-cygwin)
1037    # wchar_t can be used
1038    CHECK_UTF16_STRING_RESULT="available"
1039    ;;
1040*)
1041    ;;
1042esac
1043
1044# GCC >= 4.4 supports UTF16 string literals. The CFLAGS and CXXFLAGS may change in the future.
1045if test "$CHECK_UTF16_STRING_RESULT" = "unknown"; then
1046    if test "$GCC" = yes; then
1047        OLD_CFLAGS="${CFLAGS}"
1048        CFLAGS="${CFLAGS} -std=gnu99"
1049        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1050static const char16_t test[] = u"This is a UTF16 literal string.";
1051        ]], [[]])],[CC_UTF16_STRING=1],[CC_UTF16_STRING=0])
1052        if test "$CC_UTF16_STRING" = 1; then
1053            UCONFIG_CFLAGS="${UCONFIG_CFLAGS} -std=gnu99"
1054            CHECK_UTF16_STRING_RESULT="C only";
1055        else
1056            CFLAGS="${OLD_CFLAGS}"
1057        fi
1058    fi
1059    if test "$GXX" = yes; then
1060        # -Wno-return-type-c-linkage is desired so that stable ICU API is not warned about.
1061        AC_LANG_PUSH([C++])
1062        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1063static const char16_t test[] = u"This is a UTF16 literal string.";
1064        ]], [[]])],[CXX_UTF16_STRING=1],[CXX_UTF16_STRING=0])
1065        AC_LANG_POP([C++])
1066        if test "$CXX_UTF16_STRING" = 1; then
1067            if test "$CC_UTF16_STRING" = 1; then
1068                CHECK_UTF16_STRING_RESULT="available";
1069            else
1070                CHECK_UTF16_STRING_RESULT="C++ only";
1071            fi
1072        fi
1073    fi
1074fi
1075AC_MSG_RESULT($CHECK_UTF16_STRING_RESULT)
1076
1077# Enable/disable extras
1078AC_ARG_ENABLE(extras,
1079	[  --enable-extras         build ICU extras [default=yes]],
1080	[case "${enableval}" in
1081		yes) extras=true ;;
1082		no)  extras=false ;;
1083		*) AC_MSG_ERROR(bad value ${enableval} for --enable-extras) ;;
1084		esac],
1085	extras=true)
1086ICU_CONDITIONAL(EXTRAS, test "$extras" = true)
1087AC_ARG_ENABLE(icuio,
1088	[  --enable-icuio          build ICU's icuio library [default=yes]],
1089	[case "${enableval}" in
1090		yes) icuio=true ;;
1091		no)  icuio=false ;;
1092		*) AC_MSG_ERROR(bad value ${enableval} for --enable-icuio) ;;
1093		esac],
1094	icuio=true)
1095ICU_CONDITIONAL(ICUIO, test "$icuio" = true)
1096
1097# Enable/disable layoutex
1098AC_ARG_ENABLE(layoutex,
1099	[  --enable-layoutex         build ICU's Paragraph Layout library [default=yes].
1100            icu-le-hb must be installed via pkg-config. See http://harfbuzz.org],
1101	[case "${enableval}" in
1102		yes) layoutex=$have_icu_le_hb ;;
1103		no)  layoutex=false ;;
1104		*) AC_MSG_ERROR(bad value ${enableval} for --enable-layoutex) ;;
1105		esac],
1106	layoutex=$have_icu_le_hb)
1107ICU_CONDITIONAL(LAYOUTEX, test "$layoutex" = true)
1108
1109# Enable/disable layout
1110AC_ARG_ENABLE(layout,
1111	[],
1112	[case "${enableval}" in
1113		yes) AC_MSG_ERROR(The ICU Layout Engine has been removed.) ;;
1114		no)   ;;
1115		*) ;;
1116		esac],
1117	)
1118
1119# Enable/disable tools
1120AC_ARG_ENABLE(tools,
1121	[  --enable-tools         build ICU's tools [default=yes]],
1122	[case "${enableval}" in
1123		yes) tools=true ;;
1124		no)  tools=false ;;
1125		*) AC_MSG_ERROR(bad value ${enableval} for --enable-tools) ;;
1126		esac],
1127	tools=true)
1128ICU_CONDITIONAL(TOOLS, test "$tools" = true)
1129
1130AC_ARG_WITH(data-packaging,
1131	[  --with-data-packaging     specify how to package ICU data. Possible values:
1132        files    raw files (.res, etc)
1133        archive  build a single icudtXX.dat file
1134        library  shared library (.dll/.so/etc.)
1135        static   static library (.a/.lib/etc.)
1136        auto     build shared if possible (default)
1137           See http://userguide.icu-project.org/icudata for more info.],
1138	[case "${withval}" in
1139                files|archive|library) datapackaging=$withval ;;
1140		auto) datapackaging=$withval ;;
1141		common) datapackaging=archive ;;
1142		dll) datapackaging=library ;;
1143		static) datapackaging=static ;;
1144		*) AC_MSG_ERROR(bad value ${withval} for --with-data-packaging) ;;
1145		esac],
1146        [datapackaging=])
1147
1148# Note:  'thesysconfdir' is an evaluated version, for Man pages, so also for thedatadir, thelibdir, etc..
1149# thesysconfdir=`eval echo $sysconfdir`
1150dnl# AC_SUBST(thesysconfdir)
1151dnl# thelibdir=`test "x$exec_prefix" = xNONE && exec_prefix="$prefix"; eval echo $libdir`
1152dnl# AC_SUBST(thelibdir)
1153thedatadir=`eval echo $datadir`
1154dnl# AC_SUBST(thedatadir)
1155# 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}.
1156pkgicudatadir=$datadir
1157thepkgicudatadir=$thedatadir
1158AC_SUBST(pkgicudatadir)
1159AC_SUBST(thepkgicudatadir)
1160
1161dnl# Shouldn't need the AC_SUBST
1162
1163if test x"$datapackaging" = x -o x"$datapackaging" = xauto; then
1164	# default to library
1165	datapackaging=library
1166	if test "$ENABLE_STATIC" = "YES"; then
1167		if test "$ENABLE_SHARED" != "YES"; then
1168			datapackaging=static
1169		fi
1170	fi
1171fi
1172
1173datapackaging_dir=`eval echo $thedatadir`"/icu/${VERSION}"
1174
1175datapackaging_msg="(No explaination for mode $datapackaging.)"
1176
1177datapackaging_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."
1178datapackaging_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."
1179datapackaging_howfound="(unknown)"
1180
1181case "$datapackaging" in
1182    files)
1183    DATA_PACKAGING_MODE=files
1184    datapackaging_msg="ICU data will be stored in individual files."
1185    datapackaging_howfound="$datapackaging_msg_path"
1186    ;;
1187    archive)
1188    DATA_PACKAGING_MODE=common
1189    datapackaging_msg="ICU data will be stored in a single .dat file."
1190    datapackaging_howfound="$datapackaging_msg_path"
1191    ;;
1192    library)
1193    DATA_PACKAGING_MODE=dll
1194    datapackaging_msg="ICU data will be linked with ICU."
1195    if test "$ENABLE_STATIC" = "YES"; then
1196        datapackaging_msg="$datapackaging_msg A static data library will be built. "
1197    fi
1198    if test "$ENABLE_SHARED" = "YES"; then
1199        datapackaging_msg="$datapackaging_msg A shared data library will be built. "
1200    fi
1201    datapackaging_howfound="$datapackaging_msg_set"
1202    ;;
1203    static)
1204    DATA_PACKAGING_MODE=static
1205    datapackaging_msg="ICU data will be stored in a static library."
1206    datapackaging_howfound="$datapackaging_msg_set"
1207    ;;
1208esac
1209AC_SUBST(DATA_PACKAGING_MODE)
1210
1211# Sets a library suffix
1212AC_MSG_CHECKING([for a library suffix to use])
1213AC_ARG_WITH(library-suffix,
1214	[  --with-library-suffix=suffix    tag a suffix to the library names [default=]],
1215	[ICULIBSUFFIX="${withval}"],
1216	[ICULIBSUFFIX=])
1217msg=$ICULIBSUFFIX
1218if test "$msg" = ""; then
1219    msg=none
1220fi
1221AC_MSG_RESULT($msg)
1222AC_SUBST(ICULIBSUFFIX)
1223if test "$ICULIBSUFFIX" != ""
1224then
1225    U_HAVE_LIB_SUFFIX=1
1226    ICULIBSUFFIXCNAME=`echo _$ICULIBSUFFIX | sed 's/[^A-Za-z0-9_]/_/g'`
1227    UCONFIG_CPPFLAGS="${UCONFIG_CPPFLAGS} -DU_HAVE_LIB_SUFFIX=1 -DU_LIB_SUFFIX_C_NAME=${ICULIBSUFFIXCNAME} "
1228else
1229    U_HAVE_LIB_SUFFIX=0
1230fi
1231AC_SUBST(U_HAVE_LIB_SUFFIX)
1232AC_SUBST(ICULIBSUFFIXCNAME)
1233
1234# Enable/disable tests
1235AC_ARG_ENABLE(tests,
1236	[  --enable-tests          build ICU tests [default=yes]],
1237	[case "${enableval}" in
1238		yes) tests=true ;;
1239		no)  tests=false ;;
1240		*) AC_MSG_ERROR(bad value ${enableval} for --enable-tests) ;;
1241		esac],
1242	tests=true)
1243ICU_CONDITIONAL(TESTS, test "$tests" = true)
1244
1245# Enable/disable samples
1246AC_ARG_ENABLE(samples,
1247	[  --enable-samples        build ICU samples [default=yes]
1248
1249Additionally, the variable FORCE_LIBS may be set before calling configure.
1250If set, it will REPLACE any automatic list of libraries.],
1251	[case "${enableval}" in
1252		yes) samples=true ;;
1253		no)  samples=false ;;
1254		*) AC_MSG_ERROR(bad value ${enableval} for --enable-samples) ;;
1255		esac],
1256	samples=true)
1257ICU_CONDITIONAL(SAMPLES, test "$samples" = true)
1258
1259ICUDATA_CHAR=$U_ENDIAN_CHAR
1260
1261# Platform-specific Makefile setup
1262# set ICUDATA_CHAR to 'e' for any EBCDIC (which should be big endian) platform.
1263case "${host}" in
1264	*-*-solaris*) 	platform=U_SOLARIS ;;
1265	*-*-linux*|*-*-gnu|*-*-k*bsd*-gnu|*-*-kopensolaris*-gnu)        platform=U_LINUX ;;
1266	*-*-*bsd*|*-*-dragonfly*) 	platform=U_BSD ;;
1267	*-*-aix*) 	platform=U_AIX ;;
1268	*-*-hpux*) 	platform=U_HPUX ;;
1269	*-apple-darwin*|*-apple-rhapsody*)	platform=U_DARWIN ;;
1270	*-*-cygwin*)	platform=U_CYGWIN ;;
1271	*-*-mingw*)	platform=U_MINGW ;;
1272	*-*ibm-openedition*|*-*-os390*)	platform=OS390
1273			if test "${ICU_ENABLE_ASCII_STRINGS}" != "1"; then
1274				ICUDATA_CHAR="e"
1275			fi ;;
1276	*-*-os400*)	platform=OS400
1277			if test "${ICU_ENABLE_ASCII_STRINGS}" != "1"; then
1278				ICUDATA_CHAR="e"
1279			fi ;;
1280	*-*-nto*)	platform=U_QNX ;;
1281	*-dec-osf*) 	platform=U_OSF ;;
1282	*-*-beos)		platform=U_BEOS ;;
1283	*-*-irix*)		platform=U_IRIX ;;
1284	*-ncr-*)		platform=U_MPRAS ;;
1285	*) 		platform=U_UNKNOWN_PLATFORM ;;
1286esac
1287AC_SUBST(ICUDATA_CHAR)
1288AC_SUBST(platform)
1289platform_make_fragment_name="$icu_cv_host_frag"
1290platform_make_fragment='$(top_srcdir)/config/'"$platform_make_fragment_name"
1291AC_SUBST(platform_make_fragment_name)
1292AC_SUBST(platform_make_fragment)
1293
1294if test "${FORCE_LIBS}" != ""; then
1295   echo " *** Overriding automatically chosen [LIBS=$LIBS], using instead [FORCE_LIBS=${FORCE_LIBS}]"  1>&6
1296   LIBS=${FORCE_LIBS}
1297fi
1298
1299# Now that we're done using CPPFLAGS etc. for tests, we can change it
1300# for build.
1301
1302if test "${CC}" == "clang"; then
1303   CLANGCFLAGS="-Qunused-arguments -Wno-parentheses-equality"
1304else
1305   CLANGCFLAGS=""
1306fi
1307
1308if test "${CXX}" == "clang++"; then
1309   CLANGCXXFLAGS="-Qunused-arguments -Wno-parentheses-equality"
1310else
1311   CLANGCXXFLAGS=""
1312fi
1313
1314CPPFLAGS="$CPPFLAGS \$(THREADSCPPFLAGS)"
1315CFLAGS="$CFLAGS \$(THREADSCFLAGS) $CLANGCFLAGS"
1316CXXFLAGS="$CXXFLAGS \$(THREADSCXXFLAGS) $CLANGCXXFLAGS"
1317
1318AC_SUBST(LIBCFLAGS)
1319AC_SUBST(LIBCXXFLAGS)
1320
1321# append all config cppflags
1322CPPFLAGS="$CPPFLAGS $CONFIG_CPPFLAGS $UCONFIG_CPPFLAGS"
1323
1324echo "CPPFLAGS=$CPPFLAGS"
1325echo "CFLAGS=$CFLAGS"
1326echo "CXXFLAGS=$CXXFLAGS"
1327
1328
1329# output the Makefiles
1330AC_CONFIG_FILES([icudefs.mk \
1331		Makefile \
1332		data/pkgdataMakefile \
1333		config/Makefile.inc \
1334		config/icu.pc \
1335		config/pkgdataMakefile \
1336		data/Makefile \
1337		stubdata/Makefile \
1338		common/Makefile \
1339		i18n/Makefile \
1340		layoutex/Makefile \
1341		io/Makefile \
1342		extra/Makefile \
1343		extra/uconv/Makefile \
1344		extra/uconv/pkgdataMakefile \
1345		extra/scrptrun/Makefile \
1346		tools/Makefile \
1347		tools/ctestfw/Makefile \
1348		tools/toolutil/Makefile \
1349		tools/makeconv/Makefile \
1350		tools/genrb/Makefile \
1351		tools/genccode/Makefile \
1352		tools/gencmn/Makefile \
1353		tools/gencnval/Makefile \
1354		tools/gendict/Makefile \
1355		tools/gentest/Makefile \
1356		tools/gennorm2/Makefile \
1357		tools/genbrk/Makefile \
1358		tools/gensprep/Makefile \
1359		tools/icuinfo/Makefile \
1360		tools/icupkg/Makefile \
1361		tools/icuswap/Makefile \
1362		tools/pkgdata/Makefile \
1363		tools/tzcode/Makefile \
1364		tools/gencfu/Makefile \
1365		test/Makefile \
1366		test/compat/Makefile \
1367		test/testdata/Makefile \
1368		test/testdata/pkgdataMakefile \
1369		test/hdrtst/Makefile \
1370		test/intltest/Makefile \
1371		test/cintltst/Makefile \
1372		test/iotest/Makefile \
1373		test/letest/Makefile \
1374		test/perf/Makefile \
1375		test/perf/collationperf/Makefile \
1376		test/perf/collperf/Makefile \
1377		test/perf/collperf2/Makefile \
1378		test/perf/dicttrieperf/Makefile \
1379		test/perf/ubrkperf/Makefile \
1380		test/perf/charperf/Makefile \
1381		test/perf/convperf/Makefile \
1382		test/perf/normperf/Makefile \
1383		test/perf/DateFmtPerf/Makefile \
1384		test/perf/howExpensiveIs/Makefile \
1385		test/perf/strsrchperf/Makefile \
1386		test/perf/unisetperf/Makefile \
1387		test/perf/usetperf/Makefile \
1388		test/perf/ustrperf/Makefile \
1389		test/perf/utfperf/Makefile \
1390		test/perf/utrie2perf/Makefile \
1391		test/perf/leperf/Makefile \
1392		samples/Makefile samples/date/Makefile \
1393		samples/cal/Makefile samples/layout/Makefile])
1394AC_OUTPUT
1395
1396echo
1397echo "ICU for C/C++ $VERSION is ready to be built."
1398echo "=== Important Notes: ==="
1399
1400echo "Data Packaging: $datapackaging"
1401echo " This means: $datapackaging_msg"
1402echo " To locate data: $datapackaging_howfound"
1403
1404if test -n "`$U_MAKE -v 2>&1 | grep '^GNU Make'`"; then
1405echo "Building ICU: Use a GNU make such as $U_MAKE to build ICU."
1406else
1407echo "** WARNING: $U_MAKE may not be GNU make."
1408echo "This may cause ICU to fail to build. Please make sure that GNU make"
1409echo "is in your PATH so that the configure script can detect its location."
1410fi
1411if test "x$AR" = "xfalse"; then
1412  echo "*** WARNING: Archiver ar not found. Set AR= or fix PATH. Some builds (such as static) may fail."
1413fi
1414
1415AC_MSG_CHECKING([the version of "$U_MAKE"])
1416if "$U_MAKE" -f "$srcdir/config/gmakever.mk" PLATFORM="$platform"; then
1417AC_MSG_RESULT([ok])
1418else
1419AC_MSG_RESULT([too old or test failed - try upgrading GNU Make])
1420fi
1421
1422AC_SUBST(UCONFIG_CPPFLAGS)
1423if test -n "$UCONFIG_CPPFLAGS"; then
1424   HDRFILE="uconfig.h.prepend"
1425   echo "*** WARNING: You must set the following flags before code compiled against this ICU will function properly:"
1426   echo
1427   echo "   ${UCONFIG_CPPFLAGS}"
1428   echo
1429   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.'
1430   echo "Creating the file ${HDRFILE}"
1431   echo
1432   echo '---------------   ' "${HDRFILE}"
1433   echo > "${HDRFILE}"
1434   echo '/* ICU customizations: put these lines at the top of uconfig.h */' >> "${HDRFILE}"
1435   echo >> "${HDRFILE}"
1436   for flag in ${UCONFIG_CPPFLAGS};
1437   do
1438        echo " /* $flag */" >> "${HDRFILE}"
1439        case "${flag}" in
1440        -D*=*)
1441          [ \echo "${flag}" | sed -n 's%-D\([^=]*\)=%#define \1 %p' >> "${HDRFILE}" ]
1442          \echo >> "${HDRFILE}"
1443          ;;
1444        -D*)
1445          [ \echo "${flag}" | sed -n 's%-D\([^=]*\)%#define \1 %p' >> "${HDRFILE}" ]
1446          \echo >> "${HDRFILE}"
1447          ;;
1448        *)
1449          \echo "/*  Not sure how to handle this argument: ${flag} */" >> "${HDRFILE}"
1450          \echo >> "${HDRFILE}"
1451          ;;
1452        esac
1453   done
1454   cat "${HDRFILE}"
1455   \echo  "/* End of ${HDRFILE} ------------ */" >> "${HDRFILE}"
1456   echo >> "${HDRFILE}"
1457   echo '--------------- end ' "${HDRFILE}"
1458fi
1459
1460AC_SUBST(UCONFIG_CFLAGS)
1461if test -n "$UCONFIG_CFLAGS"; then
1462   echo "C   apps may want to build with CFLAGS   = ${UCONFIG_CFLAGS}"
1463fi
1464AC_SUBST(UCONFIG_CXXFLAGS)
1465if test -n "$UCONFIG_CXXFLAGS"; then
1466   echo "C++ apps may want to build with CXXFLAGS = ${UCONFIG_CXXFLAGS}"
1467fi
1468
1469if test "$tools" = false;
1470then
1471        echo "## Note: you have disabled ICU's tools. This ICU cannot build its own data or tests."
1472        echo "## Expect build failures in the 'data', 'test', and other directories."
1473fi
1474
1475$as_unset _CXX_CXXSUFFIX
1476