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