From 6255a77128d0ea4e1aa1b24ef9fa06ba71072e2e Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Mon, 31 Aug 2020 00:32:38 -0700 Subject: [PATCH] icu: fix compilation under CentOS 7 CentOS 7's GCC is quite old and does not put max_align_t under std. Signed-off-by: Rosen Penev --- libs/icu/Makefile | 2 +- libs/icu/patches/010-max_align_t.patch | 60 ++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 libs/icu/patches/010-max_align_t.patch diff --git a/libs/icu/Makefile b/libs/icu/Makefile index a215f66f3..3fd453de1 100644 --- a/libs/icu/Makefile +++ b/libs/icu/Makefile @@ -11,7 +11,7 @@ PKG_NAME:=icu4c MAJOR_VERSION:=67 MINOR_VERSION:=1 PKG_VERSION:=$(MAJOR_VERSION).$(MINOR_VERSION) -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE:=$(PKG_NAME)-$(MAJOR_VERSION)_$(MINOR_VERSION)-src.tgz PKG_SOURCE_URL:=https://github.com/unicode-org/icu/releases/download/release-$(MAJOR_VERSION)-$(MINOR_VERSION) diff --git a/libs/icu/patches/010-max_align_t.patch b/libs/icu/patches/010-max_align_t.patch new file mode 100644 index 000000000..3c0495184 --- /dev/null +++ b/libs/icu/patches/010-max_align_t.patch @@ -0,0 +1,60 @@ +--- a/common/uarrsort.cpp ++++ b/common/uarrsort.cpp +@@ -37,7 +37,7 @@ enum { + }; + + static constexpr int32_t sizeInMaxAlignTs(int32_t sizeInBytes) { +- return (sizeInBytes + sizeof(std::max_align_t) - 1) / sizeof(std::max_align_t); ++ return (sizeInBytes + sizeof(max_align_t) - 1) / sizeof(max_align_t); + } + + /* UComparator convenience implementations ---------------------------------- */ +@@ -141,7 +141,7 @@ static void + insertionSort(char *array, int32_t length, int32_t itemSize, + UComparator *cmp, const void *context, UErrorCode *pErrorCode) { + +- icu::MaybeStackArray v; ++ icu::MaybeStackArray v; + if (sizeInMaxAlignTs(itemSize) > v.getCapacity() && + v.resize(sizeInMaxAlignTs(itemSize)) == nullptr) { + *pErrorCode = U_MEMORY_ALLOCATION_ERROR; +@@ -235,7 +235,7 @@ static void + quickSort(char *array, int32_t length, int32_t itemSize, + UComparator *cmp, const void *context, UErrorCode *pErrorCode) { + /* allocate two intermediate item variables (x and w) */ +- icu::MaybeStackArray xw; ++ icu::MaybeStackArray xw; + if(sizeInMaxAlignTs(itemSize)*2 > xw.getCapacity() && + xw.resize(sizeInMaxAlignTs(itemSize) * 2) == nullptr) { + *pErrorCode=U_MEMORY_ALLOCATION_ERROR; +--- a/common/utext.cpp ++++ b/common/utext.cpp +@@ -569,7 +569,7 @@ enum { + + struct ExtendedUText { + UText ut; +- std::max_align_t extension; ++ max_align_t extension; + }; + + static const UText emptyText = UTEXT_INITIALIZER; +@@ -584,7 +584,7 @@ utext_setup(UText *ut, int32_t extraSpace, UErrorCode *status) { + // We need to heap-allocate storage for the new UText + int32_t spaceRequired = sizeof(UText); + if (extraSpace > 0) { +- spaceRequired = sizeof(ExtendedUText) + extraSpace - sizeof(std::max_align_t); ++ spaceRequired = sizeof(ExtendedUText) + extraSpace - sizeof(max_align_t); + } + ut = (UText *)uprv_malloc(spaceRequired); + if (ut == NULL) { +--- a/tools/toolutil/toolutil.cpp ++++ b/tools/toolutil/toolutil.cpp +@@ -245,7 +245,7 @@ struct UToolMemory { + char name[64]; + int32_t capacity, maxCapacity, size, idx; + void *array; +- alignas(std::max_align_t) char staticArray[1]; ++ alignas(max_align_t) char staticArray[1]; + }; + + U_CAPI UToolMemory * U_EXPORT2