1{
2 lib,
3 stdenv,
4 fetchurl,
5 pkg-config,
6 validatePkgConfig,
7 freexl,
8 geos,
9 librttopo,
10 libxml2,
11 minizip,
12 proj,
13 sqlite,
14 libiconv,
15 zlib,
16 testers,
17}:
18
19stdenv.mkDerivation (finalAttrs: {
20 pname = "libspatialite";
21 version = "5.1.0";
22
23 outputs = [
24 "out"
25 "dev"
26 ];
27
28 src = fetchurl {
29 url = "https://www.gaia-gis.it/gaia-sins/libspatialite-sources/libspatialite-${finalAttrs.version}.tar.gz";
30 hash = "sha256-Q74t00na/+AW3RQAxdEShYKMIv6jXKUQnyHz7VBgUIA=";
31 };
32
33 patches = [
34 # Drop use of deprecated libxml2 HTTP API.
35 # From: https://www.gaia-gis.it/fossil/libspatialite/info/7c452740fe
36 # see also: https://github.com/NixOS/nixpkgs/issues/347085
37 ./xmlNanoHTTPCleanup.patch
38 ];
39
40 postPatch = lib.optionalString (!stdenv.hostPlatform.isStatic) ''
41 substituteInPlace spatialite.pc.in \
42 --replace-fail "@LIBS@ @LIBXML2_LIBS@ @SQLITE3_LIBS@ -lm" ""
43 '';
44
45 nativeBuildInputs = [
46 pkg-config
47 validatePkgConfig
48 geos # for geos-config
49 ];
50
51 buildInputs = [
52 freexl
53 geos
54 librttopo
55 libxml2
56 minizip
57 proj
58 sqlite
59 zlib
60 ]
61 ++ lib.optionals stdenv.hostPlatform.isDarwin [
62 libiconv
63 ];
64
65 enableParallelBuilding = true;
66
67 postInstall = lib.optionalString stdenv.hostPlatform.isDarwin ''
68 ln -s $out/lib/mod_spatialite.{so,dylib}
69 '';
70
71 # Failed tests (linux & darwin):
72 # - check_virtualtable6
73 # - check_drop_rename
74 doCheck = false;
75
76 preCheck = ''
77 export LD_LIBRARY_PATH=$(pwd)/src/.libs
78 export DYLD_LIBRARY_PATH=$(pwd)/src/.libs
79 '';
80
81 passthru.tests = {
82 pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
83 };
84
85 meta = {
86 description = "Extensible spatial index library in C++";
87 homepage = "https://www.gaia-gis.it/fossil/libspatialite";
88 # They allow any of these
89 license = with lib.licenses; [
90 gpl2Plus
91 lgpl21Plus
92 mpl11
93 ];
94 pkgConfigModules = [ "spatialite" ];
95 platforms = lib.platforms.unix;
96 maintainers = with lib.maintainers; [ dotlambda ];
97 teams = [ lib.teams.geospatial ];
98 };
99})