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 ];
49
50 buildInputs = [
51 freexl
52 geos
53 librttopo
54 libxml2
55 minizip
56 proj
57 sqlite
58 zlib
59 ]
60 ++ lib.optionals stdenv.hostPlatform.isDarwin [
61 libiconv
62 ];
63
64 configureFlags = [
65 "--with-geosconfig=${lib.getExe' (lib.getDev geos) "geos-config"}"
66 ];
67
68 enableParallelBuilding = true;
69
70 postInstall = lib.optionalString stdenv.hostPlatform.isDarwin ''
71 ln -s $out/lib/mod_spatialite.{so,dylib}
72 '';
73
74 # Failed tests (linux & darwin):
75 # - check_virtualtable6
76 # - check_drop_rename
77 doCheck = false;
78
79 preCheck = ''
80 export LD_LIBRARY_PATH=$(pwd)/src/.libs
81 export DYLD_LIBRARY_PATH=$(pwd)/src/.libs
82 '';
83
84 passthru.tests = {
85 pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
86 };
87
88 meta = {
89 description = "Extensible spatial index library in C++";
90 homepage = "https://www.gaia-gis.it/fossil/libspatialite";
91 # They allow any of these
92 license = with lib.licenses; [
93 gpl2Plus
94 lgpl21Plus
95 mpl11
96 ];
97 pkgConfigModules = [ "spatialite" ];
98 platforms = lib.platforms.unix;
99 maintainers = with lib.maintainers; [ dotlambda ];
100 teams = [ lib.teams.geospatial ];
101 };
102})