summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorThomas Tuegel <ttuegel@gmail.com>2014-12-27 15:12:58 -0600
committerThomas Tuegel <ttuegel@gmail.com>2014-12-27 15:12:58 -0600
commit09435f05d4dac3496f0e7660dbdbaaa18274e910 (patch)
treebbc3bfdc57e54968337a05b8fd8940953f4eb66b /pkgs
parent5f0686fc95cf4a6dfad1c106e7c5f2ad89aa3c35 (diff)
parentd582090a15912b5838720a8e0a51accacf043c03 (diff)
downloadnixlib-09435f05d4dac3496f0e7660dbdbaaa18274e910.tar
nixlib-09435f05d4dac3496f0e7660dbdbaaa18274e910.tar.gz
nixlib-09435f05d4dac3496f0e7660dbdbaaa18274e910.tar.bz2
nixlib-09435f05d4dac3496f0e7660dbdbaaa18274e910.tar.lz
nixlib-09435f05d4dac3496f0e7660dbdbaaa18274e910.tar.xz
nixlib-09435f05d4dac3496f0e7660dbdbaaa18274e910.tar.zst
nixlib-09435f05d4dac3496f0e7660dbdbaaa18274e910.zip
Merge pull request #5484 from ttuegel/linear-algebra
Version bump some linear algebra packages
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/development/libraries/science/math/arpack/default.nix27
-rw-r--r--pkgs/development/libraries/science/math/atlas/default.nix74
-rw-r--r--pkgs/development/libraries/science/math/openblas/default.nix4
-rw-r--r--pkgs/development/libraries/science/math/suitesparse/0001-disable-metis.patch36
-rw-r--r--pkgs/development/libraries/science/math/suitesparse/0002-set-install-dir.patch27
-rw-r--r--pkgs/development/libraries/science/math/suitesparse/0003-blas-lapack-flags.patch27
-rw-r--r--pkgs/development/libraries/science/math/suitesparse/4.2.nix (renamed from pkgs/development/libraries/suitesparse/default.nix)0
-rw-r--r--pkgs/development/libraries/science/math/suitesparse/SuiteSparse_config.mk452
-rw-r--r--pkgs/development/libraries/science/math/suitesparse/default.nix58
-rw-r--r--pkgs/development/libraries/science/math/suitesparse/disable-metis.patch (renamed from pkgs/development/libraries/suitesparse/disable-metis.patch)0
-rw-r--r--pkgs/top-level/all-packages.nix12
11 files changed, 680 insertions, 37 deletions
diff --git a/pkgs/development/libraries/science/math/arpack/default.nix b/pkgs/development/libraries/science/math/arpack/default.nix
index 71f9ef2a2b6b..296c5f6b9202 100644
--- a/pkgs/development/libraries/science/math/arpack/default.nix
+++ b/pkgs/development/libraries/science/math/arpack/default.nix
@@ -1,31 +1,26 @@
-{ stdenv, fetchurl, gfortran, openblas }:
+{ stdenv, fetchurl, gfortran, atlasWithLapack }:
 
