2 AC_COPYRIGHT([ Copyright (c) 1999-2010, International Business Machines Corporation and others. All Rights Reserved. ])
4 # Stephen F. Booth, heavily modified by Yves and others
6 # Check for autoconf version
10 # Process this file with autoconf to produce a configure script
12 AC_CONFIG_SRCDIR([common/unicode/utypes.h])
14 AC_CONFIG_HEADERS(common/icucfg.h)
18 # Use custom echo test for newline option
19 # Current autoconf (2.65) gives incorrect echo newline option
21 # This may be removed later - mow (June 17, 2010)
22 ICU_ECHO_C= ICU_ECHO_N= ICU_ECHO_T=
23 case `/bin/sh -c "echo -n x"` in
25 case `/bin/sh -c "echo 'x\c'"` in
26 *c*) ICU_ECHO_T=' ';; # ECHO_T is single tab character.
36 AC_MSG_CHECKING(for ICU version numbers)
38 # Get the ICU version from uversion.h or other headers
40 [sed -n 's/^[ ]*#[ ]*define[ ]*U_ICU_VERSION[ ]*"\([^"]*\)".*/\1/p' "$@"]
43 [sed -n 's/^[ ]*#[ ]*define[ ]*U_UNICODE_VERSION[ ]*"\([^"]*\)".*/\1/p' "$@"]
45 VERSION=`geticuversion $srcdir/common/unicode/uvernum.h`
46 if test x"$VERSION" = x; then
47 VERSION=`geticuversion $srcdir/common/unicode/*.h`
48 if test x"$VERSION" = x; then
49 AC_MSG_ERROR([Cannot determine ICU version number from uvernum.h header file])
53 UNICODE_VERSION=`getuversion $srcdir/common/unicode/uchar.h`
54 if test x"$UNICODE_VERSION" = x; then
55 UNICODE_VERSION=`getuversion $srcdir/common/unicode/*.h`
56 if test x"$UNICODE_VERSION" = x; then
57 AC_MSG_ERROR([Cannot determine Unicode version number from uchar.h header file])
60 # Compute a reasonable library version from the release version. This is
61 # very bad, but that's wanted... We want to make sure that the LIB_VERSION
62 # has at least a dot in it, so we'll add a .0 if needed.
63 [LIB_VERSION=`echo $VERSION | sed -e 's/\.//' -e 's/^\([^.]*\)$/\1.0/'`]
64 LIB_VERSION_MAJOR=`echo $LIB_VERSION | sed 's/\..*//'`
67 AC_SUBST(LIB_VERSION_MAJOR)
68 AC_MSG_RESULT([release $VERSION, library $LIB_VERSION, unicode version $UNICODE_VERSION])
70 AC_SUBST(UNICODE_VERSION)
72 # Determine the host system
77 # This variable is needed on z/OS because the C++ compiler only recognizes .C
81 # Check whether to build debug libraries
82 AC_MSG_CHECKING([whether to build debug libraries])
86 [ --enable-debug build debug libraries [default=no]],
87 [ case "${enableval}" in
88 yes|"") enabled=yes; ENABLE_DEBUG=1 ;;
92 AC_MSG_RESULT($enabled)
93 AC_SUBST(ENABLE_DEBUG)
95 # Check whether to build release libraries
96 AC_MSG_CHECKING([whether to build release libraries])
99 AC_ARG_ENABLE(release,
100 [ --enable-release build release libraries [default=yes]],
101 [ case "${enableval}" in
102 no) enabled=no; ENABLE_RELEASE=0 ;;
106 AC_MSG_RESULT($enabled)
107 AC_SUBST(ENABLE_RELEASE)
109 # Don't use the default C/CXXFLags
113 # Checks for programs
117 # Ensure that if CXXFLAGS/CFLAGS were not set when calling configure, set it correctly based on (enable/disable) debug or release option
118 # The release mode use is the default one for autoconf
119 if test "$GCC" = yes; then
120 if test "$CFLAGS" = ""; then
121 if test "$ENABLE_DEBUG" = 1; then
124 if test "$ENABLE_RELEASE" = 1; then
128 if test "$CXXFLAGS" = ""; then
129 if test "$ENABLE_DEBUG" = 1; then
132 if test "$ENABLE_RELEASE" = 1; then
133 CXXFLAGS="$CXXFLAGS -O2"
142 AC_SUBST(cross_compiling)
144 dnl use the pld hack to get ac_fn_cxx_try_link defined globally and not local
146 AC_LINK_IFELSE([AC_LANG_PROGRAM()])
149 # make sure install is relative to srcdir - if a script
150 if test "$srcdir" = "."; then
151 # If srcdir isn't just ., then (srcdir) is already prepended.
152 if test "${ac_install_sh}" = "${INSTALL}"; then
153 INSTALL="\\\$(top_srcdir)/${ac_install_sh}"
157 #AC_CHECK_PROG(AUTOCONF, autoconf, autoconf, true)
158 #AC_CHECK_PROG(STRIP, strip, strip, true)
160 # Check for the platform make
161 AC_PATH_PROGS(U_MAKE, gmake gnumake, make)
165 AC_ARG_WITH(cross-build,
166 [ --with-cross-build=dir specify an absolute path to the build directory of an ICU built for the current platform [default=no cross dir]],
167 [cross_buildroot="${withval}"],
168 [cross_buildroot=""])
170 if test "X$cross_buildroot" = "X"; then
171 if test "$cross_compiling" = "yes"; then
172 AC_MSG_ERROR([Error! Cross compiling but no --with-cross-build option specified - please supply the path to an executable ICU's build root])
176 if test -f "${cross_buildroot}/config/icucross.mk"; then
177 AC_MSG_RESULT([Using cross buildroot: $cross_buildroot])
179 if test -d "${cross_buildroot}"; then
180 AC_MSG_ERROR([${cross_buildroot}/config/icucross.mk not found. Please build ICU in ${cross_buildroot} first.])
182 AC_MSG_ERROR([No such directory ${cross_buildroot} supplied as the argument to --with-cross-build. Use an absolute path.])
186 AC_SUBST(cross_buildroot)
188 # Check for doxygen to generate documentation
189 AC_PATH_PROG(DOXYGEN,doxygen,,$PATH:/usr/local/bin:/usr/bin)
191 # Check that the linker is usable
194 # Determine the executable suffix
195 # We don't use AC_EXEEXT because some compilers output separate debugging
196 # files, which confuses the AC_EXEEXT macro.
197 AC_MSG_CHECKING(checking for executable suffix)
199 *-*-cygwin*|*-*-mingw*) EXEEXT=.exe ;;
203 AC_MSG_RESULT($EXEEXT)
206 # Determine how strict we want to be when compiling
207 AC_CHECK_STRICT_COMPILE
209 # Check if we can build and use 64-bit libraries
212 AC_SUBST(COMPILE_LINK_ENVVAR)
214 # Determine the Makefile fragment
217 # Checks for libraries and other host specific stuff
218 # On HP/UX, don't link to -lm from a shared lib because it isn't
219 # PIC (at least on 10.2)
221 *-*-hpux*) AC_CHECK_LIB(m, floor, LIB_M="-lm") ;;
223 *) AC_CHECK_LIB(m, floor)
228 # Check whether to build shared libraries
229 AC_MSG_CHECKING([whether to build shared libraries])
231 AC_ARG_ENABLE(shared,
232 [ --enable-shared build shared libraries [default=yes]],
233 [ case "${enableval}" in
234 yes|"") enabled=yes; ENABLE_SHARED=YES ;;
238 [enabled=yes; ENABLE_SHARED=YES]
240 AC_MSG_RESULT($enabled)
241 AC_SUBST(ENABLE_SHARED)
243 # Check whether to build static libraries
244 AC_MSG_CHECKING([whether to build static libraries])
246 AC_ARG_ENABLE(static,
247 [ --enable-static build static libraries [default=no]],
248 [ case "${enableval}" in
249 yes|"") enabled=yes; ENABLE_STATIC=YES ;;
254 AC_MSG_RESULT($enabled)
255 AC_SUBST(ENABLE_STATIC)
257 # Check whether to enable auto cleanup of libraries
258 AC_MSG_CHECKING([whether to enable auto cleanup of libraries])
260 UCLN_NO_AUTO_CLEANUP=1
261 AC_ARG_ENABLE(auto-cleanup,
262 [ --enable-auto-cleanup enable auto cleanup of libraries [default=no]],
263 [ case "${enableval}" in
264 yes) enabled=yes; UCLN_NO_AUTO_CLEANUP=0 ;;
268 AC_MSG_RESULT($enabled)
269 AC_SUBST(UCLN_NO_AUTO_CLEANUP)
271 # MSVC floating-point option
273 if test $enabled = yes
275 if test $icu_cv_host_frag = mh-cygwin-msvc
277 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
278 #if defined _MSC_VER && _MSC_VER >= 1400
280 Microsoft Visual C++ < 2005
282 ]], [[]])],[MSVC_RELEASE_FLAG="/fp:precise"],[MSVC_RELEASE_FLAG="/Op"])
284 CFLAGS="${CFLAGS} ${MSVC_RELEASE_FLAG}"
285 CXXFLAGS="${CXXFLAGS} ${MSVC_RELEASE_FLAG}"
289 # Check whether to enabled draft APIs
290 AC_MSG_CHECKING([whether to enable draft APIs])
292 U_DEFAULT_SHOW_DRAFT=1
294 [ --enable-draft enable draft APIs (and internal APIs) [default=yes]],
295 [ case "${enableval}" in
296 no) enabled=no; U_DEFAULT_SHOW_DRAFT=0 ;;
300 AC_MSG_RESULT($enabled)
301 # Make sure that we can use draft API in ICU.
302 if test "$U_DEFAULT_SHOW_DRAFT" = 0; then
303 CPPFLAGS="$CPPFLAGS -DU_SHOW_DRAFT_API"
305 AC_SUBST(U_DEFAULT_SHOW_DRAFT)
307 # Check if we can hide variables from
308 AC_MSG_CHECKING([for library API export])
310 U_USE_GCC_VISIBILITY_ATTRIBUTE=0
311 OLD_CFLAGS="${CFLAGS}"
312 OLD_CXXFLAGS="${CXXFLAGS}"
313 if test "$ac_cv_c_compiler_gnu" = yes; then
314 LIBCFLAGS="-fvisibility=hidden"
315 LIBCXXFLAGS="-fvisibility=hidden"
316 CFLAGS="${CFLAGS} ${LIBCFLAGS}"
317 CXXFLAGS="${CXXFLAGS} ${LIBCXXFLAGS}"
318 AC_LINK_IFELSE([AC_LANG_PROGRAM([[__attribute__ ((visibility ("default"))) void f(void);
319 #include <stdlib.h>]], [[exit(0);]])],[SHAREDLIBEXPORT=yes],[SHAREDLIBEXPORT=no])
320 if test "$SHAREDLIBEXPORT" = no; then
324 U_USE_GCC_VISIBILITY_ATTRIBUTE=1
329 LIBCFLAGS="-xldscope=hidden"
330 LIBCXXFLAGS="-xldscope=hidden"
331 CFLAGS="${CFLAGS} ${LIBCFLAGS}"
332 CXXFLAGS="${CXXFLAGS} ${LIBCXXFLAGS}"
333 AC_LINK_IFELSE([AC_LANG_PROGRAM([[__global void f(void);
334 #include <stdlib.h>]], [[exit(0);]])],[SHAREDLIBEXPORT=yes],[SHAREDLIBEXPORT=no])
335 if test "$SHAREDLIBEXPORT" = no; then
341 # ICU isn't set up to follow the HP syntax yet.
346 # Restore to their original state because the Intel compiler chokes
347 # on this option when checking for the wchar_t size, but the
348 # option otherwise works.
349 CFLAGS="${OLD_CFLAGS}"
350 CXXFLAGS="${OLD_CXXFLAGS}"
351 AC_MSG_RESULT($SHAREDLIBEXPORT)
352 AC_SUBST(U_USE_GCC_VISIBILITY_ATTRIBUTE)
354 AC_SUBST(LIBCXXFLAGS)
358 # look for 'ar' the proper way
359 #AC_PATH_PROG(AR,ar,[echo archiver ar not found re-run configure ; false],$PATH:/bin:/usr/bin:/usr/ccs/bin)
360 AC_CHECK_TOOL(AR, ar)
361 if test "x$AR" = "x"; then
362 AC_MSG_ERROR(Archiver ar not found. Set AR= or fix PATH)
366 AC_MSG_CHECKING([whether to enable renaming of symbols])
369 AC_ARG_ENABLE(renaming,
370 [ --enable-renaming add a version suffix to symbols [default=yes]],
371 [ case "${enableval}" in
372 yes|"") enabled=yes ;;
373 no) enabled=no; U_DISABLE_RENAMING=1 ;;
377 AC_MSG_RESULT($enabled)
378 AC_SUBST(U_DISABLE_RENAMING)
380 AC_MSG_CHECKING([whether to enable function and data tracing])
383 AC_ARG_ENABLE(tracing,
384 [ --enable-tracing enable function and data tracing [default=no]],
385 [ case "${enableval}" in
386 yes|"") enabled=yes; U_ENABLE_TRACING=1 ;;
387 no) enabled=no; U_ENABLE_TRACING=0 ;;
391 AC_MSG_RESULT($enabled)
392 AC_SUBST(U_ENABLE_TRACING)
396 AC_MSG_CHECKING([whether to enable dynamic loading of plugins])
398 AC_ARG_ENABLE(dyload,
399 [ --disable-dyload disable dynamic loading [default=no]],
400 [ case "${enableval}" in
410 AC_SUBST(U_ENABLE_DYLOAD)
413 AC_CHECK_HEADERS([dlfcn.h])
415 #AC_MSG_RESULT($enabled)
416 if test "$enabled" = "check"; then
417 AC_SEARCH_LIBS([dlopen], [dl])
418 AC_CHECK_FUNCS([dlopen])
421 AC_SUBST(U_CHECK_DYLOAD)
423 # Check for miscellanous functions.
424 # These only go into common/icucfg.h and are NOT exported with ICU builds.
425 # So, use for putil / tools only.
426 # Note that this will generate HAVE_GETTIMEOFDAY, not U_HAVE_GETTIMEOFDAY
427 # rerun 'autoheader' to regenerate icucfg.h.in
428 AC_CHECK_FUNCS([gettimeofday])
430 # Check whether to use the evil rpath or not
432 [ --enable-rpath use rpath when linking [default is only if necessary]],
433 [ case "${enableval}" in
434 yes|"") ENABLE_RPATH=YES ;;
440 AC_SUBST(ENABLE_RPATH)
444 # Copy the definition of AC_C_INLINE, with slight mods.
446 AC_CACHE_CHECK([for definition of U_INLINE for C], ac_cv_c_inline,
448 for ac_kw in inline __inline__ __inline; do
449 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;} $ac_kw int foo() {]])],[ac_cv_c_inline=$ac_kw; break],[])
452 case "$ac_cv_c_inline" in
453 yes) U_INLINE= "inline" ;;
455 *) U_INLINE=$ac_cv_c_inline ;;
459 # set up U_HAVE_STD_STRING.
460 # Copy the definition of AC_C_INLINE, with slight mods.
464 AC_MSG_CHECKING([[if we have a C++ compiler]])
465 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[cxx_okay=yes],[cxx_okay=no])
466 if test $cxx_okay = yes
468 AC_MSG_RESULT([[congratulations]])
470 AC_MSG_RESULT([[no]])
471 AC_MSG_ERROR([[C++ compiler $CXX does not work or no compiler found]])
474 AC_MSG_CHECKING([[if #include <string> works]])
475 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <string>]], [[]])], [ac_cv_header_stdstring=yes], [ac_cv_header_stdstring=no])
476 AC_MSG_RESULT($ac_cv_header_stdstring)
477 if test $ac_cv_header_stdstring = yes
481 AC_SUBST(U_HAVE_STD_STRING)
486 # Enable/disable threads
487 AC_ARG_ENABLE(threads,
488 [ --enable-threads build ICU with thread safety [default=yes]],
489 [case "${enableval}" in
492 *) AC_MSG_ERROR(bad value ${enableval} for --enable-threads) ;;
495 ICU_CONDITIONAL(THREADS, test "$threads" = true)
500 if test $threads = true; then
501 # For Compaq Tru64 (OSF1), we must look for pthread_attr_init
502 # and must do this before seaching for pthread_mutex_destroy, or
503 # we will pick up libpthreads.so not libpthread.so
504 # If this fails, then we must test for HPUX specials, before
505 # moving on to a more generic test
507 AC_CHECK_LIB(pthread, pthread_attr_init)
508 if test $ac_cv_lib_pthread_pthread_attr_init = yes; then
511 # Locate the right library for POSIX threads. We look for the
512 # symbols in the libraries first, because on Solaris libc provides
513 # pthread_create but libpthread has the real code :(
514 # AIX uses libpthreads instead of libpthread, and HP/UX uses libpthread
515 # FreeBSD users may need libpthread if they do not have libc_r.
517 AC_SEARCH_LIBS_FIRST(pthread_mutex_destroy, pthread pthreads c_r )
519 if test "$ac_cv_search_pthread_mutex_destroy" != no; then
523 AC_CHECK_LIB(pthread, pthread_mutex_init)
524 if test $ac_cv_lib_pthread_pthread_mutex_init = yes; then
529 AC_CHECK_FUNC(pthread_mutex_lock)
531 if test $ac_cv_func_pthread_mutex_lock = yes; then
535 # Check to see if we are using CygWin with MSVC
537 *-pc-cygwin*|*-pc-mingw*)
538 # For gcc, the thread options are set by mh-mingw/mh-cygwin
539 # For msvc, the thread options are set by runConfigureICU
543 # Add -mt because it does several nice things on newer compilers.
544 case "${icu_cv_host_frag}" in
546 OLD_CXXFLAGS="${CXXFLAGS}"
547 CXXFLAGS="${CXXFLAGS} -mt"
548 if test x"`${CXX} ${CXXFLAGS} 2>&1`" != x""; then
549 CXXFLAGS="${OLD_CXXFLAGS}"
555 case "${icu_cv_host_frag}" in
564 AC_SUBST(ICU_USE_THREADS)
566 AC_ARG_ENABLE(weak-threads,
567 [ --enable-weak-threads weakly reference the threading library [default=no]],
568 [case "${enableval}" in
570 LIB_THREAD="${LIBS%${OLD_LIBS}}"
574 *) AC_MSG_ERROR(bad value ${enableval} for --enable-weak-threads) ;;
580 # The AC_FUNC_MMAP macro doesn't work properly. It seems to be too specific.
581 # Do this check instead.
583 AC_MSG_CHECKING([for mmap])
584 AC_CACHE_VAL(ac_cv_func_mmap_ok,
585 [AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <unistd.h>
586 #include <sys/mman.h>
587 #include <sys/stat.h>
588 #include <fcntl.h>], [mmap((void *)0, 0, PROT_READ, 0, 0, 0);])],[ac_cv_func_mmap_ok=yes],[ac_cv_func_mmap_ok=no])] )
589 AC_MSG_RESULT($ac_cv_func_mmap_ok)
590 if test $ac_cv_func_mmap_ok = yes
596 AC_MSG_CHECKING([for genccode assembly])
598 # Check to see if genccode can generate simple assembly.
601 *-linux*|i*86-*-*bsd*|i*86-pc-gnu)
602 if test "$GCC" = yes; then
603 # We're using gcc, and the simple -a gcc command line works for genccode
604 GENCCODE_ASSEMBLY="-a gcc"
607 if test "$GCC" = yes; then
608 # When using gcc, look if we're also using GNU as.
609 # When using GNU as, the simple -a gcc command line works for genccode.
610 asv=`"${CC}" -print-prog-name=as 2>/dev/null`
611 asv=`"${asv}" --version 2>/dev/null`
613 X*GNU*) GENCCODE_ASSEMBLY="-a gcc" ;;
614 X*) GENCCODE_ASSEMBLY="-a sun-x86" ;;
618 GENCCODE_ASSEMBLY="-a sun-x86"
621 GENCCODE_ASSEMBLY="-a sun"
624 GENCCODE_ASSEMBLY="-a aCC-ia64"
627 AC_SUBST(GENCCODE_ASSEMBLY)
629 AC_MSG_RESULT($GENCCODE_ASSEMBLY)
631 # Checks for header files
632 AC_CHECK_HEADERS(inttypes.h)
633 if test $ac_cv_header_inttypes_h = no; then
638 if test "$CC" = ccc; then
639 AC_MSG_RESULT("C compiler set to CCC ${CC}" )
641 alpha*-*-*) U_HAVE_INTTYPES_H=0;
645 AC_SUBST(U_HAVE_INTTYPES_H)
647 AC_CHECK_HEADERS(dirent.h)
648 if test $ac_cv_header_dirent_h = no; then
654 AC_SUBST(U_HAVE_DIRENT_H)
657 AC_ARG_WITH(iostream,
658 [ --with-iostream=version specify the version of iostream to use (none, old, std, auto) [default=auto]],
659 [case "${withval}" in
660 none) streams=none ;;
661 old) streams=198506 ;;
662 std) streams=199711 ;;
664 *) AC_MSG_ERROR(bad value ${withval} for --with-iostream) ;;
669 if test x$streams != xnone
672 OLD_CXXFLAGS="${CXXFLAGS}"
673 case "${icu_cv_host_frag}" in
675 CXXFLAGS="${CXXFLAGS} -AA"
678 AC_MSG_CHECKING([for iostream usability])
679 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <iostream>]], [[]])],[ac_cv_header_iostream=yes],[ac_cv_header_iostream=no])
680 if test $icu_cv_host_frag = mh-cygwin-msvc
682 # <iostream> is always there on Windows.
683 # We do this to prevent the C++ preprocessor from being used because
684 # autoconf can't deal with the Windows C++ preprocessor
685 ac_cv_header_iostream=yes
687 AC_MSG_RESULT($ac_cv_header_iostream)
688 if test $ac_cv_header_iostream = yes
690 U_IOSTREAM_SOURCE=199711
692 CXXFLAGS="${OLD_CXXFLAGS}"
693 AC_MSG_CHECKING([whether ostream in iostream.h is really defined])
694 AC_CACHE_VAL(ac_cv_iostream_ok,
695 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <iostream.h>]], [[ostream &testout = cout; testout << "test" << endl;]])],[ac_cv_iostream_ok=yes],[ac_cv_iostream_ok=no]))
696 AC_MSG_RESULT($ac_cv_iostream_ok)
697 if test $ac_cv_iostream_ok = yes
699 U_IOSTREAM_SOURCE=198506
702 if test x$streams != x
704 if test $U_IOSTREAM_SOURCE -ge $streams
706 U_IOSTREAM_SOURCE=$streams
707 case "${icu_cv_host_frag}" in
709 if test $U_IOSTREAM_SOURCE -lt 199711; then
710 CXXFLAGS=${OLD_CXXFLAGS}
715 AC_MSG_ERROR(${withval} iostream is not available)
719 AC_SUBST(U_IOSTREAM_SOURCE)
722 # Check for endianness
724 if test $ac_cv_c_bigendian = no; then
731 AC_SUBST(U_IS_BIG_ENDIAN)
733 # Do various POSIX related checks
734 U_HAVE_NL_LANGINFO_CODESET=0
735 U_NL_LANGINFO_CODESET=-1
736 AC_CHECK_FUNC(nl_langinfo,[U_HAVE_NL_LANGINFO=1],[U_HAVE_NL_LANGINFO=0])
737 dnl AC_SUBST(U_HAVE_NL_LANGINFO)
738 if test $U_HAVE_NL_LANGINFO -eq 1; then
739 AC_CACHE_CHECK([for nl_langinfo's argument to obtain the codeset],
740 ac_cv_nl_langinfo_codeset,
741 [ac_cv_nl_langinfo_codeset="unknown"
742 for a in CODESET _NL_CTYPE_CODESET_NAME; do
743 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <langinfo.h>]], [[nl_langinfo($a);]])],[ac_cv_nl_langinfo_codeset="$a"; break],[])]
745 if test x$ac_cv_nl_langinfo_codeset != xunknown
747 U_HAVE_NL_LANGINFO_CODESET=1
748 U_NL_LANGINFO_CODESET=$ac_cv_nl_langinfo_codeset
751 AC_SUBST(U_HAVE_NL_LANGINFO_CODESET)
752 AC_SUBST(U_NL_LANGINFO_CODESET)
754 # Namespace support checks
756 AC_MSG_CHECKING([for namespace support])
757 AC_CACHE_VAL(ac_cv_namespace_ok,
758 [AC_LINK_IFELSE([AC_LANG_PROGRAM([namespace x_version {void f(){}}
759 namespace x = x_version;
760 using namespace x_version;
761 ], [f();])],[ac_cv_namespace_ok=yes],[ac_cv_namespace_ok=no])] )
762 AC_MSG_RESULT($ac_cv_namespace_ok)
764 if test $ac_cv_namespace_ok = no
768 AC_SUBST(U_HAVE_NAMESPACE)
770 AC_MSG_CHECKING([for properly overriding new and delete])
771 U_OVERRIDE_CXX_ALLOCATION=0
772 U_HAVE_PLACEMENT_NEW=0
773 AC_CACHE_VAL(ac_cv_override_cxx_allocation_ok,
774 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
777 void *operator new(size_t size) {return malloc(size);}
778 void *operator new[](size_t size) {return malloc(size);}
779 void operator delete(void *p) {free(p);}
780 void operator delete[](void *p) {free(p);}
782 ]], [])],[ac_cv_override_cxx_allocation_ok=yes],[ac_cv_override_cxx_allocation_ok=no])] )
783 AC_MSG_RESULT($ac_cv_override_cxx_allocation_ok)
784 if test $ac_cv_override_cxx_allocation_ok = yes
786 U_OVERRIDE_CXX_ALLOCATION=1
787 AC_MSG_CHECKING([for placement new and delete])
788 AC_CACHE_VAL(ac_cv_override_placement_new_ok,
789 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
792 void *operator new(size_t size) {return malloc(size);}
793 void *operator new[](size_t size) {return malloc(size);}
794 void operator delete(void *p) {free(p);}
795 void operator delete[](void *p) {free(p);}
796 void * operator new(size_t, void *ptr) { return ptr; }
797 void operator delete(void *, void *) {}
799 ]], [])],[ac_cv_override_placement_new_ok=yes],[ac_cv_override_placement_new_ok=no])] )
800 AC_MSG_RESULT($ac_cv_override_placement_new_ok)
801 if test $ac_cv_override_placement_new_ok = yes
803 U_HAVE_PLACEMENT_NEW=1
806 AC_SUBST(U_OVERRIDE_CXX_ALLOCATION)
807 AC_SUBST(U_HAVE_PLACEMENT_NEW)
809 # gcc atomic built-in functions check
810 # AC_TRY_LINK([], [int foo, bar; bar = __sync_val_compare_and_swap(&foo, 0, 1);],,
812 AC_MSG_CHECKING([for gcc atomic functions])
813 AC_LINK_IFELSE([AC_LANG_PROGRAM(
819 __sync_fetch_and_add(&i, 1);
820 __sync_fetch_and_sub(&i, 1);
821 __sync_val_compare_and_swap(&p, 0, 0);
824 [U_HAVE_GCC_ATOMICS=1; AC_MSG_RESULT([yes])],
825 [U_HAVE_GCC_ATOMICS=0; AC_MSG_RESULT([no])])
826 AC_SUBST(U_HAVE_GCC_ATOMICS)
830 if test x$ac_cv_func_popen = xyes
836 AC_SUBST(U_HAVE_POPEN)
840 if test x$ac_cv_func_tzset = xyes
845 AC_CHECK_FUNC(_tzset)
846 if test x$ac_cv_func__tzset = xyes
852 AC_SUBST(U_HAVE_TZSET)
856 AC_CACHE_CHECK(for tzname,ac_cv_var_tzname,
857 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#ifndef __USE_POSIX
862 #ifndef tzname /* For SGI. */
863 extern char *tzname[]; /* RS6000 and others reject char **tzname. */
864 #endif]], [atoi(*tzname);])],[ac_cv_var_tzname=yes],[ac_cv_var_tzname=no])])
865 if test $ac_cv_var_tzname = yes; then
869 AC_CACHE_CHECK(for _tzname,ac_cv_var__tzname,
870 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
872 extern char *_tzname[];]], [atoi(*_tzname);])],[ac_cv_var__tzname=yes],[ac_cv_var__tzname=no])])
873 if test $ac_cv_var__tzname = yes; then
878 AC_SUBST(U_HAVE_TZNAME)
881 AC_CACHE_CHECK(for timezone,ac_cv_var_timezone,
882 [AC_LINK_IFELSE([AC_LANG_PROGRAM([#ifndef __USE_POSIX
889 ], [[timezone = 1;]])],[ac_cv_var_timezone=yes],[ac_cv_var_timezone=no])])
891 if test $ac_cv_var_timezone = yes; then
895 AC_CACHE_CHECK(for __timezone,ac_cv_var___timezone,
896 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[__timezone = 1;]])],[ac_cv_var___timezone=yes],[ac_cv_var___timezone=no])])
897 if test $ac_cv_var___timezone = yes; then
898 U_TIMEZONE=__timezone
901 AC_CACHE_CHECK(for _timezone,ac_cv_var__timezone,
902 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[_timezone = 1;]])],[ac_cv_var__timezone=yes],[ac_cv_var__timezone=no])])
903 if test $ac_cv_var__timezone = yes; then
909 AC_SUBST(U_HAVE_TIMEZONE)
912 # Checks for typedefs
913 AC_CHECK_TYPE(int8_t,signed char)
914 AC_CHECK_TYPE(uint8_t,unsigned char)
915 AC_CHECK_TYPE(int16_t,signed short)
916 AC_CHECK_TYPE(uint16_t,unsigned short)
917 AC_CHECK_TYPE(int32_t,signed long)
918 AC_CHECK_TYPE(uint32_t,unsigned long)
919 AC_CHECK_TYPE(int64_t,signed long long)
920 AC_CHECK_TYPE(uint64_t,unsigned long long)
922 if test $ac_cv_type_int8_t = no; then
927 AC_SUBST(HAVE_INT8_T)
929 if test $ac_cv_type_uint8_t = no; then
934 AC_SUBST(HAVE_UINT8_T)
936 if test $ac_cv_type_int16_t = no; then
941 AC_SUBST(HAVE_INT16_T)
943 if test $ac_cv_type_uint16_t = no; then
948 AC_SUBST(HAVE_UINT16_T)
950 if test $ac_cv_type_int32_t = no; then
955 AC_SUBST(HAVE_INT32_T)
957 if test $ac_cv_type_uint32_t = no; then
962 AC_SUBST(HAVE_UINT32_T)
964 if test $ac_cv_type_int64_t = no; then
969 AC_SUBST(HAVE_INT64_T)
971 if test $ac_cv_type_uint64_t = no; then
976 AC_SUBST(HAVE_UINT64_T)
978 # Do various wchar_t related checks
979 AC_CHECK_HEADER(wchar.h)
980 if test "$ac_cv_header_wchar_h" = no
985 AC_DEFINE([HAVE_WCHAR_H], [1], [wchar.h was found.])
987 # Some broken systems have wchar.h but not some of its functions...
988 AC_SEARCH_LIBS(wcscpy, wcs w)
989 if test "$ac_cv_search_wcscpy" != no; then
995 AC_SUBST(U_HAVE_WCHAR_H)
996 AC_SUBST(U_HAVE_WCSCPY)
998 AC_CHECK_SIZEOF([wchar_t], 0, [
1007 U_SIZEOF_WCHAR_T=$ac_cv_sizeof_wchar_t
1008 # We do this check to verify that everything is okay.
1009 if test $U_SIZEOF_WCHAR_T = 0; then
1010 if test $U_HAVE_WCHAR_H=1; then
1011 AC_MSG_ERROR(There is wchar.h but the size of wchar_t is 0)
1014 AC_SUBST(U_SIZEOF_WCHAR_T)
1016 AC_MSG_CHECKING([for UTF-16 string literal support])
1017 U_CHECK_UTF16_STRING=1
1018 CHECK_UTF16_STRING_RESULT="unknown"
1021 *-*-aix*|powerpc64-*-linux*)
1022 if test "$ac_cv_c_compiler_gnu" = no; then
1023 OLD_CFLAGS="${CFLAGS}"
1024 OLD_CXXFLAGS="${CXXFLAGS}"
1025 CFLAGS="${CFLAGS} -qutf"
1026 CXXFLAGS="${CXXFLAGS} -qutf"
1027 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[const unsigned short hello[] = u"hello";]], [[]])],[U_CHECK_UTF16_STRING=1],[U_CHECK_UTF16_STRING=0])
1028 if test "$U_CHECK_UTF16_STRING" = 0; then
1029 CFLAGS="${OLD_CFLAGS}"
1030 CXXFLAGS="${OLD_CXXFLAGS}"
1032 CHECK_UTF16_STRING_RESULT="-qutf"
1037 if test "$ac_cv_c_compiler_gnu" = no; then
1038 OLD_CFLAGS="${CFLAGS}"
1039 OLD_CXXFLAGS="${CXXFLAGS}"
1040 CFLAGS="${CFLAGS} -xustr=ascii_utf16_ushort"
1041 CXXFLAGS="${CXXFLAGS} -xustr=ascii_utf16_ushort"
1042 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[const unsigned short hello[] = U"hello";]], [[]])],[U_CHECK_UTF16_STRING=1],[U_CHECK_UTF16_STRING=0])
1043 if test "$U_CHECK_UTF16_STRING" = 0; then
1044 CFLAGS="${OLD_CFLAGS}"
1045 CXXFLAGS="${OLD_CXXFLAGS}"
1047 CHECK_UTF16_STRING_RESULT="-xustr=ascii_utf16_ushort"
1049 # Since we can't detect the availability of this UTF-16 syntax at compile time,
1050 # we depend on configure telling us that we can use it.
1051 # Since we can't ensure ICU users use -xustr=ascii_utf16_ushort,
1052 # we only use this macro within ICU.
1053 # If an ICU user uses icu-config, this feature will be enabled.
1054 CPPFLAGS="${CPPFLAGS} -DU_CHECK_UTF16_STRING=1"
1055 U_CHECK_UTF16_STRING=0
1060 if test "$ac_cv_c_compiler_gnu" = no; then
1061 # The option will be detected at compile time without additional compiler options.
1062 CHECK_UTF16_STRING_RESULT="available"
1066 # wchar_t can be used
1067 CHECK_UTF16_STRING_RESULT="available"
1073 # GCC >= 4.4 supports UTF16 string literals. The CFLAGS and CXXFLAGS may change in the future.
1074 # Since we have to use a different standard, if strict is enable, don't enable UTF16 string literals.
1075 U_CHECK_GNUC_UTF16_STRING=0
1076 if test "$ac_use_strict_options" = no && test "$CHECK_UTF16_STRING_RESULT" = "unknown"; then
1077 if test "$ac_cv_c_compiler_gnu" = yes; then
1078 OLD_CFLAGS="${CFLAGS}"
1079 OLD_CXXFLAGS="${CXXFLAGS}"
1080 CFLAGS="${CFLAGS} -std=gnu99 -D_GCC_"
1081 CXXFLAGS="${CXXFLAGS} -std=c++0x"
1082 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1083 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
1085 typedef __CHAR16_TYPE__ char16_t;
1087 char16_t test[] = u"This is a UTF16 literal string.";
1091 ]], [[]])],[U_CHECK_UTF16_STRING=1],[U_CHECK_UTF16_STRING=0])
1092 if test "$U_CHECK_UTF16_STRING" = 1; then
1093 CHECK_UTF16_STRING_RESULT="available";
1094 U_CHECK_GNUC_UTF16_STRING=1
1096 CFLAGS="${OLD_CFLAGS}"
1097 CXXFLAGS="${OLD_CXXFLAGS}"
1101 AC_SUBST(U_CHECK_GNUC_UTF16_STRING)
1103 AC_MSG_RESULT($CHECK_UTF16_STRING_RESULT)
1104 AC_SUBST(U_CHECK_UTF16_STRING)
1106 # Enable/disable extras
1107 AC_ARG_ENABLE(extras,
1108 [ --enable-extras build ICU extras [default=yes]],
1109 [case "${enableval}" in
1112 *) AC_MSG_ERROR(bad value ${enableval} for --enable-extras) ;;
1115 ICU_CONDITIONAL(EXTRAS, test "$extras" = true)
1116 AC_ARG_ENABLE(icuio,
1117 [ --enable-icuio build ICU's icuio library [default=yes]],
1118 [case "${enableval}" in
1121 *) AC_MSG_ERROR(bad value ${enableval} for --enable-icuio) ;;
1124 ICU_CONDITIONAL(ICUIO, test "$icuio" = true)
1126 # Enable/disable layout
1127 AC_ARG_ENABLE(layout,
1128 [ --enable-layout build ICU's layout library [default=yes]],
1129 [case "${enableval}" in
1132 *) AC_MSG_ERROR(bad value ${enableval} for --enable-layout) ;;
1135 ICU_CONDITIONAL(LAYOUT, test "$layout" = true)
1137 AC_ARG_WITH(data-packaging,
1138 [ --with-data-packaging=type specify how to package ICU data (files, archive, library, static, auto) [default=auto]],
1139 [case "${withval}" in
1140 files|archive|library) datapackaging=$withval ;;
1141 auto) datapackaging=$withval ;;
1142 common) datapackaging=archive ;;
1143 dll) datapackaging=library ;;
1144 static) datapackaging=static ;;
1145 *) AC_MSG_ERROR(bad value ${withval} for --with-data-packaging) ;;
1149 # Note: 'thesysconfdir' is an evaluated version, for Man pages, so also for thedatadir, thelibdir, etc..
1150 # thesysconfdir=`eval echo $sysconfdir`
1151 dnl# AC_SUBST(thesysconfdir)
1152 dnl# thelibdir=`test "x$exec_prefix" = xNONE && exec_prefix="$prefix"; eval echo $libdir`
1153 dnl# AC_SUBST(thelibdir)
1154 thedatadir=`eval echo $datadir`
1155 dnl# AC_SUBST(thedatadir)
1156 # 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}.
1157 pkgicudatadir=$datadir
1158 thepkgicudatadir=$thedatadir
1159 AC_SUBST(pkgicudatadir)
1160 AC_SUBST(thepkgicudatadir)
1162 dnl# Shouldn't need the AC_SUBST
1164 if test x"$datapackaging" = x -o x"$datapackaging" = xauto; then
1165 # default to library
1166 datapackaging=library
1167 if test "$ENABLE_STATIC" = "YES"; then
1168 if test "$ENABLE_SHARED" != "YES"; then
1169 datapackaging=static
1174 datapackaging_dir=`eval echo $thedatadir`"/icu/${VERSION}"
1176 datapackaging_msg="(No explaination for mode $datapackaging.)"
1178 datapackaging_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."
1179 datapackaging_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."
1180 datapackaging_howfound="(unknown)"
1182 case "$datapackaging" in
1184 DATA_PACKAGING_MODE=files
1185 datapackaging_msg="ICU data will be stored in individual files."
1186 datapackaging_howfound="$datapackaging_msg_path"
1189 DATA_PACKAGING_MODE=common
1190 datapackaging_msg="ICU data will be stored in a single .dat file."
1191 datapackaging_howfound="$datapackaging_msg_path"
1194 DATA_PACKAGING_MODE=dll
1195 datapackaging_msg="ICU data will be linked with ICU."
1196 if test "$ENABLE_STATIC" = "YES"; then
1197 datapackaging_msg="$datapackaging_msg A static data library will be built. "
1199 if test "$ENABLE_SHARED" = "YES"; then
1200 datapackaging_msg="$datapackaging_msg A shared data library will be built. "
1202 datapackaging_howfound="$datapackaging_msg_set"
1205 DATA_PACKAGING_MODE=static
1206 datapackaging_msg="ICU data will be stored in a static library."
1207 datapackaging_howfound="$datapackaging_msg_set"
1210 AC_SUBST(DATA_PACKAGING_MODE)
1212 # Sets a library suffix
1213 AC_MSG_CHECKING([for a library suffix to use])
1214 AC_ARG_WITH(library-suffix,
1215 [ --with-library-suffix=suffix tag a suffix to the library names [default=]],
1216 [ICULIBSUFFIX="${withval}"],
1219 if test "$msg" = ""; then
1223 AC_SUBST(ICULIBSUFFIX)
1224 if test "$ICULIBSUFFIX" != ""
1227 ICULIBSUFFIXCNAME=`echo _$ICULIBSUFFIX | sed 's/[^A-Za-z0-9_]/_/g'`
1231 AC_SUBST(U_HAVE_LIB_SUFFIX)
1232 AC_SUBST(ICULIBSUFFIXCNAME)
1234 # Enable/disable tests
1235 AC_ARG_ENABLE(tests,
1236 [ --enable-tests build ICU tests [default=yes]],
1237 [case "${enableval}" in
1240 *) AC_MSG_ERROR(bad value ${enableval} for --enable-tests) ;;
1243 ICU_CONDITIONAL(TESTS, test "$tests" = true)
1245 # Enable/disable samples
1246 AC_ARG_ENABLE(samples,
1247 [ --enable-samples build ICU samples [default=yes]
1249 Additionally, the variable FORCE_LIBS may be set before calling configure.
1250 If 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) ;;
1257 ICU_CONDITIONAL(SAMPLES, test "$samples" = true)
1259 ICUDATA_CHAR=$U_ENDIAN_CHAR
1261 # Platform-specific Makefile setup
1262 # set ICUDATA_CHAR to 'e' for any EBCDIC (which should be big endian) platform.
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*|*-*-mingw*) platform=U_CYGWIN ;;
1271 *-*ibm-openedition*|*-*-os390*) platform=OS390
1272 if test "${ICU_ENABLE_ASCII_STRINGS}" != "1"; then
1275 *-*-os400*) platform=OS400
1276 if test "${ICU_ENABLE_ASCII_STRINGS}" != "1"; then
1279 *-*-nto*) platform=U_QNX ;;
1280 *-dec-osf*) platform=U_OSF ;;
1281 *-*-beos) platform=U_BEOS ;;
1282 *-*-irix*) platform=U_IRIX ;;
1283 *-ncr-*) platform=U_MPRAS ;;
1284 *) platform=U_UNKNOWN_PLATFORM ;;
1286 AC_SUBST(ICUDATA_CHAR)
1288 platform_make_fragment_name="$icu_cv_host_frag"
1289 platform_make_fragment='$(top_srcdir)/config/'"$platform_make_fragment_name"
1290 AC_SUBST(platform_make_fragment_name)
1291 AC_SUBST(platform_make_fragment)
1293 if test "${FORCE_LIBS}" != ""; then
1294 echo " *** Overriding automatically chosen [LIBS=$LIBS], using instead [FORCE_LIBS=${FORCE_LIBS}]" 1>&6
1299 # Now that we're done using CPPFLAGS etc. for tests, we can change it
1302 if test $ICU_USE_THREADS -ne 0
1304 CPPFLAGS="$CPPFLAGS \$(THREADSCPPFLAGS)"
1305 CFLAGS="$CFLAGS \$(THREADSCFLAGS)"
1306 CXXFLAGS="$CXXFLAGS \$(THREADSCXXFLAGS)"
1309 # output the Makefiles
1310 AC_CONFIG_FILES([icudefs.mk \
1312 data/pkgdataMakefile \
1313 config/Makefile.inc \
1315 config/pkgdataMakefile \
1324 extra/uconv/Makefile \
1325 extra/uconv/pkgdataMakefile \
1326 extra/scrptrun/Makefile \
1328 tools/ctestfw/Makefile \
1329 tools/toolutil/Makefile \
1330 tools/makeconv/Makefile \
1331 tools/genrb/Makefile \
1332 tools/genccode/Makefile \
1333 tools/gencmn/Makefile \
1334 tools/gencnval/Makefile \
1335 tools/genctd/Makefile \
1336 tools/gentest/Makefile \
1337 tools/gennorm2/Makefile \
1338 tools/genbrk/Makefile \
1339 tools/gensprep/Makefile \
1340 tools/icuinfo/Makefile \
1341 tools/icupkg/Makefile \
1342 tools/icuswap/Makefile \
1343 tools/pkgdata/Makefile \
1344 tools/tzcode/Makefile \
1345 tools/gencfu/Makefile \
1347 test/compat/Makefile \
1348 test/testdata/Makefile \
1349 test/testdata/pkgdataMakefile \
1350 test/hdrtst/Makefile \
1351 test/intltest/Makefile \
1352 test/cintltst/Makefile \
1353 test/iotest/Makefile \
1354 test/letest/Makefile \
1355 test/perf/Makefile \
1356 test/perf/collationperf/Makefile \
1357 test/perf/ubrkperf/Makefile \
1358 test/perf/charperf/Makefile \
1359 test/perf/convperf/Makefile \
1360 test/perf/normperf/Makefile \
1361 test/perf/DateFmtPerf/Makefile \
1362 test/perf/strsrchperf/Makefile \
1363 test/perf/unisetperf/Makefile \
1364 test/perf/usetperf/Makefile \
1365 test/perf/ustrperf/Makefile \
1366 test/perf/utfperf/Makefile \
1367 test/perf/utrie2perf/Makefile \
1368 samples/Makefile samples/date/Makefile \
1369 samples/cal/Makefile samples/layout/Makefile \
1370 common/unicode/platform.h])
1374 echo "ICU for C/C++ $VERSION is ready to be built."
1375 echo "=== Important Notes: ==="
1377 if test $ICU_USE_THREADS = 0; then
1379 echo "** ICU was configured without mutex or thread support. Multithread-safe operation will not be tested. If this is unexpected, then run configure with --enable-threads=yes or check the messages [above] to see why thread support was not found." 1>&6
1383 echo "Data Packaging: $datapackaging"
1384 echo " This means: $datapackaging_msg"
1385 echo " To locate data: $datapackaging_howfound"
1387 if test -n "`$U_MAKE -v 2>&1 | grep '^GNU Make'`"; then
1388 echo "Building ICU: Use a GNU make such as $U_MAKE to build ICU."
1390 echo "** WARNING: $U_MAKE may not be GNU make."
1391 echo "This may cause ICU to fail to build. Please make sure that GNU make"
1392 echo "is in your PATH so that the configure script can detect its location."
1395 AC_MSG_CHECKING([the version of "$U_MAKE"])
1396 if "$U_MAKE" -f "$srcdir/config/gmakever.mk" PLATFORM="$platform"; then
1399 AC_MSG_RESULT([too old or test failed - try upgrading GNU Make])
1402 $as_unset _CXX_CXXSUFFIX