From 9b984ba4ceae2feb6b1f82a00d89659f7ce18a90 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Mon, 20 Apr 2015 17:36:56 +0200 Subject: [PATCH] ICU: add release 55.1 * Confirmed working with Haiku itself. Needs an update of all packages using ICU 54.1 (at least webkit and qupzilla). * Fixes at least one problem with the CLDR data: correct names for timezones are used again instead of the strange "frpar" (for FR/Paris) or "deber" (DE/Berlin) 54.1 was using. --- dev-libs/icu/icu-55.1.recipe | 158 ++++ dev-libs/icu/patches/icu-55.1.patchset | 1061 ++++++++++++++++++++++++ 2 files changed, 1219 insertions(+) create mode 100644 dev-libs/icu/icu-55.1.recipe create mode 100644 dev-libs/icu/patches/icu-55.1.patchset diff --git a/dev-libs/icu/icu-55.1.recipe b/dev-libs/icu/icu-55.1.recipe new file mode 100644 index 000000000..d82c9fb34 --- /dev/null +++ b/dev-libs/icu/icu-55.1.recipe @@ -0,0 +1,158 @@ +SUMMARY="International Components for Unicode (ICU)" +HOMEPAGE="http://www.icu-project.org" +LICENSE="ICU" +COPYRIGHT="1997-2014 IBM Corporation and others." +SRC_URI="http://download.icu-project.org/files/icu4c/$portVersion/icu4c-55_1-src.tgz" +CHECKSUM_SHA256="e16b22cbefdd354bec114541f7849a12f8fc2015320ca5282ee4fd787571457b" + +REVISION="1" +ARCHITECTURES="x86_gcc2 x86 x86_64 arm" +SECONDARY_ARCHITECTURES="x86_gcc2 x86" + +PROVIDES=" + icu$secondaryArchSuffix = $portVersion compat >= 55 + lib:libicudata$secondaryArchSuffix = $portVersion compat >= 55 + lib:libicui18n$secondaryArchSuffix = $portVersion compat >= 55 + lib:libicuio$secondaryArchSuffix = $portVersion compat >= 55 + lib:libicule$secondaryArchSuffix = $portVersion compat >= 55 + lib:libiculx$secondaryArchSuffix = $portVersion compat >= 55 + lib:libicutest$secondaryArchSuffix = $portVersion compat >= 55 + lib:libicutu$secondaryArchSuffix = $portVersion compat >= 55 + lib:libicuuc$secondaryArchSuffix = $portVersion compat >= 55 + " +REQUIRES=" + haiku$secondaryArchSuffix + lib:libstdc++$secondaryArchSuffix + " +if [ $effectiveTargetArchitecture != x86_gcc2 ]; then +REQUIRES+=" + lib:libgcc_s$secondaryArchSuffix + " +fi +BUILD_REQUIRES=" + " +BUILD_PREREQUIRES=" + haiku${secondaryArchSuffix}_devel + cmd:autoconf + cmd:awk + cmd:gcc$secondaryArchSuffix + cmd:ld$secondaryArchSuffix + cmd:make + cmd:pkg_config$secondaryArchSuffix + cmd:sed + " + +SOURCE_DIR="icu" +PATCHES="icu-55.1.patchset" + +BUILD() +{ + cd source + autoconf + runConfigure ./configure \ + --disable-renaming --disable-samples --disable-extras + make $jobArgs +} + +INSTALL() +{ + cd source + make install + + prepareInstalledDevelLibs \ + libicudata \ + libicui18n \ + libicuio \ + libicule \ + libiculx \ + libicutu \ + libicuuc + fixPkgconfig + + # Update icu-config to point to the develop/lib dir + fixDevelopLibDirReferences \ + $binDir/icu-config + + # Rename the data/icu directory when built for the secondary architecture, + # so that it doesn't clash with the primary package's. + if [ -n "$secondaryArchSuffix" ]; then + mv $dataDir/icu $dataDir/icu$secondaryArchSuffix + # TODO: The icu-config, the Makefile.inc, and possibly other files need + # to be adjusted as well. They are probably also not quite correct for + # the primary architecture (lib vs. develop/lib). + fi + + # devel package + packageEntries devel \ + $developDir \ + $dataDir \ + $libDir/icu \ + $binDir/icu-config + + # main package cleanup + rm -r $binDir +} + +TEST() +{ + cd source + make check +} + +DESCRIPTION=" +ICU is a mature, widely used set of C/C++ and Java libraries providing Unicode \ +and Globalization support for software applications. ICU is widely portable \ +and gives applications the same results on all platforms and between C/C++ and \ +Java software. +ICU is released under a nonrestrictive open source license that is suitable \ +for use with both commercial software and with other open source or free \ +software. + +Here are a few highlights of the services provided by ICU: +* Code Page Conversion: Convert text data to or from Unicode and nearly any \ +other character set or encoding. ICU's conversion tables are based on charset \ +data collected by IBM over the course of many decades, and is the most \ +complete available anywhere. +* Collation: Compare strings according to the conventions and standards of a \ +particular language, region or country. ICU's collation is based on the \ +Unicode Collation Algorithm plus locale-specific comparison rules from the \ +Common Locale Data Repository, a comprehensive source for this type of data. +* Formatting: Format numbers, dates, times and currency amounts according the \ +conventions of a chosen locale. This includes translating month and day names \ +into the selected language, choosing appropriate abbreviations, ordering \ +fields correctly, etc. This data also comes from the Common Locale Data \ +Repository. +* Time Calculations: Multiple types of calendars are provided beyond the \ +traditional Gregorian calendar. A thorough set of timezone calculation APIs \ +are provided. +* Unicode Support: ICU closely tracks the Unicode standard, providing easy \ +access to all of the many Unicode character properties, Unicode Normalization, \ +Case Folding and other fundamental operations as specified by the Unicode \ +Standard. +* Regular Expression: ICU's regular expressions fully support Unicode while \ +providing very competitive performance. +* Bidi: support for handling text containing a mixture of left to right \ +(English) and right to left (Arabic or Hebrew) data. +* Text Boundaries: Locate the positions of words, sentences, paragraphs within \ +a range of text, or identify locations that would be suitable for line \ +wrapping when displaying the text. +" + +# ----- devel package ------------------------------------------------------- + +SUMMARY_devel="The ICU development files" +PROVIDES_devel=" + icu${secondaryArchSuffix}_devel = $portVersion + cmd:icu_config${secondaryArchSuffix} = $portVersion compat >= 55 + devel:libicudata${secondaryArchSuffix} = $portVersion compat >= 55 + devel:libicui18n${secondaryArchSuffix} = $portVersion compat >= 55 + devel:libicuio${secondaryArchSuffix} = $portVersion compat >= 55 + devel:libicule${secondaryArchSuffix} = $portVersion compat >= 55 + devel:libiculx${secondaryArchSuffix} = $portVersion compat >= 55 + devel:libicutest${secondaryArchSuffix} = $portVersion compat >= 55 + devel:libicutu${secondaryArchSuffix} = $portVersion compat >= 55 + devel:libicuuc${secondaryArchSuffix} = $portVersion compat >= 55 + " +REQUIRES_devel=" + icu${secondaryArchSuffix} == $portVersion base + " diff --git a/dev-libs/icu/patches/icu-55.1.patchset b/dev-libs/icu/patches/icu-55.1.patchset new file mode 100644 index 000000000..35942b6a7 --- /dev/null +++ b/dev-libs/icu/patches/icu-55.1.patchset @@ -0,0 +1,1061 @@ +From b545663a3d91c16233ce34181475d8fd84e47034 Mon Sep 17 00:00:00 2001 +From: Adrien Destugues +Date: Sun, 19 Apr 2015 13:35:11 +0200 +Subject: gcc2 fixes for tools, tests, layout. + + +diff --git a/source/layout/LETableReference.h b/source/layout/LETableReference.h +index de51228..f55b762 100644 +--- a/source/layout/LETableReference.h ++++ b/source/layout/LETableReference.h +@@ -304,7 +304,11 @@ LE_TRACE_TR("INFO: new RTAO") + + le_uint32 getCount() const { return fCount; } + ++#if __GNUC__ == 2 ++ const T *getAlias() const { return LETableReference::getAlias(); } ++#else + using LETableReference::getAlias; ++#endif + + const T *getAlias(le_uint32 i, LEErrorCode &success) const { + return ((const T*)(((const char*)getAlias())+getOffsetFor(i, success))); +diff --git a/source/test/intltest/apicoll.cpp b/source/test/intltest/apicoll.cpp +index 31b16dd..3e2e4a8 100644 +--- a/source/test/intltest/apicoll.cpp ++++ b/source/test/intltest/apicoll.cpp +@@ -1971,7 +1971,22 @@ class TestCollator : public Collator + public: + virtual Collator* clone(void) const; + ++#if __GNUC__ == 2 ++ EComparisonResult compare (const UnicodeString& s1, const UnicodeString& s2) ++ const { ++ return Collator::compare(s1, s2); ++ } ++ EComparisonResult compare (const UnicodeString& s1, const UnicodeString& s2, ++ int32_t i) const { ++ return Collator::compare(s1, s2, i); ++ } ++ EComparisonResult compare (const UChar* s1, int32_t l1, const UChar* s2, ++ int32_t l2) const { ++ return Collator::compare(s1, l1, s2, l2); ++ } ++#else + using Collator::compare; ++#endif + + virtual UCollationResult compare(const UnicodeString& source, + const UnicodeString& target, +diff --git a/source/test/iotest/stream.cpp b/source/test/iotest/stream.cpp +index a821636..083b4ab 100644 +--- a/source/test/iotest/stream.cpp ++++ b/source/test/iotest/stream.cpp +@@ -131,7 +131,7 @@ static void U_CALLCONV TestStream(void) + #endif + UnicodeString ustr("string"); + +- outFormatStream << "1234567890" << setw(10) << left << ustr << " " << "0123456789"; ++ outFormatStream << "1234567890" << setw(10) << ios::left << ustr << " " << "0123456789"; + + #ifdef USE_SSTREAM + tempStr = outFormatStream.str(); +diff --git a/source/tools/toolutil/udbgutil.cpp b/source/tools/toolutil/udbgutil.cpp +index 911425c..cdd6683 100644 +--- a/source/tools/toolutil/udbgutil.cpp ++++ b/source/tools/toolutil/udbgutil.cpp +@@ -639,7 +639,9 @@ U_CAPI void udbg_knownIssue_close(void *ptr) { + #include + #include + #include ++#if __GNUC__ > 2 + #include ++#endif + #include + + class KnownIssues { +-- +2.2.2 + + +From 6cafed065f5d91859be09b8a219c1eaf5785d96d Mon Sep 17 00:00:00 2001 +From: Adrien Destugues +Date: Sun, 19 Apr 2015 13:35:47 +0200 +Subject: gcc2 fixes for sources/i18n + + +diff --git a/source/i18n/alphaindex.cpp b/source/i18n/alphaindex.cpp +index 9fa98b8..5535be2 100644 +--- a/source/i18n/alphaindex.cpp ++++ b/source/i18n/alphaindex.cpp +@@ -952,8 +952,8 @@ static int32_t U_CALLCONV + collatorComparator(const void *context, const void *left, const void *right) { + const UElement *leftElement = static_cast(left); + const UElement *rightElement = static_cast(right); +- const UnicodeString *leftString = static_cast(leftElement->pointer); +- const UnicodeString *rightString = static_cast(rightElement->pointer); ++ const UnicodeString *leftString = (const UnicodeString *)(leftElement->pointer); ++ const UnicodeString *rightString = (const UnicodeString *)(rightElement->pointer); + + if (leftString == rightString) { + // Catches case where both are NULL +@@ -977,8 +977,8 @@ static int32_t U_CALLCONV + recordCompareFn(const void *context, const void *left, const void *right) { + const UElement *leftElement = static_cast(left); + const UElement *rightElement = static_cast(right); +- const AlphabeticIndex::Record *leftRec = static_cast(leftElement->pointer); +- const AlphabeticIndex::Record *rightRec = static_cast(rightElement->pointer); ++ const AlphabeticIndex::Record *leftRec = (const AlphabeticIndex::Record *)(leftElement->pointer); ++ const AlphabeticIndex::Record *rightRec = (const AlphabeticIndex::Record *)(rightElement->pointer); + const Collator *col = static_cast(context); + UErrorCode errorCode = U_ZERO_ERROR; + return col->compare(leftRec->name_, rightRec->name_, errorCode); +diff --git a/source/i18n/currfmt.h b/source/i18n/currfmt.h +index b3f23e5..1495316 100644 +--- a/source/i18n/currfmt.h ++++ b/source/i18n/currfmt.h +@@ -58,7 +58,9 @@ class CurrencyFormat : public MeasureFormat { + virtual Format* clone() const; + + ++#if __GNUC__ > 2 + using MeasureFormat::format; ++#endif + + /** + * Override Format API. +diff --git a/source/i18n/digitlst.cpp b/source/i18n/digitlst.cpp +index 51738be..c003c4b 100644 +--- a/source/i18n/digitlst.cpp ++++ b/source/i18n/digitlst.cpp +@@ -38,7 +38,9 @@ + #include + #include + #include ++#if __GNUC__ > 2 + #include ++#endif + + // *************************************************************************** + // class DigitList +@@ -437,11 +439,15 @@ DigitList::getDouble() const + tDouble /= -1; + } + } else if (isInfinite()) { ++#if __GNUC__ <= 2 ++ tDouble = DBL_MAX; ++#else + if (std::numeric_limits::has_infinity) { + tDouble = std::numeric_limits::infinity(); + } else { + tDouble = std::numeric_limits::max(); + } ++#endif + if (!isPositive()) { + tDouble = -tDouble; //this was incorrectly "-fDouble" originally. + } +diff --git a/source/i18n/digitlst.h b/source/i18n/digitlst.h +index 7e98d2b..4a95d71 100644 +--- a/source/i18n/digitlst.h ++++ b/source/i18n/digitlst.h +@@ -413,7 +413,7 @@ private: + + public: + +-#if U_OVERRIDE_CXX_ALLOCATION ++#if U_OVERRIDE_CXX_ALLOCATION && __GNUC__ > 2 + using UMemory::operator new; + using UMemory::operator delete; + #else +diff --git a/source/i18n/msgfmt.cpp b/source/i18n/msgfmt.cpp +index 32d9bc7..e6ca5c1 100644 +--- a/source/i18n/msgfmt.cpp ++++ b/source/i18n/msgfmt.cpp +@@ -1484,6 +1484,7 @@ MessageFormat::parse(int32_t msgStart, + prevIndex=msgPattern.getPart(argLimit).getLimit(); + i=argLimit; + } ++ return NULL; + } + // ------------------------------------- + // Parses the source pattern and returns the Formattable objects array, +diff --git a/source/i18n/reldtfmt.h b/source/i18n/reldtfmt.h +index 67539e0..09f31e7 100644 +--- a/source/i18n/reldtfmt.h ++++ b/source/i18n/reldtfmt.h +@@ -81,7 +81,9 @@ public: + virtual UBool operator==(const Format& other) const; + + ++#if __GNUC__ > 2 + using DateFormat::format; ++#endif + + /** + * Format a date or time, which is the standard millis since 24:00 GMT, Jan +diff --git a/source/i18n/sortkey.cpp b/source/i18n/sortkey.cpp +index baf3254..838ea82 100644 +--- a/source/i18n/sortkey.cpp ++++ b/source/i18n/sortkey.cpp +@@ -172,7 +172,7 @@ Collator::EComparisonResult + CollationKey::compareTo(const CollationKey& target) const + { + UErrorCode errorCode = U_ZERO_ERROR; +- return static_cast(compareTo(target, errorCode)); ++ return (Collator::EComparisonResult)(compareTo(target, errorCode)); + } + + // Bitwise comparison for the collation keys. +diff --git a/source/i18n/unicode/choicfmt.h b/source/i18n/unicode/choicfmt.h +index cfd5206..d2b7f66 100644 +--- a/source/i18n/unicode/choicfmt.h ++++ b/source/i18n/unicode/choicfmt.h +@@ -355,7 +355,22 @@ public: + virtual const UnicodeString* getFormats(int32_t& count) const; + + ++#if __GNUC__ == 2 ++ virtual UnicodeString& format (double number, ++ icu::UnicodeString& appendTo) const { ++ return NumberFormat::format(number, appendTo); ++ } ++ UnicodeString& format(const Formattable& f, UnicodeString& s, ++ FieldPosition& p, UErrorCode& e) const { ++ return NumberFormat::format(f, s, p, e); ++ } ++ UnicodeString& format(const Formattable& f, UnicodeString& s, ++ UErrorCode& e) const { ++ return NumberFormat::format(f, s, e); ++ } ++#else + using NumberFormat::format; ++#endif + + /** + * Formats a double number using this object's choices. +@@ -421,7 +436,13 @@ public: + FieldPosition& pos, + UErrorCode& success) const; + ++#if __GNUC__ == 2 ++ void parse(UnicodeString& s, Formattable& f, UErrorCode& e) const { ++ NumberFormat::parse(s, f, e); ++ } ++#else + using NumberFormat::parse; ++#endif + + /** + * Looks for the longest match of any message string on the input text and, +diff --git a/source/i18n/unicode/compactdecimalformat.h b/source/i18n/unicode/compactdecimalformat.h +index bd8fdba..be2e580 100644 +--- a/source/i18n/unicode/compactdecimalformat.h ++++ b/source/i18n/unicode/compactdecimalformat.h +@@ -104,7 +104,13 @@ public: + virtual UBool operator==(const Format& other) const; + + ++#if __GNUC__ == 2 ++ UnicodeString& format(double n, UnicodeString& s) const { ++ return DecimalFormat::format(n, s); ++ } ++#else + using DecimalFormat::format; ++#endif + + /** + * Format a double or long number using base-10 representation. +diff --git a/source/i18n/unicode/datefmt.h b/source/i18n/unicode/datefmt.h +index 983f136..4531dc5 100644 +--- a/source/i18n/unicode/datefmt.h ++++ b/source/i18n/unicode/datefmt.h +@@ -221,7 +221,13 @@ public: + virtual UBool operator==(const Format&) const; + + ++#if __GNUC__ == 2 ++ UnicodeString& format(const Formattable& f, UnicodeString& s, UErrorCode& e) const { ++ return Format::format(f, s, e); ++ } ++#else + using Format::format; ++#endif + + /** + * Format an object to produce a string. This method handles Formattable +diff --git a/source/i18n/unicode/decimfmt.h b/source/i18n/unicode/decimfmt.h +index 138855b..4ed2995 100644 +--- a/source/i18n/unicode/decimfmt.h ++++ b/source/i18n/unicode/decimfmt.h +@@ -918,7 +918,35 @@ public: + virtual UBool operator==(const Format& other) const; + + ++#if __GNUC__ == 2 ++ virtual UnicodeString& format (double number, ++ icu::UnicodeString& appendTo) const { ++ return NumberFormat::format(number, appendTo); ++ } ++ ++ virtual UnicodeString& format (double number, ++ icu::UnicodeString& appendTo, ++ UErrorCode& status) const { ++ return NumberFormat::format(number, appendTo, status); ++ } ++ ++ UnicodeString& format(const Formattable& f, UnicodeString& s, ++ FieldPositionIterator* i, UErrorCode& e) const { ++ return NumberFormat::format(f, s, i, e); ++ } ++ ++ UnicodeString& format(const Formattable& f, UnicodeString& s, ++ FieldPosition& p, UErrorCode& e) const { ++ return NumberFormat::format(f, s, p, e); ++ } ++ ++ UnicodeString& format(const Formattable& f, UnicodeString& s, UErrorCode& e) ++ const { ++ return NumberFormat::format(f, s, e); ++ } ++#else + using NumberFormat::format; ++#endif + + /** + * Format a double or long number using base-10 representation. +@@ -1131,7 +1159,15 @@ public: + FieldPosition& pos, + UErrorCode& status) const; + ++#if __GNUC__ == 2 ++ void parse(const UnicodeString& text, ++ Formattable& result, ++ UErrorCode& status) const { ++ NumberFormat::parse(text, result, status); ++ } ++#else + using NumberFormat::parse; ++#endif + + /** + * Parse the given string using this object's choices. The method +diff --git a/source/i18n/unicode/dtitvfmt.h b/source/i18n/unicode/dtitvfmt.h +index fb27eec..8fefb9e 100644 +--- a/source/i18n/unicode/dtitvfmt.h ++++ b/source/i18n/unicode/dtitvfmt.h +@@ -373,7 +373,9 @@ public: + UBool operator!=(const Format& other) const; + + ++#if __GNUC__ > 2 + using Format::format; ++#endif + + /** + * Format an object to produce a string. This method handles Formattable +diff --git a/source/i18n/unicode/measfmt.h b/source/i18n/unicode/measfmt.h +index 61a1e86..0a272a8 100644 +--- a/source/i18n/unicode/measfmt.h ++++ b/source/i18n/unicode/measfmt.h +@@ -92,8 +92,25 @@ class DateFormat; + */ + class U_I18N_API MeasureFormat : public Format { + public: ++#if __GNUC__ == 2 ++ void parseObject (const UnicodeString& s, Formattable& f, UErrorCode& e) ++ const { ++ Format::parseObject(s, f, e); ++ } ++ ++ UnicodeString& format(const Formattable& f, UnicodeString& s, ++ FieldPositionIterator* i, UErrorCode& e) const { ++ return Format::format(f, s, i, e); ++ } ++ ++ UnicodeString& format(const Formattable& f, UnicodeString& s, ++ UErrorCode& e) const { ++ return Format::format(f, s, e); ++ } ++#else + using Format::parseObject; + using Format::format; ++#endif + + /** + * Constructor. +diff --git a/source/i18n/unicode/msgfmt.h b/source/i18n/unicode/msgfmt.h +index 5de91e4..8f9f995 100644 +--- a/source/i18n/unicode/msgfmt.h ++++ b/source/i18n/unicode/msgfmt.h +@@ -622,7 +622,17 @@ public: + virtual const Format** getFormats(int32_t& count) const; + + ++#if __GNUC__ == 2 ++ UnicodeString& format(const Formattable& f, UnicodeString& s, ++ FieldPositionIterator* i, UErrorCode& e) const { ++ return Format::format(f, s, i, e); ++ } ++ UnicodeString& format(const Formattable& f, UnicodeString& s, UErrorCode& e) { ++ return Format::format(f, s, e); ++ } ++#else + using Format::format; ++#endif + + /** + * Formats the given array of arguments into a user-readable string. +@@ -884,6 +894,9 @@ private: + PluralRules* rules; + UPluralType type; + }; ++#if __GNUC__ == 2 ++ friend class PluralSelectorProvider; ++#endif + + /** + * A MessageFormat formats an array of arguments. Each argument +diff --git a/source/i18n/unicode/numfmt.h b/source/i18n/unicode/numfmt.h +index 164c657..4b03222 100644 +--- a/source/i18n/unicode/numfmt.h ++++ b/source/i18n/unicode/numfmt.h +@@ -235,7 +235,15 @@ public: + virtual UBool operator==(const Format& other) const; + + ++#if __GNUC__ == 2 ++ virtual UnicodeString& format (const Formattable& obj, ++ UnicodeString& appendTo, ++ UErrorCode & status) const { ++ return Format::format(obj, appendTo, status); ++ } ++#else + using Format::format; ++#endif + + /** + * Format an object to produce a string. This method handles +diff --git a/source/i18n/unicode/plurfmt.h b/source/i18n/unicode/plurfmt.h +index f7099d8..bedaf01 100644 +--- a/source/i18n/unicode/plurfmt.h ++++ b/source/i18n/unicode/plurfmt.h +@@ -313,7 +313,14 @@ public: + void applyPattern(const UnicodeString& pattern, UErrorCode& status); + + ++#if __GNUC__ == 2 ++ UnicodeString& format(const Formattable& f, UnicodeString& s, ++ FieldPositionIterator* i, UErrorCode& e) const { ++ return Format::format(f, s, i, e); ++ } ++#else + using Format::format; ++#endif + + /** + * Formats a plural message for a given number. +diff --git a/source/i18n/unicode/rbnf.h b/source/i18n/unicode/rbnf.h +index 7058c96..d0ad947 100644 +--- a/source/i18n/unicode/rbnf.h ++++ b/source/i18n/unicode/rbnf.h +@@ -741,7 +741,23 @@ public: + const Locale& locale = Locale::getDefault()); + + ++#if __GNUC__ == 2 ++ UnicodeString& format(const Formattable& f, UnicodeString& s, UErrorCode& e) ++ const { ++ return NumberFormat::format(f, s, e); ++ } ++ ++ UnicodeString& format(double n, UnicodeString& s) const { ++ return NumberFormat::format(n, s); ++ } ++ ++ UnicodeString& format(int64_t n, UnicodeString& s, FieldPosition& p, ++ UErrorCode& e) const { ++ return NumberFormat::format(n, s, p, e); ++ } ++#else + using NumberFormat::format; ++#endif + + /** + * Formats the specified 32-bit number using the default ruleset. +@@ -827,7 +843,13 @@ public: + FieldPosition& pos, + UErrorCode& status) const; + ++#if __GNUC__ == 2 ++ void parse(const UnicodeString& s, Formattable& f, UErrorCode& e) const { ++ return NumberFormat::parse(s, f, e); ++ } ++#else + using NumberFormat::parse; ++#endif + + /** + * Parses the specfied string, beginning at the specified position, according +diff --git a/source/i18n/unicode/selfmt.h b/source/i18n/unicode/selfmt.h +index 635144b..7247839 100644 +--- a/source/i18n/unicode/selfmt.h ++++ b/source/i18n/unicode/selfmt.h +@@ -219,7 +219,9 @@ public: + void applyPattern(const UnicodeString& pattern, UErrorCode& status); + + ++#if __GNUC__ > 2 + using Format::format; ++#endif + + /** + * Selects the phrase for the given keyword +@@ -340,9 +342,9 @@ public: + */ + virtual UClassID getDynamicClassID() const; + +-private: + friend class MessageFormat; + ++private: + SelectFormat(); // default constructor not implemented. + + /** +diff --git a/source/i18n/unicode/smpdtfmt.h b/source/i18n/unicode/smpdtfmt.h +index ccdaff4..69f70ec 100644 +--- a/source/i18n/unicode/smpdtfmt.h ++++ b/source/i18n/unicode/smpdtfmt.h +@@ -870,7 +870,27 @@ public: + virtual UBool operator==(const Format& other) const; + + ++#if __GNUC__ == 2 ++ UnicodeString& format(const Formattable& f, UnicodeString& s, ++ FieldPositionIterator* i, UErrorCode& e) const { ++ return DateFormat::format(f, s, i, e); ++ } ++ UnicodeString& format(const Formattable& f, UnicodeString& s, FieldPosition& p, ++ UErrorCode& e) const { ++ return DateFormat::format(f, s, p, e); ++ } ++ UnicodeString& format(const Formattable& f, UnicodeString& s, UErrorCode& e) const { ++ return Format::format(f, s, e); ++ } ++ UnicodeString& format(const UDate& d, UnicodeString& s, FieldPosition& f) const { ++ return DateFormat::format(d, s, f); ++ } ++ UnicodeString& format(const UDate& d, UnicodeString& s) const { ++ return DateFormat::format(d, s); ++ } ++#else + using DateFormat::format; ++#endif + + /** + * Format a date or time, which is the standard millis since 24:00 GMT, Jan +@@ -915,7 +935,16 @@ public: + FieldPositionIterator* posIter, + UErrorCode& status) const; + ++#if __GNUC__ == 2 ++ UDate parse(const UnicodeString& s, UErrorCode& e) const { ++ return DateFormat::parse(s, e); ++ } ++ UDate parse (const UnicodeString& s, ParsePosition& p) const { ++ return DateFormat::parse(s, p); ++ } ++#else + using DateFormat::parse; ++#endif + + /** + * Parse a date/time string beginning at the given parse position. For +diff --git a/source/i18n/unicode/tblcoll.h b/source/i18n/unicode/tblcoll.h +index e56f189..2108699 100644 +--- a/source/i18n/unicode/tblcoll.h ++++ b/source/i18n/unicode/tblcoll.h +@@ -254,7 +254,22 @@ public: + const CharacterIterator& source) const; + + // Make deprecated versions of Collator::compare() visible. ++#if __GNUC__ == 2 ++ EComparisonResult compare(const UChar* source, int sourceLength, ++ const UChar* target, int targetLength) const { ++ return Collator::compare(source, sourceLength, target, targetLength); ++ } ++ EComparisonResult compare(const UnicodeString& s1, const UnicodeString& s2, ++ int i) const { ++ return Collator::compare(s1, s2, i); ++ } ++ EComparisonResult compare(const UnicodeString& s1, const UnicodeString& s2) ++ const { ++ return Collator::compare(s1, s2); ++ } ++#else + using Collator::compare; ++#endif + + /** + * The comparison function compares the character data stored in two +diff --git a/source/i18n/unicode/tzfmt.h b/source/i18n/unicode/tzfmt.h +index 24f0e49..969e08a 100644 +--- a/source/i18n/unicode/tzfmt.h ++++ b/source/i18n/unicode/tzfmt.h +@@ -520,7 +520,14 @@ public: + */ + UnicodeString& formatOffsetShortLocalizedGMT(int32_t offset, UnicodeString& result, UErrorCode& status) const; + ++#if __GNUC__ == 2 ++ UnicodeString& format(const Formattable& data, UnicodeString& string, ++ FieldPositionIterator* iterator, UErrorCode& error) const { ++ return Format::format(data, string, iterator, error); ++ } ++#else + using Format::format; ++#endif + + /** + * Returns the display name of the time zone at the given date for the style. +-- +2.2.2 + + +From 6fe3c3f205284dfb0a2c4d06717bb84cb61f0f66 Mon Sep 17 00:00:00 2001 +From: Adrien Destugues +Date: Sun, 19 Apr 2015 13:36:37 +0200 +Subject: gcc2 fixes in source/common + + +diff --git a/source/common/unicode/bytestrie.h b/source/common/unicode/bytestrie.h +index 9c77827..367a0ae 100644 +--- a/source/common/unicode/bytestrie.h ++++ b/source/common/unicode/bytestrie.h +@@ -338,6 +338,9 @@ public: + // but the code looks more confusing that way.) + UVector32 *stack_; + }; ++#if __GNUC__ == 2 ++ friend class Iterator; ++#endif + + private: + friend class BytesTrieBuilder; +diff --git a/source/common/unicode/bytestriebuilder.h b/source/common/unicode/bytestriebuilder.h +index d00ab9b..afbf59b 100644 +--- a/source/common/unicode/bytestriebuilder.h ++++ b/source/common/unicode/bytestriebuilder.h +@@ -152,6 +152,9 @@ private: + private: + const char *s; + }; ++#if __GNUC__ == 2 ++ friend class BTLinearMatchNode; ++#endif + + virtual Node *createLinearMatchNode(int32_t i, int32_t byteIndex, int32_t length, + Node *nextNode) const; +diff --git a/source/common/unicode/platform.h b/source/common/unicode/platform.h +index 4829000..2411dd0 100644 +--- a/source/common/unicode/platform.h ++++ b/source/common/unicode/platform.h +@@ -708,7 +708,7 @@ + /* Use the predefined value. */ + #elif defined(U_STATIC_IMPLEMENTATION) + # define U_EXPORT +-#elif defined(__GNUC__) ++#elif defined(__GNUC__) && __GNUC__ > 2 + # define U_EXPORT __attribute__((visibility("default"))) + #elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550) \ + || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x550) +diff --git a/source/common/unicode/stringtriebuilder.h b/source/common/unicode/stringtriebuilder.h +index 04447e5..21bab82 100644 +--- a/source/common/unicode/stringtriebuilder.h ++++ b/source/common/unicode/stringtriebuilder.h +@@ -379,6 +379,15 @@ protected: + int32_t length; + Node *next; // A branch sub-node. + }; ++#if __GNUC__ >= 2 ++ friend class FinalValueNode; ++ friend class ValueNode; ++ friend class IntermediateValueNode; ++ friend class BranchNode; ++ friend class ListBranchNode; ++ friend class SplitBranchNode; ++ friend class BranchHeadNode; ++#endif + #endif /* U_HIDE_INTERNAL_API */ + + /** @internal */ +diff --git a/source/common/unicode/ucharstrie.h b/source/common/unicode/ucharstrie.h +index 0575a97..9fe81c1 100644 +--- a/source/common/unicode/ucharstrie.h ++++ b/source/common/unicode/ucharstrie.h +@@ -356,6 +356,9 @@ public: + // but the code looks more confusing that way.) + UVector32 *stack_; + }; ++#if __GNUC__ == 2 ++ friend class Iterator; ++#endif + + private: + friend class UCharsTrieBuilder; +diff --git a/source/common/unicode/ucharstriebuilder.h b/source/common/unicode/ucharstriebuilder.h +index 35e353d..30f40d9 100644 +--- a/source/common/unicode/ucharstriebuilder.h ++++ b/source/common/unicode/ucharstriebuilder.h +@@ -156,6 +156,9 @@ private: + private: + const UChar *s; + }; ++#if __GNUC__ == 2 ++ friend class UCTLinearMatchNode; ++#endif + + virtual Node *createLinearMatchNode(int32_t i, int32_t unitIndex, int32_t length, + Node *nextNode) const; +-- +2.2.2 + + +From 3c6dff2a3728889f67afcc5e2e5a667d59aa2b84 Mon Sep 17 00:00:00 2001 +From: Adrien Destugues +Date: Sun, 19 Apr 2015 13:38:07 +0200 +Subject: buildsystem configuration for Haiku + + +diff --git a/source/acinclude.m4 b/source/acinclude.m4 +index 179c1c8..6a25dc4 100644 +--- a/source/acinclude.m4 ++++ b/source/acinclude.m4 +@@ -470,6 +470,9 @@ AC_DEFUN([AC_CHECK_STRICT_COMPILE], + if test "$GCC" = yes + then + case "${host}" in ++ *-*-haiku*) ++ CFLAGS="$CFLAGS -std=c9x" ++ ;; + *) + # Do not use -ansi. It limits us to C90, and it breaks some platforms. + # We use -std=c99 to disable the gnu99 defaults and its associated warnings +diff --git a/source/config/mh-haiku b/source/config/mh-haiku +index ccf956e..55a3ed2 100644 +--- a/source/config/mh-haiku ++++ b/source/config/mh-haiku +@@ -18,7 +18,7 @@ LIBCPPFLAGS = + THREADSCPPFLAGS = + + # +-CPPFLAGS += -D__STDC_ISO_10646__ -DU_CHARSET_IS_UTF8=1 ++CPPFLAGS += -DU_CHARSET_IS_UTF8=1 + + ## Compiler switch to embed a runtime search path + LD_RPATH= +-- +2.2.2 + + +From 1e79fa03b6cd114d4c7fb7c03251bc10a48897c2 Mon Sep 17 00:00:00 2001 +From: Adrien Destugues +Date: Thu, 2 Oct 2014 14:54:39 +0200 +Subject: Force definition of U_DISABLE_RENAMING + +We build ICU with this flag disabled, but somehow this isn't added tothe +header, and later on trying to build haiku without the flag would fail. +So we just change the default value to keep things simpler. + +diff --git a/source/common/unicode/uconfig.h b/source/common/unicode/uconfig.h +index f6223bb..7c67263 100644 +--- a/source/common/unicode/uconfig.h ++++ b/source/common/unicode/uconfig.h +@@ -87,7 +87,7 @@ + * @internal + */ + #ifndef U_DISABLE_RENAMING +-#define U_DISABLE_RENAMING 0 ++#define U_DISABLE_RENAMING 1 + #endif + + /** +-- +2.2.2 + + +From 12c3d34d0c531dcd3af7ae9c0119001bcdf8261a Mon Sep 17 00:00:00 2001 +From: Adrien Destugues +Date: Fri, 3 Oct 2014 11:07:01 +0200 +Subject: Don't call tzset and tzname on Haiku + +While they exist, they are implemented using ICU, and trying to use them +within ICU results in a deadlock. + +diff --git a/source/common/putilimp.h b/source/common/putilimp.h +index d2c1c66..a3e361f 100644 +--- a/source/common/putilimp.h ++++ b/source/common/putilimp.h +@@ -105,7 +105,7 @@ typedef size_t uintptr_t; + /* Use the predefined value. */ + #elif U_PLATFORM_USES_ONLY_WIN32_API + # define U_TZSET _tzset +-#elif U_PLATFORM == U_PF_OS400 ++#elif U_PLATFORM == U_PF_OS400 || defined(__HAIKU__) + /* not defined */ + #else + # define U_TZSET tzset +@@ -140,7 +140,7 @@ typedef size_t uintptr_t; + /* Use the predefined value. */ + #elif U_PLATFORM_USES_ONLY_WIN32_API + # define U_TZNAME _tzname +-#elif U_PLATFORM == U_PF_OS400 ++#elif U_PLATFORM == U_PF_OS400 || defined(__HAIKU__) + /* not defined */ + #else + # define U_TZNAME tzname +diff --git a/source/configure.ac b/source/configure.ac +index b30c8d0..89902b4 100644 +--- a/source/configure.ac ++++ b/source/configure.ac +@@ -790,50 +790,26 @@ else + fi + AC_SUBST(U_HAVE_POPEN) + +-AC_CHECK_FUNC(tzset) ++#AC_CHECK_FUNC(tzset) + U_HAVE_TZSET=0 +-if test x$ac_cv_func_tzset = xyes +-then +- U_TZSET=tzset +- U_HAVE_TZSET=1 +-else +- AC_CHECK_FUNC(_tzset) +- if test x$ac_cv_func__tzset = xyes +- then +- U_TZSET=_tzset +- U_HAVE_TZSET=1 +- else +- CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_TZSET=0" +- fi +-fi ++#if test x$ac_cv_func_tzset = xyes ++#then ++# U_TZSET=tzset ++# U_HAVE_TZSET=1 ++#else ++# AC_CHECK_FUNC(_tzset) ++# if test x$ac_cv_func__tzset = xyes ++# then ++# U_TZSET=_tzset ++# U_HAVE_TZSET=1 ++# else ++# CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_TZSET=0" ++# fi ++#fi + AC_SUBST(U_HAVE_TZSET) + AC_SUBST(U_TZSET) + + U_HAVE_TZNAME=0 +-AC_CACHE_CHECK(for tzname,ac_cv_var_tzname, +-[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#ifndef __USE_POSIX +-#define __USE_POSIX +-#endif +-#include +-#include +-#ifndef tzname /* For SGI. */ +-extern char *tzname[]; /* RS6000 and others reject char **tzname. */ +-#endif]], [atoi(*tzname);])],[ac_cv_var_tzname=yes],[ac_cv_var_tzname=no])]) +-if test $ac_cv_var_tzname = yes; then +- U_TZNAME=tzname +- U_HAVE_TZNAME=1 +-else +- AC_CACHE_CHECK(for _tzname,ac_cv_var__tzname, +- [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include +- #include +- extern char *_tzname[];]], [atoi(*_tzname);])],[ac_cv_var__tzname=yes],[ac_cv_var__tzname=no])]) +- if test $ac_cv_var__tzname = yes; then +- U_TZNAME=_tzname +- U_HAVE_TZNAME=1 +- else +- CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_TZNAME=0" +- fi +-fi + AC_SUBST(U_HAVE_TZNAME) + AC_SUBST(U_TZNAME) + +-- +2.2.2 + + +From efa9ee8612ac7482e56fa2190ce1b1afd188e268 Mon Sep 17 00:00:00 2001 +From: Adrien Destugues +Date: Mon, 6 Oct 2014 13:28:09 +0200 +Subject: more gcc2 fixes for ICU 54. + + +diff --git a/source/common/norm2allmodes.h b/source/common/norm2allmodes.h +index 64c84a2..aca1e08 100644 +--- a/source/common/norm2allmodes.h ++++ b/source/common/norm2allmodes.h +@@ -193,7 +193,9 @@ private: + ReorderingBuffer &buffer, UErrorCode &errorCode) const { + impl.decompose(src, limit, &buffer, errorCode); + } ++#if __GNUC__ != 2 + using Normalizer2WithImpl::normalize; // Avoid warning about hiding base class function. ++#endif + virtual void + normalizeAndAppend(const UChar *src, const UChar *limit, UBool doNormalize, + UnicodeString &safeMiddle, +@@ -204,7 +206,9 @@ private: + spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &errorCode) const { + return impl.decompose(src, limit, NULL, errorCode); + } ++#if __GNUC__ != 2 + using Normalizer2WithImpl::spanQuickCheckYes; // Avoid warning about hiding base class function. ++#endif + virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const { + return impl.isDecompYes(impl.getNorm16(c)) ? UNORM_YES : UNORM_NO; + } +@@ -225,7 +229,9 @@ private: + ReorderingBuffer &buffer, UErrorCode &errorCode) const { + impl.compose(src, limit, onlyContiguous, TRUE, buffer, errorCode); + } ++#if __GNUC__ != 2 + using Normalizer2WithImpl::normalize; // Avoid warning about hiding base class function. ++#endif + virtual void + normalizeAndAppend(const UChar *src, const UChar *limit, UBool doNormalize, + UnicodeString &safeMiddle, +@@ -268,7 +274,9 @@ private: + spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &) const { + return impl.composeQuickCheck(src, limit, onlyContiguous, NULL); + } ++#if __GNUC__ != 2 + using Normalizer2WithImpl::spanQuickCheckYes; // Avoid warning about hiding base class function. ++#endif + virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const { + return impl.getCompQuickCheck(impl.getNorm16(c)); + } +@@ -296,7 +304,9 @@ private: + ReorderingBuffer &buffer, UErrorCode &errorCode) const { + impl.makeFCD(src, limit, &buffer, errorCode); + } ++#if __GNUC__ != 2 + using Normalizer2WithImpl::normalize; // Avoid warning about hiding base class function. ++#endif + virtual void + normalizeAndAppend(const UChar *src, const UChar *limit, UBool doNormalize, + UnicodeString &safeMiddle, +@@ -307,7 +317,9 @@ private: + spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &errorCode) const { + return impl.makeFCD(src, limit, NULL, errorCode); + } ++#if __GNUC__ != 2 + using Normalizer2WithImpl::spanQuickCheckYes; // Avoid warning about hiding base class function. ++#endif + virtual UBool hasBoundaryBefore(UChar32 c) const { return impl.hasFCDBoundaryBefore(c); } + virtual UBool hasBoundaryAfter(UChar32 c) const { return impl.hasFCDBoundaryAfter(c); } + virtual UBool isInert(UChar32 c) const { return impl.isFCDInert(c); } +diff --git a/source/common/putilimp.h b/source/common/putilimp.h +index a3e361f..affb1a8 100644 +--- a/source/common/putilimp.h ++++ b/source/common/putilimp.h +@@ -113,7 +113,7 @@ typedef size_t uintptr_t; + + #if defined(U_TIMEZONE) || defined(U_HAVE_TIMEZONE) + /* Use the predefined value. */ +-#elif U_PLATFORM == U_PF_ANDROID ++#elif U_PLATFORM == U_PF_ANDROID || defined(__HAIKU__) + # define U_TIMEZONE timezone + #elif U_PLATFORM_IS_LINUX_BASED + # if defined(__UCLIBC__) +diff --git a/source/common/unicode/platform.h b/source/common/unicode/platform.h +index 2411dd0..61fdfe1 100644 +--- a/source/common/unicode/platform.h ++++ b/source/common/unicode/platform.h +@@ -159,7 +159,7 @@ + # else + # define U_PLATFORM U_PF_DARWIN + # endif +-#elif defined(BSD) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__MirBSD__) ++#elif defined(BSD) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__MirBSD__) || defined(__HAIKU__) + # define U_PLATFORM U_PF_BSD + #elif defined(sun) || defined(__sun) + /* Check defined(__SVR4) || defined(__svr4__) to distinguish Solaris from SunOS? */ +diff --git a/source/i18n/filteredbrk.cpp b/source/i18n/filteredbrk.cpp +index 7ecb004..e3b3802 100644 +--- a/source/i18n/filteredbrk.cpp ++++ b/source/i18n/filteredbrk.cpp +@@ -65,7 +65,13 @@ class U_I18N_API UStringSet : public UVector { + inline UBool contains(const UnicodeString& s) { + return contains((void*) &s); + } ++#if __GNUC__ == 2 ++ UBool contains(void* s) { ++ return UVector::contains(s); ++ } ++#else + using UVector::contains; ++#endif + /** + * Return the ith UnicodeString alias + */ +-- +2.2.2 + + +From 85cb05132c7caf7c17c786a816efb31a08a40319 Mon Sep 17 00:00:00 2001 +From: Oliver Tappe +Date: Fri, 14 Nov 2014 23:56:19 +0100 +Subject: Restore missing parts for proper Haiku port. + +* Actually set the platform to U_HAIKU for Haiku target. +* Use gcc to build icudt54l_dat.o for Haiku target. + +diff --git a/source/configure.ac b/source/configure.ac +index 89902b4..9f3b893 100644 +--- a/source/configure.ac ++++ b/source/configure.ac +@@ -626,7 +626,7 @@ AC_MSG_CHECKING([for genccode assembly]) + # Check to see if genccode can generate simple assembly. + GENCCODE_ASSEMBLY= + case "${host}" in +-*-linux*|*-kfreebsd*-gnu*|i*86-*-*bsd*|i*86-pc-gnu) ++*-linux*|*-kfreebsd*-gnu*|i*86-*-*bsd*|i*86-pc-gnu|*-haiku*) + if test "$GCC" = yes; then + # We're using gcc, and the simple -a gcc command line works for genccode + GENCCODE_ASSEMBLY="-a gcc" +@@ -1227,6 +1227,7 @@ case "${host}" in + *-*-nto*) platform=U_QNX ;; + *-dec-osf*) platform=U_OSF ;; + *-*-beos) platform=U_BEOS ;; ++ *-*-haiku*) platform=U_HAIKU ;; + *-*-irix*) platform=U_IRIX ;; + *-ncr-*) platform=U_MPRAS ;; + *) platform=U_UNKNOWN_PLATFORM ;; +-- +2.2.2 + + +From d1ec5200e5938bab93750e171a58182ea76eebc1 Mon Sep 17 00:00:00 2001 +From: Jerome Duval +Date: Thu, 26 Mar 2015 18:39:42 +0000 +Subject: gcc2 fixes for tztools. + + +diff --git a/source/tools/tzcode/private.h b/source/tools/tzcode/private.h +index 1a85c88..0ee3329 100644 +--- a/source/tools/tzcode/private.h ++++ b/source/tools/tzcode/private.h +@@ -120,7 +120,7 @@ + */ + #ifndef HAVE_STDINT_H + #define HAVE_STDINT_H \ +- (199901 <= __STDC_VERSION__ || \ ++ (defined(__HAIKU__) || 199901 <= __STDC_VERSION__ || \ + 2 < (__GLIBC__ + (0 < __GLIBC_MINOR__))) + #endif /* !defined HAVE_STDINT_H */ + +-- +2.2.2 +