From 4f2d7949f03e1c198bc888f2d05f421d35c57e21 Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Mon, 9 Oct 2017 18:53:29 +0100 Subject: reinit the tree, so we can have metadata --- dev-libs/icu/Manifest | 13 ++ dev-libs/icu/files/icu-58.1-iterator.patch | 127 ++++++++++++ dev-libs/icu/files/icu-58.1-remove-bashisms.patch | 224 ++++++++++++++++++++++ dev-libs/icu/files/icu-58.2-CVE-2017-7867.patch | 155 +++++++++++++++ dev-libs/icu/files/icu-58.2-glibc226.patch | 16 ++ dev-libs/icu/icu-58.1-r1.ebuild | 157 +++++++++++++++ dev-libs/icu/icu-58.2-r1.ebuild | 159 +++++++++++++++ dev-libs/icu/icu-59.1.ebuild | 157 +++++++++++++++ dev-libs/icu/metadata.xml | 8 + 9 files changed, 1016 insertions(+) create mode 100644 dev-libs/icu/Manifest create mode 100644 dev-libs/icu/files/icu-58.1-iterator.patch create mode 100644 dev-libs/icu/files/icu-58.1-remove-bashisms.patch create mode 100644 dev-libs/icu/files/icu-58.2-CVE-2017-7867.patch create mode 100644 dev-libs/icu/files/icu-58.2-glibc226.patch create mode 100644 dev-libs/icu/icu-58.1-r1.ebuild create mode 100644 dev-libs/icu/icu-58.2-r1.ebuild create mode 100644 dev-libs/icu/icu-59.1.ebuild create mode 100644 dev-libs/icu/metadata.xml (limited to 'dev-libs/icu') diff --git a/dev-libs/icu/Manifest b/dev-libs/icu/Manifest new file mode 100644 index 000000000000..a1868209dd1d --- /dev/null +++ b/dev-libs/icu/Manifest @@ -0,0 +1,13 @@ +AUX icu-58.1-iterator.patch 4097 SHA256 468bba2185584c30a5b096d7c85d0afa739067594f0883b6f8f448b1bf996801 SHA512 46c51629fb5ff14cdfcbc355bff6cceb7132fc79176ec7fcf76bd9ac8553fccbf6528508753b73a0a4301721260ad60a359bf56c66e3bd0151415a4a226ff21c WHIRLPOOL 4268216dad6ed8a2ce3e00cb1a9d7e7a8bcb2922ce1f02b5f50d07632a843d1bb8e1dea9710acff1cbc943a41940c22fc453faafe39fa3bb8bad068d0ca01588 +AUX icu-58.1-remove-bashisms.patch 5888 SHA256 8a2177d5f549168d5680d6477381a9f6f5ca0bd8f6bd23cc30d7f953e10907bc SHA512 54835db4db5bca704aed015a911a1f5285fbd3f6d09493cdcf98493d87a03851c9ee79cc9cbcb45da409513ad5b3af38b302aa5d164992d94af1f80c6349aeb8 WHIRLPOOL 8f0d95fe666a3de52ebf4511b0792add819e4dbf3e5e259e2f80bd1fce28e21bd046084a18c3130dc16ad1bc3c73cb912c8bb1d0d8bb387b0587d8748c656824 +AUX icu-58.2-CVE-2017-7867.patch 8934 SHA256 2dfef95f7f0ac9f769a8d221ba2572f30bbbb84c0566bfe5b0594287f8cfad87 SHA512 6e29326f378461ae07b253c59550447096352be1247e575d974839cea37ec326f7fa8dca58caab63544582ef9f4b3c71c9e3fa0eceb2e85fb7380ee71b138c5a WHIRLPOOL 43d1163e4e53db31929c380964b8ef1ad5dbdcf6d6f7d20cebf28b1959509783a4feaa42782af7fc3c3f555dbba4be6c4e18deaac096f0ea6ba031ac68891061 +AUX icu-58.2-glibc226.patch 463 SHA256 b3a7f74faddfaea0dd8f474093b3f8218b64f2757fb55188d9ec514d6fad5aed SHA512 20d8e76c43ef5549ca7f104b052661269c99d4af45b2a65bd9d72e28b01d0c3b70c066b51799e09d7117a4a39e44fd463fae2522a238a41972c0679c290c5da3 WHIRLPOOL 9f19a870de7ea6dcd02d9a4e9a767a17e03e8862121462204753e121550c5ebec1e0f13b7abe98447bf6d3d69a98ee8ae39c9a043665eb1fc4f65499a9c5de34 +DIST icu4c-58_1-src.tgz 23366443 SHA256 0eb46ba3746a9c2092c8ad347a29b1a1b4941144772d13a88667a7b11ea30309 SHA512 59b2a76834192a35125fda326587e613ef4486152cf0278c6f22568d4ae02c4b2d897efcea2654ef2b11bd1c3154aecd38cb68a70f69430736f343689f94c155 WHIRLPOOL faf2624a83f0d6f874166b328522dc9c89088db2690433ab05e96371722b635b81fd5210c7e87fe8e5df6681e881cf10204832925b448552affe8c2f6c851e37 +DIST icu4c-58_2-src.tgz 23369902 SHA256 2b0a4410153a9b20de0e20c7d8b66049a72aef244b53683d0d7521371683da0c SHA512 5c21af748f48b392e6c0412bd0aee92162ea931820dcbfab4ec6e0299868504b303d88f7586cc95de55c777ac0dca3a29d6c8ca0892c646ebc864c8a5b5a162a WHIRLPOOL 25829f8ee870b703fd604ae5b9b584390a142f5011e2a5db18332453e2f1640d81270086f243318eeb93f187b04ea23dab14901ab81c8d924c8d47b1f77aee5a +DIST icu4c-59_1-src.tgz 22706578 SHA256 7132fdaf9379429d004005217f10e00b7d2319d0fea22bdfddef8991c45b75fe SHA512 9348aa68d72a74cd1f26588c30c80eee1b48800a26930d7eb0749390fd65f7930ee8843058b6a6dd5f265e79054fef661e807ded16a1ad691cbc5ebc5ab944c4 WHIRLPOOL f213951e98b7e1b59a3caf193f671fd9dff9a77c49aa3c4c118d6e3414688830ffb029d5c01495b369d4e666ab38669340a4c24a26f93742a99145972e20ede0 +EBUILD icu-58.1-r1.ebuild 3332 SHA256 dc6106c4989b4f2659311dbb93bfbd8dae7c3d47909cf1b616910028e3e8618e SHA512 03883866e050b61cbeb8268247f8a59b6516df75a33be729b7a8c513a887d951d748af42950bdcb5484dff9d9734daad570943845aa75996297312ac0181a258 WHIRLPOOL 08a12d75f13a6683b2868def108208b6807b6fd1c529c62f60b17f75fca39aba98f9fc5db7d7eb8d4413ee793274109585edaa646bae9fc9337b0856f4e53917 +EBUILD icu-58.2-r1.ebuild 3420 SHA256 d007abe5c827d5101f50b8c35f7aa08b6f4a050e1c0e6cfaa57fb9da9ea46f18 SHA512 f1b4ac7b406f696b41434a321c2000454233aaf715002894e5c51f92f97b914a34c7d5d5c0287e0434d088d9b3864f2146f6b3917c5fda894d385a2ef24556b2 WHIRLPOOL 3a260e92a26f6bf40e11615884edac89c67991aeb724be7ed69f7a68c24b3e0072812c01281af7093ea8d7119a8026e9a11aaad78aa8884122d5bc25383f2706 +EBUILD icu-59.1.ebuild 3342 SHA256 4c342579f697b9f7a77b4e3b19b6e9c632d8aa1c1c306c287f09cfdb73d82ae1 SHA512 708ec7e483bb078b1d0f7067ba720197b37280de9a09ba1fb92a944aad3613fd1db93f94cc1d53ce457a2ec610afe88232a040a25128d873bc401b91f0bc5911 WHIRLPOOL 198d7808244b21964aeb76b58595a86d16fd4da4aa9278a8a4fd931bca2f19f59afed5d9e0c91dd863dd4f98e6b354e0d28bb748d8504b262ad0739c71497b9f +MISC ChangeLog 7015 SHA256 a409c7d4ade91a349b465124255aef89684f709ea747792e54d7793e515962a5 SHA512 dd4fcb6362b6fe14111487f5702820ba9acc8e006b5066cf325669aeb4def1f7d77e0074185bf4dc30b752c21cb3f1db6041bb56a3d51e7cd06f664097dee324 WHIRLPOOL 0b119392911cbd40e7474e668fed5c596e4915ac75fb86cc0dfa99480efa2ffa642659b7c102ba2bb887f81f4e1727f5a708f20cb73f19eeb56a3c75dcb32db9 +MISC ChangeLog-2015 40840 SHA256 a0753f110b13f5ed6f65cd0051e4b152e5dca9dedec14ee463ef16a7af9ba86e SHA512 4f2c4d74edbb747ba2c8e2111cd89e2b08d8bf1df16bf9db20b67969ce4f8422585b40eb42f9599c37cceb8f35424e74bfa50318d67ffdf35416995609042fc8 WHIRLPOOL 85f6ff953d6647f08988396c7d08805070fcf32b9111261f55dd4300bac54881086ef6bfb2831338fb9207cf042b54f43f098da3bd0ed33575ac7cc6fc164c27 +MISC metadata.xml 255 SHA256 34d028c790cfe86c47c5c3dcf8655fcefc3e23ff52fed38a400ce42d678c8c5e SHA512 ac646e8ac676faf0aac283e4be31c5f2b29e98ccf07327073ed05e688ce696caf639bdfea63e4aed141a90e84c0a86892bc717a52b95cdf1739aaa15240013c3 WHIRLPOOL 87f7199996948fe95e5417f8da0c4c90cd51a68f246ac8ae87a2e2a31c11c709f220d664eb893b34692577415e5f5eb351dd7e310dbc59f508fa40c7edb8ceeb diff --git a/dev-libs/icu/files/icu-58.1-iterator.patch b/dev-libs/icu/files/icu-58.1-iterator.patch new file mode 100644 index 000000000000..6f52375eb790 --- /dev/null +++ b/dev-libs/icu/files/icu-58.1-iterator.patch @@ -0,0 +1,127 @@ +source: http://bugs.icu-project.org/trac/changeset/39484/ + + +Index: icu/common/ulist.c +=================================================================== +--- icu/common/ulist.c (revision 39483) ++++ icu/common/ulist.c (revision 39484) +@@ -30,5 +30,4 @@ + + int32_t size; +- int32_t currentIndex; + }; + +@@ -52,5 +51,4 @@ + newList->tail = NULL; + newList->size = 0; +- newList->currentIndex = -1; + + return newList; +@@ -81,6 +79,7 @@ + p->next->previous = p->previous; + } +- list->curr = NULL; +- list->currentIndex = 0; ++ if (p == list->curr) { ++ list->curr = p->next; ++ } + --list->size; + if (p->forceDelete) { +@@ -151,5 +150,4 @@ + list->head->previous = newItem; + list->head = newItem; +- list->currentIndex++; + } + +@@ -194,5 +192,4 @@ + curr = list->curr; + list->curr = curr->next; +- list->currentIndex++; + + return curr->data; +@@ -210,5 +207,4 @@ + if (list != NULL) { + list->curr = list->head; +- list->currentIndex = 0; + } + } +@@ -273,3 +269,2 @@ + return (UList *)(en->context); + } +- +Index: icu/i18n/ucol_res.cpp +=================================================================== +--- icu/i18n/ucol_res.cpp (revision 39483) ++++ icu/i18n/ucol_res.cpp (revision 39484) +@@ -681,4 +681,5 @@ + } + memcpy(en, &defaultKeywordValues, sizeof(UEnumeration)); ++ ulist_resetList(sink.values); // Initialize the iterator. + en->context = sink.values; + sink.values = NULL; // Avoid deletion in the sink destructor. +Index: icu/test/intltest/apicoll.cpp +=================================================================== +--- icu/test/intltest/apicoll.cpp (revision 39483) ++++ icu/test/intltest/apicoll.cpp (revision 39484) +@@ -82,14 +82,7 @@ + col = Collator::createInstance(Locale::getEnglish(), success); + if (U_FAILURE(success)){ +- errcheckln(success, "Default Collator creation failed. - %s", u_errorName(success)); +- return; +- } +- +- StringEnumeration* kwEnum = col->getKeywordValuesForLocale("", Locale::getEnglish(),true,success); +- if (U_FAILURE(success)){ +- errcheckln(success, "Get Keyword Values for Locale failed. - %s", u_errorName(success)); +- return; +- } +- delete kwEnum; ++ errcheckln(success, "English Collator creation failed. - %s", u_errorName(success)); ++ return; ++ } + + col->getVersion(versionArray); +@@ -230,4 +223,27 @@ + delete aFrCol; + delete junk; ++} ++ ++void CollationAPITest::TestKeywordValues() { ++ IcuTestErrorCode errorCode(*this, "TestKeywordValues"); ++ LocalPointer col(Collator::createInstance(Locale::getEnglish(), errorCode)); ++ if (errorCode.logIfFailureAndReset("English Collator creation failed")) { ++ return; ++ } ++ ++ LocalPointer kwEnum( ++ col->getKeywordValuesForLocale("collation", Locale::getEnglish(), TRUE, errorCode)); ++ if (errorCode.logIfFailureAndReset("Get Keyword Values for English Collator failed")) { ++ return; ++ } ++ assertTrue("expect at least one collation tailoring for English", kwEnum->count(errorCode) > 0); ++ const char *kw; ++ UBool hasStandard = FALSE; ++ while ((kw = kwEnum->next(NULL, errorCode)) != NULL) { ++ if (strcmp(kw, "standard") == 0) { ++ hasStandard = TRUE; ++ } ++ } ++ assertTrue("expect at least the 'standard' collation tailoring for English", hasStandard); + } + +@@ -2467,4 +2483,5 @@ + TESTCASE_AUTO_BEGIN; + TESTCASE_AUTO(TestProperty); ++ TESTCASE_AUTO(TestKeywordValues); + TESTCASE_AUTO(TestOperators); + TESTCASE_AUTO(TestDuplicate); +Index: icu/test/intltest/apicoll.h +=================================================================== +--- icu/test/intltest/apicoll.h (revision 39483) ++++ icu/test/intltest/apicoll.h (revision 39484) +@@ -36,4 +36,5 @@ + */ + void TestProperty(/* char* par */); ++ void TestKeywordValues(); + + /** diff --git a/dev-libs/icu/files/icu-58.1-remove-bashisms.patch b/dev-libs/icu/files/icu-58.1-remove-bashisms.patch new file mode 100644 index 000000000000..ef60ce4569b8 --- /dev/null +++ b/dev-libs/icu/files/icu-58.1-remove-bashisms.patch @@ -0,0 +1,224 @@ +diff -ruN a/config/Makefile.inc.in b/config/Makefile.inc.in +--- a/config/Makefile.inc.in 2016-09-09 23:28:18.000000000 +0200 ++++ b/config/Makefile.inc.in 2016-11-05 19:43:07.688466668 +0100 +@@ -124,12 +124,6 @@ + # with usually. Many applications will want to add $(ICULIBS_I18N) as well. + ICULIBS = $(ICULIBS_BASE) $(ICULIBS_I18N) $(ICULIBS_COMMON) $(ICULIBS_DATA) + +-# Proper echo newline handling is needed in icu-config +-ECHO_N=@ICU_ECHO_N@ +-ECHO_C=@ICU_ECHO_C@ +-# Not currently being used but good to have for proper tab handling +-ECHO_T=@ICU_ECHO_T@ +- + ################################################################## + ################################################################## + # +diff -ruN a/config/icu-config-bottom b/config/icu-config-bottom +--- a/config/icu-config-bottom 2016-09-09 23:28:18.000000000 +0200 ++++ b/config/icu-config-bottom 2016-11-05 19:49:00.854481361 +0100 +@@ -218,65 +218,65 @@ + ;; + + --cflags) +- echo $ECHO_N "${CFLAGS} ${ECHO_C}" ++ printf "%s" "${CFLAGS} " + ;; + + --cc) +- echo $ECHO_N "${CC} ${ECHO_C}" ++ printf "%s" "${CC} " + ;; + + --cxx) +- echo $ECHO_N "${CXX} ${ECHO_C}" ++ printf "%s" "${CXX} " + ;; + + --cxxflags) +- echo $ECHO_N "${CXXFLAGS} ${ECHO_C}" ++ printf "%s" "${CXXFLAGS} " + ;; + + --cppflags) + # Don't echo the -I. - it's unneeded. +- echo $ECHO_N "${CPPFLAGS} ${ECHO_C}" | sed -e 's/-I. //' ++ printf "%s" "${CPPFLAGS} " | sed -e 's/-I. //' + ;; + + --cppflags-searchpath) +- echo $ECHO_N "-I${prefix}/include ${ECHO_C}" ++ printf "%s" "-I${prefix}/include " + ;; + + --cppflags-dynamic) +- echo $ECHO_N "${SHAREDLIBCPPFLAGS} ${ECHO_C}" ++ printf "%s" "${SHAREDLIBCPPFLAGS} " + ;; + + --cxxflags-dynamic) +- echo $ECHO_N "${SHAREDLIBCXXFLAGS} ${ECHO_C}" ++ printf "%s" "${SHAREDLIBCXXFLAGS} " + ;; + + --cflags-dynamic) +- echo $ECHO_N "${SHAREDLIBCFLAGS} ${ECHO_C}" ++ printf "%s" "${SHAREDLIBCFLAGS} " + ;; + + --ldflags-system) +- echo $ECHO_N "${LIBS} ${ECHO_C}" ++ printf "%s" "${LIBS} " + ;; + + --ldflags) +- echo $ECHO_N "${LDFLAGS} ${ICULIBS} ${ECHO_C}" ++ printf "%s" "${LDFLAGS} ${ICULIBS} " + # $RPATH_LDFLAGS + ;; + + --ldflags-libsonly) +- echo $ECHO_N "${ICULIBS_I18N} ${ICULIBS_COMMON} ${ICULIBS_DATA} ${ECHO_C}" ++ printf "%s" "${ICULIBS_I18N} ${ICULIBS_COMMON} ${ICULIBS_DATA} " + ;; + + --ldflags-icuio) +- echo $ECHO_N " ${ICULIBS_ICUIO} ${ECHO_C}" ++ printf "%s" " ${ICULIBS_ICUIO} " + ;; + + --ldflags-obsolete) +- echo $ECHO_N "${ICULIBS_OBSOLETE} ${ECHO_C}" ++ printf "%s" "${ICULIBS_OBSOLETE} " + ;; + + --ldflags-toolutil) +- echo $ECHO_N " ${ICULIBS_TOOLUTIL} ${ECHO_C}" ++ printf "%s" " ${ICULIBS_TOOLUTIL} " + ;; + + --ldflags-layout) +@@ -285,7 +285,7 @@ + ;; + + --ldflags-searchpath) +- echo $ECHO_N "-L${libdir} ${ECHO_C}" ++ printf "%s" "-L${libdir} " + ;; + + --detect-prefix) +@@ -321,47 +321,47 @@ + ;; + + --shared-datadir) +- echo $ECHO_N "${datadir} ${ECHO_C}" ++ printf "%s" "${datadir} " + ;; + + --incfile) +- echo $ECHO_N "${pkglibdir}/Makefile.inc ${ECHO_C}" ++ printf "%s" "${pkglibdir}/Makefile.inc " + ;; + + --incpkgdatafile) +- echo $ECHO_N "${pkglibdir}/pkgdata.inc ${ECHO_C}" ++ printf "%s" "${pkglibdir}/pkgdata.inc " + ;; + + --icudata) +- echo $ECHO_N "${ICUDATA_NAME} ${ECHO_C}" ++ printf "%s" "${ICUDATA_NAME} " + ;; + + --icudata-mode) +- echo $ECHO_N "${PKGDATA_MODE} ${ECHO_C}" ++ printf "%s" "${PKGDATA_MODE} " + ;; + + --icudata-install-dir) +- echo $ECHO_N "${ICUPKGDATA_DIR} ${ECHO_C}" ++ printf "%s" "${ICUPKGDATA_DIR} " + ;; + + --icudatadir) +- echo $ECHO_N "${ICUDATA_DIR} ${ECHO_C}" ++ printf "%s" "${ICUDATA_DIR} " + ;; + + --shlib-c) +- echo $ECHO_N "${SHLIB_c} ${ECHO_C}" ++ printf "%s" "${SHLIB_c} " + ;; + + --shlib-cc) +- echo $ECHO_N "${SHLIB_cc} ${ECHO_C}" ++ printf "%s" "${SHLIB_cc} " + ;; + + --version) +- echo $ECHO_N $VERSION ++ printf "%s" "$VERSION" + ;; + + --unicode-version) +- echo $ECHO_N $UNICODE_VERSION ++ printf "%s" "$UNICODE_VERSION" + ;; + + --host) +diff -ruN a/configure.ac b/configure.ac +--- a/configure.ac 2016-10-04 21:30:20.000000000 +0200 ++++ b/configure.ac 2016-11-05 19:43:07.688466668 +0100 +@@ -22,24 +22,6 @@ + PACKAGE="icu" + AC_SUBST(PACKAGE) + +-# Use custom echo test for newline option +-# Current autoconf (2.65) gives incorrect echo newline option +-# for icu-config +-# This may be removed later - mow (June 17, 2010) +-ICU_ECHO_C= ICU_ECHO_N= ICU_ECHO_T= +-case `/bin/sh -c "echo -n x"` in +--n*) +- case `/bin/sh -c "echo 'x\c'"` in +- *c*) ICU_ECHO_T=' ';; # ECHO_T is single tab character. +- *) ICU_ECHO_C='\c';; +- esac;; +-*) +- ICU_ECHO_N='-n';; +-esac +-AC_SUBST(ICU_ECHO_N) +-AC_SUBST(ICU_ECHO_C) +-AC_SUBST(ICU_ECHO_T) +- + AC_MSG_CHECKING(for ICU version numbers) + + # Get the ICU version from uversion.h or other headers +diff -ruN a/icudefs.mk.in b/icudefs.mk.in +--- a/icudefs.mk.in 2016-09-09 23:28:18.000000000 +0200 ++++ b/icudefs.mk.in 2016-11-05 19:43:07.688466668 +0100 +@@ -157,11 +157,6 @@ + ENABLE_STATIC = @ENABLE_STATIC@ + ENABLE_SHARED = @ENABLE_SHARED@ + +-# Echo w/o newline +- +-#ECHO_N = @ICU_ECHO_N@ +-#ECHO_C = @ICU_ECHO_C@ +- + # Commands to compile + COMPILE.c= $(CC) $(CPPFLAGS) $(DEFS) $(CFLAGS) -c + COMPILE.cc= $(CXX) $(CPPFLAGS) $(DEFS) $(CXXFLAGS) -c +diff -ruN a/test/hdrtst/Makefile.in b/test/hdrtst/Makefile.in +--- a/test/hdrtst/Makefile.in 2016-09-28 06:17:24.000000000 +0200 ++++ b/test/hdrtst/Makefile.in 2016-11-05 19:43:07.688466668 +0100 +@@ -35,9 +35,6 @@ + include $(shell icu-config --incfile) + DIRS=$(prefix)/include/unicode + LDIRS=$(prefix)/include/layout +-ECHO_T=@ECHO_T@ +-ECHO_C=@ECHO_C@ +-ECHO_N=@ECHO_N@ + + all: + @echo Please read this Makefile for more information. diff --git a/dev-libs/icu/files/icu-58.2-CVE-2017-7867.patch b/dev-libs/icu/files/icu-58.2-CVE-2017-7867.patch new file mode 100644 index 000000000000..a34537bb6cb7 --- /dev/null +++ b/dev-libs/icu/files/icu-58.2-CVE-2017-7867.patch @@ -0,0 +1,155 @@ +Index: /trunk/icu4c/source/common/utext.cpp +=================================================================== +--- a/common/utext.cpp (revision 39670) ++++ b/common/utext.cpp (revision 39671) +@@ -848,7 +848,13 @@ + + // Chunk size. +-// Must be less than 85, because of byte mapping from UChar indexes to native indexes. +-// Worst case is three native bytes to one UChar. (Supplemenaries are 4 native bytes +-// to two UChars.) ++// Must be less than 42 (256/6), because of byte mapping from UChar indexes to native indexes. ++// Worst case there are six UTF-8 bytes per UChar. ++// obsolete 6 byte form fd + 5 trails maps to fffd ++// obsolete 5 byte form fc + 4 trails maps to fffd ++// non-shortest 4 byte forms maps to fffd ++// normal supplementaries map to a pair of utf-16, two utf8 bytes per utf-16 unit ++// mapToUChars array size must allow for the worst case, 6. ++// This could be brought down to 4, by treating fd and fc as pure illegal, ++// rather than obsolete lead bytes. But that is not compatible with the utf-8 access macros. + // + enum { UTF8_TEXT_CHUNK_SIZE=32 }; +@@ -890,5 +896,5 @@ + // one for a supplementary starting in the last normal position, + // and one for an entry for the buffer limit position. +- uint8_t mapToUChars[UTF8_TEXT_CHUNK_SIZE*3+6]; // Map native offset from bufNativeStart to ++ uint8_t mapToUChars[UTF8_TEXT_CHUNK_SIZE*6+6]; // Map native offset from bufNativeStart to + // correspoding offset in filled part of buf. + int32_t align; +@@ -1033,4 +1039,5 @@ + u8b = (UTF8Buf *)ut->p; // the current buffer + mapIndex = ix - u8b->toUCharsMapStart; ++ U_ASSERT(mapIndex < (int32_t)sizeof(UTF8Buf::mapToUChars)); + ut->chunkOffset = u8b->mapToUChars[mapIndex] - u8b->bufStartIdx; + return TRUE; +@@ -1299,4 +1306,8 @@ + // If index is at the end, there is no character there to look at. + if (ix != ut->b) { ++ // Note: this function will only move the index back if it is on a trail byte ++ // and there is a preceding lead byte and the sequence from the lead ++ // through this trail could be part of a valid UTF-8 sequence ++ // Otherwise the index remains unchanged. + U8_SET_CP_START(s8, 0, ix); + } +@@ -1312,5 +1323,8 @@ + uint8_t *mapToNative = u8b->mapToNative; + uint8_t *mapToUChars = u8b->mapToUChars; +- int32_t toUCharsMapStart = ix - (UTF8_TEXT_CHUNK_SIZE*3 + 1); ++ int32_t toUCharsMapStart = ix - sizeof(UTF8Buf::mapToUChars) + 1; ++ // Note that toUCharsMapStart can be negative. Happens when the remaining ++ // text from current position to the beginning is less than the buffer size. ++ // + 1 because mapToUChars must have a slot at the end for the bufNativeLimit entry. + int32_t destIx = UTF8_TEXT_CHUNK_SIZE+2; // Start in the overflow region + // at end of buffer to leave room +@@ -1339,4 +1353,5 @@ + // Special case ASCII range for speed. + buf[destIx] = (UChar)c; ++ U_ASSERT(toUCharsMapStart <= srcIx); + mapToUChars[srcIx - toUCharsMapStart] = (uint8_t)destIx; + mapToNative[destIx] = (uint8_t)(srcIx - toUCharsMapStart); +@@ -1368,4 +1383,5 @@ + mapToUChars[sIx-- - toUCharsMapStart] = (uint8_t)destIx; + } while (sIx >= srcIx); ++ U_ASSERT(toUCharsMapStart <= (srcIx+1)); + + // Set native indexing limit to be the current position. +@@ -1542,4 +1558,5 @@ + U_ASSERT(index<=ut->chunkNativeLimit); + int32_t mapIndex = index - u8b->toUCharsMapStart; ++ U_ASSERT(mapIndex < (int32_t)sizeof(UTF8Buf::mapToUChars)); + int32_t offset = u8b->mapToUChars[mapIndex] - u8b->bufStartIdx; + U_ASSERT(offset>=0 && offset<=ut->chunkLength); +Index: /trunk/icu4c/source/test/intltest/utxttest.cpp +=================================================================== +--- a/test/intltest/utxttest.cpp (revision 39670) ++++ b/test/intltest/utxttest.cpp (revision 39671) +@@ -68,4 +68,6 @@ + case 7: name = "Ticket12130"; + if (exec) Ticket12130(); break; ++ case 8: name = "Ticket12888"; ++ if (exec) Ticket12888(); break; + default: name = ""; break; + } +@@ -1584,2 +1586,62 @@ + utext_close(&ut); + } ++ ++// Ticket 12888: bad handling of illegal utf-8 containing many instances of the archaic, now illegal, ++// six byte utf-8 forms. Original implementation had an assumption that ++// there would be at most three utf-8 bytes per UTF-16 code unit. ++// The five and six byte sequences map to a single replacement character. ++ ++void UTextTest::Ticket12888() { ++ const char *badString = ++ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" ++ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" ++ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" ++ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" ++ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" ++ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" ++ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" ++ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" ++ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" ++ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" ++ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" ++ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" ++ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" ++ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" ++ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" ++ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" ++ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" ++ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" ++ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" ++ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"; ++ ++ UErrorCode status = U_ZERO_ERROR; ++ LocalUTextPointer ut(utext_openUTF8(NULL, badString, -1, &status)); ++ TEST_SUCCESS(status); ++ for (;;) { ++ UChar32 c = utext_next32(ut.getAlias()); ++ if (c == U_SENTINEL) { ++ break; ++ } ++ } ++ int32_t endIdx = utext_getNativeIndex(ut.getAlias()); ++ if (endIdx != (int32_t)strlen(badString)) { ++ errln("%s:%d expected=%d, actual=%d", __FILE__, __LINE__, strlen(badString), endIdx); ++ return; ++ } ++ ++ for (int32_t prevIndex = endIdx; prevIndex>0;) { ++ UChar32 c = utext_previous32(ut.getAlias()); ++ int32_t currentIndex = utext_getNativeIndex(ut.getAlias()); ++ if (c != 0xfffd) { ++ errln("%s:%d (expected, actual, index) = (%d, %d, %d)\n", ++ __FILE__, __LINE__, 0xfffd, c, currentIndex); ++ break; ++ } ++ if (currentIndex != prevIndex - 6) { ++ errln("%s:%d: wrong index. Expected, actual = %d, %d", ++ __FILE__, __LINE__, prevIndex - 6, currentIndex); ++ break; ++ } ++ prevIndex = currentIndex; ++ } ++} +Index: /trunk/icu4c/source/test/intltest/utxttest.h +=================================================================== +--- a/test/intltest/utxttest.h (revision 39670) ++++ b/test/intltest/utxttest.h (revision 39671) +@@ -39,4 +39,5 @@ + void Ticket10983(); + void Ticket12130(); ++ void Ticket12888(); + + private: diff --git a/dev-libs/icu/files/icu-58.2-glibc226.patch b/dev-libs/icu/files/icu-58.2-glibc226.patch new file mode 100644 index 000000000000..7003173a13f9 --- /dev/null +++ b/dev-libs/icu/files/icu-58.2-glibc226.patch @@ -0,0 +1,16 @@ +diff -ruN a/i18n/digitlst.cpp b/i18n/digitlst.cpp +--- a/i18n/digitlst.cpp 2016-10-27 01:37:56.000000000 -0000 ++++ b/i18n/digitlst.cpp 2017-09-21 20:39:29.873030393 -0000 +@@ -61,11 +61,7 @@ + #endif + + #if U_USE_STRTOD_L +-# if U_PLATFORM_USES_ONLY_WIN32_API || U_PLATFORM == U_PF_CYGWIN +-# include +-# else +-# include +-# endif ++# include + #endif + + // *************************************************************************** diff --git a/dev-libs/icu/icu-58.1-r1.ebuild b/dev-libs/icu/icu-58.1-r1.ebuild new file mode 100644 index 000000000000..288af0e8b047 --- /dev/null +++ b/dev-libs/icu/icu-58.1-r1.ebuild @@ -0,0 +1,157 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +inherit eutils flag-o-matic toolchain-funcs autotools multilib-minimal + +DESCRIPTION="International Components for Unicode" +HOMEPAGE="http://www.icu-project.org/" +SRC_URI="http://download.icu-project.org/files/icu4c/${PV/_/}/icu4c-${PV//./_}-src.tgz" + +LICENSE="BSD" + +SLOT="0/${PV}" + +KEYWORDS="alpha amd64 arm arm64 hppa ia64 ~m68k ~mips ppc ppc64 ~s390 ~sh sparc x86 ~amd64-fbsd ~x86-fbsd" +IUSE="debug doc examples static-libs" + +DEPEND=" + virtual/pkgconfig + doc? ( + app-doc/doxygen[dot] + ) +" + +S="${WORKDIR}/${PN}/source" + +MULTILIB_CHOST_TOOLS=( + /usr/bin/icu-config +) + +PATCHES=( + "${FILESDIR}/${PN}-58.1-remove-bashisms.patch" + "${FILESDIR}/${PN}-58.1-iterator.patch" +) + +pkg_pretend() { + if tc-is-gcc ; then + if [[ $(gcc-major-version) == 4 && $(gcc-minor-version) -lt 9 \ + || $(gcc-major-version) -lt 4 ]] ; then + die "You need at least sys-devel/gcc-4.9" + fi + fi +} + +src_prepare() { + # apply patches + default + + local variable + + # Disable renaming as it is stupid thing to do + sed -i \ + -e "s/#define U_DISABLE_RENAMING 0/#define U_DISABLE_RENAMING 1/" \ + common/unicode/uconfig.h || die + + # Fix linking of icudata + sed -i \ + -e "s:LDFLAGSICUDT=-nodefaultlibs -nostdlib:LDFLAGSICUDT=:" \ + config/mh-linux || die + + # Append doxygen configuration to configure + sed -i \ + -e 's:icudefs.mk:icudefs.mk Doxyfile:' \ + configure.ac || die + + eautoreconf +} + +src_configure() { + # Use C++14 + append-cxxflags -std=c++14 + + if tc-is-gcc ; then + if [[ $(gcc-major-version) == 4 && $(gcc-minor-version) -lt 9 \ + || $(gcc-major-version) -lt 4 ]] ; then + die "You need at least sys-devel/gcc-4.9" + fi + fi + + if tc-is-cross-compiler; then + mkdir "${WORKDIR}"/host || die + pushd "${WORKDIR}"/host >/dev/null || die + + CFLAGS="" CXXFLAGS="" ASFLAGS="" LDFLAGS="" \ + CC="$(tc-getBUILD_CC)" CXX="$(tc-getBUILD_CXX)" AR="$(tc-getBUILD_AR)" \ + RANLIB="$(tc-getBUILD_RANLIB)" LD="$(tc-getBUILD_LD)" \ + "${S}"/configure --disable-renaming --disable-debug \ + --disable-samples --enable-static || die + emake + + popd >/dev/null || die + fi + + multilib-minimal_src_configure +} + +multilib_src_configure() { + local myeconfargs=( + --disable-renaming + --disable-samples + --disable-layoutex + $(use_enable debug) + $(use_enable static-libs static) + ) + + multilib_is_native_abi && myeconfargs+=( + $(use_enable examples samples) + ) + tc-is-cross-compiler && myeconfargs+=( + --with-cross-build="${WORKDIR}"/host + ) + + # icu tries to use clang by default + tc-export CC CXX + + ECONF_SOURCE=${S} \ + econf "${myeconfargs[@]}" +} + +multilib_src_compile() { + default + + if multilib_is_native_abi && use doc; then + doxygen -u Doxyfile || die + doxygen Doxyfile || die + fi +} + +multilib_src_test() { + # INTLTEST_OPTS: intltest options + # -e: Exhaustive testing + # -l: Reporting of memory leaks + # -v: Increased verbosity + # IOTEST_OPTS: iotest options + # -e: Exhaustive testing + # -v: Increased verbosity + # CINTLTST_OPTS: cintltst options + # -e: Exhaustive testing + # -v: Increased verbosity + emake -j1 VERBOSE="1" check +} + +multilib_src_install() { + default + + if multilib_is_native_abi && use doc; then + docinto html + dodoc -r doc/html/* + fi +} + +multilib_src_install_all() { + einstalldocs + docinto html + dodoc ../readme.html +} diff --git a/dev-libs/icu/icu-58.2-r1.ebuild b/dev-libs/icu/icu-58.2-r1.ebuild new file mode 100644 index 000000000000..1eaa578e41b3 --- /dev/null +++ b/dev-libs/icu/icu-58.2-r1.ebuild @@ -0,0 +1,159 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +inherit eutils flag-o-matic toolchain-funcs autotools multilib-minimal + +DESCRIPTION="International Components for Unicode" +HOMEPAGE="http://www.icu-project.org/" +SRC_URI="http://download.icu-project.org/files/icu4c/${PV/_/}/icu4c-${PV//./_}-src.tgz" + +LICENSE="BSD" + +SLOT="0/${PV}" + +KEYWORDS="alpha amd64 arm ~arm64 hppa ia64 ~m68k ~mips ppc ppc64 ~s390 ~sh sparc x86 ~amd64-fbsd ~x86-fbsd" +IUSE="debug doc examples static-libs" + +DEPEND=" + virtual/pkgconfig + doc? ( + app-doc/doxygen[dot] + ) +" + +S="${WORKDIR}/${PN}/source" + +MULTILIB_CHOST_TOOLS=( + /usr/bin/icu-config +) + +PATCHES=( + "${FILESDIR}/${PN}-58.1-remove-bashisms.patch" + "${FILESDIR}/${PN}-58.1-iterator.patch" + "${FILESDIR}/${PN}-58.2-CVE-2017-7867.patch" + "${FILESDIR}/${PN}-58.2-glibc226.patch" +) + +pkg_pretend() { + if tc-is-gcc ; then + if [[ $(gcc-major-version) == 4 && $(gcc-minor-version) -lt 9 \ + || $(gcc-major-version) -lt 4 ]] ; then + die "You need at least sys-devel/gcc-4.9" + fi + fi +} + +src_prepare() { + # apply patches + default + + local variable + + # Disable renaming as it is stupid thing to do + sed -i \ + -e "s/#define U_DISABLE_RENAMING 0/#define U_DISABLE_RENAMING 1/" \ + common/unicode/uconfig.h || die + + # Fix linking of icudata + sed -i \ + -e "s:LDFLAGSICUDT=-nodefaultlibs -nostdlib:LDFLAGSICUDT=:" \ + config/mh-linux || die + + # Append doxygen configuration to configure + sed -i \ + -e 's:icudefs.mk:icudefs.mk Doxyfile:' \ + configure.ac || die + + eautoreconf +} + +src_configure() { + # Use C++14 + append-cxxflags -std=c++14 + + if tc-is-gcc ; then + if [[ $(gcc-major-version) == 4 && $(gcc-minor-version) -lt 9 \ + || $(gcc-major-version) -lt 4 ]] ; then + die "You need at least sys-devel/gcc-4.9" + fi + fi + + if tc-is-cross-compiler; then + mkdir "${WORKDIR}"/host || die + pushd "${WORKDIR}"/host >/dev/null || die + + CFLAGS="" CXXFLAGS="" ASFLAGS="" LDFLAGS="" \ + CC="$(tc-getBUILD_CC)" CXX="$(tc-getBUILD_CXX)" AR="$(tc-getBUILD_AR)" \ + RANLIB="$(tc-getBUILD_RANLIB)" LD="$(tc-getBUILD_LD)" \ + "${S}"/configure --disable-renaming --disable-debug \ + --disable-samples --enable-static || die + emake + + popd >/dev/null || die + fi + + multilib-minimal_src_configure +} + +multilib_src_configure() { + local myeconfargs=( + --disable-renaming + --disable-samples + --disable-layoutex + $(use_enable debug) + $(use_enable static-libs static) + ) + + multilib_is_native_abi && myeconfargs+=( + $(use_enable examples samples) + ) + tc-is-cross-compiler && myeconfargs+=( + --with-cross-build="${WORKDIR}"/host + ) + + # icu tries to use clang by default + tc-export CC CXX + + ECONF_SOURCE=${S} \ + econf "${myeconfargs[@]}" +} + +multilib_src_compile() { + default + + if multilib_is_native_abi && use doc; then + doxygen -u Doxyfile || die + doxygen Doxyfile || die + fi +} + +multilib_src_test() { + # INTLTEST_OPTS: intltest options + # -e: Exhaustive testing + # -l: Reporting of memory leaks + # -v: Increased verbosity + # IOTEST_OPTS: iotest options + # -e: Exhaustive testing + # -v: Increased verbosity + # CINTLTST_OPTS: cintltst options + # -e: Exhaustive testing + # -v: Increased verbosity + emake -j1 VERBOSE="1" check +} + +multilib_src_install() { + default + + if multilib_is_native_abi && use doc; then + docinto html + dodoc -r doc/html/* + fi +} + +multilib_src_install_all() { + einstalldocs + docinto html + dodoc ../readme.html +} diff --git a/dev-libs/icu/icu-59.1.ebuild b/dev-libs/icu/icu-59.1.ebuild new file mode 100644 index 000000000000..ed8bc1c9d952 --- /dev/null +++ b/dev-libs/icu/icu-59.1.ebuild @@ -0,0 +1,157 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +inherit eutils flag-o-matic toolchain-funcs autotools multilib-minimal + +DESCRIPTION="International Components for Unicode" +HOMEPAGE="http://www.icu-project.org/" +SRC_URI="http://download.icu-project.org/files/icu4c/${PV/_/}/icu4c-${PV//./_}-src.tgz" + +LICENSE="BSD" + +SLOT="0/${PV}" + +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd" +IUSE="debug doc examples static-libs" + +DEPEND=" + virtual/pkgconfig + doc? ( + app-doc/doxygen[dot] + ) +" + +S="${WORKDIR}/${PN}/source" + +MULTILIB_CHOST_TOOLS=( + /usr/bin/icu-config +) + +PATCHES=( + "${FILESDIR}/${PN}-58.1-remove-bashisms.patch" + "${FILESDIR}/${PN}-58.2-glibc226.patch" +) + +pkg_pretend() { + if tc-is-gcc ; then + if [[ $(gcc-major-version) == 4 && $(gcc-minor-version) -lt 9 \ + || $(gcc-major-version) -lt 4 ]] ; then + die "You need at least sys-devel/gcc-4.9" + fi + fi +} + +src_prepare() { + # apply patches + default + + local variable + + # Disable renaming as it is stupid thing to do + sed -i \ + -e "s/#define U_DISABLE_RENAMING 0/#define U_DISABLE_RENAMING 1/" \ + common/unicode/uconfig.h || die + + # Fix linking of icudata + sed -i \ + -e "s:LDFLAGSICUDT=-nodefaultlibs -nostdlib:LDFLAGSICUDT=:" \ + config/mh-linux || die + + # Append doxygen configuration to configure + sed -i \ + -e 's:icudefs.mk:icudefs.mk Doxyfile:' \ + configure.ac || die + + eautoreconf +} + +src_configure() { + # Use C++14 + append-cxxflags -std=c++14 + + if tc-is-gcc ; then + if [[ $(gcc-major-version) == 4 && $(gcc-minor-version) -lt 9 \ + || $(gcc-major-version) -lt 4 ]] ; then + die "You need at least sys-devel/gcc-4.9" + fi + fi + + if tc-is-cross-compiler; then + mkdir "${WORKDIR}"/host || die + pushd "${WORKDIR}"/host >/dev/null || die + + CFLAGS="" CXXFLAGS="" ASFLAGS="" LDFLAGS="" \ + CC="$(tc-getBUILD_CC)" CXX="$(tc-getBUILD_CXX)" AR="$(tc-getBUILD_AR)" \ + RANLIB="$(tc-getBUILD_RANLIB)" LD="$(tc-getBUILD_LD)" \ + "${S}"/configure --disable-renaming --disable-debug \ + --disable-samples --enable-static || die + emake + + popd >/dev/null || die + fi + + multilib-minimal_src_configure +} + +multilib_src_configure() { + local myeconfargs=( + --disable-renaming + --disable-samples + --disable-layoutex + $(use_enable debug) + $(use_enable static-libs static) + ) + + multilib_is_native_abi && myeconfargs+=( + $(use_enable examples samples) + ) + tc-is-cross-compiler && myeconfargs+=( + --with-cross-build="${WORKDIR}"/host + ) + + # icu tries to use clang by default + tc-export CC CXX + + ECONF_SOURCE=${S} \ + econf "${myeconfargs[@]}" +} + +multilib_src_compile() { + default + + if multilib_is_native_abi && use doc; then + doxygen -u Doxyfile || die + doxygen Doxyfile || die + fi +} + +multilib_src_test() { + # INTLTEST_OPTS: intltest options + # -e: Exhaustive testing + # -l: Reporting of memory leaks + # -v: Increased verbosity + # IOTEST_OPTS: iotest options + # -e: Exhaustive testing + # -v: Increased verbosity + # CINTLTST_OPTS: cintltst options + # -e: Exhaustive testing + # -v: Increased verbosity + emake -j1 VERBOSE="1" check +} + +multilib_src_install() { + default + + if multilib_is_native_abi && use doc; then + docinto html + dodoc -r doc/html/* + fi +} + +multilib_src_install_all() { + einstalldocs + docinto html + dodoc ../readme.html +} diff --git a/dev-libs/icu/metadata.xml b/dev-libs/icu/metadata.xml new file mode 100644 index 000000000000..13ce236ee519 --- /dev/null +++ b/dev-libs/icu/metadata.xml @@ -0,0 +1,8 @@ + + + + + office@gentoo.org + Gentoo Office project + + -- cgit v1.2.3