From 9d4d7fd273e410f12705df88ca2c7c820b88f8f8 Mon Sep 17 00:00:00 2001 From: Mathis Logemann Date: Wed, 22 Sep 2021 13:19:43 +0200 Subject: [PATCH 01/13] [CMake] do not print install targets --- cmake/MapnikInstall.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/cmake/MapnikInstall.cmake b/cmake/MapnikInstall.cmake index 5e9cd1349..1599a0873 100644 --- a/cmake/MapnikInstall.cmake +++ b/cmake/MapnikInstall.cmake @@ -18,7 +18,6 @@ function(mapnik_install) ) endif() if(NOT MAPNIK_INSTALL_IS_PLUGIN) - message(STATUS "${MAPNIK_INSTALL_TARGET}") get_target_property(TARGET_TYPE "${MAPNIK_INSTALL_TARGET}" TYPE) if (TARGET_TYPE STREQUAL "EXECUTABLE") get_property(MAPNIK_INSTALLED_TARGETS GLOBAL PROPERTY TARGETS) From 25774ac82a056b705ab7aaf384f6c47921aca5ec Mon Sep 17 00:00:00 2001 From: Mathis Logemann Date: Wed, 22 Sep 2021 14:41:50 +0200 Subject: [PATCH 02/13] [CMake] unify and simplify install commands.; Add Components to targets --- CMakeLists.txt | 61 ++++++++++++++------------------------- cmake/MapnikInstall.cmake | 20 +++++++++---- src/CMakeLists.txt | 12 +------- src/json/CMakeLists.txt | 10 ------- src/wkt/CMakeLists.txt | 10 ------- 5 files changed, 37 insertions(+), 76 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c6ba296b..c40920f83 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -95,24 +95,13 @@ set(CXX_STANDARD_REQUIRED ON) # require the specified CMAKE_CXX_STANDARD set(MAPNIK_DEBUG_POSTFIX "d" CACHE STRING "sets the debug library postfix on mapnik, wkt and json") message(STATUS "postfix for debug libraries: ${MAPNIK_DEBUG_POSTFIX}") -if(WIN32) - set(DEFAULT_BIN_DIR bin) - set(DEFAULT_LIB_DIR lib) - set(DEFAULT_ARCHIVE_DIR lib) -else() - include(GNUInstallDirs) - set(DEFAULT_BIN_DIR ${CMAKE_INSTALL_BINDIR}) - set(DEFAULT_LIB_DIR ${CMAKE_INSTALL_LIBDIR}) - set(DEFAULT_ARCHIVE_DIR ${CMAKE_INSTALL_LIBDIR}) -endif() -# https://cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html#runtime-output-artifacts -set(MAPNIK_BIN_DIR ${DEFAULT_BIN_DIR} CACHE STRING "Install directory for binaries") -# https://cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html#library-output-artifacts -set(MAPNIK_LIB_DIR ${DEFAULT_LIB_DIR} CACHE STRING "Install directory for libraries") -# https://cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html#archive-output-artifacts -set(MAPNIK_ARCHIVE_DIR ${DEFAULT_ARCHIVE_DIR} CACHE STRING "Install directory for archives") - -set(INSTALL_CMAKE_DIR ${MAPNIK_LIB_DIR}/cmake/mapnik CACHE STRING "Install directory of the cmake targets") +include(GNUInstallDirs) +# See for more details: https://cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html +set(MAPNIK_BIN_DIR ${CMAKE_INSTALL_BINDIR} CACHE STRING "Install directory for binaries") +set(MAPNIK_LIB_DIR ${CMAKE_INSTALL_LIBDIR} CACHE STRING "Install directory for libraries") +set(MAPNIK_ARCHIVE_DIR ${CMAKE_INSTALL_LIBDIR} CACHE STRING "Install directory for archives") +set(MAPNIK_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE STRING "Install directory for archives") +set(MAPNIK_CMAKE_DIR ${MAPNIK_LIB_DIR}/cmake/mapnik CACHE STRING "Install directory of the cmake targets") if(WIN32) set(DEFAULT_PLUGINS_INSTALL_DIR ${MAPNIK_BIN_DIR}/mapnik/input) @@ -367,15 +356,7 @@ target_link_libraries(core INTERFACE ) target_compile_definitions(core INTERFACE ${MAPNIK_COMPILE_DEFS}) -install(TARGETS core - EXPORT MapnikTargets - LIBRARY DESTINATION ${MAPNIK_LIB_DIR} - ARCHIVE DESTINATION ${MAPNIK_ARCHIVE_DIR} - RUNTIME DESTINATION ${MAPNIK_BIN_DIR} - INCLUDES DESTINATION include/ - PUBLIC_HEADER DESTINATION include/ - COMPONENT mapnik -) +mapnik_install(TARGET core) add_subdirectory(deps) add_subdirectory(src) @@ -404,7 +385,7 @@ write_basic_package_version_file( list(JOIN MAPNIK_DEPENDENCIES "\n" MAPNIK_DEPENDENCIES) configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/mapnikConfig.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/mapnikConfig.cmake" - INSTALL_DESTINATION ${INSTALL_CMAKE_DIR} + INSTALL_DESTINATION ${MAPNIK_CMAKE_DIR} PATH_VARS INCLUDE_INSTALL_DIR PLUGINS_INSTALL_DIR FONTS_INSTALL_DIR MAPNIK_DEPENDENCIES ) @@ -412,7 +393,7 @@ install( FILES "${CMAKE_CURRENT_BINARY_DIR}/mapnikConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/mapnikConfigVersion.cmake" - DESTINATION ${INSTALL_CMAKE_DIR} + DESTINATION ${MAPNIK_CMAKE_DIR} ) install( @@ -420,31 +401,31 @@ install( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCairo.cmake" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindWebP.cmake" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindHarfBuzz.cmake" - DESTINATION ${INSTALL_CMAKE_DIR}/Modules + DESTINATION ${MAPNIK_CMAKE_DIR}/Modules ) install(EXPORT MapnikTargets - FILE mapnikTargets.cmake - NAMESPACE mapnik:: - DESTINATION ${INSTALL_CMAKE_DIR} + DESTINATION ${MAPNIK_CMAKE_DIR} + FILE mapnikTargets.cmake + NAMESPACE mapnik:: ) -install(DIRECTORY include/ TYPE INCLUDE) -install(DIRECTORY deps/agg/include/ TYPE INCLUDE) -install(DIRECTORY deps/mapnik TYPE INCLUDE) +install(DIRECTORY include/ DESTINATION ${MAPNIK_INCLUDE_DIR}) +install(DIRECTORY deps/agg/include/ DESTINATION ${MAPNIK_INCLUDE_DIR}) +install(DIRECTORY deps/mapnik DESTINATION ${MAPNIK_INCLUDE_DIR}) install(DIRECTORY fonts/ DESTINATION ${FONTS_INSTALL_DIR} FILES_MATCHING PATTERN "*.py" EXCLUDE PATTERN "*") if(NOT USE_EXTERNAL_MAPBOX_GEOMETRY) - install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deps/mapbox/geometry/include/ TYPE INCLUDE) + install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deps/mapbox/geometry/include/ DESTINATION ${MAPNIK_INCLUDE_DIR}) endif() if(NOT USE_EXTERNAL_MAPBOX_POLYLABEL) - install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deps/mapbox/polylabel/include/ TYPE INCLUDE) + install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deps/mapbox/polylabel/include/ DESTINATION ${MAPNIK_INCLUDE_DIR}) endif() if(NOT USE_EXTERNAL_MAPBOX_PROTOZERO) - install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deps/mapbox/protozero/include/ TYPE INCLUDE) + install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deps/mapbox/protozero/include/ DESTINATION ${MAPNIK_INCLUDE_DIR}) endif() if(NOT USE_EXTERNAL_MAPBOX_VARIANT) - install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deps/mapbox/variant/include/ TYPE INCLUDE) + install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deps/mapbox/variant/include/ DESTINATION ${MAPNIK_INCLUDE_DIR}) endif() mapnik_install_targets() diff --git a/cmake/MapnikInstall.cmake b/cmake/MapnikInstall.cmake index 1599a0873..cb5d53700 100644 --- a/cmake/MapnikInstall.cmake +++ b/cmake/MapnikInstall.cmake @@ -6,15 +6,25 @@ function(mapnik_install) if(NOT MAPNIK_INSTALL_ALREADY_INSTALLED AND NOT MAPNIK_INSTALL_IS_PLUGIN) install(TARGETS ${MAPNIK_INSTALL_TARGET} - LIBRARY DESTINATION ${MAPNIK_LIB_DIR} - ARCHIVE DESTINATION ${MAPNIK_ARCHIVE_DIR} + EXPORT MapnikTargets + INCLUDES DESTINATION ${MAPNIK_INCLUDE_DIR} RUNTIME DESTINATION ${MAPNIK_BIN_DIR} + COMPONENT MapnikRuntime + LIBRARY DESTINATION ${MAPNIK_LIB_DIR} + COMPONENT MapnikRuntime + NAMELINK_COMPONENT MapnikDevelopment + ARCHIVE DESTINATION ${MAPNIK_ARCHIVE_DIR} + COMPONENT MapnikDevelopment ) elseif(NOT MAPNIK_INSTALL_ALREADY_INSTALLED AND MAPNIK_INSTALL_IS_PLUGIN) install(TARGETS ${MAPNIK_INSTALL_TARGET} - LIBRARY DESTINATION ${PLUGINS_INSTALL_DIR} - ARCHIVE DESTINATION ${PLUGINS_INSTALL_DIR} RUNTIME DESTINATION ${PLUGINS_INSTALL_DIR} + COMPONENT MapnikPluginRuntime + LIBRARY DESTINATION ${PLUGINS_INSTALL_DIR} + COMPONENT MapnikPluginRuntime + NAMELINK_COMPONENT MapnikPluginDevelopment + ARCHIVE DESTINATION ${PLUGINS_INSTALL_DIR} + COMPONENT MapnikPluginDevelopment ) endif() if(NOT MAPNIK_INSTALL_IS_PLUGIN) @@ -56,7 +66,7 @@ function(mapnik_install_targets) include(BundleUtilities) fixup_bundle(\"${INTERNAL_TARGETS}\" \"${INTERNAL_PLUGINS}\" \"${ADDITIONAL_LIBARIES_PATHS}\") - " COMPONENT Runtime) + " COMPONENT MapnikRuntime) endif() endfunction() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f872920f9..c2c70f8da 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -303,14 +303,4 @@ if(MSVC) target_compile_options(mapnik PUBLIC "/bigobj" "/wd4068" "/wd4661" "/wd4910") endif() -install(TARGETS mapnik - EXPORT MapnikTargets - LIBRARY DESTINATION ${MAPNIK_LIB_DIR} - ARCHIVE DESTINATION ${MAPNIK_ARCHIVE_DIR} - RUNTIME DESTINATION ${MAPNIK_BIN_DIR} - INCLUDES DESTINATION include/ - PUBLIC_HEADER DESTINATION include/ - COMPONENT mapnik -) - -mapnik_install(TARGET mapnik ALREADY_INSTALLED) +mapnik_install(TARGET mapnik) diff --git a/src/json/CMakeLists.txt b/src/json/CMakeLists.txt index 0748d2043..d43e0660c 100644 --- a/src/json/CMakeLists.txt +++ b/src/json/CMakeLists.txt @@ -31,14 +31,4 @@ set_target_properties(json PROPERTIES PREFIX "libmapnik-" ) -install(TARGETS json - EXPORT MapnikTargets - LIBRARY DESTINATION ${MAPNIK_LIB_DIR} - ARCHIVE DESTINATION ${MAPNIK_ARCHIVE_DIR} - RUNTIME DESTINATION ${MAPNIK_BIN_DIR} - INCLUDES DESTINATION include/ - PUBLIC_HEADER DESTINATION include/ - COMPONENT mapnik -) - mapnik_install(TARGET json) diff --git a/src/wkt/CMakeLists.txt b/src/wkt/CMakeLists.txt index 9c0934290..e2e2eafbb 100644 --- a/src/wkt/CMakeLists.txt +++ b/src/wkt/CMakeLists.txt @@ -23,14 +23,4 @@ set_target_properties(wkt PROPERTIES PREFIX "libmapnik-" ) -install(TARGETS wkt - EXPORT MapnikTargets - LIBRARY DESTINATION ${MAPNIK_LIB_DIR} - ARCHIVE DESTINATION ${MAPNIK_ARCHIVE_DIR} - RUNTIME DESTINATION ${MAPNIK_BIN_DIR} - INCLUDES DESTINATION include/ - PUBLIC_HEADER DESTINATION include/ - COMPONENT mapnik -) - mapnik_install(TARGET wkt) From 755e8d322e519d5f82461878508daa42a3c77985 Mon Sep 17 00:00:00 2001 From: Mathis Logemann Date: Wed, 22 Sep 2021 15:25:55 +0200 Subject: [PATCH 03/13] add minimum versions; proj include dir only as a build interface --- CMakeLists.txt | 14 +++++++------- cmake/MapnikMinimumVersions.cmake | 3 +++ test/CMakeLists.txt | 2 +- utils/mapnik-index/CMakeLists.txt | 2 +- utils/mapnik-render/CMakeLists.txt | 2 +- utils/pgsql2sqlite/CMakeLists.txt | 2 +- utils/shapeindex/CMakeLists.txt | 2 +- utils/svg2png/CMakeLists.txt | 2 +- 8 files changed, 16 insertions(+), 13 deletions(-) create mode 100644 cmake/MapnikMinimumVersions.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index c40920f83..ad0c4213e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,7 @@ message(STATUS "mapnik version: ${PROJECT_VERSION}") set_property(GLOBAL PROPERTY USE_FOLDERS ON) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake") +include(MapnikMinimumVersions) include(MapnikFindPackage) include(MapnikCopyDependencies) include(MapnikInstall) @@ -133,7 +134,7 @@ endif() find_package(PkgConfig) mapnik_find_threads() mapnik_find_package(ICU REQUIRED COMPONENTS uc i18n data) -mapnik_find_package(Boost 1.61 REQUIRED COMPONENTS filesystem system regex) +mapnik_find_package(Boost ${BOOST_MIN_VERSION} REQUIRED COMPONENTS filesystem system regex) if(USE_BOOST_REGEX_ICU_WORKAROUND) message(STATUS "using boost regex workaround") set_property(TARGET Boost::regex PROPERTY INTERFACE_LINK_LIBRARIES) @@ -142,15 +143,14 @@ endif() mapnik_find_package(Freetype REQUIRED) # try to find harfbuzz with the native configuration and fallback to our "own" FindHarfBuzz -set(HARFBUZZ_MINIMUM_VERSION 0.9.34) -mapnik_find_package(harfbuzz CONFIG QUIET) +mapnik_find_package(harfbuzz ${HARFBUZZ_MIN_VERSION} CONFIG QUIET) if(harfbuzz_FOUND) message(STATUS "Found harfbuzz native cmake") list(APPEND MAPNIK_OPTIONAL_LIBS harfbuzz::harfbuzz) else() # we use our "own" FindHarfBuzz. See https://github.com/mapnik/mapnik/pull/4191#issuecomment-874728157 for more details message(STATUS "Fallback to FindHarfBuzz") - mapnik_find_package(HarfBuzz ${HARFBUZZ_MINIMUM_VERSION} REQUIRED COMPONENTS ICU) + mapnik_find_package(HarfBuzz ${HARFBUZZ_MIN_VERSION} REQUIRED COMPONENTS ICU) list(APPEND MAPNIK_OPTIONAL_LIBS HarfBuzz::HarfBuzz HarfBuzz::ICU) endif() @@ -297,11 +297,11 @@ endif() if(USE_PROJ) #https://proj.org/development/cmake.html - mapnik_find_package(PROJ QUIET) + mapnik_find_package(PROJ ${PROJ_MIN_VERSION} 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) + pkg_check_modules(PROJ REQUIRED IMPORTED_TARGET proj>=${PROJ_MIN_VERSION}) 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}") @@ -311,7 +311,7 @@ if(USE_PROJ) 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_INCLUDE $) endif() if(USE_GRID_RENDERER) diff --git a/cmake/MapnikMinimumVersions.cmake b/cmake/MapnikMinimumVersions.cmake new file mode 100644 index 000000000..b4ae45924 --- /dev/null +++ b/cmake/MapnikMinimumVersions.cmake @@ -0,0 +1,3 @@ +set(BOOST_MIN_VERSION 1.61) +set(HARFBUZZ_MIN_VERSION 0.9.34) +set(PROJ_MIN_VERSION 7.2.0) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 9724cd33c..bea2742c0 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,6 +1,6 @@ project(mapnik-test) -find_package(Boost REQUIRED COMPONENTS program_options) +find_package(Boost ${BOOST_MIN_VERSION} REQUIRED COMPONENTS program_options) find_package(PostgreSQL REQUIRED) include(FetchContent) diff --git a/utils/mapnik-index/CMakeLists.txt b/utils/mapnik-index/CMakeLists.txt index d6ae7974d..f9e568474 100644 --- a/utils/mapnik-index/CMakeLists.txt +++ b/utils/mapnik-index/CMakeLists.txt @@ -1,6 +1,6 @@ project(mapnik-index) -find_package(Boost REQUIRED COMPONENTS program_options) +find_package(Boost ${BOOST_MIN_VERSION} REQUIRED COMPONENTS program_options) add_executable(mapnik-index mapnik-index.cpp diff --git a/utils/mapnik-render/CMakeLists.txt b/utils/mapnik-render/CMakeLists.txt index 2125c60a0..705482350 100644 --- a/utils/mapnik-render/CMakeLists.txt +++ b/utils/mapnik-render/CMakeLists.txt @@ -1,6 +1,6 @@ project(mapnik-render) -find_package(Boost REQUIRED COMPONENTS program_options) +find_package(Boost ${BOOST_MIN_VERSION} REQUIRED COMPONENTS program_options) add_executable(mapnik-render mapnik-render.cpp) diff --git a/utils/pgsql2sqlite/CMakeLists.txt b/utils/pgsql2sqlite/CMakeLists.txt index 7e79a0bd0..1412e4dd6 100644 --- a/utils/pgsql2sqlite/CMakeLists.txt +++ b/utils/pgsql2sqlite/CMakeLists.txt @@ -1,5 +1,5 @@ project(pgsql2sqlite) -find_package(Boost REQUIRED COMPONENTS program_options) +find_package(Boost ${BOOST_MIN_VERSION} REQUIRED COMPONENTS program_options) find_package(SQLite3 REQUIRED) find_package(PostgreSQL REQUIRED) diff --git a/utils/shapeindex/CMakeLists.txt b/utils/shapeindex/CMakeLists.txt index ba535b170..c3ddb9208 100644 --- a/utils/shapeindex/CMakeLists.txt +++ b/utils/shapeindex/CMakeLists.txt @@ -1,6 +1,6 @@ project(shapeindex) -find_package(Boost REQUIRED COMPONENTS program_options) +find_package(Boost ${BOOST_MIN_VERSION} REQUIRED COMPONENTS program_options) add_executable(shapeindex shapeindex.cpp diff --git a/utils/svg2png/CMakeLists.txt b/utils/svg2png/CMakeLists.txt index 328197611..7dce53fbe 100644 --- a/utils/svg2png/CMakeLists.txt +++ b/utils/svg2png/CMakeLists.txt @@ -1,6 +1,6 @@ project(svg2png) -find_package(Boost REQUIRED COMPONENTS program_options) +find_package(Boost ${BOOST_MIN_VERSION} REQUIRED COMPONENTS program_options) add_executable(svg2png svg2png.cpp From d57f0ac93afc08614c5a3271e98fcb036400bfdf Mon Sep 17 00:00:00 2001 From: Mathis Logemann Date: Wed, 22 Sep 2021 15:44:34 +0200 Subject: [PATCH 04/13] [Cmake] Fix cache description --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ad0c4213e..f35d4c826 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -101,7 +101,7 @@ include(GNUInstallDirs) set(MAPNIK_BIN_DIR ${CMAKE_INSTALL_BINDIR} CACHE STRING "Install directory for binaries") set(MAPNIK_LIB_DIR ${CMAKE_INSTALL_LIBDIR} CACHE STRING "Install directory for libraries") set(MAPNIK_ARCHIVE_DIR ${CMAKE_INSTALL_LIBDIR} CACHE STRING "Install directory for archives") -set(MAPNIK_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE STRING "Install directory for archives") +set(MAPNIK_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE STRING "Install directory for the headers") set(MAPNIK_CMAKE_DIR ${MAPNIK_LIB_DIR}/cmake/mapnik CACHE STRING "Install directory of the cmake targets") if(WIN32) From 35ea6f2a56703976f19f5857ce8ff87c3c3143a3 Mon Sep 17 00:00:00 2001 From: Mathis Logemann Date: Wed, 22 Sep 2021 19:52:39 +0200 Subject: [PATCH 05/13] [CMake] refactor mapnik_install --- CMakeLists.txt | 2 +- cmake/MapnikInstall.cmake | 72 ++++++++++++--------------- demo/c++/CMakeLists.txt | 2 +- demo/viewer/CMakeLists.txt | 2 +- plugins/input/CMakeLists.txt | 3 ++ plugins/input/csv/CMakeLists.txt | 12 ++--- plugins/input/gdal/CMakeLists.txt | 12 ++--- plugins/input/geobuf/CMakeLists.txt | 13 +++-- plugins/input/geojson/CMakeLists.txt | 13 +++-- plugins/input/ogr/CMakeLists.txt | 12 ++--- plugins/input/pgraster/CMakeLists.txt | 14 +++--- plugins/input/postgis/CMakeLists.txt | 13 +++-- plugins/input/raster/CMakeLists.txt | 13 +++-- plugins/input/shape/CMakeLists.txt | 13 +++-- plugins/input/sqlite/CMakeLists.txt | 12 ++--- plugins/input/topojson/CMakeLists.txt | 12 ++--- src/CMakeLists.txt | 2 +- src/json/CMakeLists.txt | 2 +- src/wkt/CMakeLists.txt | 2 +- utils/geometry_to_wkb/CMakeLists.txt | 2 +- utils/mapnik-index/CMakeLists.txt | 2 +- utils/mapnik-render/CMakeLists.txt | 2 +- utils/ogrindex/CMakeLists.txt | 2 +- utils/pgsql2sqlite/CMakeLists.txt | 2 +- utils/shapeindex/CMakeLists.txt | 2 +- utils/svg2png/CMakeLists.txt | 2 +- 26 files changed, 114 insertions(+), 126 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f35d4c826..5bcaf2963 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -356,7 +356,7 @@ target_link_libraries(core INTERFACE ) target_compile_definitions(core INTERFACE ${MAPNIK_COMPILE_DEFS}) -mapnik_install(TARGET core) +mapnik_install(core) add_subdirectory(deps) add_subdirectory(src) diff --git a/cmake/MapnikInstall.cmake b/cmake/MapnikInstall.cmake index cb5d53700..fc5c4350e 100644 --- a/cmake/MapnikInstall.cmake +++ b/cmake/MapnikInstall.cmake @@ -1,44 +1,36 @@ -function(mapnik_install) - set(options ALREADY_INSTALLED IS_PLUGIN) - set(oneValueArgs TARGET) - set(multiValueArgs) - cmake_parse_arguments(MAPNIK_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) +function(mapnik_install _target) + install(TARGETS ${_target} + EXPORT MapnikTargets + INCLUDES DESTINATION ${MAPNIK_INCLUDE_DIR} + RUNTIME DESTINATION ${MAPNIK_BIN_DIR} + COMPONENT MapnikRuntime + LIBRARY DESTINATION ${MAPNIK_LIB_DIR} + COMPONENT MapnikRuntime + NAMELINK_COMPONENT MapnikDevelopment + ARCHIVE DESTINATION ${MAPNIK_ARCHIVE_DIR} + COMPONENT MapnikDevelopment + ) + get_target_property(TARGET_TYPE "${_target}" TYPE) + if (TARGET_TYPE STREQUAL "EXECUTABLE") + get_property(MAPNIK_INSTALLED_TARGETS GLOBAL PROPERTY TARGETS) + list(APPEND MAPNIK_INSTALLED_TARGETS ${_target}) + set_property(GLOBAL PROPERTY TARGETS ${MAPNIK_INSTALLED_TARGETS}) + endif() +endfunction() - if(NOT MAPNIK_INSTALL_ALREADY_INSTALLED AND NOT MAPNIK_INSTALL_IS_PLUGIN) - install(TARGETS ${MAPNIK_INSTALL_TARGET} - EXPORT MapnikTargets - INCLUDES DESTINATION ${MAPNIK_INCLUDE_DIR} - RUNTIME DESTINATION ${MAPNIK_BIN_DIR} - COMPONENT MapnikRuntime - LIBRARY DESTINATION ${MAPNIK_LIB_DIR} - COMPONENT MapnikRuntime - NAMELINK_COMPONENT MapnikDevelopment - ARCHIVE DESTINATION ${MAPNIK_ARCHIVE_DIR} - COMPONENT MapnikDevelopment - ) - elseif(NOT MAPNIK_INSTALL_ALREADY_INSTALLED AND MAPNIK_INSTALL_IS_PLUGIN) - install(TARGETS ${MAPNIK_INSTALL_TARGET} - RUNTIME DESTINATION ${PLUGINS_INSTALL_DIR} - COMPONENT MapnikPluginRuntime - LIBRARY DESTINATION ${PLUGINS_INSTALL_DIR} - COMPONENT MapnikPluginRuntime - NAMELINK_COMPONENT MapnikPluginDevelopment - ARCHIVE DESTINATION ${PLUGINS_INSTALL_DIR} - COMPONENT MapnikPluginDevelopment - ) - endif() - if(NOT MAPNIK_INSTALL_IS_PLUGIN) - get_target_property(TARGET_TYPE "${MAPNIK_INSTALL_TARGET}" TYPE) - if (TARGET_TYPE STREQUAL "EXECUTABLE") - get_property(MAPNIK_INSTALLED_TARGETS GLOBAL PROPERTY TARGETS) - list(APPEND MAPNIK_INSTALLED_TARGETS ${MAPNIK_INSTALL_TARGET}) - set_property(GLOBAL PROPERTY TARGETS ${MAPNIK_INSTALLED_TARGETS}) - endif() - else() - get_property(MAPNIK_INSTALLED_PLUGINS GLOBAL PROPERTY PLUGINS) - list(APPEND MAPNIK_INSTALLED_PLUGINS ${MAPNIK_INSTALL_TARGET}) - set_property(GLOBAL PROPERTY PLUGINS ${MAPNIK_INSTALLED_PLUGINS}) - endif() +function(mapnik_install_plugin _target) + install(TARGETS ${_target} + RUNTIME DESTINATION ${PLUGINS_INSTALL_DIR} + COMPONENT MapnikPluginRuntime + LIBRARY DESTINATION ${PLUGINS_INSTALL_DIR} + COMPONENT MapnikPluginRuntime + NAMELINK_COMPONENT MapnikPluginDevelopment + ARCHIVE DESTINATION ${PLUGINS_INSTALL_DIR} + COMPONENT MapnikPluginDevelopment + ) + get_property(MAPNIK_INSTALLED_PLUGINS GLOBAL PROPERTY PLUGINS) + list(APPEND MAPNIK_INSTALLED_PLUGINS ${_target}) + set_property(GLOBAL PROPERTY PLUGINS ${MAPNIK_INSTALLED_PLUGINS}) endfunction() diff --git a/demo/c++/CMakeLists.txt b/demo/c++/CMakeLists.txt index 1b758fa2c..a50cd71c2 100644 --- a/demo/c++/CMakeLists.txt +++ b/demo/c++/CMakeLists.txt @@ -4,7 +4,7 @@ add_executable(mapnik-demo rundemo.cpp) target_link_libraries(mapnik-demo PRIVATE mapnik::agg mapnik::mapnik) -mapnik_install(TARGET mapnik-demo) +mapnik_install(mapnik-demo) mapnik_copy_plugins(TARGET mapnik-demo DESTINATION plugins/input PLUGINS input-shape) mapnik_require_fonts(TARGET mapnik-demo DESTINATION fonts) mapnik_copy_dependencies(TARGETS mapnik-demo PLUGINS input-shape) diff --git a/demo/viewer/CMakeLists.txt b/demo/viewer/CMakeLists.txt index 10ae37af7..9f64da28a 100644 --- a/demo/viewer/CMakeLists.txt +++ b/demo/viewer/CMakeLists.txt @@ -61,7 +61,7 @@ if(QT_VERSION_MAJOR EQUAL 6) endif() install(FILES ${CMAKE_CURRENT_BINARY_DIR}/viewer.ini DESTINATION bin) -mapnik_install(TARGET mapnik-viewer) +mapnik_install(mapnik-viewer) mapnik_copy_dependencies( TARGETS diff --git a/plugins/input/CMakeLists.txt b/plugins/input/CMakeLists.txt index d289c2a3e..be5d0b11a 100644 --- a/plugins/input/CMakeLists.txt +++ b/plugins/input/CMakeLists.txt @@ -1,3 +1,6 @@ +set(_plugin_prefix "") +set(_plugin_suffix ".input") + if(USE_PLUGIN_INPUT_CSV) message(STATUS "using input plugin csv") add_subdirectory(csv) diff --git a/plugins/input/csv/CMakeLists.txt b/plugins/input/csv/CMakeLists.txt index 765ad98b5..636f5f147 100644 --- a/plugins/input/csv/CMakeLists.txt +++ b/plugins/input/csv/CMakeLists.txt @@ -7,15 +7,15 @@ add_library(input-csv MODULE csv_inline_featureset.cpp csv_utils.cpp ) -add_library(mapnik::plugin::input::csv ALIAS input-csv) - target_link_libraries(input-csv PRIVATE mapnik::mapnik mapnik::wkt mapnik::json ) -set_target_properties(input-csv PROPERTIES PREFIX "") -set_target_properties(input-csv PROPERTIES OUTPUT_NAME "csv") -set_target_properties(input-csv PROPERTIES SUFFIX ".input") +set_target_properties(input-csv PROPERTIES + OUTPUT_NAME "csv" + PREFIX "${_plugin_prefix}" + SUFFIX "${_plugin_suffix}" +) -mapnik_install(TARGET input-csv IS_PLUGIN) +mapnik_install_plugin(input-csv) diff --git a/plugins/input/gdal/CMakeLists.txt b/plugins/input/gdal/CMakeLists.txt index b07d16c75..6ae6336a4 100644 --- a/plugins/input/gdal/CMakeLists.txt +++ b/plugins/input/gdal/CMakeLists.txt @@ -6,15 +6,15 @@ add_library(input-gdal MODULE gdal_datasource.cpp gdal_featureset.cpp ) -add_library(mapnik::plugin::input::gdal ALIAS input-gdal) - target_include_directories(input-gdal PRIVATE ${GDAL_INCLUDE_DIRS}) target_link_libraries(input-gdal PRIVATE mapnik::mapnik ${GDAL_LIBRARIES} ) -set_target_properties(input-gdal PROPERTIES PREFIX "") -set_target_properties(input-gdal PROPERTIES OUTPUT_NAME "gdal") -set_target_properties(input-gdal PROPERTIES SUFFIX ".input") +set_target_properties(input-gdal PROPERTIES + OUTPUT_NAME "gdal" + PREFIX "${_plugin_prefix}" + SUFFIX "${_plugin_suffix}" +) -mapnik_install(TARGET input-gdal IS_PLUGIN) +mapnik_install_plugin(input-gdal) diff --git a/plugins/input/geobuf/CMakeLists.txt b/plugins/input/geobuf/CMakeLists.txt index 47901ab7f..6406d528f 100644 --- a/plugins/input/geobuf/CMakeLists.txt +++ b/plugins/input/geobuf/CMakeLists.txt @@ -4,12 +4,11 @@ add_library(input-geobuf MODULE geobuf_datasource.cpp geobuf_featureset.cpp ) -add_library(mapnik::plugin::input::geobuf ALIAS input-geobuf) - target_link_libraries(input-geobuf PRIVATE mapnik::mapnik) +set_target_properties(input-geobuf PROPERTIES + OUTPUT_NAME "geobuf" + PREFIX "${_plugin_prefix}" + SUFFIX "${_plugin_suffix}" +) -set_target_properties(input-geobuf PROPERTIES PREFIX "") -set_target_properties(input-geobuf PROPERTIES OUTPUT_NAME "geobuf") -set_target_properties(input-geobuf PROPERTIES SUFFIX ".input") - -mapnik_install(TARGET input-geobuf IS_PLUGIN) +mapnik_install_plugin(input-geobuf) diff --git a/plugins/input/geojson/CMakeLists.txt b/plugins/input/geojson/CMakeLists.txt index 86f15474f..e04b7a768 100644 --- a/plugins/input/geojson/CMakeLists.txt +++ b/plugins/input/geojson/CMakeLists.txt @@ -6,15 +6,14 @@ add_library(input-geojson MODULE geojson_index_featureset.cpp geojson_memory_index_featureset.cpp ) -add_library(mapnik::plugin::input::geojson ALIAS input-geojson) - target_link_libraries(input-geojson PRIVATE mapnik::mapnik mapnik::json ) +set_target_properties(input-geojson PROPERTIES + OUTPUT_NAME "geojson" + PREFIX "${_plugin_prefix}" + SUFFIX "${_plugin_suffix}" +) -set_target_properties(input-geojson PROPERTIES PREFIX "") -set_target_properties(input-geojson PROPERTIES OUTPUT_NAME "geojson") -set_target_properties(input-geojson PROPERTIES SUFFIX ".input") - -mapnik_install(TARGET input-geojson IS_PLUGIN) +mapnik_install_plugin(input-geojson) diff --git a/plugins/input/ogr/CMakeLists.txt b/plugins/input/ogr/CMakeLists.txt index d8eface2a..b149bd893 100644 --- a/plugins/input/ogr/CMakeLists.txt +++ b/plugins/input/ogr/CMakeLists.txt @@ -8,15 +8,15 @@ add_library(input-ogr MODULE ogr_featureset.cpp ogr_index_featureset.cpp ) -add_library(mapnik::plugin::input::ogr ALIAS input-ogr) - target_include_directories(input-ogr PRIVATE ${GDAL_INCLUDE_DIRS}) target_link_libraries(input-ogr PRIVATE mapnik::mapnik ${GDAL_LIBRARIES} ) -set_target_properties(input-ogr PROPERTIES PREFIX "") -set_target_properties(input-ogr PROPERTIES OUTPUT_NAME "ogr") -set_target_properties(input-ogr PROPERTIES SUFFIX ".input") +set_target_properties(input-ogr PROPERTIES + OUTPUT_NAME "ogr" + PREFIX "${_plugin_prefix}" + SUFFIX "${_plugin_suffix}" +) -mapnik_install(TARGET input-ogr IS_PLUGIN) +mapnik_install_plugin(input-ogr) diff --git a/plugins/input/pgraster/CMakeLists.txt b/plugins/input/pgraster/CMakeLists.txt index fed8f6a6c..7e6cb4dc7 100644 --- a/plugins/input/pgraster/CMakeLists.txt +++ b/plugins/input/pgraster/CMakeLists.txt @@ -7,15 +7,13 @@ add_library(input-pgraster MODULE pgraster_featureset.cpp pgraster_wkb_reader.cpp ) -add_library(mapnik::plugin::input::pgraster ALIAS input-pgraster) - - target_link_libraries(input-pgraster PRIVATE mapnik::mapnik PostgreSQL::PostgreSQL ) -set_target_properties(input-pgraster PROPERTIES PREFIX "") -set_target_properties(input-pgraster PROPERTIES OUTPUT_NAME "pgraster") -set_target_properties(input-pgraster PROPERTIES SUFFIX ".input") - -mapnik_install(TARGET input-pgraster IS_PLUGIN) +set_target_properties(input-pgraster PROPERTIES + OUTPUT_NAME "pgraster" + PREFIX "${_plugin_prefix}" + SUFFIX "${_plugin_suffix}" +) +mapnik_install_plugin(input-pgraster) diff --git a/plugins/input/postgis/CMakeLists.txt b/plugins/input/postgis/CMakeLists.txt index b67cb5d30..667cfbd67 100644 --- a/plugins/input/postgis/CMakeLists.txt +++ b/plugins/input/postgis/CMakeLists.txt @@ -6,15 +6,14 @@ add_library(input-postgis MODULE postgis_datasource.cpp postgis_featureset.cpp ) -add_library(mapnik::plugin::input::postgis ALIAS input-postgis) - target_link_libraries(input-postgis PRIVATE mapnik::mapnik PostgreSQL::PostgreSQL ) +set_target_properties(input-postgis PROPERTIES + OUTPUT_NAME "postgis" + PREFIX "${_plugin_prefix}" + SUFFIX "${_plugin_suffix}" +) -set_target_properties(input-postgis PROPERTIES PREFIX "") -set_target_properties(input-postgis PROPERTIES OUTPUT_NAME "postgis") -set_target_properties(input-postgis PROPERTIES SUFFIX ".input") - -mapnik_install(TARGET input-postgis IS_PLUGIN) +mapnik_install_plugin(input-postgis) diff --git a/plugins/input/raster/CMakeLists.txt b/plugins/input/raster/CMakeLists.txt index a094fb67f..9b44540d3 100644 --- a/plugins/input/raster/CMakeLists.txt +++ b/plugins/input/raster/CMakeLists.txt @@ -5,12 +5,11 @@ add_library(input-raster MODULE raster_featureset.cpp raster_info.cpp ) -add_library(mapnik::plugin::input::raster ALIAS input-raster) - target_link_libraries(input-raster PRIVATE mapnik::mapnik) +set_target_properties(input-raster PROPERTIES + OUTPUT_NAME "raster" + PREFIX "${_plugin_prefix}" + SUFFIX "${_plugin_suffix}" +) -set_target_properties(input-raster PROPERTIES PREFIX "") -set_target_properties(input-raster PROPERTIES OUTPUT_NAME "raster") -set_target_properties(input-raster PROPERTIES SUFFIX ".input") - -mapnik_install(TARGET input-raster IS_PLUGIN) +mapnik_install_plugin(input-raster) diff --git a/plugins/input/shape/CMakeLists.txt b/plugins/input/shape/CMakeLists.txt index cd1694cf4..1db71db7b 100644 --- a/plugins/input/shape/CMakeLists.txt +++ b/plugins/input/shape/CMakeLists.txt @@ -8,12 +8,11 @@ add_library(input-shape MODULE shape_index_featureset.cpp shape_io.cpp shape_utils.cpp ) -add_library(mapnik::plugin::input::shape ALIAS input-shape) - target_link_libraries(input-shape PRIVATE mapnik::mapnik) +set_target_properties(input-shape PROPERTIES + OUTPUT_NAME "shape" + PREFIX "${_plugin_prefix}" + SUFFIX "${_plugin_suffix}" +) -set_target_properties(input-shape PROPERTIES PREFIX "") -set_target_properties(input-shape PROPERTIES OUTPUT_NAME "shape") -set_target_properties(input-shape PROPERTIES SUFFIX ".input") - -mapnik_install(TARGET input-shape IS_PLUGIN) +mapnik_install_plugin(input-shape) diff --git a/plugins/input/sqlite/CMakeLists.txt b/plugins/input/sqlite/CMakeLists.txt index 9df08bf26..dedf98c3a 100644 --- a/plugins/input/sqlite/CMakeLists.txt +++ b/plugins/input/sqlite/CMakeLists.txt @@ -7,14 +7,14 @@ add_library(input-sqlite MODULE sqlite_featureset.cpp ) add_library(mapnik::plugin::input::sqlite ALIAS input-sqlite) - target_link_libraries(input-sqlite PRIVATE mapnik::mapnik SQLite::SQLite3 ) +set_target_properties(input-sqlite PROPERTIES + OUTPUT_NAME "sqlite" + PREFIX "${_plugin_prefix}" + SUFFIX "${_plugin_suffix}" +) -set_target_properties(input-sqlite PROPERTIES PREFIX "") -set_target_properties(input-sqlite PROPERTIES OUTPUT_NAME "sqlite") -set_target_properties(input-sqlite PROPERTIES SUFFIX ".input") - -mapnik_install(TARGET input-sqlite IS_PLUGIN) +mapnik_install_plugin(input-sqlite) diff --git a/plugins/input/topojson/CMakeLists.txt b/plugins/input/topojson/CMakeLists.txt index 9ba6f5ded..bd6f2cc67 100644 --- a/plugins/input/topojson/CMakeLists.txt +++ b/plugins/input/topojson/CMakeLists.txt @@ -5,14 +5,14 @@ add_library(input-topojson MODULE topojson_featureset.cpp ) add_library(mapnik::plugin::input::topojson ALIAS input-topojson) - target_link_libraries(input-topojson PRIVATE mapnik::mapnik mapnik::json ) +set_target_properties(input-topojson PROPERTIES + OUTPUT_NAME "topojson" + PREFIX "${_plugin_prefix}" + SUFFIX "${_plugin_suffix}" +) -set_target_properties(input-topojson PROPERTIES PREFIX "") -set_target_properties(input-topojson PROPERTIES OUTPUT_NAME "topojson") -set_target_properties(input-topojson PROPERTIES SUFFIX ".input") - -mapnik_install(TARGET input-topojson IS_PLUGIN) +mapnik_install_plugin(input-topojson) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c2c70f8da..e163aaf34 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -303,4 +303,4 @@ if(MSVC) target_compile_options(mapnik PUBLIC "/bigobj" "/wd4068" "/wd4661" "/wd4910") endif() -mapnik_install(TARGET mapnik) +mapnik_install(mapnik) diff --git a/src/json/CMakeLists.txt b/src/json/CMakeLists.txt index d43e0660c..1b9d8bc23 100644 --- a/src/json/CMakeLists.txt +++ b/src/json/CMakeLists.txt @@ -31,4 +31,4 @@ set_target_properties(json PROPERTIES PREFIX "libmapnik-" ) -mapnik_install(TARGET json) +mapnik_install(json) diff --git a/src/wkt/CMakeLists.txt b/src/wkt/CMakeLists.txt index e2e2eafbb..c0033bb98 100644 --- a/src/wkt/CMakeLists.txt +++ b/src/wkt/CMakeLists.txt @@ -23,4 +23,4 @@ set_target_properties(wkt PROPERTIES PREFIX "libmapnik-" ) -mapnik_install(TARGET wkt) +mapnik_install(wkt) diff --git a/utils/geometry_to_wkb/CMakeLists.txt b/utils/geometry_to_wkb/CMakeLists.txt index bce4af989..365bb89f7 100644 --- a/utils/geometry_to_wkb/CMakeLists.txt +++ b/utils/geometry_to_wkb/CMakeLists.txt @@ -4,4 +4,4 @@ add_executable(geometry_to_wkb main.cpp) target_link_libraries(geometry_to_wkb PRIVATE mapnik::mapnik) -mapnik_install(TARGET geometry_to_wkb) +mapnik_install(geometry_to_wkb) diff --git a/utils/mapnik-index/CMakeLists.txt b/utils/mapnik-index/CMakeLists.txt index f9e568474..de5dc7d68 100644 --- a/utils/mapnik-index/CMakeLists.txt +++ b/utils/mapnik-index/CMakeLists.txt @@ -15,4 +15,4 @@ target_link_libraries(mapnik-index PRIVATE Boost::program_options ) -mapnik_install(TARGET mapnik-index) +mapnik_install(mapnik-index) diff --git a/utils/mapnik-render/CMakeLists.txt b/utils/mapnik-render/CMakeLists.txt index 705482350..f655a6fd3 100644 --- a/utils/mapnik-render/CMakeLists.txt +++ b/utils/mapnik-render/CMakeLists.txt @@ -9,4 +9,4 @@ target_link_libraries(mapnik-render PRIVATE Boost::program_options ) -mapnik_install(TARGET mapnik-render) +mapnik_install(mapnik-render) diff --git a/utils/ogrindex/CMakeLists.txt b/utils/ogrindex/CMakeLists.txt index 46b9cf0eb..9b2b4df2a 100644 --- a/utils/ogrindex/CMakeLists.txt +++ b/utils/ogrindex/CMakeLists.txt @@ -4,4 +4,4 @@ add_executable(ogrindex ogrindex.cpp) target_link_libraries(ogrindex PRIVATE mapnik::mapnik) -mapnik_install(TARGET ogrindex) +mapnik_install(ogrindex) diff --git a/utils/pgsql2sqlite/CMakeLists.txt b/utils/pgsql2sqlite/CMakeLists.txt index 1412e4dd6..c60e5d597 100644 --- a/utils/pgsql2sqlite/CMakeLists.txt +++ b/utils/pgsql2sqlite/CMakeLists.txt @@ -16,4 +16,4 @@ target_link_libraries(pgsql2sqlite PRIVATE mapnik::mapnik ) -mapnik_install(TARGET pgsql2sqlite) +mapnik_install(pgsql2sqlite) diff --git a/utils/shapeindex/CMakeLists.txt b/utils/shapeindex/CMakeLists.txt index c3ddb9208..e7d2bd9ad 100644 --- a/utils/shapeindex/CMakeLists.txt +++ b/utils/shapeindex/CMakeLists.txt @@ -12,4 +12,4 @@ target_link_libraries(shapeindex PRIVATE mapnik::mapnik ) -mapnik_install(TARGET shapeindex) +mapnik_install(shapeindex) diff --git a/utils/svg2png/CMakeLists.txt b/utils/svg2png/CMakeLists.txt index 7dce53fbe..76bc72d77 100644 --- a/utils/svg2png/CMakeLists.txt +++ b/utils/svg2png/CMakeLists.txt @@ -12,4 +12,4 @@ target_link_libraries(svg2png PRIVATE mapnik::agg ) -mapnik_install(TARGET svg2png) +mapnik_install(svg2png) From f1ed49edec8ab50d0263f5dfd4a3f77190c5f0d4 Mon Sep 17 00:00:00 2001 From: Mathis Logemann Date: Wed, 22 Sep 2021 20:49:44 +0200 Subject: [PATCH 06/13] install utilities --- CMakeLists.txt | 39 +-------------- cmake/MapnikExport.cmake | 38 +++++++++++++++ cmake/MapnikInstall.cmake | 71 ++++++++++++++++++++-------- cmake/mapnikConfig.cmake.in | 10 +++- demo/c++/CMakeLists.txt | 1 - demo/viewer/CMakeLists.txt | 2 +- utils/geometry_to_wkb/CMakeLists.txt | 2 +- utils/mapnik-index/CMakeLists.txt | 2 +- utils/mapnik-render/CMakeLists.txt | 2 +- utils/ogrindex/CMakeLists.txt | 2 +- utils/pgsql2sqlite/CMakeLists.txt | 2 +- utils/shapeindex/CMakeLists.txt | 2 +- utils/svg2png/CMakeLists.txt | 2 +- 13 files changed, 108 insertions(+), 67 deletions(-) create mode 100644 cmake/MapnikExport.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 5bcaf2963..01af5c4b0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -218,6 +218,7 @@ endif() # (used by MapnikInstall.cmake. properties are needed since "set(...)" will be out of scope set_property(GLOBAL PROPERTY TARGETS "") set_property(GLOBAL PROPERTY PLUGINS "") +set_property(GLOBAL PROPERTY MAPNIK_UTILITIES "") if(USE_GLIBC_WORKAROUND) message("using glibc workaround") @@ -372,43 +373,7 @@ if(BUILD_TEST) endif() # start package mapnik -include(CMakePackageConfigHelpers) - -# set the cmake targets install location -set(INCLUDE_INSTALL_DIR include/) -write_basic_package_version_file( - "${CMAKE_CURRENT_BINARY_DIR}/mapnikConfigVersion.cmake" - VERSION ${PROJECT_VERSION} - COMPATIBILITY SameMajorVersion -) - -list(JOIN MAPNIK_DEPENDENCIES "\n" MAPNIK_DEPENDENCIES) -configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/mapnikConfig.cmake.in - "${CMAKE_CURRENT_BINARY_DIR}/mapnikConfig.cmake" - INSTALL_DESTINATION ${MAPNIK_CMAKE_DIR} - PATH_VARS INCLUDE_INSTALL_DIR PLUGINS_INSTALL_DIR FONTS_INSTALL_DIR MAPNIK_DEPENDENCIES -) - -install( - FILES - "${CMAKE_CURRENT_BINARY_DIR}/mapnikConfig.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/mapnikConfigVersion.cmake" - DESTINATION ${MAPNIK_CMAKE_DIR} -) - -install( - FILES - "${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCairo.cmake" - "${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindWebP.cmake" - "${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindHarfBuzz.cmake" - DESTINATION ${MAPNIK_CMAKE_DIR}/Modules -) - -install(EXPORT MapnikTargets - DESTINATION ${MAPNIK_CMAKE_DIR} - FILE mapnikTargets.cmake - NAMESPACE mapnik:: -) +include(MapnikExport) install(DIRECTORY include/ DESTINATION ${MAPNIK_INCLUDE_DIR}) install(DIRECTORY deps/agg/include/ DESTINATION ${MAPNIK_INCLUDE_DIR}) diff --git a/cmake/MapnikExport.cmake b/cmake/MapnikExport.cmake new file mode 100644 index 000000000..89cba1391 --- /dev/null +++ b/cmake/MapnikExport.cmake @@ -0,0 +1,38 @@ +include(CMakePackageConfigHelpers) + +# set the cmake targets install location +set(INCLUDE_INSTALL_DIR include/) +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/mapnikConfigVersion.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion +) +get_property(MAPNIK_UTILITIES GLOBAL PROPERTY MAPNIK_UTILITIES) +list(JOIN MAPNIK_DEPENDENCIES "\n" MAPNIK_DEPENDENCIES) +configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/mapnikConfig.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/mapnikConfig.cmake" + INSTALL_DESTINATION ${MAPNIK_CMAKE_DIR} + PATH_VARS INCLUDE_INSTALL_DIR PLUGINS_INSTALL_DIR FONTS_INSTALL_DIR MAPNIK_DEPENDENCIES MAPNIK_UTILITIES + NO_CHECK_REQUIRED_COMPONENTS_MACRO +) + +install( + FILES + "${CMAKE_CURRENT_BINARY_DIR}/mapnikConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/mapnikConfigVersion.cmake" + DESTINATION ${MAPNIK_CMAKE_DIR} +) + +install( + FILES + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCairo.cmake" + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindWebP.cmake" + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindHarfBuzz.cmake" + DESTINATION ${MAPNIK_CMAKE_DIR}/Modules +) + +install(EXPORT MapnikTargets + DESTINATION ${MAPNIK_CMAKE_DIR} + FILE mapnikTargets.cmake + NAMESPACE mapnik:: +) diff --git a/cmake/MapnikInstall.cmake b/cmake/MapnikInstall.cmake index fc5c4350e..a62a87aa1 100644 --- a/cmake/MapnikInstall.cmake +++ b/cmake/MapnikInstall.cmake @@ -1,3 +1,6 @@ +# +# Install library targets that consuming users need. +# function(mapnik_install _target) install(TARGETS ${_target} EXPORT MapnikTargets @@ -11,13 +14,14 @@ function(mapnik_install _target) COMPONENT MapnikDevelopment ) get_target_property(TARGET_TYPE "${_target}" TYPE) - if (TARGET_TYPE STREQUAL "EXECUTABLE") - get_property(MAPNIK_INSTALLED_TARGETS GLOBAL PROPERTY TARGETS) - list(APPEND MAPNIK_INSTALLED_TARGETS ${_target}) - set_property(GLOBAL PROPERTY TARGETS ${MAPNIK_INSTALLED_TARGETS}) + if (TARGET_TYPE STREQUAL "SHARED_LIBRARY") + set_property(GLOBAL APPEND PROPERTY TARGETS ${_target}) endif() endfunction() +# +# Install plugins +# function(mapnik_install_plugin _target) install(TARGETS ${_target} RUNTIME DESTINATION ${PLUGINS_INSTALL_DIR} @@ -28,36 +32,65 @@ function(mapnik_install_plugin _target) ARCHIVE DESTINATION ${PLUGINS_INSTALL_DIR} COMPONENT MapnikPluginDevelopment ) - get_property(MAPNIK_INSTALLED_PLUGINS GLOBAL PROPERTY PLUGINS) - list(APPEND MAPNIK_INSTALLED_PLUGINS ${_target}) - set_property(GLOBAL PROPERTY PLUGINS ${MAPNIK_INSTALLED_PLUGINS}) + set_property(GLOBAL APPEND PROPERTY PLUGINS ${_target}) endfunction() +# +# Install executables. These are available via COMPONENTS in find_package +# +function(mapnik_install_utility _target) + set(_target_name "MapnikUtility_${_target}_Targets") + install(TARGETS ${_target} + EXPORT ${_target_name} + INCLUDES DESTINATION ${MAPNIK_INCLUDE_DIR} + RUNTIME DESTINATION ${MAPNIK_BIN_DIR} + COMPONENT MapnikRuntime + LIBRARY DESTINATION ${MAPNIK_LIB_DIR} + COMPONENT MapnikRuntime + NAMELINK_COMPONENT MapnikDevelopment + ARCHIVE DESTINATION ${MAPNIK_ARCHIVE_DIR} + COMPONENT MapnikDevelopment + ) + install(EXPORT ${_target_name} + FILE ${_target_name}.cmake + NAMESPACE mapnik:: + DESTINATION ${MAPNIK_CMAKE_DIR} + ) + set_property(GLOBAL APPEND PROPERTY MAPNIK_UTILITIES ${_target}) +endfunction() + + function(mapnik_install_targets) if(INSTALL_DEPENDENCIES AND WIN32) # https://cmake.org/cmake/help/latest/policy/CMP0087.html cmake_policy(SET CMP0087 NEW) - get_property(MAPNIK_INSTALLED_TARGETS GLOBAL PROPERTY TARGETS) - get_property(MAPNIK_INSTALLED_PLUGINS GLOBAL PROPERTY PLUGINS) - set(INTERNAL_TARGETS "") - set(INTERNAL_PLUGINS "") + get_property(_installed_utilities GLOBAL PROPERTY MAPNIK_UTILITIES) + get_property(_installed_targets GLOBAL PROPERTY TARGETS) + get_property(_installed_plugins GLOBAL PROPERTY PLUGINS) + set(_internal_executables "") + set(_internal_libraries "") - foreach(_target IN LISTS MAPNIK_INSTALLED_TARGETS) - list(APPEND INTERNAL_TARGETS "${CMAKE_INSTALL_PREFIX}/${MAPNIK_BIN_DIR}/$") + foreach(_target IN LISTS _installed_utilities) + list(APPEND _internal_executables "${CMAKE_INSTALL_PREFIX}/${MAPNIK_BIN_DIR}/$") endforeach() - foreach(_target IN LISTS MAPNIK_INSTALLED_PLUGINS) - list(APPEND INTERNAL_PLUGINS "${CMAKE_INSTALL_PREFIX}/${PLUGINS_INSTALL_DIR}/$") + foreach(_target IN LISTS _installed_targets) + list(APPEND _internal_libraries "${CMAKE_INSTALL_PREFIX}/${MAPNIK_BIN_DIR}/$") + endforeach() + foreach(_target IN LISTS _installed_plugins) + list(APPEND _internal_libraries "${CMAKE_INSTALL_PREFIX}/${PLUGINS_INSTALL_DIR}/$") endforeach() # all other executables get auto detected and fixed. - list(GET INTERNAL_TARGETS 0 INTERNAL_TARGETS) + if(_internal_executables) + list(GET _internal_executables 0 _internal_executables) + endif() INSTALL(CODE " - message(STATUS \"${INTERNAL_TARGETS}\") - message(STATUS \"${INTERNAL_PLUGINS}\") + message(STATUS \"${_internal_executables}\") + message(STATUS \"${_internal_libraries}\") include(BundleUtilities) - fixup_bundle(\"${INTERNAL_TARGETS}\" \"${INTERNAL_PLUGINS}\" \"${ADDITIONAL_LIBARIES_PATHS}\") + fixup_bundle(\"${_internal_executables}\" \"${_internal_libraries}\" \"${ADDITIONAL_LIBARIES_PATHS}\") " COMPONENT MapnikRuntime) endif() diff --git a/cmake/mapnikConfig.cmake.in b/cmake/mapnikConfig.cmake.in index 8e724e9ff..b202abf28 100644 --- a/cmake/mapnikConfig.cmake.in +++ b/cmake/mapnikConfig.cmake.in @@ -9,7 +9,13 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_LIST_DIR}/Modules/") include(CMakeFindDependencyMacro) @MAPNIK_DEPENDENCIES@ - include("${CMAKE_CURRENT_LIST_DIR}/mapnikTargets.cmake") -check_required_components(mapnik) +set(_supported_components @MAPNIK_UTILITIES@) +foreach(_comp ${mapnik_FIND_COMPONENTS}) + if (NOT _comp IN_LIST _supported_components) + set(mapnik_FOUND False) + set(mapnik_NOT_FOUND_MESSAGE "Unsupported component: ${_comp}") + endif() + include("${CMAKE_CURRENT_LIST_DIR}/MapnikUtility_${_comp}_Targets.cmake") +endforeach() diff --git a/demo/c++/CMakeLists.txt b/demo/c++/CMakeLists.txt index a50cd71c2..ffa2cb1a8 100644 --- a/demo/c++/CMakeLists.txt +++ b/demo/c++/CMakeLists.txt @@ -4,7 +4,6 @@ add_executable(mapnik-demo rundemo.cpp) target_link_libraries(mapnik-demo PRIVATE mapnik::agg mapnik::mapnik) -mapnik_install(mapnik-demo) mapnik_copy_plugins(TARGET mapnik-demo DESTINATION plugins/input PLUGINS input-shape) mapnik_require_fonts(TARGET mapnik-demo DESTINATION fonts) mapnik_copy_dependencies(TARGETS mapnik-demo PLUGINS input-shape) diff --git a/demo/viewer/CMakeLists.txt b/demo/viewer/CMakeLists.txt index 9f64da28a..445d5fa78 100644 --- a/demo/viewer/CMakeLists.txt +++ b/demo/viewer/CMakeLists.txt @@ -61,7 +61,7 @@ if(QT_VERSION_MAJOR EQUAL 6) endif() install(FILES ${CMAKE_CURRENT_BINARY_DIR}/viewer.ini DESTINATION bin) -mapnik_install(mapnik-viewer) +mapnik_install_utility(mapnik-viewer) mapnik_copy_dependencies( TARGETS diff --git a/utils/geometry_to_wkb/CMakeLists.txt b/utils/geometry_to_wkb/CMakeLists.txt index 365bb89f7..7266f72c6 100644 --- a/utils/geometry_to_wkb/CMakeLists.txt +++ b/utils/geometry_to_wkb/CMakeLists.txt @@ -4,4 +4,4 @@ add_executable(geometry_to_wkb main.cpp) target_link_libraries(geometry_to_wkb PRIVATE mapnik::mapnik) -mapnik_install(geometry_to_wkb) +mapnik_install_utility(geometry_to_wkb) diff --git a/utils/mapnik-index/CMakeLists.txt b/utils/mapnik-index/CMakeLists.txt index de5dc7d68..22925e1b5 100644 --- a/utils/mapnik-index/CMakeLists.txt +++ b/utils/mapnik-index/CMakeLists.txt @@ -15,4 +15,4 @@ target_link_libraries(mapnik-index PRIVATE Boost::program_options ) -mapnik_install(mapnik-index) +mapnik_install_utility(mapnik-index) diff --git a/utils/mapnik-render/CMakeLists.txt b/utils/mapnik-render/CMakeLists.txt index f655a6fd3..b5e8fa1a5 100644 --- a/utils/mapnik-render/CMakeLists.txt +++ b/utils/mapnik-render/CMakeLists.txt @@ -9,4 +9,4 @@ target_link_libraries(mapnik-render PRIVATE Boost::program_options ) -mapnik_install(mapnik-render) +mapnik_install_utility(mapnik-render) diff --git a/utils/ogrindex/CMakeLists.txt b/utils/ogrindex/CMakeLists.txt index 9b2b4df2a..20ee5cf4e 100644 --- a/utils/ogrindex/CMakeLists.txt +++ b/utils/ogrindex/CMakeLists.txt @@ -4,4 +4,4 @@ add_executable(ogrindex ogrindex.cpp) target_link_libraries(ogrindex PRIVATE mapnik::mapnik) -mapnik_install(ogrindex) +mapnik_install_utility(ogrindex) diff --git a/utils/pgsql2sqlite/CMakeLists.txt b/utils/pgsql2sqlite/CMakeLists.txt index c60e5d597..7d7679987 100644 --- a/utils/pgsql2sqlite/CMakeLists.txt +++ b/utils/pgsql2sqlite/CMakeLists.txt @@ -16,4 +16,4 @@ target_link_libraries(pgsql2sqlite PRIVATE mapnik::mapnik ) -mapnik_install(pgsql2sqlite) +mapnik_install_utility(pgsql2sqlite) diff --git a/utils/shapeindex/CMakeLists.txt b/utils/shapeindex/CMakeLists.txt index e7d2bd9ad..3a8febb16 100644 --- a/utils/shapeindex/CMakeLists.txt +++ b/utils/shapeindex/CMakeLists.txt @@ -12,4 +12,4 @@ target_link_libraries(shapeindex PRIVATE mapnik::mapnik ) -mapnik_install(shapeindex) +mapnik_install_utility(shapeindex) diff --git a/utils/svg2png/CMakeLists.txt b/utils/svg2png/CMakeLists.txt index 76bc72d77..ba2e9c89b 100644 --- a/utils/svg2png/CMakeLists.txt +++ b/utils/svg2png/CMakeLists.txt @@ -12,4 +12,4 @@ target_link_libraries(svg2png PRIVATE mapnik::agg ) -mapnik_install(svg2png) +mapnik_install_utility(svg2png) From 5287c234d607b87a39bc39dde9f79541483cc06c Mon Sep 17 00:00:00 2001 From: Mathis Logemann Date: Wed, 22 Sep 2021 21:39:04 +0200 Subject: [PATCH 07/13] [CMake] fix resulting config when no plugins are build --- cmake/MapnikExport.cmake | 3 +-- cmake/mapnikConfig.cmake.in | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/cmake/MapnikExport.cmake b/cmake/MapnikExport.cmake index 89cba1391..28d5eef6f 100644 --- a/cmake/MapnikExport.cmake +++ b/cmake/MapnikExport.cmake @@ -1,7 +1,6 @@ include(CMakePackageConfigHelpers) # set the cmake targets install location -set(INCLUDE_INSTALL_DIR include/) write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/mapnikConfigVersion.cmake" VERSION ${PROJECT_VERSION} @@ -12,7 +11,7 @@ list(JOIN MAPNIK_DEPENDENCIES "\n" MAPNIK_DEPENDENCIES) configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/mapnikConfig.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/mapnikConfig.cmake" INSTALL_DESTINATION ${MAPNIK_CMAKE_DIR} - PATH_VARS INCLUDE_INSTALL_DIR PLUGINS_INSTALL_DIR FONTS_INSTALL_DIR MAPNIK_DEPENDENCIES MAPNIK_UTILITIES + PATH_VARS MAPNIK_INCLUDE_DIR PLUGINS_INSTALL_DIR FONTS_INSTALL_DIR MAPNIK_DEPENDENCIES MAPNIK_UTILITIES NO_CHECK_REQUIRED_COMPONENTS_MACRO ) diff --git a/cmake/mapnikConfig.cmake.in b/cmake/mapnikConfig.cmake.in index b202abf28..7c4887109 100644 --- a/cmake/mapnikConfig.cmake.in +++ b/cmake/mapnikConfig.cmake.in @@ -1,8 +1,8 @@ @PACKAGE_INIT@ -set_and_check(MAPNIK_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@" CACHE STRING "") -set_and_check(MAPNIK_PLUGINS_DIR "@PACKAGE_PLUGINS_INSTALL_DIR@" CACHE STRING "") +set_and_check(MAPNIK_INCLUDE_DIR "@PACKAGE_MAPNIK_INCLUDE_DIR@" CACHE STRING "") set_and_check(MAPNIK_FONTS_DIR "@PACKAGE_FONTS_INSTALL_DIR@" CACHE STRING "") +set(MAPNIK_PLUGINS_DIR "@PACKAGE_PLUGINS_INSTALL_DIR@" CACHE STRING "") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_LIST_DIR}/Modules/") From 1c51a8e529fc08d4496373b2728f659819fc0226 Mon Sep 17 00:00:00 2001 From: Mathis Logemann Date: Thu, 23 Sep 2021 10:33:32 +0200 Subject: [PATCH 08/13] [CMake] add configuration dependend exports for plugin install dir. add function to get the current plugin install dir --- cmake/MapnikExport.cmake | 21 ++++++++++++++++++++- cmake/MapnikInstall.cmake | 2 +- cmake/mapnikConfig.cmake.in | 33 +++++++++++++++++++++++++++++++-- docs/cmake-usage.md | 10 ++++++++-- 4 files changed, 60 insertions(+), 6 deletions(-) diff --git a/cmake/MapnikExport.cmake b/cmake/MapnikExport.cmake index 28d5eef6f..6f69fb7c9 100644 --- a/cmake/MapnikExport.cmake +++ b/cmake/MapnikExport.cmake @@ -1,6 +1,6 @@ include(CMakePackageConfigHelpers) -# set the cmake targets install location +# export mapnik configuration write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/mapnikConfigVersion.cmake" VERSION ${PROJECT_VERSION} @@ -22,6 +22,7 @@ install( DESTINATION ${MAPNIK_CMAKE_DIR} ) +# install our modules, so that the expected target names are found. install( FILES "${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCairo.cmake" @@ -35,3 +36,21 @@ install(EXPORT MapnikTargets FILE mapnikTargets.cmake NAMESPACE mapnik:: ) + + +# Create configuration dependend files for the plugin install dirs. +# some package managers are using different paths per configuration. +string(TOLOWER "${CMAKE_BUILD_TYPE}" _build_type) +string(TOUPPER "${CMAKE_BUILD_TYPE}" _build_type_l) +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/mapnikPlugins-${_build_type}.cmake.in "set(MAPNIK_PLUGINS_DIR_${_build_type_l} \"@PACKAGE_PLUGINS_INSTALL_DIR@\" CACHE STRING \"\")\n") +include(CMakePackageConfigHelpers) +configure_package_config_file( + ${CMAKE_CURRENT_BINARY_DIR}/mapnikPlugins-${_build_type}.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/mapnikPlugins-${_build_type}.cmake + PATH_VARS PLUGINS_INSTALL_DIR + INSTALL_DESTINATION ${MAPNIK_CMAKE_DIR} +) +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/MapnikPlugins-${_build_type}.cmake + DESTINATION ${MAPNIK_CMAKE_DIR} +) diff --git a/cmake/MapnikInstall.cmake b/cmake/MapnikInstall.cmake index a62a87aa1..4d1d0bb4d 100644 --- a/cmake/MapnikInstall.cmake +++ b/cmake/MapnikInstall.cmake @@ -39,7 +39,7 @@ endfunction() # Install executables. These are available via COMPONENTS in find_package # function(mapnik_install_utility _target) - set(_target_name "MapnikUtility_${_target}_Targets") + set(_target_name "mapnikUtilityTargets_${_target}") install(TARGETS ${_target} EXPORT ${_target_name} INCLUDES DESTINATION ${MAPNIK_INCLUDE_DIR} diff --git a/cmake/mapnikConfig.cmake.in b/cmake/mapnikConfig.cmake.in index 7c4887109..ef5e07c23 100644 --- a/cmake/mapnikConfig.cmake.in +++ b/cmake/mapnikConfig.cmake.in @@ -2,7 +2,6 @@ set_and_check(MAPNIK_INCLUDE_DIR "@PACKAGE_MAPNIK_INCLUDE_DIR@" CACHE STRING "") set_and_check(MAPNIK_FONTS_DIR "@PACKAGE_FONTS_INSTALL_DIR@" CACHE STRING "") -set(MAPNIK_PLUGINS_DIR "@PACKAGE_PLUGINS_INSTALL_DIR@" CACHE STRING "") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_LIST_DIR}/Modules/") @@ -17,5 +16,35 @@ foreach(_comp ${mapnik_FIND_COMPONENTS}) set(mapnik_FOUND False) set(mapnik_NOT_FOUND_MESSAGE "Unsupported component: ${_comp}") endif() - include("${CMAKE_CURRENT_LIST_DIR}/MapnikUtility_${_comp}_Targets.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/mapnikUtilityTargets_${_comp}.cmake") endforeach() + + +get_filename_component(_plugin_dir "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_plugin_dir}/mapnikPlugins-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +function(mapnik_find_plugin_dir PLUGIN_DIR) + string(TOUPPER "${CMAKE_BUILD_TYPE}" _build_type_l) + set(_plugin_dir "${MAPNIK_PLUGINS_DIR_${_build_config}}") + # only release has more then one configuration + if(NOT _plugin_dir) + set(_all_rel_cfgs RELEASE RELWITHDEBINFO MINSIZEREL) + list(FIND _all_rel_cfgs ${_build_config} _is_rel_cfg) + # check if the current configuration is a known release configuration + if(${_is_rel_cfg} GREATER_EQUAL 0) + foreach(_rel_cfg IN LISTS _all_rel_cfgs) + set(_plugin_dir "${MAPNIK_PLUGINS_DIR_${_rel_cfg}}") + if(_plugin_dir) + break() + endif() + endforeach() + endif() + endif() + if(NOT _plugin_dir) + message(WARNING "Could not find a plugin install dir for configuration ${_build_type_l}") + endif() + set(${PLUGIN_DIR} ${_plugin_dir} PARENT_SCOPE) +endfunction() diff --git a/docs/cmake-usage.md b/docs/cmake-usage.md index 32088992c..2c646b2d3 100644 --- a/docs/cmake-usage.md +++ b/docs/cmake-usage.md @@ -34,10 +34,16 @@ All targets: * `mapnik::wkt`: wkt support for libmapnik. All mapnik executables and targets are exported within `mapnikTargets.cmake`. - -The plugin dir is available in the variable `MAPNIK_PLUGINS_DIR`. The font path is is available in the variable `MAPNIK_FONTS_DIR`. +The install location of the plugins might be configuration dependent. +For each configuration there exists a variable `MAPNIK_PLUGINS_DIR_` where `` is one of `CMAKE_BUILD_TYPE` as upper case. +There is a function exported which you can use to query the plugin dir for known typical configurations: +``` +mapnik_find_plugin_dir(MAPNIK_PLUGINS_DIR) +``` +`MAPNIK_PLUGINS_DIR` will contain then the plugin dir. If a path could not be found, a warning is printed. + ## Recommendations If you target a specific platform, it is recommended to create a toolchain file and set all the options and library path that you would normally set via cmd line options. From a2d3364ec7ea425243d91b758cb9d8fc08306c59 Mon Sep 17 00:00:00 2001 From: Mathis Logemann Date: Thu, 23 Sep 2021 10:41:25 +0200 Subject: [PATCH 09/13] [CMake] add version and soversion to base libraries --- cmake/GetVersion.cmake | 2 ++ cmake/MapnikExport.cmake | 4 ++-- src/CMakeLists.txt | 3 +++ src/json/CMakeLists.txt | 3 +++ src/wkt/CMakeLists.txt | 3 +++ 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/cmake/GetVersion.cmake b/cmake/GetVersion.cmake index 8c512645b..668cbe34d 100644 --- a/cmake/GetVersion.cmake +++ b/cmake/GetVersion.cmake @@ -9,4 +9,6 @@ macro(get_mapnik_version) string(REGEX MATCH "MAPNIK_PATCH_VERSION ([0-9]*)" _ ${VERSION_FILE}) set(MAPNIK_PATCH_VERSION ${CMAKE_MATCH_1}) + + set(MAPNIK_VERSION ${MAPNIK_MAJOR_VERSION}.${MAPNIK_MINOR_VERSION}.${MAPNIK_PATCH_VERSION}) endmacro() diff --git a/cmake/MapnikExport.cmake b/cmake/MapnikExport.cmake index 6f69fb7c9..d7175129a 100644 --- a/cmake/MapnikExport.cmake +++ b/cmake/MapnikExport.cmake @@ -3,8 +3,8 @@ include(CMakePackageConfigHelpers) # export mapnik configuration write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/mapnikConfigVersion.cmake" - VERSION ${PROJECT_VERSION} - COMPATIBILITY SameMajorVersion + VERSION ${MAPNIK_VERSION} + COMPATIBILITY ExactVersion ) get_property(MAPNIK_UTILITIES GLOBAL PROPERTY MAPNIK_UTILITIES) list(JOIN MAPNIK_DEPENDENCIES "\n" MAPNIK_DEPENDENCIES) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e163aaf34..28acb2735 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -293,6 +293,9 @@ set_target_properties(mapnik PROPERTIES DEBUG_POSTFIX "${MAPNIK_DEBUG_POSTFIX}" OUTPUT_NAME "mapnik" PREFIX "lib" + VERSION ${MAPNIK_VERSION} + # see https://github.com/mapnik/mapnik/pull/4248#issuecomment-925596509 => ABI compability only with the full version + SOVERSION ${MAPNIK_VERSION} ) if(MSVC) diff --git a/src/json/CMakeLists.txt b/src/json/CMakeLists.txt index 1b9d8bc23..0c334c2a3 100644 --- a/src/json/CMakeLists.txt +++ b/src/json/CMakeLists.txt @@ -29,6 +29,9 @@ set_target_properties(json PROPERTIES DEBUG_POSTFIX "${MAPNIK_DEBUG_POSTFIX}" OUTPUT_NAME "json" PREFIX "libmapnik-" + VERSION ${MAPNIK_VERSION} + # see mapnik target for explanation + SOVERSION ${MAPNIK_VERSION} ) mapnik_install(json) diff --git a/src/wkt/CMakeLists.txt b/src/wkt/CMakeLists.txt index c0033bb98..7b1815705 100644 --- a/src/wkt/CMakeLists.txt +++ b/src/wkt/CMakeLists.txt @@ -21,6 +21,9 @@ set_target_properties(wkt PROPERTIES DEBUG_POSTFIX "${MAPNIK_DEBUG_POSTFIX}" OUTPUT_NAME "wkt" PREFIX "libmapnik-" + VERSION ${MAPNIK_VERSION} + # see mapnik target for explanation + SOVERSION ${MAPNIK_VERSION} ) mapnik_install(wkt) From fcc7016124d8228070e3920f0445fdf4d82b4a66 Mon Sep 17 00:00:00 2001 From: Mathis Logemann Date: Thu, 23 Sep 2021 18:46:48 +0200 Subject: [PATCH 10/13] add basic pkg-config exports --- CMakeLists.txt | 2 ++ cmake/MapnikExportPkgConfig.cmake | 57 +++++++++++++++++++++++++++++++ src/json/CMakeLists.txt | 2 +- src/wkt/CMakeLists.txt | 2 +- 4 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 cmake/MapnikExportPkgConfig.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 01af5c4b0..c2b11a3b7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -103,6 +103,7 @@ set(MAPNIK_LIB_DIR ${CMAKE_INSTALL_LIBDIR} CACHE STRING "Install directory for l set(MAPNIK_ARCHIVE_DIR ${CMAKE_INSTALL_LIBDIR} CACHE STRING "Install directory for archives") set(MAPNIK_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE STRING "Install directory for the headers") set(MAPNIK_CMAKE_DIR ${MAPNIK_LIB_DIR}/cmake/mapnik CACHE STRING "Install directory of the cmake targets") +set(MAPNIK_PKGCONF_DIR ${MAPNIK_LIB_DIR}/pkgconfig CACHE STRING "Install directory for the .pc files for pkg-config") if(WIN32) set(DEFAULT_PLUGINS_INSTALL_DIR ${MAPNIK_BIN_DIR}/mapnik/input) @@ -374,6 +375,7 @@ endif() # start package mapnik include(MapnikExport) +include(MapnikExportPkgConfig) install(DIRECTORY include/ DESTINATION ${MAPNIK_INCLUDE_DIR}) install(DIRECTORY deps/agg/include/ DESTINATION ${MAPNIK_INCLUDE_DIR}) diff --git a/cmake/MapnikExportPkgConfig.cmake b/cmake/MapnikExportPkgConfig.cmake new file mode 100644 index 000000000..e054de9f2 --- /dev/null +++ b/cmake/MapnikExportPkgConfig.cmake @@ -0,0 +1,57 @@ +function(create_pkg_config_file _lib_name _description) + string(CONFIGURE [[ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +includedir=${prefix}/include +libdir=${exec_prefix}/lib + +Name: @_lib_name@ +Description: @_description@ +Version: @MAPNIK_VERSION@ +Libs: -L"${libdir}" -l@_lib_name@ +Cflags: -I"${includedir}" ]] + _contents @ONLY) + + file(GENERATE + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_lib_name}.pc + CONTENT "${_contents}" + ) + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/${_lib_name}.pc + DESTINATION ${MAPNIK_PKGCONF_DIR} + ) +endfunction() + +function(create_pkg_config_file_mapnik _lib_name _description) + get_target_property(_compile_defs core INTERFACE_COMPILE_DEFINITIONS) + string(JOIN " -D" _str_compile_defs ${_compile_defs}) + if(_str_compile_defs) + set(_str_compile_defs "-D${_str_compile_defs}") + endif() + string(CONFIGURE [[ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +includedir=${prefix}/include +libdir=${exec_prefix}/lib + +Name: @_lib_name@ +Description: @_description@ +Version: @MAPNIK_VERSION@ +Requires: libmapnikwkt libmapnikjson +Libs: -L"${libdir}" -l@_lib_name@ -llibmapnikwkt -llibmapnikjson +Cflags: -I"${includedir}" @_str_compile_defs@]] + _contents @ONLY) + file(GENERATE + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_lib_name}.pc + CONTENT "${_contents}" + ) + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/${_lib_name}.pc + DESTINATION ${MAPNIK_PKGCONF_DIR} + ) +endfunction() + + +create_pkg_config_file(libmapnikwkt "wkt library") +create_pkg_config_file(libmapnikjson "json library") +create_pkg_config_file_mapnik("libmapnik" "mapnik library") diff --git a/src/json/CMakeLists.txt b/src/json/CMakeLists.txt index 0c334c2a3..01efdb819 100644 --- a/src/json/CMakeLists.txt +++ b/src/json/CMakeLists.txt @@ -28,7 +28,7 @@ set_target_properties(json PROPERTIES POSITION_INDEPENDENT_CODE ON DEBUG_POSTFIX "${MAPNIK_DEBUG_POSTFIX}" OUTPUT_NAME "json" - PREFIX "libmapnik-" + PREFIX "libmapnik" VERSION ${MAPNIK_VERSION} # see mapnik target for explanation SOVERSION ${MAPNIK_VERSION} diff --git a/src/wkt/CMakeLists.txt b/src/wkt/CMakeLists.txt index 7b1815705..7aef814ad 100644 --- a/src/wkt/CMakeLists.txt +++ b/src/wkt/CMakeLists.txt @@ -20,7 +20,7 @@ set_target_properties(wkt PROPERTIES POSITION_INDEPENDENT_CODE ON DEBUG_POSTFIX "${MAPNIK_DEBUG_POSTFIX}" OUTPUT_NAME "wkt" - PREFIX "libmapnik-" + PREFIX "libmapnik" VERSION ${MAPNIK_VERSION} # see mapnik target for explanation SOVERSION ${MAPNIK_VERSION} From fa2fec338bc75df2a45c7e09ae2fadb7e6e9e06e Mon Sep 17 00:00:00 2001 From: Mathis Logemann Date: Thu, 23 Sep 2021 19:11:29 +0200 Subject: [PATCH 11/13] [CMake] add import prefix for libmapnik so that the resulting archive is also named libmapnik --- src/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 28acb2735..5017206ff 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -293,6 +293,7 @@ set_target_properties(mapnik PROPERTIES DEBUG_POSTFIX "${MAPNIK_DEBUG_POSTFIX}" OUTPUT_NAME "mapnik" PREFIX "lib" + IMPORT_PREFIX "lib" # for the archive on dll platforms VERSION ${MAPNIK_VERSION} # see https://github.com/mapnik/mapnik/pull/4248#issuecomment-925596509 => ABI compability only with the full version SOVERSION ${MAPNIK_VERSION} From 8c83e15404856c2ff8bb3bd08b5f40f4c703045e Mon Sep 17 00:00:00 2001 From: Mathis Logemann Date: Thu, 23 Sep 2021 19:28:40 +0200 Subject: [PATCH 12/13] [CMake] fix export plugin file naming --- cmake/MapnikExport.cmake | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/cmake/MapnikExport.cmake b/cmake/MapnikExport.cmake index d7175129a..90711ab28 100644 --- a/cmake/MapnikExport.cmake +++ b/cmake/MapnikExport.cmake @@ -42,15 +42,16 @@ install(EXPORT MapnikTargets # some package managers are using different paths per configuration. string(TOLOWER "${CMAKE_BUILD_TYPE}" _build_type) string(TOUPPER "${CMAKE_BUILD_TYPE}" _build_type_l) -file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/mapnikPlugins-${_build_type}.cmake.in "set(MAPNIK_PLUGINS_DIR_${_build_type_l} \"@PACKAGE_PLUGINS_INSTALL_DIR@\" CACHE STRING \"\")\n") +set(_mapnik_plugin_file_name "mapnikPlugins-${_build_type}") +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_mapnik_plugin_file_name}.cmake.in "set(MAPNIK_PLUGINS_DIR_${_build_type_l} \"@PACKAGE_PLUGINS_INSTALL_DIR@\" CACHE STRING \"\")\n") include(CMakePackageConfigHelpers) configure_package_config_file( - ${CMAKE_CURRENT_BINARY_DIR}/mapnikPlugins-${_build_type}.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/mapnikPlugins-${_build_type}.cmake + ${CMAKE_CURRENT_BINARY_DIR}/${_mapnik_plugin_file_name}.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/${_mapnik_plugin_file_name}.cmake PATH_VARS PLUGINS_INSTALL_DIR INSTALL_DESTINATION ${MAPNIK_CMAKE_DIR} ) install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/MapnikPlugins-${_build_type}.cmake + FILES ${CMAKE_CURRENT_BINARY_DIR}/${_mapnik_plugin_file_name}.cmake DESTINATION ${MAPNIK_CMAKE_DIR} ) From 333e745d7bfbfb46502b42e3030ce29e26950734 Mon Sep 17 00:00:00 2001 From: Mathis Logemann Date: Fri, 1 Oct 2021 20:42:57 +0200 Subject: [PATCH 13/13] [CMake] pkg-config: generate correct library link file names --- cmake/MapnikExportPkgConfig.cmake | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cmake/MapnikExportPkgConfig.cmake b/cmake/MapnikExportPkgConfig.cmake index e054de9f2..5649cb107 100644 --- a/cmake/MapnikExportPkgConfig.cmake +++ b/cmake/MapnikExportPkgConfig.cmake @@ -1,4 +1,4 @@ -function(create_pkg_config_file _lib_name _description) +function(create_pkg_config_file _target _lib_name _description) string(CONFIGURE [[ prefix=@CMAKE_INSTALL_PREFIX@ exec_prefix=${prefix} @@ -8,7 +8,7 @@ libdir=${exec_prefix}/lib Name: @_lib_name@ Description: @_description@ Version: @MAPNIK_VERSION@ -Libs: -L"${libdir}" -l@_lib_name@ +Libs: -L"${libdir}" -l$$$_POSTFIX> Cflags: -I"${includedir}" ]] _contents @ONLY) @@ -38,7 +38,7 @@ Name: @_lib_name@ Description: @_description@ Version: @MAPNIK_VERSION@ Requires: libmapnikwkt libmapnikjson -Libs: -L"${libdir}" -l@_lib_name@ -llibmapnikwkt -llibmapnikjson +Libs: -L"${libdir}" -l$$$_POSTFIX> -l$$$_POSTFIX> -l$$$_POSTFIX> Cflags: -I"${includedir}" @_str_compile_defs@]] _contents @ONLY) file(GENERATE @@ -52,6 +52,6 @@ Cflags: -I"${includedir}" @_str_compile_defs@]] endfunction() -create_pkg_config_file(libmapnikwkt "wkt library") -create_pkg_config_file(libmapnikjson "json library") +create_pkg_config_file(wkt libmapnikwkt "wkt library") +create_pkg_config_file(json libmapnikjson "json library") create_pkg_config_file_mapnik("libmapnik" "mapnik library")