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 <takuya.wakazono@miraclelinux.com>
This commit is contained in:
Takuya Wakazono 2024-10-23 02:23:48 +09:00 committed by Takuya Wakazono
parent 7a9d9ef6f8
commit a856400fb8
4 changed files with 32 additions and 17 deletions

View File

@ -62,12 +62,14 @@ ifeq "$(SYMBOLSUFFIX)" ""
else else
ar ruv libblas$(SYMBOLSUFFIX).a $(OBJS) ar ruv libblas$(SYMBOLSUFFIX).a $(OBJS)
ranlib libblas$(SYMBOLSUFFIX).a 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 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 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 $(OBJCOPY) --redefine-syms blas-static-prefix.def libblas$(SYMBOLSUFFIX).a libblas$(SYMBOLSUFFIX).a.fixed
rm -rf libblas$(SYMBOLSUFFIX).a rm -rf libblas$(SYMBOLSUFFIX).a
mv libblas$(SYMBOLSUFFIX).a.fixed libblas$(SYMBOLSUFFIX).a mv libblas$(SYMBOLSUFFIX).a.fixed libblas$(SYMBOLSUFFIX).a
endif endif
endif
shared: $(OBJS) shared: $(OBJS)
ifeq "$(SYMBOLSUFFIX)" "" 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 cc $(CFLAGS) -shared -Wl,-soname,libblas.so.@SHORTVER@ -o libblas.so.@LONGVER@ $(OBJS) $(LDFLAGS) -lm -lgfortran -lc
else else
cc $(CFLAGS) -shared -Wl,-soname,libblas$(SYMBOLSUFFIX).so.@SHORTVER@ -o libblas$(SYMBOLSUFFIX).so.@LONGVER@ $(OBJS) $(LDFLAGS) -lm -lgfortran -lc 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 # 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 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 sort -n blas-prefix.def.dirty | uniq > blas-prefix.def
@ -82,3 +85,4 @@ else
rm -rf libblas$(SYMBOLSUFFIX).so.@LONGVER@ rm -rf libblas$(SYMBOLSUFFIX).so.@LONGVER@
mv libblas$(SYMBOLSUFFIX).so.@LONGVER@.fixed libblas$(SYMBOLSUFFIX).so.@LONGVER@ mv libblas$(SYMBOLSUFFIX).so.@LONGVER@.fixed libblas$(SYMBOLSUFFIX).so.@LONGVER@
endif endif
endif

View File

@ -76,12 +76,14 @@ ifeq "$(SYMBOLSUFFIX)" ""
else else
ar ruv libcblas$(SYMBOLSUFFIX).a $(OBJS) ar ruv libcblas$(SYMBOLSUFFIX).a $(OBJS)
ranlib libcblas$(SYMBOLSUFFIX).a 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 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 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 $(OBJCOPY) --redefine-syms cblas-static-prefix.def libcblas$(SYMBOLSUFFIX).a libcblas$(SYMBOLSUFFIX).a.fixed
rm -rf libcblas$(SYMBOLSUFFIX).a rm -rf libcblas$(SYMBOLSUFFIX).a
mv libcblas$(SYMBOLSUFFIX).a.fixed libcblas$(SYMBOLSUFFIX).a mv libcblas$(SYMBOLSUFFIX).a.fixed libcblas$(SYMBOLSUFFIX).a
endif endif
endif
shared: $(OBJS) shared: $(OBJS)
ifeq "$(SYMBOLSUFFIX)" "" 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 cc $(CFLAGS) -shared -Wl,-soname,libcblas.so.@SHORTVER@ -o libcblas.so.@LONGVER@ $(OBJS) $(LDFLAGS) -L../../ -lblas -lm -lgfortran -lc
else else
cc $(CFLAGS) -shared -Wl,-soname,libcblas$(SYMBOLSUFFIX).so.@SHORTVER@ -o libcblas$(SYMBOLSUFFIX).so.@LONGVER@ $(OBJS) $(LDFLAGS) -L../.. -lblas -lm -lgfortran -lc 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 # 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 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 sort -n cblas-prefix.def.dirty | uniq > cblas-prefix.def
@ -96,4 +99,4 @@ else
rm -rf libcblas$(SYMBOLSUFFIX).so.@LONGVER@ rm -rf libcblas$(SYMBOLSUFFIX).so.@LONGVER@
mv libcblas$(SYMBOLSUFFIX).so.@LONGVER@.fixed libcblas$(SYMBOLSUFFIX).so.@LONGVER@ mv libcblas$(SYMBOLSUFFIX).so.@LONGVER@.fixed libcblas$(SYMBOLSUFFIX).so.@LONGVER@
endif endif
endif

