Browse Source

FindGit: Add imported target

Kyle Edwards 7 years ago
parent
commit
97700e9f5b

+ 5 - 0
Help/release/dev/findgit-imported-target.rst

@@ -0,0 +1,5 @@
+findgit-imported-target
+-----------------------
+
+* The :module:`FindGit` module now provides an ``IMPORTED`` target for the Git
+  executable.

+ 11 - 0
Modules/FindGit.cmake

@@ -5,6 +5,11 @@
 FindGit
 -------
 
+The module defines the following ``IMPORTED`` targets:
+
+``Git::Git``
+  Executable of the Git command-line client.
+
 The module defines the following variables:
 
 ``GIT_EXECUTABLE``
@@ -78,6 +83,12 @@ if(GIT_EXECUTABLE)
     string(REPLACE "git version " "" GIT_VERSION_STRING "${git_version}")
   endif()
   unset(git_version)
+
+  get_property(_findgit_role GLOBAL PROPERTY CMAKE_ROLE)
+  if(_findgit_role STREQUAL "PROJECT" AND NOT TARGET Git::Git)
+    add_executable(Git::Git IMPORTED)
+    set_property(TARGET Git::Git PROPERTY IMPORTED_LOCATION "${GIT_EXECUTABLE}")
+  endif()
 endif()
 
 include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)

+ 4 - 0
Tests/CMakeLists.txt

@@ -1437,6 +1437,10 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
     add_subdirectory(FindGIF)
   endif()
 
+  if(CMake_TEST_FindGit)
+    add_subdirectory(FindGit)
+  endif()
+
   if(CMake_TEST_FindGSL)
     add_subdirectory(FindGSL)
   endif()

+ 10 - 0
Tests/FindGit/CMakeLists.txt

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

+ 13 - 0
Tests/FindGit/Test/CMakeLists.txt

@@ -0,0 +1,13 @@
+cmake_minimum_required(VERSION 3.12)
+project(TestFindGit NONE)
+include(CTest)
+
+find_package(Git REQUIRED)
+
+add_test(NAME test_git
+  COMMAND ${CMAKE_COMMAND}
+  "-DGIT_EXECUTABLE=${GIT_EXECUTABLE}"
+  "-DGIT_EXECUTABLE_TARGET=$<TARGET_FILE:Git::Git>"
+  "-DGIT_VERSION_STRING=${GIT_VERSION_STRING}"
+  -P "${CMAKE_CURRENT_LIST_DIR}/RunGit.cmake"
+  )

+ 20 - 0
Tests/FindGit/Test/RunGit.cmake

@@ -0,0 +1,20 @@
+cmake_minimum_required(VERSION 3.12)
+
+function(run_git exe exe_display)
+  execute_process(COMMAND ${exe} --version
+    OUTPUT_VARIABLE output
+    OUTPUT_STRIP_TRAILING_WHITESPACE
+    RESULT_VARIABLE result
+    )
+
+  if(NOT result EQUAL 0)
+    message(SEND_ERROR "Result of ${exe_display} --version is ${result}, should be 0")
+  endif()
+
+  if(NOT output STREQUAL "git version ${GIT_VERSION_STRING}")
+    message(SEND_ERROR "Output of ${exe_display} --version is \"${output}\", should be \"git version ${GIT_VERSION_STRING}\"")
+  endif()
+endfunction()
+
+run_git("${GIT_EXECUTABLE}" "\${GIT_EXECUTABLE}")
+run_git("${GIT_EXECUTABLE_TARGET}" "Git::Git")