--- misc/icu/source/config/mh-bsd-gcc	2009-01-15 16:46:10.000000000 +0900
+++ misc/build/icu/source/config/mh-bsd-gcc	2011-06-14 17:12:14.000000000 +0900
@@ -18,7 +18,15 @@
 
 ## Compiler switch to embed a runtime search path
 LD_RPATH=	
-LD_RPATH_PRE=	-Wl,-rpath,
+LD_RPATH_PRE=	-Wl,-z,origin -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'"
 
 ## Compiler switch to embed a library name
 LD_SONAME = -Wl,-soname -Wl,$(notdir $(MIDDLE_SO_TARGET))

--- 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/common/unicode/pwin32.h	2008-07-01 10:41:12.000000000 +0900
+++ misc/build/icu/source/common/unicode/pwin32.h	2008-11-05 22:37:21.479250000 +0900
@@ -32,6 +32,10 @@
 #define __STDC_CONSTANT_MACROS
 #endif
 
+#if defined(__MINGW32__)
+#define U_HAVE_INTTYPES_H 1
+#endif
+
 /* _MSC_VER is used to detect the Microsoft compiler. */
 #if defined(_MSC_VER)
 #define U_INT64_IS_LONG_LONG 0
--- misc/icu/source/config/mh-darwin	Tue Jul  1 03:41:24 2008
+++ misc/build/icu/source/config/mh-darwin	Tue Jan 20 18:33:16 2009
@@ -25,7 +25,7 @@
 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))
+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=
@@ -41,10 +41,6 @@
 ## Non-shared intermediate object suffix
 STATIC_O = ao
 
-## Override Versioned target for a shared library.
-FINAL_SO_TARGET=  $(basename $(SO_TARGET)).$(SO_TARGET_VERSION).$(SO)
-MIDDLE_SO_TARGET= $(basename $(SO_TARGET)).$(SO_TARGET_VERSION_MAJOR).$(SO)
-
 ## Compilation rules
 %.$(STATIC_O): $(srcdir)/%.c
 	$(COMPILE.c) $(STATICCPPFLAGS) $(STATICCFLAGS) -o $@ $<
@@ -76,15 +72,9 @@
 
 ## Versioned libraries rules
 
-%.$(SO_TARGET_VERSION_MAJOR).$(SO): %.$(SO_TARGET_VERSION).$(SO)
+%.$(SO).$(SO_TARGET_VERSION_MAJOR): %.$(SO).$(SO_TARGET_VERSION)
 	$(RM) $@ && ln -s ${<F} $@
-%.$(SO): %.$(SO_TARGET_VERSION_MAJOR).$(SO)
-	$(RM) $@ && ln -s ${*F}.$(SO_TARGET_VERSION).$(SO) $@
-
-# tzcode option
-TZORIG_EXTRA_CFLAGS=-DSTD_INSPIRED
-
-# genren opts
-GENREN_PL_OPTS=-x Mach-O -n '-g' -p '| c++filt'
+%.$(SO): %.$(SO).$(SO_TARGET_VERSION_MAJOR)
+	$(RM) $@ && ln -s ${*F}.$(SO).$(SO_TARGET_VERSION) $@
 
 ## End Darwin-specific setup
--- 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-mingw	2008-07-01 10:41:24.000000000 +0900
+++ misc/build/icu/source/config/mh-mingw	2008-11-06 00:18:30.261250000 +0900
@@ -72,10 +72,12 @@
 # The #M# is used to delete lines for icu-config
 # Current full path directory.
 #CURR_FULL_DIR=$(shell pwd -W)#M# for MSYS
-CURR_FULL_DIR=$(subst \,/,$(shell cmd /c cd | tail --bytes=+3))#M# for Cygwin shell
+CURR_FULL_DIR=$(subst \,/,$(shell cmd /c cd))#M# for Cygwin shell
 # Current full path directory for use in source code in a -D compiler option.
 #CURR_SRCCODE_FULL_DIR=$(subst /,\\\\,$(shell pwd -W))#M# for MSYS
