at v192 77 lines 2.1 kB view raw
1{ stdenv, fetchurl, gfortran, openblas }: 2 3let 4 version = "4.4.4"; 5 name = "suitesparse-${version}"; 6 7 int_t = if openblas.blas64 then "int64_t" else "int32_t"; 8in 9stdenv.mkDerivation { 10 inherit name; 11 12 src = fetchurl { 13 url = "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-${version}.tar.gz"; 14 sha256 = "1zdn1y0ij6amj7smmcslkqgbqv9yy5cwmbyzqc9v6drzdzllgbpj"; 15 }; 16 17 preConfigure = '' 18 mkdir -p $out/lib 19 mkdir -p $out/include 20 21 sed -i "SuiteSparse_config/SuiteSparse_config.mk" \ 22 -e 's/METIS .*$/METIS =/' \ 23 -e 's/METIS_PATH .*$/METIS_PATH =/' \ 24 -e '/CHOLMOD_CONFIG/ s/$/-DNPARTITION -DLONGBLAS=${int_t}/' \ 25 -e '/UMFPACK_CONFIG/ s/$/-DLONGBLAS=${int_t}/' 26 ''; 27 28 makeFlags = [ 29 "PREFIX=\"$(out)\"" 30 "INSTALL_LIB=$(out)/lib" 31 "INSTALL_INCLUDE=$(out)/include" 32 "BLAS=-lopenblas" 33 "LAPACK=" 34 ]; 35 36 NIX_CFLAGS = "-fPIC"; 37 38 postInstall = '' 39 # Build and install shared library 40 ( 41 cd "$(mktemp -d)" 42 for i in "$out"/lib/lib*.a; do 43 ar -x $i 44 done 45 gcc *.o --shared -o "$out/lib/libsuitesparse.so" 46 ) 47 for i in umfpack cholmod amd camd colamd spqr; do 48 ln -s libsuitesparse.so "$out"/lib/lib$i.so; 49 done 50 51 # Install documentation 52 outdoc=$out/share/doc/${name} 53 mkdir -p $outdoc 54 cp -r AMD/Doc $outdoc/amd 55 cp -r BTF/Doc $outdoc/bft 56 cp -r CAMD/Doc $outdoc/camd 57 cp -r CCOLAMD/Doc $outdoc/ccolamd 58 cp -r CHOLMOD/Doc $outdoc/cholmod 59 cp -r COLAMD/Doc $outdoc/colamd 60 cp -r CXSparse/Doc $outdoc/cxsparse 61 cp -r KLU/Doc $outdoc/klu 62 cp -r LDL/Doc $outdoc/ldl 63 cp -r RBio/Doc $outdoc/rbio 64 cp -r SPQR/Doc $outdoc/spqr 65 cp -r UMFPACK/Doc $outdoc/umfpack 66 ''; 67 68 nativeBuildInputs = [ gfortran ]; 69 buildInputs = [ openblas ]; 70 71 meta = with stdenv.lib; { 72 homepage = http://faculty.cse.tamu.edu/davis/suitesparse.html; 73 description = "A suite of sparse matrix algorithms"; 74 license = with licenses; [ bsd2 gpl2Plus lgpl21Plus ]; 75 maintainers = with maintainers; [ ttuegel ]; 76 }; 77}