diff --git a/baselibs.conf b/baselibs.conf index af99ccd..2b2c999 100644 --- a/baselibs.conf +++ b/baselibs.conf @@ -1,4 +1,4 @@ -libicu51 +libicu51_2 libicu-devel requires -libicu- - requires "libicu51- = " + requires "libicu51_2- = " diff --git a/icu-versioning.diff b/icu-versioning.diff new file mode 100644 index 0000000..bdbdc3c --- /dev/null +++ b/icu-versioning.diff @@ -0,0 +1,116 @@ +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/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 ++-- + 7 files changed, 8 insertions(+), 3 deletions(-) + +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]); + diff --git a/icu.changes b/icu.changes index 4cd54fd..1f4a821 100644 --- a/icu.changes +++ b/icu.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Sat Jun 15 20:05:05 UTC 2013 - jengelh@inai.de + +- Add icu-versioning.diff: + Treat each minor release as a new SONAME (bnc#824262) + ------------------------------------------------------------------- Wed Jun 5 17:19:12 UTC 2013 - jengelh@inai.de diff --git a/icu.spec b/icu.spec index 433c15d..0bebaab 100644 --- a/icu.spec +++ b/icu.spec @@ -17,7 +17,7 @@ Name: icu -%define lname libicu51 +%define lname libicu51_2 Version: 51.2 Release: 0 %define aversion 51_2 @@ -32,6 +32,7 @@ Source2: icu4c-%aversion-docs.tar.xz Source3: sanitize_docs.sh Patch1: icu-rpmlint.diff Patch2: icu-remove-datetime.patch +Patch3: icu-versioning.diff BuildRequires: fdupes BuildRequires: gcc-c++ BuildRequires: pkg-config @@ -108,7 +109,7 @@ the "%lname" package. %prep %setup -qn icu -a2 -%patch -P 1 -P 2 -p1 +%patch -P 1 -P 2 -P 3 -p1 %build cd source @@ -117,7 +118,7 @@ export CFLAGS="$CXXFLAGS" %configure --disable-static \ --enable-shared \ --disable-samples -make %{?_smp_mflags} +make %{?_smp_mflags} VERBOSE=1 %install b="%buildroot" @@ -130,6 +131,17 @@ cd source make install DESTDIR="$b"; +# +# ICU's "pkgdata" utility is really fragile, so icu-versioning.diff +# does as few as possible, but that means we need some additional +# cleanup in the spec file now. +# +for i in "$b/%_libdir"/*.so.[0-9]*; do + if [ "${i##*.so.}" != "%version" ]; then + rm -fv "$i"; + fi +done + # /usr/lib/rpm/elfdeps requires +x bit and not all had it at one point chmod a+rx "$b/%_libdir"/lib*.so.* @@ -149,7 +161,7 @@ cd source # Checks disabled in qemu because of races happening when we emulate # multi-threaded programs, and some check tests atomic instructions in # multi-threaded icu invocations -make check +make check VERBOSE=1 %endif # This should be run by whatever owns /usr/lib64/icu -