otadump: init at 0.1.2 (#329129)
[NixPkgs.git] / pkgs / by-name / mu / mumps / package.nix
blobd27f8b5e3a3c2e42be73ccd86cad50b5a704c760
2   blas,
3   fetchzip,
4   fetchpatch,
5   gfortran,
6   lapack,
7   lib,
8   metis,
9   parmetis,
10   withParmetis ? false, # default to false due to unfree license
11   scotch,
12   withPtScotch ? mpiSupport,
13   stdenv,
14   fixDarwinDylibNames,
15   mpi,
16   mpiSupport ? false,
17   mpiCheckPhaseHook,
18   scalapack,
20 assert withParmetis -> mpiSupport;
21 assert withPtScotch -> mpiSupport;
22 let
23   profile = if mpiSupport then "debian.PAR" else "debian.SEQ";
24   LMETIS = toString ([ "-lmetis" ] ++ lib.optional withParmetis "-lparmetis");
25   LSCOTCH = toString (
26     if withPtScotch then
27       [
28         "-lptscotch"
29         "-lptesmumps"
30         "-lptscotcherr"
31       ]
32     else
33       [
34         "-lesmumps"
35         "-lscotch"
36         "-lscotcherr"
37       ]
38   );
39   ORDERINGSF = toString (
40     [
41       "-Dmetis"
42       "-Dpord"
43       "-Dscotch"
44     ]
45     ++ lib.optional withParmetis "-Dparmetis"
46     ++ lib.optional withPtScotch "-Dptscotch"
47   );
49 stdenv.mkDerivation (finalAttrs: {
50   name = "mumps";
51   version = "5.7.3";
52   # makeFlags contain space and one should use makeFlagsArray+
53   # Setting this magic var is an optional solution
54   __structuredAttrs = true;
56   src = fetchzip {
57     url = "https://mumps-solver.org/MUMPS_${finalAttrs.version}.tar.gz";
58     hash = "sha256-ZnIfAuvOBJDYqCtKGlWs0r39nG6X2lAVRuUmeIJenZw=";
59   };
61   postPatch = lib.optionalString stdenv.hostPlatform.isDarwin ''
62     substituteInPlace src/Makefile --replace-fail \
63       "-Wl,\''$(SONAME),libmumps_common" \
64       "-Wl,-install_name,$out/lib/libmumps_common"
65   '';
67   configurePhase = ''
68     cp Make.inc/Makefile.${profile} ./Makefile.inc
69   '';
71   enableParallelBuilding = true;
73   makeFlags =
74     lib.optionals stdenv.hostPlatform.isDarwin [
75       "SONAME="
76       "LIBEXT_SHARED=.dylib"
77     ]
78     ++ [
79       "ISCOTCH=-I${scotch.dev}/include"
80       "LMETIS=${LMETIS}"
81       "LSCOTCH=${LSCOTCH}"
82       "ORDERINGSF=${ORDERINGSF}"
83       "OPTF=-O3 -fallow-argument-mismatch"
84       "OPTC=-O3"
85       "OPTL=-O3"
86       "SCALAP=-lscalapack"
87       "allshared"
88     ];
90   installPhase =
91     ''
92       mkdir $out
93       cp -r include lib $out
94     ''
95     + lib.optionalString (!mpiSupport) ''
96       # Install mumps_seq headers
97       install -Dm 444 -t $out/include/mumps_seq libseq/*.h
99       # Add some compatibility with coin-or-mumps
100       ln -s $out/include/mumps_seq/mpi.h $out/include/mumps_mpi.h
101     '';
103   nativeBuildInputs = [
104     gfortran
105   ] ++ lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames;
107   # Parmetis should be placed before scotch to avoid conflict of header file "parmetis.h"
108   buildInputs =
109     lib.optional withParmetis parmetis
110     ++ lib.optional mpiSupport scalapack
111     ++ [
112       blas
113       lapack
114       metis
115       scotch
116     ];
118   doInstallCheck = true;
119   nativeInstallCheckInputs = lib.optional mpiSupport mpiCheckPhaseHook;
120   installCheckPhase = ''
121     runHook preInstallCheck
122     ${lib.optionalString stdenv.hostPlatform.isDarwin "export DYLD_LIBRARY_PATH=$out/lib\n"}
123     ${lib.optionalString mpiSupport "export MPIRUN='mpirun -n 2'\n"}
124     cd examples
125     $MPIRUN ./ssimpletest <input_simpletest_real
126     $MPIRUN ./dsimpletest <input_simpletest_real
127     $MPIRUN ./csimpletest <input_simpletest_cmplx
128     $MPIRUN ./zsimpletest <input_simpletest_cmplx
129     $MPIRUN ./c_example
130     $MPIRUN ./multiple_arithmetics_example
131     $MPIRUN ./ssimpletest_save_restore <input_simpletest_real
132     $MPIRUN ./dsimpletest_save_restore <input_simpletest_real
133     $MPIRUN ./csimpletest_save_restore <input_simpletest_cmplx
134     $MPIRUN ./zsimpletest_save_restore <input_simpletest_cmplx
135     $MPIRUN ./c_example_save_restore
136     runHook postInstallCheck
137   '';
139   passthru = {
140     inherit withParmetis withPtScotch mpiSupport;
141   };
143   meta = {
144     description = "MUltifrontal Massively Parallel sparse direct Solver";
145     homepage = "http://mumps-solver.org/";
146     license = lib.licenses.cecill-c;
147     maintainers = with lib.maintainers; [
148       nim65s
149       qbisi
150     ];
151     platforms = lib.platforms.unix;
152     # Dependency of scalapack for mpiSupport is broken on darwin platform
153     broken = mpiSupport && stdenv.hostPlatform.isDarwin;
154   };