python312Packages.publicsuffixlist: 1.0.2.20241207 -> 1.0.2.20241213 (#365192)
[NixPkgs.git] / pkgs / development / interpreters / gnudatalanguage / default.nix
blobf7570e745d3d6a0963260545b2d6f80fe8c3c1ff
2   stdenv,
3   lib,
4   fetchFromGitHub,
5   cmake,
6   wrapGAppsHook3,
7   readline,
8   ncurses,
9   zlib,
10   gsl,
11   openmp,
12   graphicsmagick,
13   fftw,
14   fftwFloat,
15   fftwLongDouble,
16   proj,
17   shapelib,
18   expat,
19   udunits,
20   eigen,
21   pslib,
22   libpng,
23   plplot,
24   libtiff,
25   libgeotiff,
26   libjpeg,
27   # eccodes is broken on darwin
28   enableGRIB ? stdenv.hostPlatform.isLinux,
29   eccodes,
30   enableGLPK ? stdenv.hostPlatform.isLinux,
31   glpk,
32   # We enable it in hdf4 and use libtirpc as a dependency here from the passthru
33   # of hdf4
34   enableLibtirpc ? stdenv.hostPlatform.isLinux,
35   libtirpc,
36   python3,
37   enableMPI ? (stdenv.hostPlatform.isLinux || stdenv.hostPlatform.isDarwin),
38   # Choose MPICH over OpenMPI because it currently builds on AArch and Darwin
39   mpi,
40   # Unfree optional dependency for hdf4 and hdf5
41   enableSzip ? false,
42   szip,
43   enableHDF4 ? true,
44   hdf4,
45   hdf4-forced ? null,
46   enableHDF5 ? true,
47   # HDF5 format version (API version) 1.10 and 1.12 is not fully compatible
48   # Specify if the API version should default to 1.10
49   # netcdf currently depends on hdf5 with `usev110Api=true`
50   # If you wish to use HDF5 API version 1.12 (`useHdf5v110Api=false`),
51   # you will need to turn NetCDF off.
52   useHdf5v110Api ? true,
53   hdf5,
54   hdf5-forced ? null,
55   enableNetCDF ? true,
56   netcdf,
57   netcdf-forced ? null,
58   plplot-forced ? null,
59   # wxWidgets is preferred over X11 for this project but we only have it on Linux
60   # and Darwin.
61   enableWX ? (stdenv.hostPlatform.isLinux || stdenv.hostPlatform.isDarwin),
62   wxGTK32,
63   Cocoa,
64   # X11: OFF by default for platform consistency. Use X where WX is not available
65   enableXWin ? (!stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isDarwin),
68 let
69   hdf4-custom =
70     if hdf4-forced != null then
71       hdf4-forced
72     else
73       hdf4.override {
74         uselibtirpc = enableLibtirpc;
75         szipSupport = enableSzip;
76         inherit szip;
77       };
78   hdf5-custom =
79     if hdf5-forced != null then
80       hdf5-forced
81     else
82       hdf5.override (
83         {
84           usev110Api = useHdf5v110Api;
85           mpiSupport = enableMPI;
86           inherit mpi;
87           szipSupport = enableSzip;
88           inherit szip;
89         }
90         // lib.optionalAttrs enableMPI {
91           cppSupport = false;
92         }
93       );
94   netcdf-custom =
95     if netcdf-forced != null then
96       netcdf-forced
97     else
98       netcdf.override {
99         hdf5 = hdf5-custom;
100       };
101   enablePlplotDrivers = enableWX || enableXWin;
102   plplot-with-drivers =
103     if plplot-forced != null then
104       plplot-forced
105     else
106       plplot.override {
107         inherit
108           enableWX
109           enableXWin
110           ;
111       };
113 stdenv.mkDerivation rec {
114   pname = "gnudatalanguage";
115   version = "1.0.1";
117   src = fetchFromGitHub {
118     owner = pname;
119     repo = "gdl";
120     rev = "v${version}";
121     sha256 = "sha256-IrCLL8MQp0SkWj7sbfZlma5FrnMbgdl4E/1nPGy0Y60=";
122   };
124   buildInputs =
125     [
126       readline
127       ncurses
128       zlib
129       gsl
130       openmp
131       graphicsmagick
132       fftw
133       fftwFloat
134       fftwLongDouble
135       proj
136       shapelib
137       expat
138       mpi
139       udunits
140       eigen
141       pslib
142       libpng
143       libtiff
144       libgeotiff
145       libjpeg
146       hdf4-custom
147       hdf5-custom
148       netcdf-custom
149       plplot-with-drivers
150     ]
151     ++ lib.optional enableXWin plplot-with-drivers.libX11
152     ++ lib.optional enableGRIB eccodes
153     ++ lib.optional enableGLPK glpk
154     ++ lib.optional enableWX wxGTK32
155     ++ lib.optional (enableWX && stdenv.hostPlatform.isDarwin) Cocoa
156     ++ lib.optional enableMPI mpi
157     ++ lib.optional enableLibtirpc hdf4-custom.libtirpc
158     ++ lib.optional enableSzip szip;
160   propagatedBuildInputs = [
161     (python3.withPackages (ps: with ps; [ numpy ]))
162   ];
164   nativeBuildInputs = [
165     cmake
166   ] ++ lib.optional enableWX wrapGAppsHook3;
168   cmakeFlags =
169     lib.optional (!enableHDF4) "-DHDF=OFF"
170     ++ [ (if enableHDF5 then "-DHDF5DIR=${hdf5-custom}" else "-DHDF5=OFF") ]
171     ++ lib.optional (!enableNetCDF) "-DNETCDF=OFF"
172     ++ lib.optional (!enablePlplotDrivers) "-DINTERACTIVE_GRAPHICS=OFF"
173     ++ lib.optional (!enableGRIB) "-DGRIB=OFF"
174     ++ lib.optional (!enableGLPK) "-DGLPK=OFF"
175     ++ lib.optional (!enableWX) "-DWXWIDGETS=OFF"
176     ++ lib.optional enableSzip "-DSZIPDIR=${szip}"
177     ++ lib.optionals enableXWin [
178       "-DX11=ON"
179       "-DX11DIR=${plplot-with-drivers.libX11}"
180     ]
181     ++ lib.optionals enableMPI [
182       "-DMPI=ON"
183       "-DMPIDIR=${mpi}"
184     ];
186   # Tests are failing on Hydra:
187   # ./src/common/dpycmn.cpp(137): assert ""IsOk()"" failed in GetClientArea(): invalid wxDisplay object
188   doCheck = stdenv.hostPlatform.isLinux;
190   # Opt-out unstable tests
191   # https://github.com/gnudatalanguage/gdl/issues/482
192   # https://github.com/gnudatalanguage/gdl/issues/1079
193   # https://github.com/gnudatalanguage/gdl/issues/460
194   preCheck = ''
195     checkFlagsArray+=("ARGS=-E '${
196       lib.concatMapStringsSep "|" (test: test + ".pro") [
197         "test_byte_conversion"
198         "test_bytscl"
199         "test_call_external"
200         "test_tic_toc"
201         "test_timestamp"
202       ]
203     }'")
204   '';
206   passthru = {
207     hdf4 = hdf4-custom;
208     hdf5 = hdf5-custom;
209     netcdf = netcdf-custom;
210     plplot = plplot-with-drivers;
211     python = python3;
212     inherit
213       enableMPI
214       mpi
215       useHdf5v110Api
216       enableSzip
217       enableWX
218       enableXWin
219       ;
220   };
222   meta = with lib; {
223     description = "Free incremental compiler of IDL";
224     longDescription = ''
225       GDL (GNU Data Language) is a free/libre/open source incremental compiler
226       compatible with IDL (Interactive Data Language) and to some extent with PV-WAVE.
227       GDL is aimed as a drop-in replacement for IDL.
228     '';
229     homepage = "https://github.com/gnudatalanguage/gdl";
230     license = licenses.gpl2Only;
231     maintainers = with maintainers; [ ShamrockLee ];
232     platforms = platforms.all;
233     mainProgram = "gdl";
234   };