Răsfoiți Sursa

Merge topic 'FindGDAL-target'

22ba9b6a32 FindGDAL: set the GDAL_VERSION
525ff0c3bc Tests/FindGDAL: add a test for FindGDAL
87324b9b6a FindGDAL: add an imported target
dfb3f58f79 FindGDAL: Modernize documentation layout

Acked-by: Kitware Robot <[email protected]>
Merge-request: !2552
Brad King 7 ani în urmă
părinte
comite
bdc5618e18

+ 4 - 0
Help/release/dev/FindGDAL-target.rst

@@ -0,0 +1,4 @@
+FindGDAL-target
+---------------
+
+* The :module:`FindGDAL` module now provides an imported target.

+ 46 - 11
Modules/FindGDAL.cmake

@@ -5,28 +5,45 @@
 FindGDAL
 --------
 
+Find GDAL.
 
+IMPORTED Targets
+^^^^^^^^^^^^^^^^
 
-Locate gdal
+This module defines :prop_tgt:`IMPORTED` target ``GDAL::GDAL``
+if GDAL has been found.
 
-This module accepts the following environment variables:
+Result Variables
+^^^^^^^^^^^^^^^^
 
-::
+This module will set the following variables in your project:
 
-    GDAL_DIR or GDAL_ROOT - Specify the location of GDAL
+``GDAL_FOUND``
+  True if GDAL is found.
+``GDAL_INCLUDE_DIRS``
+  Include directories for GDAL headers.
+``GDAL_LIBRARIES``
+  Libraries to link to GDAL.
+``GDAL_VERSION``
+  The version of GDAL found.
 
+Cache variables
+^^^^^^^^^^^^^^^
 
+The following cache variables may also be set:
 
-This module defines the following CMake variables:
+``GDAL_LIBRARY``
+  The libgdal library file.
+``GDAL_INCLUDE_DIR``
+  The directory containing ``gdal.h``.
 
-::
+Hints
+^^^^^
 
-    GDAL_FOUND - True if libgdal is found
-    GDAL_LIBRARY - A variable pointing to the GDAL library
-    GDAL_INCLUDE_DIR - Where to find the headers
+Set ``GDAL_DIR`` or ``GDAL_ROOT`` in the environment to specify the
+GDAL installation prefix.
 #]=======================================================================]
 
-#
 # $GDALDIR is an environment variable that would
 # correspond to the ./configure --prefix=$GDAL_DIR
 # used in building gdal.
@@ -123,8 +140,26 @@ find_library(GDAL_LIBRARY
   PATH_SUFFIXES lib
 )
 
+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 DEFAULT_MSG GDAL_LIBRARY GDAL_INCLUDE_DIR)
+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 ()
 
 set(GDAL_LIBRARIES ${GDAL_LIBRARY})
 set(GDAL_INCLUDE_DIRS ${GDAL_INCLUDE_DIR})

+ 4 - 0
Tests/CMakeLists.txt

@@ -1384,6 +1384,10 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
     add_subdirectory(FindFreetype)
   endif()
 
+  if(CMake_TEST_FindGDAL)
+    add_subdirectory(FindGDAL)
+  endif()
+
   if(CMake_TEST_FindGSL)
     add_subdirectory(FindGSL)
   endif()

+ 10 - 0
Tests/FindGDAL/CMakeLists.txt

@@ -0,0 +1,10 @@
+add_test(NAME FindGDAL.Test COMMAND
+  ${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
+  --build-and-test
+  "${CMake_SOURCE_DIR}/Tests/FindGDAL/Test"
+  "${CMake_BINARY_DIR}/Tests/FindGDAL/Test"
+  ${build_generator_args}
+  --build-project TestFindGDAL
+  --build-options ${build_options}
+  --test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
+  )

+ 16 - 0
Tests/FindGDAL/Test/CMakeLists.txt

@@ -0,0 +1,16 @@
+cmake_minimum_required(VERSION 3.10)
+project(TestFindGDAL C)
+include(CTest)
+
+find_package(GDAL REQUIRED)
+
+add_definitions(-DCMAKE_EXPECTED_GDAL_VERSION="${GDAL_VERSION}")
+
+add_executable(test_tgt main.c)
+target_link_libraries(test_tgt GDAL::GDAL)
+add_test(NAME test_tgt COMMAND test_tgt)
+
+add_executable(test_var main.c)
+target_include_directories(test_var PRIVATE ${GDAL_INCLUDE_DIRS})
+target_link_libraries(test_var PRIVATE ${GDAL_LIBRARIES})
+add_test(NAME test_var COMMAND test_var)

+ 11 - 0
Tests/FindGDAL/Test/main.c

@@ -0,0 +1,11 @@
+#include <gdal.h>
+#include <stdio.h>
+#include <string.h>
+
+int main()
+{
+  printf("Found GDAL version %s, expected version %s\n", GDAL_RELEASE_NAME,
+         CMAKE_EXPECTED_GDAL_VERSION);
+  GDALAllRegister();
+  return strcmp(GDAL_RELEASE_NAME, CMAKE_EXPECTED_GDAL_VERSION);
+}