Skip to content

Commit

Permalink
[Mapnik] new port (#18849)
Browse files Browse the repository at this point in the history
* add mapnik

* version

* update to latest ref

* overwrite version

* latest ref

* fix hash

* verison

* update to latest upstream

* version

* false jpeg lib

* version

* update to latest ref

* verssion

* proj not needed

* versioon

* fix proj patch

* version

* actually the linkage is already checked in `supports`. Apply latest policies. Added default features

* version

* update to original ref

* enable dynamic again

* version

* use date version

* update version

* do not add a second version

* fix linux installing

* version

* Apply suggestions from code review

Co-authored-by: NancyLi1013 <46708020+NancyLi1013@users.noreply.github.com>

* do not use port var

* version

* drop mapnik::core from general usage info.

* version

* don't add a new version

* add comment to trigger ci

* version

Co-authored-by: NancyLi1013 <46708020+NancyLi1013@users.noreply.github.com>
  • Loading branch information
mathisloge and NancyLi1013 authored Sep 16, 2021
1 parent 30a3d84 commit c26101d
Show file tree
Hide file tree
Showing 6 changed files with 390 additions and 0 deletions.
113 changes: 113 additions & 0 deletions ports/mapnik/portfile.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# test application for this port: https://github.com/mathisloge/mapnik-vcpkg-test

vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY)
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO mapnik/mapnik
REF 1ccbbf95b5e7bf254ab5b4dc21bdc373978c36a1
SHA512 21b4fc6e64d9b53550a046c5c9bcc32524324d7df39816b74b23a7ce2a64c4eeb291ad1c1aa09a3d5d79158f889ba8b7182cd0bf3435c39d1f17f33e4ffdce05
HEAD_REF master
PATCHES
use-proj.patch
)

vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
FEATURES
"jpeg" USE_JPEG
"png" USE_PNG
"tiff" USE_TIFF
"webp" USE_WEBP
"libxml2" USE_LIBXML2
"cairo" USE_CAIRO
"proj" USE_PROJ
"grid-renderer" USE_GRID_RENDERER
"svg-renderer" USE_SVG_RENDERER
"input-csv" USE_PLUGIN_INPUT_CSV
"input-gdal" USE_PLUGIN_INPUT_GDAL
"input-geobuf" USE_PLUGIN_INPUT_GEOBUF
"input-geojson" USE_PLUGIN_INPUT_GEOJSON
"input-ogr" USE_PLUGIN_INPUT_OGR
"input-pgraster" USE_PLUGIN_INPUT_PGRASTER
"input-postgis" USE_PLUGIN_INPUT_POSTGIS
"input-raster" USE_PLUGIN_INPUT_RASTER
"input-shape" USE_PLUGIN_INPUT_SHAPE
"input-sqlite" USE_PLUGIN_INPUT_SQLITE
"input-topojson" USE_PLUGIN_INPUT_TOPOJSON
"viewer" BUILD_DEMO_VIEWER
"demo" BUILD_DEMO_CPP
"utility-geometry-to-wkb" BUILD_UTILITY_GEOMETRY_TO_WKB
"utility-mapnik-index" BUILD_UTILITY_MAPNIK_INDEX
"utility-mapnik-render" BUILD_UTILITY_MAPNIK_RENDER
"utility-ogrindex" BUILD_UTILITY_OGRINDEX
"utility-pgsql2sqlite" BUILD_UTILITY_PGSQL2SQLITE
"utility-shapeindex" BUILD_UTILITY_SHAPEINDEX
"utility-svg2png" BUILD_UTILITY_SVG2PNG
)

vcpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
OPTIONS
${FEATURE_OPTIONS}
-DCOPY_LIBRARIES_FOR_EXECUTABLES=OFF
-DCOPY_FONTS_AND_PLUGINS_FOR_EXECUTABLES=OFF
-DINSTALL_DEPENDENCIES=OFF
-DBUILD_TEST=OFF
-DBUILD_BENCHMARK=OFF
-DUSE_EXTERNAL_MAPBOX_GEOMETRY=ON
-DUSE_EXTERNAL_MAPBOX_POLYLABEL=ON
-DUSE_EXTERNAL_MAPBOX_PROTOZERO=ON
-DUSE_EXTERNAL_MAPBOX_VARIANT=ON
-DINSTALL_CMAKE_DIR=share/mapnik/cmake
-DFONTS_INSTALL_DIR=share/mapnik/fonts
)

vcpkg_cmake_install()

# copy plugins into tool path, if any plugin is installed
if(IS_DIRECTORY "${CURRENT_PACKAGES_DIR}/bin/plugins")
file(COPY "${CURRENT_PACKAGES_DIR}/bin/plugins" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}")
endif()
vcpkg_copy_pdbs()

