1{
2 fetchurl,
3 lib,
4 stdenv,
5 cmake,
6 netcdf,
7 openjpeg,
8 libaec,
9 libpng,
10 gfortran,
11 perl,
12 ctestCheckHook,
13 enablePython ? false,
14 pythonPackages,
15 enablePosixThreads ? false,
16 enableOpenMPThreads ? false,
17}:
18
19stdenv.mkDerivation rec {
20 pname = "eccodes";
21 version = "2.42.0";
22
23 src = fetchurl {
24 url = "https://confluence.ecmwf.int/download/attachments/45757960/eccodes-${version}-Source.tar.gz";
25 hash = "sha256-YDcbNXywEd7lRtsuq6zlt+J/D4fT6kpa3eeJE3GzwSg=";
26 };
27
28 postPatch = ''
29 substituteInPlace cmake/FindOpenJPEG.cmake --replace openjpeg-2.1 ${openjpeg.incDir}
30
31 # https://github.com/ecmwf/ecbuild/issues/40
32 substituteInPlace cmake/ecbuild_config.h.in \
33 --replace @CMAKE_INSTALL_PREFIX@/@INSTALL_LIB_DIR@ @eccodes_FULL_INSTALL_LIB_DIR@ \
34 --replace @CMAKE_INSTALL_PREFIX@/@INSTALL_BIN_DIR@ @eccodes_FULL_INSTALL_BIN_DIR@
35 substituteInPlace cmake/pkg-config.pc.in \
36 --replace '$'{prefix}/@INSTALL_LIB_DIR@ @eccodes_FULL_INSTALL_LIB_DIR@ \
37 --replace '$'{prefix}/@INSTALL_INCLUDE_DIR@ @eccodes_FULL_INSTALL_INCLUDE_DIR@ \
38 --replace '$'{prefix}/@INSTALL_BIN_DIR@ @eccodes_FULL_INSTALL_BIN_DIR@
39 substituteInPlace cmake/ecbuild_install_project.cmake \
40 --replace '$'{CMAKE_INSTALL_PREFIX}/'$'{INSTALL_INCLUDE_DIR} '$'{'$'{PROJECT_NAME}_FULL_INSTALL_INCLUDE_DIR}
41 '';
42
43 nativeBuildInputs = [
44 cmake
45 gfortran
46 perl
47 ];
48
49 buildInputs = [
50 netcdf
51 openjpeg
52 libaec
53 libpng
54 ];
55
56 propagatedBuildInputs = lib.optionals enablePython [
57 pythonPackages.python
58 pythonPackages.numpy
59 ];
60
61 cmakeFlags = [
62 "-DENABLE_PYTHON=${if enablePython then "ON" else "OFF"}"
63 "-DENABLE_PNG=ON"
64 "-DENABLE_ECCODES_THREADS=${if enablePosixThreads then "ON" else "OFF"}"
65 "-DENABLE_ECCODES_OMP_THREADS=${if enableOpenMPThreads then "ON" else "OFF"}"
66 ];
67
68 doCheck = true;
69 nativeCheckInputs = [ ctestCheckHook ];
70 checkFlags = [
71 "-R"
72 # Only do tests that don't require downloading 120MB of testdata
73 "eccodes_t_(definitions|calendar|unit_tests|md5|uerra|grib_2nd_order_numValues|julian)"
74 ];
75
76 meta = with lib; {
77 homepage = "https://confluence.ecmwf.int/display/ECC/";
78 license = licenses.asl20;
79 maintainers = with maintainers; [ ];
80 platforms = platforms.unix;
81 description = "ECMWF library for reading and writing GRIB, BUFR and GTS abbreviated header";
82 };
83}