Merge pull request #1293 from justinmk/homebrew

handle missing git or .git/
This commit is contained in:
Justin M. Keyes 2014-10-15 23:27:16 -04:00
commit 97d2fbde73
3 changed files with 41 additions and 23 deletions

View File

@ -15,6 +15,9 @@ list(APPEND CMAKE_PREFIX_PATH ${DEPS_INSTALL_DIR})
# Version tokens # Version tokens
include(GetGitRevisionDescription) include(GetGitRevisionDescription)
get_git_head_revision(GIT_REFSPEC NVIM_VERSION_COMMIT) get_git_head_revision(GIT_REFSPEC NVIM_VERSION_COMMIT)
if (NOT NVIM_VERSION_COMMIT)
set(NVIM_VERSION_COMMIT "?")
endif()
set(NVIM_VERSION_MAJOR 0) set(NVIM_VERSION_MAJOR 0)
set(NVIM_VERSION_MINOR 0) set(NVIM_VERSION_MINOR 0)
set(NVIM_VERSION_PATCH 0) set(NVIM_VERSION_PATCH 0)
@ -22,7 +25,9 @@ set(NVIM_VERSION_PRERELEASE "-alpha")
# TODO(justinmk): UTC time would be nice here #1071 # TODO(justinmk): UTC time would be nice here #1071
git_timestamp(GIT_TIMESTAMP) git_timestamp(GIT_TIMESTAMP)
# TODO(justinmk): do not set this for "release" builds #1071 # TODO(justinmk): do not set this for "release" builds #1071
set(NVIM_VERSION_BUILD "+${GIT_TIMESTAMP}") if (GIT_TIMESTAMP)
set(NVIM_VERSION_BUILD "+${GIT_TIMESTAMP}")
endif()
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

View File

@ -41,16 +41,18 @@ set(__get_git_revision_description YES)
# to find the path to this module rather than the path to a calling list file # to find the path to this module rather than the path to a calling list file
get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH) get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
function(get_git_head_revision _refspecvar _hashvar) function(get_git_dir _gitdir)
set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}") # check GIT_DIR in environment first
set(GIT_DIR "${GIT_PARENT_DIR}/.git") set(GIT_DIR "$ENV{GIT_DIR}")
while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories if(NOT GIT_DIR)
set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
endif()
# .git dir not found, search parent directories
while(NOT EXISTS "${GIT_DIR}")
set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}") set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH) get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)
if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT) if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)
# We have reached the root directory, we are not in git
set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
return() return()
endif() endif()
set(GIT_DIR "${GIT_PARENT_DIR}/.git") set(GIT_DIR "${GIT_PARENT_DIR}/.git")
@ -62,6 +64,15 @@ function(get_git_head_revision _refspecvar _hashvar)
get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH) get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE) get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)
endif() endif()
set(${_gitdir} ${GIT_DIR} PARENT_SCOPE)
endfunction()
function(get_git_head_revision _refspecvar _hashvar)
get_git_dir(GIT_DIR)
if(NOT GIT_DIR)
return()
endif()
set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data") set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
if(NOT EXISTS "${GIT_DATA}") if(NOT EXISTS "${GIT_DATA}")
file(MAKE_DIRECTORY "${GIT_DATA}") file(MAKE_DIRECTORY "${GIT_DATA}")
@ -83,36 +94,32 @@ function(get_git_head_revision _refspecvar _hashvar)
endfunction() endfunction()
function(git_describe _var) function(git_describe _var)
get_git_dir(GIT_DIR)
if(NOT GIT_DIR)
return()
endif()
if(NOT GIT_FOUND) if(NOT GIT_FOUND)
find_package(Git QUIET) find_package(Git QUIET)
endif() endif()
get_git_head_revision(refspec hash)
if(NOT GIT_FOUND) if(NOT GIT_FOUND)
set(${_var} "GIT-NOTFOUND" PARENT_SCOPE) set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
return() return()
endif() endif()
get_git_head_revision(refspec hash)
if(NOT hash) if(NOT hash)
set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE) set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE)
return() return()
endif() endif()
# TODO sanitize
#if((${ARGN}" MATCHES "&&") OR
# (ARGN MATCHES "||") OR
# (ARGN MATCHES "\\;"))
# message("Please report the following error to the project!")
# message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
#endif()
#message(STATUS "Arguments to execute_process: ${ARGN}")
execute_process(COMMAND execute_process(COMMAND
"${GIT_EXECUTABLE}" "${GIT_EXECUTABLE}"
describe describe
${hash} ${hash}
${ARGN} ${ARGN}
WORKING_DIRECTORY WORKING_DIRECTORY
"${CMAKE_SOURCE_DIR}" "${GIT_DIR}"
RESULT_VARIABLE RESULT_VARIABLE
res res
OUTPUT_VARIABLE OUTPUT_VARIABLE
@ -127,21 +134,26 @@ function(git_describe _var)
endfunction() endfunction()
function(git_timestamp _var) function(git_timestamp _var)
get_git_dir(GIT_DIR)
if(NOT GIT_DIR)
return()
endif()
if(NOT GIT_FOUND) if(NOT GIT_FOUND)
find_package(Git QUIET) find_package(Git QUIET)
endif() endif()
get_git_head_revision(refspec hash)
if(NOT GIT_FOUND) if(NOT GIT_FOUND)
set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
return() return()
endif() endif()
get_git_head_revision(refspec hash)
if(NOT hash) if(NOT hash)
set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE) set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE)
return() return()
endif() endif()
execute_process(COMMAND "${GIT_EXECUTABLE}" log -1 --format="%ci" ${hash} ${ARGN} execute_process(COMMAND "${GIT_EXECUTABLE}" log -1 --format="%ci" ${hash} ${ARGN}
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" WORKING_DIRECTORY "${GIT_DIR}"
RESULT_VARIABLE res RESULT_VARIABLE res
OUTPUT_VARIABLE out OUTPUT_VARIABLE out
ERROR_QUIET ERROR_QUIET

View File

@ -10,6 +10,7 @@ class Neovim < Formula
depends_on "autoconf" => :build depends_on "autoconf" => :build
def install def install
ENV["GIT_DIR"] = cached_download/".git" if build.head?
ENV.deparallelize ENV.deparallelize
system "make", "CMAKE_EXTRA_FLAGS=\"-DCMAKE_INSTALL_PREFIX:PATH=#{prefix}\"", "install" system "make", "CMAKE_EXTRA_FLAGS=\"-DCMAKE_INSTALL_PREFIX:PATH=#{prefix}\"", "install"
end end