{ stdenv , lib , fetchFromGitHub , cmake , wrapGAppsHook , readline , ncurses , zlib , gsl , openmp , graphicsmagick , fftw , fftwFloat , fftwLongDouble , proj , shapelib , expat , udunits , eigen , pslib , eccodes , glpk , libpng , plplot , libtiff , libgeotiff , libjpeg # We enable it in hdf4 and use libtirpc as a dependency here from the passthru # of hdf4 , enableLibtirpc ? stdenv.isLinux , libtirpc , python3 , enableMPI ? (stdenv.isLinux || stdenv.isDarwin) # Choose MPICH over OpenMPI because it currently builds on AArch and Darwin , mpi # Unfree optional dependency for hdf4 and hdf5 , enableSzip ? false , szip , enableHDF4 ? true , hdf4 , hdf4-forced ? null , enableHDF5 ? true # HDF5 format version (API version) 1.10 and 1.12 is not fully compatible # Specify if the API version should default to 1.10 # netcdf currently depends on hdf5 with `usev110Api=true` # If you wish to use HDF5 API version 1.12 (`useHdf5v110Api=false`), # you will need to turn NetCDF off. , useHdf5v110Api ? true , hdf5 , hdf5-forced ? null , enableNetCDF ? true , netcdf , netcdf-forced ? null , plplot-forced ? null # wxWidgets is preferred over X11 for this project but we only have it on Linux # and Darwin. Also, we use the wxWidgets dependency here from the passthru of # plplot. , enableWX ? (stdenv.isLinux || stdenv.isDarwin) # X11: OFF by default for platform consistency. Use X where WX is not available , enableXWin ? (!stdenv.isLinux && !stdenv.isDarwin) }: let hdf4-custom = if hdf4-forced != null then hdf4-forced else hdf4.override { uselibtirpc = enableLibtirpc; szipSupport = enableSzip; inherit szip; }; hdf5-custom = if hdf5-forced != null then hdf5-forced else hdf5.override { usev110Api = useHdf5v110Api; mpiSupport = enableMPI; inherit mpi; szipSupport = enableSzip; inherit szip; }; netcdf-custom = if netcdf-forced != null then netcdf-forced else netcdf.override { hdf5 = hdf5-custom; }; enablePlplotDrivers = enableWX || enableXWin; plplot-with-drivers = if plplot-forced != null then plplot-forced else plplot.override { inherit enableWX enableXWin ; }; in stdenv.mkDerivation rec { pname = "gnudatalanguage"; version = "1.0.0"; src = fetchFromGitHub { owner = pname; repo = "gdl"; rev = "v${version}"; sha256 = "sha256-Y9LVRaWjQqpWqjNngxB406PE/rl/9S8rs0u0CK5ivUA="; }; buildInputs = [ readline ncurses zlib gsl openmp graphicsmagick fftw fftwFloat fftwLongDouble proj shapelib expat mpi udunits eigen pslib eccodes glpk libpng libtiff libgeotiff libjpeg hdf4-custom hdf5-custom netcdf-custom plplot-with-drivers ] ++ lib.optional enableXWin plplot-with-drivers.libX11 ++ lib.optional enableWX plplot-with-drivers.wxWidgets ++ lib.optional enableMPI mpi ++ lib.optional enableLibtirpc hdf4-custom.libtirpc ++ lib.optional enableSzip szip; propagatedBuildInputs = [ (python3.withPackages (ps: with ps; [ numpy ])) ]; nativeBuildInputs = [ cmake ] ++ lib.optional enableWX wrapGAppsHook; cmakeFlags = lib.optional (!enableHDF4) "-DHDF=OFF" ++ [ (if enableHDF5 then "-DHDF5DIR=${hdf5-custom}" else "-DHDF5=OFF") ] ++ lib.optional (!enableNetCDF) "-DNETCDF=OFF" ++ lib.optional (!enablePlplotDrivers) "-DINTERACTIVE_GRAPHICS=OFF" ++ lib.optional (!enableWX) "-DWXWIDGETS=OFF" ++ lib.optional enableSzip "-DSZIPDIR=${szip}" ++ lib.optionals enableXWin [ "-DX11=ON" "-DX11DIR=${plplot-with-drivers.libX11}" ] ++ lib.optionals enableMPI [ "-DMPI=ON" "-DMPIDIR=${mpi}" ]; doCheck = true; # Opt-out unstable tests # https://github.com/gnudatalanguage/gdl/issues/482 # https://github.com/gnudatalanguage/gdl/issues/1079 # https://github.com/gnudatalanguage/gdl/issues/460 preCheck = '' checkFlagsArray+=("ARGS=-E 'test_tic_toc.pro|test_byte_conversion.pro|test_bytscl.pro|test_call_external.pro'") ''; passthru = { hdf4 = hdf4-custom; hdf5 = hdf5-custom; netcdf = netcdf-custom; plplot = plplot-with-drivers; python = python3; inherit enableMPI mpi useHdf5v110Api enableSzip enableWX enableXWin ; }; meta = with lib; { description = "Free incremental compiler of IDL"; longDescription = '' GDL (GNU Data Language) is a free/libre/open source incremental compiler compatible with IDL (Interactive Data Language) and to some extent with PV-WAVE. GDL is aimed as a drop-in replacement for IDL. ''; homepage = "https://github.com/gnudatalanguage/gdl"; license = licenses.gpl2Only; maintainers = with maintainers; [ ShamrockLee ]; platforms = platforms.all; mainProgram = "gdl"; }; }