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}

openSUSE Build Service is sponsored by