From 755ec5f5fc04d2e0c3ba470d84e68539ab22436043372ce2e6bef70c1f196e42 Mon Sep 17 00:00:00 2001 From: Todd R Date: Sun, 20 May 2018 15:51:10 +0000 Subject: [PATCH] Accepting request 610547 from home:TheBlackCat:branches:science - Update to SuiteSparse 5.2.0 - Use build-in build system instead of manually building everything - Simplify spec file - Add build_csparse_shared.patch to build CSparse as a shared library OBS-URL: https://build.opensuse.org/request/show/610547 OBS-URL: https://build.opensuse.org/package/show/science/suitesparse?expand=0&rev=11 --- SuiteSparse-4.5.5.tar.gz | 3 - SuiteSparse-5.2.0.tar.gz | 3 + build_csparse_shared.patch | 193 +++++++++++++++ suitesparse.changes | 31 +++ suitesparse.spec | 484 ++++++++++++++++++++----------------- 5 files changed, 487 insertions(+), 227 deletions(-) delete mode 100644 SuiteSparse-4.5.5.tar.gz create mode 100644 SuiteSparse-5.2.0.tar.gz create mode 100644 build_csparse_shared.patch diff --git a/SuiteSparse-4.5.5.tar.gz b/SuiteSparse-4.5.5.tar.gz deleted file mode 100644 index 4a5fa9f..0000000 --- a/SuiteSparse-4.5.5.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b9a98de0ddafe7659adffad8a58ca3911c1afa8b509355e7aa58b02feb35d9b6 -size 30309650 diff --git a/SuiteSparse-5.2.0.tar.gz b/SuiteSparse-5.2.0.tar.gz new file mode 100644 index 0000000..f2bd3ac --- /dev/null +++ b/SuiteSparse-5.2.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c46c035ea8217649958a0f73360e825b0c9dcca4e32a9349d2c7678c0d48813 +size 46053054 diff --git a/build_csparse_shared.patch b/build_csparse_shared.patch new file mode 100644 index 0000000..d56c7c1 --- /dev/null +++ b/build_csparse_shared.patch @@ -0,0 +1,193 @@ +From: toddrme2178@gmail.com +Date: 2018-03-07 +Subject: Build shared CSparse + +Upstream does not support installing CSparse as a shared library. +We need it is a shared library. This patch modifies the +makefil to make sure it is installed correctly. + + +--- a/CSparse/Demo/Makefile ++++ b/CSparse/Demo/Makefile +@@ -1,36 +1,48 @@ +-CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O +-I = -I../Include ++# CC = cc ++# CF = -O ++ ++default: all ++ ++include ../../SuiteSparse_config/SuiteSparse_config.mk + + LDLIBS += -lm +-CS = $(LDFLAGS) ../Lib/libcsparse.a $(LDLIBS) + +-all: lib cs_demo1 cs_demo2 cs_demo3 ++I = -I../../include ++ ++CS = $(LDFLAGS) -L../../lib -lcsparse $(LDLIBS) ++ ++all: library cs_demo1 cs_demo2 cs_demo3 \ ++ tests ++ ++library: ++ ( cd ../Lib ; $(MAKE) ) ++ ++tests: library test ++ ++test: cs_demo1 cs_demo2 cs_demo3 + - ./cs_demo1 < ../Matrix/t1 + - ./cs_demo2 < ../Matrix/t1 +- - ./cs_demo2 < ../Matrix/ash219 +- - ./cs_demo2 < ../Matrix/bcsstk01 + - ./cs_demo2 < ../Matrix/fs_183_1 +- - ./cs_demo2 < ../Matrix/mbeacxc + - ./cs_demo2 < ../Matrix/west0067 + - ./cs_demo2 < ../Matrix/lp_afiro +- - ./cs_demo2 < ../Matrix/bcsstk16 ++ - ./cs_demo2 < ../Matrix/ash219 ++ - ./cs_demo2 < ../Matrix/mbeacxc ++ - ./cs_demo2 < ../Matrix/bcsstk01 + - ./cs_demo3 < ../Matrix/bcsstk01 ++ - ./cs_demo2 < ../Matrix/bcsstk16 + - ./cs_demo3 < ../Matrix/bcsstk16 + +-lib: +- ( cd ../Lib ; $(MAKE) ) +- +-cs_demo1: lib cs_demo1.c Makefile ++cs_demo1: cs_demo1.c Makefile + $(CC) $(CF) $(I) -o cs_demo1 cs_demo1.c $(CS) + +-cs_demo2: lib cs_demo2.c cs_demo.c cs_demo.h Makefile ++cs_demo2: cs_demo2.c cs_demo.c cs_demo.h Makefile + $(CC) $(CF) $(I) -o cs_demo2 cs_demo2.c cs_demo.c $(CS) + +-cs_demo3: lib cs_demo3.c cs_demo.c cs_demo.h Makefile ++cs_demo3: cs_demo3.c cs_demo.c cs_demo.h Makefile + $(CC) $(CF) $(I) -o cs_demo3 cs_demo3.c cs_demo.c $(CS) + + clean: +- - $(RM) *.o ++ - $(RM) -r $(CLEAN) + + purge: distclean + + +--- a/CSparse/Lib/Makefile ++++ b/CSparse/Lib/Makefile +@@ -15,16 +15,22 @@ + # CSparse/Lib. It does not install it for system-wide usage. + + LIBRARY = libcsparse +-CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O ++VERSION = _ ++SO_VERSION = _ + +-I = -I../Include +-RANLIB = ranlib +-ARCHIVE = $(AR) $(ARFLAGS) +-CP = cp -f ++default: library + +-AR_TARGET = $(LIBRARY).a ++include ../../SuiteSparse_config/SuiteSparse_config.mk + +-all: install ++LDLIBS += -lm ++ ++# compile and install in SuiteSparse/lib ++library: ++ $(MAKE) install INSTALL=$(SUITESPARSE) ++ ++I = -I../../SuiteSparse_config -I../Include ++ ++all: library + + CS = cs_add.o cs_amd.o cs_chol.o cs_cholsol.o cs_counts.o cs_cumsum.o \ + cs_droptol.o cs_dropzeros.o cs_dupl.o cs_entry.o \ +@@ -39,25 +45,43 @@ + $(CS): ../Include/cs.h Makefile + + %.o: ../Source/%.c ../Include/cs.h +- $(CC) $(CF) $(I) -c $< ++ $(CC) $(CF) $(I) -c $< -o $@ + + static: $(AR_TARGET) + + $(AR_TARGET): $(CS) +- $(ARCHIVE) $@ $^ ++ $(ARCHIVE) $@ $^ + - $(RANLIB) $@ + +-# install CSparse in this directory +-install: $(AR_TARGET) +- +-# uninstall CSparse +-uninstall: purge +- + clean: +- - $(RM) *.o ++ - $(RM) -r $(CLEAN) + + purge: distclean + + distclean: clean +- - $(RM) *.a *.obj *.dll *.dylib *.so *.so.* ++ - $(RM) -r $(PURGE) ++ ++# install CSparse ++install: $(AR_TARGET) $(INSTALL_LIB)/$(SO_TARGET) ++ ++$(INSTALL_LIB)/$(SO_TARGET): $(CS) ++ @mkdir -p $(INSTALL_LIB) ++ @mkdir -p $(INSTALL_INCLUDE) ++ @mkdir -p $(INSTALL_DOC) ++ $(CC) $(SO_OPTS) $^ -o $@ $(LDLIBS) ++ ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_PLAIN) ) ++ ( cd $(INSTALL_LIB) ; ln -sf $(SO_TARGET) $(SO_MAIN) ) ++ $(CP) ../Include/cs.h $(INSTALL_INCLUDE) ++ $(CP) ../README.txt $(INSTALL_DOC)/CSPARSE_README.txt ++ chmod 755 $(INSTALL_LIB)/$(SO_TARGET) ++ chmod 644 $(INSTALL_INCLUDE)/cs.h ++ chmod 644 $(INSTALL_DOC)/CSPARSE_README.txt ++ ++# uninstall CSparse ++uninstall: ++ $(RM) $(INSTALL_LIB)/$(SO_TARGET) ++ $(RM) $(INSTALL_LIB)/$(SO_PLAIN) ++ $(RM) $(INSTALL_LIB)/$(SO_MAIN) ++ $(RM) $(INSTALL_INCLUDE)/cs.h ++ $(RM) $(INSTALL_DOC)/CSPARSE_README.txt + + +--- a/CSparse/Makefile ++++ b/CSparse/Makefile +@@ -2,6 +2,13 @@ + # CSparse Makefile + #------------------------------------------------------------------------------ + ++SUITESPARSE ?= $(realpath $(CURDIR)/..) ++export SUITESPARSE ++ ++default: C ++ ++include ../SuiteSparse_config/SuiteSparse_config.mk ++ + C: + ( cd Lib ; $(MAKE) ) + ( cd Demo ; $(MAKE) ) +@@ -34,9 +41,11 @@ + + distclean: purge + +-install: library ++# install CSparse ++install: + ( cd Lib ; $(MAKE) install ) + ++# uninstall CSparse + uninstall: + ( cd Lib ; $(MAKE) uninstall ) + + diff --git a/suitesparse.changes b/suitesparse.changes index b0e4fb4..be0a895 100644 --- a/suitesparse.changes +++ b/suitesparse.changes @@ -1,3 +1,34 @@ +------------------------------------------------------------------- +Mon Feb 26 19:58:00 UTC 2018 - toddrme2178@gmail.com + +- Update to SuiteSparse 5.2.0 + * GraphBLAS 2.0.1: bug fix to GxB_kron + * SuiteSparse_config: corrected back to SO_VERSION 5 + * GraphBLAS 2.0.0: with changes to API to conform to the latest + specification. The SO_VERSION of GraphBLAS must change, + as a result, since this affects both the ABI and API interface. + * CHOLMOD 3.1.12: bug fix (no change to the CHOLMOD ABI or API) + * KLU 1.3.9: minor edit, not a bug fix, but code is more clear now +- Update to SuiteSparse 5.1.2 + * improved build process for GraphBLAS + * minor change to CSparse/Lib/Makefile, no change in CSparse version +- Update to SuiteSparse 5.1.1 + * GraphBLAS added to top-level SuiteSparse/Makefile + * GraphBLAS 1.1.1: bug fix to *assign, split AxB for faster compile, + added memory usage statistics, AxB performance improvment + * minor update to [AMD CAMD KLU]/Doc/Makefile's, no change to + version numbers of AMD, CAMD, or KLU +- Update to SuiteSparse 5.1.0 + * GraphBLAS 1.1.0 + * minor update to SPQR Makefile (version remains unchanged; + no change to source) +- Update to SuiteSparse 5.0.0 + * added GraphBLAS Version 1.0.0 + * replaced UFget with ssget +- Use build-in build system instead of manually building everything +- Simplify spec file +- Add build_csparse_shared.patch to build CSparse as a shared library + ------------------------------------------------------------------- Wed Feb 14 10:36:16 UTC 2018 - schwab@suse.de diff --git a/suitesparse.spec b/suitesparse.spec index 440e149..a5bbd54 100644 --- a/suitesparse.spec +++ b/suitesparse.spec @@ -26,65 +26,64 @@ Name: suitesparse Summary: A collection of sparse matrix libraries License: GPL-2.0+ and LGPL-2.1+ Group: Development/Libraries/C and C++ -Version: 4.5.5 +Version: 5.2.0 Release: 0 Url: http://faculty.cse.tamu.edu/davis/SuiteSparse/ Source: http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-%{version}.tar.gz Source2: %{name}-rpmlintrc +# PATCH-FIX-OPENSUSE build_csparse_shared.patch -- Build CSparse as a shared library +Patch1: build_csparse_shared.patch Patch775418: bnc775418-enable-SuiteSparse_time-symbol.patch -BuildRoot: %{_tmppath}/%{name}-%{version}-build -BuildRequires: gcc-c++ +%if 0%{?sle_version} == 120300 && 0%{?is_opensuse} +BuildRequires: gcc7 +BuildRequires: gcc7-c++ +%else +BuildRequires: gcc >= 4.9 +BuildRequires: gcc-c++ >= 4.9 +%endif +BuildRequires: chrpath +BuildRequires: cmake BuildRequires: gcc-fortran BuildRequires: lapack-devel BuildRequires: metis-devel +BuildRequires: tbb-devel %if %{with openblas} BuildRequires: openblas-devel %endif BuildRequires: openmpi-devel -%define amdver 2.4.6 -%define amdso 2_4_6 -%define btfver 1.2.6 -%define btfso 1_2_6 -%define camdver 2.4.6 -%define camdso 2_4_6 -%define ccolamdver 2.9.6 -%define ccolamdso 2_9_6 -%define colamdver 2.9.6 -%define colamdso 2_9_6 -%define cholmodver 3.0.11 -%define cholmodso 3_0_11 -%define csparsever 3.1.9 -%define csparseso 3_1_9 -%define cxsparsever 3.1.9 -%define cxsparseso 3_1_9 -%define kluver 1.3.8 -%define kluso 1_3_8 -%define ldlver 2.2.6 -%define ldlso 2_2_6 -%define rbiover 2.2.6 -%define rbioso 2_2_6 -%define spqrver 2.0.8 -%define spqrso 2_0_8 -%define umfpackver 5.7.6 -%define umfpackso 5_7_6 +%define amdver 2.4.6 +%define btfver 1.2.6 +%define camdver 2.4.6 +%define ccolamdver 2.9.6 +%define cholmodver 3.0.12 +%define colamdver 2.9.6 +%define csparsever 3.2.0 +%define cxsparsever 3.2.0 +%define graphblasver 2.0.1 +%define kluver 1.3.9 +%define ldlver 2.2.6 +%define rbiover 2.2.6 +%define spqrver 2.0.8 +%define umfpackver 5.7.6 # Your need define even it's just the same as main package # or the %%build loop will override %%version with umfpack's version. -%define configver 4.5.5 -%define configso 4_5_5 -%define amdlib libamd-%{amdso} -%define btflib libbtf-%{btfso} -%define camdlib libcamd-%{camdso} -%define ccolamdlib libccolamd-%{ccolamdso} -%define cholmodlib libcholmod-%{cholmodso} -%define colamdlib libcolamd-%{colamdso} -%define csparselib libcsparse-%{csparseso} -%define cxsparselib libcxsparse-%{cxsparseso} -%define klulib libklu-%{kluso} -%define ldllib libldl-%{ldlso} -%define rbiolib librbio-%{rbioso} -%define spqrlib libspqr-%{spqrso} -%define umfpacklib libumfpack-%{umfpackso} -%define configlib libsuitesparseconfig-%{configso} +%define configver 5.2.0 +%define csparsemajor %(echo "%{csparsever}" | cut -d "." -f1) +%define amdlib %(echo "libamd%{amdver}" | cut -d "." -f1) +%define btflib %(echo "libbtf%{btfver}" | cut -d "." -f1) +%define camdlib %(echo "libcamd%{camdver}" | cut -d "." -f1) +%define ccolamdlib %(echo "libccolamd%{ccolamdver}" | cut -d "." -f1) +%define cholmodlib %(echo "libcholmod%{cholmodver}" | cut -d "." -f1) +%define colamdlib %(echo "libcolamd%{colamdver}" | cut -d "." -f1) +%define csparselib %(echo "libcsparse%{csparsever}" | cut -d "." -f1) +%define cxsparselib %(echo "libcxsparse%{cxsparsever}" | cut -d "." -f1) +%define graphblaslib %(echo "libgraphblas%{graphblasver}" | cut -d "." -f1) +%define klulib %(echo "libklu%{kluver}" | cut -d "." -f1) +%define ldllib %(echo "libldl%{ldlver}" | cut -d "." -f1) +%define rbiolib %(echo "librbio%{rbiover}" | cut -d "." -f1) +%define spqrlib %(echo "libspqr%{spqrver}" | cut -d "." -f1) +%define umfpacklib %(echo "libumfpack%{umfpackver}" | cut -d "." -f1) +%define configlib %(echo "libsuitesparseconfig%{configver}" | cut -d "." -f1) %description suitesparse is a collection of libraries for computations involving sparse @@ -94,21 +93,23 @@ matrices. Summary: Development headers for SuiteSparse License: GPL-2.0+ and LGPL-2.1+ Group: Development/Libraries/C and C++ -Requires: %{amdlib} = %{amdver} -Requires: %{btflib} = %{btfver} -Requires: %{camdlib} = %{camdver} -Requires: %{ccolamdlib} = %{ccolamdver} -Requires: %{cholmodlib} = %{cholmodver} -Requires: %{colamdlib} = %{colamdver} -Requires: %{configlib} = %{configver} -Requires: %{configlib} = %{version} -Requires: %{csparselib} = %{csparsever} -Requires: %{cxsparselib} = %{cxsparsever} -Requires: %{klulib} = %{kluver} -Requires: %{ldllib} = %{ldlver} -Requires: %{rbiolib} = %{rbiover} -Requires: %{spqrlib} = %{spqrver} -Requires: %{umfpacklib} = %{umfpackver} +Requires: gcc-c++ >= 4.9 +Requires: %{amdlib} = %{amdver} +Requires: %{btflib} = %{btfver} +Requires: %{camdlib} = %{camdver} +Requires: %{ccolamdlib} = %{ccolamdver} +Requires: %{cholmodlib} = %{cholmodver} +Requires: %{colamdlib} = %{colamdver} +Requires: %{configlib} = %{configver} +Requires: %{configlib} = %{version} +Requires: %{csparselib} = %{csparsever} +Requires: %{cxsparselib} = %{cxsparsever} +Requires: %{graphblaslib} = %{graphblasver} +Requires: %{klulib} = %{kluver} +Requires: %{ldllib} = %{ldlver} +Requires: %{rbiolib} = %{rbiover} +Requires: %{spqrlib} = %{spqrver} +Requires: %{umfpacklib} = %{umfpackver} Requires: metis-devel %if %{with openblas} Requires: openblas-devel @@ -116,45 +117,48 @@ Requires: openblas-devel Requires: lapack-devel %endif Requires: openmpi-devel +Requires: tbb-devel # make sure developers can find these packages -Provides: suitesparse-common-devel = %{version} -Obsoletes: suitesparse-common-devel < %{version} -Provides: SuiteSparse_config = %{version} -Obsoletes: SuiteSparse_config < %{version} -Provides: amd-devel = %{amdver} -Obsoletes: amd-devel < %{amdver} -Provides: umfpack-devel = %{umfpackver} -Obsoletes: umfpack-devel < %{umfpackver} -Provides: libamd-devel = %{amdver} -Obsoletes: libamd-devel < %{amdver} -Provides: libbtf-devel = %{btfver} -Obsoletes: libbtf-devel < %{btfver} -Provides: libcamd-devel = %{camdver} -Obsoletes: libcamd-devel < %{camdver} -Provides: libccolamd-devel = %{ccolamdver} -Obsoletes: libccolamd-devel < %{ccolamdver} -Provides: libcholmod-devel = %{cholmodver} -Obsoletes: libcholmod-devel < %{cholmodver} -Provides: libcolamd-devel = %{colamdver} -Obsoletes: libcolamd-devel < %{colamdver} -Provides: libcsparse-devel = %{csparsever} -Obsoletes: libcsparse-devel < %{csparsever} -Provides: libcxsparse-devel = %{cxsparsever} -Obsoletes: libcxsparse-devel < %{cxsparsever} -Provides: libklu-devel = %{kluver} -Obsoletes: libklu-devel < %{kluver} -Provides: libldl-devel = %{ldlver} -Obsoletes: libldl-devel < %{ldlver} -Provides: librbio-devel = %{rbiover} -Obsoletes: librbio-devel < %{rbiover} -Provides: libspqr-devel = %{spqrver} -Obsoletes: libspqr-devel < %{spqrver} -Provides: libumfpack-devel = %{umfpackver} -Obsoletes: libumfpack-devel < %{umfpackver} +Provides: SuiteSparse_config = %{version} +Obsoletes: SuiteSparse_config < %{version} +Provides: amd-devel = %{amdver} +Obsoletes: amd-devel < %{amdver} +Provides: suitesparse-common-devel = %{version} +Obsoletes: suitesparse-common-devel < %{version} +Provides: umfpack-devel = %{umfpackver} +Obsoletes: umfpack-devel < %{umfpackver} +Provides: libamd-devel = %{amdver} +Obsoletes: libamd-devel < %{amdver} +Provides: libbtf-devel = %{btfver} +Obsoletes: libbtf-devel < %{btfver} +Provides: libcamd-devel = %{camdver} +Obsoletes: libcamd-devel < %{camdver} +Provides: libccolamd-devel = %{ccolamdver} +Obsoletes: libccolamd-devel < %{ccolamdver} +Provides: libcholmod-devel = %{cholmodver} +Obsoletes: libcholmod-devel < %{cholmodver} +Provides: libcolamd-devel = %{colamdver} +Obsoletes: libcolamd-devel < %{colamdver} +Provides: libcsparse-devel = %{csparsever} +Obsoletes: libcsparse-devel < %{csparsever} +Provides: libcxsparse-devel = %{cxsparsever} +Obsoletes: libcxsparse-devel < %{cxsparsever} +Provides: libgraphblas-devel = %{umfpackver} +Obsoletes: libgraphblas-devel < %{umfpackver} +Provides: libklu-devel = %{kluver} +Obsoletes: libklu-devel < %{kluver} +Provides: libldl-devel = %{ldlver} +Obsoletes: libldl-devel < %{ldlver} +Provides: librbio-devel = %{rbiover} +Obsoletes: librbio-devel < %{rbiover} +Provides: libspqr-devel = %{spqrver} +Obsoletes: libspqr-devel < %{spqrver} +Provides: libumfpack-devel = %{umfpackver} +Obsoletes: libumfpack-devel < %{umfpackver} Provides: libsuitesparseconfig-devel = %{configver} Obsoletes: libsuitesparseconfig-devel < %{configver} -Provides: UFconfig-devel = %{configver} -Obsoletes: UFconfig-devel < %{configver} +Provides: UFconfig-devel = %{configver} +Obsoletes: UFconfig-devel < %{configver} %description devel suitesparse is a collection of libraries for computations involving @@ -179,6 +183,8 @@ Release: 0 Summary: Symmetric Approximate Minimum Degree License: LGPL-2.1+ Group: System/Libraries +Provides: %(echo "libamd-%{amdver}" | tr . _) = %{version} +Obsoletes: %(echo "libamd-%{amdver}" | tr . _) < %{version} %description -n %{amdlib} AMD is a set of routines for ordering a sparse matrix prior to @@ -196,6 +202,8 @@ Release: 0 Summary: Permutation to Block Triangular Form License: LGPL-2.1+ Group: System/Libraries +Provides: %(echo "libbtf-%{btfver}" | tr . _) = %{version} +Obsoletes: %(echo "libbtf-%{btfver}" | tr . _) < %{version} %description -n %{btflib} BTF permutes an unsymmetric matrix (square or rectangular) into its @@ -210,6 +218,8 @@ Release: 0 Summary: Symmetric Approximate Minimum Degree License: LGPL-2.1+ Group: System/Libraries +Provides: %(echo "libcamd-%{camdver}" | tr . _) = %{version} +Obsoletes: %(echo "libcamd-%{camdver}" | tr . _) < %{version} %description -n %{camdlib} CAMD is a set of routines for ordering a sparse matrix prior to @@ -225,6 +235,8 @@ Release: 0 Summary: Constrained Column Approximate Minimum Degree License: LGPL-2.1+ Group: System/Libraries +Provides: %(echo "libccolamd-%{ccolamdver}" | tr . _) = %{version} +Obsoletes: %(echo "libccolamd-%{ccolamdver}" | tr . _) < %{version} %description -n %{ccolamdlib} CCOLAMD computes an column approximate minimum degree ordering @@ -239,6 +251,8 @@ Release: 0 Summary: Supernodal Sparse Cholesky Factorization and Update/Downdate License: GPL-2.0 and LGPL-2.1 Group: System/Libraries +Provides: %(echo "libcholmod-%{cholmodver}" | tr . _) = %{version} +Obsoletes: %(echo "libcholmod-%{cholmodver}" | tr . _) < %{version} #bnc746867 cholmod from suitesparse should be GPL-2.0 and/or LGPL-2.0 licensed %description -n %{cholmodlib} @@ -266,6 +280,8 @@ Release: 0 Summary: Column Approximate Minimum Degree License: LGPL-2.1+ Group: System/Libraries +Provides: %(echo "libcolamd-%{colamdver}" | tr . _) = %{version} +Obsoletes: %(echo "libcolamd-%{colamdver}" | tr . _) < %{version} %description -n %{colamdlib} The COLAMD column approximate minimum degree ordering algorithm @@ -287,6 +303,8 @@ Release: 0 Summary: Instructional Sparse Matrix Package License: LGPL-2.1+ Group: System/Libraries +Provides: %(echo "libcsparse-%{csparsever}" | tr . _) = %{version} +Obsoletes: %(echo "libcsparse-%{csparsever}" | tr . _) < %{version} # AT version 3.1.9, this package was accidentally called libcsparsever-3_1_9 %if "%{csparsever}" == "3.1.9" Obsoletes: libcsparsever-3_1_9 = 3.1.9 @@ -317,6 +335,8 @@ Release: 0 Summary: An extended version of CSparse License: LGPL-2.1+ Group: System/Libraries +Provides: %(echo "libcxsparse-%{cxsparsever}" | tr . _) = %{version} +Obsoletes: %(echo "libcxsparse-%{cxsparsever}" | tr . _) < %{version} %description -n %{cxsparselib} CXSparse is an extended version of CSparse, with support for double @@ -324,12 +344,34 @@ or complex matrices, with int or long integers. CXSparse is part of the SuiteSparse sparse matrix suite. +%package -n %{graphblaslib} +Version: %{graphblasver} +Release: 0 +Summary: An implementation of the GraphBLAS standard +License: Apache-2.0 +Group: System/Libraries +Provides: %(echo "libgraphblas-%{graphblasver}" | tr . _) = %{version} +Obsoletes: %(echo "libgraphblas-%{graphblasver}" | tr . _) < %{version} + +%description -n %{graphblaslib} +GraphBLAS is an full implementation of the GraphBLAS standard, +which defines a set of sparse matrix operations on an extended algebra of +semirings using an almost unlimited variety of operators and types. When +applied to sparse adjacency matrices, these algebraic operations are equivalent +to computations on graphs. GraphBLAS provides a powerful and expressive +framework for creating graph algorithms based on the elegant mathematics of +sparse matrix operations on a semiring. + +GraphBLAS is part of the SuiteSparse sparse matrix suite. + %package -n %{klulib} Version: %{kluver} Release: 0 Summary: Sparse LU Factorization, for Circuit Simulation License: LGPL-2.1+ Group: System/Libraries +Provides: %(echo "libklu-%{kluver}" | tr . _) = %{version} +Obsoletes: %(echo "libklu-%{kluver}" | tr . _) < %{version} %description -n %{klulib} KLU is a sparse LU factorization algorithm well-suited for use in @@ -345,6 +387,8 @@ Release: 0 Summary: A Simple LDL^T Factorization License: LGPL-2.1+ Group: System/Libraries +Provides: %(echo "libldl-%{ldlver}" | tr . _) = %{version} +Obsoletes: %(echo "libldl-%{ldlver}" | tr . _) < %{version} %description -n %{ldllib} LDL is a set of concise routines for factorizing symmetric positive- @@ -365,6 +409,8 @@ Release: 0 Summary: MATLAB Toolbox for Reading/Writing Sparse Matrices License: GPL-2.0+ Group: System/Libraries +Provides: %(echo "librbio-%{rbiover}" | tr . _) = %{version} +Obsoletes: %(echo "librbio-%{rbiover}" | tr . _) < %{version} %description -n %{rbiolib} RBio is a MATLAB toolbox for reading/writing sparse matrices in the @@ -380,6 +426,8 @@ Release: 0 Summary: Multifrontal Sparse QR License: GPL-2.0+ Group: System/Libraries +Provides: %(echo "libspqr-%{spqrver}" | tr . _) = %{version} +Obsoletes: %(echo "libspqr-%{spqrver}" | tr . _) < %{version} %description -n %{spqrlib} SuiteSparseQR is an implementation of the multifrontal sparse QR @@ -398,6 +446,8 @@ Release: 0 Summary: Sparse Multifrontal LU Factorization License: GPL-2.0+ Group: System/Libraries +Provides: %(echo "libumfpack-%{umfpackver}" | tr . _) = %{version} +Obsoletes: %(echo "libumfpack-%{umfpackver}" | tr . _) < %{version} %description -n %{umfpacklib} UMFPACK is a set of routines for solving unsymmetric sparse linear @@ -420,6 +470,8 @@ Provides: libufconfig = %{configver} Obsoletes: libufconfig < %{configver} Provides: libUFconfig = %{configver} Obsoletes: libUFconfig < %{configver} +Provides: %(echo "libsuitesparseconfig%{configver}" | tr . _) = %{version} +Obsoletes: %(echo "libsuitesparseconfig%{configver}" | tr . _) < %{version} %description -n %{configlib} SuiteSparse_config is required by a number of sparse matrix packages, @@ -438,107 +490,63 @@ SuiteSparse_config is part of the SuiteSparse sparse matrix suite. %prep %setup -q -n SuiteSparse +%patch1 -p1 sed 's/^CHOLMOD_CONFIG =.*/CHOLMOD_CONFIG = -DNPARTITION/' -i SuiteSparse_config/SuiteSparse_config.mk %if %{without openblas} sed 's/-lopenblas/-lblas/' -i SuiteSparse_config/SuiteSparse_config.mk %endif +sed -i "s:^SO_VERSION = _:SO_VERSION = %{csparsemajor}:" CSparse/Lib/Makefile +sed -i "s:^VERSION = _:VERSION = %{csparsever}:" CSparse/Lib/Makefile + +cat CSparse/Lib/Makefile + +mv SPQR/Doc/README.txt SPQR/Doc/README_2.txt + # bnc#751746 -rm -rf MATLAB_Tools/Factorize/Doc/factorize_article.pdf -rm -rf SPQR/Doc/algo_spqr.pdf -rm -rf SPQR/Doc/spqr.pdf +rm CHOLMOD/Doc/IA3_2014_Workshop_Rennich_Stosic_Davis_preprint.pdf +rm KLU/Doc/palamadai_e.pdf +rm MATLAB_Tools/Factorize/Doc/factorize_article.pdf +rm SPQR/Doc/algo_spqr.pdf +rm SPQR/Doc/qrgpu_paper.pdf +rm SPQR/Doc/spqr.pdf + # bnc#775418 %patch775418 -p1 %build -mkdir -p Lib +%if 0%{?sle_version} == 120300 && 0%{?is_opensuse} +export CC=gcc-7 +export CXX=g++-7 +%endif -#bnc775418 provides SuiteSparse_time symbol in SuiteSparse_config -pushd SuiteSparse_config - make CFLAGS="%{optflags} -fPIC" - pushd ../Lib - gcc -shared -Wl,-soname -Wl,"libsuitesparseconfig-%{configver}.so" -o "libsuitesparseconfig-%{configver}.so" ../SuiteSparse_config/*.o -lm - ln -s "libsuitesparseconfig-%{version}.so" "libsuitesparseconfig.so" - popd -popd - -# libraries linking config [bnc#883683] %if %{with openblas} blas_lib=-lopenblas %else blas_lib=-lblas %endif -amd_libs="libsuitesparseconfig.so" -camd_libs="libsuitesparseconfig.so" -ccolamd_libs="libsuitesparseconfig.so" -cholmod_libs="libamd.so libcamd.so libcolamd.so libccolamd.so libsuitesparseconfig.so $blas_lib -llapack -lmetis" -colamd_libs="libsuitesparseconfig.so" -klu_libs="libamd.so libbtf.so libcolamd.so" -rbio_libs="libsuitesparseconfig.so" -spqr_libs="libcholmod.so libsuitesparseconfig.so $blas_lib -llapack -lmetis" -umfpack_libs="libamd.so libcholmod.so libsuitesparseconfig.so $blas_lib -llapack -lmetis" -for dir in AMD BTF CAMD CCOLAMD COLAMD CHOLMOD CSparse CXSparse KLU LDL RBio SPQR UMFPACK; do - pushd $dir - ver=$(grep -E "^VERSION =" Lib/Makefile | sed "s:VERSION = ::") - if [[ -z $ver ]] ; then - major=$(grep -oP "^\#define \w+_VER \d+" Include/*.h | sed -E "s:\#define [A-Z]+_VER ::") - minor=$(grep -oP "^\#define \w+_SUBVER \d+" Include/*.h | sed -E "s:\#define [A-Z]+_SUBVER ::") - patchlev=$(grep -oP "^\#define \w+_SUBSUB \d+" Include/*.h | sed -E "s:\#define [A-Z]+_SUBSUB ::") - ver="$major.$minor.$patchlev" - fi - make CFLAGS="%{optflags} -fPIC" - popd - pushd Lib - dir_l=$(echo "$dir" | tr "[A-Z]" "[a-z]") - linked_libs=${dir_l}_libs - gcc -shared -Wl,-soname -Wl,"lib${dir_l}-$ver.so" -o "lib${dir_l}-$ver.so" ../${dir}/Lib/*.o ${!linked_libs} -lm - ln -s "lib${dir_l}-$ver.so" "lib${dir_l}.so" - popd -done - -# specialities -# -- CHOLMOD -pushd CHOLMOD - cp Cholesky/lesser.txt Doc/Cholesky_License.txt - cp Core/lesser.txt Doc/Core_License.txt - cp MatrixOps/gpl.txt Doc/MatrixOps_License.txt - cp Partition/lesser.txt Doc/Partition_License.txt - cp Supernodal/gpl.txt Doc/Supernodal_License.txt -popd +make MY_METIS_LIB="-lmetis" LAPACK="-llapack" BLAS="$blas_lib" TBB="-ltbb" CFLAGS="%{optflags}" CXXFLAGS="%{optflags}" go +chrpath -d lib/*.so.*.* +chrpath -d GraphBLAS/build/*.so +chrpath -d GraphBLAS/build/*.so.*.* %install mkdir -p %{buildroot}%{_includedir}/%{name} +mkdir -p %{buildroot}%{_docdir} mkdir -p %{buildroot}%{_libdir} -mkdir -p %{buildroot}%{_docdir}/%{name} -mkdir -p %{buildroot}%{_docdir}/%{name}-devel -cp -a SuiteSparse_config/SuiteSparse_config.h %{buildroot}%{_includedir}/%{name} -cp -a README.txt %{buildroot}%{_docdir}/%{name} -cp -a Lib/*.so* %{buildroot}/%{_libdir} -for dir in AMD BTF CAMD CCOLAMD CHOLMOD COLAMD CSparse CXSparse KLU LDL RBio SPQR UMFPACK; do - pushd $dir - ver=$(grep -E "^VERSION =" Lib/Makefile | sed "s:VERSION = ::") - if [[ -z $ver ]] ; then - major=$(grep -oP "^\#define \w+_VER \d+" Include/*.h | sed -E "s:\#define [A-Z]+_VER ::") - minor=$(grep -oP "^\#define \w+_SUBVER \d+" Include/*.h | sed -E "s:\#define [A-Z]+_SUBVER ::") - patchlev=$(grep -oP "^\#define \w+_SUBSUB \d+" Include/*.h | sed -E "s:\#define [A-Z]+_SUBSUB ::") - ver="$major.$minor.$patchlev" - fi - cp -a Lib/*.a %{buildroot}/%{_libdir} - cp -a Include/*\.h %{buildroot}%{_includedir}/%{name} - if ls Include/*\.hpp 1> /dev/null 2>&1; then - cp -a Include/*\.hpp %{buildroot}%{_includedir}/%{name} - fi - mkdir %{buildroot}%{_docdir}/%{name}/$dir-$ver - mkdir %{buildroot}%{_docdir}/%{name}-devel/$dir - cp -a README.txt Doc/{License,ChangeLog,*.txt} %{buildroot}%{_docdir}/%{name}/$dir-$ver > /dev/null 2>&1 | true - cp -a $dir/Doc/*.pdf %{buildroot}%{_docdir}/%{name}-devel/$dir > /dev/null 2>&1 | true - popd -done -cp -r SuiteSparse_config/*.a %{buildroot}%{_libdir} -mkdir %{buildroot}%{_docdir}/%{name}/SuiteSparse_config-%{configver}/ -cp -r SuiteSparse_config/README.txt %{buildroot}%{_docdir}/%{name}/SuiteSparse_config-%{configver}/ +cp -Pt %{buildroot}%{_libdir} */Lib/*.a +cp -Pt %{buildroot}%{_libdir} lib/* +cp -Pt %{buildroot}%{_libdir} GraphBLAS/build/*.so +cp -Pt %{buildroot}%{_libdir} GraphBLAS/build/*.so.* +cp -Pt %{buildroot}%{_includedir}/%{name} include/* +cp -Pt %{buildroot}%{_includedir}/%{name} GraphBLAS/Include/*.h +cp -Prt %{buildroot}%{_docdir} share/doc/* + +%if 0%{?sle_version} > 120300 +cp -Pt %{buildroot}%{_libdir} GraphBLAS/build/*.a +%endif %check amd_test_symbol="amd_postorder" @@ -571,6 +579,7 @@ for test_library in amd btf camd ccolamd colamd cholmod csparse cxsparse klu ldl cp linking_test.c.in linking_test.c test_symbol=${test_library}_test_symbol sed -i "s|@test_symbol@|${!test_symbol}|" linking_test.c + cat linking_test.c gcc -o linking_test linking_test.c -L%{buildroot}%{_libdir} -l${test_library} done @@ -600,6 +609,9 @@ popd %post -n %{cxsparselib} -p /sbin/ldconfig %postun -n %{cxsparselib} -p /sbin/ldconfig +%post -n %{graphblaslib} -p /sbin/ldconfig +%postun -n %{graphblaslib} -p /sbin/ldconfig + %post -n %{klulib} -p /sbin/ldconfig %postun -n %{klulib} -p /sbin/ldconfig @@ -620,99 +632,123 @@ popd %files devel %defattr(-,root,root) -%{_includedir}/%{name} -%{_libdir}/lib*.so -%exclude %{_libdir}/lib*-*.so -%{_docdir}/%{name}-devel -%dir %{_docdir}/%{name} -%{_docdir}/%{name}/README.txt +%doc ChangeLog README.txt +%license LICENSE.txt +%{_docdir}/%{name}-%{version} +%{_libdir}/*.so +%{_includedir}/%{name}/ %files devel-static %defattr(-,root,root) -%{_libdir}/lib*.a +%doc ChangeLog README.txt +%license LICENSE.txt +%{_libdir}/*.a + %files -n %{amdlib} %defattr(-, root, root) -%{_libdir}/libamd-%{amdver}.so -%dir %{_docdir}/%{name} -%{_docdir}/%{name}/AMD-%{amdver} +%doc AMD/README.txt +%doc AMD/Doc/AMD_UserGuide.pdf AMD/Doc/ChangeLog +%license AMD/Doc/License.txt AMD/Doc/lesser.txt +%{_libdir}/libamd.so.* %files -n %{btflib} %defattr(-, root, root) -%{_libdir}/libbtf-%{btfver}.so -%dir %{_docdir}/%{name} -%{_docdir}/%{name}/BTF-%{btfver} +%doc BTF/README.txt +%doc BTF/Doc/ChangeLog +%license BTF/Doc/License.txt BTF/Doc/lesser.txt +%{_libdir}/libbtf.so.* %files -n %{camdlib} %defattr(-, root, root) -%{_libdir}/libcamd-%{camdver}.so -%dir %{_docdir}/%{name} -%{_docdir}/%{name}/CAMD-%{camdver} +%doc CAMD/README.txt +%doc CAMD/Doc/CAMD_UserGuide.pdf CAMD/Doc/ChangeLog +%license CAMD/Doc/License.txt CAMD/Doc/lesser.txt +%{_libdir}/libcamd.so.* %files -n %{ccolamdlib} %defattr(-, root, root) -%{_libdir}/libccolamd-%{ccolamdver}.so -%dir %{_docdir}/%{name} -%{_docdir}/%{name}/CCOLAMD-%{ccolamdver} +%doc CCOLAMD/README.txt +%doc CCOLAMD/Doc/ChangeLog +%license CCOLAMD/Doc/License.txt CCOLAMD/Doc/lesser.txt +%{_libdir}/libccolamd.so.* %files -n %{cholmodlib} %defattr(-, root, root) -%{_libdir}/libcholmod-%{cholmodver}.so -%dir %{_docdir}/%{name} -%{_docdir}/%{name}/CHOLMOD-%{cholmodver} +%doc CHOLMOD/README.txt +%doc CHOLMOD/Doc/CHOLMOD_UserGuide.pdf +%license CHOLMOD/Doc/ChangeLog CHOLMOD/Doc/License.txt +%license CHOLMOD/Cholesky/lesser.txt +%license CHOLMOD/MatrixOps/gpl.txt +%{_libdir}/libcholmod.so.* %files -n %{colamdlib} %defattr(-, root, root) -%{_libdir}/libcolamd-%{colamdver}.so -%dir %{_docdir}/%{name} -%{_docdir}/%{name}/COLAMD-%{colamdver} +%doc COLAMD/README.txt +%doc COLAMD/Doc/ChangeLog +%license COLAMD/Doc/License.txt COLAMD/Doc/lesser.txt +%{_libdir}/libcolamd.so.* %files -n %{csparselib} %defattr(-, root, root) -%{_libdir}/libcsparse-%{csparsever}.so -%dir %{_docdir}/%{name} -%{_docdir}/%{name}/CSparse-%{csparsever} +%doc CSparse/README.txt +%doc CSparse/Doc/ChangeLog +%license CSparse/Doc/License.txt CSparse/Doc/lesser.txt +%{_libdir}/libcsparse.so.* %files -n %{cxsparselib} %defattr(-, root, root) -%{_libdir}/libcxsparse-%{cxsparsever}.so -%dir %{_docdir}/%{name} -%{_docdir}/%{name}/CXSparse-%{cxsparsever} +%doc CXSparse/README.txt +%doc CXSparse/Doc/ChangeLog +%license CXSparse/Doc/License.txt CXSparse/Doc/lesser.txt +%{_libdir}/libcxsparse.so.* + +%files -n %{graphblaslib} +%defattr(-, root, root) +%doc GraphBLAS/README.txt +%doc GraphBLAS/Doc/GraphBLAS_UserGuide.pdf +%license GraphBLAS/Doc/ChangeLog GraphBLAS/Doc/License.txt +%{_libdir}/libgraphblas.so.* %files -n %{klulib} %defattr(-, root, root) -%{_libdir}/libklu-%{kluver}.so -%dir %{_docdir}/%{name} -%{_docdir}/%{name}/KLU-%{kluver} +%doc KLU/README.txt +%doc KLU/Doc/KLU_UserGuide.pdf KLU/Doc/ChangeLog +%license KLU/Doc/License.txt KLU/Doc/lesser.txt +%{_libdir}/libklu.so.* %files -n %{ldllib} %defattr(-, root, root) -%{_libdir}/libldl-%{ldlver}.so -%dir %{_docdir}/%{name} -%{_docdir}/%{name}/LDL-%{ldlver} +%doc LDL/README.txt +%doc LDL/Doc/ldl_userguide.pdf LDL/Doc/ChangeLog +%license LDL/Doc/License.txt LDL/Doc/lesser.txt +%{_libdir}/libldl.so.* %files -n %{rbiolib} %defattr(-, root, root) -%{_libdir}/librbio-%{rbiover}.so -%dir %{_docdir}/%{name} -%{_docdir}/%{name}/RBio-%{rbiover} +%doc RBio/README.txt +%doc RBio/Doc/ChangeLog +%license RBio/Doc/License.txt RBio/Doc/gpl.txt +%{_libdir}/librbio.so.* %files -n %{spqrlib} %defattr(-, root, root) -%{_libdir}/libspqr-%{spqrver}.so -%dir %{_docdir}/%{name} -%{_docdir}/%{name}/SPQR-%{spqrver} +%doc SPQR/README.txt +%doc SPQR/Doc/spqr_user_guide.pdf SPQR/Doc/ChangeLog SPQR/Doc/README_2.txt +%license SPQR/Doc/License.txt SPQR/Doc/gpl.txt +%{_libdir}/libspqr.so.* %files -n %{umfpacklib} %defattr(-, root, root) -%{_libdir}/libumfpack-%{umfpackver}.so -%dir %{_docdir}/%{name} -%{_docdir}/%{name}/UMFPACK-%{umfpackver} +%doc UMFPACK/README.txt +%doc UMFPACK/Doc/UMFPACK_QuickStart.pdf UMFPACK/Doc/UMFPACK_UserGuide.pdf UMFPACK/Doc/ChangeLog +%license UMFPACK/Doc/License.txt UMFPACK/Doc/gpl.txt +%{_libdir}/libumfpack.so.* %files -n %{configlib} %defattr(-,root,root) -%{_libdir}/libsuitesparseconfig-%{configver}.so -%dir %{_docdir}/%{name} -%{_docdir}/%{name}/SuiteSparse_config-%{configver} +%doc share/doc/*/SUITESPARSECONFIG_README.txt +%license LICENSE.txt +%{_libdir}/libsuitesparseconfig.so.* %changelog