diff options
-rw-r--r-- | libraries/lapack/lapack.SlackBuild | 133 | ||||
-rw-r--r-- | libraries/lapack/lapack.info | 10 | ||||
-rw-r--r-- | libraries/lapack/make.inc | 70 |
3 files changed, 88 insertions, 125 deletions
diff --git a/libraries/lapack/lapack.SlackBuild b/libraries/lapack/lapack.SlackBuild index 6971feff04..cdfdd9e89b 100644 --- a/libraries/lapack/lapack.SlackBuild +++ b/libraries/lapack/lapack.SlackBuild @@ -1,23 +1,37 @@ #!/bin/sh -# Slackware build script for LAPACK libraries. - -# Written by Eugene Suter <easuter@gmail.com> -# Thanks to Pablo Santamaria <pablosantamaria@gmail.com> for fixing the -# shared library version problem (major version consistency between updates) +# Slackware build script for LAPACK + +# Copyright 2014 Kyle Guinn <elyk03@gmail.com>, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PRGNAM=lapack -VERSION=${VERSION:-3.4.1} +VERSION=${VERSION:-3.5.0} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} -MAJOR=$(echo $VERSION | cut -d. -f1) - if [ -z "$ARCH" ]; then - case "$( uname -m )" in + case "$(uname -m)" in i?86) ARCH=i486 ;; arm*) ARCH=arm ;; - *) ARCH=$( uname -m ) ;; + *) ARCH=$(uname -m) ;; esac fi @@ -26,6 +40,8 @@ TMP=${TMP:-/tmp/SBo} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} +DOCS="LICENSE README" + if [ "$ARCH" = "i486" ]; then SLKCFLAGS="-O2 -march=i486 -mtune=i686" LIBDIRSUFFIX="" @@ -34,14 +50,13 @@ elif [ "$ARCH" = "i686" ]; then LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -fPIC" - NOOPTFLAGS="-fPIC" LIBDIRSUFFIX="64" else SLKCFLAGS="-O2" LIBDIRSUFFIX="" fi -set -e +set -e rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT @@ -50,46 +65,64 @@ rm -rf $PRGNAM-$VERSION tar xvf $CWD/$PRGNAM-$VERSION.tgz cd $PRGNAM-$VERSION chown -R root:root . -find -L . \ - \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) \ - -exec chmod 755 {} \; -o \ - \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ - -exec chmod 644 {} \; - -# Copy the pre-configured make.inc file but put in the correct LIBDIR -sed "s%@LIBDIR@%/usr/lib${LIBDIRSUFFIX}%" $CWD/make.inc > make.inc - -# Build objects and static library files -make cleanlib -make OPTS="$SLKCFLAGS" NOOPT="$NOOPTFLAGS" lapacklib - -# Build dynamic libraries (it would be really nice for the netlib folks to -# include this already...) - -# LAPACK only. We assume blas is already installed in /usr/lib${LIBDIRSUFFIX} -( - mkdir shared_$PRGNAM - cd shared_$PRGNAM - ar -x ../lib$PRGNAM.a - gcc -fPIC -lgfortran -shared *.o -Wl,-soname,lib$PRGNAM.so.$MAJOR \ - -o lib$PRGNAM.so.$VERSION -) - -mkdir -p $PKG/usr/lib${LIBDIRSUFFIX} -cp lib$PRGNAM.a $PKG/usr/lib${LIBDIRSUFFIX} -cp shared_$PRGNAM/lib$PRGNAM.so.$VERSION $PKG/usr/lib${LIBDIRSUFFIX} - -( - cd $PKG/usr/lib${LIBDIRSUFFIX} - chmod 755 *.so.* - ln -s lib$PRGNAM.so.$VERSION lib$PRGNAM.so.$MAJOR - ln -s lib$PRGNAM.so.$MAJOR lib$PRGNAM.so -) - -find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ - | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true +chmod -R u+w,go-w,a+rX-st . + +# `make install` compiles and installs tmglib, along with many extra tests, +# so install files manually instead. +# +# Avoid adding an RPATH entry to the shared lib. It's unnecessary, and +# since we're not running `make install` we don't want to end up with +# a temporary RPATH that refers to the build directory. +# +# WARNING: The SONAME is "liblapack.so", not "liblapack.so.0" nor +# "liblapack.so.$MAJOR" as crafted in previous versions of this script. +# I don't know if this is intentional or an omission by upstream. +mkdir -p shared +cd shared + cmake \ + -DCMAKE_Fortran_FLAGS:STRING="$SLKCFLAGS" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLIB_SUFFIX=${LIBDIRSUFFIX} \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_RULE_MESSAGES=OFF \ + -DCMAKE_VERBOSE_MAKEFILE=TRUE \ + -DUSE_OPTIMIZED_BLAS=ON \ + -DBUILD_SHARED_LIBS=ON \ + -DCMAKE_SKIP_RPATH=YES \ + .. + make lapack/fast + install -D -m0755 -s lib/liblapack.so $PKG/usr/lib${LIBDIRSUFFIX}/liblapack.so + install -D -m0644 lapack.pc $PKG/usr/lib${LIBDIRSUFFIX}/pkgconfig/lapack.pc +cd .. + +# cmake doesn't appear to let us build both shared and static libs +# at the same time, so build it twice. This may build a non-PIC library +# on some architectures, which should be faster. +mkdir -p static +cd static + cmake \ + -DCMAKE_Fortran_FLAGS:STRING="$SLKCFLAGS" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLIB_SUFFIX=${LIBDIRSUFFIX} \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_RULE_MESSAGES=OFF \ + -DCMAKE_VERBOSE_MAKEFILE=TRUE \ + -DUSE_OPTIMIZED_BLAS=ON \ + .. + make lapack/fast + install -D -m0644 lib/liblapack.a $PKG/usr/lib${LIBDIRSUFFIX}/liblapack.a +cd .. + +# Fix the pkg-config file: +# 1. Version is wrong. +# 2. -L is hard-coded when a variable exists. +sed -i \ + -e "/^Version:/cVersion: ${VERSION}" \ + -e "/^Libs:/s/-L[^ ]*/-L\${libdir}/" \ + $PKG/usr/lib${LIBDIRSUFFIX}/pkgconfig/lapack.pc mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a $DOCS $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild mkdir -p $PKG/install diff --git a/libraries/lapack/lapack.info b/libraries/lapack/lapack.info index 0c6cdbf73f..2f9db3866e 100644 --- a/libraries/lapack/lapack.info +++ b/libraries/lapack/lapack.info @@ -1,10 +1,10 @@ PRGNAM="lapack" -VERSION="3.4.1" +VERSION="3.5.0" HOMEPAGE="http://www.netlib.org/lapack/" -DOWNLOAD="http://www.netlib.org/lapack/lapack-3.4.1.tgz" -MD5SUM="44c3869c38c8335c2b9c2a8bb276eb55" +DOWNLOAD="http://www.netlib.org/lapack/lapack-3.5.0.tgz" +MD5SUM="b1d3e3e425b2e44a06760ff173104bdf" DOWNLOAD_x86_64="" MD5SUM_x86_64="" REQUIRES="blas" -MAINTAINER="Serban Udrea" -EMAIL="S.Udrea@gsi.de" +MAINTAINER="Kyle Guinn" +EMAIL="elyk03@gmail.com" diff --git a/libraries/lapack/make.inc b/libraries/lapack/make.inc deleted file mode 100644 index ed1c7578fa..0000000000 --- a/libraries/lapack/make.inc +++ /dev/null @@ -1,70 +0,0 @@ -# -*- Makefile -*- -#################################################################### -# LAPACK make include file. # -# LAPACK, Version 3.2.1 # -# April 2009 # -#################################################################### -# -# See the INSTALL/ directory for more examples. -# -SHELL = /bin/sh -# -# The machine (platform) identifier to append to the library names -# -#PLAT = _LINUX -# -# Modify the FORTRAN and OPTS definitions to refer to the -# compiler and desired compiler options for your machine. NOOPT -# refers to the compiler options desired when NO OPTIMIZATION is -# selected. Define LOADER and LOADOPTS to refer to the loader -# and desired load options for your machine. -# -FORTRAN = gfortran -OPTS = -DRVOPTS = $(OPTS) -NOOPT = -LOADER = gfortran -LOADOPTS = -# -# Timer for the SECOND and DSECND routines -# -# Default : SECOND and DSECND will use a call to the EXTERNAL FUNCTION ETIME -# TIMER = EXT_ETIME -# For RS6K : SECOND and DSECND will use a call to the EXTERNAL FUNCTION ETIME_ -# TIMER = EXT_ETIME_ -# For gfortran compiler: SECOND and DSECND will use a call to the INTERNAL FUNCTION ETIME -# TIMER = INT_ETIME -# If your Fortran compiler does not provide etime (like Nag Fortran Compiler, etc...) -# SECOND and DSECND will use a call to the Fortran standard INTERNAL FUNCTION CPU_TIME -#TIMER = INT_CPU_TIME -# If neither of this works...you can use the NONE value... In that case, SECOND and DSECND will always return 0 -TIMER = INT_ETIME -# -# The archiver and the flag(s) to use when building archive (library) -# If you system has no ranlib, set RANLIB = echo. -# -ARCH = ar -ARCHFLAGS= cr -RANLIB = ranlib -# -# The location of BLAS library for linking the testing programs. -# The target's machine-specific, optimized BLAS library should be -# used whenever possible. -# -BLASLIB = @LIBDIR@/libblas.a -# -# Location of the extended-precision BLAS (XBLAS) Fortran library -# used for building and testing extended-precision routines. The -# relevant routines will be compiled and XBLAS will be linked only if -# USEXBLAS is defined. -# -# USEXBLAS = Yes -XBLASLIB = -# XBLASLIB = -lxblas -# -# Names of generated libraries. -# -LAPACKLIB = liblapack$(PLAT).a -TMGLIB = libtmglib$(PLAT).a -EIGSRCLIB = libeigsrc$(PLAT).a -LINSRCLIB = liblinsrc$(PLAT).a |