ac1c781149
ICU build scripting adds some host libraries to LD_LIBRARY_PATH by using constructs of the following form: LD_LIBRARY_PATH="custom-path:${LD_LIBRARY_PATH}" If the original LD_LIBRARY_PATH is empty, this causes the last search directory be an empty string, i.e. the working directory. ICU build runs some basic host commands (e.g. "rm") in $(TARGET_DIR)/lib under such an LD_LIBRARY_PATH, causing target libraries (e.g. libc) to possibly get loaded instead of host system libraries if they are compatible enough (e.g. arch matches). Since the target libraries may not actually be ABI compatible with host system binaries (e.g. target has an old libc), this can cause crashes or other errors. Observed errors include: (1) rm: libc.so.6: version `GLIBC_2.33' not found (required by rm) (2) sh: line 1: 1362670 Segmentation fault (core dumped) rm -f libicudata.so.65 Workaround the issue by setting a dummy LD_LIBRARY_PATH when it would otherwise be empty. https://unicode-org.atlassian.net/browse/ICU-21417 Signed-off-by: Anssi Hannula <anssi.hannula@bitwise.fi> Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
82 lines
2.6 KiB
Makefile
82 lines
2.6 KiB
Makefile
################################################################################
|
|
#
|
|
# icu
|
|
#
|
|
################################################################################
|
|
|
|
# Git tags (and therefore versions on release-monitoring.org) use the
|
|
# XX-Y format, but the tarballs are named XX_Y and the containing
|
|
# directories XX.Y.
|
|
ICU_VERSION = 69-1
|
|
ICU_SOURCE = icu4c-$(subst -,_,$(ICU_VERSION))-src.tgz
|
|
ICU_SITE = \
|
|
https://github.com/unicode-org/icu/releases/download/release-$(ICU_VERSION)
|
|
ICU_LICENSE = ICU License
|
|
ICU_LICENSE_FILES = LICENSE
|
|
ICU_CPE_ID_VENDOR = icu-project
|
|
ICU_CPE_ID_PRODUCT = international_components_for_unicode
|
|
ICU_CPE_ID_VERSION = $(subst -,.,$(ICU_VERSION))
|
|
|
|
# 0005-ICU-21587-Fix-memory-bug-w-baseName.patch
|
|
ICU_IGNORE_CVES += CVE-2021-30535
|
|
|
|
ICU_DEPENDENCIES = host-icu
|
|
ICU_INSTALL_STAGING = YES
|
|
ICU_CONFIG_SCRIPTS = icu-config
|
|
ICU_CONF_OPTS = \
|
|
--with-cross-build=$(HOST_ICU_DIR)/source \
|
|
--disable-samples \
|
|
--disable-tests
|
|
|
|
# When available, icu prefers to use C++11 atomics, which rely on the
|
|
# __atomic builtins. On certain architectures, this requires linking
|
|
# with libatomic starting from gcc 4.8.
|
|
ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y)
|
|
ICU_CONF_ENV += LIBS="-latomic"
|
|
endif
|
|
|
|
# strtod_l() is not supported by musl; also xlocale.h is missing
|
|
ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y)
|
|
ICU_CONF_ENV += ac_cv_func_strtod_l=no
|
|
endif
|
|
|
|
HOST_ICU_CONF_OPTS = \
|
|
--disable-samples \
|
|
--disable-tests \
|
|
--disable-extras \
|
|
--disable-icuio \
|
|
--disable-layout \
|
|
--disable-renaming
|
|
ICU_SUBDIR = source
|
|
HOST_ICU_SUBDIR = source
|
|
|
|
# ICU build scripting adds paths to LD_LIBRARY_PATH using
|
|
# LD_LIBRARY_PATH="custom-path:${LD_LIBRARY_PATH}"
|
|
# which, if LD_LIBRARY_PATH was empty, causes the last search directory
|
|
# to be the working directory, causing the build to try to load target
|
|
# libraries, possibly crashing the build due to ABI mismatches.
|
|
# Workaround by ensuring LD_LIBRARY_PATH is never empty.
|
|
# https://unicode-org.atlassian.net/browse/ICU-21417
|
|
ifeq ($(LD_LIBRARY_PATH),)
|
|
ICU_MAKE_ENV += LD_LIBRARY_PATH=/dev/null
|
|
endif
|
|
|
|
ICU_CUSTOM_DATA_PATH = $(call qstrip,$(BR2_PACKAGE_ICU_CUSTOM_DATA_PATH))
|
|
|
|
ifneq ($(ICU_CUSTOM_DATA_PATH),)
|
|
define ICU_COPY_CUSTOM_DATA
|
|
cp $(ICU_CUSTOM_DATA_PATH) $(@D)/source/data/in/
|
|
endef
|
|
ICU_POST_PATCH_HOOKS += ICU_COPY_CUSTOM_DATA
|
|
endif
|
|
|
|
define ICU_REMOVE_DEV_FILES
|
|
rm -f $(addprefix $(TARGET_DIR)/usr/bin/,derb genbrk gencfu gencnval gendict genrb icuinfo makeconv uconv)
|
|
rm -f $(addprefix $(TARGET_DIR)/usr/sbin/,genccode gencmn gennorm2 gensprep icupkg)
|
|
rm -rf $(TARGET_DIR)/usr/share/icu
|
|
endef
|
|
ICU_POST_INSTALL_TARGET_HOOKS += ICU_REMOVE_DEV_FILES
|
|
|
|
$(eval $(autotools-package))
|
|
$(eval $(host-autotools-package))
|