summary refs log tree commit diff
path: root/pkgs/development/libraries/blitz/default.nix
blob: f370e45b5fdd0e0191bb9728b97f0da2d9ede7b2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
{ 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;
in

stdenv.mkDerivation {
  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 ];

  nativeBuildInputs = [ pkgconfig ];
  buildInputs = [ gfortran texinfo ]
    ++ optional (boost != null) boost;

  configureFlags =
    [ "--enable-shared"
      "--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.out}/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 = https://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).
    '';

    broken = true; # failing test, ancient version, no library user in nixpkgs => if you care to fix it, go ahead
  };
}