From a856400fb871835a732b6ed7766c259c6aa6b5b9 Mon Sep 17 00:00:00 2001 From: Takuya Wakazono Date: Wed, 23 Oct 2024 02:23:48 +0900 Subject: [PATCH] RHEL-24851: Fix soname of the 64-bit version libraries Build lib*64.so libraries with correct soname to avoid creating mangled symlinks (e.g., libblas.so.3 -> libblas64.so.3.9.0). This issue arises because rpmbuild automatically generates a symbolic link baed on the soname. Signed-off-by: Takuya Wakazono --- Makefile.blas | 4 ++++ Makefile.cblas | 5 ++++- Makefile.lapack | 4 ++++ lapack.spec | 36 ++++++++++++++++++++---------------- 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/Makefile.blas b/Makefile.blas index 5cfb092..806d5e5 100644 --- a/Makefile.blas +++ b/Makefile.blas @@ -62,12 +62,14 @@ ifeq "$(SYMBOLSUFFIX)" "" else ar ruv libblas$(SYMBOLSUFFIX).a $(OBJS) ranlib libblas$(SYMBOLSUFFIX).a +ifndef RENAMEONLY for i in `nm libblas$(SYMBOLSUFFIX).a |grep " T " | awk '{print $$3}'`; do echo "$$i" "64_$$i"; done > blas-static-prefix.def.dirty sort -n blas-static-prefix.def.dirty | uniq > blas-static-prefix.def $(OBJCOPY) --redefine-syms blas-static-prefix.def libblas$(SYMBOLSUFFIX).a libblas$(SYMBOLSUFFIX).a.fixed rm -rf libblas$(SYMBOLSUFFIX).a mv libblas$(SYMBOLSUFFIX).a.fixed libblas$(SYMBOLSUFFIX).a endif +endif shared: $(OBJS) ifeq "$(SYMBOLSUFFIX)" "" @@ -75,6 +77,7 @@ ifeq "$(SYMBOLSUFFIX)" "" cc $(CFLAGS) -shared -Wl,-soname,libblas.so.@SHORTVER@ -o libblas.so.@LONGVER@ $(OBJS) $(LDFLAGS) -lm -lgfortran -lc else cc $(CFLAGS) -shared -Wl,-soname,libblas$(SYMBOLSUFFIX).so.@SHORTVER@ -o libblas$(SYMBOLSUFFIX).so.@LONGVER@ $(OBJS) $(LDFLAGS) -lm -lgfortran -lc +ifndef RENAMEONLY # generate a list of all symbols in shared library and rename with SYMBOLSUFFIX for i in `readelf -Ws libblas$(SYMBOLSUFFIX).so.@LONGVER@ | awk '{print $$8}' | grep -v GLIBC |grep -v GFORTRAN |grep -v "Name" `; do echo "$$i" "64_$$i"; done > blas-prefix.def.dirty sort -n blas-prefix.def.dirty | uniq > blas-prefix.def @@ -82,3 +85,4 @@ else rm -rf libblas$(SYMBOLSUFFIX).so.@LONGVER@ mv libblas$(SYMBOLSUFFIX).so.@LONGVER@.fixed libblas$(SYMBOLSUFFIX).so.@LONGVER@ endif +endif diff --git a/Makefile.cblas b/Makefile.cblas index cb98d2e..f96814a 100644 --- a/Makefile.cblas +++ b/Makefile.cblas @@ -76,12 +76,14 @@ ifeq "$(SYMBOLSUFFIX)" "" else ar ruv libcblas$(SYMBOLSUFFIX).a $(OBJS) ranlib libcblas$(SYMBOLSUFFIX).a +ifndef RENAMEONLY for i in `nm libcblas$(SYMBOLSUFFIX).a |grep " T " | awk '{print $$3}'`; do echo "$$i" "64_$$i"; done > cblas-static-prefix.def.dirty sort -n cblas-static-prefix.def.dirty | uniq > cblas-static-prefix.def $(OBJCOPY) --redefine-syms cblas-static-prefix.def libcblas$(SYMBOLSUFFIX).a libcblas$(SYMBOLSUFFIX).a.fixed rm -rf libcblas$(SYMBOLSUFFIX).a mv libcblas$(SYMBOLSUFFIX).a.fixed libcblas$(SYMBOLSUFFIX).a endif +endif shared: $(OBJS) ifeq "$(SYMBOLSUFFIX)" "" @@ -89,6 +91,7 @@ ifeq "$(SYMBOLSUFFIX)" "" cc $(CFLAGS) -shared -Wl,-soname,libcblas.so.@SHORTVER@ -o libcblas.so.@LONGVER@ $(OBJS) $(LDFLAGS) -L../../ -lblas -lm -lgfortran -lc else cc $(CFLAGS) -shared -Wl,-soname,libcblas$(SYMBOLSUFFIX).so.@SHORTVER@ -o libcblas$(SYMBOLSUFFIX).so.@LONGVER@ $(OBJS) $(LDFLAGS) -L../.. -lblas -lm -lgfortran -lc +ifndef RENAMEONLY # generate a list of all symbols in shared library and rename with SYMBOLSUFFIX for i in `readelf -Ws libcblas$(SYMBOLSUFFIX).so.@LONGVER@ | awk '{print $$8}' | grep -v GLIBC |grep -v GFORTRAN |grep -v "Name" `; do echo "$$i" "64_$$i"; done > cblas-prefix.def.dirty sort -n cblas-prefix.def.dirty | uniq > cblas-prefix.def @@ -96,4 +99,4 @@ else rm -rf libcblas$(SYMBOLSUFFIX).so.@LONGVER@ mv libcblas$(SYMBOLSUFFIX).so.@LONGVER@.fixed libcblas$(SYMBOLSUFFIX).so.@LONGVER@ endif - +endif diff --git a/Makefile.lapack b/Makefile.lapack index 6b4328d..29be0b1 100644 --- a/Makefile.lapack +++ b/Makefile.lapack @@ -456,12 +456,14 @@ ifeq "$(SYMBOLSUFFIX)" "" else ar ruv liblapack$(SYMBOLSUFFIX).a $(ALLOBJ) $(ALLXOBJ) ranlib liblapack$(SYMBOLSUFFIX).a +ifndef RENAMEONLY for i in `nm liblapack$(SYMBOLSUFFIX).a |grep " T " | awk '{print $$3}'`; do echo "$$i" "64_$$i"; done > lapack-static-prefix.def.dirty sort -n lapack-static-prefix.def.dirty | uniq > lapack-static-prefix.def $(OBJCOPY) --redefine-syms lapack-static-prefix.def liblapack$(SYMBOLSUFFIX).a liblapack$(SYMBOLSUFFIX).a.fixed rm -rf liblapack$(SYMBOLSUFFIX).a mv liblapack$(SYMBOLSUFFIX).a.fixed liblapack$(SYMBOLSUFFIX).a endif +endif shared: $(ALLOBJ) $(ALLXOBJ) ifeq "$(SYMBOLSUFFIX)" "" @@ -469,6 +471,7 @@ ifeq "$(SYMBOLSUFFIX)" "" cc $(CFLAGS) -shared -Wl,-soname,liblapack.so.@SHORTVER@ -o liblapack.so.@LONGVER@ $(ALLOBJ) $(ALLXOBJ) $(LDFLAGS) -L.. -lblas -lm -lgfortran -lc else cc $(CFLAGS) -shared -Wl,-soname,liblapack$(SYMBOLSUFFIX).so.@SHORTVER@ -o liblapack$(SYMBOLSUFFIX).so.@LONGVER@ $(ALLOBJ) $(ALLXOBJ) $(LDFLAGS) -L.. -lblas -lm -lgfortran -lc +ifndef RENAMEONLY # generate a list of all symbols in shared library and rename with SYMBOLSUFFIX for i in `readelf -Ws liblapack$(SYMBOLSUFFIX).so.@LONGVER@ | awk '{print $$8}' | grep -v GLIBC |grep -v GFORTRAN |grep -v "Name" `; do echo "$$i" "64_$$i"; done > lapack-prefix.def.dirty sort -n lapack-prefix.def.dirty | uniq > lapack-prefix.def @@ -476,3 +479,4 @@ else rm -rf liblapack$(SYMBOLSUFFIX).so.@LONGVER@ mv liblapack$(SYMBOLSUFFIX).so.@LONGVER@.fixed liblapack$(SYMBOLSUFFIX).so.@LONGVER@ endif +endif diff --git a/lapack.spec b/lapack.spec index 4b388d3..80ce7b2 100644 --- a/lapack.spec +++ b/lapack.spec @@ -10,8 +10,8 @@ Summary: Numerical linear algebra package libraries Name: lapack Version: %{mediumver}.0 -Release: 10%{?dist} -License: BSD +Release: 11%{?dist} +License: BSD-3-Clause-Open-MPI URL: http://www.netlib.org/lapack/ Source0: https://github.com/Reference-LAPACK/lapack/archive/v%{version}.tar.gz Source1: http://www.netlib.org/lapack/manpages.tgz @@ -181,12 +181,12 @@ cp libblas.so.%{version} ${RPM_BUILD_DIR}/%{name}-%{version}/ %if 0%{?arch64} make clean FFLAGS="$RPM_OPT_O_FLAGS -fdefault-integer-8" make dcabs1.o -FFLAGS="$RPM_OPT_FLAGS -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS" make static -cp libblas.a ${RPM_BUILD_DIR}/%{name}-%{version}/libblas64.a +SYMBOLSUFFIX="64" RENAMEONLY=1 FFLAGS="$RPM_OPT_FLAGS -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS" make static +cp libblas64.a ${RPM_BUILD_DIR}/%{name}-%{version}/libblas64.a make clean FFLAGS="$RPM_OPT_O_FLAGS -fPIC -fdefault-integer-8" make dcabs1.o -FFLAGS="$RPM_OPT_FLAGS -fPIC -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS -fPIC" LDFLAGS="%{build_ldflags}" make shared -cp libblas.so.%{version} ${RPM_BUILD_DIR}/%{name}-%{version}/libblas64.so.%{version} +SYMBOLSUFFIX="64" RENAMEONLY=1 FFLAGS="$RPM_OPT_FLAGS -fPIC -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS -fPIC" LDFLAGS="%{build_ldflags}" make shared +cp libblas64.so.%{version} ${RPM_BUILD_DIR}/%{name}-%{version}/libblas64.so.%{version} make clean FFLAGS="$RPM_OPT_O_FLAGS -fdefault-integer-8" make dcabs1.o SYMBOLSUFFIX="64_" FFLAGS="$RPM_OPT_FLAGS -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS" make static @@ -214,11 +214,11 @@ FFLAGS="$RPM_OPT_FLAGS -fPIC" CFLAGS="$RPM_OPT_FLAGS -fPIC -I../include" LDFLAGS cp libcblas.so.%{version} ${RPM_BUILD_DIR}/%{name}-%{version}/ %if 0%{?arch64} make clean -FFLAGS="$RPM_OPT_FLAGS -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS -I../include" make static -cp libcblas.a ${RPM_BUILD_DIR}/%{name}-%{version}/libcblas64.a +SYMBOLSUFFIX="64" RENAMEONLY=1 FFLAGS="$RPM_OPT_FLAGS -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS -I../include" make static +cp libcblas64.a ${RPM_BUILD_DIR}/%{name}-%{version}/libcblas64.a make clean -FFLAGS="$RPM_OPT_FLAGS -fPIC -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS -fPIC -I../include" LDFLAGS="%{build_ldflags}" make shared -cp libcblas.so.%{version} ${RPM_BUILD_DIR}/%{name}-%{version}/libcblas64.so.%{version} +SYMBOLSUFFIX="64" RENAMEONLY=1 FFLAGS="$RPM_OPT_FLAGS -fPIC -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS -fPIC -I../include" LDFLAGS="%{build_ldflags}" make shared +cp libcblas64.so.%{version} ${RPM_BUILD_DIR}/%{name}-%{version}/libcblas64.so.%{version} make clean SYMBOLSUFFIX="64_" FFLAGS="$RPM_OPT_FLAGS -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS -I../include" make static cp libcblas64_.a ${RPM_BUILD_DIR}/%{name}-%{version}/libcblas64_.a @@ -268,8 +268,8 @@ popd # Build the static lapack library pushd SRC make clean -make FFLAGS="$RPM_OPT_FLAGS -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS" static -cp liblapack.a ${RPM_BUILD_DIR}/%{name}-%{version}/liblapack64.a +make SYMBOLSUFFIX="64" RENAMEONLY=1 FFLAGS="$RPM_OPT_FLAGS -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS" static +cp liblapack64.a ${RPM_BUILD_DIR}/%{name}-%{version}/liblapack64.a popd # Build the static with pic dlamch, dsecnd, lsame, second, slamch bits (64bit INTEGER) @@ -281,8 +281,8 @@ popd # Build the static with pic lapack library (64bit INTEGER) pushd SRC make clean -make FFLAGS="$RPM_OPT_FLAGS -fPIC -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS -fPIC" static -cp liblapack.a ${RPM_BUILD_DIR}/%{name}-%{version}/liblapack_pic64.a +make SYMBOLSUFFIX="64" RENAMEONLY=1 FFLAGS="$RPM_OPT_FLAGS -fPIC -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS -fPIC" static +cp liblapack64.a ${RPM_BUILD_DIR}/%{name}-%{version}/liblapack_pic64.a popd # Build the static dlamch, dsecnd, lsame, second, slamch bits @@ -335,8 +335,8 @@ popd # Build the shared lapack library pushd SRC make clean -make FFLAGS="$RPM_OPT_FLAGS -fPIC -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS -fPIC -fdefault-integer-8" LDFLAGS="%{build_ldflags}" shared -cp liblapack.so.%{version} ${RPM_BUILD_DIR}/%{name}-%{version}/liblapack64.so.%{version} +make SYMBOLSUFFIX="64" RENAMEONLY=1 FFLAGS="$RPM_OPT_FLAGS -fPIC -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS -fPIC -fdefault-integer-8" LDFLAGS="%{build_ldflags}" shared +cp liblapack64.so.%{version} ${RPM_BUILD_DIR}/%{name}-%{version}/liblapack64.so.%{version} popd # Build the shared dlamch, dsecnd, lsame, second, slamch bits @@ -625,6 +625,10 @@ sed -i 's|Requires.private: blas|Requires.private: blas64_|g' %{buildroot}%{_lib %endif %changelog +* Wed Oct 23 2024 Takuya Wakazono - 3.9.0-11 +- Fix soname of the 64-bit version libraries + Resolves: RHEL-24851 + * Fri Aug 11 2023 Jakub Martisko - 3.9.0-10 - Add explicit requires to the devel subpackages Related: rhbz#2229142