diff --git a/config/Makefile.in b/config/Makefile.in --- config/Makefile.in +++ config/Makefile.in @@ -97,16 +97,17 @@ export:: $(export-preqs) -DMOZ_TREE_PIXMAN=$(MOZ_TREE_PIXMAN) \ -DMOZ_NATIVE_HUNSPELL=$(MOZ_NATIVE_HUNSPELL) \ -DMOZ_NATIVE_BZ2=$(MOZ_NATIVE_BZ2) \ -DMOZ_NATIVE_ZLIB=$(MOZ_NATIVE_ZLIB) \ -DMOZ_NATIVE_PNG=$(MOZ_NATIVE_PNG) \ -DMOZ_NATIVE_JPEG=$(MOZ_NATIVE_JPEG) \ -DMOZ_NATIVE_LIBEVENT=$(MOZ_NATIVE_LIBEVENT) \ -DMOZ_NATIVE_LIBVPX=$(MOZ_NATIVE_LIBVPX) \ + -DMOZ_NATIVE_ICU=$(MOZ_NATIVE_ICU) \ $(srcdir)/system-headers | $(PERL) $(topsrcdir)/nsprpub/config/make-system-wrappers.pl system_wrappers $(INSTALL) system_wrappers $(DIST) GARBAGE_DIRS += system_wrappers endif ifdef WRAP_STL_INCLUDES ifdef GNU_CXX diff --git a/config/system-headers b/config/system-headers --- config/system-headers +++ config/system-headers @@ -1125,8 +1125,19 @@ gst/video/video.h sys/msg.h sys/ipc.h sys/thr.h sys/user.h kvm.h spawn.h err.h xlocale.h +#if MOZ_NATIVE_ICU==1 +unicode/locid.h +unicode/numsys.h +unicode/ucal.h +unicode/ucol.h +unicode/udat.h +unicode/udatpg.h +unicode/uenum.h +unicode/unum.h +unicode/ustring.h +#endif diff --git a/configure.in b/configure.in --- configure.in +++ configure.in @@ -4134,16 +4134,32 @@ if test -n "$MOZ_NATIVE_FFI"; then PKG_CHECK_MODULES(MOZ_FFI, libffi > 3.0.9) else PKG_CHECK_MODULES(MOZ_FFI, libffi >= 3.0.9) fi MOZ_JS_STATIC_LIBS="$MOZ_JS_STATIC_LIBS $MOZ_FFI_LIBS" fi dnl ======================================================== +dnl system icu support +dnl ======================================================== +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_JS_STATIC_LIBS="$MOZ_JS_STATIC_LIBS $MOZ_ICU_LIBS" +fi + +AC_SUBST(MOZ_NATIVE_ICU) + +dnl ======================================================== dnl Java SDK support dnl ======================================================== JAVA_BIN_PATH= MOZ_ARG_WITH_STRING(java-bin-path, [ --with-java-bin-path=dir Location of Java binaries (java, javac, jar)], JAVA_BIN_PATH=$withval) diff --git a/js/src/Makefile.in b/js/src/Makefile.in --- js/src/Makefile.in.orig 2013-10-22 08:19:02.000000000 +0200 +++ js/src/Makefile.in 2013-10-29 10:11:58.272605098 +0100 @@ -237,10 +237,14 @@ # ICU headers need to be available whether we build with the complete # Internationalization API or not - ICU stubs rely on them. +ifdef MOZ_NATIVE_ICU +LOCAL_INCLUDES += $(MOZ_ICU_CFLAGS) +else LOCAL_INCLUDES += \ -I$(topsrcdir)/../../intl/icu/source/common \ -I$(topsrcdir)/../../intl/icu/source/i18n \ $(NULL) +endif ifdef ENABLE_INTL_API @@ -260,6 +264,7 @@ ICU_MAKE = $(MAKE) endif +ifndef MOZ_NATIVE_ICU # - Build ICU as part of the "export" target, so things get built # in the right order. # - ICU requires GNU make according to its readme.html. pymake can't be used @@ -276,6 +281,7 @@ $(call SUBMAKE,$@,intl/icu) endif +endif # # END ECMAScript Internationalization API @@ -413,7 +419,11 @@ DEFINES += -DUSE_ZLIB endif -SHARED_LIBRARY_LIBS += $(ICU_LIBS) +ifdef MOZ_NATIVE_ICU +EXTRA_DSO_LDOPTS += $(MOZ_ICU_LIBS) +else +SHARED_LIBRARY_LIBS += $(MOZ_ICU_LIBS) +endif # Prevent floating point errors caused by VC++ optimizations ifdef _MSC_VER diff --git a/js/src/config/Makefile.in b/js/src/config/Makefile.in --- js/src/config/Makefile.in +++ js/src/config/Makefile.in @@ -54,16 +54,17 @@ include $(topsrcdir)/config/rules.mk HOST_CFLAGS += -DUNICODE -D_UNICODE ifdef WRAP_SYSTEM_INCLUDES export:: \ $(call mkdir_deps,system_wrappers_js) \ $(NULL) $(PYTHON) $(srcdir)/Preprocessor.py $(DEFINES) $(ACDEFINES) \ + -DMOZ_NATIVE_ICU=$(MOZ_NATIVE_ICU) \ $(srcdir)/system-headers | $(PERL) $(srcdir)/make-system-wrappers.pl system_wrappers_js $(INSTALL) system_wrappers_js $(DIST) GARBAGE_DIRS += system_wrappers_js endif GARBAGE += $(srcdir)/*.pyc *.pyc diff --git a/js/src/config/system-headers b/js/src/config/system-headers --- js/src/config/system-headers +++ js/src/config/system-headers @@ -1125,8 +1125,19 @@ gst/video/video.h sys/msg.h sys/ipc.h sys/thr.h sys/user.h kvm.h spawn.h err.h xlocale.h +#if MOZ_NATIVE_ICU==1 +unicode/locid.h +unicode/numsys.h +unicode/ucal.h +unicode/ucol.h +unicode/udat.h +unicode/udatpg.h +unicode/uenum.h +unicode/unum.h +unicode/ustring.h +#endif diff --git a/js/src/configure.in b/js/src/configure.in --- js/src/configure.in +++ js/src/configure.in @@ -4406,59 +4406,68 @@ if test "$ACCESSIBILITY" -a "$MOZ_ENABLE AC_DEFINE_UNQUOTED(ATK_MINOR_VERSION, $ATK_MINOR_VERSION) AC_DEFINE_UNQUOTED(ATK_REV_VERSION, $ATK_REV_VERSION) fi dnl ======================================================== dnl ECMAScript Internationalization API Support (uses ICU) dnl ======================================================== +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) +fi if test -n "$JS_STANDALONE"; then ENABLE_INTL_API=1 fi MOZ_ARG_ENABLE_BOOL(intl-api, [ --enable-intl-api Enable ECMAScript Internationalization API (default=yes for standalone JS)], ENABLE_INTL_API=1, ENABLE_INTL_API= ) dnl Settings for the implementation of the ECMAScript Internationalization API if test -n "$ENABLE_INTL_API"; then AC_DEFINE(ENABLE_INTL_API) - # We build ICU as a static library. - AC_DEFINE(U_STATIC_IMPLEMENTATION) - - case "$OS_TARGET" in - WINNT) - ICU_LIB_NAMES="icuin icuuc icudt" - ;; - Darwin|Linux) - ICU_LIB_NAMES="icui18n icuuc icudata" - ;; - *) - AC_MSG_ERROR([ECMAScript Internationalization API is not yet supported on this platform]) - esac - - ICU_LIBS='$(call EXPAND_LIBNAME_PATH,$(ICU_LIB_NAMES),$(DEPTH)/intl/icu/lib)' -else - ICU_LIB_NAMES= - ICU_LIBS= + + if test -z "$MOZ_NATIVE_ICU"; then + case "$OS_TARGET" in + WINNT) + ICU_LIB_NAMES="icuin icuuc icudt" + ;; + Darwin|Linux) + ICU_LIB_NAMES="icui18n icuuc icudata" + ;; + *) + AC_MSG_ERROR([ECMAScript Internationalization API is not yet supported on this platform]) + esac + MOZ_ICU_LIBS='$(call EXPAND_LIBNAME_PATH,$(ICU_LIB_NAMES),$(DEPTH)/intl/icu/lib)' + fi fi AC_SUBST(ENABLE_INTL_API) AC_SUBST(ICU_LIB_NAMES) -AC_SUBST(ICU_LIBS) - -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) - +AC_SUBST(MOZ_ICU_LIBS) +AC_SUBST(MOZ_NATIVE_ICU) dnl Settings for ICU -if test -n "$ENABLE_INTL_API" ; then +if test -n "$ENABLE_INTL_API" -a -z "$MOZ_NATIVE_ICU"; then + dnl We build ICU as a static library. + AC_DEFINE(U_STATIC_IMPLEMENTATION) + + 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) + # 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" diff --git a/js/src/gdb/Makefile.in b/js/src/gdb/Makefile.in --- js/src/gdb/Makefile.in +++ js/src/gdb/Makefile.in @@ -14,16 +14,20 @@ include $(DEPTH)/config/autoconf.mk # Building against js_static requires that we declare mfbt sybols "exported" # on its behalf. DEFINES += -DEXPORT_JS_API -DIMPL_MFBT LIBS = $(DEPTH)/$(LIB_PREFIX)js_static.$(LIB_SUFFIX) $(NSPR_LIBS) $(MOZ_ZLIB_LIBS) LOCAL_INCLUDES += -I$(topsrcdir) -I.. +ifdef MOZ_NATIVE_ICU +EXTRA_LIBS += $(MOZ_ICU_LIBS) +endif + EXTRA_LIBS += $(MOZ_FFI_LIBS) # Place a GDB Python auto-load file next to the gdb-tests executable, both # in the build directory and in the dist/bin directory. PP_TARGETS += GDB_AUTOLOAD GDB_AUTOLOAD := gdb-tests-gdb.py.in GDB_AUTOLOAD_FLAGS := -Dtopsrcdir=$(abspath $(topsrcdir)) diff --git a/js/src/jsapi-tests/Makefile.in b/js/src/jsapi-tests/Makefile.in --- js/src/jsapi-tests/Makefile.in +++ js/src/jsapi-tests/Makefile.in @@ -15,16 +15,20 @@ DEFINES += -DEXPORT_JS_API # Building against js_static requires that we declare mfbt sybols "exported" # on its behalf. DEFINES += -DIMPL_MFBT LIBS = $(DEPTH)/$(LIB_PREFIX)js_static.$(LIB_SUFFIX) $(NSPR_LIBS) $(MOZ_ZLIB_LIBS) LOCAL_INCLUDES += -I$(topsrcdir) -I.. +ifdef MOZ_NATIVE_ICU +EXTRA_LIBS += $(MOZ_ICU_LIBS) +endif + EXTRA_LIBS += $(MOZ_FFI_LIBS) ifdef QEMU_EXE MOZ_POST_PROGRAM_COMMAND = $(topsrcdir)/build/qemu-wrap --qemu $(QEMU_EXE) --libdir $(CROSS_LIB) endif # Place a GDB Python auto-load file next to the jsapi-tests executable in # the build directory. diff --git a/js/src/shell/Makefile.in b/js/src/shell/Makefile.in --- js/src/shell/Makefile.in +++ js/src/shell/Makefile.in @@ -22,16 +22,19 @@ DEFINES += -DEXPORT_JS_API # Building against js_static requires that we declare mfbt sybols "exported" # on its behalf. DEFINES += -DIMPL_MFBT LIBS = $(NSPR_LIBS) $(EDITLINE_LIBS) $(DEPTH)/$(LIB_PREFIX)js_static.$(LIB_SUFFIX) $(MOZ_ZLIB_LIBS) ifdef MOZ_NATIVE_FFI EXTRA_LIBS += $(MOZ_FFI_LIBS) endif +ifdef MOZ_NATIVE_ICU +EXTRA_LIBS += $(MOZ_ICU_LIBS) +endif LOCAL_INCLUDES += -I$(topsrcdir) -I.. ifeq ($(OS_ARCH),Darwin) ifeq ($(TARGET_CPU),x86_64) DARWIN_EXE_LDFLAGS += -pagezero_size 10000 -image_base 100000000 endif endif