diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake index b1140c806..15db793a1 100644 --- a/Modules/ExternalProject.cmake +++ b/Modules/ExternalProject.cmake @@ -749,15 +749,14 @@ function(_ep_add_download_command name) set(cmd ${Subversion_SVN_EXECUTABLE} co ${svn_repository} ${svn_revision} ${src_name}) list(APPEND depends ${stamp_dir}/${name}-svninfo.txt) elseif(git_repository) - find_program(git_EXECUTABLE NAMES git.cmd git eg.cmd eg DOC "git command line client") - mark_as_advanced(git_EXECUTABLE) - if(NOT git_EXECUTABLE) + find_package(Git) + if(NOT GIT_EXECUTABLE) message(FATAL_ERROR "error: could not find git for clone of ${name}") endif() # The git submodule update '--recursive' flag requires git >= v1.6.5 # - _ep_get_git_version("${git_EXECUTABLE}" git_version) + _ep_get_git_version("${GIT_EXECUTABLE}" git_version) if(git_version VERSION_LESS 1.6.5) message(FATAL_ERROR "error: git version 1.6.5 or later required for 'git submodule update --recursive': git_version='${git_version}'") endif() @@ -784,7 +783,7 @@ function(_ep_add_download_command name) # The script will delete the source directory and then call git clone. # _ep_write_gitclone_script(${tmp_dir}/${name}-gitclone.cmake ${source_dir} - ${git_EXECUTABLE} ${git_repository} ${git_tag} ${src_name} ${work_dir} + ${GIT_EXECUTABLE} ${git_repository} ${git_tag} ${src_name} ${work_dir} ) set(comment "Performing download step (git clone) for '${name}'") set(cmd ${CMAKE_COMMAND} -P ${tmp_dir}/${name}-gitclone.cmake) @@ -874,7 +873,7 @@ function(_ep_add_update_command name) set(cmd ${Subversion_SVN_EXECUTABLE} up ${svn_revision}) set(always 1) elseif(git_repository) - if(NOT git_EXECUTABLE) + if(NOT GIT_EXECUTABLE) message(FATAL_ERROR "error: could not find git for fetch of ${name}") endif() set(work_dir ${source_dir}) @@ -883,9 +882,9 @@ function(_ep_add_update_command name) if(NOT git_tag) set(git_tag "master") endif() - set(cmd ${git_EXECUTABLE} fetch - COMMAND ${git_EXECUTABLE} checkout ${git_tag} - COMMAND ${git_EXECUTABLE} submodule update --recursive + set(cmd ${GIT_EXECUTABLE} fetch + COMMAND ${GIT_EXECUTABLE} checkout ${git_tag} + COMMAND ${GIT_EXECUTABLE} submodule update --recursive ) set(always 1) endif() diff --git a/Modules/FindGit.cmake b/Modules/FindGit.cmake new file mode 100644 index 000000000..2d8214287 --- /dev/null +++ b/Modules/FindGit.cmake @@ -0,0 +1,46 @@ +# The module defines the following variables: +# GIT_EXECUTABLE - path to git command line client +# GIT_FOUND - true if the command line client was found +# Example usage: +# find_package(Git) +# if(GIT_FOUND) +# message("git found: ${GIT_EXECUTABLE}") +# endif() + +#============================================================================= +# Copyright 2010 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distributed this file outside of CMake, substitute the full +# License text for the above reference.) + +# Look for 'git' or 'eg' (easy git) +# +set(git_names git eg) + +# Prefer .cmd variants on Windows unless running in a Makefile +# in the MSYS shell. +# +if(WIN32) + if(NOT CMAKE_GENERATOR MATCHES "MSYS") + set(git_names git.cmd git eg.cmd eg) + endif() +endif() + +find_program(GIT_EXECUTABLE + NAMES ${git_names} + DOC "git command line client" + ) +mark_as_advanced(GIT_EXECUTABLE) + +# Handle the QUIETLY and REQUIRED arguments and set GIT_FOUND to TRUE if +# all listed variables are TRUE + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Git DEFAULT_MSG GIT_EXECUTABLE) diff --git a/Tests/ExternalProject/CMakeLists.txt b/Tests/ExternalProject/CMakeLists.txt index 8257e90a5..2e387cbad 100644 --- a/Tests/ExternalProject/CMakeLists.txt +++ b/Tests/ExternalProject/CMakeLists.txt @@ -5,7 +5,7 @@ include(ExternalProject) find_package(CVS) find_package(Subversion) -find_program(git_EXECUTABLE NAMES git.cmd git eg.cmd eg DOC "git command line client") +find_package(Git) set(base "${CMAKE_BINARY_DIR}/CMakeExternals") set(binary_base "${base}/Build") @@ -302,11 +302,11 @@ endif() set(do_git_tests 0) -if(git_EXECUTABLE) +if(GIT_EXECUTABLE) set(do_git_tests 1) execute_process( - COMMAND "${git_EXECUTABLE}" --version + COMMAND "${GIT_EXECUTABLE}" --version OUTPUT_VARIABLE ov OUTPUT_STRIP_TRAILING_WHITESPACE ) @@ -328,10 +328,10 @@ if(do_git_tests) # set(proj SetupLocalGITRepository) ExternalProject_Add(${proj} - SOURCE_DIR ${local_git_repo} + SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/GIT URL ${CMAKE_CURRENT_SOURCE_DIR}/gitrepo.tgz BUILD_COMMAND "" - CONFIGURE_COMMAND "${git_EXECUTABLE}" --version + CONFIGURE_COMMAND "${GIT_EXECUTABLE}" --version INSTALL_COMMAND "" ) @@ -444,4 +444,4 @@ message(STATUS "can_build_tutorial_step5='${can_build_tutorial_step5}'") message(STATUS "do_cvs_tests='${do_cvs_tests}'") message(STATUS "do_svn_tests='${do_svn_tests}'") message(STATUS "do_git_tests='${do_git_tests}'") -message(STATUS "git_EXECUTABLE='${git_EXECUTABLE}'") +message(STATUS "GIT_EXECUTABLE='${GIT_EXECUTABLE}'")