diff --git a/srcpkgs/OpenOrienteering-Mapper/patches/accept-transformation-authorities.patch b/srcpkgs/OpenOrienteering-Mapper/patches/accept-transformation-authorities.patch new file mode 100644 index 00000000000..f20b4843694 --- /dev/null +++ b/srcpkgs/OpenOrienteering-Mapper/patches/accept-transformation-authorities.patch @@ -0,0 +1,35 @@ +https://github.com/OpenOrienteering/mapper/pull/2024/commits/40cddb15d316ec90fe1207b737afade7b382457a + +From 40cddb15d316ec90fe1207b737afade7b382457a Mon Sep 17 00:00:00 2001 +From: Scott Turner +Date: Sun, 9 Jan 2022 13:53:09 -0500 +Subject: [PATCH] Georeferencing: Choose transformations without restricting + authority + +When using PROJ to set up a transformation between two CRSes, use +an AUTHORITY=any option to allow all transformations to be considered. +In particular, an ESRI datum transformation between WGS84 and NAD83 +is not available from EPSG, and provides a more accurate result. +--- + src/core/georeferencing.cpp | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/src/core/georeferencing.cpp b/src/core/georeferencing.cpp +index 43b28fec6..57a4d7b74 100644 +--- a/src/core/georeferencing.cpp ++++ b/src/core/georeferencing.cpp +@@ -383,7 +383,14 @@ ProjTransform::ProjTransform(const QString& crs_spec) + // Cf. https://github.com/OSGeo/PROJ/pull/1573 + crs_spec_utf8.replace("+datum=potsdam", "+ellps=bessel +nadgrids=@BETA2007.gsb"); + #endif ++#if defined(ACCEPT_USE_OF_DEPRECATED_PROJ_API_H) || (PROJ_VERSION_MAJOR) < 8 + pj = proj_create_crs_to_crs(PJ_DEFAULT_CTX, geographic_crs_spec_utf8, crs_spec_utf8, nullptr); ++#else ++ static auto const geographic_crs = crs(Georeferencing::geographic_crs_spec); ++ auto const projected_crs = crs(crs_spec); ++ static const char* const options[] = {"AUTHORITY=any", nullptr}; ++ pj = proj_create_crs_to_crs_from_pj(PJ_DEFAULT_CTX, geographic_crs.pj, projected_crs.pj, nullptr, options); ++#endif + if (pj) + operator=({proj_normalize_for_visualization(PJ_DEFAULT_CTX, pj)}); + } diff --git a/srcpkgs/OpenOrienteering-Mapper/patches/fix-proj-cmake.patch b/srcpkgs/OpenOrienteering-Mapper/patches/fix-proj-cmake.patch new file mode 100644 index 00000000000..31311fc3585 --- /dev/null +++ b/srcpkgs/OpenOrienteering-Mapper/patches/fix-proj-cmake.patch @@ -0,0 +1,321 @@ +From 08cc5e4c73175ebf3e9bb2295f718e914366d51b Mon Sep 17 00:00:00 2001 +From: Kai Pastor +Date: Wed, 15 Dec 2021 09:32:10 +0100 +Subject: [PATCH] Find PROJ via cmake config or via pkg-config + +Drop the custom find module for PROJ. Cmake config or pkg-config data +is provided from PROJ's build system. This covers PROJ 4.9 to 8.2, +dynamic and static linkage, including transitive dependencies. +--- + CMakeLists.txt | 23 ++-- + cmake/FindPROJ4.cmake | 152 ------------------------- + doc/licensing/linux-distribution.cmake | 5 +- + packaging/CMakeLists.txt | 25 ++-- + packaging/android/Mapper.pro.in | 2 +- + src/CMakeLists.txt | 2 +- + test/CMakeLists.txt | 2 +- + 7 files changed, 31 insertions(+), 180 deletions(-) + delete mode 100644 cmake/FindPROJ4.cmake + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index da5ad1e7b..e6a6ddeaa 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -203,20 +203,27 @@ endif() + + # We must not require a minimum version of PROJ via find_package + # because PROJ config requires the major version to match exactly. +-find_package(PROJ4 REQUIRED) +-if(NOT TARGET PROJ4::proj) +- include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindPROJ.cmake") ++find_package(PROJ CONFIG) ++if(NOT PROJ_LIBRARIES) ++ find_package(PkgConfig REQUIRED) ++ if(PKG_CONFIG_FOUND) ++ pkg_check_modules(PROJ4_PC IMPORTED_TARGET proj) ++ endif() ++ if(TARGET PkgConfig::PROJ4_PC) ++ set(PROJ_LIBRARIES PkgConfig::PROJ4_PC) ++ set(PROJ_VERSION "${PROJ4_PC_VERSION}") ++ endif() + endif() +-if(NOT PROJ4_VERSION OR PROJ4_VERSION VERSION_LESS 4.9) ++if(NOT PROJ_VERSION OR PROJ_VERSION VERSION_LESS 4.9) + message(FATAL_ERROR "At least PROJ 4.9 is required") +-elseif(PROJ4_VERSION VERSION_LESS 6.1) ++elseif(PROJ_VERSION VERSION_LESS 6.1) + # New PROJ API missing or incomplete. + # (proj_normalize_for_visualization() came in 6.1.) +- set_property(TARGET PROJ4::proj APPEND PROPERTY ++ set_property(TARGET "${PROJ_LIBRARIES}" APPEND PROPERTY + INTERFACE_COMPILE_DEFINITIONS ACCEPT_USE_OF_DEPRECATED_PROJ_API_H) +-elseif(PROJ4_VERSION VERSION_LESS 6.2.1) ++elseif(PROJ_VERSION VERSION_LESS 6.2.1) + # Datum Potsdam issue, https://github.com/OSGeo/PROJ/pull/1573 +- set_property(TARGET PROJ4::proj APPEND PROPERTY ++ set_property(TARGET "${PROJ_LIBRARIES}" APPEND PROPERTY + INTERFACE_COMPILE_DEFINITIONS PROJ_ISSUE_1573) + endif() + +diff --git a/cmake/FindPROJ4.cmake b/cmake/FindPROJ4.cmake +deleted file mode 100644 +index 093deaa79..000000000 +--- a/cmake/FindPROJ4.cmake ++++ /dev/null +@@ -1,152 +0,0 @@ +-#.rst: +-# FindPROJ4 +-# -------- +-# +-# Find the proj includes and library. +-# +-# IMPORTED Targets +-# ^^^^^^^^^^^^^^^^ +-# +-# This module defines :prop_tgt:`IMPORTED` target ``PROJ4::proj``, +-# if Proj.4 has been found. +-# +-# Result Variables +-# ^^^^^^^^^^^^^^^^ +-# +-# This module defines the following variables: +-# +-# :: +-# +-# PROJ4_INCLUDE_DIRS - where to find proj_api.h, etc. +-# PROJ4_LIBRARIES - List of libraries when using libproj. +-# PROJ4_FOUND - True if libproj found. +-# +-# :: +-# +-# PROJ4_VERSION - The version of libproj found (x.y.z) +-# PROJ4_VERSION_MAJOR - The major version of libproj +-# PROJ4_VERSION_MINOR - The minor version of libproj +-# PROJ4_VERSION_PATCH - The patch version of libproj +-# PROJ4_VERSION_TWEAK - always 0 +-# PROJ4_VERSION_COUNT - The number of version components, always 3 +-# +-# Hints +-# ^^^^^ +-# +-# A user may set ``PROJ4_ROOT`` to a libproj installation root to tell this +-# module where to look exclusively. +- +-#============================================================================= +-# Copyright 2016 Kai Pastor +-# +-# +-# This file was derived from CMake 3.5's module FindZLIB.cmake +-# which has the following terms: +-# +-# Copyright 2001-2011 Kitware, Inc. +-# +-# Redistribution and use in source and binary forms, with or without +-# modification, are permitted provided that the following conditions are +-# met: +-# +-# * Redistributions of source code must retain the above copyright notice, +-# this list of conditions and the following disclaimer. +-# +-# * Redistributions in binary form must reproduce the above copyright notice, +-# this list of conditions and the following disclaimer in the documentation +-# and/or other materials provided with the distribution. +-# +-# * The names of Kitware, Inc., the Insight Consortium, or the names of +-# any consortium members, or of any contributors, may not be used to +-# endorse or promote products derived from this software without +-# specific prior written permission. +-# +-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS ``AS IS'' +-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +-# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR +-# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +-# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-#============================================================================= +- +-# Search PROJ4_ROOT exclusively if it is set. +-if(PROJ4_ROOT) +- set(_PROJ4_SEARCH PATHS ${PROJ4_ROOT} NO_DEFAULT_PATH) +-else() +- set(_PROJ4_SEARCH) +-endif() +- +-find_path(PROJ4_INCLUDE_DIR NAMES proj_api.h ${_PROJ4_SEARCH} PATH_SUFFIXES include) +-mark_as_advanced(PROJ4_INCLUDE_DIR) +- +-if(PROJ4_INCLUDE_DIR AND EXISTS "${PROJ4_INCLUDE_DIR}/proj_api.h") +- file(STRINGS "${PROJ4_INCLUDE_DIR}/proj_api.h" PROJ4_H REGEX "^#define PJ_VERSION [0-9]+$") +- +- string(REGEX REPLACE "^.*PJ_VERSION ([0-9]).*$" "\\1" PROJ4_VERSION_MAJOR "${PROJ4_H}") +- string(REGEX REPLACE "^.*PJ_VERSION [0-9]([0-9]).*$" "\\1" PROJ4_VERSION_MINOR "${PROJ4_H}") +- string(REGEX REPLACE "^.*PJ_VERSION [0-9][0-9]([0-9]).*$" "\\1" PROJ4_VERSION_PATCH "${PROJ4_H}") +- set(PROJ4_VERSION "${PROJ4_VERSION_MAJOR}.${PROJ4_VERSION_MINOR}.${PROJ4_VERSION_PATCH}") +- set(PROJ4_VERSION_COUNT 3) +-endif() +- +-# Allow PROJ4_LIBRARY to be set manually, as the location of the proj library +-if(NOT PROJ4_LIBRARY) +- set(PROJ4_NAMES proj) +- set(PROJ4_NAMES_DEBUG projd) +- if(WIN32 AND DEFINED PROJ4_VERSION_MAJOR AND DEFINED PROJ4_VERSION_MINOR) +- list(APPEND PROJ4_NAMES proj_${PROJ4_VERSION_MAJOR}_${PROJ4_VERSION_MINOR}) +- list(APPEND PROJ4_NAMES projd_${PROJ4_VERSION_MAJOR}_${PROJ4_VERSION_MINOR}) +- endif() +- find_library(PROJ4_LIBRARY_RELEASE NAMES ${PROJ4_NAMES} ${_PROJ4_SEARCH} PATH_SUFFIXES lib) +- find_library(PROJ4_LIBRARY_DEBUG NAMES ${PROJ4_NAMES_DEBUG} ${_PROJ4_SEARCH} PATH_SUFFIXES lib) +- include(SelectLibraryConfigurations) +- select_library_configurations(PROJ4) +-endif() +- +-# handle the QUIETLY and REQUIRED arguments and set PROJ4_FOUND to TRUE if +-# all listed variables are TRUE +-include(FindPackageHandleStandardArgs) +-find_package_handle_standard_args(PROJ4 +- REQUIRED_VARS +- PROJ4_LIBRARY +- PROJ4_INCLUDE_DIR +- VERSION_VAR +- PROJ4_VERSION +-) +- +-if(PROJ4_FOUND) +- set(PROJ4_INCLUDE_DIRS ${PROJ4_INCLUDE_DIR}) +- +- if(NOT PROJ4_LIBRARIES) +- set(PROJ4_LIBRARIES ${PROJ4_LIBRARY}) +- endif() +- +- if(NOT TARGET PROJ4::proj) +- add_library(PROJ4::proj UNKNOWN IMPORTED) +- set_target_properties(PROJ4::proj PROPERTIES +- INTERFACE_INCLUDE_DIRECTORIES "${PROJ4_INCLUDE_DIRS}") +- +- if(PROJ4_LIBRARY_RELEASE) +- set_property(TARGET PROJ4::proj APPEND PROPERTY +- IMPORTED_CONFIGURATIONS RELEASE) +- set_target_properties(PROJ4::proj PROPERTIES +- IMPORTED_LOCATION_RELEASE "${PROJ4_LIBRARY_RELEASE}") +- endif() +- +- if(PROJ4_LIBRARY_DEBUG) +- set_property(TARGET PROJ4::proj APPEND PROPERTY +- IMPORTED_CONFIGURATIONS DEBUG) +- set_target_properties(PROJ4::proj PROPERTIES +- IMPORTED_LOCATION_DEBUG "${PROJ4_LIBRARY_DEBUG}") +- endif() +- +- if(NOT PROJ4_LIBRARY_RELEASE AND NOT PROJ4_LIBRARY_DEBUG) +- set_property(TARGET PROJ4::proj APPEND PROPERTY +- IMPORTED_LOCATION "${PROJ4_LIBRARY}") +- endif() +- endif() +-endif() +diff --git a/doc/licensing/linux-distribution.cmake b/doc/licensing/linux-distribution.cmake +index b2bc5d72c..7a1d39f7b 100644 +--- a/doc/licensing/linux-distribution.cmake ++++ b/doc/licensing/linux-distribution.cmake +@@ -106,9 +106,8 @@ foreach(dependency ${easy_dependencies}) + elseif(dependency STREQUAL "libpolyclipping") + find_package(Polyclipping) + list(APPEND explicit_copyright_${dependency} "${POLYCLIPPING_VERSION}") +- elseif(dependency STREQUAL "proj") +- find_package(PROJ4) +- list(APPEND explicit_copyright_${dependency} "${PROJ4_VERSION}") ++ elseif(dependency STREQUAL "proj" AND PROJ_VERSION) ++ list(APPEND explicit_copyright_${dependency} "${PROJ_VERSION}") + elseif(dependency STREQUAL "zlib") + find_package(ZLIB) + list(APPEND explicit_copyright_${dependency} "${ZLIB_VERSION_STRING}") +diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt +index 4a981c681..eabb4bb14 100644 +--- a/packaging/CMakeLists.txt ++++ b/packaging/CMakeLists.txt +@@ -235,25 +235,22 @@ unset(MAPPER_LIBS) + + if(Mapper_PACKAGE_PROJ) + if(NOT PROJ_DATA_DIR) +- unset(PROJ_DATA_DIR CACHE) +- if(PROJ4_ROOT) +- set(proj_data_paths "${PROJ4_ROOT}/share/proj") +- elseif(PROJ4_DIR) ++ if(PROJ_DIR) + # Cf. find_package documentation +- string(REGEX REPLACE "/CMake$|/cmake$" "" proj_data_paths "${PROJ4_DIR}") # U +- string(REGEX REPLACE "/PROJ4[^/]*$|/proj4[^/]*$" "" proj_data_paths "${proj_data_paths}") # U, W +- string(REGEX REPLACE "/cmake$" "" proj_data_paths "${proj_data_paths}") # U +- string(REGEX REPLACE "/lib/[^/]*$|/lib$|/share$" "" proj_data_paths "${proj_data_paths}") # U, W +- set(proj_data_paths "${proj_data_paths}/share/proj") +- elseif(PROJ4_INCLUDE_DIRS) +- string(REGEX REPLACE "/include$" "/share/proj" proj_data_paths ${PROJ4_INCLUDE_DIRS}) # MSYS2 et al. ++ string(REGEX REPLACE "/CMake$|/cmake$" "" proj_prefix "${PROJ_DIR}") # U ++ string(REGEX REPLACE "/PROJ[^/]*$|/proj[^/]*$" "" proj_prefix "${proj_prefix}") # U, W ++ string(REGEX REPLACE "/cmake$" "" proj_prefix "${proj_prefix}") # U ++ string(REGEX REPLACE "/lib/[^/]*$|/lib$|/share$" "" proj_prefix "${proj_prefix}") # U, W ++ elseif(PROJ4_PC_PREFIX) ++ set(proj_prefix "${PROJ4_PC_PREFIX}") + else() +- set(proj_data_paths PATHS "${CMAKE_INSTALL_PREFIX}/share/proj") ++ set(proj_prefix "${CMAKE_INSTALL_PREFIX}") + endif() + find_path(PROJ_DATA_DIR + DOC "The PROJ data files directory" + NAMES epsg proj.db +- PATHS ${proj_data_paths} ++ PATHS ${proj_prefix} ++ PATH_SUFFIXES "share/proj" "share" + NO_DEFAULT_PATH + ) + endif() +@@ -266,7 +263,7 @@ if(Mapper_PACKAGE_PROJ) + install( + DIRECTORY "${PROJ_DATA_DIR}" + DESTINATION "${MAPPER_DATA_DESTINATION}") +- list(APPEND MAPPER_LIB_HINTS ${PROJ4_ROOT}/bin) ++ list(APPEND MAPPER_LIB_HINTS "${proj_prefix}/bin") + endif() + + if(Mapper_PACKAGE_GDAL) +diff --git a/packaging/android/Mapper.pro.in b/packaging/android/Mapper.pro.in +index b3e88ca11..2017e3933 100644 +--- a/packaging/android/Mapper.pro.in ++++ b/packaging/android/Mapper.pro.in +@@ -38,7 +38,7 @@ PROJECT_BINARY_DIR = "@PROJECT_BINARY_DIR@" + # in CPackConfig.cmake when a package version changes. + CPACK_CONFIG_CLEANUP_TRIGGER = \ + GDAL: @GDAL_VERSION@ \ +- PROJ: @PROJ4_VERSION@ \ ++ PROJ: @PROJ_VERSION@ \ + Qt5: @Qt5Core_VERSION@ + + # For the generated .pro file to be used in Qt Creator, +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index a4b7d1454..aff2fa8e4 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -301,7 +301,7 @@ add_dependencies(Mapper_Common + ) + target_link_libraries(Mapper_Common + Polyclipping::Polyclipping +- PROJ4::proj ++ ${PROJ_LIBRARIES} + Qt5::Widgets + ) + foreach(lib +diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt +index 37d5278da..19b2567d9 100644 +--- a/test/CMakeLists.txt ++++ b/test/CMakeLists.txt +@@ -65,7 +65,7 @@ function(add_test_helper testname autorun) + endforeach() + add_executable(${testname} ${testname}.cpp ${TEST_${testname}_SRCS}) + target_link_libraries(${testname} PRIVATE +- PROJ4::proj ++ ${PROJ_LIBRARIES} + Qt5::Test + Qt5::Gui + Polyclipping::Polyclipping diff --git a/srcpkgs/OpenOrienteering-Mapper/template b/srcpkgs/OpenOrienteering-Mapper/template index e725ac02dff..dd2ae82385e 100644 --- a/srcpkgs/OpenOrienteering-Mapper/template +++ b/srcpkgs/OpenOrienteering-Mapper/template @@ -1,7 +1,7 @@ # Template file for 'OpenOrienteering-Mapper' pkgname=OpenOrienteering-Mapper version=0.9.5 -revision=2 +revision=3 build_style=cmake hostmakedepends="doxygen qt5-host-tools qt5-plugin-sqlite qt5-qmake qt5-tools" makedepends="qt5-devel clipper-devel proj-devel zlib-devel libgdal-devel