diff --git a/CMakeLists.txt b/CMakeLists.txt index bd09527d..4ad859b2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -112,15 +112,12 @@ if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") # of files that depend on version.h include(GetGitRevisionDescription) get_git_head_revision(REFSPEC COMMITHASH) -else() - message(WARNING "Git not found, cannot set version info") endif() -# no git or no tags +# no git or no tags, use ChangeLog if(NOT VERSION) - set(VERSION 2.0.0) - set(REVISION "unknown") - set(VERSION_RELEASE 0) + include(ChangeLogVersion) + changelog_version(VERSION REVISION VERSION_RELEASE) endif() # generate version.h diff --git a/cmake/ChangeLogVersion.cmake b/cmake/ChangeLogVersion.cmake new file mode 100644 index 00000000..101d23bd --- /dev/null +++ b/cmake/ChangeLogVersion.cmake @@ -0,0 +1,25 @@ +function(changelog_version version revision version_release) + set(${version} "" CACHE STRING "Latest ChangeLog Version" FORCE) + set(${revision} "" CACHE STRING "Latest ChangeLog Revision" FORCE) + set(${version_release} 0 CACHE STRING "Is this a versioned release without revision" FORCE) + + file(READ CHANGELOG.md changelog_file) + + if(NOT changelog_file) + return() + endif() + + string(REGEX MATCH "\n## +\\[([0-9.]+)(-([^] ]+))?\\] +- +[0-9][0-9]?/" match_out "${changelog_file}") + + set(changelog_version "${CMAKE_MATCH_1}") + + set(is_version_release 0) + set(changelog_revision "${CMAKE_MATCH_3}") + if(NOT changelog_revision) + set(is_version_release 1) + endif() + + set(${version} "${changelog_version}" CACHE STRING "Latest ChangeLog Version" FORCE) + set(${revision} "${changelog_revision}" CACHE STRING "Latest ChangeLog Revision" FORCE) + set(${version_release} "${is_version_release}" CACHE STRING "Is this a versioned release without revision" FORCE) +endfunction()