summaryrefslogtreecommitdiffstats
path: root/icu
diff options
context:
space:
mode:
authorRĂ¼diger Timm <rt@openoffice.org>2008-10-28 08:56:37 +0000
committerRĂ¼diger Timm <rt@openoffice.org>2008-10-28 08:56:37 +0000
commitff8e63e66403129d00fd0864581f08af9532668b (patch)
treedafe6dc98486eb842a5534e949969f643f67d266 /icu
parentCWS-TOOLING: integrate CWS ause098 (diff)
downloadcore-ff8e63e66403129d00fd0864581f08af9532668b.tar.gz
core-ff8e63e66403129d00fd0864581f08af9532668b.zip
CWS-TOOLING: integrate CWS i18n42
Diffstat (limited to 'icu')
-rw-r--r--icu/icu-3.6.patch1547
-rw-r--r--icu/icu-4.0.patch58
-rwxr-xr-xicu/icuversion.mk4
-rw-r--r--icu/makefile.mk12
-rw-r--r--icu/makefiles.zipbin89997 -> 92150 bytes
-rw-r--r--icu/prj/d.lst10
6 files changed, 72 insertions, 1559 deletions
diff --git a/icu/icu-3.6.patch b/icu/icu-3.6.patch
deleted file mode 100644
index 7eac1d9a09cc..000000000000
--- a/icu/icu-3.6.patch
+++ /dev/null
@@ -1,1547 +0,0 @@
-*** misc/icu/source/common/putil.c Mon Jul 31 20:14:28 2006
---- misc/build/icu/source/common/putil.c Mon Jan 28 21:31:50 2008
-***************
-*** 48,54 ****
- #endif
-
- /* Make sure things like readlink and such functions work. */
-! #ifndef _XOPEN_SOURCE_EXTENDED
- #define _XOPEN_SOURCE_EXTENDED 1
- #endif
-
---- 48,55 ----
- #endif
-
- /* Make sure things like readlink and such functions work. */
-! /* It is invalid to compile an XPG3, XPG4, XPG4v2 or XPG5 application using c99 */
-! #if !defined(_XOPEN_SOURCE_EXTENDED) && __STDC_VERSION__ < 199901L
- #define _XOPEN_SOURCE_EXTENDED 1
- #endif
-
-*** misc/icu/source/common/unicode/pwin32.h Tue Aug 29 23:34:38 2006
---- misc/build/icu/source/common/unicode/pwin32.h Mon Jan 28 21:31:50 2008
-***************
-*** 266,273 ****
---- 266,278 ----
- #else
- #define U_EXPORT __declspec(dllexport)
- #endif
-+ #ifdef __MINGW32__
-+ #define U_EXPORT2
-+ #define U_IMPORT
-+ #else
- #define U_EXPORT2 __cdecl
- #define U_IMPORT __declspec(dllimport)
-+ #endif
-
- /*===========================================================================*/
- /* Code alignment and C function inlining */
-*** misc/icu/source/common/unicode/umachine.h Tue Feb 7 02:54:16 2006
---- misc/build/icu/source/common/unicode/umachine.h Mon Jan 28 21:31:50 2008
-***************
-*** 322,328 ****
- */
-
- /* Define UChar to be compatible with wchar_t if possible. */
-! #if U_SIZEOF_WCHAR_T==2
- typedef wchar_t UChar;
- #else
- typedef uint16_t UChar;
---- 322,328 ----
- */
-
- /* Define UChar to be compatible with wchar_t if possible. */
-! #if U_SIZEOF_WCHAR_T==2 && !defined(__MINGW32__)
- typedef wchar_t UChar;
- #else
- typedef uint16_t UChar;
-*** misc/icu/source/common/unicode/unistr.h Tue Aug 29 23:52:50 2006
---- misc/build/icu/source/common/unicode/unistr.h Mon Jan 28 21:31:50 2008
-***************
-*** 3280,3286 ****
- //========================================
- inline int8_t
- UnicodeString::doCompare(int32_t start,
-! int32_t length,
- const UnicodeString& srcText,
- int32_t srcStart,
- int32_t srcLength) const
---- 3280,3286 ----
- //========================================
- inline int8_t
- UnicodeString::doCompare(int32_t start,
-! int32_t _length,
- const UnicodeString& srcText,
- int32_t srcStart,
- int32_t srcLength) const
-***************
-*** 3289,3295 ****
- return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise
- } else {
- srcText.pinIndices(srcStart, srcLength);
-! return doCompare(start, length, srcText.fArray, srcStart, srcLength);
- }
- }
-
---- 3289,3295 ----
- return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise
- } else {
- srcText.pinIndices(srcStart, srcLength);
-! return doCompare(start, _length, srcText.fArray, srcStart, srcLength);
- }
- }
-
-***************
-*** 3374,3380 ****
-
- inline int8_t
- UnicodeString::doCompareCodePointOrder(int32_t start,
-! int32_t length,
- const UnicodeString& srcText,
- int32_t srcStart,
- int32_t srcLength) const
---- 3374,3380 ----
-
- inline int8_t
- UnicodeString::doCompareCodePointOrder(int32_t start,
-! int32_t _length,
- const UnicodeString& srcText,
- int32_t srcStart,
- int32_t srcLength) const
-***************
-*** 3383,3389 ****
- return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise
- } else {
- srcText.pinIndices(srcStart, srcLength);
-! return doCompareCodePointOrder(start, length, srcText.fArray, srcStart, srcLength);
- }
- }
-
---- 3383,3389 ----
- return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise
- } else {
- srcText.pinIndices(srcStart, srcLength);
-! return doCompareCodePointOrder(start, _length, srcText.fArray, srcStart, srcLength);
- }
- }
-
-***************
-*** 3435,3441 ****
-
- inline int8_t
- UnicodeString::doCaseCompare(int32_t start,
-! int32_t length,
- const UnicodeString &srcText,
- int32_t srcStart,
- int32_t srcLength,
---- 3435,3441 ----
-
- inline int8_t
- UnicodeString::doCaseCompare(int32_t start,
-! int32_t _length,
- const UnicodeString &srcText,
- int32_t srcStart,
- int32_t srcLength,
-***************
-*** 3445,3451 ****
- return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise
- } else {
- srcText.pinIndices(srcStart, srcLength);
-! return doCaseCompare(start, length, srcText.fArray, srcStart, srcLength, options);
- }
- }
-
---- 3445,3451 ----
- return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise
- } else {
- srcText.pinIndices(srcStart, srcLength);
-! return doCaseCompare(start, _length, srcText.fArray, srcStart, srcLength, options);
- }
- }
-
-*** misc/icu/source/common/unicode/ustring.h Tue Aug 29 23:52:50 2006
---- misc/build/icu/source/common/unicode/ustring.h Mon Jan 28 21:31:50 2008
-***************
-*** 918,924 ****
- * </pre>
- * @stable ICU 2.0
- */
-! #if U_SIZEOF_WCHAR_T==U_SIZEOF_UCHAR && (U_CHARSET_FAMILY==U_ASCII_FAMILY || (U_SIZEOF_UCHAR == 2 && defined(U_WCHAR_IS_UTF16)))
- # define U_STRING_DECL(var, cs, length) static const wchar_t var[(length)+1]={ L ## cs }
- /**@stable ICU 2.0 */
- # define U_STRING_INIT(var, cs, length)
---- 918,924 ----
- * </pre>
- * @stable ICU 2.0
- */
-! #if U_SIZEOF_WCHAR_T==U_SIZEOF_UCHAR && (U_CHARSET_FAMILY==U_ASCII_FAMILY || (U_SIZEOF_UCHAR == 2 && defined(U_WCHAR_IS_UTF16))) && !defined(__MINGW32__)
- # define U_STRING_DECL(var, cs, length) static const wchar_t var[(length)+1]={ L ## cs }
- /**@stable ICU 2.0 */
- # define U_STRING_INIT(var, cs, length)
-*** misc/icu/source/common/uvectr32.cpp Wed Aug 27 03:01:30 2003
---- misc/build/icu/source/common/uvectr32.cpp Mon Jan 28 21:31:51 2008
-***************
-*** 1,6 ****
- /*
- ******************************************************************************
-! * Copyright (C) 1999-2003, International Business Machines Corporation and *
- * others. All Rights Reserved. *
- ******************************************************************************
- * Date Name Description
---- 1,6 ----
- /*
- ******************************************************************************
-! * Copyright (C) 1999-2008, International Business Machines Corporation and *
- * others. All Rights Reserved. *
- ******************************************************************************
- * Date Name Description
-***************
-*** 26,31 ****
---- 26,32 ----
- UVector32::UVector32(UErrorCode &status) :
- count(0),
- capacity(0),
-+ maxCapacity(0),
- elements(NULL)
- {
- _init(DEFUALT_CAPACITY, status);
-***************
-*** 34,39 ****
---- 35,41 ----
- UVector32::UVector32(int32_t initialCapacity, UErrorCode &status) :
- count(0),
- capacity(0),
-+ maxCapacity(0),
- elements(0)
- {
- _init(initialCapacity, status);
-***************
-*** 46,51 ****
---- 48,56 ----
- if (initialCapacity < 1) {
- initialCapacity = DEFUALT_CAPACITY;
- }
-+ if (maxCapacity>0 && maxCapacity<initialCapacity) {
-+ initialCapacity = maxCapacity;
-+ }
- elements = (int32_t *)uprv_malloc(sizeof(int32_t)*initialCapacity);
- if (elements == 0) {
- status = U_MEMORY_ALLOCATION_ERROR;
-***************
-*** 189,209 ****
- UBool UVector32::expandCapacity(int32_t minimumCapacity, UErrorCode &status) {
- if (capacity >= minimumCapacity) {
- return TRUE;
-! } else {
-! int32_t newCap = capacity * 2;
-! if (newCap < minimumCapacity) {
-! newCap = minimumCapacity;
-! }
-! int32_t* newElems = (int32_t *)uprv_malloc(sizeof(int32_t)*newCap);
-! if (newElems == 0) {
-! status = U_MEMORY_ALLOCATION_ERROR;
-! return FALSE;
-! }
-! uprv_memcpy(newElems, elements, sizeof(elements[0]) * count);
-! uprv_free(elements);
-! elements = newElems;
-! capacity = newCap;
-! return TRUE;
- }
- }
-
---- 194,228 ----
- UBool UVector32::expandCapacity(int32_t minimumCapacity, UErrorCode &status) {
- if (capacity >= minimumCapacity) {
- return TRUE;
-! }
-! if (maxCapacity>0 && minimumCapacity>maxCapacity) {
-! status = U_BUFFER_OVERFLOW_ERROR;
-! return FALSE;
-! }
-! int32_t newCap = capacity * 2;
-! if (newCap < minimumCapacity) {
-! newCap = minimumCapacity;
-! }
-! if (maxCapacity > 0 && newCap > maxCapacity) {
-! newCap = maxCapacity;
-! }
-! int32_t* newElems = (int32_t *)uprv_malloc(sizeof(int32_t)*newCap);
-! if (newElems == 0) {
-! status = U_MEMORY_ALLOCATION_ERROR;
-! return FALSE;
-! }
-! uprv_memcpy(newElems, elements, sizeof(elements[0]) * count);
-! uprv_free(elements);
-! elements = newElems;
-! capacity = newCap;
-! return TRUE;
-! }
-!
-! void UVector32::setMaxCapacity(int32_t limit) {
-! U_ASSERT(limit >= 0);
-! maxCapacity = limit;
-! if (maxCapacity < 0) {
-! maxCapacity = 0;
- }
- }
-
-*** misc/icu/source/common/uvectr32.h Wed Jan 18 04:52:04 2006
---- misc/build/icu/source/common/uvectr32.h Mon Jan 28 21:31:51 2008
-***************
-*** 1,6 ****
- /*
- **********************************************************************
-! * Copyright (C) 1999-2006, International Business Machines
- * Corporation and others. All Rights Reserved.
- **********************************************************************
- */
---- 1,6 ----
- /*
- **********************************************************************
-! * Copyright (C) 1999-2008, International Business Machines
- * Corporation and others. All Rights Reserved.
- **********************************************************************
- */
-***************
-*** 61,66 ****
---- 61,68 ----
- int32_t count;
-
- int32_t capacity;
-+
-+ int32_t maxCapacity; // Limit beyond which capacity is not permitted to grow.
-
- int32_t* elements;
-
-***************
-*** 162,167 ****
---- 164,177 ----
- int32_t *getBuffer() const;
-
- /**
-+ * Set the maximum allowed buffer capacity for this vector/stack.
-+ * Default with no limit set is unlimited, go until malloc() fails.
-+ * A Limit of zero means unlimited capacity.
-+ * Units are vector elements (32 bits each), not bytes.
-+ */
-+ void setMaxCapacity(int32_t limit);
-+
-+ /**
- * ICU "poor man's RTTI", returns a UClassID for this class.
- */
- static UClassID U_EXPORT2 getStaticClassID();
-***************
-*** 221,227 ****
- }
-
- inline int32_t *UVector32::reserveBlock(int32_t size, UErrorCode &status) {
-! ensureCapacity(count+size, status);
- int32_t *rp = elements+count;
- count += size;
- return rp;
---- 231,239 ----
- }
-
- inline int32_t *UVector32::reserveBlock(int32_t size, UErrorCode &status) {
-! if (ensureCapacity(count+size, status) == FALSE) {
-! return NULL;
-! }
- int32_t *rp = elements+count;
- count += size;
- return rp;
-*** misc/icu/source/config/mh-darwin Wed Feb 1 08:52:42 2006
---- misc/build/icu/source/config/mh-darwin Mon Jan 28 21:31:51 2008
-***************
-*** 25,31 ****
- SHLIB.cc= $(CXX) -dynamiclib -dynamic $(CXXFLAGS) $(LDFLAGS)
-
- ## Compiler switches to embed a library name and version information
-! LD_SONAME = -Wl,-compatibility_version -Wl,$(SO_TARGET_VERSION_MAJOR) -Wl,-current_version -Wl,$(SO_TARGET_VERSION) -install_name $(notdir $(MIDDLE_SO_TARGET))
-
- ## Compiler switch to embed a runtime search path
- LD_RPATH=
---- 25,31 ----
- SHLIB.cc= $(CXX) -dynamiclib -dynamic $(CXXFLAGS) $(LDFLAGS)
-
- ## Compiler switches to embed a library name and version information
-! LD_SONAME = -Wl,-compatibility_version -Wl,$(SO_TARGET_VERSION_MAJOR) -Wl,-current_version -Wl,$(SO_TARGET_VERSION) -install_name @executable_path/$(notdir $(FINAL_SO_TARGET))
-
- ## Compiler switch to embed a runtime search path
- LD_RPATH=
-*** misc/icu/source/config/mh-irix Thu Mar 23 19:51:52 2006
---- misc/build/icu/source/config/mh-irix Mon Jan 28 21:31:51 2008
-***************
-*** 23,28 ****
---- 23,31 ----
- SHLIB.c= $(CC) -shared $(DEFS) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS)
- SHLIB.cc= $(CXX) -shared $(DEFS) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS)
-
-+ # Environment variable to set a runtime search path
-+ LDLIBRARYPATH_ENVVAR = LD_LIBRARYN32_PATH
-+
- ## Additional flags when building libraries with thread safety
- THREADSCPPFLAGS = -D_REENTRANT -D_PTHREADS
- LIBCPPFLAGS =
-*** misc/icu/source/config/mh-linux Thu Mar 23 19:51:52 2006
---- misc/build/icu/source/config/mh-linux Mon Jan 28 21:31:51 2008
-***************
-*** 20,25 ****
---- 20,33 ----
- LD_RPATH=
- LD_RPATH_PRE = -Wl,-rpath,
-
-+ ## Force RPATH=$ORIGIN to locate own dependencies w/o need for LD_LIBRARY_PATH
-+ ## (incl. the C++ runtime libs potentially found in the URE lib dir):
-+ ENABLE_RPATH=YES
-+ RPATHLDFLAGS=${LD_RPATH_PRE}'$$ORIGIN:$$ORIGIN/../ure-link/lib'
-+
-+ #SH# ENABLE_RPATH=YES
-+ #SH# RPATHLDFLAGS="${LD_RPATH_PRE}'$$ORIGIN:$$ORIGIN/../ure-link/lib'"
-+
- ## These are the library specific LDFLAGS
- LDFLAGSICUDT=-nodefaultlibs -nostdlib
-
-*** misc/icu/source/config/mh-mingw Tue Aug 15 10:24:14 2006
---- misc/build/icu/source/config/mh-mingw Mon Jan 28 21:31:51 2008
-***************
-*** 54,59 ****
---- 54,62 ----
- STATIC_O = ao
- SO_TARGET_VERSION_SUFFIX = $(SO_TARGET_VERSION_MAJOR)
-
-+ STUB_SUFFIX=l
-+ LIBICUDT= -L$(LIBDIR) -L$(top_builddir)/stubdata -l$(STATIC_PREFIX_WHEN_USED)$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)$(SO_TARGET_VERSION_MAJOR)l
-+
- # Static library prefix and file extension
- LIBSICU = $(STATIC_PREFIX)$(ICUPREFIX)
- A = lib
-***************
-*** 71,77 ****
-
- # The #M# is used to delete lines for icu-config
- # Current full path directory.
-! CURR_FULL_DIR=$(shell pwd -W)#M#
- # Current full path directory for use in source code in a -D compiler option.
- CURR_SRCCODE_FULL_DIR=$(subst /,\\\\,$(shell pwd -W))#M#
-
---- 74,83 ----
-
- # The #M# is used to delete lines for icu-config
- # Current full path directory.
-! CURR_FULL_DIR=$(subst \,/,$(shell cygpath -aw .))#M#
-! SRCDIRW:=$(SRCDIR)
-! SRCDIR:=$(foreach p,$(SRCDIR),$(shell cygpath -u $(subst \,/,$(p))))#M#
-! DATAFILEPATHS:=$(foreach p,$(DATAFILEPATHS),$(shell cygpath -u $(subst \,/,$(p))))#M#
- # Current full path directory for use in source code in a -D compiler option.
- CURR_SRCCODE_FULL_DIR=$(subst /,\\\\,$(shell pwd -W))#M#
-
-*** misc/icu/source/config/mh-solaris Fri Feb 24 20:31:14 2006
---- misc/build/icu/source/config/mh-solaris Mon Jan 28 21:31:51 2008
-***************
-*** 18,34 ****
-
- ## Commands to link
- ## For Sun Workshop, use CC to link to bring in C++ runtime
-! LINK.c= $(CXX) $(CXXFLAGS) $(LDFLAGS)
-! LINK.cc= $(CXX) $(CXXFLAGS) $(LDFLAGS)
-
- ## Commands to make a shared library
- SHLIB.c= $(CC) $(CFLAGS) $(LDFLAGS) -G
-! SHLIB.cc= $(CXX) $(CXXFLAGS) $(LDFLAGS) -G
-
- ## Compiler switch to embed a runtime search path
- LD_RPATH= -R
- LD_RPATH_PRE=
-
- #LIBRARY_PATH_PREFIX=/usr/lib/lwp:
-
- ## Compiler switch to embed a library name
---- 18,42 ----
-
- ## Commands to link
- ## For Sun Workshop, use CC to link to bring in C++ runtime
-! ## For Sun Workshop, -norunpath stops compiler to record a useless RPATH
-! LINK.c= $(CXX) $(CXXFLAGS) $(LDFLAGS) -norunpath
-! LINK.cc= $(CXX) $(CXXFLAGS) $(LDFLAGS) -norunpath
-
- ## Commands to make a shared library
- SHLIB.c= $(CC) $(CFLAGS) $(LDFLAGS) -G
-! SHLIB.cc= $(CXX) $(CXXFLAGS) $(LDFLAGS) -G -norunpath
-
- ## Compiler switch to embed a runtime search path
- LD_RPATH= -R
- LD_RPATH_PRE=
-
-+ ## Force RPATH=$ORIGIN to locate own dependencies w/o need for LD_LIBRARY_PATH
-+ ENABLE_RPATH=YES
-+ RPATHLDFLAGS=${LD_RPATH}'$$ORIGIN'
-+
-+ #SH# ENABLE_RPATH=YES
-+ #SH# RPATHLDFLAGS="${LD_RPATH}'$$ORIGIN'"
-+
- #LIBRARY_PATH_PREFIX=/usr/lib/lwp:
-
- ## Compiler switch to embed a library name
-*** misc/icu/source/data/Makefile.in Sat Aug 12 00:22:24 2006
---- misc/build/icu/source/data/Makefile.in Mon Jan 28 21:31:51 2008
-***************
-*** 344,350 ****
- ifneq ($(ICUDATA_SOURCE_IS_NATIVE_TARGET),YES)
- @echo "Unpacking $(ICUDATA_SOURCE_ARCHIVE) and generating $@ (list of data files)"
- @-$(RMV) $@
-! $(INVOKE) $(BINDIR)/icupkg -d $(BUILDDIR) --list -x \* $(ICUDATA_SOURCE_ARCHIVE) > $@
- else
- @echo "$@" > $@
- endif
---- 344,350 ----
- ifneq ($(ICUDATA_SOURCE_IS_NATIVE_TARGET),YES)
- @echo "Unpacking $(ICUDATA_SOURCE_ARCHIVE) and generating $@ (list of data files)"
- @-$(RMV) $@
-! $(INVOKE) $(BINDIR)/icupkg -d $(BUILDDIR) --list -x \* $(ICUDATA_SOURCE_ARCHIVE) | grep -v ".cnv" > $@
- else
- @echo "$@" > $@
- endif
-*** misc/icu/source/i18n/regexcmp.cpp Thu Feb 2 05:37:14 2006
---- misc/build/icu/source/i18n/regexcmp.cpp Mon Jan 28 21:31:51 2008
-***************
-*** 2,8 ****
- //
- // file: regexcmp.cpp
- //
-! // Copyright (C) 2002-2006 International Business Machines Corporation and others.
- // All Rights Reserved.
- //
- // This file contains the ICU regular expression compiler, which is responsible
---- 2,8 ----
- //
- // file: regexcmp.cpp
- //
-! // Copyright (C) 2002-2008 International Business Machines Corporation and others.
- // All Rights Reserved.
- //
- // This file contains the ICU regular expression compiler, which is responsible
-***************
-*** 1187,1200 ****
- // Because capture groups can be forward-referenced by back-references,
- // we fill the operand with the capture group number. At the end
- // of compilation, it will be changed to the variable's location.
-! U_ASSERT(groupNum > 0);
-! int32_t op;
-! if (fModeFlags & UREGEX_CASE_INSENSITIVE) {
-! op = URX_BUILD(URX_BACKREF_I, groupNum);
- } else {
-! op = URX_BUILD(URX_BACKREF, groupNum);
- }
-- fRXPat->fCompiledPat->addElement(op, *fStatus);
- }
- break;
-
---- 1187,1203 ----
- // Because capture groups can be forward-referenced by back-references,
- // we fill the operand with the capture group number. At the end
- // of compilation, it will be changed to the variable's location.
-! if (groupNum < 1) {
-! error(U_REGEX_INVALID_BACK_REF);
- } else {
-! int32_t op;
-! if (fModeFlags & UREGEX_CASE_INSENSITIVE) {
-! op = URX_BUILD(URX_BACKREF_I, groupNum);
-! } else {
-! op = URX_BUILD(URX_BACKREF, groupNum);
-! }
-! fRXPat->fCompiledPat->addElement(op, *fStatus);
- }
- }
- break;
-
-*** misc/icu/source/i18n/rematch.cpp Thu Aug 25 20:02:20 2005
---- misc/build/icu/source/i18n/rematch.cpp Mon Jan 28 21:31:51 2008
-***************
-*** 6,12 ****
- //
- /*
- **************************************************************************
-! * Copyright (C) 2002-2005 International Business Machines Corporation *
- * and others. All rights reserved. *
- **************************************************************************
- */
---- 6,12 ----
- //
- /*
- **************************************************************************
-! * Copyright (C) 2002-2008 International Business Machines Corporation *
- * and others. All rights reserved. *
- **************************************************************************
- */
-***************
-*** 30,35 ****
---- 30,44 ----
-
- U_NAMESPACE_BEGIN
-
-+ // Limit the size of the back track stack, to avoid system failures caused
-+ // by heap exhaustion. Units are in 32 bit words, not bytes.
-+ // This value puts ICU's limits higher than most other regexp implementations,
-+ // which use recursion rather than the heap, and take more storage per
-+ // backtrack point.
-+ // This constant is _temporary_. Proper API to control the value will added.
-+ //
-+ static const int32_t BACKTRACK_STACK_CAPACITY = 8000000;
-+
- //-----------------------------------------------------------------------------
- //
- // Constructor and Destructor
-***************
-*** 53,60 ****
- }
- if (fStack == NULL || fData == NULL) {
- fDeferredStatus = U_MEMORY_ALLOCATION_ERROR;
- }
--
- reset(*RegexStaticSets::gStaticSets->fEmptyString);
- }
-
---- 62,70 ----
- }
- if (fStack == NULL || fData == NULL) {
- fDeferredStatus = U_MEMORY_ALLOCATION_ERROR;
-+ } else {
-+ fStack->setMaxCapacity(BACKTRACK_STACK_CAPACITY);
- }
- reset(*RegexStaticSets::gStaticSets->fEmptyString);
- }
-
-***************
-*** 78,83 ****
---- 88,95 ----
- }
- if (fStack == NULL || fData == NULL) {
- status = U_MEMORY_ALLOCATION_ERROR;
-+ } else {
-+ fStack->setMaxCapacity(BACKTRACK_STACK_CAPACITY);
- }
- reset(input);
- }
-***************
-*** 102,107 ****
---- 114,121 ----
- }
- if (fStack == NULL || fData == NULL) {
- status = U_MEMORY_ALLOCATION_ERROR;
-+ } else {
-+ fStack->setMaxCapacity(BACKTRACK_STACK_CAPACITY);
- }
- reset(*RegexStaticSets::gStaticSets->fEmptyString);
- }
-***************
-*** 1015,1020 ****
---- 1029,1042 ----
- inline REStackFrame *RegexMatcher::StateSave(REStackFrame *fp, int32_t savePatIdx, int32_t frameSize, UErrorCode &status) {
- // push storage for a new frame.
- int32_t *newFP = fStack->reserveBlock(frameSize, status);
-+ if (newFP == NULL) {
-+ // Heap allocation error on attempted stack expansion.
-+ // We need to return a writable stack frame, so just return the
-+ // previous frame. The match operation will stop quickly
-+ // becuase of the error status, after which the frame will never
-+ // be looked at again.
-+ return fp;
-+ }
- fp = (REStackFrame *)(newFP - frameSize); // in case of realloc of stack.
-
- // New stack frame = copy of old top frame.
-***************
-*** 1030,1037 ****
- fp->fPatIdx = savePatIdx;
- return (REStackFrame *)newFP;
- }
-!
-!
- //--------------------------------------------------------------------------------
- //
- // MatchAt This is the actual matching engine.
---- 1052,1059 ----
- fp->fPatIdx = savePatIdx;
- return (REStackFrame *)newFP;
- }
-!
-!
- //--------------------------------------------------------------------------------
- //
- // MatchAt This is the actual matching engine.
-***************
-*** 2262,2267 ****
---- 2284,2290 ----
- }
-
- if (U_FAILURE(status)) {
-+ isMatch = FALSE;
- break;
- }
- }
-*** misc/icu/source/i18n/windtfmt.cpp Tue Aug 15 08:48:02 2006
---- misc/build/icu/source/i18n/windtfmt.cpp Mon Jan 28 21:31:51 2008
-***************
-*** 232,249 ****
- UChar stackBuffer[STACK_BUFFER_SIZE];
- UChar *buffer = stackBuffer;
-
-! result = GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, buffer, STACK_BUFFER_SIZE);
-
- if (result == 0) {
- if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
- int newLength = GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, NULL, 0);
-
- buffer = NEW_ARRAY(UChar, newLength);
-! GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, buffer, newLength);
- }
- }
-
-! appendTo.append(buffer, (int32_t) wcslen(buffer));
-
- if (buffer != stackBuffer) {
- DELETE_ARRAY(buffer);
---- 232,249 ----
- UChar stackBuffer[STACK_BUFFER_SIZE];
- UChar *buffer = stackBuffer;
-
-! result = GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, reinterpret_cast<LPWSTR>(buffer), STACK_BUFFER_SIZE);
-
- if (result == 0) {
- if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
- int newLength = GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, NULL, 0);
-
- buffer = NEW_ARRAY(UChar, newLength);
-! GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, reinterpret_cast<LPWSTR>(buffer), newLength);
- }
- }
-
-! appendTo.append(buffer, (int32_t) u_strlen(buffer));
-
- if (buffer != stackBuffer) {
- DELETE_ARRAY(buffer);
-***************
-*** 258,275 ****
- UChar stackBuffer[STACK_BUFFER_SIZE];
- UChar *buffer = stackBuffer;
-
-! result = GetTimeFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, buffer, STACK_BUFFER_SIZE);
-
- if (result == 0) {
- if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
- int newLength = GetTimeFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, NULL, 0);
-
- buffer = NEW_ARRAY(UChar, newLength);
-! GetDateFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, buffer, newLength);
- }
- }
-
-! appendTo.append(buffer, (int32_t) wcslen(buffer));
-
- if (buffer != stackBuffer) {
- DELETE_ARRAY(buffer);
---- 258,275 ----
- UChar stackBuffer[STACK_BUFFER_SIZE];
- UChar *buffer = stackBuffer;
-
-! result = GetTimeFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, reinterpret_cast<LPWSTR>(buffer), STACK_BUFFER_SIZE);
-
- if (result == 0) {
- if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
- int newLength = GetTimeFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, NULL, 0);
-
- buffer = NEW_ARRAY(UChar, newLength);
-! GetDateFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, reinterpret_cast<LPWSTR>(buffer), newLength);
- }
- }
-
-! appendTo.append(buffer, (int32_t) u_strlen(buffer));
-
- if (buffer != stackBuffer) {
- DELETE_ARRAY(buffer);
-*** misc/icu/source/i18n/winnmfmt.cpp Thu Aug 17 07:21:06 2006
---- misc/build/icu/source/i18n/winnmfmt.cpp Mon Jan 28 21:31:51 2008
-***************
-*** 86,95 ****
- GetLocaleInfoA(lcid, LOCALE_SGROUPING, buf, 10);
- fmt->Grouping = getGrouping(buf);
-
-! fmt->lpDecimalSep = NEW_ARRAY(UChar, 6);
- GetLocaleInfoW(lcid, LOCALE_SDECIMAL, fmt->lpDecimalSep, 6);
-
-! fmt->lpThousandSep = NEW_ARRAY(UChar, 6);
- GetLocaleInfoW(lcid, LOCALE_STHOUSAND, fmt->lpThousandSep, 6);
-
- GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_INEGNUMBER, (LPWSTR) &fmt->NegativeOrder, sizeof(UINT));
---- 86,95 ----
- GetLocaleInfoA(lcid, LOCALE_SGROUPING, buf, 10);
- fmt->Grouping = getGrouping(buf);
-
-! fmt->lpDecimalSep = reinterpret_cast<LPWSTR>(NEW_ARRAY(UChar, 6));
- GetLocaleInfoW(lcid, LOCALE_SDECIMAL, fmt->lpDecimalSep, 6);
-
-! fmt->lpThousandSep = reinterpret_cast<LPWSTR>(NEW_ARRAY(UChar, 6));
- GetLocaleInfoW(lcid, LOCALE_STHOUSAND, fmt->lpThousandSep, 6);
-
- GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_INEGNUMBER, (LPWSTR) &fmt->NegativeOrder, sizeof(UINT));
-***************
-*** 111,126 ****
- GetLocaleInfoA(lcid, LOCALE_SMONGROUPING, buf, sizeof(buf));
- fmt->Grouping = getGrouping(buf);
-
-! fmt->lpDecimalSep = NEW_ARRAY(UChar, 6);
- GetLocaleInfoW(lcid, LOCALE_SMONDECIMALSEP, fmt->lpDecimalSep, 6);
-
-! fmt->lpThousandSep = NEW_ARRAY(UChar, 6);
- GetLocaleInfoW(lcid, LOCALE_SMONTHOUSANDSEP, fmt->lpThousandSep, 6);
-
- GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_INEGCURR, (LPWSTR) &fmt->NegativeOrder, sizeof(UINT));
- GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_ICURRENCY, (LPWSTR) &fmt->PositiveOrder, sizeof(UINT));
-
-! fmt->lpCurrencySymbol = NEW_ARRAY(UChar, 8);
- GetLocaleInfoW(lcid, LOCALE_SCURRENCY, (LPWSTR) fmt->lpCurrencySymbol, 8);
- }
-
---- 111,126 ----
- GetLocaleInfoA(lcid, LOCALE_SMONGROUPING, buf, sizeof(buf));
- fmt->Grouping = getGrouping(buf);
-
-! fmt->lpDecimalSep = reinterpret_cast<LPWSTR>(NEW_ARRAY(UChar, 6));
- GetLocaleInfoW(lcid, LOCALE_SMONDECIMALSEP, fmt->lpDecimalSep, 6);
-
-! fmt->lpThousandSep = reinterpret_cast<LPWSTR>(NEW_ARRAY(UChar, 6));
- GetLocaleInfoW(lcid, LOCALE_SMONTHOUSANDSEP, fmt->lpThousandSep, 6);
-
- GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_INEGCURR, (LPWSTR) &fmt->NegativeOrder, sizeof(UINT));
- GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_ICURRENCY, (LPWSTR) &fmt->PositiveOrder, sizeof(UINT));
-
-! fmt->lpCurrencySymbol = reinterpret_cast<LPWSTR>(NEW_ARRAY(UChar, 8));
- GetLocaleInfoW(lcid, LOCALE_SCURRENCY, (LPWSTR) fmt->lpCurrencySymbol, 8);
- }
-
-***************
-*** 290,296 ****
- formatInfo.currency.Grouping = 0;
- }
-
-! result = GetCurrencyFormatW(fLCID, 0, nBuffer, &formatInfo.currency, buffer, STACK_BUFFER_SIZE);
-
- if (result == 0) {
- DWORD lastError = GetLastError();
---- 290,296 ----
- formatInfo.currency.Grouping = 0;
- }
-
-! result = GetCurrencyFormatW(fLCID, 0, nBuffer, &formatInfo.currency, reinterpret_cast<LPWSTR>(buffer), STACK_BUFFER_SIZE);
-
- if (result == 0) {
- DWORD lastError = GetLastError();
-***************
-*** 300,306 ****
-
- buffer = NEW_ARRAY(UChar, newLength);
- buffer[0] = 0x0000;
-! GetCurrencyFormatW(fLCID, 0, nBuffer, &formatInfo.currency, buffer, newLength);
- }
- }
- } else {
---- 300,306 ----
-
- buffer = NEW_ARRAY(UChar, newLength);
- buffer[0] = 0x0000;
-! GetCurrencyFormatW(fLCID, 0, nBuffer, &formatInfo.currency, reinterpret_cast<LPWSTR>(buffer), newLength);
- }
- }
- } else {
-***************
-*** 312,318 ****
- formatInfo.number.Grouping = 0;
- }
-
-! result = GetNumberFormatW(fLCID, 0, nBuffer, &formatInfo.number, buffer, STACK_BUFFER_SIZE);
-
- if (result == 0) {
- if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
---- 312,318 ----
- formatInfo.number.Grouping = 0;
- }
-
-! result = GetNumberFormatW(fLCID, 0, nBuffer, &formatInfo.number, reinterpret_cast<LPWSTR>(buffer), STACK_BUFFER_SIZE);
-
- if (result == 0) {
- if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
-***************
-*** 320,331 ****
-
- buffer = NEW_ARRAY(UChar, newLength);
- buffer[0] = 0x0000;
-! GetNumberFormatW(fLCID, 0, nBuffer, &formatInfo.number, buffer, newLength);
- }
- }
- }
-
-! appendTo.append(buffer, (int32_t) wcslen(buffer));
-
- if (buffer != stackBuffer) {
- DELETE_ARRAY(buffer);
---- 320,331 ----
-
- buffer = NEW_ARRAY(UChar, newLength);
- buffer[0] = 0x0000;
-! GetNumberFormatW(fLCID, 0, nBuffer, &formatInfo.number, reinterpret_cast<LPWSTR>(buffer), newLength);
- }
- }
- }
-
-! appendTo.append(buffer, (int32_t) u_strlen(buffer));
-
- if (buffer != stackBuffer) {
- DELETE_ARRAY(buffer);
-*** misc/icu/source/layout/CoverageTables.cpp Sat May 8 01:28:42 2004
---- misc/build/icu/source/layout/CoverageTables.cpp Mon Jan 28 21:31:51 2008
-***************
-*** 44,49 ****
---- 44,53 ----
- le_uint16 count = SWAPW(glyphCount);
- le_uint8 bit = OpenTypeUtilities::highBit(count);
- le_uint16 power = 1 << bit;
-+
-+ if (count == 0)
-+ return -1;
-+
- le_uint16 extra = count - power;
- le_uint16 probe = power;
- le_uint16 index = 0;
-*** misc/icu/source/layout/DeviceTables.cpp Fri Jan 14 18:25:12 2005
---- misc/build/icu/source/layout/DeviceTables.cpp Mon Jan 28 21:31:51 2008
-***************
-*** 22,28 ****
- le_uint16 format = SWAPW(deltaFormat) - 1;
- le_int16 result = 0;
-
-! if (ppem >= start && ppem <= SWAPW(endSize)) {
- le_uint16 sizeIndex = ppem - start;
- le_uint16 bits = fieldBits[format];
- le_uint16 count = 16 / bits;
---- 22,29 ----
- le_uint16 format = SWAPW(deltaFormat) - 1;
- le_int16 result = 0;
-
-! if (ppem >= start && ppem <= SWAPW(endSize)
-! && format < sizeof(fieldBits)/sizeof(fieldBits[0])) {
- le_uint16 sizeIndex = ppem - start;
- le_uint16 bits = fieldBits[format];
- le_uint16 count = 16 / bits;
-*** misc/icu/source/layout/GXLayoutEngine.cpp Fri Sep 2 20:22:10 2005
---- misc/build/icu/source/layout/GXLayoutEngine.cpp Mon Jan 28 21:31:51 2008
-***************
-*** 39,45 ****
- return 0;
- }
-
-! mapCharsToGlyphs(chars, offset, count, FALSE, rightToLeft, TRUE, glyphStorage, success);
-
- if (LE_FAILURE(success)) {
- return 0;
---- 39,45 ----
- return 0;
- }
-
-! mapCharsToGlyphs(chars, offset, count, rightToLeft, rightToLeft, TRUE, glyphStorage, success);
-
- if (LE_FAILURE(success)) {
- return 0;
-*** misc/icu/source/layout/IndicClassTables.cpp Wed Aug 23 02:12:40 2006
---- misc/build/icu/source/layout/IndicClassTables.cpp Mon Jan 28 21:31:51 2008
-***************
-*** 94,100 ****
- _dr, _db, _db, _db, _db, _xx, _xx, _l1, _dl, _xx, _xx, _s1, _s2, _vr, _xx, _xx, // 09C0 - 09CF
- _xx, _xx, _xx, _xx, _xx, _xx, _xx, _m2, _xx, _xx, _xx, _xx, _cn, _cn, _xx, _cn, // 09D0 - 09DF
- _iv, _iv, _dv, _dv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 09E0 - 09EF
-! _ct, _ct, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 09F0 - 09FA
- };
-
- static const IndicClassTable::CharClass punjCharClasses[] =
---- 94,100 ----
- _dr, _db, _db, _db, _db, _xx, _xx, _l1, _dl, _xx, _xx, _s1, _s2, _vr, _xx, _xx, // 09C0 - 09CF
- _xx, _xx, _xx, _xx, _xx, _xx, _xx, _m2, _xx, _xx, _xx, _xx, _cn, _cn, _xx, _cn, // 09D0 - 09DF
- _iv, _iv, _dv, _dv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 09E0 - 09EF
-! _rv, _ct, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx /* 09F0 - 09FA */
- };
-
- static const IndicClassTable::CharClass punjCharClasses[] =
-***************
-*** 120,125 ****
---- 120,138 ----
- _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0AE0 - 0AEF
- };
-
-+ #if 1
-+ static const IndicClassTable::CharClass oryaCharClasses[] =
-+ {
-+ _xx, _ma, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _iv, /* 0B00 - 0B0F */
-+ _iv, _xx, _xx, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _ct, _bb, /* 0B10 - 0B1F */
-+ _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _pb, /* 0B20 - 0B2F */
-+ _rb, _xx, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _nu, _xx, _dr, _da, /* 0B30 - 0B3F */
-+ _dr, _db, _db, _db, _xx, _xx, _xx, _dl, _s1, _xx, _xx, _s2, _s3, _vr, _xx, _xx, /* 0B40 - 0B4F */
-+ _xx, _xx, _xx, _xx, _xx, _xx, _da, _dr, _xx, _xx, _xx, _xx, _cn, _cn, _xx, _pb, /* 0B50 - 0B5F */
-+ _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0B60 - 0B6F */
-+ _xx, _bb /* 0B70 - 0B71 */
-+ };
-+ #else
- static const IndicClassTable::CharClass oryaCharClasses[] =
- {
- _xx, _ma, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _iv, // 0B00 - 0B0F
-***************
-*** 131,136 ****
---- 144,150 ----
- _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0B60 - 0B6F
- _xx, _ct // 0B70 - 0B71
- };
-+ #endif
-
- static const IndicClassTable::CharClass tamlCharClasses[] =
- {
-***************
-*** 150,156 ****
- _xx, _mp, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, // 0C00 - 0C0F
- _iv, _xx, _iv, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, // 0C10 - 0C1F
- _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _bb, // 0C20 - 0C2F
-! _bb, _ct, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _xx, _xx, _da, _da, // 0C30 - 0C3F
- _da, _dr, _dr, _dr, _dr, _xx, _a1, _da, _s1, _xx, _da, _da, _da, _vr, _xx, _xx, // 0C40 - 0C4F
- _xx, _xx, _xx, _xx, _xx, _da, _m2, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0C50 - 0C5F
- _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0C60 - 0C6F
---- 164,170 ----
- _xx, _mp, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, // 0C00 - 0C0F
- _iv, _xx, _iv, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, // 0C10 - 0C1F
- _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _bb, // 0C20 - 0C2F
-! _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _xx, _xx, _da, _da, // 0C30 - 0C3F
- _da, _dr, _dr, _dr, _dr, _xx, _a1, _da, _s1, _xx, _da, _da, _da, _vr, _xx, _xx, // 0C40 - 0C4F
- _xx, _xx, _xx, _xx, _xx, _da, _m2, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0C50 - 0C5F
- _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0C60 - 0C6F
-***************
-*** 173,178 ****
---- 187,205 ----
- _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0CE0 - 0CEF
- };
-
-+ #if 1
-+ //use the pango char class table here
-+ static const IndicClassTable::CharClass mlymCharClasses[] =
-+ {
-+ _xx, _xx, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, /* 0D00 - 0D0F */
-+ _iv, _xx, _iv, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, /* 0D10 - 0D1F */
-+ _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _pb, /* 0D20 - 0D2F */
-+ _pb, _cn, _ct, _ct, _ct, _pb, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _xx, _dr, _dr, /* 0D30 - 0D3F */
-+ _dr, _dr, _dr, _dr, _xx, _xx, _dl, _dl, _dl, _xx, _s1, _s2, _s3, _vr, _xx, _xx, /* 0D40 - 0D4F */
-+ _xx, _xx, _xx, _xx, _xx, _xx, _xx, _dr, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0D50 - 0D5F */
-+ _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx /* 0D60 - 0D6F */
-+ };
-+ #else
- // FIXME: this is correct for old-style Malayalam (MAL) but not for reformed Malayalam (MLR)
- // FIXME: should there be a REPH for old-style Malayalam?
- static const IndicClassTable::CharClass mlymCharClasses[] =
-***************
-*** 185,190 ****
---- 212,218 ----
- _xx, _xx, _xx, _xx, _xx, _xx, _xx, _m2, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0D50 - 0D5F
- _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0D60 - 0D6F
- };
-+ #endif
-
- static const IndicClassTable::CharClass sinhCharClasses[] =
- {
-***************
-*** 232,238 ****
- #define TAML_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
- #define TELU_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | SF_FILTER_ZERO_WIDTH | 3)
- #define KNDA_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | SF_FILTER_ZERO_WIDTH | 3)
-! #define MLYM_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
- #define SINH_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT)
-
- //
---- 260,266 ----
- #define TAML_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
- #define TELU_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | SF_FILTER_ZERO_WIDTH | 3)
- #define KNDA_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | SF_FILTER_ZERO_WIDTH | 3)
-! #define MLYM_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT)
- #define SINH_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT)
-
- //
-***************
-*** 256,262 ****
-
- static const IndicClassTable mlymClassTable = {0x0D00, 0x0D6F, 3, MLYM_SCRIPT_FLAGS, mlymCharClasses, mlymSplitTable};
-
-! static const IndicClassTable sinhClassTable = {0x0D80, 0x0DF4, 3, SINH_SCRIPT_FLAGS, sinhCharClasses, sinhSplitTable};
-
- //
- // IndicClassTable addresses
---- 284,290 ----
-
- static const IndicClassTable mlymClassTable = {0x0D00, 0x0D6F, 3, MLYM_SCRIPT_FLAGS, mlymCharClasses, mlymSplitTable};
-
-! static const IndicClassTable sinhClassTable = {0x0D80, 0x0DF4, 4, SINH_SCRIPT_FLAGS, sinhCharClasses, sinhSplitTable};
-
- //
- // IndicClassTable addresses
-*** misc/icu/source/layout/IndicReordering.cpp Tue Apr 25 21:08:12 2006
---- misc/build/icu/source/layout/IndicReordering.cpp Mon Jan 28 21:31:51 2008
-***************
-*** 50,55 ****
---- 50,63 ----
- #define distFeatureMask 0x00010000UL
- #define initFeatureMask 0x00008000UL
-
-+ // TODO: Find better names for these!
-+ #define tagArray4 (loclFeatureMask | nuktFeatureMask | akhnFeatureMask | vatuFeatureMask | presFeatureMask | blwsFeatureMask | abvsFeatureMask | pstsFeatureMask | halnFeatureMask | blwmFeatureMask | abvmFeatureMask | distFeatureMask)
-+ #define tagArray3 (pstfFeatureMask | tagArray4)
-+ #define tagArray2 (halfFeatureMask | tagArray3)
-+ #define tagArray1 (blwfFeatureMask | tagArray2)
-+ #define tagArray0 (rphfFeatureMask | tagArray1)
-+
-+
- class IndicReorderingOutput : public UMemory {
- private:
- le_int32 fOutIndex;
-***************
-*** 154,159 ****
---- 162,188 ----
- fSMabove = fSMbelow = 0;
- }
-
-+ void swapChars(int a, int b)
-+ {
-+ LEErrorCode success = LE_NO_ERROR;
-+ LEUnicode temp_char;
-+ le_uint32 temp_index;
-+ FeatureMask temp_tag;
-+
-+ temp_char = fOutChars[fOutIndex + b];
-+ temp_index = fGlyphStorage.getCharIndex(fOutIndex + b, success);
-+ temp_tag = fGlyphStorage.getAuxData(fOutIndex + b, success);
-+
-+ fOutChars[fOutIndex + b] = fOutChars[fOutIndex + a];
-+ le_uint32 toswap = fGlyphStorage.getCharIndex(fOutIndex + a, success);
-+ fGlyphStorage.setCharIndex(fOutIndex + b, toswap, success);
-+ fGlyphStorage.setAuxData(fOutIndex + b, tagArray3, success);
-+
-+ fOutChars[fOutIndex + a] = temp_char;
-+ fGlyphStorage.setCharIndex(fOutIndex + a, temp_index, success);
-+ fGlyphStorage.setAuxData(fOutIndex + a, temp_tag, success);
-+ }
-+
- void writeChar(LEUnicode ch, le_uint32 charIndex, FeatureMask charFeatures)
- {
- LEErrorCode success = LE_NO_ERROR;
-***************
-*** 335,347 ****
- C_DOTTED_CIRCLE = 0x25CC
- };
-
-- // TODO: Find better names for these!
-- #define tagArray4 (loclFeatureMask | nuktFeatureMask | akhnFeatureMask | vatuFeatureMask | presFeatureMask | blwsFeatureMask | abvsFeatureMask | pstsFeatureMask | halnFeatureMask | blwmFeatureMask | abvmFeatureMask | distFeatureMask)
-- #define tagArray3 (pstfFeatureMask | tagArray4)
-- #define tagArray2 (halfFeatureMask | tagArray3)
-- #define tagArray1 (blwfFeatureMask | tagArray2)
-- #define tagArray0 (rphfFeatureMask | tagArray1)
--
- static const FeatureMap featureMap[] =
- {
- {loclFeatureTag, loclFeatureMask},
---- 364,369 ----
-***************
-*** 373,379 ****
- {-1, 6, 1, -1, -1, -1, -1, -1, -1, 5, 9, 5, 5, 4, 12}, // 2 - consonant with nukta
- {-1, 6, 1, -1, -1, -1, -1, -1, 2, 5, 9, 5, 5, 4, 12}, // 3 - consonant
- {-1, -1, -1, -1, -1, -1, 3, 2, -1, -1, -1, -1, -1, -1, 7}, // 4 - consonant virama
-! {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 5 - dependent vowels
- {-1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 6 - vowel mark
- {-1, -1, -1, -1, -1, -1, 3, 2, -1, -1, -1, -1, -1, -1, -1}, // 7 - consonant virama ZWJ, consonant ZWJ virama
- {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1}, // 8 - independent vowels that can take a virama
---- 395,401 ----
- {-1, 6, 1, -1, -1, -1, -1, -1, -1, 5, 9, 5, 5, 4, 12}, // 2 - consonant with nukta
- {-1, 6, 1, -1, -1, -1, -1, -1, 2, 5, 9, 5, 5, 4, 12}, // 3 - consonant
- {-1, -1, -1, -1, -1, -1, 3, 2, -1, -1, -1, -1, -1, -1, 7}, // 4 - consonant virama
-! {-1, 6, 1, -1, -1, -1, -1, -1, -1, 5, -1, -1, -1, -1, -1}, // 5 - dependent vowels
- {-1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 6 - vowel mark
- {-1, -1, -1, -1, -1, -1, 3, 2, -1, -1, -1, -1, -1, -1, -1}, // 7 - consonant virama ZWJ, consonant ZWJ virama
- {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1}, // 8 - independent vowels that can take a virama
-***************
-*** 629,634 ****
---- 651,670 ----
- output.writeChar(chars[i], i, tagArray4);
- }
-
-+ /* for the special conjuction of Cons+0x0d4d+0x0d31 or Cons+0x0d4d+0x0d30 of Malayalam */
-+ if ((baseConsonant - 2 >= 0) &&
-+ (chars[baseConsonant - 1] == 0x0d4d) &&
-+ ((chars[baseConsonant] == 0x0d31) ||
-+ (chars[baseConsonant] == 0x0d30)) &&
-+ ((chars[baseConsonant - 2] >= 0x0d15) &&
-+ (chars[baseConsonant - 2] <= 0x0d39))) {
-+
-+ output.swapChars(-1, -3);
-+
-+ if (mpreFixups)
-+ mpreFixups->reduce();
-+ }
-+
- if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) != 0) {
- output.writeMbelow();
- output.writeSMbelow(); // FIXME: there are no SMs in these scripts...
-*** misc/icu/source/layout/LESwaps.h Thu Jun 23 00:39:36 2005
---- misc/build/icu/source/layout/LESwaps.h Mon Jan 28 21:31:51 2008
-***************
-*** 2,7 ****
---- 2,8 ----
- /*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
-+ * with additions by Sun Microsystems 2002-2006
- *
- */
-
-***************
-*** 17,28 ****
-
- U_NAMESPACE_BEGIN
-
- /**
-! * A convenience macro which invokes the swapWord member function
- * from a concise call.
- *
- * @stable ICU 2.8
- */
- #if defined(U_IS_BIG_ENDIAN)
- #if U_IS_BIG_ENDIAN
- #define SWAPW(value) (value)
---- 18,38 ----
-
- U_NAMESPACE_BEGIN
-
-+ // There exist popular font files which contain unaligned tables
-+ // (e.g. "Watanabe Gothic"'s "mort" table)
-+ // On some platforms unaligned memory accesses cause a crash.
-+ // The ALLOW_UNALIGNED hack prevents these crashes by assuming that
-+ // every use of the SWAPx macros in ICU's layout engine is intended
-+ // for loading a big endian value and replaces them appropriately.
-+ #define ALLOW_UNALIGNED_HACK
-+
- /**
-! * A convenience macro which invokes the swapLong member function
- * from a concise call.
- *
- * @stable ICU 2.8
- */
-+ #ifndef ALLOW_UNALIGNED_HACK
- #if defined(U_IS_BIG_ENDIAN)
- #if U_IS_BIG_ENDIAN
- #define SWAPW(value) (value)
-***************
-*** 49,54 ****
---- 59,83 ----
- #define SWAPL(value) (LESwaps::isBigEndian() ? (value) : LESwaps::swapLong(value))
- #endif
-
-+ #else // ALLOW_UNALIGNED_HACK
-+
-+ #define SWAPW(rValue) loadBigEndianWord(reinterpret_cast<const le_uint16&>(rValue))
-+ #define SWAPL(rValue) loadBigEndianLong(reinterpret_cast<const le_uint32&>(rValue))
-+
-+ inline le_uint16 loadBigEndianWord( const le_uint16& rValue )
-+ {
-+ const le_uint8* p = reinterpret_cast<const le_uint8*>(&rValue);
-+ return ((p[0] << 8) + p[1]);
-+ }
-+
-+ inline le_uint32 loadBigEndianLong( const le_uint32& rValue )
-+ {
-+ const le_uint8* p = reinterpret_cast<const le_uint8*>(&rValue);
-+ return ((p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]);
-+ }
-+
-+ #endif // ALLOW_UNALIGNED_HACK
-+
- /**
- * This class is used to access data which stored in big endian order
- * regardless of the conventions of the platform. It has been designed
-*** misc/icu/source/layout/MPreFixups.cpp Sat May 8 01:28:44 2004
---- misc/build/icu/source/layout/MPreFixups.cpp Mon Jan 28 21:31:51 2008
-***************
-*** 40,45 ****
---- 40,51 ----
- }
- }
-
-+ void MPreFixups::reduce()
-+ {
-+ if (fFixupCount > 0)
-+ fFixupCount--;
-+ }
-+
- void MPreFixups::apply(LEGlyphStorage &glyphStorage)
- {
- for (le_int32 fixup = 0; fixup < fFixupCount; fixup += 1) {
-*** misc/icu/source/layout/MPreFixups.h Mon Apr 12 20:51:32 2004
---- misc/build/icu/source/layout/MPreFixups.h Mon Jan 28 21:31:51 2008
-***************
-*** 31,36 ****
---- 31,38 ----
-
- void apply(LEGlyphStorage &glyphStorage);
-
-+ void reduce();
-+
- private:
- FixupData *fFixupData;
- le_int32 fFixupCount;
-*** misc/icu/source/stubdata/Makefile.in Fri Dec 2 11:21:34 2005
---- misc/build/icu/source/stubdata/Makefile.in Mon Jan 28 21:31:51 2008
-***************
-*** 25,30 ****
---- 25,36 ----
- ## Target information
-
- TARGET_STUBNAME=$(DATA_STUBNAME)
-+ ifeq (@platform_make_fragment_name@,mh-mingw)
-+ FINAL_SO_TARGET=$(STUBDATA_LIBDIR)$(LIBICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX)$(SO_TARGET_VERSION_MAJOR)$(STUB_SUFFIX).$(SO)
-+ %$(STUB_SUFFIX).$(SO): %$(SO_TARGET_VERSION_MAJOR)$(STUB_SUFFIX).$(SO)
-+ $(RM) $@ && ln $< $@
-+
-+ endif
-
- ifneq ($(ENABLE_STATIC),)
- TARGET = $(STUBDATA_LIBDIR)$(LIBSICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(A)
-*** misc/icu/source/test/intltest/loctest.cpp Thu Jul 6 03:50:04 2006
---- misc/build/icu/source/test/intltest/loctest.cpp Mon Jan 28 21:31:51 2008
-***************
-*** 4,9 ****
---- 4,10 ----
- * others. All Rights Reserved.
- ********************************************************************/
-
-+ #include "unicode/utypes.h"
- #include "loctest.h"
- #include "unicode/decimfmt.h"
- #include "unicode/ucurr.h"
-*** misc/icu/source/test/intltest/regextst.cpp Tue Jul 5 20:39:00 2005
---- misc/build/icu/source/test/intltest/regextst.cpp Mon Jan 28 23:18:47 2008
-***************
-*** 1,6 ****
- /********************************************************************
- * COPYRIGHT:
-! * Copyright (c) 2002-2005, International Business Machines Corporation and
- * others. All Rights Reserved.
- ********************************************************************/
-
---- 1,6 ----
- /********************************************************************
- * COPYRIGHT:
-! * Copyright (c) 2002-2008, International Business Machines Corporation and
- * others. All Rights Reserved.
- ********************************************************************/
-
-***************
-*** 66,71 ****
---- 66,75 ----
- case 6: name = "PerlTests";
- if (exec) PerlTests();
- break;
-+ case 7: name = "Bug 6149";
-+ if (exec) Bug6149();
-+ break;
-+
-
-
- default: name = "";
-***************
-*** 1639,1644 ****
---- 1643,1661 ----
-
- }
-
-+
-+ // Invalid Back Reference \0
-+ // For ICU 3.8 and earlier
-+ // For ICU versions newer than 3.8, \0 introduces an octal escape.
-+ //
-+ #ifndef _MSC_VER
-+ // erAck: 2008-01-28T23:16+0100 MSVC doesn't digest the escaped backslash and
-+ // mumbles something about
-+ // error C2501: 'regex_err' : missing storage-class or type specifiers
-+ // error C2078: too many initializers
-+ // We're not interested in fixing that deficiency just for a testcase.
-+ REGEX_ERR("(ab)\\0", 1, 6, U_REGEX_INVALID_BACK_REF);
-+ #endif
-
- //-------------------------------------------------------------------------------
- //
-***************
-*** 2119,2124 ****
---- 2136,2161 ----
- }
-
-
-+ //--------------------------------------------------------------
-+ //
-+ // Bug6149 Verify limits to heap expansion for backtrack stack.
-+ // Use this pattern,
-+ // "(a?){1,}"
-+ // The zero-length match will repeat forever.
-+ // (That this goes into a loop is another bug)
-+ //
-+ //---------------------------------------------------------------
-+ void RegexTest::Bug6149() {
-+ UnicodeString pattern("(a?){1,}");
-+ UnicodeString s("xyz");
-+ uint32_t flags = 0;
-+ UErrorCode status = U_ZERO_ERROR;
-+
-+ RegexMatcher matcher(pattern, s, flags, status);
-+ UBool result = false;
-+ REGEX_ASSERT_FAIL(result=matcher.matches(status), U_BUFFER_OVERFLOW_ERROR);
-+ REGEX_ASSERT(result == FALSE);
-+ }
-
- #endif /* !UCONFIG_NO_REGULAR_EXPRESSIONS */
-
-*** misc/icu/source/test/intltest/regextst.h Wed Dec 3 07:58:28 2003
---- misc/build/icu/source/test/intltest/regextst.h Mon Jan 28 21:31:51 2008
-***************
-*** 1,6 ****
- /********************************************************************
- * COPYRIGHT:
-! * Copyright (c) 2002-2003, International Business Machines Corporation and
- * others. All Rights Reserved.
- ********************************************************************/
-
---- 1,6 ----
- /********************************************************************
- * COPYRIGHT:
-! * Copyright (c) 2002-2008, International Business Machines Corporation and
- * others. All Rights Reserved.
- ********************************************************************/
-
-***************
-*** 30,35 ****
---- 30,36 ----
- virtual void Extended();
- virtual void Errors();
- virtual void PerlTests();
-+ virtual void Bug6149();
-
- // The following functions are internal to the regexp tests.
- virtual UBool doRegexLMTest(const char *pat, const char *text, UBool looking, UBool match, int line);
-*** misc/icu/source/test/intltest/tsputil.cpp Wed Jul 19 00:18:10 2006
---- misc/build/icu/source/test/intltest/tsputil.cpp Mon Jan 28 21:31:51 2008
-***************
-*** 4,9 ****
---- 4,10 ----
- * others. All Rights Reserved.
- ********************************************************************/
-
-+ #include "unicode/utypes.h"
- #include "tsputil.h"
-
- #include <float.h> // DBL_MAX, DBL_MIN
-*** misc/icu/source/test/intltest/uobjtest.cpp Thu Mar 23 01:54:12 2006
---- misc/build/icu/source/test/intltest/uobjtest.cpp Mon Jan 28 21:31:51 2008
-***************
-*** 4,9 ****
---- 4,10 ----
- * others. All Rights Reserved.
- ********************************************************************/
-
-+ #include "unicode/utypes.h"
- #include "uobjtest.h"
- #include "cmemory.h" // UAlignedMemory
- #include <string.h>
-*** misc/icu/source/test/intltest/ustrtest.cpp Tue Dec 28 22:13:54 2004
---- misc/build/icu/source/test/intltest/ustrtest.cpp Mon Jan 28 21:31:51 2008
-***************
-*** 4,9 ****
---- 4,10 ----
- * others. All Rights Reserved.
- ********************************************************************/
-
-+ #include "unicode/utypes.h"
- #include "ustrtest.h"
- #include "unicode/unistr.h"
- #include "unicode/uchar.h"
-*** misc/icu/source/tools/icupkg/icupkg.cpp Fri Jul 21 23:17:52 2006
---- misc/build/icu/source/tools/icupkg/icupkg.cpp Mon Jan 28 21:31:51 2008
-***************
-*** 332,337 ****
---- 332,341 ----
- return (UBool)(len>0 && 0==strcmp(filename+len, ".dat"));
- }
-
-+ #ifdef __MINGW32__
-+ int _CRT_glob=0;
-+ #endif
-+
- extern int
- main(int argc, char *argv[]) {
- const char *pname, *sourcePath, *destPath, *inFilename, *outFilename, *outComment;
-*** misc/icu/source/tools/pkgdata/make.c Wed Mar 22 09:14:10 2006
---- misc/build/icu/source/tools/pkgdata/make.c Tue Nov 13 13:03:52 2007
-***************
-*** 172,178 ****
---- 172,180 ----
- "MODE=%s\n"
- "MAKEFILE=%s\n"
- "ENTRYPOINT=%s\n"
-+ #ifndef __MINGW32__
- "include %s\n"
-+ #endif
- "\n\n\n",
- o->shortName,
- o->libName,
-***************
-*** 182,189 ****
---- 184,195 ----
- o->srcDir,
- o->mode,
- o->makeFile,
-+ #ifdef __MINGW32__
-+ o->entryName);
-+ #else
- o->entryName,
- o->options);
-+ #endif
- T_FileStream_writeLine(f, linebuf);
-
- /* TEMP_PATH and TARG_PATH will be empty if the respective dir is . */
-***************
-*** 233,238 ****
---- 239,252 ----
-
- pkg_writeCharListWrap(f, o->filePaths, " ", " \\\n",0);
-
-+ #ifdef __MINGW32__
-+ sprintf(linebuf, "\n"
-+ "include %s\n"
-+ "\n\n\n",
-+ o->options);
-+ T_FileStream_writeLine(f, linebuf);
-+ #endif
-+
- T_FileStream_writeLine(f, "\n\n\n");
-
- }
-***************
-*** 396,402 ****
---- 410,420 ----
- T_FileStream_writeLine(f, "BASE_OBJECTS=$(NAME)_dat.o\n");
- T_FileStream_writeLine(f, "\n");
- T_FileStream_writeLine(f, "$(TEMP_DIR)/$(NAME).dat: $(CMNLIST) $(DATAFILEPATHS)\n");
-+ #ifdef __MINGW32__
-+ T_FileStream_writeLine(f, "\t$(INVOKE) $(GENCMN) -c -e $(ENTRYPOINT) -n $(NAME) -s $(SRCDIRW) -t dat -d $(TEMP_DIR) 0 $(CMNLIST)\n");
-+ #else
- T_FileStream_writeLine(f, "\t$(INVOKE) $(GENCMN) -c -e $(ENTRYPOINT) -n $(NAME) -s $(SRCDIR) -t dat -d $(TEMP_DIR) 0 $(CMNLIST)\n");
-+ #endif
- T_FileStream_writeLine(f, "\n");
- T_FileStream_writeLine(f, "$(TEMP_DIR)/$(NAME)_dat.o : $(TEMP_DIR)/$(NAME).dat\n");
- T_FileStream_writeLine(f, "\t$(INVOKE) $(GENCCODE) $(GENCCODE_ASSEMBLY) -n $(NAME) -e $(ENTRYPOINT) -d $(TEMP_DIR) $<\n");
diff --git a/icu/icu-4.0.patch b/icu/icu-4.0.patch
new file mode 100644
index 000000000000..63a0e8395dcd
--- /dev/null
+++ b/icu/icu-4.0.patch
@@ -0,0 +1,58 @@
+--- misc/icu/source/common/putil.c 2008-07-01 03:41:12.000000000 +0200
++++ misc/build/icu/source/common/putil.c 2008-09-02 07:01:29.335795765 +0200
+@@ -52,7 +52,7 @@
+ Poorly upgraded Solaris machines can't have this defined.
+ Cleanly installed Solaris can use this #define.
+ */
+-#if !defined(_XOPEN_SOURCE_EXTENDED) && (!defined(__STDC_VERSION__) || __STDC_VERSION__ >= 199901L)
++#if !defined(_XOPEN_SOURCE_EXTENDED) && (!defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L)
+ #define _XOPEN_SOURCE_EXTENDED 1
+ #endif
+
+--- misc/icu/source/config/mh-linux 2007-12-12 19:57:36.000000000 +0100
++++ misc/build/icu/source/config/mh-linux 2008-05-21 18:59:13.000000000 +0200
+@@ -20,6 +20,14 @@
+ LD_RPATH=
+ LD_RPATH_PRE = -Wl,-rpath,
+
++## Force RPATH=$ORIGIN to locate own dependencies w/o need for LD_LIBRARY_PATH
++## (incl. the C++ runtime libs potentially found in the URE lib dir):
++ENABLE_RPATH=YES
++RPATHLDFLAGS=${LD_RPATH_PRE}'$$ORIGIN:$$ORIGIN/../ure-link/lib'
++
++#SH# ENABLE_RPATH=YES
++#SH# RPATHLDFLAGS="${LD_RPATH_PRE}'$$ORIGIN:$$ORIGIN/../ure-link/lib'"
++
+ ## These are the library specific LDFLAGS
+ LDFLAGSICUDT=-nodefaultlibs -nostdlib
+
+--- misc/icu/source/config/mh-solaris 2007-12-12 19:57:36.000000000 +0100
++++ misc/build/icu/source/config/mh-solaris 2008-05-21 19:02:45.000000000 +0200
+@@ -18,17 +18,24 @@
+
+ ## Commands to link
+ ## For Sun Workshop, use CC to link to bring in C++ runtime
+-LINK.c= $(CXX) $(CXXFLAGS) $(LDFLAGS)
+-LINK.cc= $(CXX) $(CXXFLAGS) $(LDFLAGS)
++LINK.c= $(CXX) $(CXXFLAGS) $(LDFLAGS) -norunpath
++LINK.cc= $(CXX) $(CXXFLAGS) $(LDFLAGS) -norunpath
+
+ ## Commands to make a shared library
+ SHLIB.c= $(CC) $(CFLAGS) $(LDFLAGS) -G
+-SHLIB.cc= $(CXX) $(CXXFLAGS) $(LDFLAGS) -G
++SHLIB.cc= $(CXX) $(CXXFLAGS) $(LDFLAGS) -G -norunpath
+
+ ## Compiler switch to embed a runtime search path
+ LD_RPATH= -R
+ LD_RPATH_PRE=
+
++## Force RPATH=$ORIGIN to locate own dependencies w/o need for LD_LIBRARY_PATH
++ENABLE_RPATH=YES
++RPATHLDFLAGS=${LD_RPATH}'$$ORIGIN'
++
++#SH# ENABLE_RPATH=YES
++#SH# RPATHLDFLAGS="${LD_RPATH}'$$ORIGIN'"
++
+ #LIBRARY_PATH_PREFIX=/usr/lib/lwp:
+
+ ## Compiler switch to embed a library name
diff --git a/icu/icuversion.mk b/icu/icuversion.mk
index 1ddc801a1921..7c0389093fb3 100755
--- a/icu/icuversion.mk
+++ b/icu/icuversion.mk
@@ -29,9 +29,9 @@
#
#*************************************************************************
# major
-ICU_MAJOR=3
+ICU_MAJOR=4
# minor
-ICU_MINOR=6
+ICU_MINOR=0
# micro
ICU_MICRO=0
diff --git a/icu/makefile.mk b/icu/makefile.mk
index 30becc3eb226..14628c907fec 100644
--- a/icu/makefile.mk
+++ b/icu/makefile.mk
@@ -85,6 +85,10 @@ icu_LDFLAGS+=-Wl,-z,noexecstack
icu_CFLAGS+=-O $(ARCH_FLAGS) $(EXTRA_CDEFS)
icu_CXXFLAGS+=-O $(ARCH_FLAGS) $(EXTRA_CDEFS)
+BUILD_ACTION_SEP=;
+# remove conversion and transliteration data to reduce binary size.
+CONFIGURE_ACTION=rm data/mappings/ucm*.mk data/translit/trn*.mk $(BUILD_ACTION_SEP)
+
# until someone introduces SOLARIS 64-bit builds
.IF "$(OS)"=="SOLARIS"
DISABLE_64BIT=--enable-64bit-libs=no
@@ -96,7 +100,7 @@ LDFLAGSADD += -Wl,--hash-style=both
CONFIGURE_DIR=source
-CONFIGURE_ACTION=sh -c 'CFLAGS="$(icu_CFLAGS)" CXXFLAGS="$(icu_CXXFLAGS)" LDFLAGS="$(icu_LDFLAGS)" ./configure --enable-layout --enable-static --enable-shared=yes $(DISABLE_64BIT)'
+CONFIGURE_ACTION+=sh -c 'CFLAGS="$(icu_CFLAGS)" CXXFLAGS="$(icu_CXXFLAGS)" LDFLAGS="$(icu_LDFLAGS)" ./configure --enable-layout --enable-static --enable-shared=yes $(DISABLE_64BIT)'
#CONFIGURE_FLAGS=--enable-layout --enable-static --enable-shared=yes --enable-64bit-libs=no
CONFIGURE_FLAGS=
@@ -138,9 +142,9 @@ OUT2BIN= \
CONFIGURE_DIR=source
.IF "$(COM)"=="GCC"
.IF "$(USE_MINGW)"=="cygwin"
-CONFIGURE_ACTION=sh -c 'CFLAGS="-O -D_MT" CXXFLAGS="-O -D_MT" LDFLAGS="-L$(COMPATH)/lib/mingw -L$(COMPATH)/lib/w32api -L$(COMPATH)$/lib" LIBS="-lmingwthrd" ./configure --build=i586-pc-mingw32 --enable-layout --enable-static --enable-shared=yes --enable-64bit-libs=no'
+CONFIGURE_ACTION=+sh -c 'CFLAGS="-O -D_MT" CXXFLAGS="-O -D_MT" LDFLAGS="-L$(COMPATH)/lib/mingw -L$(COMPATH)/lib/w32api -L$(COMPATH)$/lib" LIBS="-lmingwthrd" ./configure --build=i586-pc-mingw32 --enable-layout --enable-static --enable-shared=yes --enable-64bit-libs=no'
.ELSE
-CONFIGURE_ACTION=sh -c 'CFLAGS="-O -D_MT" CXXFLAGS="-O -D_MT" LDFLAGS="-L$(COMPATH)$/lib" LIBS="-lmingwthrd" ./configure --build=i586-pc-mingw32 --enable-layout --enable-static --enable-shared=yes --enable-64bit-libs=no'
+CONFIGURE_ACTION=+sh -c 'CFLAGS="-O -D_MT" CXXFLAGS="-O -D_MT" LDFLAGS="-L$(COMPATH)$/lib" LIBS="-lmingwthrd" ./configure --build=i586-pc-mingw32 --enable-layout --enable-static --enable-shared=yes --enable-64bit-libs=no'
.ENDIF
#CONFIGURE_FLAGS=--enable-layout --enable-static --enable-shared=yes --enable-64bit-libs=no
@@ -170,8 +174,6 @@ OUT2BIN= \
.ELSE
.IF "$(USE_SHELL)"=="4nt"
BUILD_ACTION_SEP=^
-.ELSE # "$(USE_SHELL)"=="4nt"
-BUILD_ACTION_SEP=;
.ENDIF # "$(USE_SHELL)"=="4nt"
BUILD_DIR=source
.IF "full_debug" == ""
diff --git a/icu/makefiles.zip b/icu/makefiles.zip
index 8fc1ed9429a8..86ed8ca6d9a1 100644
--- a/icu/makefiles.zip
+++ b/icu/makefiles.zip
Binary files differ
diff --git a/icu/prj/d.lst b/icu/prj/d.lst
index 8d5a9194b07b..c5d777277ead 100644
--- a/icu/prj/d.lst
+++ b/icu/prj/d.lst
@@ -9,11 +9,11 @@ mkdir: %_DEST%\inc%_EXT%\external\unicode
..\%__SRC%\lib\*.a %_DEST%\lib%_EXT%\*.a
..\%__SRC%\lib\*.lib %_DEST%\lib%_EXT%\*.lib
-..\%__SRC%\bin\icudt36.dll %_DEST%\bin%_EXT%\icudt36l.dll
-..\%__SRC%\bin\icuin36.dll %_DEST%\bin%_EXT%\icuin36.dll
-..\%__SRC%\bin\icule36.dll %_DEST%\bin%_EXT%\icule36.dll
-..\%__SRC%\bin\icutu36.dll %_DEST%\bin%_EXT%\icutu36.dll
-..\%__SRC%\bin\icuuc36.dll %_DEST%\bin%_EXT%\icuuc36.dll
+..\%__SRC%\bin\icudt40.dll %_DEST%\bin%_EXT%\icudt40.dll
+..\%__SRC%\bin\icuin40.dll %_DEST%\bin%_EXT%\icuin40.dll
+..\%__SRC%\bin\icule40.dll %_DEST%\bin%_EXT%\icule40.dll
+..\%__SRC%\bin\icutu40.dll %_DEST%\bin%_EXT%\icutu40.dll
+..\%__SRC%\bin\icuuc40.dll %_DEST%\bin%_EXT%\icuuc40.dll
..\%__SRC%\bin\genccode %_DEST%\bin%_EXT%\genccode
..\%__SRC%\bin\genccode.exe %_DEST%\bin%_EXT%\genccode.exe