From 85d164c0c039f59d21ffc694ab8c8328bec06a06 Mon Sep 17 00:00:00 2001 From: Otavio Salvador Date: Sat, 2 Jul 2011 16:44:40 -0300 Subject: [PATCH] cmake: add auto versioning based on GIT A new AutoVersioning module has been written in a portable way to allow dynamic versioning on Windows and Unix based systems. Signed-off-by: Otavio Salvador --- CMakeLists.txt | 2 ++ cmake/AutoVersioning.cmake | 54 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 cmake/AutoVersioning.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index a2d2bf237..e506e3245 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,8 @@ set(CMAKE_COLOR_MAKEFILE ON) # Include our extra modules set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/) +include(AutoVersioning) + # Soname versioning - 0.0.0 since it is not being managed yet set(FREERDP_VERSION_MAJOR "0") set(FREERDP_VERSION_MINOR "0") diff --git a/cmake/AutoVersioning.cmake b/cmake/AutoVersioning.cmake new file mode 100644 index 000000000..04e6479ed --- /dev/null +++ b/cmake/AutoVersioning.cmake @@ -0,0 +1,54 @@ +# - AutoVersioning +# Gather version from tarball or SCM +# +# This module defines the following variables: +# PRODUCT_VERSION - Version of product +# + +#============================================================================= +# Copyright 2011 O.S. Systems Software Ltda. +# Copyright 2011 Otavio Salvador +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#============================================================================= + +if(EXISTS "${CMAKE_SOURCE_DIR}/.version" ) + file(READ ${CMAKE_SOURCE_DIR}/.version PRODUCT_VERSION) + + string(STRIP ${PRODUCT_VERSION} PRODUCT_VERSION) +else() + execute_process(COMMAND git describe --match "v[0-9]*" --abbrev=4 + OUTPUT_VARIABLE PRODUCT_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET) + + if(PRODUCT_VERSION) + string(REGEX REPLACE "^v(.*)" "\\1" PRODUCT_VERSION ${PRODUCT_VERSION}) + else() + # GIT is the default version + set(PRODUCT_VERSION GIT) + endif() + + # Check if has not commited changes + execute_process(COMMAND git update-index -q --refresh) + execute_process(COMMAND git diff-index --name-only HEAD -- + OUTPUT_VARIABLE CHANGED_SOURCE + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET) + + if(CHANGED_SOURCE) + set(PRODUCT_VERSION ${PRODUCT_VERSION}-dirty) + endif() +endif() + +message(STATUS "${CMAKE_PROJECT_NAME} ${PRODUCT_VERSION}")