if("demo" IN_LIST FEATURES)
file(COPY "${SOURCE_PATH}/demo/data" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}/demo")
vcpkg_copy_tools(TOOL_NAMES mapnik-demo AUTO_CLEAN)
endif()

if("viewer" IN_LIST FEATURES)
# copy the ini file to reference the plugins correctly
file(COPY "${CURRENT_PACKAGES_DIR}/bin/viewer.ini" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}")
vcpkg_copy_tools(TOOL_NAMES mapnik-viewer AUTO_CLEAN)
endif()

if("utility-geometry-to-wkb" IN_LIST FEATURES)
vcpkg_copy_tools(TOOL_NAMES geometry_to_wkb AUTO_CLEAN)
endif()

if("utility-mapnik-index" IN_LIST FEATURES)
vcpkg_copy_tools(TOOL_NAMES mapnik-index AUTO_CLEAN)
endif()
if("utility-mapnik-render" IN_LIST FEATURES)
vcpkg_copy_tools(TOOL_NAMES mapnik-render AUTO_CLEAN)
endif()
if("utility-ogrindex" IN_LIST FEATURES)
# build is currently not supported
# vcpkg_copy_tools(TOOL_NAMES ogrindex AUTO_CLEAN)
endif()
if("utility-pgsql2sqlite" IN_LIST FEATURES)
vcpkg_copy_tools(TOOL_NAMES pgsql2sqlite AUTO_CLEAN)
endif()
if("utility-shapeindex" IN_LIST FEATURES)
vcpkg_copy_tools(TOOL_NAMES shapeindex AUTO_CLEAN)
endif()
if("utility-svg2png" IN_LIST FEATURES)
vcpkg_copy_tools(TOOL_NAMES svg2png AUTO_CLEAN)
endif()

vcpkg_cmake_config_fixup(CONFIG_PATH share/mapnik/cmake)
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share")

file(INSTALL "${SOURCE_PATH}/COPYING" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)
file(INSTALL "${SOURCE_PATH}/fonts/unifont_license.txt" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME fonts_copyright)
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
9 changes: 9 additions & 0 deletions ports/mapnik/usage
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
The package mapnik provides CMake targets:

find_package(mapnik CONFIG REQUIRED)
target_link_libraries(main PRIVATE mapnik::mapnik mapnik::json mapnik::wkt)

If you only need the compile definitions without any sources, use target mapnik::core.

If any plugins were installed, the variable ${MAPNIK_PLUGINS_DIR} contains the plugin directory
Fonts are available with the variable ${MAPNIK_FONTS_DIR}
28 changes: 28 additions & 0 deletions ports/mapnik/use-proj.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 54dda37..e82a817 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -254,21 +254,21 @@ endif()

if(USE_PROJ)
#https://proj.org/development/cmake.html
mapnik_find_package(PROJ QUIET)
# currently the cmake files are not installed, when installing proj via apt-get. So search via pkg-config
if(NOT PROJ_FOUND)
message(STATUS "PROJ not found via FindPROJ. Searching via pkg-config...")
pkg_check_modules(PROJ REQUIRED IMPORTED_TARGET proj)
string(REGEX MATCH "([0-9]+)\.([0-9]+)\.([0-9]+)" _dummy "${PROJ_VERSION}")
set(PROJ_VERSION_MAJOR "${CMAKE_MATCH_1}")
set(PROJ_VERSION_MINOR "${CMAKE_MATCH_2}")
set(PROJ_VERSION_PATCH "${CMAKE_MATCH_3}")
endif()
math(EXPR MAPNIK_PROJ_VERSION "${PROJ_VERSION_MAJOR}*10000 + ${PROJ_VERSION_MINOR}*100 + ${PROJ_VERSION_PATCH}" OUTPUT_FORMAT DECIMAL)
message(STATUS "Using mapnik PROJ version: ${MAPNIK_PROJ_VERSION}")
list(APPEND MAPNIK_COMPILE_DEFS MAPNIK_USE_PROJ MAPNIK_PROJ_VERSION=${MAPNIK_PROJ_VERSION})
- list(APPEND MAPNIK_OPTIONAL_LIBS ${PROJ_LIBRARIES})
- list(APPEND MAPNIK_OPTIONAL_LIBS_INCLUDE ${PROJ_INCLUDE_DIRS})
+ list(APPEND MAPNIK_OPTIONAL_LIBS ${PROJ_LIBRARIES})
+ # list(APPEND MAPNIK_OPTIONAL_LIBS_INCLUDE ${PROJ_INCLUDE_DIRS}) # this adds some non existent directory when building with vcpgk -> commented out
endif()

