From: Jan Engelhardt Date: 2013-06-11 03:36:48.480850779 +0200 References: http://bugzilla.novell.com/824262 I've had it with ICU always changing their ABI without updating the SO numbers. They did that before, and they have done it with 51.1->51.2 again. !@# (Will icu-project ever get their act together?) Thus, we will use the full version as the SO identifier in openSUSE. --- source/common/icuplug.c | 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.c =================================================================== --- icu.orig/source/common/icuplug.c +++ icu/source/common/icuplug.c @@ -744,7 +744,7 @@ uplug_init(UErrorCode *status) { uprv_strncpy(plugin_file, plugin_dir, 2047); uprv_strncat(plugin_file, U_FILE_SEP_STRING,2047); uprv_strncat(plugin_file, "icuplugins",2047); - uprv_strncat(plugin_file, U_ICU_VERSION_SHORT ,2047); + uprv_strncat(plugin_file, U_ICU_VERSION_MAJOR_STR, 2047); uprv_strncat(plugin_file, ".txt" ,2047); #endif Index: icu/source/common/umapfile.c =================================================================== --- icu.orig/source/common/umapfile.c +++ icu/source/common/umapfile.c @@ -58,7 +58,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 @@ -411,10 +411,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 1 /**< @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 51 +#define U_ICU_VERSION_MAJOR_STR "51" /** 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 _51 +#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 "51" +#define U_ICU_VERSION_SHORT "51_2" #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 @@ -1273,7 +1273,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]); @@ -1320,7 +1320,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]);