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