summaryrefslogtreecommitdiffstats
path: root/Modules/FindGDAL.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/FindGDAL.cmake')
-rw-r--r--Modules/FindGDAL.cmake64
1 files changed, 49 insertions, 15 deletions
diff --git a/Modules/FindGDAL.cmake b/Modules/FindGDAL.cmake
index fde84d4..5237e15 100644
--- a/Modules/FindGDAL.cmake
+++ b/Modules/FindGDAL.cmake
@@ -10,6 +10,8 @@ Find Geospatial Data Abstraction Library (GDAL).
IMPORTED Targets
^^^^^^^^^^^^^^^^
+.. versionadded:: 3.14
+
This module defines :prop_tgt:`IMPORTED` target ``GDAL::GDAL``
if GDAL has been found.
@@ -25,7 +27,8 @@ This module will set the following variables in your project:
``GDAL_LIBRARIES``
Libraries to link to GDAL.
``GDAL_VERSION``
- The version of GDAL found.
+ .. versionadded:: 3.14
+ The version of GDAL found.
Cache variables
^^^^^^^^^^^^^^^
@@ -42,6 +45,15 @@ Hints
Set ``GDAL_DIR`` or ``GDAL_ROOT`` in the environment to specify the
GDAL installation prefix.
+
+The following variables may be set to modify the search strategy:
+
+``FindGDAL_SKIP_GDAL_CONFIG``
+ If set, ``gdal-config`` will not be used. This can be useful if there are
+ GDAL libraries built with autotools (which provide the tool) and CMake (which
+ do not) in the same environment.
+``GDAL_ADDITIONAL_LIBRARY_VERSIONS``
+ Extra versions of library names to search for.
#]=======================================================================]
# $GDALDIR is an environment variable that would
@@ -65,12 +77,14 @@ find_path(GDAL_INCLUDE_DIR gdal.h
ENV GDAL_DIR
ENV GDAL_ROOT
PATH_SUFFIXES
- include/gdal
- include/GDAL
- include
+ include/gdal
+ include/GDAL
+ include
+ DOC "Path to the GDAL include directory"
)
+mark_as_advanced(GDAL_INCLUDE_DIR)
-if(UNIX)
+if(UNIX AND NOT FindGDAL_SKIP_GDAL_CONFIG)
# Use gdal-config to obtain the library version (this should hopefully
# allow us to -lgdal1.x.y where x.y are correct version)
# For some reason, libgdal development packages do not contain
@@ -80,10 +94,12 @@ if(UNIX)
ENV GDAL_DIR
ENV GDAL_ROOT
PATH_SUFFIXES bin
+ DOC "Path to the gdal-config tool"
)
+ mark_as_advanced(GDAL_CONFIG)
if(GDAL_CONFIG)
- exec_program(${GDAL_CONFIG} ARGS --libs OUTPUT_VARIABLE GDAL_CONFIG_LIBS)
+ execute_process(COMMAND ${GDAL_CONFIG} --libs OUTPUT_VARIABLE GDAL_CONFIG_LIBS)
if(GDAL_CONFIG_LIBS)
# treat the output as a command line and split it up
@@ -131,14 +147,30 @@ if(UNIX)
endif()
endif()
+# GDAL name its library when built with CMake as `gdal${major}${minor}`.
+set(_gdal_versions
+ ${GDAL_ADDITIONAL_LIBRARY_VERSIONS} 3.0 2.4 2.3 2.2 2.1 2.0 1.11 1.10 1.9 1.8 1.7 1.6 1.5 1.4 1.3 1.2)
+
+set(_gdal_libnames)
+foreach (_gdal_version IN LISTS _gdal_versions)
+ string(REPLACE "." "" _gdal_version "${_gdal_version}")
+ list(APPEND _gdal_libnames "gdal${_gdal_version}" "GDAL${_gdal_version}")
+endforeach ()
+unset(_gdal_version)
+unset(_gdal_versions)
+
find_library(GDAL_LIBRARY
- NAMES ${_gdal_lib} gdal gdal_i gdal1.5.0 gdal1.4.0 gdal1.3.2 GDAL
+ NAMES ${_gdal_lib} ${_gdal_libnames} gdal gdal_i gdal1.5.0 gdal1.4.0 gdal1.3.2 GDAL
HINTS
ENV GDAL_DIR
ENV GDAL_ROOT
${_gdal_libpath}
PATH_SUFFIXES lib
+ DOC "Path to the GDAL library"
)
+mark_as_advanced(GDAL_LIBRARY)
+unset(_gdal_libnames)
+unset(_gdal_lib)
if (EXISTS "${GDAL_INCLUDE_DIR}/gdal_version.h")
file(STRINGS "${GDAL_INCLUDE_DIR}/gdal_version.h" _gdal_version
@@ -154,12 +186,14 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(GDAL
VERSION_VAR GDAL_VERSION
REQUIRED_VARS GDAL_LIBRARY GDAL_INCLUDE_DIR)
-if (GDAL_FOUND AND NOT TARGET GDAL::GDAL)
- add_library(GDAL::GDAL UNKNOWN IMPORTED)
- set_target_properties(GDAL::GDAL PROPERTIES
- IMPORTED_LOCATION "${GDAL_LIBRARY}"
- INTERFACE_INCLUDE_DIRECTORIES "${GDAL_INCLUDE_DIR}")
-endif ()
+if (GDAL_FOUND)
+ set(GDAL_LIBRARIES ${GDAL_LIBRARY})
+ set(GDAL_INCLUDE_DIRS ${GDAL_INCLUDE_DIR})
-set(GDAL_LIBRARIES ${GDAL_LIBRARY})
-set(GDAL_INCLUDE_DIRS ${GDAL_INCLUDE_DIR})
+ if (NOT TARGET GDAL::GDAL)
+ add_library(GDAL::GDAL UNKNOWN IMPORTED)
+ set_target_properties(GDAL::GDAL PROPERTIES
+ IMPORTED_LOCATION "${GDAL_LIBRARY}"
+ INTERFACE_INCLUDE_DIRECTORIES "${GDAL_INCLUDE_DIR}")
+ endif ()
+endif ()