From ad7bbc50862e5127fa73dc16258217a6bd7ee45e Mon Sep 17 00:00:00 2001 From: Michael Wild Date: Fri, 19 Aug 2011 14:32:57 +0200 Subject: [PATCH] ENH: Add a version_check target Signed-off-by: Michael Wild --- CMake/FOAMUtilities.cmake | 16 ++++ CMakeLists.txt | 34 ++++++- data/utilities/CMakeLists.txt | 14 ++- data/utilities/checkVersionInfo.py.in | 164 ++++++++++++++++++++++++++++++++++ doc/Doxygen/CMakeLists.txt | 6 ++ doc/UserGuide/CMakeLists.txt | 4 + 6 files changed, 233 insertions(+), 5 deletions(-) create mode 100755 data/utilities/checkVersionInfo.py.in diff --git a/CMake/FOAMUtilities.cmake b/CMake/FOAMUtilities.cmake index 18019f0a9..f105ab83d 100644 --- a/CMake/FOAMUtilities.cmake +++ b/CMake/FOAMUtilities.cmake @@ -182,6 +182,10 @@ function(foam_add_library name) set_property(GLOBAL APPEND PROPERTY FOAM_DOXYGEN_LIBRARIES "${name}") set_property(GLOBAL PROPERTY FOAM_DOXYGEN_${name}_LIBRARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}") + # depend on version_check if enabled + if(FOAM_HAVE_GIT) + add_dependencies(${name} version_check) + endif() endfunction() function(foam_add_executable name) @@ -248,6 +252,10 @@ function(foam_add_executable name) set_property(GLOBAL APPEND PROPERTY FOAM_DOXYGEN_EXECUTABLES "${name}") set_property(GLOBAL PROPERTY FOAM_DOXYGEN_${name}_EXECUTABLE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") + # depend on version_check if enabled + if(FOAM_HAVE_GIT) + add_dependencies(${name} version_check) + endif() endfunction() # purge all export lists... @@ -757,9 +765,17 @@ function(foam_create_manpages) if(format STREQUAL manpage) add_custom_target(man DEPENDS ${man_out_list}) add_dependencies(doc man) + # depend on version_check if enabled + if(FOAM_HAVE_GIT) + add_dependencies(man version_check) + endif() else() add_custom_target(man-xhtml DEPENDS ${man_out_list}) add_dependencies(doc man-xhtml) + # depend on version_check if enabled + if(FOAM_HAVE_GIT) + add_dependencies(man-xhtml version_check) + endif() endif() endforeach() endfunction() diff --git a/CMakeLists.txt b/CMakeLists.txt index db8a225ba..def14c250 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,9 +39,12 @@ string(TOLOWER "${PROJECT_NAME}" LOWER_PROJECT_NAME) set(FOAM_VERSION_MAJOR 0) set(FOAM_VERSION_MINOR 1) set(FOAM_VERSION_PATCH 0) +set(FOAM_VERSION_SUFFIX rc5) set(FOAM_VERSION ${FOAM_VERSION_MAJOR}.${FOAM_VERSION_MINOR}) -set(FOAM_VERSION_FULL ${FOAM_VERSION}.${FOAM_VERSION_PATCH}) +set(FOAM_VERSION_FULL + ${FOAM_VERSION}.${FOAM_VERSION_PATCH}${FOAM_VERSION_SUFFIX}) set(FOAM_SOVERSION 1) +set(FOAM_UPSTREAM_VERSION_FULL 1.7.x-89fc6e6) # set up custom cmake module path set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMake/Modules) @@ -620,6 +623,35 @@ add_definitions(${FOAM_COMPILE_DEFINITIONS}) # set up include-directories for own headers include_directories(${CMAKE_BINARY_DIR}/include) +# set up version info checks +set(FOAM_HAVE_GIT FALSE) +if(EXISTS "${CMAKE_SOURCE_DIR}/.git/config") + find_package(Git) + if(GIT_FOUND) + set(FOAM_HAVE_GIT TRUE) + option(FOAM_VERSION_CHECK_WARN_ONLY + "Only warn if the version numbers are wrong" FALSE) + mark_as_advanced(FOAM_VERSION_CHECK_WARN_ONLY) + if(FOAM_VERSION_CHECK_WARN_ONLY) + set(_CHECK_VERSION_INFO_ARGS --warn) + else() + set(_CHECK_VERSION_INFO_ARGS) + endif() + add_custom_target(version_check ALL + COMMAND "${PYTHON_EXECUTABLE}" + "${CMAKE_BINARY_DIR}/data/utilities/checkVersionInfo.py" + ${_CHECK_VERSION_INFO_ARGS} + COMMENT "Checking version info" + VERBATIM) + else() + message(WARNING + "Not performing version checks because GIT_EXECUTABLE is missing") + endif() +else() + message(STATUS + "Not performing version checks because not in a Git checkout") +endif() + # descend into the sources... add_subdirectory(bin) add_subdirectory(etc) diff --git a/data/utilities/CMakeLists.txt b/data/utilities/CMakeLists.txt index 2262210b9..6eba90e41 100644 --- a/data/utilities/CMakeLists.txt +++ b/data/utilities/CMakeLists.txt @@ -29,13 +29,19 @@ # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #------------------------------------------------------------------------------- -foam_configure_files(noinstUtils - DESTDIR data/utilities +set(noinstUitlsSrcs checkApi.py.in compareDeps.py.in generateOpenFOAMDeps.py.in - postProcFreeFOAMDeps.py.in - ) + postProcFreeFOAMDeps.py.in) + +if(FOAM_HAVE_GIT) + list(APPEND noinstUitlsSrcs checkVersionInfo.py.in) +endif() + +foam_configure_files(noinstUtils + DESTDIR data/utilities + ${noinstUitlsSrcs}) if(NOT WIN32) set(FOAM_STRIP_SUFFIXES "\\.py\\.in$" "\\.in$") diff --git a/data/utilities/checkVersionInfo.py.in b/data/utilities/checkVersionInfo.py.in new file mode 100755 index 000000000..6f134548f --- /dev/null +++ b/data/utilities/checkVersionInfo.py.in @@ -0,0 +1,164 @@ +#!@PYTHON_EXECUTABLE@ +#------------------------------------------------------------------------------- +# ______ _ ____ __ __ +# | ____| _| |_ / __ \ /\ | \/ | +# | |__ _ __ ___ ___ / \| | | | / \ | \ / | +# | __| '__/ _ \/ _ ( (| |) ) | | |/ /\ \ | |\/| | +# | | | | | __/ __/\_ _/| |__| / ____ \| | | | +# |_| |_| \___|\___| |_| \____/_/ \_\_| |_| +# +# FreeFOAM: The Cross-Platform CFD Toolkit +# +# Copyright (C) 2008-2011 Michael Wild +# Gerber van der Graaf +#------------------------------------------------------------------------------- +# License +# This file is part of FreeFOAM. +# +# FreeFOAM is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# FreeFOAM is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with FreeFOAM; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +# Script +# checkVersionInfo [--warn] +# +# Description +# Verifies the version information contained in various files. +# +# Requires the source directory to be a git checkout +# +#------------------------------------------------------------------------------ + +"""Usage: checkVersionInfo.py + +Verifies the version information contained in various files. + +Options +------- +--warn Only warn about version information issues, don't treat them as errors. + +""" + +import sys +sys.path.insert(0, '@FOAM_PYTHON_DIR@') +from FreeFOAM.compat import * +import os +import os.path as op +import re +import subprocess + +# parse --warn argument if present +warnOnly = False +errText = 'ERROR:' +if len(sys.argv) == 2: + if sys.argv[1] == '--warn': + warnOnly = True + errText = 'WARNING:' + else: + echo('ERROR: unknown option "%s"'%sys.argv[1], file=sys.stderr) + sys.exit(1) +elif len(sys.argv) > 2: + echo('ERROR: too many arguments', file=sys.stderr) + sys.exit(1) + + +SOURCE_DIR = '@CMAKE_SOURCE_DIR@' +GIT_EXECUTABLE = '@GIT_EXECUTABLE@' +UPSTREAM_VERSION = '1.7.x' + +os.chdir(SOURCE_DIR) + +# get version info, output is of the form vX.Y.Z +v = subprocess.check_output( + [GIT_EXECUTABLE, 'describe', '--abbrev=0'])[1:].strip() +major, minor, patch = v.split('.') +rc = '' +idx = patch.find('rc', 1) +if idx > 0: + rc = patch[idx:] + patch = patch[:idx] + +# get upstream info +h = subprocess.check_output( + [GIT_EXECUTABLE, 'merge-base', 'HEAD', + 'origin/upstream/OpenFOAM-'+UPSTREAM_VERSION]).strip() +u = UPSTREAM_VERSION+'-'+subprocess.check_output( + [GIT_EXECUTABLE, 'log', '-1', '--pretty=format:%h', h]).strip() + +# checks to perform +retcode = 0 +checks = { + op.join(SOURCE_DIR, 'CMakeLists.txt'): { + 'FOAM_VERSION_MAJOR': { + 'regex': re.compile(r'set\(FOAM_VERSION_MAJOR\s+"?(\d+)'), + 'value': major, + 'found': False, + }, + 'FOAM_VERSION_MINOR': { + 'regex': re.compile(r'set\(FOAM_VERSION_MINOR\s+"?(\d+)'), + 'value': minor, + 'found': False, + }, + 'FOAM_VERSION_PATCH': { + 'regex': re.compile(r'set\(FOAM_VERSION_PATCH\s+"?(\d+)'), + 'value': patch, + 'found': False, + }, + 'FOAM_VERSION_SUFFIX': { + 'regex': re.compile(r'set\(FOAM_VERSION_SUFFIX\s*"?([^\")]*)'), + 'value': rc, + 'found': False, + }, + }, + op.join(SOURCE_DIR, 'data', 'asciidoc', 'common.conf'): { + 'shortver': { + 'regex': re.compile(r'^shortver=(\d+\.\d+)$'), + 'value': '%s.%s'%(major, minor), + 'found': False, + }, + 'ver': { + 'regex': re.compile(r'^ver=(\d+\.\d+\.\d+)$'), + 'value': '%s.%s.%s'%(major, minor, patch), + 'found': False, + }, + 'fullver': { + 'regex': re.compile(r'^fullver=(\d+\.\d+\.\d+\S*)$'), + 'value': '%s.%s.%s%s'%(major, minor, patch, rc), + 'found': False, + }, + }, + } + +# run checks +for fname, items in checks.iteritems(): + for l in open(fname, 'rt'): + for var, ctrl in items.iteritems(): + m = ctrl['regex'].search(l) + if m is not None: + ctrl['found'] = True + if m.group(1) != ctrl['value']: + retcode = 1 + echo('%s: %s in file %s is out of date. Should be "%s".'%( + errText, var, fname, ctrl['value']), file=sys.stderr) + +# verify that we found all version info +for fname, items in checks.iteritems(): + for var, ctrl in items.iteritems(): + if not ctrl['found']: + retcode = 1 + echo('%s: Failed to parse %s in file %s.'%(errText, var, fname)) + +if(not warnOnly): + sys.exit(retcode) + +# ------------------------- vim: set sw=3 sts=3 et: --------------- end-of-file diff --git a/doc/Doxygen/CMakeLists.txt b/doc/Doxygen/CMakeLists.txt index 40ab23555..c067eb817 100644 --- a/doc/Doxygen/CMakeLists.txt +++ b/doc/Doxygen/CMakeLists.txt @@ -105,6 +105,12 @@ add_custom_target(apidoc ${DOXYGEN_CMD_STRING} ) +# depend on version_check if enabled +if(FOAM_HAVE_GIT) + add_dependencies(apidoc-all version_check) + add_dependencies(apidoc version_check) +endif() + install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../html/API DESTINATION ${FOAM_INSTALL_DOC_PATH} COMPONENT apidoc ) diff --git a/doc/UserGuide/CMakeLists.txt b/doc/UserGuide/CMakeLists.txt index 094e380d0..e5dab1a5c 100644 --- a/doc/UserGuide/CMakeLists.txt +++ b/doc/UserGuide/CMakeLists.txt @@ -279,6 +279,10 @@ foreach(fmt IN LISTS FOAM_GUIDES_FORMATS) add_custom_target(UserGuide-${fmt} DEPENDS "${A2X_${fmt}_OUTPUT}") add_dependencies(UserGuides UserGuide-${fmt}) + # depend on version_check if enabled + if(FOAM_HAVE_GIT) + add_dependencies(UserGuide-${fmt} version_check) + endif() endforeach() if(FOAM_ENABLE_PDF_GUIDES) -- 2.11.4.GIT