View File

@ -456,12 +456,14 @@ ifeq "$(SYMBOLSUFFIX)" ""
else else
ar ruv liblapack$(SYMBOLSUFFIX).a $(ALLOBJ) $(ALLXOBJ) ar ruv liblapack$(SYMBOLSUFFIX).a $(ALLOBJ) $(ALLXOBJ)
ranlib liblapack$(SYMBOLSUFFIX).a 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 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 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 $(OBJCOPY) --redefine-syms lapack-static-prefix.def liblapack$(SYMBOLSUFFIX).a liblapack$(SYMBOLSUFFIX).a.fixed
rm -rf liblapack$(SYMBOLSUFFIX).a rm -rf liblapack$(SYMBOLSUFFIX).a
mv liblapack$(SYMBOLSUFFIX).a.fixed liblapack$(SYMBOLSUFFIX).a mv liblapack$(SYMBOLSUFFIX).a.fixed liblapack$(SYMBOLSUFFIX).a
endif endif
endif
shared: $(ALLOBJ) $(ALLXOBJ) shared: $(ALLOBJ) $(ALLXOBJ)
ifeq "$(SYMBOLSUFFIX)" "" 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 cc $(CFLAGS) -shared -Wl,-soname,liblapack.so.@SHORTVER@ -o liblapack.so.@LONGVER@ $(ALLOBJ) $(ALLXOBJ) $(LDFLAGS) -L.. -lblas -lm -lgfortran -lc
else else
cc $(CFLAGS) -shared -Wl,-soname,liblapack$(SYMBOLSUFFIX).so.@SHORTVER@ -o liblapack$(SYMBOLSUFFIX).so.@LONGVER@ $(ALLOBJ) $(ALLXOBJ) $(LDFLAGS) -L.. -lblas -lm -lgfortran -lc 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 # 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 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 sort -n lapack-prefix.def.dirty | uniq > lapack-prefix.def
@ -476,3 +479,4 @@ else
rm -rf liblapack$(SYMBOLSUFFIX).so.@LONGVER@ rm -rf liblapack$(SYMBOLSUFFIX).so.@LONGVER@
mv liblapack$(SYMBOLSUFFIX).so.@LONGVER@.fixed liblapack$(SYMBOLSUFFIX).so.@LONGVER@ mv liblapack$(SYMBOLSUFFIX).so.@LONGVER@.fixed liblapack$(SYMBOLSUFFIX).so.@LONGVER@
endif endif
endif

View File

