diff --git a/cmake/scripts/FindVersion.cmake b/cmake/scripts/FindVersion.cmake index ebc137f5ee..ce2fa412ea 100644 --- a/cmake/scripts/FindVersion.cmake +++ b/cmake/scripts/FindVersion.cmake @@ -96,6 +96,41 @@ if (GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") # Restore LC_ALL set(ENV{LC_ALL} "${SAVED_LC_ALL}") +elseif (EXISTS "${CMAKE_SOURCE_DIR}/.ottdrev-vc") + file(READ "${CMAKE_SOURCE_DIR}/.ottdrev-vc" OTTDREVVC) + string(REPLACE "\n" ";" OTTDREVVC "${OTTDREVVC}") + list(GET OTTDREVVC 0 OTTDREV) + list(GET OTTDREVVC 1 SRCHASH) + string(REPLACE "\t" ";" OTTDREV "${OTTDREV}") + list(GET OTTDREV 0 REV_VERSION) + list(GET OTTDREV 1 REV_ISODATE) + list(GET OTTDREV 2 REV_MODIFIED) + list(GET OTTDREV 3 REV_HASH) + list(GET OTTDREV 4 REV_ISTAG) + list(GET OTTDREV 5 REV_ISSTABLETAG) + list(GET OTTDREV 6 REV_YEAR) + if (REV_MODIFIED EQUAL 2) + string(REGEX REPLACE "M$" "" REV_VERSION "${REV_VERSION}") + endif () + execute_process(COMMAND ./version_utils.sh -o + RESULT_VARIABLE CAN_CHECK_MODIFIED + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) + if (CAN_CHECK_MODIFIED EQUAL 0) + execute_process(COMMAND ./version_utils.sh -s + OUTPUT_VARIABLE CURRENT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) + if (NOT CURRENT_HASH STREQUAL SRCHASH) + set(REV_MODIFIED 2) + string(SUBSTRING "${CURRENT_HASH}" 0 8 SHORT_CURRENT_HASH) + set(REV_VERSION "${REV_VERSION}-H${SHORT_CURRENT_HASH}") + set(REV_MODIFIED 2) + endif () + else () + set(REV_MODIFIED 1) + endif () elseif (EXISTS "${CMAKE_SOURCE_DIR}/.ottdrev") file(READ "${CMAKE_SOURCE_DIR}/.ottdrev" OTTDREV) string(REPLACE "\n" "" OTTDREV "${OTTDREV}") diff --git a/version_utils.sh b/version_utils.sh index 31827f644d..f06682fe45 100755 --- a/version_utils.sh +++ b/version_utils.sh @@ -80,17 +80,16 @@ function output_hash_list { } function read_source { - handle_source "source.list" "$1" - handle_source "config.lib" "$1" - handle_source "configure" "$1" - handle_source "Makefile.in" "$1" - handle_source "Makefile.bundle.in" "$1" - handle_source "Makefile.grf.in" "$1" - handle_source "Makefile.setting.in" "$1" - handle_source "Makefile.src.in" "$1" + handle_source "CMakeLists.txt" "$1" while IFS=$'\n' read -r line; do - handle_source "src/$line" "$1" - done < <( sed -e 's/^[ \t]*//; s/[ \t]*$//;' -e '/^$/ d;' -e '/^#/ d;' -e '/^..\// d;' -e 's/^rev.cpp$/rev.cpp.in/;' "source.list" ) + handle_source "$line" "$1" + done < <( find -L cmake -type f -name '*.cmake' -print | sort ) + while IFS=$'\n' read -r line; do + handle_source "$line" "$1" + done < <( find -L src -type f \( -name 'CMakeLists.txt' -o -name '*.cpp' -o -name '*.c' -o -name '*.hpp' -o -name '*.h' -o -name '*.sq' -o -name '*.mm' -o -name '*.in' \) -print | sort ) + while IFS=$'\n' read -r line; do + handle_source "$line" "$1" + done < <( find -L src/lang -type f -name '*.txt' -print | sort ) } if [ -z "$HASH" -a -z "$NAMES" -a -z "$HASHLIST" -a -z "$TESTOK" -a -z "$WRITE" -a -z "$RELEASETAG" ]; then