summary refs log tree commit diff
path: root/pkgs/development/libraries/blitz
diff options
context:
space:
mode:
authorAndreas Herrmann <andreash87@gmx.ch>2014-11-20 11:52:38 +0100
committerVladimír Čunát <vcunat@gmail.com>2014-11-21 11:49:39 +0100
commitf89eac32a7a2099d16a1a82709494b5d3f5e3694 (patch)
treead9e60838c1e2b51bbd4ee1b5ea1dad5ffe39a46 /pkgs/development/libraries/blitz
parent8a175367570bdd7576413bf673112399ea90c396 (diff)
downloadnixlib-f89eac32a7a2099d16a1a82709494b5d3f5e3694.tar
nixlib-f89eac32a7a2099d16a1a82709494b5d3f5e3694.tar.gz
nixlib-f89eac32a7a2099d16a1a82709494b5d3f5e3694.tar.bz2
nixlib-f89eac32a7a2099d16a1a82709494b5d3f5e3694.tar.lz
nixlib-f89eac32a7a2099d16a1a82709494b5d3f5e3694.tar.xz
nixlib-f89eac32a7a2099d16a1a82709494b5d3f5e3694.tar.zst
nixlib-f89eac32a7a2099d16a1a82709494b5d3f5e3694.zip
blitz: New package, version 0.10 (close #5062)
Fast multi-dimensional array library for C++

Blitz++ is a C++ class library for scientific computing which provides
performance on par with Fortran 77/90. It uses template techniques to
achieve high performance. Blitz++ provides dense arrays and vectors,
random number generators, and small vectors (useful for representing
multicomponent or vector fields).
Diffstat (limited to 'pkgs/development/libraries/blitz')
-rw-r--r--pkgs/development/libraries/blitz/blitz-gcc47.patch33
-rw-r--r--pkgs/development/libraries/blitz/blitz-testsuite-stencil-et.patch13
-rw-r--r--pkgs/development/libraries/blitz/default.nix80
3 files changed, 126 insertions, 0 deletions
diff --git a/pkgs/development/libraries/blitz/blitz-gcc47.patch b/pkgs/development/libraries/blitz/blitz-gcc47.patch
new file mode 100644
index 000000000000..d0b35665567b
--- /dev/null
+++ b/pkgs/development/libraries/blitz/blitz-gcc47.patch
@@ -0,0 +1,33 @@
+diff -ur blitz-0.10/blitz/bzdebug.h blitz-0.10.new/blitz/bzdebug.h
+--- blitz-0.10/blitz/bzdebug.h	2012-05-11 22:11:13.000000000 +0200
++++ blitz-0.10.new/blitz/bzdebug.h	2012-06-28 15:42:38.060656045 +0200
+@@ -117,15 +117,15 @@
+     }
+   }
+ 
+-    #define BZASSERT(X)        checkAssert(X, __FILE__, __LINE__)
+-    #define BZPRECONDITION(X)  checkAssert(X, __FILE__, __LINE__)
+-    #define BZPOSTCONDITION(X) checkAssert(X, __FILE__, __LINE__)
+-    #define BZSTATECHECK(X,Y)  checkAssert(X == Y, __FILE__, __LINE__)
++    #define BZASSERT(X)        blitz::checkAssert(X, __FILE__, __LINE__)
++    #define BZPRECONDITION(X)  blitz::checkAssert(X, __FILE__, __LINE__)
++    #define BZPOSTCONDITION(X) blitz::checkAssert(X, __FILE__, __LINE__)
++    #define BZSTATECHECK(X,Y)  blitz::checkAssert(X == Y, __FILE__, __LINE__)
+     #define BZPRECHECK(X,Y)                                    \
+         {                                                      \
+             if ((assertFailMode == false) && (!(X)))           \
+                 BZ_STD_SCOPE(cerr) << Y << BZ_STD_SCOPE(endl); \
+-            checkAssert(X, __FILE__, __LINE__);                \
++            blitz::checkAssert(X, __FILE__, __LINE__);                \
+         }
+ 
+     #define BZ_DEBUG_MESSAGE(X)                                          \
+@@ -138,7 +138,7 @@
+         }
+ 
+     #define BZ_DEBUG_PARAM(X) X
+-    #define BZ_PRE_FAIL        checkAssert(0)
++    #define BZ_PRE_FAIL        blitz::checkAssert(0)
+     #define BZ_ASM_DEBUG_MARKER
+ 
+ #elif defined(BZ_DEBUG)
diff --git a/pkgs/development/libraries/blitz/blitz-testsuite-stencil-et.patch b/pkgs/development/libraries/blitz/blitz-testsuite-stencil-et.patch
new file mode 100644
index 000000000000..fcff8685a08d
--- /dev/null
+++ b/pkgs/development/libraries/blitz/blitz-testsuite-stencil-et.patch
@@ -0,0 +1,13 @@
+diff --git a/testsuite/stencil-et.cpp b/testsuite/stencil-et.cpp
+index b23e979..fe6b5ed 100644
+--- a/testsuite/stencil-et.cpp
++++ b/testsuite/stencil-et.cpp
+@@ -44,7 +44,7 @@ void test_expr(const T1& d1, const T2& d2)
+   BZTEST(all(d1==d2));
+ }
+ */
+-#define test_expr(d1,d2) BZTEST(all((d1)==(d2)));
++#define test_expr(d1,d2) BZTEST(all((d1)-(d2)<=1e-7));
+ 
+ // Test two vector expressions for equality
+ template<typename T1, typename T2>
diff --git a/pkgs/development/libraries/blitz/default.nix b/pkgs/development/libraries/blitz/default.nix
new file mode 100644
index 000000000000..a64a8bd59437
--- /dev/null
+++ b/pkgs/development/libraries/blitz/default.nix
@@ -0,0 +1,80 @@
+{ stdenv, fetchurl, pkgconfig, gfortran, texinfo
+
+# Select SIMD alignment width (in bytes) for vectorization.
+, simdWidth ? 1
+
+# Pad arrays to simdWidth by default?
+# Note: Only useful if simdWidth > 1
+, enablePadding ? false
+
+# Activate serialization through Boost.Serialize?
+, enableSerialization ? true, boost ? null
+
+# Activate test-suite?
+# WARNING: Some of the tests require up to 1700MB of memory to compile.
+, doCheck ? true
+
+}:
+
+assert enableSerialization -> boost != null;
+
+let
+  inherit (stdenv.lib) optional optionals optionalString;
+in
+
+stdenv.mkDerivation rec {
+  name = "blitz++-0.10";
+  src = fetchurl {
+    url = mirror://sourceforge/blitz/blitz-0.10.tar.gz;
+    sha256 = "153g9sncir6ip9l7ssl6bhc4qzh0qr3lx2d15qm68hqxj7kg0kl0";
+  };
+
+  patches = [ ./blitz-gcc47.patch ./blitz-testsuite-stencil-et.patch ];
+
+  buildInputs = [ pkgconfig gfortran texinfo ]
+    ++ optional (boost != null) boost
+    ;
+
+  configureFlags =
+    [ "--enable-shared"
+      "--disable-static"
+      "--enable-fortran"
+      "--enable-optimize"
+      "--with-pic=yes"
+      "--enable-html-docs"
+      "--disable-doxygen"
+      "--disable-dot"
+      "--disable-latex-docs"
+      "--enable-simd-width=${toString simdWidth}"
+    ]
+    ++ optional enablePadding "--enable-array-length-padding"
+    ++ optional enableSerialization "--enable-serialization"
+    ++ optionals (boost != null) [ "--with-boost=${boost.dev}"
+                                   "--with-boost-libdir=${boost.lib}/lib" ]
+    ++ optional stdenv.is64bit "--enable-64bit"
+    ;
+
+  enableParallelBuilding = true;
+
+  buildFlags = "lib info pdf html";
+  installTargets = [ "install" "install-info" "install-pdf" "install-html" ];
+
+  inherit doCheck;
+  checkTarget = "check-testsuite check-examples";
+
+  meta = {
+    description = "Fast multi-dimensional array library for C++";
+    homepage = http://sourceforge.net/projects/blitz/;
+    license = stdenv.lib.licenses.lgpl3;
+    platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
+    maintainers = [ stdenv.lib.maintainers.aherrmann ];
+
+    longDescription = ''
+      Blitz++ is a C++ class library for scientific computing which provides
+      performance on par with Fortran 77/90. It uses template techniques to
+      achieve high performance. Blitz++ provides dense arrays and vectors,
+      random number generators, and small vectors (useful for representing
+      multicomponent or vector fields).
+    '';
+  };
+}