From a42c02b4de73c826a5a7552fb3ff5925684e319d Mon Sep 17 00:00:00 2001 From: Matthias Kuhn Date: Sun, 17 Sep 2023 08:39:07 +0200 Subject: [PATCH] Use GDAL cmake config and switch to target. Perserve fallback GDAL discovery logic since GDALConfig is quite recent. --- CMakeLists.txt | 6 +- cmake/FindGDAL.cmake | 378 ++++++++++++----------- src/core/CMakeLists.txt | 3 +- src/crssync/CMakeLists.txt | 1 - src/process/CMakeLists.txt | 1 - src/providers/grass/CMakeLists.txt | 17 +- src/providers/mdal/CMakeLists.txt | 5 - src/providers/pdal/CMakeLists.txt | 3 +- src/providers/wms/CMakeLists.txt | 1 - src/server/CMakeLists.txt | 1 - tests/src/3d/sandbox/CMakeLists.txt | 2 - tests/src/providers/grass/CMakeLists.txt | 2 - 12 files changed, 206 insertions(+), 214 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 359434bf5a3..638abd24295 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -360,7 +360,7 @@ if(WITH_CORE) # required find_package(Proj) find_package(GEOS) - find_package(GDAL) + find_package(GDAL REQUIRED) find_package(Expat REQUIRED) find_package(Spatialindex REQUIRED) find_package(LibZip REQUIRED) @@ -403,8 +403,8 @@ if(WITH_CORE) set (HAVE_SPATIALITE TRUE) endif() - if (NOT PROJ_FOUND OR NOT GEOS_FOUND OR NOT GDAL_FOUND) - message (SEND_ERROR "Some dependencies were not found! Proj: ${PROJ_FOUND}, Geos: ${GEOS_FOUND}, GDAL: ${GDAL_FOUND}") + if (NOT PROJ_FOUND OR NOT GEOS_FOUND) + message (SEND_ERROR "Some dependencies were not found! Proj: ${PROJ_FOUND}, Geos: ${GEOS_FOUND}") endif() if (POSTGRES_FOUND) diff --git a/cmake/FindGDAL.cmake b/cmake/FindGDAL.cmake index 56e4c3a7381..5878e218440 100644 --- a/cmake/FindGDAL.cmake +++ b/cmake/FindGDAL.cmake @@ -13,195 +13,201 @@ # # GDAL_INCLUDE_DIR = where to find headers -INCLUDE (${CMAKE_SOURCE_DIR}/cmake/MacPlistMacros.cmake) +find_package(GDAL CONFIG) +if(NOT GDAL_FOUND) + # Fallback logic for GDAL < 3.5, as soon as we switch to GDAL>=3.5 this file (Find_GDAL.cmake) can be deleted + INCLUDE (${CMAKE_SOURCE_DIR}/cmake/MacPlistMacros.cmake) -IF(WIN32) - - IF (MINGW) - FIND_PATH(GDAL_INCLUDE_DIR gdal.h /usr/local/include /usr/include c:/msys/local/include PATH_SUFFIXES gdal) - FIND_LIBRARY(GDAL_LIBRARY NAMES gdal PATHS /usr/local/lib /usr/lib c:/msys/local/lib) - ENDIF (MINGW) - - IF (MSVC) - FIND_PATH(GDAL_INCLUDE_DIR gdal.h "$ENV{LIB_DIR}/include/gdal" $ENV{INCLUDE}) - FIND_LIBRARY(GDAL_LIBRARY NAMES gdal gdal_i PATHS - "$ENV{LIB_DIR}/lib" $ENV{LIB} /usr/lib c:/msys/local/lib) - IF (GDAL_LIBRARY) - SET ( - GDAL_LIBRARY;odbc32;odbccp32 - CACHE STRING INTERNAL) - ENDIF (GDAL_LIBRARY) - ENDIF (MSVC) - -ELSEIF(APPLE AND QGIS_MAC_DEPS_DIR) - - FIND_PATH(GDAL_INCLUDE_DIR gdal.h "$ENV{LIB_DIR}/include") - FIND_LIBRARY(GDAL_LIBRARY NAMES gdal PATHS "$ENV{LIB_DIR}/lib") - -ELSE(WIN32) - - IF(UNIX) - - # try to use framework on mac - # want clean framework path, not unix compatibility path - IF (APPLE) - IF (CMAKE_FIND_FRAMEWORK MATCHES "FIRST" - OR CMAKE_FRAMEWORK_PATH MATCHES "ONLY" - OR NOT CMAKE_FIND_FRAMEWORK) - SET (CMAKE_FIND_FRAMEWORK_save ${CMAKE_FIND_FRAMEWORK} CACHE STRING "" FORCE) - SET (CMAKE_FIND_FRAMEWORK "ONLY" CACHE STRING "" FORCE) - FIND_LIBRARY(GDAL_LIBRARY GDAL) - IF (GDAL_LIBRARY) - # they're all the same in a framework - SET (GDAL_INCLUDE_DIR ${GDAL_LIBRARY}/Headers CACHE PATH "Path to a file.") - # set GDAL_CONFIG to make later test happy, not used here, may not exist - SET (GDAL_CONFIG ${GDAL_LIBRARY}/unix/bin/gdal-config CACHE FILEPATH "Path to a program.") - # version in info.plist - GET_VERSION_PLIST (${GDAL_LIBRARY}/Resources/Info.plist GDAL_VERSION) - IF (NOT GDAL_VERSION) - MESSAGE (FATAL_ERROR "Could not determine GDAL version from framework.") - ENDIF (NOT GDAL_VERSION) + IF(WIN32) + + IF (MINGW) + FIND_PATH(GDAL_INCLUDE_DIR gdal.h /usr/local/include /usr/include c:/msys/local/include PATH_SUFFIXES gdal) + FIND_LIBRARY(GDAL_LIBRARY NAMES gdal PATHS /usr/local/lib /usr/lib c:/msys/local/lib) + ENDIF (MINGW) + + IF (MSVC) + FIND_PATH(GDAL_INCLUDE_DIR gdal.h "$ENV{LIB_DIR}/include/gdal" $ENV{INCLUDE}) + FIND_LIBRARY(GDAL_LIBRARY NAMES gdal gdal_i PATHS + "$ENV{LIB_DIR}/lib" $ENV{LIB} /usr/lib c:/msys/local/lib) + IF (GDAL_LIBRARY) + SET ( + GDAL_LIBRARY;odbc32;odbccp32 + CACHE STRING INTERNAL) + ENDIF (GDAL_LIBRARY) + ENDIF (MSVC) + + ELSEIF(APPLE AND QGIS_MAC_DEPS_DIR) + + FIND_PATH(GDAL_INCLUDE_DIR gdal.h "$ENV{LIB_DIR}/include") + FIND_LIBRARY(GDAL_LIBRARY NAMES gdal PATHS "$ENV{LIB_DIR}/lib") + + ELSE(WIN32) + + IF(UNIX) + + # try to use framework on mac + # want clean framework path, not unix compatibility path + IF (APPLE) + IF (CMAKE_FIND_FRAMEWORK MATCHES "FIRST" + OR CMAKE_FRAMEWORK_PATH MATCHES "ONLY" + OR NOT CMAKE_FIND_FRAMEWORK) + SET (CMAKE_FIND_FRAMEWORK_save ${CMAKE_FIND_FRAMEWORK} CACHE STRING "" FORCE) + SET (CMAKE_FIND_FRAMEWORK "ONLY" CACHE STRING "" FORCE) + FIND_LIBRARY(GDAL_LIBRARY GDAL) + IF (GDAL_LIBRARY) + # they're all the same in a framework + SET (GDAL_INCLUDE_DIR ${GDAL_LIBRARY}/Headers CACHE PATH "Path to a file.") + # set GDAL_CONFIG to make later test happy, not used here, may not exist + SET (GDAL_CONFIG ${GDAL_LIBRARY}/unix/bin/gdal-config CACHE FILEPATH "Path to a program.") + # version in info.plist + GET_VERSION_PLIST (${GDAL_LIBRARY}/Resources/Info.plist GDAL_VERSION) + IF (NOT GDAL_VERSION) + MESSAGE (FATAL_ERROR "Could not determine GDAL version from framework.") + ENDIF (NOT GDAL_VERSION) + STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\1" GDAL_VERSION_MAJOR "${GDAL_VERSION}") + STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\2" GDAL_VERSION_MINOR "${GDAL_VERSION}") + IF (GDAL_VERSION_MAJOR LESS 3) + MESSAGE (FATAL_ERROR "GDAL version is too old (${GDAL_VERSION}). Use 3.2 or higher.") + ENDIF (GDAL_VERSION_MAJOR LESS 3) + IF ( (GDAL_VERSION_MAJOR EQUAL 3) AND (GDAL_VERSION_MINOR LESS 2) ) + MESSAGE (FATAL_ERROR "GDAL version is too old (${GDAL_VERSION}). Use 3.2 or higher.") + ENDIF( (GDAL_VERSION_MAJOR EQUAL 3) AND (GDAL_VERSION_MINOR LESS 2) ) + + ENDIF (GDAL_LIBRARY) + SET (CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK_save} CACHE STRING "" FORCE) + ENDIF () + ENDIF (APPLE) + + IF(CYGWIN) + FIND_LIBRARY(GDAL_LIBRARY NAMES gdal PATHS /usr/lib /usr/local/lib) + ENDIF(CYGWIN) + + IF (NOT GDAL_INCLUDE_DIR OR NOT GDAL_LIBRARY OR NOT GDAL_CONFIG) + # didn't find OS X framework, and was not set by user + SET(GDAL_CONFIG_PREFER_PATH "$ENV{GDAL_HOME}/bin" CACHE STRING "preferred path to GDAL (gdal-config)") + SET(GDAL_CONFIG_PREFER_FWTOOLS_PATH "$ENV{FWTOOLS_HOME}/bin_safe" CACHE STRING "preferred path to GDAL (gdal-config) from FWTools") + FIND_PROGRAM(GDAL_CONFIG gdal-config + ${GDAL_CONFIG_PREFER_PATH} + ${GDAL_CONFIG_PREFER_FWTOOLS_PATH} + $ENV{LIB_DIR}/bin + /usr/local/bin/ + /usr/bin/ + ) + # MESSAGE("DBG GDAL_CONFIG ${GDAL_CONFIG}") + + IF (GDAL_CONFIG) + + ## extract gdal version + EXEC_PROGRAM(${GDAL_CONFIG} + ARGS --version + OUTPUT_VARIABLE GDAL_VERSION ) STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\1" GDAL_VERSION_MAJOR "${GDAL_VERSION}") STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\2" GDAL_VERSION_MINOR "${GDAL_VERSION}") - IF (GDAL_VERSION_MAJOR LESS 3) - MESSAGE (FATAL_ERROR "GDAL version is too old (${GDAL_VERSION}). Use 3.2 or higher.") - ENDIF (GDAL_VERSION_MAJOR LESS 3) - IF ( (GDAL_VERSION_MAJOR EQUAL 3) AND (GDAL_VERSION_MINOR LESS 2) ) - MESSAGE (FATAL_ERROR "GDAL version is too old (${GDAL_VERSION}). Use 3.2 or higher.") - ENDIF( (GDAL_VERSION_MAJOR EQUAL 3) AND (GDAL_VERSION_MINOR LESS 2) ) - - ENDIF (GDAL_LIBRARY) - SET (CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK_save} CACHE STRING "" FORCE) - ENDIF () - ENDIF (APPLE) - - IF(CYGWIN) - FIND_LIBRARY(GDAL_LIBRARY NAMES gdal PATHS /usr/lib /usr/local/lib) - ENDIF(CYGWIN) - - IF (NOT GDAL_INCLUDE_DIR OR NOT GDAL_LIBRARY OR NOT GDAL_CONFIG) - # didn't find OS X framework, and was not set by user - SET(GDAL_CONFIG_PREFER_PATH "$ENV{GDAL_HOME}/bin" CACHE STRING "preferred path to GDAL (gdal-config)") - SET(GDAL_CONFIG_PREFER_FWTOOLS_PATH "$ENV{FWTOOLS_HOME}/bin_safe" CACHE STRING "preferred path to GDAL (gdal-config) from FWTools") - FIND_PROGRAM(GDAL_CONFIG gdal-config - ${GDAL_CONFIG_PREFER_PATH} - ${GDAL_CONFIG_PREFER_FWTOOLS_PATH} - $ENV{LIB_DIR}/bin - /usr/local/bin/ - /usr/bin/ - ) - # MESSAGE("DBG GDAL_CONFIG ${GDAL_CONFIG}") + STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\3" GDAL_VERSION_MICRO "${GDAL_VERSION}") - IF (GDAL_CONFIG) - - ## extract gdal version - EXEC_PROGRAM(${GDAL_CONFIG} - ARGS --version - OUTPUT_VARIABLE GDAL_VERSION ) - STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\1" GDAL_VERSION_MAJOR "${GDAL_VERSION}") - STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\2" GDAL_VERSION_MINOR "${GDAL_VERSION}") - STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\3" GDAL_VERSION_MICRO "${GDAL_VERSION}") + # MESSAGE("DBG GDAL_VERSION ${GDAL_VERSION}") + # MESSAGE("DBG GDAL_VERSION_MAJOR ${GDAL_VERSION_MAJOR}") + # MESSAGE("DBG GDAL_VERSION_MINOR ${GDAL_VERSION_MINOR}") + + # check for gdal version + # version 1.2.5 is known NOT to be supported (missing CPL_STDCALL macro) + # According to INSTALL, 2.1+ is required + IF (GDAL_VERSION_MAJOR LESS 3) + MESSAGE (FATAL_ERROR "GDAL version is too old (${GDAL_VERSION}). Use 3.0 or higher.") + ENDIF (GDAL_VERSION_MAJOR LESS 3) + #IF ( (GDAL_VERSION_MAJOR EQUAL 2) AND (GDAL_VERSION_MINOR LESS 1) ) + # MESSAGE (FATAL_ERROR "GDAL version is too old (${GDAL_VERSION}). Use 2.1 or higher.") + #ENDIF( (GDAL_VERSION_MAJOR EQUAL 2) AND (GDAL_VERSION_MINOR LESS 1) ) + IF ( (GDAL_VERSION_MAJOR EQUAL 3) AND (GDAL_VERSION_MINOR EQUAL 0) AND (GDAL_VERSION_MICRO LESS 3) ) + MESSAGE (FATAL_ERROR "GDAL version is too old (${GDAL_VERSION}). Use 3.0.3 or higher.") + ENDIF( (GDAL_VERSION_MAJOR EQUAL 3) AND (GDAL_VERSION_MINOR EQUAL 0) AND (GDAL_VERSION_MICRO LESS 3) ) - # MESSAGE("DBG GDAL_VERSION ${GDAL_VERSION}") - # MESSAGE("DBG GDAL_VERSION_MAJOR ${GDAL_VERSION_MAJOR}") - # MESSAGE("DBG GDAL_VERSION_MINOR ${GDAL_VERSION_MINOR}") + # set INCLUDE_DIR to prefix+include + EXEC_PROGRAM(${GDAL_CONFIG} + ARGS --prefix + OUTPUT_VARIABLE GDAL_PREFIX) + #SET(GDAL_INCLUDE_DIR ${GDAL_PREFIX}/include CACHE STRING INTERNAL) + FIND_PATH(GDAL_INCLUDE_DIR + gdal.h + ${GDAL_PREFIX}/include/gdal + ${GDAL_PREFIX}/include + /usr/local/include + /usr/include + ) - # check for gdal version - # version 1.2.5 is known NOT to be supported (missing CPL_STDCALL macro) - # According to INSTALL, 2.1+ is required - IF (GDAL_VERSION_MAJOR LESS 3) - MESSAGE (FATAL_ERROR "GDAL version is too old (${GDAL_VERSION}). Use 3.0 or higher.") - ENDIF (GDAL_VERSION_MAJOR LESS 3) - #IF ( (GDAL_VERSION_MAJOR EQUAL 2) AND (GDAL_VERSION_MINOR LESS 1) ) - # MESSAGE (FATAL_ERROR "GDAL version is too old (${GDAL_VERSION}). Use 2.1 or higher.") - #ENDIF( (GDAL_VERSION_MAJOR EQUAL 2) AND (GDAL_VERSION_MINOR LESS 1) ) - IF ( (GDAL_VERSION_MAJOR EQUAL 3) AND (GDAL_VERSION_MINOR EQUAL 0) AND (GDAL_VERSION_MICRO LESS 3) ) - MESSAGE (FATAL_ERROR "GDAL version is too old (${GDAL_VERSION}). Use 3.0.3 or higher.") - ENDIF( (GDAL_VERSION_MAJOR EQUAL 3) AND (GDAL_VERSION_MINOR EQUAL 0) AND (GDAL_VERSION_MICRO LESS 3) ) - - # set INCLUDE_DIR to prefix+include - EXEC_PROGRAM(${GDAL_CONFIG} - ARGS --prefix - OUTPUT_VARIABLE GDAL_PREFIX) - #SET(GDAL_INCLUDE_DIR ${GDAL_PREFIX}/include CACHE STRING INTERNAL) - FIND_PATH(GDAL_INCLUDE_DIR - gdal.h - ${GDAL_PREFIX}/include/gdal - ${GDAL_PREFIX}/include - /usr/local/include - /usr/include - ) - - ## extract link dirs for rpath - EXEC_PROGRAM(${GDAL_CONFIG} - ARGS --libs - OUTPUT_VARIABLE GDAL_CONFIG_LIBS ) - - ## split off the link dirs (for rpath) - ## use regular expression to match wildcard equivalent "-L*" - ## with is a space or a semicolon - STRING(REGEX MATCHALL "[-][L]([^ ;])+" - GDAL_LINK_DIRECTORIES_WITH_PREFIX - "${GDAL_CONFIG_LIBS}" ) - # MESSAGE("DBG GDAL_LINK_DIRECTORIES_WITH_PREFIX=${GDAL_LINK_DIRECTORIES_WITH_PREFIX}") - - ## remove prefix -L because we need the pure directory for LINK_DIRECTORIES - - IF (GDAL_LINK_DIRECTORIES_WITH_PREFIX) - STRING(REGEX REPLACE "[-][L]" "" GDAL_LINK_DIRECTORIES ${GDAL_LINK_DIRECTORIES_WITH_PREFIX} ) - ENDIF (GDAL_LINK_DIRECTORIES_WITH_PREFIX) - - ## split off the name - ## use regular expression to match wildcard equivalent "-l*" - ## with is a space or a semicolon - STRING(REGEX MATCHALL "[-][l]([^ ;])+" - GDAL_LIB_NAME_WITH_PREFIX - "${GDAL_CONFIG_LIBS}" ) - # MESSAGE("DBG GDAL_LIB_NAME_WITH_PREFIX=${GDAL_LIB_NAME_WITH_PREFIX}") - - - ## remove prefix -l because we need the pure name - - IF (GDAL_LIB_NAME_WITH_PREFIX) - STRING(REGEX REPLACE "[-][l]" "" GDAL_LIB_NAME ${GDAL_LIB_NAME_WITH_PREFIX} ) - ENDIF (GDAL_LIB_NAME_WITH_PREFIX) - - IF (APPLE) - IF (NOT GDAL_LIBRARY) - # work around empty GDAL_LIBRARY left by framework check - # while still preserving user setting if given - # ***FIXME*** need to improve framework check so below not needed - SET(GDAL_LIBRARY ${GDAL_LINK_DIRECTORIES}/lib${GDAL_LIB_NAME}.dylib CACHE STRING INTERNAL FORCE) - ENDIF (NOT GDAL_LIBRARY) - ELSE (APPLE) - FIND_LIBRARY(GDAL_LIBRARY NAMES ${GDAL_LIB_NAME} gdal PATHS ${GDAL_LINK_DIRECTORIES}/lib ${GDAL_LINK_DIRECTORIES}) - ENDIF (APPLE) - - ELSE(GDAL_CONFIG) - MESSAGE("FindGDAL.cmake: gdal-config not found. Please set it manually. GDAL_CONFIG=${GDAL_CONFIG}") - ENDIF(GDAL_CONFIG) - ENDIF (NOT GDAL_INCLUDE_DIR OR NOT GDAL_LIBRARY OR NOT GDAL_CONFIG) - ENDIF(UNIX) -ENDIF(WIN32) - - -IF (GDAL_INCLUDE_DIR AND GDAL_LIBRARY) - SET(GDAL_FOUND TRUE) -ENDIF (GDAL_INCLUDE_DIR AND GDAL_LIBRARY) - -IF (GDAL_FOUND) - - IF (NOT GDAL_FIND_QUIETLY) - FILE(READ ${GDAL_INCLUDE_DIR}/gdal_version.h gdal_version) - STRING(REGEX REPLACE "^.*GDAL_RELEASE_NAME +\"([^\"]+)\".*$" "\\1" GDAL_RELEASE_NAME "${gdal_version}") - - MESSAGE(STATUS "Found GDAL: ${GDAL_LIBRARY} (${GDAL_RELEASE_NAME})") - ENDIF (NOT GDAL_FIND_QUIETLY) - -ELSE (GDAL_FOUND) - - MESSAGE(GDAL_INCLUDE_DIR=${GDAL_INCLUDE_DIR}) - MESSAGE(GDAL_LIBRARY=${GDAL_LIBRARY}) - MESSAGE(FATAL_ERROR "Could not find GDAL") - -ENDIF (GDAL_FOUND) + ## extract link dirs for rpath + EXEC_PROGRAM(${GDAL_CONFIG} + ARGS --libs + OUTPUT_VARIABLE GDAL_CONFIG_LIBS ) + + ## split off the link dirs (for rpath) + ## use regular expression to match wildcard equivalent "-L*" + ## with is a space or a semicolon + STRING(REGEX MATCHALL "[-][L]([^ ;])+" + GDAL_LINK_DIRECTORIES_WITH_PREFIX + "${GDAL_CONFIG_LIBS}" ) + # MESSAGE("DBG GDAL_LINK_DIRECTORIES_WITH_PREFIX=${GDAL_LINK_DIRECTORIES_WITH_PREFIX}") + + ## remove prefix -L because we need the pure directory for LINK_DIRECTORIES + + IF (GDAL_LINK_DIRECTORIES_WITH_PREFIX) + STRING(REGEX REPLACE "[-][L]" "" GDAL_LINK_DIRECTORIES ${GDAL_LINK_DIRECTORIES_WITH_PREFIX} ) + ENDIF (GDAL_LINK_DIRECTORIES_WITH_PREFIX) + + ## split off the name + ## use regular expression to match wildcard equivalent "-l*" + ## with is a space or a semicolon + STRING(REGEX MATCHALL "[-][l]([^ ;])+" + GDAL_LIB_NAME_WITH_PREFIX + "${GDAL_CONFIG_LIBS}" ) + # MESSAGE("DBG GDAL_LIB_NAME_WITH_PREFIX=${GDAL_LIB_NAME_WITH_PREFIX}") + + + ## remove prefix -l because we need the pure name + + IF (GDAL_LIB_NAME_WITH_PREFIX) + STRING(REGEX REPLACE "[-][l]" "" GDAL_LIB_NAME ${GDAL_LIB_NAME_WITH_PREFIX} ) + ENDIF (GDAL_LIB_NAME_WITH_PREFIX) + + IF (APPLE) + IF (NOT GDAL_LIBRARY) + # work around empty GDAL_LIBRARY left by framework check + # while still preserving user setting if given + # ***FIXME*** need to improve framework check so below not needed + SET(GDAL_LIBRARY ${GDAL_LINK_DIRECTORIES}/lib${GDAL_LIB_NAME}.dylib CACHE STRING INTERNAL FORCE) + ENDIF (NOT GDAL_LIBRARY) + ELSE (APPLE) + FIND_LIBRARY(GDAL_LIBRARY NAMES ${GDAL_LIB_NAME} gdal PATHS ${GDAL_LINK_DIRECTORIES}/lib ${GDAL_LINK_DIRECTORIES}) + ENDIF (APPLE) + + ELSE(GDAL_CONFIG) + MESSAGE("FindGDAL.cmake: gdal-config not found. Please set it manually. GDAL_CONFIG=${GDAL_CONFIG}") + ENDIF(GDAL_CONFIG) + ENDIF (NOT GDAL_INCLUDE_DIR OR NOT GDAL_LIBRARY OR NOT GDAL_CONFIG) + ENDIF(UNIX) + ENDIF(WIN32) + + + IF (GDAL_INCLUDE_DIR AND GDAL_LIBRARY) + SET(GDAL_FOUND TRUE) + ENDIF (GDAL_INCLUDE_DIR AND GDAL_LIBRARY) + + IF (GDAL_FOUND) + IF (NOT GDAL_FIND_QUIETLY) + FILE(READ ${GDAL_INCLUDE_DIR}/gdal_version.h gdal_version) + STRING(REGEX REPLACE "^.*GDAL_RELEASE_NAME +\"([^\"]+)\".*$" "\\1" GDAL_RELEASE_NAME "${gdal_version}") + + MESSAGE(STATUS "Found GDAL: ${GDAL_LIBRARY} (${GDAL_RELEASE_NAME})") + ENDIF (NOT GDAL_FIND_QUIETLY) + add_library(GDAL::GDAL UNKNOWN IMPORTED) + target_link_libraries(GDAL::GDAL INTERFACE ${GDAL_LIBRARY}) + target_include_directories(GDAL::GDAL INTERFACE ${GDAL_INCLUDE_DIR}) + set_target_properties(GDAL::GDAL PROPERTIES IMPORTED_LOCATION ${GDAL_LIBRARY}) + ELSE (GDAL_FOUND) + + MESSAGE(GDAL_INCLUDE_DIR=${GDAL_INCLUDE_DIR}) + MESSAGE(GDAL_LIBRARY=${GDAL_LIBRARY}) + MESSAGE(FATAL_ERROR "Could not find GDAL") + + ENDIF (GDAL_FOUND) +endif() diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 79fb3e24394..6f5c2ee77b0 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -2248,7 +2248,6 @@ target_include_directories(qgis_core SYSTEM PUBLIC ${${QT_VERSION_BASE}Sql_INCLUDE_DIRS} ${${QT_VERSION_BASE}Concurrent_INCLUDE_DIRS} ${PROJ_INCLUDE_DIR} - ${GDAL_INCLUDE_DIR} ${LIBZIP_INCLUDE_DIRS} ${SPATIALINDEX_INCLUDE_DIR} # before GEOS for case-insensitive filesystems ${GEOS_INCLUDE_DIR} @@ -2419,7 +2418,7 @@ target_link_libraries(qgis_core ${QTKEYCHAIN_LIBRARY} ${PROJ_LIBRARY} ${GEOS_LIBRARY} - ${GDAL_LIBRARY} + GDAL::GDAL ${SPATIALINDEX_LIBRARY} ${EXPAT_LIBRARY} ${SQLITE3_LIBRARY} diff --git a/src/crssync/CMakeLists.txt b/src/crssync/CMakeLists.txt index 94d2fc9d7c4..3ff013abb80 100644 --- a/src/crssync/CMakeLists.txt +++ b/src/crssync/CMakeLists.txt @@ -11,7 +11,6 @@ else () target_link_libraries(crssync qgis_core ${PROJ_LIBRARY} - ${GDAL_LIBRARY} ) if(MSVC AND NOT USING_NMAKE) diff --git a/src/process/CMakeLists.txt b/src/process/CMakeLists.txt index c4691d84317..01ab9bf9e83 100644 --- a/src/process/CMakeLists.txt +++ b/src/process/CMakeLists.txt @@ -44,7 +44,6 @@ target_link_libraries(qgis_process ${QT_VERSION_BASE}::Core ${PROJ_LIBRARY} ${GEOS_LIBRARY} - ${GDAL_LIBRARY} ) if (WITH_3D) diff --git a/src/providers/grass/CMakeLists.txt b/src/providers/grass/CMakeLists.txt index d4902fcf0a8..5234605f989 100644 --- a/src/providers/grass/CMakeLists.txt +++ b/src/providers/grass/CMakeLists.txt @@ -8,7 +8,6 @@ include_directories( ${CMAKE_CURRENT_BINARY_DIR} ) include_directories (SYSTEM - ${GDAL_INCLUDE_DIR} ${PROJ_INCLUDE_DIR} ${GEOS_INCLUDE_DIR} ${POSTGRES_INCLUDE_DIR} @@ -128,6 +127,7 @@ macro(ADD_GRASSLIB GRASS_BUILD_VERSION) ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_dbmibase} ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_dbmiclient} ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_gproj} + GDAL::GDAL ) else() set(GRASS_TARGET_LINK_LIBRARIES${GRASS_BUILD_VERSION} @@ -139,6 +139,7 @@ macro(ADD_GRASSLIB GRASS_BUILD_VERSION) ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_dbmibase} ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_dbmiclient} ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_gproj} + GDAL::GDAL ) endif() @@ -214,14 +215,14 @@ macro(ADD_GRASSLIB GRASS_BUILD_VERSION) target_link_libraries(qgis.d.rast${GRASS_BUILD_VERSION} ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_gis} ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_datetime} - ${GDAL_LIBRARY} + GDAL::GDAL ) else() target_link_libraries(qgis.d.rast${GRASS_BUILD_VERSION} ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_gis} ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_datetime} ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_raster} - ${GDAL_LIBRARY} + GDAL::GDAL ) endif() @@ -234,7 +235,7 @@ macro(ADD_GRASSLIB GRASS_BUILD_VERSION) ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_gis} ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_datetime} ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_gproj} - ${GDAL_LIBRARY} + GDAL::GDAL ) else() target_link_libraries(qgis.g.info${GRASS_BUILD_VERSION} @@ -242,7 +243,7 @@ macro(ADD_GRASSLIB GRASS_BUILD_VERSION) ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_datetime} ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_gproj} ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_raster} - ${GDAL_LIBRARY} + GDAL::GDAL ) endif() if (UNIX) @@ -261,7 +262,7 @@ macro(ADD_GRASSLIB GRASS_BUILD_VERSION) qgisgrass${GRASS_BUILD_VERSION} ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_gis} ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_datetime} - ${GDAL_LIBRARY} + GDAL::GDAL qgis_core ) else() @@ -270,7 +271,7 @@ macro(ADD_GRASSLIB GRASS_BUILD_VERSION) ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_gis} ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_datetime} ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_raster} - ${GDAL_LIBRARY} + GDAL::GDAL qgis_core ) endif() @@ -289,7 +290,7 @@ macro(ADD_GRASSLIB GRASS_BUILD_VERSION) ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_vect} ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_dbmibase} ${GRASS_LIBRARY${GRASS_BUILD_VERSION}_dbmiclient} - ${GDAL_LIBRARY} + GDAL::GDAL qgis_core ) diff --git a/src/providers/mdal/CMakeLists.txt b/src/providers/mdal/CMakeLists.txt index 77828ef2623..ad87a66d8c3 100644 --- a/src/providers/mdal/CMakeLists.txt +++ b/src/providers/mdal/CMakeLists.txt @@ -208,11 +208,6 @@ if (HDF5_FOUND) target_compile_definitions(provider_mdal PRIVATE ${HDF5_DEFINITIONS}) endif() -if (GDAL_FOUND) - target_include_directories(provider_mdal PRIVATE ${GDAL_INCLUDE_DIR}) - target_link_libraries(provider_mdal ${GDAL_LIBRARY} ) -endif() - if (NETCDF_FOUND) target_include_directories(provider_mdal PRIVATE ${NETCDF_INCLUDE_DIR}) target_link_libraries(provider_mdal ${NETCDF_LIBRARY} ) diff --git a/src/providers/pdal/CMakeLists.txt b/src/providers/pdal/CMakeLists.txt index 257511d748b..38509d1c235 100644 --- a/src/providers/pdal/CMakeLists.txt +++ b/src/providers/pdal/CMakeLists.txt @@ -183,13 +183,12 @@ if (PDAL_2_5_OR_HIGHER) target_include_directories(pdal_wrench PRIVATE ${PDAL_INCLUDE_DIR} - ${GDAL_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/external ) target_link_libraries (pdal_wrench PRIVATE ${PDAL_LIBRARIES} - ${GDAL_LIBRARY} + GDAL::GDAL Threads::Threads ) diff --git a/src/providers/wms/CMakeLists.txt b/src/providers/wms/CMakeLists.txt index 73f442236e5..267ab85b486 100644 --- a/src/providers/wms/CMakeLists.txt +++ b/src/providers/wms/CMakeLists.txt @@ -80,7 +80,6 @@ else() target_link_libraries(provider_wms qgis_core - ${GDAL_LIBRARY} # for OGR_G_CreateGeometryFromJson() ) if (WITH_GUI) diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt index be5855c56d0..644dae45321 100644 --- a/src/server/CMakeLists.txt +++ b/src/server/CMakeLists.txt @@ -116,7 +116,6 @@ target_link_libraries(qgis_server ${PROJ_LIBRARY} ${FCGI_LIBRARY} ${POSTGRES_LIBRARY} - ${GDAL_LIBRARY} ${QCA_LIBRARY} ) diff --git a/tests/src/3d/sandbox/CMakeLists.txt b/tests/src/3d/sandbox/CMakeLists.txt index 72afff6cdb5..af0fef2280b 100644 --- a/tests/src/3d/sandbox/CMakeLists.txt +++ b/tests/src/3d/sandbox/CMakeLists.txt @@ -18,7 +18,6 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR} include_directories(SYSTEM ${QT_INCLUDE_DIR} - ${GDAL_INCLUDE_DIR} ${QT5_3DEXTRA_INCLUDE_DIR} ) @@ -37,7 +36,6 @@ target_link_libraries(qgis_3d_sandbox ${QT_VERSION_BASE}::Test ${PROJ_LIBRARY} ${GEOS_LIBRARY} - ${GDAL_LIBRARY} ${QWT_LIBRARY} qgis_core qgis_3d diff --git a/tests/src/providers/grass/CMakeLists.txt b/tests/src/providers/grass/CMakeLists.txt index 7546f3c8c42..1d321891b96 100644 --- a/tests/src/providers/grass/CMakeLists.txt +++ b/tests/src/providers/grass/CMakeLists.txt @@ -3,7 +3,6 @@ include_directories( ) include_directories(BEFORE SYSTEM ${PROJ_INCLUDE_DIR} - ${GDAL_INCLUDE_DIR} ) include_directories(SYSTEM ${POSTGRES_INCLUDE_DIR} @@ -31,7 +30,6 @@ macro (ADD_QGIS_GRASS_TEST grass_build_version testname testsrc) ${QT_VERSION_BASE}::Test ${PROJ_LIBRARY} ${GEOS_LIBRARY} - ${GDAL_LIBRARY} qgis_core qgis_test qgisgrass${grass_build_version}