From 0c93c7ae03b8515fe99521e6ce35c1528bb799e7 Mon Sep 17 00:00:00 2001 From: Alexey Vishnyakov <vishnya@ispras.ru> Date: Sun, 6 Dec 2020 05:27:35 +0300 Subject: [PATCH] Fix finding .git directory in CMake when z3 is a submodule of some other repository (#4850) * Fix finding .git directory in CMake when z3 is a submodule of some other repository * Check that z3 is a submodule --- cmake/git_utils.cmake | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/cmake/git_utils.cmake b/cmake/git_utils.cmake index dbc95d8df..2e2645c37 100644 --- a/cmake/git_utils.cmake +++ b/cmake/git_utils.cmake @@ -34,11 +34,20 @@ function(add_git_dir_dependency GIT_DOT_FILE SUCCESS_VAR) # Figure out where real git directory lives set(GIT_COMMON_DIR_FILE "${GIT_WORKTREE_DIR}/commondir") if (NOT EXISTS "${GIT_COMMON_DIR_FILE}") - message(FATAL_ERROR "Found git worktree dir but could not find \"${GIT_COMMON_DIR_FILE}\"") + get_filename_component(GIT_WORKTREE_PARENT "${GIT_WORKTREE_DIR}" DIRECTORY) + get_filename_component(GIT_WORKTREE_PARENT "${GIT_WORKTREE_PARENT}" NAME) + if ("${GIT_WORKTREE_PARENT}" STREQUAL "modules") + # Z3 is a git submodule + set(GIT_HEAD_FILE "${CMAKE_SOURCE_DIR}/${GIT_HEAD_FILE}") + set(GIT_DIR "${CMAKE_SOURCE_DIR}/${GIT_WORKTREE_DIR}") + else() + message(FATAL_ERROR "Found git worktree dir but could not find \"${GIT_COMMON_DIR_FILE}\"") + endif() + else() + file(READ "${GIT_COMMON_DIR_FILE}" GIT_COMMON_DIR_FILE_DATA LIMIT 512) + string(STRIP "${GIT_COMMON_DIR_FILE_DATA}" GIT_COMMON_DIR_FILE_DATA_STRIPPED) + get_filename_component(GIT_DIR "${GIT_WORKTREE_DIR}/${GIT_COMMON_DIR_FILE_DATA_STRIPPED}" ABSOLUTE) endif() - file(READ "${GIT_COMMON_DIR_FILE}" GIT_COMMON_DIR_FILE_DATA LIMIT 512) - string(STRIP "${GIT_COMMON_DIR_FILE_DATA}" GIT_COMMON_DIR_FILE_DATA_STRIPPED) - get_filename_component(GIT_DIR "${GIT_WORKTREE_DIR}/${GIT_COMMON_DIR_FILE_DATA_STRIPPED}" ABSOLUTE) if (NOT IS_DIRECTORY "${GIT_DIR}") message(FATAL_ERROR "Failed to compute path to git directory from git worktree") endif()