libraries/lapack-atlas: Updated for version 3.6.1.

Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
This commit is contained in:
Serban Udrea 2016-08-26 07:48:28 +07:00 committed by David Spencer
parent 2917ce175f
commit 78609d7423
4 changed files with 71 additions and 291 deletions

View file

@ -2,13 +2,7 @@ LAPACK provides routines for solving systems of simultaneous linear
equations, least-squares solutions of linear systems of equations,
eigenvalue problems, and singular value problems.
This script builds LAPACK against ATLAS. As such it requires ATLAS as installed
by the appropriate SlackBuild. This build conflicts with the lapack.SlackBuild
but you may try to have both installed if you definitely want, see below.
Do read over README.SLACKWARE *before* building this.
NOTE: The download link provides a package with lapack-3.3.1 patched against
some of the presently known bugs of the 3.3.1 release. Please consult the
LAPACK-3.3.1 errata file (http://www.netlib.org/lapack/Errata/index2.html) for
more details about the corrected bugs.
This script just installs the LAPACK sources such that the atlas.SlackBuild
can find them (with its default settings) and build a full LAPACK
library linked to its optimized BLAS routines. As such nothing gets
build yet.

View file

@ -1,289 +1,75 @@
#!/bin/sh
# Slackware script to build the LAPACK libraries against ATLAS.
# Slackware build script to install the LAPACK sources needed for a full
# LAPACK+ATLAS installation
# Written by Serban Udrea <s.udrea@gsi.de>
# Includes the code to make dynamic libs from the lapack.SlackBuild by
# Eugene Suter <easuter@gmail.com>
# Copyright 2010-2016 Serban Udrea <s.udrea@gsi.de>
# 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.
# Licence: LICENCE file in the tarball
PRGNAM=lapack-atlas
VERSION=${VERSION:-3.3.1}
PRGNAM=lapack
VERSION=${VERSION:-3.6.1}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
SRCNAM=lapack # The source is still that of LAPACK
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i486 ;;
i?86) ARCH=i586 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
*) ARCH="$( uname -m )" ;;
esac
fi
CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-${PRGNAM}
OUTPUT=${OUTPUT:-/tmp}
CWD="$(pwd)"
TMP="${TMP:-/tmp/SBo}"
PKG="$TMP/package-${PRGNAM}-atlas"
OUTPUT="${OUTPUT:-/tmp}"
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"
NOOPTFLAGS="-fPIC"
LIBDIRSUFFIX="64"
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i586 ;;
arm*) ARCH=arm ;;
*) ARCH="$( uname -m )" ;;
esac
fi
set -e
# This is the system destination directory. When installing the
# package produced by this script, LAPACK's files will be written to
# $SYS_DESTDIR/lib or $SYS_DESTDIR/lib64 on appropriate platforms, etc.
# Nevertheless, by default the documentation files go to
# /usr/doc/$PRGNAM-$VERSION. You may change this through the variable
# DEFAULT_DOCS, see below.
SYS_DESTDIR=${SYS_DESTDIR:-/usr}
# Check if SYS_DESTDIR is an absolute path. If not, exit with error.
# NOTE: The $ is used because echo adds a \n at the end of the string.
echo "$SYS_DESTDIR" | grep -vE '/\.\./|/\.\.$' | grep -qE '^/' || \
{ echo "ERROR: The system destination directory has no absolute path!" \
&& echo " The value of SYS_DESTDIR is $SYS_DESTDIR" \
&& echo " Please set it properly! " \
&& exit 1; }
# You may want to have the documentation files installed under
# $SYS_DESTDIR/doc/$PRGNAM-$VERSION not /usr/doc/$PRGNAM-$VERSION.
# To achieve this just set the following variable to something like
# "no".
DEFAULT_DOCS=${DEFAULT_DOCS:-yes}
DEFAULT_DOCS=$(echo "$DEFAULT_DOCS"|cut -b 1|tr a-z A-Z) # Make Y or N out of yes, Yes, No, no, etc.
if [ "$DEFAULT_DOCS" = "Y" ]; then
DOC_DIR="$PKG/usr/doc/${PRGNAM}-$VERSION"
else
DOC_DIR="$PKG$SYS_DESTDIR/doc/${PRGNAM}-$VERSION"
fi
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $SRCNAM-$VERSION
tar xvf $CWD/$SRCNAM-$VERSION.tgz
cd $SRCNAM-$VERSION
set -e
DEST_DIR="usr/share/lapack-atlas"
DOC_DIR="usr/doc/lapack-atlas"
rm -rf "$PKG"
mkdir -p "$TMP" "$PKG" "$OUTPUT"
cd "$TMP"
rm -rf "$PRGNAM-$VERSION"
mkdir -p "${PKG}/${DEST_DIR}" "${PKG}/${DOC_DIR}"
install -m644 "$CWD/README" "$CWD/lapack-atlas.SlackBuild" "${PKG}/${DOC_DIR}"
cp -ua "$CWD/${PRGNAM}-${VERSION}.tgz" "${PKG}/${DEST_DIR}"
cd "${PKG}/${DEST_DIR}"
ln -s "${PRGNAM}-${VERSION}.tgz" lapack.tgz
cd "$PKG"
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 {} \;
# Within Makefile it is asumed that lapack_testing.py is executable.
# This is not the case, thus if TEST_LAPACK is enabled, make fails.
chmod 755 ./lapack_testing.py
# If you say "no" here, the script will NOT try to link LAPACK against
# the multi-threaded ATLAS libraries. If you leave it to "yes" and the
# multi-threaded ATLAS libraries are not available, the script will default
# to linking against the single threaded ones and raise a warning.
USE_ATLAS_PT_LIBS="${USE_ATLAS_PT_LIBS:-yes}"
USE_ATLAS_PT_LIBS=$(echo "$USE_ATLAS_PT_LIBS"|cut -b 1|tr a-z A-Z) # Make Y or N out of yes, Yes, No, no, etc.
# Change the following to yes if you would like to run the tests for LAPACK.
TEST_LAPACK="${TEST_LAPACK:-no}"
# Make Y or N out of yes, Yes, No, no, etc.
TEST_LAPACK=$(echo "$TEST_LAPACK"|cut -b 1|tr a-z A-Z)
# Search for the latest installed atlas package
# (not necessarily the one with the latest version).
# For this to work the system clock should also work properly.
# NOTE: The echo statement below is for getting around "set -e" this time.
ATLAS_PKG="$(ls -1 -dc /var/log/packages/atlas* 2>/dev/null | \
head -n 1 || echo -n)"
# Check if an atlas package was found. Exit if not!
[ ! "$ATLAS_PKG" ] && \
echo "ERROR: Couldn't find the ATLAS package." && exit 1
# Pick up the SETTINGS file containing the appropriate flags, use again the
# echo trick against "set -e". You may also provide your own path to a file
# containing apropriate settings, see the README for details
ATLAS_SETTINGS_FILE=${ATLAS_SETTINGS_FILE:-"/$(grep SETTINGS "$ATLAS_PKG" || echo -n)"}
[ "${ATLAS_SETTINGS_FILE}1" = "/1" ] && \
echo "ERROR: No location available for the file with ATLAS settings." && exit 1
# Check that we deal with a regular file which is readable
[ -f "$ATLAS_SETTINGS_FILE" -a -r "$ATLAS_SETTINGS_FILE" ] || \
{ echo "ERROR: $ATLAS_SETTINGS_FILE is not a regular file or is not readable by us." && exit 1; }
# Source the atlas settings.
. "$ATLAS_SETTINGS_FILE"
# Check for the presence of variables provided by the ATLAS_SETTINGS_FILE
{ [ "$ATLAS_COMPILER" ] && \
[ "$ATLAS_F77FLAGS" ] && \
[ "$ATLAS_NOOPT" ]; } ||
{ echo "ERROR: Improper ATLAS settings; empty or undefined variables." && exit 1; }
# This is the timer to be used for LAPACK. If you stay with gfortran,
# presently the default compiler on Slackware, you can leave the value as is.
# Otherwise, please read LAPACK's make.inc for more informations.
LAPACK_TIMER="${LAPACK_TIMER:-INT_ETIME}"
# Looking for the libraries provided by ATLAS. If one asks for threaded
# libraries and these are available we will try to link against them.
if [ "$USE_ATLAS_PT_LIBS" = "Y" ]; then
# Set proper library names for the threaded ATLAS libs.
ATLAS_BLASLIB="libptf77blas.a"
ATLAS_CBLASLIB="libptcblas.a"
# Find out the full paths to the ATLAS libraries
ATLAS_BLASLIB_P="/$(grep "$ATLAS_BLASLIB" "$ATLAS_PKG" || echo -n)"
# We need this to finally link against the mixed LAPACK library, resulting
# from the full LAPACK and the optimized LAPACK routines provided by ATLAS.
ATLAS_CBLASLIB_P="/$(grep "$ATLAS_CBLASLIB" "$ATLAS_PKG" || echo -n)"
if [ "${ATLAS_BLASLIB_P}1" = "/1" -o "${ATLAS_CBLASLIB_P}1" = "/1" ]; then
# Oops! The threaded libraries are not available!
echo ""
echo "WARNING: No threaded ATLAS libraries available!"
echo "WARNING: Linking against non-threaded libraries!"
echo ""
ATLAS_BLASLIB="libf77blas.a"
ATLAS_CBLASLIB="libcblas.a"
USE_ATLAS_PT_LIBS="N"
fi
else
# Set proper library names for the unthreaded ATLAS libs.
ATLAS_BLASLIB="libf77blas.a"
ATLAS_CBLASLIB="libcblas.a"
fi
# Find out the full paths to the ATLAS libraries
ATLAS_BLASLIB="/$(grep "$ATLAS_BLASLIB" "$ATLAS_PKG" || echo -n)"
ATLAS_CBLASLIB="/$(grep "$ATLAS_CBLASLIB" "$ATLAS_PKG" || echo -n)"
ATLAS_EXTRA_LIB="/$(grep libatlas.a "$ATLAS_PKG" || echo -n)"
ATLAS_LAPACK="/$(grep liblapack.a "$ATLAS_PKG" || echo -n)"
# Check that we got what we expected
{ [ "${ATLAS_BLASLIB}1" = "/1" ] || \
[ "${ATLAS_CBLASLIB}1" = "/1" ] || \
[ "${ATLAS_EXTRA_LIB}1" = "/1" ] || \
[ "${ATLAS_LAPACK}1" = "/1" ]; } && \
{ echo "ERROR: ATLAS libraries missing from the Slackware ATLAS package log." && exit 1; }
# Check that the library files are there.
# NOTE: After the installation of this package, the incomplete LAPACK library
# installed by ATLAS gets substituted by the complete one provided by us
[ -f "$ATLAS_BLASLIB" -a -r "$ATLAS_BLASLIB" ] || \
{ echo "ERROR: $ATLAS_BLASLIB is not a regular file or is not readable by us." && exit 1; }
[ -f "$ATLAS_CBLASLIB" -a -r "$ATLAS_CBLASLIB" ] || \
{ echo "ERROR: $ATLAS_CBLASLIB is not a regular file or is not readable by us." && exit 1; }
[ -f "$ATLAS_EXTRA_LIB" -a -r "$ATLAS_EXTRA_LIB" ] || \
{ echo "ERROR: $ATLAS_EXTRA_LIB is not a regular file or is not readable by us." && exit 1; }
[ -f "$ATLAS_LAPACK" -a -r "$ATLAS_LAPACK" ] || \
{ echo "ERROR: $ATLAS_LAPACK is not a regular file or is not readable by us." && exit 1; }
ATLAS_LIBS="${ATLAS_BLASLIB} ${ATLAS_EXTRA_LIB}"
# Copy the pre-configured make.inc file but edit it accordingly
sed $CWD/make.inc.atlas \
-e s%XXX_FORTRAN_XXX%"$ATLAS_COMPILER"% \
-e s%XXX_TIMER_XXX%"$LAPACK_TIMER"% \
-e s%XXX_BLASLIB_XXX%"$ATLAS_LIBS"% > \
make.inc
# Set the compilation flags.
LAPACK_OPTS="$ATLAS_F77FLAGS $NOOPTFLAGS"
LAPACK_NOOPT="$ATLAS_NOOPT $NOOPTFLAGS"
# Build objects and static library files
make cleanlib
make OPTS="$LAPACK_OPTS" NOOPT="$LAPACK_NOOPT" lapacklib
# Merge the ATLAS incomplete LAPACK library with the
# just built full LAPACK.
mkdir -p merging_dir
( cd merging_dir
ar x "$ATLAS_LAPACK"
ar r "../lib${SRCNAM}.a" *.o
)
rm -rf merging_dir
if [ "$TEST_LAPACK" = "Y" ]; then
# We want to test LAPACK, thus we have to build tmglib and then run the tests
make OPTS="$LAPACK_OPTS" NOOPT="$LAPACK_NOOPT" tmglib
# Update make.inc taking into account that the LAPACK library has
# been merged with the optimized LAPACK routines provided by ATLAS.
ATLAS_LIBS="${ATLAS_BLASLIB} ${ATLAS_CBLASLIB} ${ATLAS_EXTRA_LIB}"
if [ "$USE_ATLAS_PT_LIBS" = "Y" ]; then
# Add the threads library
ATLAS_LIBS=${ATLAS_LIBS}" -lpthread"
fi
cat "$CWD/make.inc.atlas" | \
sed -e s%XXX_FORTRAN_XXX%"$ATLAS_COMPILER"% \
-e s%XXX_TIMER_XXX%"$LAPACK_TIMER"% \
-e s%XXX_BLASLIB_XXX%"$ATLAS_LIBS"% > \
make.inc
make OPTS="$LAPACK_OPTS" NOOPT="$LAPACK_NOOPT" lapack_testing
# Put the test results together
TEST_OUTPUT="TEST.RESULTS.tgz"
tar czf "$TEST_OUTPUT" TESTING/*.out
fi
#LAPACK only.
( mkdir "shared_$SRCNAM"
cd "shared_$SRCNAM"
ar -x "../lib$SRCNAM.a"
gcc -fPIC -lgfortran -shared *.o -Wl,-soname,"$SRCNAM.so.$VERSION" \
-o "lib$SRCNAM.so.$VERSION"
)
mkdir -p "$PKG$SYS_DESTDIR/lib${LIBDIRSUFFIX}"
cp "lib$SRCNAM.a" "$PKG$SYS_DESTDIR/lib${LIBDIRSUFFIX}"
cp "shared_$SRCNAM/lib$SRCNAM.so.$VERSION" "$PKG$SYS_DESTDIR/lib${LIBDIRSUFFIX}"
( cd "$PKG$SYS_DESTDIR/lib${LIBDIRSUFFIX}"
chmod 755 "lib$SRCNAM.so.$VERSION"
ln -s "lib$SRCNAM.so.$VERSION" "lib$SRCNAM.so"
)
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | \
grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
mkdir -p "$DOC_DIR"
cat "$CWD/${PRGNAM}.SlackBuild" > "$DOC_DIR/${PRGNAM}.SlackBuild"
cat README > "$DOC_DIR/README"
cat "$CWD/README.SLACKWARE" > "$DOC_DIR/README.SLACKWARE"
cat LICENSE > "$DOC_DIR/LICENSE"
# If the tests have been performed, also copy the results to the doc directory.
if [ -f "$TEST_OUTPUT" ]; then
cp -p "$TEST_OUTPUT" "$DOC_DIR"
fi
# Signal that lapack got compiled against atlas
# echo "Y" > "$DOC_DIR/WITH_ATLAS"
if [ "$USE_ATLAS_PT_LIBS" = "Y" ]; then
# Signal that lapack got compiled with thread support
echo "$USE_ATLAS_PT_LIBS" > "$DOC_DIR/WITH_THREADS"
fi
\( -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 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
mkdir -p "$PKG/install"
cat $CWD/slack-desc > $PKG/install/slack-desc
cd "$PKG"
/sbin/makepkg -l y -c n $OUTPUT/${PRGNAM}-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
cat "$CWD/slack-desc" > "$PKG/install/slack-desc"
/sbin/makepkg -l y -c n "$OUTPUT/$PRGNAM-atlas-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}"

View file

@ -1,10 +1,10 @@
PRGNAM="lapack-atlas"
VERSION="3.3.1"
VERSION="3.6.1"
HOMEPAGE="http://www.netlib.org/lapack/"
DOWNLOAD="http://skmail.ikp.physik.tu-darmstadt.de/lapack/lapack-3.3.1.tgz"
MD5SUM="cb0790c96c72752e3f292bf85a7fbef0"
DOWNLOAD="http://www.netlib.org/lapack/lapack-3.6.1.tgz"
MD5SUM="421b2cb72e15f237e144428f9c460ee0"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="atlas"
REQUIRES=""
MAINTAINER="Serban Udrea"
EMAIL="S.Udrea@gsi.de"

View file

@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
lapack-atlas: LAPACK-ATLAS (LAPACK customized for build against ATLAS)
lapack-atlas: LAPACK-ATLAS (LAPACK sources for build against ATLAS)
lapack-atlas:
lapack-atlas: LAPACK provides routines for solving systems of simultaneous linear
lapack-atlas: equations, least-squares solutions of linear systems of equations,
lapack-atlas: eigenvalue problems, and singular value problems. The associated matrix
lapack-atlas: factorizations (LU, Cholesky, QR, SVD, Schur, generalized Schur) are
lapack-atlas: also provided, as are related computations such as reordering of the
lapack-atlas: Schur factorizations and estimating condition numbers. Dense and banded
lapack-atlas: matrices are handled, but not general sparse matrices. In all areas,
lapack-atlas: similar functionality is provided for real and complex matrices, in
lapack-atlas: both single and double precision.
lapack-atlas: eigenvalue problems, and singular value problems. The associated
lapack-atlas: matrix factorizations (LU, Cholesky, QR, SVD, Schur, generalized
lapack-atlas: Schur) are also provided, as are related computations such as
lapack-atlas: reordering of the Schur factorizations and estimating condition
lapack-atlas: numbers. Dense and banded matrices are handled, but not general sparse
lapack-atlas: matrices. In all areas, similar functionality is provided for real and
lapack-atlas: complex matrices, in both single and double precision.