{ lib, stdenv, fetchurl, curl, hdf5, netcdf, eccodes, python3
, # build, install and link to a CDI library [default=no]
  enable_cdi_lib ? false
, # build a completely statically linked CDO binary
  enable_all_static ? stdenv.hostPlatform.isStatic
, # Use CXX as default compiler [default=no]
  enable_cxx ? false
}:

stdenv.mkDerivation rec {
  pname = "cdo";
  version = "2.4.2";

  # Dependencies
  buildInputs = [ curl netcdf hdf5 python3 ];

  src = fetchurl {
    url = "https://code.mpimet.mpg.de/attachments/download/29481/${pname}-${version}.tar.gz";
    sha256 = "sha256-TfH+K4+S9Uwn6585nt+rQNkyIAWmcyyhUk71wWJ6xOc=";
  };

 configureFlags = [
    "--with-netcdf=${netcdf}"
    "--with-hdf5=${hdf5}"
    "--with-eccodes=${eccodes}"
  ]
   ++ lib.optional enable_cdi_lib "--enable-cdi-lib"
   ++ lib.optional enable_all_static "--enable-all-static"
   ++ lib.optional enable_cxx "--enable-cxx";

  # address error: 'TARGET_OS_MACCATALYST' is not defined,
  # evaluates to 0 [-Werror,-Wundef-prefix=TARGET_OS_]
  # we don't want to appear to be a catalyst build;
  # we are a TARGET_OS_MAC
  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.hostPlatform.isDarwin "-DTARGET_OS_MACCATALYST=0";

  meta = with lib; {
    description = "Collection of command line Operators to manipulate and analyse Climate and NWP model Data";
    mainProgram = "cdo";
    longDescription = ''
      Supported data formats are GRIB 1/2, netCDF 3/4, SERVICE, EXTRA and IEG.
      There are more than 600 operators available.
    '';
    homepage = "https://code.mpimet.mpg.de/projects/cdo/";
    license = licenses.bsd3;
    maintainers = [ maintainers.ltavard ];
    platforms = with platforms; linux ++ darwin;
  };
}
