mapnik: 3.1.0 -> unstable-2022-04-14
- use CMake. I just didn't got it to work with SCons. - patch cmake to find harfbuzz - prefetch catch2 for enabling tests - add erictapen as maintainer - build mapnik-config with scons, as it isn't build by cmake - use python3 exclusively - build with harfbuzz-icu - change license to lgpl21Plus - use PROJ 8 - use latest scons, but use cmake for everything but mapnik-config - don't make postgresql optional Co-Authored-by: Robert Schütz <nix@dotlambda.de>
This commit is contained in:
parent
7c224b3e12
commit
d35077ae8b
14
pkgs/development/libraries/mapnik/catch2-src.patch
Normal file
14
pkgs/development/libraries/mapnik/catch2-src.patch
Normal file
|
@ -0,0 +1,14 @@
|
|||
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
|
||||
index 0705ddce1..771291b88 100644
|
||||
--- a/test/CMakeLists.txt
|
||||
+++ b/test/CMakeLists.txt
|
||||
@@ -7,8 +7,7 @@ include(FetchContent)
|
||||
|
||||
FetchContent_Declare(
|
||||
Catch2
|
||||
- GIT_REPOSITORY https://github.com/catchorg/Catch2.git
|
||||
- GIT_TAG v2.13.7)
|
||||
+ SOURCE_DIR @catch2_src@)
|
||||
FetchContent_MakeAvailable(Catch2)
|
||||
|
||||
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.19.0")
|
26
pkgs/development/libraries/mapnik/cmake-harfbuzz.patch
Normal file
26
pkgs/development/libraries/mapnik/cmake-harfbuzz.patch
Normal file
|
@ -0,0 +1,26 @@
|
|||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index f2dc1f02d..739b8ae99 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -153,19 +153,8 @@ endif()
|
||||
|
||||
mapnik_find_package(Freetype REQUIRED)
|
||||
|
||||
-# try to find harfbuzz with the native configuration and fallback to our "own" FindHarfBuzz
|
||||
-mapnik_find_package(harfbuzz CONFIG QUIET)
|
||||
-if(harfbuzz_FOUND)
|
||||
- message(STATUS "Found harfbuzz native cmake")
|
||||
- list(APPEND MAPNIK_OPTIONAL_LIBS harfbuzz::harfbuzz)
|
||||
-else()
|
||||
- # Use pkg-config when harfbuzz is not found.
|
||||
- # It might be possible that in future version harfbuzz could only be found via pkg-config.
|
||||
- # harfbuzz related discussion: https://github.com/harfbuzz/harfbuzz/issues/2653
|
||||
- message(STATUS "harfbuzz not found via cmake. Searching via pkg-config...")
|
||||
- pkg_check_modules(harfbuzz REQUIRED IMPORTED_TARGET harfbuzz>=${HARFBUZZ_MIN_VERSION})
|
||||
- list(APPEND MAPNIK_OPTIONAL_LIBS PkgConfig::harfbuzz)
|
||||
-endif()
|
||||
+pkg_check_modules(harfbuzz REQUIRED IMPORTED_TARGET harfbuzz)
|
||||
+list(APPEND MAPNIK_OPTIONAL_LIBS PkgConfig::harfbuzz)
|
||||
|
||||
if(USE_EXTERNAL_MAPBOX_GEOMETRY)
|
||||
# this is used to provide a way to specify include dirs with CACHE VARIABLES
|
|
@ -1,111 +1,110 @@
|
|||
{ lib, stdenv, fetchzip
|
||||
, boost, cairo, freetype, gdal, harfbuzz, icu, libjpeg, libpng, libtiff
|
||||
, libwebp, libxml2, proj, python3, python ? python3, sqlite, zlib
|
||||
, sconsPackages
|
||||
|
||||
# supply a postgresql package to enable the PostGIS input plugin
|
||||
, postgresql ? null
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, buildPackages
|
||||
, cmake
|
||||
, pkg-config
|
||||
, substituteAll
|
||||
, boost
|
||||
, cairo
|
||||
, freetype
|
||||
, gdal
|
||||
, harfbuzz
|
||||
, icu
|
||||
, libjpeg
|
||||
, libpng
|
||||
, libtiff
|
||||
, libwebp
|
||||
, libxml2
|
||||
, proj
|
||||
, python3
|
||||
, sqlite
|
||||
, zlib
|
||||
, catch2
|
||||
, postgresql
|
||||
}:
|
||||
|
||||
let
|
||||
scons = sconsPackages.scons_3_0_1;
|
||||
in stdenv.mkDerivation rec {
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "mapnik";
|
||||
version = "3.1.0";
|
||||
version = "unstable-2022-04-14";
|
||||
|
||||
src = fetchzip {
|
||||
# this one contains all git submodules and is cheaper than fetchgit
|
||||
url = "https://github.com/mapnik/mapnik/releases/download/v${version}/mapnik-v${version}.tar.bz2";
|
||||
sha256 = "sha256-qqPqN4vs3ZsqKgnx21yQhX8OzHca/0O+3mvQ/vnC5EY=";
|
||||
src = fetchFromGitHub {
|
||||
owner = "mapnik";
|
||||
repo = "mapnik";
|
||||
rev = "1ba1278b4227ccd887a95880d1c75aa6446132fc";
|
||||
sha256 = "sha256-dtu+PKpK/crO5cZje0aj+vB9beG0eU6fyT9GNtvvtbM=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace configure \
|
||||
--replace '$PYTHON scons/scons.py' ${scons}/bin/scons
|
||||
--replace '$PYTHON scons/scons.py' ${buildPackages.scons}/bin/scons
|
||||
rm -r scons
|
||||
'';
|
||||
|
||||
# a distinct dev output makes python-mapnik fail
|
||||
outputs = [ "out" ];
|
||||
|
||||
nativeBuildInputs = [ scons ];
|
||||
patches = [
|
||||
# The lib/cmake/harfbuzz/harfbuzz-config.cmake file in harfbuzz.dev is faulty,
|
||||
# as it provides the wrong libdir. The workaround is to just rely on
|
||||
# pkg-config to locate harfbuzz shared object files.
|
||||
# Upstream HarfBuzz wants to drop CMake support anyway.
|
||||
# See discussion: https://github.com/mapnik/mapnik/issues/4265
|
||||
./cmake-harfbuzz.patch
|
||||
# prevent CMake from trying to get libraries on the Internet
|
||||
(substituteAll {
|
||||
src = ./catch2-src.patch;
|
||||
catch2_src = catch2.src;
|
||||
})
|
||||
./include.patch
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ cmake pkg-config ];
|
||||
|
||||
buildInputs = [
|
||||
boost cairo freetype gdal harfbuzz icu libjpeg libpng libtiff
|
||||
libwebp proj python sqlite zlib
|
||||
|
||||
# optional inputs
|
||||
boost
|
||||
cairo
|
||||
freetype
|
||||
gdal
|
||||
harfbuzz
|
||||
icu
|
||||
libjpeg
|
||||
libpng
|
||||
libtiff
|
||||
libwebp
|
||||
proj
|
||||
python3
|
||||
sqlite
|
||||
zlib
|
||||
libxml2
|
||||
postgresql
|
||||
];
|
||||
|
||||
propagatedBuildInputs = [ libxml2 ];
|
||||
cmakeFlags = [
|
||||
# Would require qt otherwise.
|
||||
"-DBUILD_DEMO_VIEWER=OFF"
|
||||
];
|
||||
|
||||
prefixKey = "PREFIX=";
|
||||
|
||||
preConfigure = ''
|
||||
patchShebangs ./configure
|
||||
# mapnik-config is currently not build with CMake. So we use the SCons for
|
||||
# this one. We can't add SCons to nativeBuildInputs though, as stdenv would
|
||||
# then try to build everything with scons.
|
||||
preBuild = ''
|
||||
cd ..
|
||||
${buildPackages.scons}/bin/scons utils/mapnik-config
|
||||
cd build
|
||||
'';
|
||||
|
||||
# NOTE: 2021-05-06:
|
||||
# Add -DACCEPT_USE_OF_DEPRECATED_PROJ_API_H=1 for backwards compatibility
|
||||
# with major versions 6 and 7 of proj which are otherwise not compatible
|
||||
# with mapnik 3.1.0. Note that:
|
||||
#
|
||||
# 1. Starting with proj version 8, this workaround will no longer be
|
||||
# supported by the upstream proj project.
|
||||
#
|
||||
# 2. Without the workaround, mapnik configures itself without proj support.
|
||||
#
|
||||
# 3. The master branch of mapnik (after 3.1.0) appears to add native support
|
||||
# for the proj 6 api, so this workaround is not likely to be needed in
|
||||
# subsequent mapnik releases. At that point, this block comment and the
|
||||
# NIX_CFLAGS_COMPILE expression can be removed.
|
||||
|
||||
NIX_CFLAGS_COMPILE =
|
||||
if version != "3.1.0" && lib.versionAtLeast version "3.1.0"
|
||||
then throw "The mapnik compatibility workaround for proj 6 may no longer be required. Remove workaround after checking."
|
||||
else if lib.versionAtLeast (lib.getVersion proj) "8"
|
||||
then throw ("mapnik currently requires a version of proj less than 8, but proj version is: " + (lib.getVersion proj))
|
||||
else "-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H=1";
|
||||
|
||||
configureFlags = [
|
||||
"BOOST_INCLUDES=${boost.dev}/include"
|
||||
"BOOST_LIBS=${boost.out}/lib"
|
||||
"CAIRO_INCLUDES=${cairo.dev}/include"
|
||||
"CAIRO_LIBS=${cairo.out}/lib"
|
||||
"FREETYPE_INCLUDES=${freetype.dev}/include"
|
||||
"FREETYPE_LIBS=${freetype.out}/lib"
|
||||
"GDAL_CONFIG=${gdal}/bin/gdal-config"
|
||||
"HB_INCLUDES=${harfbuzz.dev}/include"
|
||||
"HB_LIBS=${harfbuzz.out}/lib"
|
||||
"ICU_INCLUDES=${icu.dev}/include"
|
||||
"ICU_LIBS=${icu.out}/lib"
|
||||
"JPEG_INCLUDES=${libjpeg.dev}/include"
|
||||
"JPEG_LIBS=${libjpeg.out}/lib"
|
||||
"PNG_INCLUDES=${libpng.dev}/include"
|
||||
"PNG_LIBS=${libpng.out}/lib"
|
||||
"PROJ_INCLUDES=${proj.dev}/include"
|
||||
"PROJ_LIBS=${proj.out}/lib"
|
||||
"SQLITE_INCLUDES=${sqlite.dev}/include"
|
||||
"SQLITE_LIBS=${sqlite.out}/lib"
|
||||
"TIFF_INCLUDES=${libtiff.dev}/include"
|
||||
"TIFF_LIBS=${libtiff.out}/lib"
|
||||
"WEBP_INCLUDES=${libwebp}/include"
|
||||
"WEBP_LIBS=${libwebp}/lib"
|
||||
"XMLPARSER=libxml2"
|
||||
];
|
||||
|
||||
buildFlags = [
|
||||
"JOBS=$(NIX_BUILD_CORES)"
|
||||
];
|
||||
preInstall = ''
|
||||
mkdir -p $out/bin
|
||||
cp ../utils/mapnik-config/mapnik-config $out/bin/mapnik-config
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "An open source toolkit for developing mapping applications";
|
||||
homepage = "https://mapnik.org";
|
||||
maintainers = with maintainers; [ hrdinka erictapen ];
|
||||
license = licenses.lgpl21;
|
||||
license = licenses.lgpl21Plus;
|
||||
platforms = platforms.all;
|
||||
# https://github.com/mapnik/mapnik/issues/4232
|
||||
broken = lib.versionAtLeast proj.version "8.0.0";
|
||||
};
|
||||
}
|
||||
|
|
11
pkgs/development/libraries/mapnik/include.patch
Normal file
11
pkgs/development/libraries/mapnik/include.patch
Normal file
|
@ -0,0 +1,11 @@
|
|||
diff --git a/benchmark/src/test_png_encoding2.cpp b/benchmark/src/test_png_encoding2.cpp
|
||||
index 19897d180..5791b139c 100644
|
||||
--- a/benchmark/src/test_png_encoding2.cpp
|
||||
+++ b/benchmark/src/test_png_encoding2.cpp
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "bench_framework.hpp"
|
||||
#include "compare_images.hpp"
|
||||
+#include <memory>
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
|
@ -21063,12 +21063,9 @@ with pkgs;
|
|||
opencl-clang = callPackage ../development/libraries/opencl-clang { };
|
||||
|
||||
mapnik = callPackage ../development/libraries/mapnik {
|
||||
gdal = gdal.override {
|
||||
libgeotiff = libgeotiff.override { proj = proj_7; };
|
||||
libspatialite = libspatialite.override { proj = proj_7; };
|
||||
proj = proj_7;
|
||||
harfbuzz = harfbuzz.override {
|
||||
withIcu = true;
|
||||
};
|
||||
proj = proj_7;
|
||||
boost = boost175;
|
||||
};
|
||||
|
||||
|
|
|
@ -9007,7 +9007,7 @@ self: super: with self; {
|
|||
inherit (pkgs) pkg-config cairo harfbuzz icu libjpeg libpng libtiff libwebp proj zlib;
|
||||
inherit boost;
|
||||
mapnik = pkgs.mapnik.override {
|
||||
inherit python boost;
|
||||
inherit boost;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue