1{ lib, stdenv
2, fetchurl
3, fetchpatch
4, blas
5, boost
6, cmake
7, doxygen
8, eigen
9, gtest
10, hdf5
11, lapack
12, mpi
13, mpi4py
14, numpy
15, pkg-config
16, ply
17, pybind11
18, pytest
19, python
20, pythonPackages
21, scotch
22, setuptools
23, six
24, sphinx
25, suitesparse
26, swig
27, sympy
28, zlib
29, nixosTests
30}:
31
32let
33 version = "2019.1.0";
34
35 dijitso = pythonPackages.buildPythonPackage {
36 pname = "dijitso";
37 inherit version;
38 src = fetchurl {
39 url = "https://bitbucket.org/fenics-project/dijitso/downloads/dijitso-${version}.tar.gz";
40 sha256 = "1ncgbr0bn5cvv16f13g722a0ipw6p9y6p4iasxjziwsp8kn5x97a";
41 };
42 propagatedBuildInputs = [ numpy six ];
43 nativeCheckInputs = [ pytest ];
44 preCheck = ''
45 export HOME=$PWD
46 '';
47 checkPhase = ''
48 runHook preCheck
49 py.test test/
50 runHook postCheck
51 '';
52 meta = {
53 description = "Distributed just-in-time shared library building";
54 homepage = "https://fenicsproject.org/";
55 platforms = lib.platforms.all;
56 license = lib.licenses.lgpl3;
57 };
58 };
59
60 fiat = pythonPackages.buildPythonPackage {
61 pname = "fiat";
62 inherit version;
63 src = fetchurl {
64 url = "https://bitbucket.org/fenics-project/fiat/downloads/fiat-${version}.tar.gz";
65 sha256 = "1sbi0fbr7w9g9ajr565g3njxrc3qydqjy3334vmz5xg0rd3106il";
66 };
67 propagatedBuildInputs = [ numpy six sympy ];
68 nativeCheckInputs = [ pytest ];
69
70 preCheck = ''
71 # Workaround pytest 4.6.3 issue.
72 # See: https://bitbucket.org/fenics-project/fiat/pull-requests/59
73 rm test/unit/test_quadrature.py
74 rm test/unit/test_reference_element.py
75 rm test/unit/test_fiat.py
76
77 # Fix `np.float` deprecation in Numpy 1.20
78 grep -lr 'np.float(' test/ | while read -r fn; do
79 substituteInPlace "$fn" \
80 --replace "np.float(" "np.float64("
81 done
82 '';
83 checkPhase = ''
84 runHook preCheck
85 py.test test/unit/
86 runHook postCheck
87 '';
88 meta = {
89 description = "Automatic generation of finite element basis functions";
90 homepage = "https://fenicsproject.org/";
91 platforms = lib.platforms.all;
92 license = lib.licenses.lgpl3;
93 };
94 };
95
96 ufl = pythonPackages.buildPythonPackage {
97 pname = "ufl";
98 inherit version;
99 src = fetchurl {
100 url = "https://bitbucket.org/fenics-project/ufl/downloads/ufl-${version}.tar.gz";
101 sha256 = "04daxwg4y9c51sdgvwgmlc82nn0fjw7i2vzs15ckdc7dlazmcfi1";
102 };
103 propagatedBuildInputs = [ numpy six ];
104 nativeCheckInputs = [ pytest ];
105 checkPhase = ''
106 runHook preCheck
107 py.test test/
108 runHook postCheck
109 '';
110 meta = {
111 description = "A domain-specific language for finite element variational forms";
112 homepage = "https://fenicsproject.org/";
113 platforms = lib.platforms.all;
114 license = lib.licenses.lgpl3;
115 };
116 };
117
118 ffc = pythonPackages.buildPythonPackage {
119 pname = "ffc";
120 inherit version;
121 src = fetchurl {
122 url = "https://bitbucket.org/fenics-project/ffc/downloads/ffc-${version}.tar.gz";
123 sha256 = "1zdg6pziss4va74pd7jjl8sc3ya2gmhpypccmyd8p7c66ji23y2g";
124 };
125 nativeBuildInputs = [
126 pybind11
127 ];
128 propagatedBuildInputs = [
129 dijitso
130 fiat
131 numpy
132 six
133 sympy
134 ufl
135 setuptools
136 ];
137 nativeCheckInputs = [ pytest ];
138 preCheck = ''
139 export HOME=$PWD
140 rm test/unit/ufc/finite_element/test_evaluate.py
141 '';
142 checkPhase = ''
143 runHook preCheck
144 py.test test/unit/
145 runHook postCheck
146 '';
147 meta = {
148 description = "A compiler for finite element variational forms";
149 homepage = "https://fenicsproject.org/";
150 platforms = lib.platforms.all;
151 license = lib.licenses.lgpl3;
152 };
153 };
154 dolfin = stdenv.mkDerivation {
155 pname = "dolfin";
156 inherit version;
157 src = fetchurl {
158 url = "https://bitbucket.org/fenics-project/dolfin/downloads/dolfin-${version}.tar.gz";
159 sha256 = "0kbyi4x5f6j4zpasch0swh0ch81w2h92rqm1nfp3ydi4a93vky33";
160 };
161 patches = [
162 (fetchpatch {
163 name = "fix-double-prefix.patch";
164 url = "https://bitbucket.org/josef_kemetmueller/dolfin/commits/328e94acd426ebaf2243c072b806be3379fd4340/raw";
165 sha256 = "1zj7k3y7vsx0hz3gwwlxhq6gdqamqpcw90d4ishwx5ps5ckcsb9r";
166 })
167 (fetchpatch {
168 url = "https://bitbucket.org/fenics-project/dolfin/issues/attachments/1116/fenics-project/dolfin/1602778118.04/1116/0001-Use-__BYTE_ORDER__-instead-of-removed-Boost-endian.h.patch";
169 hash = "sha256-wPaDmPU+jaD3ce3nNEbvM5p8e3zBdLozamLTJ/0ai2c=";
170 })
171 ];
172 # https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=dolfin&id=a965ad934f7b3d49a5e77fa6fb5e3c710ec2163e
173 postPatch = ''
174 sed -i '20 a #include <algorithm>' dolfin/geometry/IntersectionConstruction.cpp
175 sed -i '26 a #include <algorithm>' dolfin/mesh/MeshFunction.h
176 sed -i '25 a #include <cstdint>' dolfin/mesh/MeshConnectivity.h
177 '';
178 propagatedBuildInputs = [
179 dijitso
180 fiat
181 numpy
182 six
183 ufl
184 ];
185 nativeBuildInputs = [
186 cmake
187 doxygen
188 pkg-config
189 ];
190 buildInputs = [
191 boost
192 dijitso
193 eigen
194 ffc
195 fiat
196 hdf5
197 mpi
198 numpy
199 blas
200 lapack
201 ply
202 python
203 scotch
204 six
205 sphinx
206 suitesparse
207 swig
208 sympy
209 ufl
210 zlib
211 ];
212 cmakeFlags = [
213 "-DDOLFIN_CXX_FLAGS=-std=c++11"
214 "-DDOLFIN_AUTO_DETECT_MPI=ON"
215 "-DDOLFIN_ENABLE_CHOLMOD=ON"
216 "-DDOLFIN_ENABLE_DOCS=ON"
217 "-DDOLFIN_ENABLE_HDF5=ON"
218 "-DDOLFIN_ENABLE_MPI=ON"
219 "-DDOLFIN_ENABLE_SCOTCH=ON"
220 "-DDOLFIN_ENABLE_UMFPACK=ON"
221 "-DDOLFIN_ENABLE_ZLIB=ON"
222 "-DDOLFIN_SKIP_BUILD_TESTS=ON" # Otherwise SCOTCH is not found
223 # TODO: Enable the following features
224 "-DDOLFIN_ENABLE_PARMETIS=OFF"
225 "-DDOLFIN_ENABLE_PETSC=OFF"
226 "-DDOLFIN_ENABLE_SLEPC=OFF"
227 "-DDOLFIN_ENABLE_TRILINOS=OFF"
228 ];
229 installCheckPhase = ''
230 source $out/share/dolfin/dolfin.conf
231 make runtests
232 '';
233 meta = {
234 description = "The FEniCS Problem Solving Environment in Python and C++";
235 homepage = "https://fenicsproject.org/";
236 license = lib.licenses.lgpl3;
237 };
238 };
239 python-dolfin = pythonPackages.buildPythonPackage rec {
240 pname = "dolfin";
241 inherit version;
242 disabled = pythonPackages.isPy27;
243 src = dolfin.src;
244 sourceRoot = "${pname}-${version}/python";
245 nativeBuildInputs = [
246 pybind11
247 cmake
248 ];
249 dontUseCmakeConfigure = true;
250 preConfigure = ''
251 export CMAKE_PREFIX_PATH=${pybind11}/share/cmake/pybind11:$CMAKE_PREFIX_PATH
252 substituteInPlace setup.py --replace "pybind11==2.2.4" "pybind11"
253 substituteInPlace dolfin/jit/jit.py \
254 --replace 'pkgconfig.exists("dolfin")' 'pkgconfig.exists("${dolfin}/lib/pkgconfig/dolfin.pc")' \
255 --replace 'pkgconfig.parse("dolfin")' 'pkgconfig.parse("${dolfin}/lib/pkgconfig/dolfin.pc")'
256 '';
257 buildInputs = [
258 dolfin
259 boost
260 ];
261
262 propagatedBuildInputs = [
263 dijitso
264 ffc
265 mpi4py
266 numpy
267 ufl
268 pythonPackages.pkgconfig
269 pythonPackages.pybind11
270 ];
271 doCheck = false; # Tries to orte_ess_init and call ssh to localhost
272 passthru.tests = { inherit (nixosTests) fenics; };
273 meta = {
274 description = "Python bindings for the DOLFIN FEM compiler";
275 homepage = "https://fenicsproject.org/";
276 platforms = lib.platforms.all;
277 license = lib.licenses.lgpl3;
278 };
279 };
280in python-dolfin