summaryrefslogtreecommitdiff
path: root/dev-libs/icu
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
committerV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
commit4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch)
treeba5f07bf3f9d22d82e54a462313f5d244036c768 /dev-libs/icu
reinit the tree, so we can have metadata
Diffstat (limited to 'dev-libs/icu')
-rw-r--r--dev-libs/icu/Manifest13
-rw-r--r--dev-libs/icu/files/icu-58.1-iterator.patch127
-rw-r--r--dev-libs/icu/files/icu-58.1-remove-bashisms.patch224
-rw-r--r--dev-libs/icu/files/icu-58.2-CVE-2017-7867.patch155
-rw-r--r--dev-libs/icu/files/icu-58.2-glibc226.patch16
-rw-r--r--dev-libs/icu/icu-58.1-r1.ebuild157
-rw-r--r--dev-libs/icu/icu-58.2-r1.ebuild159
-rw-r--r--dev-libs/icu/icu-59.1.ebuild157
-rw-r--r--dev-libs/icu/metadata.xml8
9 files changed, 1016 insertions, 0 deletions
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<Collator> col(Collator::createInstance(Locale::getEnglish(), errorCode));
++ if (errorCode.logIfFailureAndReset("English Collator creation failed")) {
++ return;
++ }
++
++ LocalPointer<StringEnumeration> 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 <locale.h>
+-# else
+-# include <xlocale.h>
+-# endif
++# include <locale.h>
+ #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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>office@gentoo.org</email>
+ <name>Gentoo Office project</name>
+ </maintainer>
+</pkgmetadata>