qt-build-tools/6.5.1/_tools/cmake/share/cmake-3.27/Modules/FindGDAL.cmake

200 lines
6.5 KiB
CMake
Raw Normal View History

2023-11-01 06:11:15 +08:00
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FindGDAL
--------
2023-11-01 06:20:22 +08:00
Find Geospatial Data Abstraction Library (GDAL).
2023-11-01 06:11:15 +08:00
IMPORTED Targets
^^^^^^^^^^^^^^^^
2023-11-01 08:44:24 +08:00
.. versionadded:: 3.14
2023-11-01 06:11:15 +08:00
This module defines :prop_tgt:`IMPORTED` target ``GDAL::GDAL``
if GDAL has been found.
Result Variables
^^^^^^^^^^^^^^^^
This module will set the following variables in your project:
``GDAL_FOUND``
True if GDAL is found.
``GDAL_INCLUDE_DIRS``
Include directories for GDAL headers.
``GDAL_LIBRARIES``
Libraries to link to GDAL.
``GDAL_VERSION``
2023-11-01 08:44:24 +08:00
.. versionadded:: 3.14
The version of GDAL found.
2023-11-01 06:11:15 +08:00
Cache variables
^^^^^^^^^^^^^^^
The following cache variables may also be set:
``GDAL_LIBRARY``
The libgdal library file.
``GDAL_INCLUDE_DIR``
The directory containing ``gdal.h``.
Hints
^^^^^
Set ``GDAL_DIR`` or ``GDAL_ROOT`` in the environment to specify the
GDAL installation prefix.
2023-11-01 08:44:24 +08:00
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.
2023-11-01 06:11:15 +08:00
#]=======================================================================]
# $GDALDIR is an environment variable that would
# correspond to the ./configure --prefix=$GDAL_DIR
# used in building gdal.
#
# Created by Eric Wing. I'm not a gdal user, but OpenSceneGraph uses it
# for osgTerrain so I whipped this module together for completeness.
# I actually don't know the conventions or where files are typically
# placed in distros.
# Any real gdal users are encouraged to correct this (but please don't
# break the OS X framework stuff when doing so which is what usually seems
# to happen).
# This makes the presumption that you are include gdal.h like
#
#include "gdal.h"
find_path(GDAL_INCLUDE_DIR gdal.h
HINTS
ENV GDAL_DIR
ENV GDAL_ROOT
PATH_SUFFIXES
2023-11-01 08:44:24 +08:00
include/gdal
include/GDAL
include
DOC "Path to the GDAL include directory"
2023-11-01 06:11:15 +08:00
)
2023-11-01 08:44:24 +08:00
mark_as_advanced(GDAL_INCLUDE_DIR)
2023-11-01 06:11:15 +08:00
2023-11-01 08:44:24 +08:00
if(UNIX AND NOT FindGDAL_SKIP_GDAL_CONFIG)
2023-11-01 06:11:15 +08:00
# 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
# libgdal.so...
find_program(GDAL_CONFIG gdal-config
HINTS
ENV GDAL_DIR
ENV GDAL_ROOT
PATH_SUFFIXES bin
2023-11-01 08:44:24 +08:00
DOC "Path to the gdal-config tool"
2023-11-01 06:11:15 +08:00
)
2023-11-01 08:44:24 +08:00
mark_as_advanced(GDAL_CONFIG)
2023-11-01 06:11:15 +08:00
if(GDAL_CONFIG)
2023-11-01 08:44:24 +08:00
execute_process(COMMAND ${GDAL_CONFIG} --libs OUTPUT_VARIABLE GDAL_CONFIG_LIBS)
2023-11-01 06:11:15 +08:00
if(GDAL_CONFIG_LIBS)
# treat the output as a command line and split it up
separate_arguments(args NATIVE_COMMAND "${GDAL_CONFIG_LIBS}")
# only consider libraries whose name matches this pattern
set(name_pattern "[gG][dD][aA][lL]")
# consider each entry as a possible library path, name, or parent directory
foreach(arg IN LISTS args)
# library name
if("${arg}" MATCHES "^-l(.*)$")
set(lib "${CMAKE_MATCH_1}")
# only consider libraries whose name matches the expected pattern
if("${lib}" MATCHES "${name_pattern}")
list(APPEND _gdal_lib "${lib}")
endif()
# library search path
elseif("${arg}" MATCHES "^-L(.*)$")
list(APPEND _gdal_libpath "${CMAKE_MATCH_1}")
# assume this is a full path to a library
elseif(IS_ABSOLUTE "${arg}" AND EXISTS "${arg}")
# extract the file name
get_filename_component(lib "${arg}" NAME)
# only consider libraries whose name matches the expected pattern
if(NOT "${lib}" MATCHES "${name_pattern}")
continue()
endif()
# extract the file directory
get_filename_component(dir "${arg}" DIRECTORY)
# remove library prefixes/suffixes
string(REGEX REPLACE "^(${CMAKE_SHARED_LIBRARY_PREFIX}|${CMAKE_STATIC_LIBRARY_PREFIX})" "" lib "${lib}")
string(REGEX REPLACE "(${CMAKE_SHARED_LIBRARY_SUFFIX}|${CMAKE_STATIC_LIBRARY_SUFFIX})$" "" lib "${lib}")
# use the file name and directory as hints
list(APPEND _gdal_libpath "${dir}")
list(APPEND _gdal_lib "${lib}")
endif()
endforeach()
endif()
endif()
endif()
2023-11-01 08:44:24 +08:00
# 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)
2023-11-01 06:11:15 +08:00
find_library(GDAL_LIBRARY
2023-11-01 08:44:24 +08:00
NAMES ${_gdal_lib} ${_gdal_libnames} gdal gdald gdal_i gdal1.5.0 gdal1.4.0 gdal1.3.2 GDAL
2023-11-01 06:11:15 +08:00
HINTS
ENV GDAL_DIR
ENV GDAL_ROOT
${_gdal_libpath}
PATH_SUFFIXES lib
2023-11-01 08:44:24 +08:00
DOC "Path to the GDAL library"
2023-11-01 06:11:15 +08:00
)
2023-11-01 08:44:24 +08:00
mark_as_advanced(GDAL_LIBRARY)
unset(_gdal_libnames)
unset(_gdal_lib)
2023-11-01 06:11:15 +08:00
if (EXISTS "${GDAL_INCLUDE_DIR}/gdal_version.h")
file(STRINGS "${GDAL_INCLUDE_DIR}/gdal_version.h" _gdal_version
REGEX "GDAL_RELEASE_NAME")
string(REGEX REPLACE ".*\"\(.*\)\"" "\\1" GDAL_VERSION "${_gdal_version}")
unset(_gdal_version)
else ()
set(GDAL_VERSION GDAL_VERSION-NOTFOUND)
endif ()
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GDAL
VERSION_VAR GDAL_VERSION
REQUIRED_VARS GDAL_LIBRARY GDAL_INCLUDE_DIR)
2023-11-01 08:44:24 +08:00
if (GDAL_FOUND)
set(GDAL_LIBRARIES ${GDAL_LIBRARY})
set(GDAL_INCLUDE_DIRS ${GDAL_INCLUDE_DIR})
2023-11-01 06:11:15 +08:00
2023-11-01 08:44:24 +08:00
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 ()