aports/testing/qgis/40-pdal.patch
2023-10-26 06:50:23 +00:00

177 lines
6.2 KiB
Diff

From 021f919f241806be566dce0a37ce84a56774eb84 Mon Sep 17 00:00:00 2001
From: Nicklas Larsson <n_larsson@yahoo.com>
Date: Tue, 17 Oct 2023 12:47:14 +0200
Subject: [PATCH] cmake: update to find PDAL 2.6+
With PDAL 2.6 the 'pdal_util' library is removed as a separate library
and hence part of the 'pdalcpp' library.
---
cmake/FindPDAL.cmake | 35 ++++++++++++++++++++++++++-----
cmake_templates/qgsconfig.h.in | 2 +-
python/CMakeLists.txt | 4 ----
src/app/CMakeLists.txt | 7 ++-----
src/core/CMakeLists.txt | 9 ++------
src/gui/CMakeLists.txt | 7 ++-----
src/providers/pdal/CMakeLists.txt | 5 -----
tests/src/core/CMakeLists.txt | 4 ----
8 files changed, 37 insertions(+), 36 deletions(-)
diff --git a/cmake/FindPDAL.cmake b/cmake/FindPDAL.cmake
index 1899d26de5ff..d1de5c8dccba 100644
--- a/cmake/FindPDAL.cmake
+++ b/cmake/FindPDAL.cmake
@@ -7,8 +7,7 @@
# CMake module to search for PDAL library
#
# If it's found it sets PDAL_FOUND to TRUE
-# and following variables are set:
-# PDAL_INCLUDE_DIR
+# and adds the following variable containing library target(s):
# PDAL_LIBRARIES
# FIND_PATH and FIND_LIBRARY normally search standard locations
@@ -18,6 +17,22 @@
# locations. When an earlier FIND_* succeeds, subsequent FIND_*s
# searching for the same item do nothing.
+find_package(PDAL CONFIG)
+
+if(PDAL_FOUND)
+ if(NOT PDAL_FIND_QUIETLY)
+ message(STATUS "Found PDAL: ${PDAL_LIBRARIES} (${PDAL_VERSION})")
+ endif()
+
+ if(PDAL_VERSION VERSION_LESS "1.7.0")
+ message(FATAL_ERROR "PDAL version is too old (${PDAL_VERSION}). Use 1.7 or higher.")
+ endif()
+
+ return()
+endif()
+
+# Fallback for systems where PDAL's config-file package is not present.
+# It is not adapted for PDAL 2.6+ (where pdal_util library is removed).
FIND_PATH(PDAL_INCLUDE_DIR pdal/pdal.hpp
"$ENV{LIB_DIR}/include"
"/usr/include"
@@ -50,7 +65,7 @@ FIND_PROGRAM(PDAL_BIN pdal)
IF (PDAL_INCLUDE_DIR AND PDAL_CPP_LIBRARY AND PDAL_UTIL_LIBRARY AND PDAL_BIN)
SET(PDAL_FOUND TRUE)
- SET(PDAL_LIBRARIES ${PDAL_CPP_LIBRARY} ${PDAL_UTIL_LIBRARY})
+ SET(PDAL_LIBRARIES pdalcpp pdal_util)
ENDIF (PDAL_INCLUDE_DIR AND PDAL_CPP_LIBRARY AND PDAL_UTIL_LIBRARY AND PDAL_BIN)
IF (PDAL_FOUND)
@@ -60,8 +75,8 @@ IF (PDAL_FOUND)
OUTPUT_VARIABLE PDAL_VERSION_OUT )
STRING(REGEX REPLACE "^.*([0-9]+)\\.([0-9]+)\\.([0-9]+).*$" "\\1" PDAL_VERSION_MAJOR "${PDAL_VERSION_OUT}")
STRING(REGEX REPLACE "^.*([0-9]+)\\.([0-9]+)\\.([0-9]+).*$" "\\2" PDAL_VERSION_MINOR "${PDAL_VERSION_OUT}")
- STRING(REGEX REPLACE "^.*([0-9]+)\\.([0-9]+)\\.([0-9]+).*$" "\\3" PDAL_VERSION_MICRO "${PDAL_VERSION_OUT}")
- STRING(CONCAT PDAL_VERSION ${PDAL_VERSION_MAJOR} "." ${PDAL_VERSION_MINOR} "." ${PDAL_VERSION_MICRO})
+ STRING(REGEX REPLACE "^.*([0-9]+)\\.([0-9]+)\\.([0-9]+).*$" "\\3" PDAL_VERSION_PATCH "${PDAL_VERSION_OUT}")
+ STRING(CONCAT PDAL_VERSION ${PDAL_VERSION_MAJOR} "." ${PDAL_VERSION_MINOR} "." ${PDAL_VERSION_PATCH})
IF (NOT PDAL_FIND_QUIETLY)
MESSAGE(STATUS "Found PDAL: ${PDAL_LIBRARIES} (${PDAL_VERSION})")
@@ -71,6 +86,16 @@ IF (PDAL_FOUND)
MESSAGE (FATAL_ERROR "PDAL version is too old (${PDAL_VERSION}). Use 1.7 or higher.")
ENDIF()
+ add_library(pdalcpp UNKNOWN IMPORTED)
+ target_link_libraries(pdalcpp INTERFACE ${PDAL_CPP_LIBRARY})
+ target_include_directories(pdalcpp INTERFACE ${PDAL_INCLUDE_DIR})
+ set_target_properties(pdalcpp PROPERTIES IMPORTED_LOCATION ${PDAL_CPP_LIBRARY})
+
+ add_library(pdal_util UNKNOWN IMPORTED)
+ target_link_libraries(pdal_util INTERFACE ${PDAL_UTIL_LIBRARY})
+ target_include_directories(pdal_util INTERFACE ${PDAL_INCLUDE_DIR})
+ set_target_properties(pdal_util PROPERTIES IMPORTED_LOCATION ${PDAL_UTIL_LIBRARY})
+
ELSE (PDAL_FOUND)
IF (PDAL_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "Could not find PDAL")
diff --git a/cmake_templates/qgsconfig.h.in b/cmake_templates/qgsconfig.h.in
index 628a9c9b6aa1..800e65d3cfda 100644
--- a/cmake_templates/qgsconfig.h.in
+++ b/cmake_templates/qgsconfig.h.in
@@ -110,7 +110,7 @@
#define PDAL_VERSION_MINOR_INT ${PDAL_VERSION_MINOR}
#define PDAL_VERSION_MAJOR "${PDAL_VERSION_MAJOR}"
#define PDAL_VERSION_MINOR "${PDAL_VERSION_MINOR}"
-#define PDAL_VERSION_MICRO "${PDAL_VERSION_MICRO}"
+#define PDAL_VERSION_MICRO "${PDAL_VERSION_PATCH}"
#cmakedefine HAVE_DRACO
diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt
index 64f2cfd10355..71c26df216df 100644
--- a/src/app/CMakeLists.txt
+++ b/src/app/CMakeLists.txt
@@ -482,11 +482,8 @@ if(HAVE_OPENCL)
include_directories(SYSTEM ${OpenCL_INCLUDE_DIRS})
endif()
-if (WITH_PDAL)
- include_directories(SYSTEM ${PDAL_INCLUDE_DIR})
- if(MSVC)
- add_definitions(-DWIN32_LEAN_AND_MEAN)
- endif()
+if (WITH_PDAL AND MSVC)
+ add_definitions(-DWIN32_LEAN_AND_MEAN)
endif()
if(ENABLE_MODELTEST)
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 869428249e98..1f891d96e7a7 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -2093,13 +2093,8 @@ if (${QT_VERSION_BASE}Positioning_FOUND)
)
endif()
-if (WITH_PDAL)
- include_directories(SYSTEM
- ${PDAL_INCLUDE_DIR}
- )
- if(MSVC)
- add_definitions(-DWIN32_LEAN_AND_MEAN)
- endif()
+if (WITH_PDAL AND MSVC)
+ add_definitions(-DWIN32_LEAN_AND_MEAN)
endif()
if (HAVE_OPENCL)
diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt
index 016da19d4b83..708858399e0e 100644
--- a/src/gui/CMakeLists.txt
+++ b/src/gui/CMakeLists.txt
@@ -1599,11 +1599,8 @@ if (BUILD_WITH_QT6)
)
endif()
-if (WITH_PDAL)
- include_directories(SYSTEM ${PDAL_INCLUDE_DIR})
- if(MSVC)
- add_definitions(-DWIN32_LEAN_AND_MEAN)
- endif()
+if (WITH_PDAL AND MSVC)
+ add_definitions(-DWIN32_LEAN_AND_MEAN)
endif()
target_include_directories(qgis_gui PUBLIC
diff --git a/src/providers/pdal/CMakeLists.txt b/src/providers/pdal/CMakeLists.txt
index 38509d1c235b..e8ea264e5597 100644
--- a/src/providers/pdal/CMakeLists.txt
+++ b/src/providers/pdal/CMakeLists.txt
@@ -149,10 +149,6 @@ include_directories(
${CMAKE_SOURCE_DIR}/external/untwine/api
)
-include_directories(SYSTEM
- ${PDAL_INCLUDE_DIR}
-)
-
add_executable(untwine ${UNTWINE_SRCS} ${UNTWINE_HDRS})
target_compile_features(untwine PRIVATE cxx_std_17)