-CURR_SRCCODE_FULL_DIR=$(subst \,/,$(shell cmd /c cd | tail --bytes=+3))#M# for Cygwin shell
+CURR_SRCCODE_FULL_DIR=$(subst \,/,$(shell cmd /c cd))#M# for Cygwin shell
+SRCDIR_DEPEND=$(shell cd $(SRCDIR) && pwd)
+DATAFILEPATHS_DEPEND=$(foreach p,$(DATAFILEPATHS),$(shell cd $(dir $(p)) && pwd)/$(notdir $(p)))
 
 ## Compilation rules
 %.$(STATIC_O): $(srcdir)/%.c
--- misc/icu/source/config/mh-solaris	2008-07-01 03:41:26.000000000 +0200
+++ misc/build/icu/source/config/mh-solaris	2009-02-17 11:54:45.105890123 +0100
@@ -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
--- misc/icu/source/layout/ArabicShaping.cpp	2008-07-01 03:42:04.000000000 +0200
+++ misc/build/icu/source/layout/ArabicShaping.cpp	2009-02-17 12:04:34.264869737 +0100
@@ -79,7 +79,6 @@
 #define markFeatureMask 0x00040000UL
 #define mkmkFeatureMask 0x00020000UL
 
-#define NO_FEATURES   0
 #define ISOL_FEATURES (isolFeatureMask | ligaFeatureMask | msetFeatureMask | markFeatureMask | ccmpFeatureMask | rligFeatureMask | caltFeatureMask | dligFeatureMask | cswhFeatureMask | cursFeatureMask | kernFeatureMask | mkmkFeatureMask)
 
 #define SHAPE_MASK 0xF0000000UL
@@ -174,11 +173,7 @@
         LEUnicode c = chars[in];
         ShapeType t = getShapeType(c);
 
-        if (t == ST_NOSHAPE_NONE) {
-            glyphStorage.setAuxData(out, NO_FEATURES, success);
-        } else {
-            glyphStorage.setAuxData(out, ISOL_FEATURES, success);
-        }
+        glyphStorage.setAuxData(out, ISOL_FEATURES, success);
 
         if ((t & MASK_TRANSPARENT) != 0) {
             continue;
--- misc/icu/source/layoutex/ParagraphLayout.cpp	2008-07-01 03:42:02.000000000 +0200
+++ misc/build/icu/source/layoutex/ParagraphLayout.cpp	2008-12-01 19:32:58.000000000 +0100
@@ -868,7 +868,7 @@
 
     return nullLanguageCode;
 }
-#elif
+#else
 
 // TODO - dummy implementation for right now...
 le_int32 ParagraphLayout::getLanguageCode(const Locale *locale)
--- misc/icu/source/tools/pkgdata/cmnmode.c	2008-07-01 10:41:20.000000000 +0900
+++ misc/build/icu/source/tools/pkgdata/cmnmode.c	2008-11-07 00:03:32.393500000 +0900
@@ -69,7 +69,11 @@
   sprintf(tmp, "# List file for gencmn:\n"
           "CMNLIST=%s%s%s_common.lst\n\n",
           o->tmpDir,
+#ifdef __MINGW32__
+          U_FILE_ALT_SEP_STRING,
+#else
           U_FILE_SEP_STRING,
+#endif
           o->shortName);
   T_FileStream_writeLine(makefile, tmp);
 
--- misc/icu/source/tools/pkgdata/dllmode.c	2008-07-01 10:41:20.000000000 +0900
+++ misc/build/icu/source/tools/pkgdata/dllmode.c	2008-11-07 06:08:36.016750000 +0900
@@ -139,7 +139,11 @@
     sprintf(tmp, "# List file for gencmn:\n"
                  "CMNLIST=%s%s$(NAME)_dll.lst\n\n",
                  o->tmpDir,
+#ifdef __MINGW32__
+                 U_FILE_ALT_SEP_STRING);
+#else
                  U_FILE_SEP_STRING);
