From bc8b8ef256e2ead05565d4f92da36105fca1a4c0 Mon Sep 17 00:00:00 2001 From: Pauli Date: Fri, 13 Jul 2018 15:22:00 +0300 Subject: [PATCH] Use configure_file to optimize incremental builds for git-describe.h --- library/.gitignore | 1 + library/CMakeLists.txt | 13 +++-------- library/git-describe.cmake | 37 ------------------------------- library/git-describe.cmake.in | 33 +++++++++++++++++++++++++++ library/include/.gitignore | 2 +- library/include/git-describe.h.in | 7 ++++++ 6 files changed, 45 insertions(+), 48 deletions(-) create mode 100644 library/.gitignore delete mode 100644 library/git-describe.cmake create mode 100644 library/git-describe.cmake.in create mode 100644 library/include/git-describe.h.in diff --git a/library/.gitignore b/library/.gitignore new file mode 100644 index 000000000..e22769b30 --- /dev/null +++ b/library/.gitignore @@ -0,0 +1 @@ +git-describe.cmake diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt index f8113e10e..2cce53949 100644 --- a/library/CMakeLists.txt +++ b/library/CMakeLists.txt @@ -322,25 +322,18 @@ IF(DFHACK_PRERELEASE) ) ENDIF() -# always re-run git-describe if cmake is re-run (e.g. if build ID or version changes) -EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_SOURCE_DIR}/git-describe.cmake) +configure_file(git-describe.cmake.in ${CMAKE_CURRENT_SOURCE_DIR}/git-describe.cmake @ONLY) if (EXISTS ${CMAKE_SOURCE_DIR}/.git/index AND EXISTS ${CMAKE_SOURCE_DIR}/.git/modules/library/xml/index) - ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/git-describe.h + ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/include/git-describe.h COMMAND ${CMAKE_COMMAND} -D dfhack_SOURCE_DIR:STRING=${dfhack_SOURCE_DIR} - -D git_describe_tmp_h:STRING=${CMAKE_CURRENT_BINARY_DIR}/git-describe.h -D GIT_EXECUTABLE:STRING=${GIT_EXECUTABLE} - -D DFHACK_BUILD_ID:STRING=${DFHACK_BUILD_ID} -P ${CMAKE_CURRENT_SOURCE_DIR}/git-describe.cmake COMMENT "Obtaining git commit information" DEPENDS ${CMAKE_SOURCE_DIR}/.git/index ${CMAKE_SOURCE_DIR}/.git/modules/library/xml/index ${CMAKE_CURRENT_SOURCE_DIR}/git-describe.cmake - ) - ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/include/git-describe.h - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/git-describe.h - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/git-describe.h ${CMAKE_CURRENT_SOURCE_DIR}/include/git-describe.h - COMMENT "Copy include/git-describe.h" + include/git-describe.h.in ) endif () diff --git a/library/git-describe.cmake b/library/git-describe.cmake deleted file mode 100644 index fe9cc1577..000000000 --- a/library/git-describe.cmake +++ /dev/null @@ -1,37 +0,0 @@ -execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=8 --long - WORKING_DIRECTORY "${dfhack_SOURCE_DIR}" - OUTPUT_VARIABLE DFHACK_GIT_DESCRIPTION) -execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD - WORKING_DIRECTORY "${dfhack_SOURCE_DIR}" - OUTPUT_VARIABLE DFHACK_GIT_COMMIT) -execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=8 --exact-match - WORKING_DIRECTORY "${dfhack_SOURCE_DIR}" - RESULT_VARIABLE DFHACK_GIT_TAGGED_RESULT - OUTPUT_QUIET ERROR_QUIET) - -# Check library/xml for matching commits -execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD:library/xml - WORKING_DIRECTORY "${dfhack_SOURCE_DIR}" - OUTPUT_VARIABLE DFHACK_GIT_XML_EXPECTED_COMMIT) -execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD - WORKING_DIRECTORY "${dfhack_SOURCE_DIR}/library/xml" - OUTPUT_VARIABLE DFHACK_GIT_XML_COMMIT) - -file(WRITE ${git_describe_tmp_h} "") - -macro(git_describe_definition var) - string(STRIP "${${var}}" GIT_DEF_VALUE) - file(APPEND ${git_describe_tmp_h} "#define ${var} \"${GIT_DEF_VALUE}\"\n") -endmacro() - -git_describe_definition(DFHACK_GIT_DESCRIPTION) -git_describe_definition(DFHACK_GIT_COMMIT) -git_describe_definition(DFHACK_GIT_XML_EXPECTED_COMMIT) -git_describe_definition(DFHACK_GIT_XML_COMMIT) -git_describe_definition(DFHACK_BUILD_ID) -if(${DFHACK_GIT_TAGGED_RESULT} EQUAL 0) - file(APPEND ${git_describe_tmp_h} "#define DFHACK_GIT_TAGGED\n") -endif() -if(${DFHACK_GIT_XML_COMMIT} STREQUAL ${DFHACK_GIT_XML_EXPECTED_COMMIT}) - file(APPEND ${git_describe_tmp_h} "#define DFHACK_GIT_XML_MATCH\n") -endif() diff --git a/library/git-describe.cmake.in b/library/git-describe.cmake.in new file mode 100644 index 000000000..e48212b8f --- /dev/null +++ b/library/git-describe.cmake.in @@ -0,0 +1,33 @@ +# Generated from git-describe.cmake.in +set(DFHACK_BUILD_ID "@DFHACK_BUILD_ID@") + +execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=8 --long + WORKING_DIRECTORY "${dfhack_SOURCE_DIR}" + OUTPUT_VARIABLE DFHACK_GIT_DESCRIPTION + OUTPUT_STRIP_TRAILING_WHITESPACE) +execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD + WORKING_DIRECTORY "${dfhack_SOURCE_DIR}" + OUTPUT_VARIABLE DFHACK_GIT_COMMIT + OUTPUT_STRIP_TRAILING_WHITESPACE) +execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=8 --exact-match + WORKING_DIRECTORY "${dfhack_SOURCE_DIR}" + RESULT_VARIABLE DFHACK_GIT_TAGGED + OUTPUT_QUIET ERROR_QUIET) + +# Check library/xml for matching commits +execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD:library/xml + WORKING_DIRECTORY "${dfhack_SOURCE_DIR}" + OUTPUT_VARIABLE DFHACK_GIT_XML_EXPECTED_COMMIT + OUTPUT_STRIP_TRAILING_WHITESPACE) +execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD + WORKING_DIRECTORY "${dfhack_SOURCE_DIR}/library/xml" + OUTPUT_VARIABLE DFHACK_GIT_XML_COMMIT + OUTPUT_STRIP_TRAILING_WHITESPACE) + +if(${DFHACK_GIT_XML_COMMIT} STREQUAL ${DFHACK_GIT_XML_EXPECTED_COMMIT}) + set(DFHACK_GIT_XML_MATCH TRUE) +else() + set(DFHACK_GIT_XML_MATCH FALSE) +endif() + +configure_file(${dfhack_SOURCE_DIR}/library/include/git-describe.h.in ${dfhack_SOURCE_DIR}/library/include/git-describe.h) diff --git a/library/include/.gitignore b/library/include/.gitignore index 24dcd1482..48d2d3236 100644 --- a/library/include/.gitignore +++ b/library/include/.gitignore @@ -1 +1 @@ -git-describe.* +git-describe.h diff --git a/library/include/git-describe.h.in b/library/include/git-describe.h.in new file mode 100644 index 000000000..761fe4ca5 --- /dev/null +++ b/library/include/git-describe.h.in @@ -0,0 +1,7 @@ +#cmakedefine DFHACK_GIT_DESCRIPTION "@DFHACK_GIT_DESCRIPTION@" +#cmakedefine DFHACK_GIT_COMMIT "@DFHACK_GIT_COMMIT@" +#cmakedefine DFHACK_GIT_XML_EXPECTED_COMMIT "@DFHACK_GIT_XML_EXPECTED_COMMIT@" +#cmakedefine DFHACK_GIT_XML_COMMIT "@DFHACK_GIT_XML_COMMIT@" +#define DFHACK_BUILD_ID "@DFHACK_BUILD_ID@" +#cmakedefine DFHACK_GIT_TAGGED +#cmakedefine DFHACK_GIT_XML_MATCH