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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
{
lib,
stdenv,
fetchurl,
fetchpatch,
cmake,
blas,
lapack,
gfortran,
gmm,
fltk,
libjpeg,
zlib,
libGL,
libGLU,
xorg,
opencascade-occt,
python ? null,
enablePython ? false,
}:
assert (!blas.isILP64) && (!lapack.isILP64);
assert enablePython -> (python != null);
stdenv.mkDerivation rec {
pname = "gmsh";
version = "4.13.1";
src = fetchurl {
url = "https://gmsh.info/src/gmsh-${version}-source.tgz";
hash = "sha256-d5chRfQxcmAm1QWWpqRPs8HJXCElUhjWaVWAa4btvo0=";
};
buildInputs =
[
blas
lapack
gmm
fltk
libjpeg
zlib
opencascade-occt
]
++ lib.optionals (!stdenv.hostPlatform.isDarwin) [
libGL
libGLU
xorg.libXrender
xorg.libXcursor
xorg.libXfixes
xorg.libXext
xorg.libXft
xorg.libXinerama
xorg.libX11
xorg.libSM
xorg.libICE
]
++ lib.optional enablePython python;
enableParallelBuilding = true;
patches = [
./fix-python.patch
(fetchpatch {
url = "https://gitlab.onelab.info/gmsh/gmsh/-/commit/7d5094fb0a5245cb435afd3f3e8c35e2ecfe70fd.patch";
hash = "sha256-3atm1NGsMI4KEct2xakRG6EasRpF6YRI4raoVYxBV4g=";
})
];
postPatch = ''
substituteInPlace api/gmsh.py --subst-var-by LIBPATH ${placeholder "out"}/lib/libgmsh.so
'';
# N.B. the shared object is used by bindings
cmakeFlags = [
"-DENABLE_BUILD_SHARED=ON"
"-DENABLE_BUILD_DYNAMIC=ON"
"-DENABLE_OPENMP=ON"
];
nativeBuildInputs = [
cmake
gfortran
];
postFixup = lib.optionalString enablePython ''
mkdir -p $out/lib/python${python.pythonVersion}/site-packages
mv $out/lib/gmsh.py $out/lib/python${python.pythonVersion}/site-packages
mv $out/lib/*.dist-info $out/lib/python${python.pythonVersion}/site-packages
'';
doCheck = true;
meta = {
description = "Three-dimensional finite element mesh generator";
mainProgram = "gmsh";
homepage = "https://gmsh.info/";
license = lib.licenses.gpl2Plus;
};
}
|