+#endif
     T_FileStream_writeLine(makefile, tmp);
     
     if(o->hadStdin == FALSE) { /* shortcut */
--- misc/icu/source/tools/pkgdata/make.c	2008-07-01 10:41:20.000000000 +0900
+++ misc/build/icu/source/tools/pkgdata/make.c	2008-11-06 23:23:04.096625000 +0900
@@ -313,8 +313,13 @@
       uprv_strcpy(cfile+uprv_strlen(cfile)-uprv_strlen(objSuffix), ".c" ); /* replace .o with .c */
       
       /* Make up parents.. */
+#ifdef __MINGW32__
+      parentPath = uprv_malloc(1+uprv_strlen(baseName) + uprv_strlen("$(SRCDIR_DEPEND)/"));
+      sprintf(parentPath, "$(SRCDIR_DEPEND)/%s", baseName);
+#else
       parentPath = uprv_malloc(1+uprv_strlen(baseName) + uprv_strlen("$(SRCDIR)/"));
       sprintf(parentPath, "$(SRCDIR)/%s", baseName);
+#endif
       parents = pkg_appendToList(parents, NULL, parentPath);
       
       /* make up commands.. */
@@ -379,7 +384,11 @@
     T_FileStream_writeLine(f, "\n");
     T_FileStream_writeLine(f, "BASE_OBJECTS=$(NAME)_dat.o\n");
     T_FileStream_writeLine(f, "\n");
+#ifdef __MINGW32__
+    T_FileStream_writeLine(f, "$(TEMP_DIR)/$(NAME).dat: $(CMNLIST) $(DATAFILEPATHS_DEPEND)\n");
+#else
     T_FileStream_writeLine(f, "$(TEMP_DIR)/$(NAME).dat: $(CMNLIST) $(DATAFILEPATHS)\n");
+#endif
     T_FileStream_writeLine(f, "\t$(INVOKE) $(ICUPKG) -t$(ICUDATA_CHAR) -c -s $(SRCDIR) -a $(CMNLIST) new $(TEMP_DIR)/$(CNAME).dat\n");
     T_FileStream_writeLine(f, "\n");
     T_FileStream_writeLine(f, "$(TEMP_DIR)/$(NAME)_dat.o : $(TEMP_DIR)/$(NAME).dat\n");
--- misc/icu/source/tools/pkgdata/pkgdata.c	2008-07-01 10:41:20.000000000 +0900
+++ misc/build/icu/source/tools/pkgdata/pkgdata.c	2008-11-07 05:59:27.110500000 +0900
@@ -594,7 +594,11 @@
                     exit(U_ILLEGAL_ARGUMENT_ERROR);
                 }		
                 uprv_strcpy(tmp, o->srcDir);
+#ifdef __MINGW32__
+                uprv_strcat(tmp, o->srcDir[uprv_strlen(o->srcDir)-1]==U_FILE_SEP_CHAR?"":U_FILE_ALT_SEP_STRING);
+#else
                 uprv_strcat(tmp, o->srcDir[uprv_strlen(o->srcDir)-1]==U_FILE_SEP_CHAR?"":U_FILE_SEP_STRING);
+#endif
                 uprv_strcat(tmp, s);
                 o->filePaths = pkg_appendToList(o->filePaths, &tail2, uprv_strdup(tmp));
                 linePtr = lineNext;
--- misc/icu/source/tools/pkgdata/sttcmode.c	2008-07-01 10:41:20.000000000 +0900
+++ misc/build/icu/source/tools/pkgdata/sttcmode.c	2008-11-07 00:30:05.690375000 +0900
@@ -172,7 +172,11 @@
     sprintf(tmp, "# List file for gencmn:\n"
         "CMNLIST=%s%s$(NAME)_static.lst\n\n",
         o->tmpDir,
+#ifdef __MINGW32__
+        U_FILE_ALT_SEP_STRING);
+#else
         U_FILE_SEP_STRING);
+#endif
     T_FileStream_writeLine(makefile, tmp);
 
     if(o->hadStdin == FALSE) { /* shortcut */
--- misc/icu/source/common/uloc.c	2009-01-15 08:45:56.000000000 +0100
+++ misc/build/icu/source/common/uloc.c	2009-12-14 10:51:38.000000000 +0100
@@ -1736,7 +1736,7 @@
                 int32_t variantLen = _deleteVariant(variant, uprv_min(variantSize, (nameCapacity-len)), variantToCompare, n);
                 len -= variantLen;
                 if (variantLen > 0) {
-                    if (name[len-1] == '_') { /* delete trailing '_' */
+                    if (len > 0 && name[len-1] == '_') { /* delete trailing '_' */
                         --len;
                     }
                     addKeyword = VARIANT_MAP[j].keyword;
@@ -1744,7 +1744,7 @@
                     break;
                 }
             }
-            if (name[len-1] == '_') { /* delete trailing '_' */
+            if (len > 0 && name[len-1] == '_') { /* delete trailing '_' */
                 --len;
             }
         }
