# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

# Ensure that this happens before including rules.mk
ifdef USE_ICU
  ifndef MOZ_NATIVE_ICU
  # Library names: On Windows, ICU uses modified library names for static
  # and debug libraries.
    ifdef MOZ_SHARED_ICU
      ifeq ($(OS_ARCH),WINNT)
        ICU_FILES := $(foreach libname,$(ICU_LIB_NAMES),$(DEPTH)/intl/icu/target/lib/$(libname)$(MOZ_ICU_DBG_SUFFIX)$(MOZ_ICU_VERSION).dll)
      else # ! WINNT
        ifeq ($(OS_ARCH),Darwin)
          ICU_FILES := $(foreach libname,$(ICU_LIB_NAMES),$(DEPTH)/intl/icu/target/lib/$(DLL_PREFIX)$(libname).$(MOZ_ICU_VERSION)$(DLL_SUFFIX))
        else # ! Darwin
          ICU_FILES := $(foreach libname,$(ICU_LIB_NAMES),$(DEPTH)/intl/icu/target/lib/$(DLL_PREFIX)$(libname)$(DLL_SUFFIX).$(MOZ_ICU_VERSION))
        endif
      endif # WINNT
      ifdef ICU_FILES
        ICU_DEST := $(DIST)/bin
        INSTALL_TARGETS += ICU
        $(ICU_FILES): buildicu
        ICU_TARGET := target
      endif
    else # !MOZ_SHARED_ICU
      ifeq ($(OS_ARCH),WINNT)
        ICU_LIB_RENAME = $(foreach libname,$(ICU_LIB_NAMES),\
                             cp -p $(DEPTH)/intl/icu/target/lib/s$(libname)$(MOZ_ICU_DBG_SUFFIX).lib $(DEPTH)/intl/icu/target/lib/$(libname)$(MOZ_ICU_DBG_SUFFIX).lib;)
      endif
    endif # MOZ_SHARED_ICU
  endif # !MOZ_NATIVE_ICU
endif # USE_ICU

include $(topsrcdir)/config/rules.mk

ifdef USE_ICU
ifndef MOZ_NATIVE_ICU
target:: buildicu
$(STATIC_LIBS): buildicu

# - Force ICU to use the standard suffix for object files because expandlibs
#   will discard all files with a non-standard suffix (bug 857450).
# - Options for genrb: -k strict parsing; -R omit collation tailoring rules.
buildicu::
# ICU's build system is full of races, so force non-parallel build.
# Msys screws up GENRBOPTS when it contains spaces, so all genrb flags need
# to be stuck together. See https://bugzilla.mozilla.org/show_bug.cgi?id=1034594#c34
ifdef CROSS_COMPILE
	+ASAN_OPTIONS=detect_leaks=0 $(MAKE) -j1 -C $(DEPTH)/intl/icu/host STATIC_O=$(OBJ_SUFFIX) GENRBOPTS='-kRC'
endif
	+ASAN_OPTIONS=detect_leaks=0 $(MAKE) -j1 -C $(DEPTH)/intl/icu/target STATIC_O=$(OBJ_SUFFIX) GENRBOPTS='-kR'
	$(ICU_LIB_RENAME)

distclean clean::
ifdef CROSS_COMPILE
	+$(MAKE) -C $(DEPTH)/intl/icu/host $@ STATIC_O=$(OBJ_SUFFIX)
endif
	+$(MAKE) -C $(DEPTH)/intl/icu/target $@ STATIC_O=$(OBJ_SUFFIX)

endif
endif
