Jan Engelhardt
cfcfa41724
OBS-URL: https://build.opensuse.org/package/show/X11:common:Factory/icu?expand=0&rev=68
228 lines
9.5 KiB
Diff
228 lines
9.5 KiB
Diff
From: Jan Engelhardt <jengelh@inai.de>
|
|
Date: 2013-06-11 03:36:48.480850779 +0200
|
|
References: http://bugzilla.novell.com/824262
|
|
Directions: drop patch if unable to forward-port
|
|
|
|
ICU sometimes changing their ABI without updating the SO numbers.
|
|
They did that before, and they did it again with 51.1->51.2. In part,
|
|
this is owed to how C++ is compiled on the contemporary
|
|
implementations.
|
|
|
|
Thus, we will use the full version as the SO identifier in openSUSE.
|
|
|
|
Details:
|
|
|
|
U_ICU_VERSION_SHORT was (example) "51" before when there was a
|
|
libicui18n.so.51. Now, since there is a libicui18n.so.51.2, we need to
|
|
change U_ICU_VERSION_SHORT. But the define's documentation says
|
|
"without dots", and I do not know how much downstream code depends on
|
|
the non-dot feature, if at all. Anyhow, to bypass this question to
|
|
which we have no definite answer, U_ICU_VERSION_SHORT is instead simply
|
|
defined to "51_2" and we "fix" (read like: hack) it with symlinks.
|
|
|
|
However, the ICU source also uses U_ICU_VERSION_SHORT to construct the
|
|
path to its data files. However, as there is no "icudt51_2l.dat", but
|
|
only a "icudt51l.dat", U_ICU_VERSION_MAJOR_STR is introduced for
|
|
ICU-internal use, so that I do not have to edit more dirty Makefiles to
|
|
produce a "icudt51_2l.dat" instead. In fact, placing the version number
|
|
in "icudt51l" seems redundant, since that file is in a version-specific
|
|
directory anyway (/usr/share/icu/51.2/) — another point where ICU
|
|
development seems to not pay enough attention.
|
|
|
|
---
|
|
source/common/icuplug.cpp | 2 +-
|
|
source/common/umapfile.c | 6 +++---
|
|
source/common/unicode/utypes.h | 4 ++--
|
|
source/common/unicode/uvernum.h | 7 +++++--
|
|
source/config/mh-linux | 2 +-
|
|
source/config/pkgdataMakefile.in | 1 +
|
|
source/data/pkgdataMakefile.in | 1 +
|
|
source/extra/uconv/pkgdataMakefile.in | 1 +
|
|
source/icudefs.mk.in | 1 +
|
|
source/test/testdata/pkgdataMakefile.in | 1 +
|
|
source/tools/pkgdata/pkgdata.cpp | 4 ++--
|
|
11 files changed, 19 insertions(+), 11 deletions(-)
|
|
|
|
Index: icu/source/common/icuplug.cpp
|
|
===================================================================
|
|
--- icu.orig/source/common/icuplug.cpp
|
|
+++ icu/source/common/icuplug.cpp
|
|
@@ -758,7 +758,7 @@ uplug_init(UErrorCode *status) {
|
|
pluginFile.append(plugin_dir, *status);
|
|
pluginFile.append(U_FILE_SEP_STRING, -1, *status);
|
|
pluginFile.append("icuplugins", -1, *status);
|
|
- pluginFile.append(U_ICU_VERSION_SHORT, -1, *status);
|
|
+ pluginFile.append(U_ICU_VERSION_MAJOR_STR, -1, *status);
|
|
pluginFile.append(".txt", -1, *status);
|
|
#endif
|
|
|
|
Index: icu/source/common/umapfile.c
|
|
===================================================================
|
|
--- icu.orig/source/common/umapfile.c
|
|
+++ icu/source/common/umapfile.c
|
|
@@ -61,7 +61,7 @@
|
|
# define LIB_PREFIX "lib"
|
|
# define LIB_SUFFIX ".dll"
|
|
/* This is inconvienient until we figure out what to do with U_ICUDATA_NAME in utypes.h */
|
|
-# define U_ICUDATA_ENTRY_NAME "icudt" U_ICU_VERSION_SHORT U_LIB_SUFFIX_C_NAME_STRING "_dat"
|
|
+# define U_ICUDATA_ENTRY_NAME "icudt" U_ICU_VERSION_MAJOR_STR U_LIB_SUFFIX_C_NAME_STRING "_dat"
|
|
# endif
|
|
#elif MAP_IMPLEMENTATION==MAP_STDIO
|
|
# include <stdio.h>
|
|
@@ -414,10 +414,10 @@
|
|
/* BUT FOR BATCH MODE IT IS AN EXCEPTION BECAUSE */
|
|
/* THE FIRST THREE LETTERS ARE PREASSIGNED TO THE */
|
|
/* PROJECT!!!!! */
|
|
- uprv_strcpy(pathBuffer, "IXMI" U_ICU_VERSION_SHORT "DA");
|
|
+ uprv_strcpy(pathBuffer, "IXMI" U_ICU_VERSION_MAJOR_STR "DA");
|
|
# else
|
|
/* set up the library name */
|
|
- uprv_strcpy(basename, LIB_PREFIX U_LIBICUDATA_NAME U_ICU_VERSION_SHORT LIB_SUFFIX);
|
|
+ uprv_strcpy(basename, LIB_PREFIX U_LIBICUDATA_NAME U_ICU_VERSION_MAJOR_STR LIB_SUFFIX);
|
|
# endif
|
|
|
|
# ifdef UDATA_DEBUG
|
|
Index: icu/source/common/unicode/utypes.h
|
|
===================================================================
|
|
--- icu.orig/source/common/unicode/utypes.h
|
|
+++ icu/source/common/unicode/utypes.h
|
|
@@ -134,9 +134,9 @@
|
|
* ICU 1.8.x on EBCDIC, etc..
|
|
* @stable ICU 2.0
|
|
*/
|
|
-#define U_ICUDATA_NAME "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER
|
|
+#define U_ICUDATA_NAME "icudt" U_ICU_VERSION_MAJOR_STR U_ICUDATA_TYPE_LETTER
|
|
#ifndef U_HIDE_INTERNAL_API
|
|
-#define U_USRDATA_NAME "usrdt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER /**< @internal */
|
|
+#define U_USRDATA_NAME "usrdt" U_ICU_VERSION_MAJOR_STR U_ICUDATA_TYPE_LETTER /**< @internal */
|
|
#define U_USE_USRDATA 0 /**< @internal */
|
|
#endif /* U_HIDE_INTERNAL_API */
|
|
|
|
Index: icu/source/common/unicode/uvernum.h
|
|
===================================================================
|
|
--- icu.orig/source/common/unicode/uvernum.h
|
|
+++ icu/source/common/unicode/uvernum.h
|
|
@@ -58,6 +58,7 @@
|
|
* @stable ICU 2.4
|
|
*/
|
|
#define U_ICU_VERSION_MAJOR_NUM 57
|
|
+#define U_ICU_VERSION_MAJOR_STR "57"
|
|
|
|
/** The current ICU minor version as an integer.
|
|
* This value will change in the subsequent releases of ICU
|
|
@@ -83,7 +84,9 @@
|
|
* This value will change in the subsequent releases of ICU
|
|
* @stable ICU 2.6
|
|
*/
|
|
-#define U_ICU_VERSION_SUFFIX _57
|
|
+#define ___icu_version_expand(major, minor) _ ## major ## _ ## minor
|
|
+#define ___icu_version_glue(major, minor) ___icu_version_expand(major, minor)
|
|
+#define U_ICU_VERSION_SUFFIX ___icu_version_glue(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM)
|
|
|
|
/**
|
|
* \def U_DEF2_ICU_ENTRY_POINT_RENAME
|
|
@@ -124,7 +127,7 @@
|
|
* This value will change in the subsequent releases of ICU
|
|
* @stable ICU 2.6
|
|
*/
|
|
-#define U_ICU_VERSION_SHORT "57"
|
|
+#define U_ICU_VERSION_SHORT "57_1"
|
|
|
|
#ifndef U_HIDE_INTERNAL_API
|
|
/** Data version in ICU4C.
|
|
Index: icu/source/config/mh-linux
|
|
===================================================================
|
|
--- icu.orig/source/config/mh-linux
|
|
+++ icu/source/config/mh-linux
|
|
@@ -25,7 +25,7 @@ LDFLAGSICUDT=-nodefaultlibs -nostdlib
|
|
|
|
## Compiler switch to embed a library name
|
|
# The initial tab in the next line is to prevent icu-config from reading it.
|
|
- LD_SONAME = -Wl,-soname -Wl,$(notdir $(MIDDLE_SO_TARGET))
|
|
+ LD_SONAME = -Wl,-soname -Wl,$(notdir $(FULL_SO_TARGET))
|
|
#SH# # We can't depend on MIDDLE_SO_TARGET being set.
|
|
#SH# LD_SONAME=
|
|
|
|
Index: icu/source/config/pkgdataMakefile.in
|
|
===================================================================
|
|
--- icu.orig/source/config/pkgdataMakefile.in
|
|
+++ icu/source/config/pkgdataMakefile.in
|
|
@@ -14,6 +14,7 @@ include $(top_builddir)/icudefs.mk
|
|
|
|
OUTPUTFILE=pkgdata.inc
|
|
MIDDLE_SO_TARGET=
|
|
+FULL_SO_TARGET=
|
|
|
|
all : clean
|
|
@echo GENCCODE_ASSEMBLY_TYPE=$(GENCCODE_ASSEMBLY) >> $(OUTPUTFILE)
|
|
Index: icu/source/data/pkgdataMakefile.in
|
|
===================================================================
|
|
--- icu.orig/source/data/pkgdataMakefile.in
|
|
+++ icu/source/data/pkgdataMakefile.in
|
|
@@ -14,6 +14,7 @@ include $(top_builddir)/icudefs.mk
|
|
|
|
OUTPUTFILE=icupkg.inc
|
|
MIDDLE_SO_TARGET=
|
|
+FULL_SO_TARGET=
|
|
|
|
all : clean
|
|
@echo GENCCODE_ASSEMBLY_TYPE=$(GENCCODE_ASSEMBLY) >> $(OUTPUTFILE)
|
|
Index: icu/source/extra/uconv/pkgdataMakefile.in
|
|
===================================================================
|
|
--- icu.orig/source/extra/uconv/pkgdataMakefile.in
|
|
+++ icu/source/extra/uconv/pkgdataMakefile.in
|
|
@@ -13,6 +13,7 @@ top_builddir = ../..
|
|
include $(top_builddir)/icudefs.mk
|
|
|
|
MIDDLE_SO_TARGET=
|
|
+FULL_SO_TARGET=
|
|
|
|
OUTPUTFILE=pkgdata.inc
|
|
|
|
Index: icu/source/icudefs.mk.in
|
|
===================================================================
|
|
--- icu.orig/source/icudefs.mk.in
|
|
+++ icu/source/icudefs.mk.in
|
|
@@ -196,6 +196,7 @@ LDLIBRARYPATH_ENVVAR = LD_LIBRARY_PATH
|
|
|
|
# Versioned target for a shared library.
|
|
FINAL_SO_TARGET = $(SO_TARGET).$(SO_TARGET_VERSION)
|
|
+FULL_SO_TARGET = $(SO_TARGET).$(SO_TARGET_VERSION)
|
|
MIDDLE_SO_TARGET = $(SO_TARGET).$(SO_TARGET_VERSION_MAJOR)
|
|
SHARED_OBJECT = $(FINAL_SO_TARGET)
|
|
|
|
Index: icu/source/test/testdata/pkgdataMakefile.in
|
|
===================================================================
|
|
--- icu.orig/source/test/testdata/pkgdataMakefile.in
|
|
+++ icu/source/test/testdata/pkgdataMakefile.in
|
|
@@ -13,6 +13,7 @@ top_builddir = ../..
|
|
include $(top_builddir)/icudefs.mk
|
|
|
|
MIDDLE_SO_TARGET=
|
|
+FULL_SO_TARGET=
|
|
|
|
OUTPUTFILE=pkgdata.inc
|
|
|
|
Index: icu/source/tools/pkgdata/pkgdata.cpp
|
|
===================================================================
|
|
--- icu.orig/source/tools/pkgdata/pkgdata.cpp
|
|
+++ icu/source/tools/pkgdata/pkgdata.cpp
|
|
@@ -1370,7 +1370,7 @@ static int32_t pkg_generateLibraryFile(c
|
|
length = uprv_strlen(pkgDataFlags[GENLIB]) + uprv_strlen(pkgDataFlags[LDICUDTFLAGS]) +
|
|
((uprv_strlen(targetDir) + uprv_strlen(libFileNames[LIB_FILE_VERSION_TMP])) * 2) +
|
|
uprv_strlen(objectFile) + uprv_strlen(pkgDataFlags[LD_SONAME]) +
|
|
- uprv_strlen(pkgDataFlags[LD_SONAME][0] == 0 ? "" : libFileNames[LIB_FILE_VERSION_MAJOR]) +
|
|
+ uprv_strlen(pkgDataFlags[LD_SONAME][0] == 0 ? "" : libFileNames[LIB_FILE_VERSION]) +
|
|
uprv_strlen(pkgDataFlags[RPATH_FLAGS]) + uprv_strlen(pkgDataFlags[BIR_FLAGS]) + BUFFER_PADDING_SIZE;
|
|
#if U_PLATFORM == U_PF_CYGWIN
|
|
length += uprv_strlen(targetDir) + uprv_strlen(libFileNames[LIB_FILE_CYGWIN_VERSION]);
|
|
@@ -1417,7 +1417,7 @@ static int32_t pkg_generateLibraryFile(c
|
|
#endif
|
|
objectFile,
|
|
pkgDataFlags[LD_SONAME],
|
|
- pkgDataFlags[LD_SONAME][0] == 0 ? "" : libFileNames[LIB_FILE_VERSION_MAJOR],
|
|
+ pkgDataFlags[LD_SONAME][0] == 0 ? "" : libFileNames[LIB_FILE_VERSION],
|
|
pkgDataFlags[RPATH_FLAGS],
|
|
pkgDataFlags[BIR_FLAGS]);
|
|
|