From be962a9444d629696199c52bbc6792e8d5437abb Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Fri, 19 Jan 2018 16:34:00 +1100 Subject: [PATCH] cmake: Re-run cmake if submodule commits change or a submodule is deinit-ed --- tools/cmake/git_submodules.cmake | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tools/cmake/git_submodules.cmake b/tools/cmake/git_submodules.cmake index be71f41f6..73e1f35f9 100644 --- a/tools/cmake/git_submodules.cmake +++ b/tools/cmake/git_submodules.cmake @@ -41,6 +41,16 @@ else(NOT GIT_FOUND) elseif(NOT "${status}" STREQUAL " ") message(WARNING "Git submodule ${submodule_path} is out of date. Run 'git submodule update --init --recursive' to fix.") endif() + + # Force a re-run of cmake if the submodule's .git file changes or is changed (ie accidental deinit) + get_filename_component(submodule_abs_path ${submodule_path} ABSOLUTE BASE_DIR ${root_path}) + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${submodule_abs_path}/.git) + # same if the HEAD file in the submodule's directory changes (ie commit changes). This will at least prit the 'out of date' warning + set(submodule_head "${root_path}/.git/modules/${submodule_path}/HEAD") + if(EXISTS "${submodule_head}") + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${submodule_head}) + endif() + endforeach() endfunction(git_submodule_check)