biome: 1.9.2 -> 1.9.3
[NixPkgs.git] / pkgs / applications / gis / grass / default.nix
blob68bbcb46b526055d652c2c6adfc5ad89faf4528a
1 { lib
2 , stdenv
3 , callPackage
4 , fetchFromGitHub
5 , makeWrapper
6 , wrapGAppsHook3
8 , withOpenGL ? !stdenv.hostPlatform.isDarwin
10 , bison
11 , blas
12 , cairo
13 , ffmpeg
14 , fftw
15 , flex
16 , freetype
17 , gdal
18 , geos
19 , lapack
20 , libGLU
21 , libiconv
22 , libpng
23 , libsvm
24 , libtiff
25 , libxml2
26 , llvmPackages
27 , netcdf
28 , pdal
29 , pkg-config
30 , postgresql
31 , proj
32 , python311Packages
33 , readline
34 , sqlite
35 , wxGTK32
36 , zlib
37 , zstd
40 let
41   pyPackages = python311Packages;
44 stdenv.mkDerivation (finalAttrs: {
45   pname = "grass";
46   version = "8.4.0";
48   src = fetchFromGitHub {
49     owner = "OSGeo";
50     repo = "grass";
51     rev = finalAttrs.version;
52     hash = "sha256-NKMshd6pr2O62ZjmQ/oPttmeVBYVD0Nqhh3SwQrhZf8=";
53   };
55   nativeBuildInputs = [
56     makeWrapper
57     wrapGAppsHook3
59     bison
60     flex
61     gdal # for `gdal-config`
62     geos # for `geos-config`
63     netcdf # for `nc-config`
64     pkg-config
65   ] ++ (with pyPackages; [ python-dateutil numpy wxpython ]);
67   buildInputs = [
68     blas
69     cairo
70     ffmpeg
71     fftw
72     freetype
73     gdal
74     geos
75     lapack
76     libpng
77     libsvm
78     libtiff
79     (libxml2.override { enableHttp = true; })
80     netcdf
81     pdal
82     postgresql
83     proj
84     readline
85     sqlite
86     wxGTK32
87     zlib
88     zstd
89   ] ++ lib.optionals withOpenGL [ libGLU ]
90   ++ lib.optionals stdenv.hostPlatform.isDarwin [ libiconv ]
91   ++ lib.optionals stdenv.cc.isClang [ llvmPackages.openmp ];
93   strictDeps = true;
95   configureFlags = [
96     "--with-blas"
97     "--with-cairo-ldflags=-lfontconfig"
98     "--with-cxx"
99     "--with-fftw"
100     "--with-freetype"
101     "--with-geos"
102     "--with-gdal"
103     "--with-lapack"
104     "--with-libsvm"
105     "--with-nls"
106     "--with-openmp"
107     "--with-pdal"
108     "--with-postgres"
109     "--with-postgres-libs=${postgresql.lib}/lib/"
110     "--with-proj-includes=${proj.dev}/include"
111     "--with-proj-libs=${proj}/lib"
112     "--with-proj-share=${proj}/share/proj"
113     "--with-sqlite"
114     "--with-zstd"
115     "--without-bzlib"
116     "--without-mysql"
117     "--without-odbc"
118   ] ++ lib.optionals (! withOpenGL) [
119     "--without-opengl"
120   ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
121     "--without-cairo"
122     "--without-freetype"
123     "--without-x"
124   ];
126   # Otherwise a very confusing "Can't load GDAL library" error
127   makeFlags = lib.optional stdenv.hostPlatform.isDarwin "GDAL_DYNAMIC=";
129   /* Ensures that the python script run at build time are actually executable;
130    * otherwise, patchShebangs ignores them.  */
131   postConfigure = ''
132     for f in $(find . -name '*.py'); do
133       chmod +x $f
134     done
136     patchShebangs */
137   '';
139   postInstall = ''
140     wrapProgram $out/bin/grass \
141     --set PYTHONPATH $PYTHONPATH \
142     --set GRASS_PYTHON ${pyPackages.python.interpreter} \
143     --suffix LD_LIBRARY_PATH ':' '${gdal}/lib'
144     ln -s $out/grass*/lib $out/lib
145     ln -s $out/grass*/include $out/include
146   '';
148   enableParallelBuilding = true;
150   passthru.tests = {
151     grass = callPackage ./tests.nix { grass = finalAttrs.finalPackage; };
152   };
154   meta = with lib; {
155     description = "GIS software suite used for geospatial data management and analysis, image processing, graphics and maps production, spatial modeling, and visualization";
156     homepage = "https://grass.osgeo.org/";
157     license = licenses.gpl2Plus;
158     maintainers = with maintainers; teams.geospatial.members ++ [ mpickering ];
159     platforms = platforms.all;
160     mainProgram = "grass";
161   };