if(USE_GRID_RENDERER)
227 changes: 227 additions & 0 deletions ports/mapnik/vcpkg.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,227 @@
{
"name": "mapnik",
"version-date": "2021-09-15",
"description": "Mapnik is an open source toolkit for developing mapping applications.",
"homepage": "https://github.com/mapnik/mapnik",
"supports": "!(static & windows)",
"dependencies": [
"boost-assign",
"boost-bimap",
"boost-filesystem",
"boost-geometry",
"boost-gil",
"boost-interprocess",
{
"name": "boost-locale",
"features": [
"icu"
]
},
"boost-msm",
"boost-property-tree",
{
"name": "boost-regex",
"features": [
"icu"
]
},
"boost-spirit",
"boost-system",
{
"name": "freetype",
"features": [
"bzip2",
"png"
]
},
{
"name": "harfbuzz",
"features": [
"icu"
]
},
"icu",
"mapbox-geometry",
"mapbox-polylabel",
"mapbox-variant",
"protozero",
{
"name": "vcpkg-cmake",
"host": true
},
{
"name": "vcpkg-cmake-config",
"host": true
},
"zlib"
],
"default-features": [
"grid-renderer",
"jpeg",
"png",
"proj",
"svg-renderer",
"tiff",
"webp"
],
"features": {
"cairo": {
"description": "Cairo renderer",
"dependencies": [
"cairo",
"cairomm"
]
},
"demo": {
"description": "Make demo application"
},
"grid-renderer": {
"description": "Grid renderer"
},
"input-csv": {
"description": "CSV input plugin"
},
"input-gdal": {
"description": "GDAL input plugin",
"dependencies": [
"gdal"
]
},
"input-geobuf": {
"description": "GEOBUF input plugin",
"dependencies": [
"protozero"
]
},
"input-geojson": {
"description": "GEOJSON input plugin"
},
"input-ogr": {
"description": "OGR input plugin",
"dependencies": [
"gdal"
]
},
"input-pgraster": {
"description": "PGRASTER input plugin",
"dependencies": [
"libodb-pgsql",
"libpq"
]
},
"input-postgis": {
"description": "POSTGIS input plugin",
"dependencies": [
"libodb-pgsql",
"libpq"
]
},
"input-raster": {
"description": "RASTER input plugin"
},
"input-shape": {
"description": "SHAPE input plugin"
},
"input-sqlite": {
"description": "SQLITE input plugin",
"dependencies": [
"sqlite3"
]
},
"input-topojson": {
"description": "TOPOJSON input plugin"
},
"jpeg": {
"description": "add jpeg support",
"dependencies": [
"libjpeg-turbo"
]
},
"libxml2": {
"description": "use libxml2 instead of rapidxml",
"dependencies": [
"libxml2"
]
},
"png": {
"description": "add png support",
"dependencies": [
"libpng"
]
},
"proj": {
"description": "PROJ Functionalities",
"dependencies": [
{
"name": "proj4",
"features": [
"database"
]
}
]
},
"svg-renderer": {
"description": "SVG renderer"
},
"tiff": {
"description": "add tiff support",
"dependencies": [
"tiff"
]
},
"utility-geometry-to-wkb": {
"description": "utility application geometry-to-wkb",
"dependencies": [
"boost-program-options"
]
},
"utility-mapnik-index": {
"description": "utility application mapnik-index",
"dependencies": [
"boost-program-options"
]
},
"utility-mapnik-render": {
"description": "utility application mapnik-render",
"dependencies": [
"boost-program-options"
]
},
"utility-ogrindex": {
"description": "utility application ogrindex"
},
"utility-pgsql2sqlite": {
"description": "utility application pgsql2sqlite",
"dependencies": [
"boost-program-options",
"libodb-pgsql",
"libpq",
"sqlite3"
]
},
"utility-shapeindex": {
"description": "utility application shapeindex",
"dependencies": [
"boost-program-options"
]
},
"utility-svg2png": {
"description": "utility application svg2png",
"dependencies": [
"boost-program-options"
]
},
"viewer": {
"description": "Make demo viewer application",
"dependencies": [
"qt5-base"
]
},
"webp": {
"description": "add webp support",
"dependencies": [
"libwebp"
]
}
}
}
4 changes: 4 additions & 0 deletions versions/baseline.json
Original file line number Diff line number Diff line change
Expand Up @@ -4096,6 +4096,10 @@
"baseline": "0.5.0",
"port-version": 0
},
"mapnik": {
"baseline": "2021-09-15",
"port-version": 0
},
"marble": {
"baseline": "19.08.2",
"port-version": 2
Expand Down
Loading

0 comments on commit c26101d

Please sign in to comment.