-let version = "3.1.5";
+let
+  version = "3.2.0";
 in
 stdenv.mkDerivation {
   name = "arpack-${version}";
   src = fetchurl {
-    url = "http://forge.scilab.org/index.php/p/arpack-ng/downloads/get/arpack-ng_${version}.tar.gz";
-    sha256 = "05fmg4m0yri47rzgsl2mnr1qbzrs7qyd557p3v9wwxxw0rwcwsd2";
+    url = "https://github.com/opencollab/arpack-ng/archive/${version}.tar.gz";
+    sha256 = "1fwch6vipms1ispzg2djvbzv5wag36f1dmmr3xs3mbp6imfyhvff";
   };
 
-  buildInputs = [ gfortran ];
-  propagatedBuildInputs = [ openblas ];
-
-  preConfigure = ''
-    substituteInPlace arpack.pc.in \
-      --replace "@BLAS_LIBS@" "-L${openblas}/lib @BLAS_LIBS@"
-  '';
+  buildInputs = [ gfortran atlasWithLapack ];
 
   # Auto-detection fails because gfortran brings in BLAS by default
-  configureFlags="--with-blas=-lopenblas --with-lapack=-lopenblas";
+  configureFlags="--with-blas=-latlas --with-lapack=-latlas";
 
   meta = {
     homepage = "http://forge.scilab.org/index.php/p/arpack-ng/";
-    description = "A collection of Fortran77 subroutines to solve large scale eigenvalue problems";
-    # Looks like OpenBLAS is not that easy to build
-    # there is a sgemm_itcopy undefined reference on 32-bit, for example
-    platforms = ["x86_64-linux"];
+    description = ''
+      A collection of Fortran77 subroutines to solve large scale eigenvalue
+      problems.
+    '';
     license = stdenv.lib.licenses.bsd3;
     maintainers = [ stdenv.lib.maintainers.ttuegel ];
   };
diff --git a/pkgs/development/libraries/science/math/atlas/default.nix b/pkgs/development/libraries/science/math/atlas/default.nix
index 938778734e09..f4bda4f47358 100644
--- a/pkgs/development/libraries/science/math/atlas/default.nix
+++ b/pkgs/development/libraries/science/math/atlas/default.nix
@@ -1,5 +1,8 @@
 { stdenv, fetchurl, gfortran, tolerateCpuTimingInaccuracy ? true, shared ? false
-, cpuConfig ? if stdenv.isi686 then "-b 32 -A 18 -V 1" else "-b 64 -A 31 -V 384"
+, cpuConfig ? if stdenv.isi686 then "-b 32 -A 12 -V 1" else "-b 64 -A 14 -V 384"
+, cacheEdge ? "262144"
+, threads ? "0"
+, liblapack, withLapack
 }:
 
 # Atlas detects the CPU and optimizes its build accordingly. This is great when
@@ -9,31 +12,44 @@
 # cannot execute.
 #
 # To avoid these issues, the build is configured using the 'cpuConfig'
-# parameter as follows:
+# parameter. Upstream recommends these defaults for distributions:
 #
 #   | x86 CPU                                     | x86_64 CPU             |
 #   |---------------------------------------------+------------------------|
 #   | -b 32                                       | -b 64                  |
-#   | -A 18  (Pentium II)                         | -A 31 (Athlon K7)      |
-#   | -V 1 (No SIMD: Pentium II doesn't have SSE) | -V 384 (SSE1 and SSE2) |
+#   | -A 12  (x86x87)                             | -A 14 (x86SSE2)        |
+#   | -V 1 (No SIMD)                              | -V 384 (SSE1 and SSE2) |
 #
-# Users who want to compile a highly optimized version of ATLAS that's suitable
-# for their local machine can override these settings accordingly.
+# These defaults should give consistent performance across machines.
+# Performance will be substantially lower than an optimized build, but a build
+# optimized for one machine will give even worse performance on others. If you
+# are a serious user of Atlas (e.g., you write code that uses it) you should
+# compile an optimized version for each of your machines.
+#
+# The parameter 'cacheEdge' sets the L2 cache per core (in bytes). Setting this
+# parameter reduces build time because some tests to detect the L2 cache size
+# will not be run. It will also reduce impurity; different build nodes on Hydra
+# may have different L2 cache sizes, but fixing the L2 cache size should
+# account for that. This also makes the performance of binary substitutes more
+# consistent.
 #
 # The -V flags can change with each release as new instruction sets are added
 # because upstream thinks it's a good idea to add entries at the start of an
 # enum, rather than the end. If the build suddenly fails with messages about
 # missing instruction sets, you may need to poke around in the source a bit.
+#
+# Upstream recommends the x86x87/x86SSE2 architectures for generic x86/x86_64
+# for distribution builds. Additionally, we set 'cacheEdge' to reduce impurity.
+# Otherwise, the cache parameters will be detected by timing which will be
+# highly variable on Hydra.
 
 let
+  inherit (stdenv.lib) optional optionalString;
   version = "3.10.2";
-
-  optionalString = stdenv.lib.optionalString;
-  optional = stdenv.lib.optional;
 in
 
 stdenv.mkDerivation {
-  name = "atlas-${version}";
+  name = "atlas-${version}" + optionalString withLapack "-with-lapack";
 
   src = fetchurl {
     url = "mirror://sourceforge/math-atlas/atlas${version}.tar.bz2";
@@ -50,27 +66,53 @@ stdenv.mkDerivation {
   patches = optional tolerateCpuTimingInaccuracy ./disable-timing-accuracy-check.patch;
 
   # Configure outside of the source directory.
-  preConfigure = '' mkdir build; cd build; configureScript=../configure; '';
+  preConfigure = ''
+    mkdir build
+    cd build
+    configureScript=../configure
+  '';
 
   # * -fPIC is passed even in non-shared builds so that the ATLAS code can be
   #   used to inside of shared libraries, like Octave does.
   #
   # * -t 0 disables use of multi-threading. It's not quite clear what the
   #   consequences of that setting are and whether it's necessary or not.
-  configureFlags = "-Fa alg -fPIC -t 0 ${cpuConfig}" + optionalString shared " --shared";
+  configureFlags = [
+    "-Fa alg"
+    "-fPIC"
+    "-t ${threads}"
+    cpuConfig
+  ] ++ optional shared "--shared"
+    ++ optional withLapack "--with-netlib-lapack-tarfile=${liblapack.src}";
+
+  postConfigure = ''
+    if [[ -n "${cacheEdge}" ]]; then
+      echo '#define CacheEdge ${cacheEdge}' >> include/atlas_cacheedge.h
+      echo '#define CacheEdge ${cacheEdge}' >> include/atlas_tcacheedge.h
+    fi
+  '';
 
   doCheck = true;
 
+  postInstall = ''
+    # Avoid name collision with the real lapack (ATLAS only builds a partial
+    # lapack unless withLapack = true).
+    if ${if withLapack then "false" else "true"}; then
+      mv $out/lib/liblapack.a $out/lib/liblapack_atlas.a
+    fi
+  '';
+
   meta = {
     homepage = "http://math-atlas.sourceforge.net/";
     description = "Automatically Tuned Linear Algebra Software (ATLAS)";
     license = stdenv.lib.licenses.bsd3;
 
     longDescription = ''
-      The ATLAS (Automatically Tuned Linear Algebra Software) project is an ongoing
-      research effort focusing on applying empirical techniques in order to provide
-      portable performance. At present, it provides C and Fortran77 interfaces to a
-      portably efficient BLAS implementation, as well as a few routines from LAPACK.
+      The ATLAS (Automatically Tuned Linear Algebra Software) project is an
+      ongoing research effort focusing on applying empirical techniques in
+      order to provide portable performance. At present, it provides C and
+      Fortran77 interfaces to a portably efficient BLAS implementation, as well
+      as a few routines from LAPACK.
     '';
 
     maintainers = with stdenv.lib.maintainers; [ ttuegel ];
diff --git a/pkgs/development/libraries/science/math/openblas/default.nix b/pkgs/development/libraries/science/math/openblas/default.nix
index 6ca1f4ccadae..a452037a235e 100644
--- a/pkgs/development/libraries/science/math/openblas/default.nix
+++ b/pkgs/development/libraries/science/math/openblas/default.nix
@@ -4,12 +4,12 @@ let local = config.openblas.preferLocalBuild or false;
     localTarget = config.openblas.target or "";
 in
 stdenv.mkDerivation rec {
-  version = "0.2.11";
+  version = "0.2.13";
 
   name = "openblas-${version}";
   src = fetchurl {
     url = "https://github.com/xianyi/OpenBLAS/tarball/v${version}";
-    sha256 = "1va4yhzgj2chcj6kaxgfbzirajp1zgvkic61959aka2xq2c5igms";
+    sha256 = "1asg5mix13ipxgj5h2yj2p0r8km1di5jbcjkn5gmhb37nx7qfv6k";
     name = "openblas-${version}.tar.gz";
   };
 
diff --git a/pkgs/development/libraries/science/math/suitesparse/0001-disable-metis.patch b/pkgs/development/libraries/science/math/suitesparse/0001-disable-metis.patch
new file mode 100644
index 000000000000..b0f7715f755d
--- /dev/null
+++ b/pkgs/development/libraries/science/math/suitesparse/0001-disable-metis.patch
@@ -0,0 +1,36 @@
+From 456b26d0c9101adaa5876954baac0ca0e872dab6 Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Mon, 15 Dec 2014 10:18:01 -0600
+Subject: [PATCH 1/3] disable metis
+
+---
+ SuiteSparse_config/SuiteSparse_config.mk | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/SuiteSparse_config/SuiteSparse_config.mk b/SuiteSparse_config/SuiteSparse_config.mk
+index ba2da23..e1514bf 100644
+--- a/SuiteSparse_config/SuiteSparse_config.mk
++++ b/SuiteSparse_config/SuiteSparse_config.mk
+@@ -212,8 +212,8 @@ XERBLA =
+ # The path is relative to where it is used, in CHOLMOD/Lib, CHOLMOD/MATLAB, etc.
+ # You may wish to use an absolute path.  METIS is optional.  Compile
+ # CHOLMOD with -DNPARTITION if you do not wish to use METIS.
+-METIS_PATH = ../../metis-4.0
+-METIS = ../../metis-4.0/libmetis.a
++# METIS_PATH = ../../metis-4.0
++# METIS = ../../metis-4.0/libmetis.a
+ 
+ #------------------------------------------------------------------------------
+ # UMFPACK configuration:
+@@ -273,7 +273,7 @@ UMFPACK_CONFIG =
+ # -DNSUNPERF        for Solaris only.  If defined, do not use the Sun
+ #                   Performance Library
+ 
+-CHOLMOD_CONFIG = $(GPU_CONFIG)
++CHOLMOD_CONFIG = $(GPU_CONFIG) -DNPARTITION
+ 
+ # uncomment this line to compile CHOLMOD without METIS:
+ # CHOLMOD_CONFIG = -DNPARTITION
+-- 
+2.1.3
+
diff --git a/pkgs/development/libraries/science/math/suitesparse/0002-set-install-dir.patch b/pkgs/development/libraries/science/math/suitesparse/0002-set-install-dir.patch
new file mode 100644
index 000000000000..ef861f68091a
--- /dev/null
+++ b/pkgs/development/libraries/science/math/suitesparse/0002-set-install-dir.patch
@@ -0,0 +1,27 @@
+From e0fee492a315ce1ef8697b056af210beb1465334 Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Mon, 15 Dec 2014 10:18:12 -0600
+Subject: [PATCH 2/3] set install dir
+
+---
+ SuiteSparse_config/SuiteSparse_config.mk | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/SuiteSparse_config/SuiteSparse_config.mk b/SuiteSparse_config/SuiteSparse_config.mk
+index e1514bf..f1046a6 100644
+--- a/SuiteSparse_config/SuiteSparse_config.mk
++++ b/SuiteSparse_config/SuiteSparse_config.mk
+@@ -95,8 +95,8 @@ F77LIB =
+ # LIB = -lm
+ 
+ # For "make install"
+-INSTALL_LIB = /usr/local/lib
+-INSTALL_INCLUDE = /usr/local/include
++INSTALL_LIB = @out@/lib
++INSTALL_INCLUDE = @out@/include
+ 
+ # Which version of MAKE you are using (default is "make")
+ # MAKE = make
+-- 
+2.1.3
+
diff --git a/pkgs/development/libraries/science/math/suitesparse/0003-blas-lapack-flags.patch b/pkgs/development/libraries/science/math/suitesparse/0003-blas-lapack-flags.patch
new file mode 100644
index 000000000000..db0b1c456558
--- /dev/null
+++ b/pkgs/development/libraries/science/math/suitesparse/0003-blas-lapack-flags.patch
@@ -0,0 +1,27 @@
+From a99cca30cfd965683564ae024e8ecc615c61697a Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Mon, 15 Dec 2014 10:24:08 -0600
+Subject: [PATCH 3/3] blas lapack flags
+
+---
+ SuiteSparse_config/SuiteSparse_config.mk | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/SuiteSparse_config/SuiteSparse_config.mk b/SuiteSparse_config/SuiteSparse_config.mk
+index f1046a6..1710162 100644
+--- a/SuiteSparse_config/SuiteSparse_config.mk
++++ b/SuiteSparse_config/SuiteSparse_config.mk
+@@ -119,8 +119,8 @@ INSTALL_INCLUDE = @out@/include
+ # naming the BLAS and LAPACK library (*.a or *.so) files.
+ 
+ # This is probably slow ... it might connect to the Standard Reference BLAS:
+-  BLAS = -lblas -lgfortran
+-  LAPACK = -llapack
++  BLAS = @blasFlags@
++  LAPACK = @lapackFlags@
+ 
+ # MKL 
+ # BLAS = -Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a $(MKLROOT)/lib/intel64/libmkl_core.a $(MKLROOT)/lib/intel64/libmkl_intel_thread.a -Wl,--end-group -lpthread -lm
+-- 
+2.1.3
+
diff --git a/pkgs/development/libraries/suitesparse/default.nix b/pkgs/development/libraries/science/math/suitesparse/4.2.nix
index 4d27701b135a..4d27701b135a 100644
--- a/pkgs/development/libraries/suitesparse/default.nix
+++ b/pkgs/development/libraries/science/math/suitesparse/4.2.nix
diff --git a/pkgs/development/libraries/science/math/suitesparse/SuiteSparse_config.mk b/pkgs/development/libraries/science/math/suitesparse/SuiteSparse_config.mk
new file mode 100644
index 000000000000..157a20d7b5aa
--- /dev/null
+++ b/pkgs/development/libraries/science/math/suitesparse/SuiteSparse_config.mk
@@ -0,0 +1,452 @@
+#===============================================================================
+# SuiteSparse_config.mk:  common configuration file for the SuiteSparse
+#===============================================================================
+
+# This file contains all configuration settings for all packages authored or
+# co-authored by Tim Davis:
+#
+# Package Version       Description
+# ------- -------       -----------
+# AMD     1.2 or later  approximate minimum degree ordering
+# COLAMD  2.4 or later  column approximate minimum degree ordering
+# CCOLAMD 1.0 or later  constrained column approximate minimum degree ordering
+# CAMD    any           constrained approximate minimum degree ordering
+# UMFPACK 4.5 or later  sparse LU factorization, with the BLAS
+# CHOLMOD any           sparse Cholesky factorization, update/downdate
+# KLU     0.8 or later  sparse LU factorization, BLAS-free
+# BTF     0.8 or later  permutation to block triangular form
+# LDL     1.2 or later  concise sparse LDL'
+# CXSparse any          extended version of CSparse (int/long, real/complex)
+# SuiteSparseQR any     sparse QR factorization
+# RBio    2.0 or later  read/write sparse matrices in Rutherford-Boeing format
+#
+# By design, this file is NOT included in the CSparse makefile.
+# That package is fully stand-alone.  CSparse is primarily for teaching;
+# production code should use CXSparse.
+#
+# The SuiteSparse_config directory and the above packages should all appear in
+# a single directory, in order for the Makefile's within each package to find
+# this file.
+#
+# To enable an option of the form "# OPTION = ...", edit this file and
+# delete the "#" in the first column of the option you wish to use.
+#
+# The use of METIS 4.0.1 is optional.  To exclude METIS, you must compile with
+# CHOLMOD_CONFIG set to -DNPARTITION.  See below for details.  However, if you
+# do not have a metis-4.0 directory inside the SuiteSparse directory, the
+# */Makefile's that optionally rely on METIS will automatically detect this
+# and compile without METIS.
+
+#------------------------------------------------------------------------------
+# Generic configuration
+#------------------------------------------------------------------------------
+
+# Using standard definitions from the make environment, typically:
+#
+#   CC              cc      C compiler
+#   CXX             g++     C++ compiler
+#   CFLAGS          [ ]     flags for C and C++ compiler
+#   CPPFLAGS        [ ]     flags for C and C++ compiler
+#   TARGET_ARCH     [ ]     target architecture
+#   FFLAGS          [ ]     flags for Fortran compiler
+#   RM              rm -f   delete a file
+#   AR              ar      create a static *.a library archive
+#   ARFLAGS         rv      flags for ar
+#   MAKE            make    make itself (sometimes called gmake)
+#
+# You can redefine them here, but by default they are used from the
+# default make environment.
+
+# To use OpenMP add -openmp to the CFLAGS
+# If OpenMP is used, it is recommended to define CHOLMOD_OMP_NUM_THREADS
+# as the number of cores per socket on the machine being used to maximize
+# memory performance
+  CFLAGS = 
+# CFLAGS = -g
+# for the icc compiler and OpenMP:
+# CFLAGS = -openmp
+
+# C and C++ compiler flags.  The first three are standard for *.c and *.cpp
+# Add -DNTIMER if you do use any timing routines (otherwise -lrt is required).
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC -DNTIMER
+  CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC
+# for the MKL BLAS:
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC -I$(MKLROOT)/include -D_GNU_SOURCE
+# with no optimization:
+# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH)     -fexceptions -fPIC
+
+# ranlib, and ar, for generating libraries.  If you don't need ranlib,
+# just change it to RANLAB = echo
+RANLIB = ranlib
+ARCHIVE = $(AR) $(ARFLAGS)
+
+# copy and delete a file
+CP = cp -f
+MV = mv -f
+
+# Fortran compiler (not required for 'make' or 'make library')
+F77 = gfortran
+F77FLAGS = $(FFLAGS) -O
+F77LIB =
+
+# C and Fortran libraries.  Remove -lrt if you don't have it.
+  LIB = -lm -lrt
+# Using the following requires CF = ... -DNTIMER on POSIX C systems.
+# LIB = -lm
+
+# For "make install"
+INSTALL_LIB = @out@/lib
+INSTALL_INCLUDE = @out@/include
+
+# Which version of MAKE you are using (default is "make")
+# MAKE = make
+# MAKE = gmake
+
+#------------------------------------------------------------------------------
+# BLAS and LAPACK configuration:
+#------------------------------------------------------------------------------
+
+# UMFPACK and CHOLMOD both require the BLAS.  CHOLMOD also requires LAPACK.
+# See Kazushige Goto's BLAS at http://www.cs.utexas.edu/users/flame/goto/ or
+# http://www.tacc.utexas.edu/~kgoto/ for the best BLAS to use with CHOLMOD.
+# LAPACK is at http://www.netlib.org/lapack/ .  You can use the standard
+# Fortran LAPACK along with Goto's BLAS to obtain very good performance.
+# CHOLMOD gets a peak numeric factorization rate of 3.6 Gflops on a 3.2 GHz
+# Pentium 4 (512K cache, 4GB main memory) with the Goto BLAS, and 6 Gflops
+# on a 2.5Ghz dual-core AMD Opteron.
+
+# These settings will probably not work, since there is no fixed convention for
+# naming the BLAS and LAPACK library (*.a or *.so) files.
+
+# This is probably slow ... it might connect to the Standard Reference BLAS:
+  BLAS = -lf77blas -latlas -lcblas -lgfortran
+  LAPACK = -llapack -latlas -lcblas
+
+# MKL 
+# BLAS = -Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a $(MKLROOT)/lib/intel64/libmkl_core.a $(MKLROOT)/lib/intel64/libmkl_intel_thread.a -Wl,--end-group -lpthread -lm
+# LAPACK = 
+
+# ACML
+# BLAS = -lacml -lgfortran
+# LAPACK =
+
+# OpenBLAS
+# BLAS = -lopenblas
+# LAPACK = 
+
+# NOTE: this next option for the "Goto BLAS" has nothing to do with a "goto"
+# statement.  Rather, the Goto BLAS is written by Dr. Kazushige Goto.
+# Using the Goto BLAS:
+# BLAS = -lgoto -lgfortran -lgfortranbegin
+# BLAS = -lgoto2 -lgfortran -lgfortranbegin -lpthread
+
+# Using non-optimized versions:
+# BLAS = -lblas_plain -lgfortran -lgfortranbegin
+# LAPACK = -llapack_plain
+
+# BLAS = -lblas_plain -lgfortran -lgfortranbegin
+# LAPACK = -llapack
+
+# The BLAS might not contain xerbla, an error-handling routine for LAPACK and
+# the BLAS.  Also, the standard xerbla requires the Fortran I/O library, and
+# stops the application program if an error occurs.  A C version of xerbla
+# distributed with this software (SuiteSparse_config/xerbla/libcerbla.a)
+# includes a Fortran-callable xerbla routine that prints nothing and does not
+# stop the application program.  This is optional.
+
+# XERBLA = ../../SuiteSparse_config/xerbla/libcerbla.a 
+
+# If you wish to use the XERBLA in LAPACK and/or the BLAS instead,
+# use this option:
+XERBLA = 
+
+# If you wish to use the Fortran SuiteSparse_config/xerbla/xerbla.f instead,
+# use this:
+
+# XERBLA = ../../SuiteSparse_config/xerbla/libxerbla.a 
+
+#------------------------------------------------------------------------------
+# GPU configuration for CHOLMOD and SPQR
+#------------------------------------------------------------------------------
+
+# no cuda
+  CUDA_ROOT     =
+  GPU_BLAS_PATH =
+  GPU_CONFIG    =
+  CUDA_PATH     =
+  CUDART_LIB    =
+  CUBLAS_LIB    =
+  CUDA_INC_PATH =
+  NV20          =
+  NV30          =
+  NV35          =
+  NVCC          = echo
+  NVCCFLAGS     =
+
+# with cuda for CHOLMOD
+# CUDA_ROOT     = /usr/local/cuda
+# GPU_BLAS_PATH = $(CUDA_ROOT)
+# with 4 cores (default):
+# GPU_CONFIG    = -I$(CUDA_ROOT)/include -DGPU_BLAS
+# with 10 cores:
+# GPU_CONFIG    = -I$(CUDA_ROOT)/include -DGPU_BLAS -DCHOLMOD_OMP_NUM_THREADS=10
+# CUDA_PATH     = $(CUDA_ROOT)
+# CUDART_LIB    = $(CUDA_ROOT)/lib64/libcudart.so
+# CUBLAS_LIB    = $(CUDA_ROOT)/lib64/libcublas.so
+# CUDA_INC_PATH = $(CUDA_ROOT)/include/
+# NV20          = -arch=sm_20 -Xcompiler -fPIC
+# NV30          = -arch=sm_30 -Xcompiler -fPIC
+# NV35          = -arch=sm_35 -Xcompiler -fPIC
+# NVCC          = $(CUDA_ROOT)/bin/nvcc
+# NVCCFLAGS     = $(NV20) -O3 -gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_35,code=sm_35
+
+# was NVCC      = $(CUDA_ROOT)/bin/nvcc $(NV35) $(NV30) $(NV20)
+
+#------------------------------------------------------------------------------
+# METIS, optionally used by CHOLMOD
+#------------------------------------------------------------------------------
+
+# If you do not have METIS, or do not wish to use it in CHOLMOD, you must
+# compile CHOLMOD with the -DNPARTITION flag.
+
+# The path is relative to where it is used, in CHOLMOD/Lib, CHOLMOD/MATLAB, etc.
+# You may wish to use an absolute path.  METIS is optional.  Compile
+# CHOLMOD with -DNPARTITION if you do not wish to use METIS.
+# METIS_PATH = ../../metis-4.0
+# METIS = ../../metis-4.0/libmetis.a
+
+#------------------------------------------------------------------------------
+# UMFPACK configuration:
+#------------------------------------------------------------------------------
+
+# Configuration flags for UMFPACK.  See UMFPACK/Source/umf_config.h for details.
+#
+# -DNBLAS       do not use the BLAS.  UMFPACK will be very slow.
+# -D'LONGBLAS=long' or -DLONGBLAS='long long' defines the integers used by
+#               LAPACK and the BLAS (defaults to 'int')
+# -DNSUNPERF    do not use the Sun Perf. Library (default is use it on Solaris)
+# -DNRECIPROCAL do not multiply by the reciprocal
+# -DNO_DIVIDE_BY_ZERO   do not divide by zero
+# -DNCHOLMOD    do not use CHOLMOD as a ordering method.  If -DNCHOLMOD is
+#               included in UMFPACK_CONFIG, then UMFPACK  does not rely on
+#               CHOLMOD, CAMD, CCOLAMD, COLAMD, and METIS.
+
+UMFPACK_CONFIG =
+
+# uncomment this line to compile UMFPACK without CHOLMOD:
+# UMFPACK_CONFIG = -DNCHOLMOD
+
+#------------------------------------------------------------------------------
+# CHOLMOD configuration
+#------------------------------------------------------------------------------
+
+# CHOLMOD Library Modules, which appear in libcholmod.a:
+# Core          requires: none
+# Check         requires: Core
+# Cholesky      requires: Core, AMD, COLAMD.  optional: Partition, Supernodal
+# MatrixOps     requires: Core
+# Modify        requires: Core
+# Partition     requires: Core, CCOLAMD, METIS.  optional: Cholesky
+# Supernodal    requires: Core, BLAS, LAPACK
+#
+# CHOLMOD test/demo Modules (all are GNU GPL, do not appear in libcholmod.a):
+# Tcov          requires: Core, Check, Cholesky, MatrixOps, Modify, Supernodal
+#               optional: Partition
+# Valgrind      same as Tcov
+# Demo          requires: Core, Check, Cholesky, MatrixOps, Supernodal
+#               optional: Partition
+#
+# Configuration flags:
+# -DNCHECK          do not include the Check module.       License GNU LGPL
+# -DNCHOLESKY       do not include the Cholesky module.    License GNU LGPL
+# -DNPARTITION      do not include the Partition module.   License GNU LGPL
+#                   also do not include METIS.
+# -DNCAMD           do not use CAMD, etc from Partition module.    GNU LGPL
+# -DNGPL            do not include any GNU GPL Modules in the CHOLMOD library:
+# -DNMATRIXOPS      do not include the MatrixOps module.   License GNU GPL
+# -DNMODIFY         do not include the Modify module.      License GNU GPL
+# -DNSUPERNODAL     do not include the Supernodal module.  License GNU GPL
+#
+# -DNPRINT          do not print anything.
+# -D'LONGBLAS=long' or -DLONGBLAS='long long' defines the integers used by
+#                   LAPACK and the BLAS (defaults to 'int')
+# -DNSUNPERF        for Solaris only.  If defined, do not use the Sun
+#                   Performance Library
+
+CHOLMOD_CONFIG = $(GPU_CONFIG) -DNPARTITION
+
+# uncomment this line to compile CHOLMOD without METIS:
+# CHOLMOD_CONFIG = -DNPARTITION
+
+#------------------------------------------------------------------------------
+# SuiteSparseQR configuration:
+#------------------------------------------------------------------------------
+
+# The SuiteSparseQR library can be compiled with the following options:
+#
+# -DNPARTITION      do not include the CHOLMOD partition module
+# -DNEXPERT         do not include the functions in SuiteSparseQR_expert.cpp
+# -DHAVE_TBB        enable the use of Intel's Threading Building Blocks (TBB)
+
+# default, without timing, without TBB:
+SPQR_CONFIG = $(GPU_CONFIG)
+# with TBB:
+# SPQR_CONFIG = -DHAVE_TBB
+
+# This is needed for IBM AIX: (but not for and C codes, just C++)
+# SPQR_CONFIG = -DBLAS_NO_UNDERSCORE
+
+# with TBB, you must select this:
+# TBB = -ltbb
+# without TBB:
+TBB =
+
+#------------------------------------------------------------------------------
+# code formatting
+#------------------------------------------------------------------------------
+
+# Use "grep" only, if you do not have "indent"  
+# PRETTY = grep -v "^\#"
+# PRETTY = grep -v "^\#" | indent -bl -nce -ss -bli0 -i4 -sob -l120
+  PRETTY = grep -v "^\#" | indent -bl -nce -bli0 -i4 -sob -l120
+
+#------------------------------------------------------------------------------
+# Linux
+#------------------------------------------------------------------------------
+
+# Using default compilers:
+# CC = gcc
+# CF = $(CFLAGS) -O3 -fexceptions
+
+# alternatives:
+# CF = $(CFLAGS) -g -fexceptions \
+#       -Wall -W -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
+#       -Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi \
+#       -funit-at-a-time
+# CF = $(CFLAGS) -O3 -fexceptions \
+#       -Wall -W -Werror -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
+#       -Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi
+# CF = $(CFLAGS) -O3 -fexceptions -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
+# CF = $(CFLAGS) -O3
+# CF = $(CFLAGS) -O3 -g -fexceptions
+# CF = $(CFLAGS) -g -fexceptions \
+#       -Wall -W -Wshadow \
+#       -Wredundant-decls -Wdisabled-optimization -ansi
+
+# consider:
+# -fforce-addr -fmove-all-movables -freduce-all-givs -ftsp-ordering
+# -frename-registers -ffast-math -funroll-loops
+
+# Using the Goto BLAS:
+# BLAS = -lgoto -lfrtbegin -lg2c $(XERBLA) -lpthread
+
+# Using Intel's icc and ifort compilers:
+#   (does not work for mexFunctions unless you add a mexopts.sh file)
+# F77 = ifort
+# CC = icc
+# CF = $(CFLAGS) -O3 -xN -vec_report=0
+# CF = $(CFLAGS) -g
+
+# 64bit:
+# F77FLAGS = -O -m64
+# CF = $(CFLAGS) -O3 -fexceptions -m64
+# BLAS = -lgoto64 -lfrtbegin -lg2c -lpthread $(XERBLA)
+# LAPACK = -llapack64
+
+# SUSE Linux 10.1, AMD Opteron, with GOTO Blas
+# F77 = gfortran
+# BLAS = -lgoto_opteron64 -lgfortran
+
+# SUSE Linux 10.1, Intel Pentium, with GOTO Blas
+# F77 = gfortran
+# BLAS = -lgoto -lgfortran
+
+#------------------------------------------------------------------------------
+# Mac
+#------------------------------------------------------------------------------
+
+# As recommended by macports, http://suitesparse.darwinports.com/
+# I've tested them myself on Mac OSX 10.6.1 and 10.6.8 (Snow Leopard),
+# on my MacBook Air, and they work fine.
+
+# F77 = gfortran
+# CF = $(CFLAGS) -O3 -fno-common -fexceptions -DNTIMER
+# BLAS = -framework Accelerate
+# LAPACK = -framework Accelerate
+# LIB = -lm
+
+#------------------------------------------------------------------------------
+# Solaris
+#------------------------------------------------------------------------------
+
+# 32-bit
+# CF = $(CFLAGS) -KPIC -dalign -xc99=%none -Xc -xlibmieee -xO5 -xlibmil -m32
+
+# 64-bit
+# CF = $(CFLAGS) -fast -KPIC -xc99=%none -xlibmieee -xlibmil -m64 -Xc
+
+# FFLAGS = -fast -KPIC -dalign -xlibmil -m64
+
+# The Sun Performance Library includes both LAPACK and the BLAS:
+# BLAS = -xlic_lib=sunperf
+# LAPACK =
+
+
+#------------------------------------------------------------------------------
+# Compaq Alpha
+#------------------------------------------------------------------------------
+
+# 64-bit mode only
+# CF = $(CFLAGS) -O2 -std1
+# BLAS = -ldxml
+# LAPACK =
+
+#------------------------------------------------------------------------------
+# IBM RS 6000
+#------------------------------------------------------------------------------
+
+# BLAS = -lessl
+# LAPACK =
+
+# 32-bit mode:
+# CF = $(CFLAGS) -O4 -qipa -qmaxmem=16384 -qproto
+# F77FLAGS = -O4 -qipa -qmaxmem=16384
+
+# 64-bit mode:
+# CF = $(CFLAGS) -O4 -qipa -qmaxmem=16384 -q64 -qproto
+# F77FLAGS = -O4 -qipa -qmaxmem=16384 -q64
+
+#------------------------------------------------------------------------------
+# SGI IRIX
+#------------------------------------------------------------------------------
+
+# BLAS = -lscsl
+# LAPACK =
+
+# 32-bit mode
+# CF = $(CFLAGS) -O
+
+# 64-bit mode (32 bit int's and 64-bit long's):
+# CF = $(CFLAGS) -64
+# F77FLAGS = -64
+
+# SGI doesn't have ranlib
+# RANLIB = echo
+
+#------------------------------------------------------------------------------
+# AMD Opteron (64 bit)
+#------------------------------------------------------------------------------
+
+# BLAS = -lgoto_opteron64 -lg2c
+# LAPACK = -llapack_opteron64
+
+# SUSE Linux 10.1, AMD Opteron
+# F77 = gfortran
+# BLAS = -lgoto_opteron64 -lgfortran
+# LAPACK = -llapack_opteron64
+
+#------------------------------------------------------------------------------
+# remove object files and profile output
+#------------------------------------------------------------------------------
+
+CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.tcov *.gcov gmon.out *.bak *.d *.gcda *.gcno
diff --git a/pkgs/development/libraries/science/math/suitesparse/default.nix b/pkgs/development/libraries/science/math/suitesparse/default.nix
new file mode 100644
index 000000000000..add4ca9a08f4
--- /dev/null
+++ b/pkgs/development/libraries/science/math/suitesparse/default.nix
@@ -0,0 +1,58 @@
+{ stdenv, fetchurl, substituteAll
+, atlasWithLapack, gfortran }:
+
+let
+  name = "suitesparse-4.4.1";
+in
+stdenv.mkDerivation {
+  inherit name;
+
+  src = fetchurl {
+    url = "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.4.1.tar.gz";
+    sha256 = "0y8i6dizrr556xggpjyc7wijjv4jbizhssmjj4jv8n1s7zxy2z0n";
+  };
+
+  patches = [
+    ./0001-disable-metis.patch
+    ./0002-set-install-dir.patch
+    (substituteAll {
+      src = ./0003-blas-lapack-flags.patch;
+      blasFlags = "-lf77blas -latlas -lcblas -lgfortran";
+      lapackFlags= "-llapack -latlas -lcblas";
+    })
+  ];
+
+  preConfigure = ''
+    substituteAllInPlace SuiteSparse_config/SuiteSparse_config.mk
+    mkdir -p $out/lib
+    mkdir -p $out/include
+  '';
+
+  postInstall = ''
+    # Install documentation
+    outdoc=$out/share/doc/${name}
+    mkdir -p $outdoc
+    cp -r AMD/Doc $outdoc/amd
+    cp -r BTF/Doc $outdoc/bft
+    cp -r CAMD/Doc $outdoc/camd
+    cp -r CCOLAMD/Doc $outdoc/ccolamd
+    cp -r CHOLMOD/Doc $outdoc/cholmod
+    cp -r COLAMD/Doc $outdoc/colamd
+    cp -r CXSparse/Doc $outdoc/cxsparse
+    cp -r KLU/Doc $outdoc/klu
+    cp -r LDL/Doc $outdoc/ldl
+    cp -r RBio/Doc $outdoc/rbio
+    cp -r SPQR/Doc $outdoc/spqr
+    cp -r UMFPACK/Doc $outdoc/umfpack
+  '';
+
+  nativeBuildInputs = [ gfortran ];
+  buildInputs = [ atlasWithLapack ];
+
+  meta = with stdenv.lib; {
+    homepage = http://faculty.cse.tamu.edu/davis/suitesparse.html;
+    description = "A suite of sparse matrix algorithms";
+    license = with licenses; [ bsd2 gpl2Plus lgpl21Plus ];
+    maintainers = with maintainers; [ ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/suitesparse/disable-metis.patch b/pkgs/development/libraries/science/math/suitesparse/disable-metis.patch
index 5b735eb7d3c9..5b735eb7d3c9 100644
--- a/pkgs/development/libraries/suitesparse/disable-metis.patch
+++ b/pkgs/development/libraries/science/math/suitesparse/disable-metis.patch
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 34b877150a7e..718681907421 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -3499,13 +3499,14 @@ let
     liblapack = liblapack.override {shared = true;};
     llvm = llvm_33;
     openblas = openblas_0_2_2;
+    suitesparse = suitesparse_4_2;
   };
 
   julia033 = let
     liblapack = liblapack_3_5_0.override {shared = true;};
   in callPackage ../development/compilers/julia/0.3.3.nix {
     inherit liblapack;
-    suitesparse = suitesparse.override {
+    suitesparse = suitesparse_4_2.override {
       inherit liblapack;
     };
     llvm = llvm_33;
@@ -6981,8 +6982,6 @@ let
 
   suil = callPackage ../development/libraries/audio/suil { };
 
-  suitesparse = callPackage ../development/libraries/suitesparse { };
-
   sutils = callPackage ../tools/misc/sutils { };
 
   sword = callPackage ../development/libraries/sword { };
@@ -12174,8 +12173,12 @@ let
     # great feature, but it's of limited use with pre-built binaries
     # coming from a central build farm.
     tolerateCpuTimingInaccuracy = true;
+    liblapack = liblapack_3_5_0;
+    withLapack = false;
   };
 
+  atlasWithLapack = atlas.override { withLapack = true; };
+
   blas = callPackage ../development/libraries/science/math/blas { };
 
   content = builderDefsPackage ../applications/science/math/content {
@@ -12207,6 +12210,9 @@ let
 
   sage = callPackage ../applications/science/math/sage { };
 
+  suitesparse_4_2 = callPackage ../development/libraries/science/math/suitesparse/4.2.nix { };
+  suitesparse_4_4_1 = callPackage ../development/libraries/science/math/suitesparse {};
+
   ipopt = callPackage ../development/libraries/science/math/ipopt { };
 
   ### SCIENCE/MOLECULAR-DYNAMICS