Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / development / libraries / gdal / default.nix
blob28f083c31b1064079ac3a7da7d6bba4cef948a04
1 { lib
2 , stdenv
3 , callPackage
4 , fetchFromGitHub
6 , useMinimalFeatures ? false
7 , useTiledb ? (!useMinimalFeatures) && !(stdenv.isDarwin && stdenv.isx86_64)
8 , useLibHEIF ? (!useMinimalFeatures)
9 , useLibJXL ? (!useMinimalFeatures)
10 , useMysql ? (!useMinimalFeatures)
11 , usePostgres ? (!useMinimalFeatures)
12 , usePoppler ? (!useMinimalFeatures)
13 , useArrow ? (!useMinimalFeatures)
14 , useHDF ? (!useMinimalFeatures)
15 , useNetCDF ? (!useMinimalFeatures)
16 , useArmadillo ? (!useMinimalFeatures)
18 , bison
19 , cmake
20 , gtest
21 , doxygen
22 , graphviz
23 , pkg-config
24 , python3
25 , swig
26 , armadillo
27 , arrow-cpp
28 , c-blosc
29 , brunsli
30 , cfitsio
31 , crunch
32 , curl
33 , cryptopp
34 , libdeflate
35 , expat
36 , libgeotiff
37 , geos
38 , giflib
39 , libheif
40 , dav1d
41 , libaom
42 , libde265
43 , rav1e
44 , x265
45 , hdf4
46 , hdf5-cpp
47 , libiconv
48 , libjpeg
49 , json_c
50 , libjxl
51 , libhwy
52 , lerc
53 , xz
54 , libxml2
55 , lz4
56 , libmysqlclient
57 , netcdf
58 , openexr
59 , openjpeg
60 , openssl
61 , pcre2
62 , libpng
63 , poppler
64 , postgresql
65 , proj
66 , qhull
67 , libspatialite
68 , sqlite
69 , libtiff
70 , tiledb
71 , libwebp
72 , xercesc
73 , zlib
74 , zstd
77 stdenv.mkDerivation (finalAttrs: {
78   pname = "gdal";
79   version = "3.7.3";
81   src = fetchFromGitHub {
82     owner = "OSGeo";
83     repo = "gdal";
84     rev = "v${finalAttrs.version}";
85     hash = "sha256-+69mh1hKL1r7SNwDilaQz5UochMMWFG2lrBLYBF31JY=";
86   };
88   nativeBuildInputs = [
89     bison
90     cmake
91     doxygen
92     graphviz
93     pkg-config
94     python3.pkgs.setuptools
95     python3.pkgs.wrapPython
96     swig
97   ];
99   cmakeFlags = [
100     "-DGDAL_USE_INTERNAL_LIBS=OFF"
101     "-DGEOTIFF_INCLUDE_DIR=${lib.getDev libgeotiff}/include"
102     "-DGEOTIFF_LIBRARY_RELEASE=${lib.getLib libgeotiff}/lib/libgeotiff${stdenv.hostPlatform.extensions.sharedLibrary}"
103     "-DMYSQL_INCLUDE_DIR=${lib.getDev libmysqlclient}/include/mysql"
104     "-DMYSQL_LIBRARY=${lib.getLib libmysqlclient}/lib/${lib.optionalString (libmysqlclient.pname != "mysql") "mysql/"}libmysqlclient${stdenv.hostPlatform.extensions.sharedLibrary}"
105   ] ++ lib.optionals finalAttrs.doInstallCheck [
106     "-DBUILD_TESTING=ON"
107   ] ++ lib.optionals (!stdenv.isDarwin) [
108     "-DCMAKE_SKIP_BUILD_RPATH=ON" # without, libgdal.so can't find libmariadb.so
109   ] ++ lib.optionals stdenv.isDarwin [
110     "-DCMAKE_BUILD_WITH_INSTALL_NAME_DIR=ON"
111   ] ++ lib.optionals (!useTiledb) [
112     "-DGDAL_USE_TILEDB=OFF"
113   ];
115   buildInputs =
116     let
117       tileDbDeps = lib.optionals useTiledb [ tiledb ];
118       libHeifDeps = lib.optionals useLibHEIF [
119         libheif
120         dav1d
121         libaom
122         libde265
123         rav1e
124         x265
125       ];
126       libJxlDeps = lib.optionals useLibJXL [
127         libjxl
128         libhwy
129       ];
130       mysqlDeps = lib.optionals useMysql [ libmysqlclient ];
131       postgresDeps = lib.optionals usePostgres [ postgresql ];
132       popplerDeps = lib.optionals usePoppler [ poppler ];
133       arrowDeps = lib.optionals useArrow [ arrow-cpp ];
134       hdfDeps = lib.optionals useHDF [
135         hdf4
136         hdf5-cpp
137       ];
138       netCdfDeps = lib.optionals useNetCDF [ netcdf ];
139       armadilloDeps = lib.optionals useArmadillo [ armadillo ];
141       darwinDeps = lib.optionals stdenv.isDarwin [ libiconv ];
142       nonDarwinDeps = lib.optionals (!stdenv.isDarwin) ([
143         # tests for formats enabled by these packages fail on macos
144         openexr
145         xercesc
146       ] ++ arrowDeps);
147     in [
148       c-blosc
149       brunsli
150       cfitsio
151       crunch
152       curl
153       cryptopp
154       libdeflate
155       expat
156       libgeotiff
157       geos
158       giflib
159       libjpeg
160       json_c
161       lerc
162       xz
163       libxml2
164       lz4
165       openjpeg
166       openssl
167       pcre2
168       libpng
169       proj
170       qhull
171       libspatialite
172       sqlite
173       libtiff
174       gtest
175       libwebp
176       zlib
177       zstd
178       python3
179       python3.pkgs.numpy
180     ] ++ tileDbDeps
181       ++ libHeifDeps
182       ++ libJxlDeps
183       ++ mysqlDeps
184       ++ postgresDeps
185       ++ popplerDeps
186       ++ arrowDeps
187       ++ hdfDeps
188       ++ netCdfDeps
189       ++ armadilloDeps
190       ++ darwinDeps
191       ++ nonDarwinDeps;
193   postInstall = ''
194     wrapPythonPrograms
195   '';
197   enableParallelBuilding = true;
199   doInstallCheck = true;
200   # preCheck rather than preInstallCheck because this is what pytestCheckHook
201   # calls (coming from the python world)
202   preCheck = ''
203     pushd autotest
205     export HOME=$(mktemp -d)
206     export PYTHONPATH="$out/${python3.sitePackages}:$PYTHONPATH"
207     export GDAL_DOWNLOAD_TEST_DATA=OFF
208     # allows to skip tests that fail because of file handle leak
209     # the issue was not investigated
210     # https://github.com/OSGeo/gdal/blob/v3.7.0/autotest/gdrivers/bag.py#L61
211     export BUILD_NAME=fedora
212   '';
213   nativeInstallCheckInputs = with python3.pkgs; [
214     pytestCheckHook
215     pytest-env
216     filelock
217     lxml
218   ];
219   disabledTestPaths = [
220     # tests that attempt to make network requests
221     "gcore/vsis3.py"
222     "gdrivers/gdalhttp.py"
223     "gdrivers/wms.py"
224   ];
225   disabledTests = [
226     # tests that attempt to make network requests
227     "test_jp2openjpeg_45"
228     # tests that require the full proj dataset which we don't package yet
229     # https://github.com/OSGeo/gdal/issues/5523
230     "test_transformer_dem_overrride_srs"
231     "test_osr_ct_options_area_of_interest"
232     # ZIP does not support timestamps before 1980
233     "test_sentinel2_zipped"
234     # tries to call unwrapped executable
235     "test_SetPROJAuxDbPaths"
236     # fixed and renamed in 3.8.0RC1
237     # https://github.com/OSGeo/gdal/commit/c8b471ca1e6318866ff668d2b57bb6f076e3ae29
238     "test_visoss_6"
239   ] ++ lib.optionals (!stdenv.isx86_64) [
240     # likely precision-related expecting x87 behaviour
241     "test_jp2openjpeg_22"
242   ] ++ lib.optionals stdenv.isDarwin [
243     # flaky on macos
244     "test_rda_download_queue"
245   ] ++ lib.optionals (lib.versionOlder proj.version "8") [
246     "test_ogr_parquet_write_crs_without_id_in_datum_ensemble_members"
247   ] ++ lib.optionals (!usePoppler) [
248     "test_pdf_jpx_compression"
249   ];
250   postCheck = ''
251     popd # autotest
252   '';
254   passthru.tests = {
255     gdal = callPackage ./tests.nix { gdal = finalAttrs.finalPackage; };
256   };
258   __darwinAllowLocalNetworking = true;
260   meta = with lib; {
261     changelog = "https://github.com/OSGeo/gdal/blob/v${finalAttrs.version}/NEWS.md";
262     description = "Translator library for raster geospatial data formats";
263     homepage = "https://www.gdal.org/";
264     license = licenses.mit;
265     maintainers = with maintainers; teams.geospatial.members ++ [ marcweber dotlambda ];
266     platforms = platforms.unix;
267   };