aboutsummaryrefslogtreecommitdiff
path: root/academic/cblas/cblas.SlackBuild
diff options
context:
space:
mode:
Diffstat (limited to 'academic/cblas/cblas.SlackBuild')
-rw-r--r--academic/cblas/cblas.SlackBuild126
1 files changed, 77 insertions, 49 deletions
diff --git a/academic/cblas/cblas.SlackBuild b/academic/cblas/cblas.SlackBuild
index ea1235e122208..2aa85d604bd2d 100644
--- a/academic/cblas/cblas.SlackBuild
+++ b/academic/cblas/cblas.SlackBuild
@@ -2,18 +2,37 @@
# Slackware build script for CBLAS
-# Written by Eugene Suter <easuter@gmail.com>
+# Copyright 2016 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=cblas
-VERSION=${VERSION:-20110120}
+SRCNAM=lapack
+VERSION=${VERSION:-3.6.0}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
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
@@ -22,70 +41,79 @@ TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
+DOCS="LICENSE CBLAS/README"
+
if [ "$ARCH" = "i486" ]; then
SLKCFLAGS="-O2 -march=i486 -mtune=i686"
- LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
- LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
- LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
fi
-set -e
+set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
-rm -rf CBLAS
-tar xvf $CWD/$PRGNAM.tgz
-cd CBLAS
+rm -rf $SRCNAM-$VERSION
+tar xvf $CWD/$SRCNAM-$VERSION.tgz
+cd $SRCNAM-$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 {} \;
-
-# Manually configure and build
-cp Makefile.LINUX Makefile.in
-make CBDIR=$(pwd) \
- CBLIBDIR=$(pwd)/lib \
- CBLIB=$(pwd)/lib/libcblas.a \
- BLLIB="/usr/lib${LIBDIRSUFFIX}/libblas.a" \
- CFLAGS="$SLKCFLAGS -DADD_" \
- FFLAGS="$SLKCFLAGS -DADD_" \
- FC="gfortran" \
- RANLIB=ranlib \
- alllib
-
-cd lib
-ar -x lib$PRGNAM.a
-gcc -fPIC -lgfortran -shared *.o -Wl,-soname,$PRGNAM.so.$VERSION \
- -o lib$PRGNAM.so.$VERSION
-
-mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}
-cp lib$PRGNAM.a $PKG/usr/lib${LIBDIRSUFFIX}
-cp lib$PRGNAM.so.$VERSION $PKG/usr/lib${LIBDIRSUFFIX}
-( cd $PKG/usr/lib${LIBDIRSUFFIX}
- ln -s lib$PRGNAM.so.$VERSION lib$PRGNAM.so
-)
+chmod -R u+w,go-w,a+rX-st .
+
+# Fix lots of bugs with the cmake build system and .pc files.
+# More importantly, allow building only the CBLAS component.
+patch -p1 < $CWD/patches/generate-pkgconfig.diff
+patch -p1 < $CWD/patches/link-dependencies.diff
+patch -p1 < $CWD/patches/target-cleanup.diff
+patch -p1 < $CWD/patches/cmake-piecewise.diff
+
+# Avoid adding an RPATH entry to the shared lib. It's unnecessary (except for
+# running the test suite), and it's broken on 64-bit (needs LIBDIRSUFFIX).
+mkdir -p shared
+cd shared
+ cmake \
+ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
+ -DCMAKE_Fortran_FLAGS:STRING="$SLKCFLAGS" \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_BUILD_TYPE=None \
+ -DCMAKE_RULE_MESSAGES=OFF \
+ -DCMAKE_VERBOSE_MAKEFILE=TRUE \
+ -DUSE_OPTIMIZED_BLAS=ON \
+ -DBUILD_CBLAS=ON \
+ -DBUILD_TESTING=OFF \
+ -DBUILD_SHARED_LIBS=ON \
+ -DCMAKE_SKIP_RPATH=YES \
+ ..
+ make
+ make install/strip DESTDIR=$PKG
cd ..
-mkdir -p $PKG/usr/include
-cp include/* $PKG/usr/include
-
-find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
- | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
+# 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_C_FLAGS:STRING="$SLKCFLAGS" \
+ -DCMAKE_Fortran_FLAGS:STRING="$SLKCFLAGS" \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_BUILD_TYPE=None \
+ -DCMAKE_RULE_MESSAGES=OFF \
+ -DCMAKE_VERBOSE_MAKEFILE=TRUE \
+ -DUSE_OPTIMIZED_BLAS=ON \
+ -DBUILD_CBLAS=ON \
+ -DBUILD_TESTING=OFF \
+ ..
+ make
+ make install/strip DESTDIR=$PKG
+cd ..
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
-cp -a \
- README examples \
- $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