@ -10,8 +10,8 @@
Summary: Numerical linear algebra package libraries Summary: Numerical linear algebra package libraries
Name: lapack Name: lapack
Version: %{mediumver}.0 Version: %{mediumver}.0
Release: 10%{?dist} Release: 11%{?dist}
License: BSD License: BSD-3-Clause-Open-MPI
URL: http://www.netlib.org/lapack/ URL: http://www.netlib.org/lapack/
Source0: https://github.com/Reference-LAPACK/lapack/archive/v%{version}.tar.gz Source0: https://github.com/Reference-LAPACK/lapack/archive/v%{version}.tar.gz
Source1: http://www.netlib.org/lapack/manpages.tgz Source1: http://www.netlib.org/lapack/manpages.tgz
@ -181,12 +181,12 @@ cp libblas.so.%{version} ${RPM_BUILD_DIR}/%{name}-%{version}/
%if 0%{?arch64} %if 0%{?arch64}
make clean make clean
FFLAGS="$RPM_OPT_O_FLAGS -fdefault-integer-8" make dcabs1.o FFLAGS="$RPM_OPT_O_FLAGS -fdefault-integer-8" make dcabs1.o
FFLAGS="$RPM_OPT_FLAGS -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS" make static SYMBOLSUFFIX="64" RENAMEONLY=1 FFLAGS="$RPM_OPT_FLAGS -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS" make static
cp libblas.a ${RPM_BUILD_DIR}/%{name}-%{version}/libblas64.a cp libblas64.a ${RPM_BUILD_DIR}/%{name}-%{version}/libblas64.a
make clean make clean
FFLAGS="$RPM_OPT_O_FLAGS -fPIC -fdefault-integer-8" make dcabs1.o 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 SYMBOLSUFFIX="64" RENAMEONLY=1 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} cp libblas64.so.%{version} ${RPM_BUILD_DIR}/%{name}-%{version}/libblas64.so.%{version}
make clean make clean
FFLAGS="$RPM_OPT_O_FLAGS -fdefault-integer-8" make dcabs1.o 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 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}/ cp libcblas.so.%{version} ${RPM_BUILD_DIR}/%{name}-%{version}/
%if 0%{?arch64} %if 0%{?arch64}
make clean make clean
FFLAGS="$RPM_OPT_FLAGS -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS -I../include" make static SYMBOLSUFFIX="64" RENAMEONLY=1 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 cp libcblas64.a ${RPM_BUILD_DIR}/%{name}-%{version}/libcblas64.a
make clean make clean
FFLAGS="$RPM_OPT_FLAGS -fPIC -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS -fPIC -I../include" LDFLAGS="%{build_ldflags}" make shared 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 libcblas.so.%{version} ${RPM_BUILD_DIR}/%{name}-%{version}/libcblas64.so.%{version} cp libcblas64.so.%{version} ${RPM_BUILD_DIR}/%{name}-%{version}/libcblas64.so.%{version}
make clean make clean
SYMBOLSUFFIX="64_" FFLAGS="$RPM_OPT_FLAGS -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS -I../include" make static 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 cp libcblas64_.a ${RPM_BUILD_DIR}/%{name}-%{version}/libcblas64_.a
@ -268,8 +268,8 @@ popd
# Build the static lapack library # Build the static lapack library
pushd SRC pushd SRC
make clean make clean
make FFLAGS="$RPM_OPT_FLAGS -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS" static make SYMBOLSUFFIX="64" RENAMEONLY=1 FFLAGS="$RPM_OPT_FLAGS -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS" static
cp liblapack.a ${RPM_BUILD_DIR}/%{name}-%{version}/liblapack64.a cp liblapack64.a ${RPM_BUILD_DIR}/%{name}-%{version}/liblapack64.a
popd popd
# Build the static with pic dlamch, dsecnd, lsame, second, slamch bits (64bit INTEGER) # 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) # Build the static with pic lapack library (64bit INTEGER)
pushd SRC pushd SRC
make clean make clean
make FFLAGS="$RPM_OPT_FLAGS -fPIC -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS -fPIC" static make SYMBOLSUFFIX="64" RENAMEONLY=1 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 cp liblapack64.a ${RPM_BUILD_DIR}/%{name}-%{version}/liblapack_pic64.a
popd popd
# Build the static dlamch, dsecnd, lsame, second, slamch bits # Build the static dlamch, dsecnd, lsame, second, slamch bits
@ -335,8 +335,8 @@ popd
# Build the shared lapack library # Build the shared lapack library
pushd SRC pushd SRC
make clean make clean
make FFLAGS="$RPM_OPT_FLAGS -fPIC -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS -fPIC -fdefault-integer-8" LDFLAGS="%{build_ldflags}" shared 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 liblapack.so.%{version} ${RPM_BUILD_DIR}/%{name}-%{version}/liblapack64.so.%{version} cp liblapack64.so.%{version} ${RPM_BUILD_DIR}/%{name}-%{version}/liblapack64.so.%{version}
popd popd
# Build the shared dlamch, dsecnd, lsame, second, slamch bits # 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 %endif
%changelog %changelog
* Wed Oct 23 2024 Takuya Wakazono <takuya.wakazono@miraclelinux.com> - 3.9.0-11
- Fix soname of the 64-bit version libraries
Resolves: RHEL-24851
* Fri Aug 11 2023 Jakub Martisko <jamartis@redhat.com> - 3.9.0-10 * Fri Aug 11 2023 Jakub Martisko <jamartis@redhat.com> - 3.9.0-10
- Add explicit requires to the devel subpackages - Add explicit requires to the devel subpackages
Related: rhbz#2229142 Related: rhbz#2229142