From fadc4225ddff17a0275b188837a00dd1d74513b6 Mon Sep 17 00:00:00 2001 From: Kyle Guinn Date: Mon, 30 Dec 2013 20:07:46 -0600 Subject: libraries/UMFPACK: Updated for version 5.6.2. Signed-off-by: Robby Workman --- libraries/UMFPACK/UMFPACK.SlackBuild | 26 +- libraries/UMFPACK/UMFPACK.info | 10 +- libraries/UMFPACK/atlas-threaded-blas.diff | 26 ++ libraries/UMFPACK/autotoolize.diff | 506 +++++++++++++++++------------ 4 files changed, 350 insertions(+), 218 deletions(-) create mode 100644 libraries/UMFPACK/atlas-threaded-blas.diff diff --git a/libraries/UMFPACK/UMFPACK.SlackBuild b/libraries/UMFPACK/UMFPACK.SlackBuild index 530b089c67..163f454c9e 100644 --- a/libraries/UMFPACK/UMFPACK.SlackBuild +++ b/libraries/UMFPACK/UMFPACK.SlackBuild @@ -1,10 +1,29 @@ #!/bin/sh # Slackware build script for UMFPACK -# Written by Kyle Guinn + +# Copyright 2013 Kyle Guinn , 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=UMFPACK -VERSION=${VERSION:-5.5.1} +VERSION=${VERSION:-5.6.2} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} @@ -56,6 +75,7 @@ find -L . \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; patch -p1 < $CWD/autotoolize.diff +patch -p1 < $CWD/atlas-threaded-blas.diff autoreconf -vif CFLAGS="$SLKCFLAGS" \ @@ -70,9 +90,11 @@ FFLAGS="$SLKCFLAGS" \ --docdir=/usr/doc/$PRGNAM-$VERSION \ --enable-shared \ --disable-static \ + --disable-dependency-tracking \ --build=$ARCH-slackware-linux make +make check make install-strip DESTDIR=$PKG mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION diff --git a/libraries/UMFPACK/UMFPACK.info b/libraries/UMFPACK/UMFPACK.info index 9dbfa62003..cc0d268eeb 100644 --- a/libraries/UMFPACK/UMFPACK.info +++ b/libraries/UMFPACK/UMFPACK.info @@ -1,10 +1,10 @@ PRGNAM="UMFPACK" -VERSION="5.5.1" -HOMEPAGE="http://www.cise.ufl.edu/research/sparse/umfpack/" -DOWNLOAD="http://www.cise.ufl.edu/research/sparse/umfpack/UMFPACK-5.5.1.tar.gz" -MD5SUM="cb13431ce9cf2b515d1f889f329f4558" +VERSION="5.6.2" +HOMEPAGE="https://www.cise.ufl.edu/research/sparse/umfpack/" +DOWNLOAD="https://www.cise.ufl.edu/research/sparse/umfpack/UMFPACK-5.6.2.tar.gz" +MD5SUM="8d16f73dd16216f0d2ebb54460ae10a0" DOWNLOAD_x86_64="" MD5SUM_x86_64="" -REQUIRES="CHOLMOD" +REQUIRES="blas SuiteSparse_config AMD CHOLMOD" MAINTAINER="Kyle Guinn" EMAIL="elyk03@gmail.com" diff --git a/libraries/UMFPACK/atlas-threaded-blas.diff b/libraries/UMFPACK/atlas-threaded-blas.diff new file mode 100644 index 0000000000..e7f34ef011 --- /dev/null +++ b/libraries/UMFPACK/atlas-threaded-blas.diff @@ -0,0 +1,26 @@ +diff --git a/ax_blas.m4 b/ax_blas.m4 +--- a/ax_blas.m4 ++++ b/ax_blas.m4 +@@ -117,12 +117,16 @@ + # BLAS in ATLAS library? (http://math-atlas.sourceforge.net/) + if test $ax_blas_ok = no; then + AC_CHECK_LIB(atlas, ATL_xerbla, +- [AC_CHECK_LIB(f77blas, $sgemm, +- [AC_CHECK_LIB(cblas, cblas_dgemm, +- [ax_blas_ok=yes +- BLAS_LIBS="-lcblas -lf77blas -latlas"], +- [], [-lf77blas -latlas])], +- [], [-latlas])]) ++ [AC_CHECK_LIB(ptf77blas, $sgemm, ++ [AC_CHECK_LIB(ptcblas, cblas_dgemm, ++ [ax_blas_ok=yes; BLAS_LIBS="-lptcblas -lptf77blas -latlas"],, ++ [-lptf77blas -latlas])], ++ [AC_CHECK_LIB(f77blas, $sgemm, ++ [AC_CHECK_LIB(cblas, cblas_dgemm, ++ [ax_blas_ok=yes; BLAS_LIBS="-lcblas -lf77blas -latlas"],, ++ [-lf77blas -latlas])],, ++ [-latlas])], ++ [-latlas])]) + fi + + # BLAS in PhiPACK libraries? (requires generic BLAS lib, too) diff --git a/libraries/UMFPACK/autotoolize.diff b/libraries/UMFPACK/autotoolize.diff index 20dc1039cd..f2879a07cf 100644 --- a/libraries/UMFPACK/autotoolize.diff +++ b/libraries/UMFPACK/autotoolize.diff @@ -3,7 +3,7 @@ new file mode 100644 --- /dev/null +++ b/Demo/Makefile.am @@ -0,0 +1,152 @@ -+AM_CPPFLAGS = -I$(top_srcdir)/Include $(AMD_CFLAGS) $(UFCONFIG_CFLAGS) ++AM_CPPFLAGS = -I$(top_srcdir)/Include $(AMD_CFLAGS) $(SUITESPARSECONFIG_CFLAGS) +LDADD = $(top_builddir)/Source/libumfpack.la + +EXTRA_DIST = \ @@ -113,53 +113,53 @@ new file mode 100644 +libumf4_f77wrapper64_la_CPPFLAGS = $(AM_CPPFLAGS) -DDLONG + +libumf4_f77zwrapper64_la_SOURCES = umf4_f77zwrapper.c -+libumf4_f77zwrapper64_la_CPPFLAGS = $(AM_CPPFLAGS) -DDLONG ++libumf4_f77zwrapper64_la_CPPFLAGS = $(AM_CPPFLAGS) -DZLONG + +check-local: $(SIMPLE) $(DEMO) $(DEMO:=.out) $(READHB) $(HB) $(UMF4) $(UMF4HB) $(UMF4HB:=.out) + ./umfpack_simple + ./umfpack_di_demo > my_umfpack_di_demo.out -+ -diff -u umfpack_di_demo.out my_umfpack_di_demo.out ++ -diff -u $(srcdir)/umfpack_di_demo.out my_umfpack_di_demo.out + ./umfpack_dl_demo > my_umfpack_dl_demo.out -+ -diff -u umfpack_dl_demo.out my_umfpack_dl_demo.out ++ -diff -u $(srcdir)/umfpack_dl_demo.out my_umfpack_dl_demo.out + ./umfpack_zi_demo > my_umfpack_zi_demo.out -+ -diff -u umfpack_zi_demo.out my_umfpack_zi_demo.out ++ -diff -u $(srcdir)/umfpack_zi_demo.out my_umfpack_zi_demo.out + ./umfpack_zl_demo > my_umfpack_zl_demo.out -+ -diff -u umfpack_zl_demo.out my_umfpack_zl_demo.out -+ -./readhb_nozeros < HB/can_24.psa > tmp/A -+ -./readhb_size < HB/can_24.psa > tmp/Asize ++ -diff -u $(srcdir)/umfpack_zl_demo.out my_umfpack_zl_demo.out ++ -$(MKDIR_P) tmp ++ -./readhb_nozeros < $(srcdir)/HB/can_24.psa > tmp/A ++ -./readhb_size < $(srcdir)/HB/can_24.psa > tmp/Asize + -./umf4 -+ -./readhb_nozeros < HB/west0067.rua > tmp/A -+ -./readhb_size < HB/west0067.rua > tmp/Asize ++ -./readhb_nozeros < $(srcdir)/HB/west0067.rua > tmp/A ++ -./readhb_size < $(srcdir)/HB/west0067.rua > tmp/Asize + -./umf4 -+ -./readhb_nozeros < HB/fs_183_6.rua > tmp/A -+ -./readhb_size < HB/fs_183_6.rua > tmp/Asize ++ -./readhb_nozeros < $(srcdir)/HB/fs_183_6.rua > tmp/A ++ -./readhb_size < $(srcdir)/HB/fs_183_6.rua > tmp/Asize + -./umf4 -+ -./readhb < HB/fs_183_6.rua > tmp/A -+ -./readhb_size < HB/fs_183_6.rua > tmp/Asize ++ -./readhb < $(srcdir)/HB/fs_183_6.rua > tmp/A ++ -./readhb_size < $(srcdir)/HB/fs_183_6.rua > tmp/Asize + -./umf4 -+ -./readhb < HB/arc130.rua > tmp/A -+ -./readhb_size < HB/arc130.rua > tmp/Asize ++ -./readhb < $(srcdir)/HB/arc130.rua > tmp/A ++ -./readhb_size < $(srcdir)/HB/arc130.rua > tmp/Asize + -./umf4 -+ -./readhb_nozeros < HB/arc130.rua > tmp/A -+ -./readhb_size < HB/arc130.rua > tmp/Asize ++ -./readhb_nozeros < $(srcdir)/HB/arc130.rua > tmp/A ++ -./readhb_size < $(srcdir)/HB/arc130.rua > tmp/Asize + -./umf4 -+ -./readhb_nozeros < HB/arc130.rua > tmp/A -+ -./readhb_size < HB/arc130.rua > tmp/Asize ++ -./readhb_nozeros < $(srcdir)/HB/arc130.rua > tmp/A ++ -./readhb_size < $(srcdir)/HB/arc130.rua > tmp/Asize + -./umf4 a 1e-6 -+ -./umf4hb < HB/west0067.rua > my_umf4hb.out -+ -diff -u umf4hb.out my_umf4hb.out -+ -./umf4zhb < HB/qc324.cua > my_umf4zhb.out -+ -diff -u umf4zhb.out my_umf4zhb.out -+ -./umf4hb64 < HB/west0067.rua > my_umf4hb64.out -+ -diff -u umf4hb64.out my_umf4hb64.out -+ -+clean-local: -+ -$(RM) my_*.out ++ -./umf4hb < $(srcdir)/HB/west0067.rua > my_umf4hb.out ++ -diff -u $(srcdir)/umf4hb.out my_umf4hb.out ++ -./umf4zhb < $(srcdir)/HB/qc324.cua > my_umf4zhb.out ++ -diff -u $(srcdir)/umf4zhb.out my_umf4zhb.out ++ -./umf4hb64 < $(srcdir)/HB/west0067.rua > my_umf4hb64.out ++ -diff -u $(srcdir)/umf4hb64.out my_umf4hb64.out ++ ++CLEANFILES = my_*.out *.umf tmp/* tmp diff --git a/Doc/Makefile.am b/Doc/Makefile.am new file mode 100644 --- /dev/null +++ b/Doc/Makefile.am -@@ -0,0 +1,66 @@ +@@ -0,0 +1,97 @@ +EXTRA_DIST = \ + ChangeLog \ + License \ @@ -172,66 +172,96 @@ new file mode 100644 + UserGuide.sed2 \ + UserGuide.stex + -+pdf_DATA = \ ++dist_pdf_DATA = \ + QuickStart.pdf \ + UserGuide.pdf + ++# Unlike UserGuide.sed1, use \input{filename.tex} to insert the source code ++# which we will construct below. Also remove the \begin{verbatim} and ++# \end{verbatim} on the adjacent lines and add them to filename.tex. ++define sed1 = ++sed -e ':more;$$!N;s/\n/&/2;t enough;$$!b more;:enough;/^\\begin{verbatim}\nINCLUDE umfpack\(.*\)\.\([ch]\) via sed\n\\end{verbatim}$$/s//\\input{\1_\2.tex}/;P;D' $< > $@ ++endef ++ ++# UserGuide.sed2 currently strips out C-style comments. In some cases it ++# strips out too much due to formatting; we'll leave that for upstream to fix. ++define sed2 = ++echo '\begin{verbatim}' > $@ ++sed -e '/[/][*]/d' -e '/[*][/]/d' < $< | expand -8 >> $@ ++echo '\end{verbatim}' >> $@ ++endef ++ ++UserGuide.tex: $(srcdir)/UserGuide.stex ++ $(sed1) ++ ++_simple_c.tex: $(top_srcdir)/Demo/umfpack_simple.c ++ $(sed2) ++%_h.tex: $(top_srcdir)/Include/umfpack%.h ++ $(sed2) ++ +SRC = \ -+ ../Demo/umfpack_simple.c \ -+ ../Include/umfpack_col_to_triplet.h \ -+ ../Include/umfpack_defaults.h \ -+ ../Include/umfpack_free_numeric.h \ -+ ../Include/umfpack_free_symbolic.h \ -+ ../Include/umfpack_get_determinant.h \ -+ ../Include/umfpack_get_lunz.h \ -+ ../Include/umfpack_get_numeric.h \ -+ ../Include/umfpack_get_symbolic.h \ -+ ../Include/umfpack_load_numeric.h \ -+ ../Include/umfpack_load_symbolic.h \ -+ ../Include/umfpack_numeric.h \ -+ ../Include/umfpack_qsymbolic.h \ -+ ../Include/umfpack_report_control.h \ -+ ../Include/umfpack_report_info.h \ -+ ../Include/umfpack_report_matrix.h \ -+ ../Include/umfpack_report_numeric.h \ -+ ../Include/umfpack_report_perm.h \ -+ ../Include/umfpack_report_status.h \ -+ ../Include/umfpack_report_symbolic.h \ -+ ../Include/umfpack_report_triplet.h \ -+ ../Include/umfpack_report_vector.h \ -+ ../Include/umfpack_save_numeric.h \ -+ ../Include/umfpack_save_symbolic.h \ -+ ../Include/umfpack_scale.h \ -+ ../Include/umfpack_solve.h \ -+ ../Include/umfpack_symbolic.h \ -+ ../Include/umfpack_tictoc.h \ -+ ../Include/umfpack_timer.h \ -+ ../Include/umfpack_transpose.h \ -+ ../Include/umfpack_triplet_to_col.h \ -+ ../Include/umfpack_wsolve.h -+ -+UserGuide.tex: UserGuide.stex UserGuide.sed1 UserGuide.sed2 $(SRC) -+ sed -f UserGuide.sed1 < UserGuide.stex | sed -f UserGuide.sed2 | expand -8 > $@ -+ -+%.pdf: %.tex %.bib -+ pdflatex $* -+ bibtex $* -+ pdflatex $* -+ pdflatex $* -+ -+%.pdf: %.tex -+ pdflatex $* -+ pdflatex $* -+ -+clean-local: -+ -$(RM) *.aux *.bbl *.blg *.log *.toc -+ -$(RM) UserGuide.tex ++ _simple_c.tex \ ++ _col_to_triplet_h.tex \ ++ _defaults_h.tex \ ++ _free_numeric_h.tex \ ++ _free_symbolic_h.tex \ ++ _get_determinant_h.tex \ ++ _get_lunz_h.tex \ ++ _get_numeric_h.tex \ ++ _get_symbolic_h.tex \ ++ _load_numeric_h.tex \ ++ _load_symbolic_h.tex \ ++ _numeric_h.tex \ ++ _qsymbolic_h.tex \ ++ _report_control_h.tex \ ++ _report_info_h.tex \ ++ _report_matrix_h.tex \ ++ _report_numeric_h.tex \ ++ _report_perm_h.tex \ ++ _report_status_h.tex \ ++ _report_symbolic_h.tex \ ++ _report_triplet_h.tex \ ++ _report_vector_h.tex \ ++ _save_numeric_h.tex \ ++ _save_symbolic_h.tex \ ++ _scale_h.tex \ ++ _solve_h.tex \ ++ _symbolic_h.tex \ ++ _tictoc_h.tex \ ++ _timer_h.tex \ ++ _transpose_h.tex \ ++ _triplet_to_col_h.tex \ ++ _wsolve_h.tex ++ ++.INTERMEDIATE: UserGuide.tex $(SRC) ++UserGuide.tex: $(SRC) ++ ++TEX = TEXINPUTS="$(srcdir):" pdflatex -interaction nonstopmode -file-line-error ++BIB = BIBINPUTS="$(srcdir):" bibtex ++%.pdf: %.tex %.bbl ++ $(TEX) $* ++ while grep -q "Rerun to get cross-references right" $*.log; do \ ++ $(TEX) $*; \ ++ done ++%.bbl: %.aux %.bib ++ $(BIB) $* ++%.aux: %.tex ++ $(TEX) $* ++ ++# QuickStart does not include a bibliography, so the above rule won't work. ++QuickStart.pdf: %.pdf: %.tex ++ $(TEX) $* ++ while grep -q "Rerun to get cross-references right" $*.log; do \ ++ $(TEX) $*; \ ++ done ++ ++CLEANFILES = *.aux *.bbl *.blg *.log *.toc UserGuide.tex ++MAINTAINERCLEANFILES = $(dist_pdf_DATA) diff --git a/Include/Makefile.am b/Include/Makefile.am new file mode 100644 --- /dev/null +++ b/Include/Makefile.am -@@ -0,0 +1,35 @@ -+pkgincludedir = $(includedir)/umfpack +@@ -0,0 +1,34 @@ +pkginclude_HEADERS = \ + umfpack.h \ + umfpack_col_to_triplet.h \ @@ -280,9 +310,8 @@ diff --git a/Source/Makefile.am b/Source/Makefile.am new file mode 100644 --- /dev/null +++ b/Source/Makefile.am -@@ -0,0 +1,315 @@ -+AM_CPPFLAGS = -I$(top_srcdir)/Include $(CHOLMOD_CFLAGS) $(AMD_CFLAGS) $(UFCONFIG_CFLAGS) -+AM_CPPFLAGS += $(UMFPACK_NCHOLMOD) +@@ -0,0 +1,318 @@ ++AM_CPPFLAGS = -I$(top_srcdir)/Include $(CHOLMOD_CFLAGS) $(AMD_CFLAGS) $(SUITESPARSECONFIG_CFLAGS) + +# non-user-callable umf_*.[ch] files: +UMF = \ @@ -325,7 +354,7 @@ new file mode 100644 + umf_valid_symbolic.c + +# non-user-callable umf_*.[ch] files -+# int/UF_long versions only (no real/complex): ++# int/SuiteSparse_long versions only (no real/complex): +UMFINT = \ + umf_analyze.c \ + umf_apply_order.c \ @@ -340,7 +369,7 @@ new file mode 100644 + umf_singletons.c + +# user-callable umfpack_*.c files -+# (int/UF_long and real/complex): ++# (int/SuiteSparse_long and real/complex): +UMFPACK = \ + umfpack_col_to_triplet.c \ + umfpack_defaults.c \ @@ -372,7 +401,7 @@ new file mode 100644 + umfpack_triplet_to_col.c + +# user-callable umfpack_*.c files -+# only one version for int/UF_long, real/complex: ++# only one version for int/SuiteSparse_long, real/complex: +GENERIC = \ + umfpack_timer.c \ + umfpack_tictoc.c \ @@ -426,13 +455,21 @@ new file mode 100644 + libumfpack_zl_wsolve.la \ + libumfpack_zl.la + -+# compile each int and UF_long routine (with no real/complex version) ++# compile each int and SuiteSparse_long routine (with no real/complex version) +libumf_i_la_SOURCES = $(UMFINT) +libumf_i_la_CPPFLAGS = $(AM_CPPFLAGS) -DDINT + +libumf_l_la_SOURCES = $(UMFINT) +libumf_l_la_CPPFLAGS = $(AM_CPPFLAGS) -DDLONG + ++if CHOLMOD ++libumf_i_la_LIBADD = $(CHOLMOD_LIBS) ++libumf_l_la_LIBADD = $(CHOLMOD_LIBS) ++else ++libumf_i_la_CPPFLAGS += -DNCHOLMOD ++libumf_l_la_CPPFLAGS += -DNCHOLMOD ++endif ++ +# compile each routine in the DI version +libumf_di_hsolve_la_SOURCES = umf_ltsolve.c umf_utsolve.c +libumf_di_hsolve_la_CPPFLAGS = $(AM_CPPFLAGS) -DDINT -DCONJUGATE_SOLVE @@ -589,102 +626,93 @@ new file mode 100644 + libumf_di.la libumfpack_di.la \ + libumf_dl.la libumfpack_dl.la \ + libumf_zi.la libumfpack_zi.la \ -+ libumf_zl.la libumfpack_zl.la -+ -+if CHOLMOD -+libumfpack_la_LIBADD += $(CHOLMOD_LIBS) -+endif -+libumfpack_la_LIBADD += $(AMD_LIBS) $(BLAS_LIBS) -lm -+libumfpack_la_LDFLAGS = -no-undefined -version-info 10:1:5 -diff --git a/acx_blas.m4 b/acx_blas.m4 ++ libumf_zl.la libumfpack_zl.la \ ++ $(AMD_LIBS) $(SUITESPARSECONFIG_LIBS) $(BLAS_LIBS) -lm ++libumfpack_la_LDFLAGS = -no-undefined -version-number 5:6:2 +diff --git a/ax_blas.m4 b/ax_blas.m4 new file mode 100644 --- /dev/null -+++ b/acx_blas.m4 -@@ -0,0 +1,191 @@ -+##### http://autoconf-archive.cryp.to/acx_blas.html ++++ b/ax_blas.m4 +@@ -0,0 +1,238 @@ ++# =========================================================================== ++# http://www.gnu.org/software/autoconf-archive/ax_blas.html ++# =========================================================================== +# +# SYNOPSIS +# -+# ACX_BLAS([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) ++# AX_BLAS([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +# +# DESCRIPTION +# -+# This macro looks for a library that implements the BLAS -+# linear-algebra interface (see http://www.netlib.org/blas/). On -+# success, it sets the BLAS_LIBS output variable to hold the -+# requisite library linkages. ++# This macro looks for a library that implements the BLAS linear-algebra ++# interface (see http://www.netlib.org/blas/). On success, it sets the ++# BLAS_LIBS output variable to hold the requisite library linkages. +# +# To link with BLAS, you should link with: +# -+# $BLAS_LIBS $LIBS $FLIBS ++# $BLAS_LIBS $LIBS $FLIBS +# +# in that order. FLIBS is the output variable of the -+# AC_F77_LIBRARY_LDFLAGS macro (called if necessary by ACX_BLAS), and -+# is sometimes necessary in order to link with F77 libraries. Users -+# will also need to use AC_F77_DUMMY_MAIN (see the autoconf manual), -+# for the same reason. -+# -+# Many libraries are searched for, from ATLAS to CXML to ESSL. The -+# user may also use --with-blas= in order to use some specific -+# BLAS library . In order to link successfully, however, be -+# aware that you will probably need to use the same Fortran compiler -+# (which can be set via the F77 env. var.) as was used to compile the -+# BLAS library. -+# -+# ACTION-IF-FOUND is a list of shell commands to run if a BLAS -+# library is found, and ACTION-IF-NOT-FOUND is a list of commands to -+# run it if it is not found. If ACTION-IF-FOUND is not specified, the -+# default action will define HAVE_BLAS. -+# -+# This macro requires autoconf 2.50 or later. ++# AC_F77_LIBRARY_LDFLAGS macro (called if necessary by AX_BLAS), and is ++# sometimes necessary in order to link with F77 libraries. Users will also ++# need to use AC_F77_DUMMY_MAIN (see the autoconf manual), for the same ++# reason. +# -+# LAST MODIFICATION ++# Many libraries are searched for, from ATLAS to CXML to ESSL. The user ++# may also use --with-blas= in order to use some specific BLAS ++# library . In order to link successfully, however, be aware that you ++# will probably need to use the same Fortran compiler (which can be set ++# via the F77 env. var.) as was used to compile the BLAS library. +# -+# 2007-07-29 ++# ACTION-IF-FOUND is a list of shell commands to run if a BLAS library is ++# found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it is ++# not found. If ACTION-IF-FOUND is not specified, the default action will ++# define HAVE_BLAS. +# -+# COPYLEFT ++# LICENSE +# -+# Copyright (c) 2007 Steven G. Johnson ++# Copyright (c) 2008 Steven G. Johnson +# -+# This program is free software: you can redistribute it and/or -+# modify it under the terms of the GNU General Public License as -+# published by the Free Software Foundation, either version 3 of the -+# License, or (at your option) any later version. ++# This program is free software: you can redistribute it and/or modify it ++# under the terms of the GNU General Public License as published by the ++# Free Software Foundation, either version 3 of the License, or (at your ++# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+# General Public License for more details. ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General ++# Public License for more details. +# -+# You should have received a copy of the GNU General Public License -+# along with this program. If not, see -+# . ++# You should have received a copy of the GNU General Public License along ++# with this program. If not, see . +# -+# As a special exception, the respective Autoconf Macro's copyright -+# owner gives unlimited permission to copy, distribute and modify the -+# configure scripts that are the output of Autoconf when processing -+# the Macro. You need not follow the terms of the GNU General Public -+# License when using or distributing such scripts, even though -+# portions of the text of the Macro appear in them. The GNU General -+# Public License (GPL) does govern all other use of the material that -+# constitutes the Autoconf Macro. ++# As a special exception, the respective Autoconf Macro's copyright owner ++# gives unlimited permission to copy, distribute and modify the configure ++# scripts that are the output of Autoconf when processing the Macro. You ++# need not follow the terms of the GNU General Public License when using ++# or distributing such scripts, even though portions of the text of the ++# Macro appear in them. The GNU General Public License (GPL) does govern ++# all other use of the material that constitutes the Autoconf Macro. +# -+# This special exception to the GPL applies to versions of the -+# Autoconf Macro released by the Autoconf Macro Archive. When you -+# make and distribute a modified version of the Autoconf Macro, you -+# may extend this special exception to the GPL to apply to your -+# modified version as well. ++# This special exception to the GPL applies to versions of the Autoconf ++# Macro released by the Autoconf Archive. When you make and distribute a ++# modified version of the Autoconf Macro, you may extend this special ++# exception to the GPL to apply to your modified version as well. + -+AC_DEFUN([ACX_BLAS], [ ++#serial 14 ++ ++AU_ALIAS([ACX_BLAS], [AX_BLAS]) ++AC_DEFUN([AX_BLAS], [ +AC_PREREQ(2.50) +AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS]) -+acx_blas_ok=no ++AC_REQUIRE([AC_CANONICAL_HOST]) ++ax_blas_ok=no + +AC_ARG_WITH(blas, -+ [AC_HELP_STRING([--with-blas=], [use BLAS library ])]) ++ [AS_HELP_STRING([--with-blas=], [use BLAS library ])]) +case $with_blas in + yes | "") ;; -+ no) acx_blas_ok=disable ;; ++ no) ax_blas_ok=disable ;; + -* | */* | *.a | *.so | *.so.* | *.o) BLAS_LIBS="$with_blas" ;; + *) BLAS_LIBS="-l$with_blas" ;; +esac @@ -693,117 +721,173 @@ new file mode 100644 +AC_F77_FUNC(sgemm) +AC_F77_FUNC(dgemm) + -+acx_blas_save_LIBS="$LIBS" ++ax_blas_save_LIBS="$LIBS" +LIBS="$LIBS $FLIBS" + +# First, check BLAS_LIBS environment variable -+if test $acx_blas_ok = no; then ++if test $ax_blas_ok = no; then +if test "x$BLAS_LIBS" != x; then + save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS" + AC_MSG_CHECKING([for $sgemm in $BLAS_LIBS]) -+ AC_TRY_LINK_FUNC($sgemm, [acx_blas_ok=yes], [BLAS_LIBS=""]) -+ AC_MSG_RESULT($acx_blas_ok) ++ AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes], [BLAS_LIBS=""]) ++ AC_MSG_RESULT($ax_blas_ok) + LIBS="$save_LIBS" +fi +fi + +# BLAS linked to by default? (happens on some supercomputers) -+if test $acx_blas_ok = no; then ++if test $ax_blas_ok = no; then + save_LIBS="$LIBS"; LIBS="$LIBS" -+ AC_CHECK_FUNC($sgemm, [acx_blas_ok=yes]) ++ AC_MSG_CHECKING([if $sgemm is being linked in already]) ++ AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes]) ++ AC_MSG_RESULT($ax_blas_ok) + LIBS="$save_LIBS" +fi + ++# BLAS in OpenBLAS library? (http://xianyi.github.com/OpenBLAS/) ++if test $ax_blas_ok = no; then ++ AC_CHECK_LIB(openblas, $sgemm, [ax_blas_ok=yes ++ BLAS_LIBS="-lopenblas"]) ++fi ++ +# BLAS in ATLAS library? (http://math-atlas.sourceforge.net/) -+if test $acx_blas_ok = no; then ++if test $ax_blas_ok = no; then + AC_CHECK_LIB(atlas, ATL_xerbla, + [AC_CHECK_LIB(f77blas, $sgemm, + [AC_CHECK_LIB(cblas, cblas_dgemm, -+ [acx_blas_ok=yes ++ [ax_blas_ok=yes + BLAS_LIBS="-lcblas -lf77blas -latlas"], + [], [-lf77blas -latlas])], + [], [-latlas])]) +fi + +# BLAS in PhiPACK libraries? (requires generic BLAS lib, too) -+if test $acx_blas_ok = no; then ++if test $ax_blas_ok = no; then + AC_CHECK_LIB(blas, $sgemm, + [AC_CHECK_LIB(dgemm, $dgemm, + [AC_CHECK_LIB(sgemm, $sgemm, -+ [acx_blas_ok=yes; BLAS_LIBS="-lsgemm -ldgemm -lblas"], ++ [ax_blas_ok=yes; BLAS_LIBS="-lsgemm -ldgemm -lblas"], + [], [-lblas])], + [], [-lblas])]) +fi + ++# BLAS in Intel MKL library? ++if test $ax_blas_ok = no; then ++ # MKL for gfortran ++ if test x"$ac_cv_fc_compiler_gnu" = xyes; then ++ # 64 bit ++ if test $host_cpu = x86_64; then ++ AC_CHECK_LIB(mkl_gf_lp64, $sgemm, ++ [ax_blas_ok=yes;BLAS_LIBS="-lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lpthread"],, ++ [-lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lpthread]) ++ # 32 bit ++ elif test $host_cpu = i686; then ++ AC_CHECK_LIB(mkl_gf, $sgemm, ++ [ax_blas_ok=yes;BLAS_LIBS="-lmkl_gf -lmkl_sequential -lmkl_core -lpthread"],, ++ [-lmkl_gf -lmkl_sequential -lmkl_core -lpthread]) ++ fi ++ # MKL for other compilers (Intel, PGI, ...?) ++ else ++ # 64-bit ++ if test $host_cpu = x86_64; then ++ AC_CHECK_LIB(mkl_intel_lp64, $sgemm, ++ [ax_blas_ok=yes;BLAS_LIBS="-lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread"],, ++ [-lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread]) ++ # 32-bit ++ elif test $host_cpu = i686; then ++ AC_CHECK_LIB(mkl_intel, $sgemm, ++ [ax_blas_ok=yes;BLAS_LIBS="-lmkl_intel -lmkl_sequential -lmkl_core -lpthread"],, ++ [-lmkl_intel -lmkl_sequential -lmkl_core -lpthread]) ++ fi ++ fi ++fi ++# Old versions of MKL ++if test $ax_blas_ok = no; then ++ AC_CHECK_LIB(mkl, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lmkl -lguide -lpthread"],,[-lguide -lpthread]) ++fi ++ ++# BLAS in Apple vecLib library? ++if test $ax_blas_ok = no; then ++ save_LIBS="$LIBS"; LIBS="-framework vecLib $LIBS" ++ AC_MSG_CHECKING([for $sgemm in -framework vecLib]) ++ AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes;BLAS_LIBS="-framework vecLib"]) ++ AC_MSG_RESULT($ax_blas_ok) ++ LIBS="$save_LIBS" ++fi ++ +# BLAS in Alpha CXML library? -+if test $acx_blas_ok = no; then -+ AC_CHECK_LIB(cxml, $sgemm, [acx_blas_ok=yes;BLAS_LIBS="-lcxml"]) ++if test $ax_blas_ok = no; then ++ AC_CHECK_LIB(cxml, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lcxml"]) +fi + +# BLAS in Alpha DXML library? (now called CXML, see above) -+if test $acx_blas_ok = no; then -+ AC_CHECK_LIB(dxml, $sgemm, [acx_blas_ok=yes;BLAS_LIBS="-ldxml"]) ++if test $ax_blas_ok = no; then ++ AC_CHECK_LIB(dxml, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-ldxml"]) +fi + +# BLAS in Sun Performance library? -+if test $acx_blas_ok = no; then ++if test $ax_blas_ok = no; then + if test "x$GCC" != xyes; then # only works with Sun CC + AC_CHECK_LIB(sunmath, acosp, + [AC_CHECK_LIB(sunperf, $sgemm, -+ [BLAS_LIBS="-xlic_lib=sunperf -lsunmath" -+ acx_blas_ok=yes],[],[-lsunmath])]) ++ [BLAS_LIBS="-xlic_lib=sunperf -lsunmath" ++ ax_blas_ok=yes],[],[-lsunmath])]) + fi +fi + +# BLAS in SCSL library? (SGI/Cray Scientific Library) -+if test $acx_blas_ok = no; then -+ AC_CHECK_LIB(scs, $sgemm, [acx_blas_ok=yes; BLAS_LIBS="-lscs"]) ++if test $ax_blas_ok = no; then ++ AC_CHECK_LIB(scs, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lscs"]) +fi + +# BLAS in SGIMATH library? -+if test $acx_blas_ok = no; then ++if test $ax_blas_ok = no; then + AC_CHECK_LIB(complib.sgimath, $sgemm, -+ [acx_blas_ok=yes; BLAS_LIBS="-lcomplib.sgimath"]) ++ [ax_blas_ok=yes; BLAS_LIBS="-lcomplib.sgimath"]) +fi + +# BLAS in IBM ESSL library? (requires generic BLAS lib, too) -+if test $acx_blas_ok = no; then ++if test $ax_blas_ok = no; then + AC_CHECK_LIB(blas, $sgemm, + [AC_CHECK_LIB(essl, $sgemm, -+ [acx_blas_ok=yes; BLAS_LIBS="-lessl -lblas"], ++ [ax_blas_ok=yes; BLAS_LIBS="-lessl -lblas"], + [], [-lblas $FLIBS])]) +fi + +# Generic BLAS library? -+if test $acx_blas_ok = no; then -+ AC_CHECK_LIB(blas, $sgemm, [acx_blas_ok=yes; BLAS_LIBS="-lblas"]) ++if test $ax_blas_ok = no; then ++ AC_CHECK_LIB(blas, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lblas"]) +fi + +AC_SUBST(BLAS_LIBS) + -+LIBS="$acx_blas_save_LIBS" ++LIBS="$ax_blas_save_LIBS" + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -+if test x"$acx_blas_ok" = xyes; then ++if test x"$ax_blas_ok" = xyes; then + ifelse([$1],,AC_DEFINE(HAVE_BLAS,1,[Define if you have a BLAS library.]),[$1]) + : +else -+ acx_blas_ok=no ++ ax_blas_ok=no + $2 +fi -+])dnl ACX_BLAS ++])dnl AX_BLAS diff --git a/configure.ac b/configure.ac new file mode 100644 --- /dev/null +++ b/configure.ac -@@ -0,0 +1,72 @@ -+AC_PREREQ([2.68]) -+AC_INIT([UMFPACK],[5.5.1],[davis@cise.ufl.edu]) +@@ -0,0 +1,75 @@ ++# -*- Autoconf -*- ++# Process this file with autoconf to produce a configure script. ++ ++AC_PREREQ([2.69]) ++AC_INIT([UMFPACK],[5.6.2],[DrTimothyAldenDavis@gmail.com],[umfpack],[http://www.suitesparse.com/]) +AC_CONFIG_SRCDIR([Source/umfpack_global.c]) -+AC_CONFIG_HEADER([config.h]) ++AC_CONFIG_HEADERS([config.h]) +AM_INIT_AUTOMAKE([foreign]) +LT_INIT + ++# Checks for programs. +AC_PROG_INSTALL +AC_PROG_CC +AC_PROG_F77 @@ -811,53 +895,52 @@ new file mode 100644 +AC_MSG_CHECKING([whether to use cholmod]) +AC_ARG_WITH([cholmod], + [AS_HELP_STRING( -+ [--with-cholmod], -+ [Use CHOLMOD for ordering methods @<:@default=yes@:>@])], -+ [with_cholmod=$withval], -+ [with_cholmod="yes"]) -+AC_MSG_RESULT([$with_cholmod]) -+ -+if test "x$with_cholmod" = "xno"; then -+ AC_DEFINE([NCHOLMOD], [], [Define to disable CHOLMOD]) -+ AC_SUBST([UMFPACK_NCHOLMOD], ["-DNCHOLMOD"]) -+fi ++ [--without-cholmod], ++ [do not use CHOLMOD for ordering methods])], ++ [cholmod=$withval], ++ [cholmod="yes"]) ++AC_MSG_RESULT([$cholmod]) + +LIBS_SAVED=$LIBS + ++# Checks for libraries. +AC_CHECK_LIB([m], [sqrt]) + -+AC_CHECK_HEADERS([float.h stdlib.h string.h sys/time.h unistd.h]) ++sinclude(ax_blas.m4) ++AX_BLAS ++if test "x$ax_blas_ok" != "xyes"; then ++ AC_MSG_ERROR([cannot find blas]) ++fi + +PKG_PROG_PKG_CONFIG -+PKG_CHECK_MODULES([UFCONFIG],[ufconfig], ++PKG_CHECK_MODULES([SUITESPARSECONFIG],[suitesparseconfig], + [], -+ [AC_MSG_ERROR([cannot find ufconfig])]) ++ [AC_MSG_ERROR([cannot find suitesparseconfig])]) +PKG_CHECK_MODULES([AMD],[amd], + [], + [AC_MSG_ERROR([cannot find amd])]) -+UMFPACK_REQUIRES="ufconfig amd" ++UMFPACK_REQUIRES="suitesparseconfig amd" + -+sinclude(acx_blas.m4) -+ACX_BLAS -+if test "x$BLAS_LIBS" = "x"; then -+ AC_MSG_ERROR([cannot find blas libraries]) -+fi -+ -+if test "x$with_cholmod" = "xyes"; then ++if test "x$cholmod" = "xyes"; then + PKG_CHECK_MODULES([CHOLMOD],[cholmod], + [UMFPACK_REQUIRES="$UMFPACK_REQUIRES cholmod"], + [AC_MSG_ERROR([cannot find cholmod])]) +fi + ++# Checks for header files. ++AC_CHECK_HEADERS([float.h stdlib.h string.h]) ++ ++# Checks for typedefs, structures, and compiler characteristics. +AC_TYPE_SIZE_T + ++# Checks for library functions. +AC_FUNC_ERROR_AT_LINE +AC_FUNC_MALLOC -+AC_CHECK_FUNCS([clock_gettime pow sqrt]) ++AC_CHECK_FUNCS([pow sqrt]) + +LIBS=$LIBS_SAVED + -+AM_CONDITIONAL([CHOLMOD], [test "x$with_cholmod" = "xyes"]) ++AM_CONDITIONAL([CHOLMOD], [test "x$cholmod" = "xyes"]) + +AC_SUBST([UMFPACK_REQUIRES]) + @@ -873,7 +956,7 @@ diff --git a/umfpack.pc.in b/umfpack.pc.in new file mode 100644 --- /dev/null +++ b/umfpack.pc.in -@@ -0,0 +1,12 @@ +@@ -0,0 +1,13 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ @@ -882,6 +965,7 @@ new file mode 100644 +Name: @PACKAGE_NAME@ +Description: Sparse multifrontal LU factorization +Version: @PACKAGE_VERSION@ ++URL: @PACKAGE_URL@ +Requires.private: @UMFPACK_REQUIRES@ +Libs: -L${libdir} -lumfpack +Libs.private: @BLAS_LIBS@ -lm -- cgit v1.2.3