diff -r 000000000000 -r 6474c204b198 build/autoconf/icu.m4 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/build/autoconf/icu.m4 Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,327 @@ +dnl This Source Code Form is subject to the terms of the Mozilla Public +dnl License, v. 2.0. If a copy of the MPL was not distributed with this +dnl file, You can obtain one at http://mozilla.org/MPL/2.0/. + +dnl Set the MOZ_ICU_VERSION variable to denote the current version of the +dnl ICU library, and also the MOZ_SHARED_ICU which would be true if we are +dnl linking against a shared library of ICU, either one that we build from +dnl our copy of ICU or the system provided library. + +AC_DEFUN([MOZ_CONFIG_ICU], [ + +ICU_LIB_NAMES= +MOZ_NATIVE_ICU= +MOZ_ARG_WITH_BOOL(system-icu, +[ --with-system-icu + Use system ICU (located with pkgconfig)], + MOZ_NATIVE_ICU=1) + +if test -n "$MOZ_NATIVE_ICU"; then + PKG_CHECK_MODULES(MOZ_ICU, icu-i18n >= 50.1) + MOZ_SHARED_ICU=1 +else + MOZ_ICU_CFLAGS='-I$(topsrcdir)/intl/icu/source/common -I$(topsrcdir)/intl/icu/source/i18n' + AC_SUBST(MOZ_ICU_CFLAGS) +fi + +AC_SUBST(MOZ_NATIVE_ICU) + +MOZ_ARG_WITH_STRING(intl-api, +[ --with-intl-api, --with-intl-api=build, --without-intl-api + Determine the status of the ECMAScript Internationalization API. The first + (or lack of any of these) builds and exposes the API. The second builds it + but doesn't use ICU or expose the API to script. The third doesn't build + ICU at all.], + _INTL_API=$withval) + +ENABLE_INTL_API= +EXPOSE_INTL_API= +case "$_INTL_API" in +no) + ;; +build) + ENABLE_INTL_API=1 + ;; +yes) + ENABLE_INTL_API=1 + EXPOSE_INTL_API=1 + ;; +*) + AC_MSG_ERROR([Invalid value passed to --with-intl-api: $_INTL_API]) + ;; +esac + +if test -n "$EXPOSE_INTL_API"; then + AC_DEFINE(EXPOSE_INTL_API) +fi + +dnl Settings for the implementation of the ECMAScript Internationalization API +if test -n "$ENABLE_INTL_API"; then + AC_DEFINE(ENABLE_INTL_API) + + icudir="$_topsrcdir/intl/icu/source" + if test ! -d "$icudir"; then + icudir="$_topsrcdir/../../intl/icu/source" + if test ! -d "$icudir"; then + AC_MSG_ERROR([Cannot find the ICU directory]) + fi + fi + + version=`sed -n 's/^[[:space:]]*#[[:space:]]*define[[:space:]][[:space:]]*U_ICU_VERSION_MAJOR_NUM[[:space:]][[:space:]]*\([0-9][0-9]*\)[[:space:]]*$/\1/p' "$icudir/common/unicode/uvernum.h"` + if test x"$version" = x; then + AC_MSG_ERROR([cannot determine icu version number from uvernum.h header file $lineno]) + fi + MOZ_ICU_VERSION="$version" + + if test -z "${JS_STANDALONE}" -a -n "${JS_SHARED_LIBRARY}${MOZ_NATIVE_ICU}"; then + MOZ_SHARED_ICU=1 + fi + + AC_SUBST(MOZ_ICU_VERSION) + AC_SUBST(MOZ_SHARED_ICU) + + if test -z "$MOZ_NATIVE_ICU"; then + case "$OS_TARGET" in + WINNT) + ICU_LIB_NAMES="icuin icuuc icudt" + if test -n "$MOZ_SHARED_ICU"; then + DBG_SUFFIX= + if test -n "$MOZ_DEBUG"; then + DBG_SUFFIX=d + fi + MOZ_ICU_LIBS='$(foreach lib,$(ICU_LIB_NAMES),$(DEPTH)/intl/icu/target/lib/$(LIB_PREFIX)$(lib)$(DBG_SUFFIX).$(LIB_SUFFIX))' + fi + ;; + Darwin) + ICU_LIB_NAMES="icui18n icuuc icudata" + if test -n "$MOZ_SHARED_ICU"; then + MOZ_ICU_LIBS='$(foreach lib,$(ICU_LIB_NAMES),$(DEPTH)/intl/icu/target/lib/$(DLL_PREFIX)$(lib).$(MOZ_ICU_VERSION)$(DLL_SUFFIX))' + fi + ;; + Linux|DragonFly|FreeBSD|NetBSD|OpenBSD|GNU/kFreeBSD) + ICU_LIB_NAMES="icui18n icuuc icudata" + if test -n "$MOZ_SHARED_ICU"; then + MOZ_ICU_LIBS='$(foreach lib,$(ICU_LIB_NAMES),$(DEPTH)/intl/icu/target/lib/$(DLL_PREFIX)$(lib)$(DLL_SUFFIX).$(MOZ_ICU_VERSION))' + fi + ;; + *) + AC_MSG_ERROR([ECMAScript Internationalization API is not yet supported on this platform]) + esac + if test -z "$MOZ_SHARED_ICU"; then + MOZ_ICU_LIBS='$(call EXPAND_LIBNAME_PATH,$(ICU_LIB_NAMES),$(DEPTH)/intl/icu/target/lib)' + fi + fi +fi + +AC_SUBST(DBG_SUFFIX) +AC_SUBST(ENABLE_INTL_API) +AC_SUBST(ICU_LIB_NAMES) +AC_SUBST(MOZ_ICU_LIBS) + +if test -n "$ENABLE_INTL_API" -a -z "$MOZ_NATIVE_ICU"; then + dnl We build ICU as a static library for non-shared js builds and as a shared library for shared js builds. + if test -z "$MOZ_SHARED_ICU"; then + AC_DEFINE(U_STATIC_IMPLEMENTATION) + fi + dnl Source files that use ICU should have control over which parts of the ICU + dnl namespace they want to use. + AC_DEFINE(U_USING_ICU_NAMESPACE,0) +fi + + +]) + +AC_DEFUN([MOZ_SUBCONFIGURE_ICU], [ + +if test -z "$BUILDING_JS" -o -n "$JS_STANDALONE"; then + + if test -n "$ENABLE_INTL_API" -a -z "$MOZ_NATIVE_ICU"; then + # Set ICU compile options + ICU_CPPFLAGS="" + # don't use icu namespace automatically in client code + ICU_CPPFLAGS="$ICU_CPPFLAGS -DU_USING_ICU_NAMESPACE=0" + # don't include obsolete header files + ICU_CPPFLAGS="$ICU_CPPFLAGS -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1" + # remove chunks of the library that we don't need (yet) + ICU_CPPFLAGS="$ICU_CPPFLAGS -DUCONFIG_NO_LEGACY_CONVERSION" + ICU_CPPFLAGS="$ICU_CPPFLAGS -DUCONFIG_NO_TRANSLITERATION" + ICU_CPPFLAGS="$ICU_CPPFLAGS -DUCONFIG_NO_REGULAR_EXPRESSIONS" + ICU_CPPFLAGS="$ICU_CPPFLAGS -DUCONFIG_NO_BREAK_ITERATION" + # make sure to not accidentally pick up system-icu headers + ICU_CPPFLAGS="$ICU_CPPFLAGS -I$icudir/common -I$icudir/i18n" + + ICU_CROSS_BUILD_OPT="" + ICU_SRCDIR="" + if test "$HOST_OS_ARCH" = "WINNT"; then + ICU_SRCDIR="--srcdir=$(cd $srcdir/intl/icu/source; pwd -W)" + fi + + if test "$CROSS_COMPILE"; then + # Building host tools. It is necessary to build target binary. + case "$HOST_OS_ARCH" in + Darwin) + ICU_TARGET=MacOSX + ;; + Linux) + ICU_TARGET=Linux + ;; + WINNT) + ICU_TARGET=MSYS/MSVC + ;; + DragonFly|FreeBSD|NetBSD|OpenBSD|GNU_kFreeBSD) + ICU_TARGET=BSD + ;; + esac + # Remove _DEPEND_CFLAGS from HOST_FLAGS to avoid configure error + HOST_ICU_CFLAGS="$HOST_CFLAGS" + HOST_ICU_CXXFLAGS="$HOST_CXXFLAGS" + + HOST_ICU_CFLAGS=`echo $HOST_ICU_CFLAGS | sed "s|$_DEPEND_CFLAGS||g"` + HOST_ICU_CXXFLAGS=`echo $HOST_ICU_CFXXLAGS | sed "s|$_DEPEND_CFLAGS||g"` + + # ICU requires RTTI + if test "$GNU_CC"; then + HOST_ICU_CXXFLAGS=`echo $HOST_ICU_CXXFLAGS | sed 's|-fno-rtti|-frtti|g'` + elif test "$_MSC_VER"; then + HOST_ICU_CXXFLAGS=`echo $HOST_ICU_CXXFLAGS | sed 's|-GR-|-GR|g'` + fi + + HOST_ICU_BUILD_OPTS="" + if test -n "$MOZ_DEBUG"; then + HOST_ICU_BUILD_OPTS="$HOST_ICU_BUILD_OPTS --enable-debug" + fi + + abs_srcdir=`(cd $srcdir; pwd)` + mkdir -p $_objdir/intl/icu/host + (cd $_objdir/intl/icu/host + MOZ_SUBCONFIGURE_WRAP([.],[ + AR="$HOST_AR" RANLIB="$HOST_RANLIB" \ + CC="$HOST_CC" CXX="$HOST_CXX" LD="$HOST_LD" \ + CFLAGS="$HOST_ICU_CFLAGS $HOST_OPTIMIZE_FLAGS" \ + CPPFLAGS="$ICU_CPPFLAGS" \ + CXXFLAGS="$HOST_ICU_CXXFLAGS $HOST_OPTIMIZE_FLAGS" \ + LDFLAGS="$HOST_LDFLAGS" \ + $SHELL $abs_srcdir/intl/icu/source/runConfigureICU \ + $HOST_ICU_BUILD_OPTS \ + $ICU_TARGET \ + dnl Shell quoting is fun. + ${ICU_SRCDIR+"$ICU_SRCDIR"} \ + --enable-static --disable-shared \ + --enable-extras=no --enable-icuio=no --enable-layout=no \ + --enable-tests=no --enable-samples=no || exit 1 + ]) + ) || exit 1 + # generate config/icucross.mk + $GMAKE -C $_objdir/intl/icu/host/ config/icucross.mk + + # --with-cross-build requires absolute path + ICU_HOST_PATH=`cd $_objdir/intl/icu/host && pwd` + ICU_CROSS_BUILD_OPT="--with-cross-build=$ICU_HOST_PATH" + ICU_TARGET_OPT="--build=$build --host=$target" + else + # CROSS_COMPILE isn't set build and target are i386 and x86-64. + # So we must set target for --build and --host. + ICU_TARGET_OPT="--build=$target --host=$target" + fi + + if test -z "$MOZ_SHARED_ICU"; then + # To reduce library size, use static linking + ICU_LINK_OPTS="--enable-static --disable-shared" + else + ICU_LINK_OPTS="--disable-static --enable-shared" + fi + # Force the ICU static libraries to be position independent code + ICU_CFLAGS="$DSO_PIC_CFLAGS $CFLAGS" + ICU_CXXFLAGS="$DSO_PIC_CFLAGS $CXXFLAGS" + + ICU_BUILD_OPTS="" + if test -n "$MOZ_DEBUG" -o "MOZ_DEBUG_SYMBOLS"; then + ICU_CFLAGS="$ICU_CFLAGS $MOZ_DEBUG_FLAGS" + ICU_CXXFLAGS="$ICU_CXXFLAGS $MOZ_DEBUG_FLAGS" + if test -n "$CROSS_COMPILE" -a "$OS_TARGET" = "Darwin" \ + -a "$HOST_OS_ARCH" != "Darwin" + then + # Bug 951758: Cross-OSX builds with non-Darwin hosts have issues + # with -g and friends (like -gdwarf and -gfull) because they try + # to run dsymutil + changequote(,) + ICU_CFLAGS=`echo $ICU_CFLAGS | sed 's|-g[^ \t]*||g'` + ICU_CXXFLAGS=`echo $ICU_CXXFLAGS | sed 's|-g[^ \t]*||g'` + changequote([,]) + fi + + ICU_LDFLAGS="$MOZ_DEBUG_LDFLAGS" + if test -z "$MOZ_DEBUG"; then + # To generate debug symbols, it requires MOZ_DEBUG_FLAGS. + # But, not debug build. + ICU_CFLAGS="$ICU_CFLAGS -UDEBUG -DNDEBUG" + ICU_CXXFLAGS="$ICU_CXXFLAGS -UDEBUG -DNDEBUG" + else + ICU_BUILD_OPTS="$ICU_BUILD_OPTS --enable-debug" + fi + fi + if test -z "$MOZ_OPTIMIZE"; then + ICU_BUILD_OPTS="$ICU_BUILD_OPTS --disable-release" + else + ICU_CFLAGS="$ICU_CFLAGS $MOZ_OPTIMIZE_FLAGS" + ICU_CXXFLAGS="$ICU_CXXFLAGS $MOZ_OPTIMIZE_FLAGS" + fi + + if test "$am_cv_langinfo_codeset" = "no"; then + # ex. Android + ICU_CPPFLAGS="$ICU_CPPFLAGS -DU_HAVE_NL_LANGINFO_CODESET=0" + fi + + # ICU requires RTTI + if test "$GNU_CC"; then + ICU_CXXFLAGS=`echo $ICU_CXXFLAGS | sed 's|-fno-rtti|-frtti|g'` + else + if test "$_MSC_VER"; then + ICU_CXXFLAGS=`echo $ICU_CXXFLAGS | sed 's|-GR-|-GR|g'` + fi + + # Add RTL flags for MSVCRT.DLL + if test -n "$MOZ_DEBUG"; then + ICU_CFLAGS="$ICU_CFLAGS -MDd" + ICU_CXXFLAGS="$ICU_CXXFLAGS -MDd" + else + ICU_CFLAGS="$ICU_CFLAGS -MD" + ICU_CXXFLAGS="$ICU_CXXFLAGS -MD" + fi + + # add disable optimize flag for workaround for bug 899948 + if test -z "$MOZ_OPTIMIZE"; then + ICU_CFLAGS="$ICU_CFLAGS -Od" + ICU_CXXFLAGS="$ICU_CXXFLAGS -Od" + fi + fi + + # We cannot use AC_OUTPUT_SUBDIRS since ICU tree is out of spidermonkey. + # When using AC_OUTPUT_SUBDIRS, objdir of ICU is out of objdir + # due to relative path. + # If building ICU moves into root of mozilla tree, we can use + # AC_OUTPUT_SUBDIR instead. + mkdir -p $_objdir/intl/icu/target + (cd $_objdir/intl/icu/target + MOZ_SUBCONFIGURE_WRAP([.],[ + AR="$AR" CC="$CC" CXX="$CXX" LD="$LD" \ + ARFLAGS="$ARFLAGS" \ + CPPFLAGS="$ICU_CPPFLAGS $CPPFLAGS" \ + CFLAGS="$ICU_CFLAGS" \ + CXXFLAGS="$ICU_CXXFLAGS" \ + LDFLAGS="$ICU_LDFLAGS $LDFLAGS" \ + $SHELL $_topsrcdir/intl/icu/source/configure \ + $ICU_BUILD_OPTS \ + $ICU_CROSS_BUILD_OPT \ + $ICU_LINK_OPTS \ + ${ICU_SRCDIR+"$ICU_SRCDIR"} \ + $ICU_TARGET_OPT \ + --disable-extras --disable-icuio --disable-layout \ + --disable-tests --disable-samples || exit 1 + ]) + ) || exit 1 + fi + +fi + +])