File lapack-3.1.1-1.spec of Package lapack
Group: Development/Libraries
Name: lapack
Prefix: /usr
Release: 1
Version: 3.1.1
Source: ftp://ftp.netlib.org/lapack/lapack.tgz
Patch: lapack-make2.patch
URL: http://www.netlib.org/lapack
Summary: Fortran77 reference implementation of the Lapack in all precisions.
License: Freely distributable
# Name of the static archive
%define STATICLAPACKNAME liblapack.a
%define SHAREDLAPACKNAME liblapack.so
%define LAPACKSOVERSIONMAJOR 3
%define LAPACKSOVERSIONMINOR 1
%define LAPACKSOVERSIONMICRO 1
%define SHAREDFULLLAPACKNAME %{SHAREDLAPACKNAME}.%{LAPACKSOVERSIONMAJOR}.%{LAPACKSOVERSIONMINOR}.%{LAPACKSOVERSIONMICRO}
provides: %{SHAREDLAPACKNAME}.%{LAPACKSOVERSIONMAJOR}TATICLAPACKNAME
BuildRoot: /var/tmp/lapack3-buildroot
%if 0%{?fedora_version} == 6
requires: gcc-gfortran libblas.so.3
BuildRequires: gcc-gfortran libblas.a
%endif
%if 0%{?fedora_version} == 5
requires: gcc-gfortran libblas.so.3
BuildRequires: gcc-gfortran libblas.a
%endif
%if 0%{?suse_version}
requires: gcc-fortran libblas.so.3
BuildRequires: gcc-fortran libblas.a
%endif
Packager: David Cournapeau <cournape@gmail.com>
%package devel
provides: %{STATICLAPACKNAME}
Summary: LAPACK development libraries
Group: Development/Libraries
%if 0%{?fedora_version} >= 5
requires: gcc-gfortran libblas.a lapack = 3.1.1
%endif
%if 0%{?suse_version}
requires: gcc-fortran libblas.a lapack = 3.1.1
%endif
%description
LAPACK is written in Fortran77 and provides routines for solving systems of
simultaneous linear equations, least-squares solutions of linear systems of
equations, eigenvalue problems, and singular value problems. The associated
matrix factorizations (LU, Cholesky, QR, SVD, Schur, generalized Schur) are
also provided, as are related computations such as reordering of the Schur
factorizations and estimating condition numbers. Dense and banded matrices are
handled, but not general sparse matrices. In all areas, similar functionality
is provided for real and complex matrices, in both single and double precision.
%description devel
Static version of NETLIB lapack
%prep
%setup -q
%patch -p 1
%define F77 gfortran
%define PIC_OPTS -fPIC
%define LAPACK_PIC_ARCHIVE liblapack_pic.a
%define BLAS_LDFLAGS -lblas
%define LAPACK_LDFLAGS -L$PWD -llapack
%define TEST_LD_LIBRARY_PATH $PWD
#%define OPTFLAGS -W -Wall -O3 -funroll-loops
# Create Makefile.shared: basically, change binaries names,
# and rename all *.o to *.os
cat INSTALL/Makefile | sed -e "s/\.o\>/\.os/g" \
-e "s/\<testlsame\>/testlsame_s/g" -e "s/\<testslamch\>/testslamch_s/g" \
-e "s/\<testdlamch\>/testdlamch_s/g" -e "s/\<testsecond\>/testsecond_s/g" \
-e "s/\<testdsecnd\>/testdsecnd_s/g" -e "s/\<testieee\>/testieee_s/g" \
-e "s/\<testversion\>/testversion_s/g" > INSTALL/Makefile.shared
cat SRC/Makefile | sed -e "s/\.o\>/\.os/g" > SRC/Makefile.shared
cat make.inc | sed -e "s,^PICOPTS\s*=,PICOPTS = %{PIC_OPTS},g" \
-e "s,^\(FORTRAN *=\)\([[:print:]]*\),\1 %{F77},g" \
-e "s,^\(LOADER *=\)\([[:print:]]*\),\1 %{F77},g" \
-e "s,^\(PLAT *=\)\([[:print:]]*\),\1,g" \
-e "s,^\(OPTS *=[[:print:]]*\),\1 %{PIC_OPTS},g" \
-e "s,^\(NOOPT *=[[:print:]]*\),\1 %{PIC_OPTS},g" \
-e "s,^\(BLASLIB *=\)\([[:print:]]*\),\1 ,g" \
-e "s,^\(LAPACKLIB *=\)\([[:print:]]*\),\1 %{LAPACK_PIC_ARCHIVE},g" > make.inc.shared
cat Makefile | sed -e "s/\<testlsame\>/testlsame_s/g" \
-e "s/\<testslamch\>/testslamch_s/g" -e "s/\<testsecond\>/testsecond_s/g" \
-e "s/\<testdsecnd\>/testdsecnd_s/g" -e "s/\<testieee\>/testieee_s/g" \
-e "s/\<testversion\>/testversion_s/g" \
-e "s/\<testdlamch\>/testdlamch_s/g" > Makefile.shared
cat TESTING/LIN/Makefile | sed -e "s/\.o\>/\.os/g" \
-e "s,\$(BLASLIB),%{BLAS_LDFLAGS},g" \
-e "s,\.\./\.\./\$(LAPACKLIB),%{LAPACK_LDFLAGS},g" > TESTING/LIN/Makefile.shared
cat TESTING/EIG/Makefile | sed -e "s/\.o\>/\.os/g" \
-e "s,\$(BLASLIB),%{BLAS_LDFLAGS},g" \
-e "s,\.\./\.\./\$(LAPACKLIB),%{LAPACK_LDFLAGS},g" > TESTING/EIG/Makefile.shared
cat TESTING/MATGEN/Makefile | sed -e "s/\.o\>/\.os/g" \
> TESTING/MATGEN/Makefile.shared
cat TESTING/Makefile | sed -e "s/\.o\>/\.os/g" \
-e "s,\(\./xlintsts\),LD_LIBRARY_PATH=%{TEST_LD_LIBRARY_PATH} \1,g" \
-e "s,\(\./xlintstc\),LD_LIBRARY_PATH=%{TEST_LD_LIBRARY_PATH} \1,g" \
-e "s,\(\./xlintstd\),LD_LIBRARY_PATH=%{TEST_LD_LIBRARY_PATH} \1,g" \
-e "s,\(\./xlintstz\),LD_LIBRARY_PATH=%{TEST_LD_LIBRARY_PATH} \1,g" \
-e "s,\(\./xlintstds\),LD_LIBRARY_PATH=%{TEST_LD_LIBRARY_PATH} \1,g" \
-e "s,\(\./xlintstzc\),LD_LIBRARY_PATH=%{TEST_LD_LIBRARY_PATH} \1,g" \
-e "s,\(\./xeigtsts\),LD_LIBRARY_PATH=%{TEST_LD_LIBRARY_PATH} \1,g" \
-e "s,\(\./xeigtstd\),LD_LIBRARY_PATH=%{TEST_LD_LIBRARY_PATH} \1,g" \
-e "s,\(\./xeigtstz\),LD_LIBRARY_PATH=%{TEST_LD_LIBRARY_PATH} \1,g" \
-e "s,\(\./xeigtstc\),LD_LIBRARY_PATH=%{TEST_LD_LIBRARY_PATH} \1,g" \
> TESTING/Makefile.shared
# Change for static version
cat make.inc | sed -e "s/^PICOPTS\s*=/PICOPTS = /g" \
-e "s/^\(FORTRAN *=\)\([[:print:]]*\)/\1 %{F77}/g" \
-e "s/^\(LOADER *=\)\([[:print:]]*\)/\1 %{F77}/g" \
-e "s/^\(PLAT *=\)\([[:print:]]*\)/\1/g" \
-e "s/^\(OPTS *=[[:print:]]*\)/\1 /g" \
-e "s/^\(NOOPT *=[[:print:]]*\)/\1 /g" \
-e "s,^\(BLASLIB *=\)\([[:print:]]*\),\1 %{_libdir}/libblas.a,g" \
-e "s,^\(LAPACKLIB *=\)\([[:print:]]*\),\1 %{STATICLAPACKNAME},g" > make.inc.static
cat TESTING/LIN/Makefile | sed -e "s,\$(BLASLIB),%{BLAS_LDFLAGS},g" \
-e "s,\.\./\.\./\$(LAPACKLIB),%{LAPACK_LDFLAGS},g" > TESTING/LIN/Makefile.static
cat TESTING/EIG/Makefile | sed -e "s,\$(BLASLIB),%{BLAS_LDFLAGS},g" \
-e "s,\.\./\.\./\$(LAPACKLIB),%{LAPACK_LDFLAGS},g" > TESTING/EIG/Makefile.static
rpm -q -i refblas3
%build
%define MY_TOP_DIR $RPM_BUILD_DIR/$RPM_PACKAGE_NAME-$RPM_PACKAGE_VERSION
#-----------
# Static lib
#-----------
# We simply link all relevant Makefile.static to Makefile
ln -sf Makefile.static Makefile
ln -sf make.inc.static make.inc
(cd INSTALL && ln -sf Makefile.static Makefile)
(cd SRC && ln -sf Makefile.static Makefile)
(cd TESTING && ln -sf Makefile.static Makefile)
(cd TESTING/EIG && ln -sf Makefile.static Makefile)
(cd TESTING/LIN && ln -sf Makefile.static Makefile)
(cd TESTING/MATGEN && ln -sf Makefile.static Makefile)
%define ST_MAKE_VAR BLASLIB=%{_libdir}/libblas.a LAPACKLIB=%{STATICLAPACKNAME}
%{ST_MAKE_VAR} make cleanall
%{ST_MAKE_VAR} make lib
cp %{STATICLAPACKNAME} liblapack.a.final
#------
# Tests
#------
## Static blas:
#%define OPTFLAGS "-W -Wall -O3 -funroll-loops"
#%define STBLASTESTMAKEVAR FORTRAN=%{F77} LOADER=%{F77} BLASLIB=%{_libdir}/libblas.a OPTS=%{OPTFLAGS} LAPACKLIB=%{STATICLAPACKNAME}
#%{STBLASTESTMAKEVAR} make cleanblas_testing
#%{STBLASTESTMAKEVAR} make blas_testing
# Static lapack:
%define MY_ROOT_DIR $(PWD)
#%define OPTFLAGS "-W -Wall -O3 -funroll-loops"
%define ST_LAPACK_TEST_MAKEVAR BLASLIB=%{_libdir}/libblas.a LAPACKLIB=%{STATICLAPACKNAME}
%{ST_LAPACK_TEST_MAKEVAR} make cleantesting
%{ST_LAPACK_TEST_MAKEVAR} make lapack_testing
%{ST_LAPACK_TEST_MAKEVAR} make cleanall
#-----------
# Shared lib
#-----------
# We simply link all relevant Makefile.shared to Makefile
ln -sf Makefile.shared Makefile
ln -sf make.inc.shared make.inc
(cd INSTALL && ln -sf Makefile.shared Makefile)
(cd SRC && ln -sf Makefile.shared Makefile)
(cd TESTING && ln -sf Makefile.shared Makefile)
(cd TESTING/EIG && ln -sf Makefile.shared Makefile)
(cd TESTING/LIN && ln -sf Makefile.shared Makefile)
(cd TESTING/MATGEN && ln -sf Makefile.shared Makefile)
# Shared lib: we build a shared one with -fPIC, and uncompress the archive to
# build a shared library (easier but hackier than adapting the makefiles)
%define SSMAKEVAR LAPACKLIB=liblapack_pic.a
%{SSMAKEVAR} make lapacklib
# Make a shared library from the archive in tmp-shared
mkdir tmp-shared
cd tmp-shared
ar x ../liblapack_pic.a
%{F77} -shared -Wl,-soname,%{SHAREDLAPACKNAME}.%{LAPACKSOVERSIONMAJOR} -o %{SHAREDLAPACKNAME} *.os
mv %{SHAREDLAPACKNAME} ..
cd ..
ln -sf %{SHAREDLAPACKNAME} %{SHAREDLAPACKNAME}.%{LAPACKSOVERSIONMAJOR}
# Tests
#%define ST_LAPACK_TEST_MAKEVAR LOADOPTS="-lblas -L%{MY_TOP_DIR} -llapack"
%define ST_LAPACK_TEST_MAKEVAR LAPACKLIB=liblapack_pic.a
%{ST_LAPACK_TEST_MAKEVAR} make cleantesting
%{ST_LAPACK_TEST_MAKEVAR} make lapack_testing
%install
rm -fr $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT%{_libdir}
#mkdir -p $RPM_BUILD_ROOT/usr/doc/lapack-%{version}
mv liblapack.a.final liblapack.a
mv %{SHAREDLAPACKNAME} %{SHAREDFULLLAPACKNAME}
install -m 644 %{STATICLAPACKNAME} $RPM_BUILD_ROOT%{_libdir}
install -m 644 %{SHAREDFULLLAPACKNAME} $RPM_BUILD_ROOT%{_libdir}
cd $RPM_BUILD_ROOT%{_libdir}
ln -sf %{SHAREDFULLLAPACKNAME} %{SHAREDLAPACKNAME}.%{LAPACKSOVERSIONMAJOR}
ln -sf %{SHAREDFULLLAPACKNAME} %{SHAREDLAPACKNAME}
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
%{_libdir}/%{SHAREDFULLLAPACKNAME}
%{_libdir}/%{SHAREDLAPACKNAME}.%{LAPACKSOVERSIONMAJOR}
%files devel
%defattr(-,root,root)
%{_libdir}/%{STATICLAPACKNAME}
%{_libdir}/%{SHAREDLAPACKNAME}