diff --git a/CMakeLists.txt b/CMakeLists.txt index 74410f4140..e5c8c8a782 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -150,8 +150,8 @@ if(WIN32 AND USE_WX_GRAPHICS_CONTEXT) endif(WIN32 AND USE_WX_GRAPHICS_CONTEXT) # Automagically create version header file. -include(CreateSVNVersionHeader) -create_svn_version_header() +include(CreateBzrVersionHeader) +create_bzr_version_header() if(EXISTS ${CMAKE_SOURCE_DIR}/include/config.h) # This file may exist (created by an alternate process to the svn test above), diff --git a/CMakeModules/CreateBzrVersionHeader.cmake b/CMakeModules/CreateBzrVersionHeader.cmake new file mode 100644 index 0000000000..9964686741 --- /dev/null +++ b/CMakeModules/CreateBzrVersionHeader.cmake @@ -0,0 +1,75 @@ +# +# This program source code file is part of KICAD, a free EDA CAD application. +# +# Copyright (C) 2010 Wayne Stambaugh +# Copyright (C) 2010 Kicad Developers, see AUTHORS.txt for contributors. +# +# This program 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. +# +# This program 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 this program; if not, you may find one here: +# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html +# or you may search the http://www.gnu.org website for the version 2 license, +# or you may write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +# + +macro( create_bzr_version_header ) + # Include Bazaar support to automagically create version header file. + find_package( Bazaar ) + + if( Bazaar_FOUND ) + set( _Bazaar_SAVED_LC_ALL "$ENV{LC_ALL}" ) + set( ENV{LC_ALL} C ) + + execute_process( COMMAND + ${Bazaar_EXECUTABLE} log -r-1 ${PROJECT_SOURCE_DIR} + OUTPUT_VARIABLE _bazaar_LAST_CHANGE_LOG + ERROR_VARIABLE _bazaar_log_error + RESULT_VARIABLE _bazaar_log_result + OUTPUT_STRIP_TRAILING_WHITESPACE ) + + if( NOT ${_bzr_log_result} EQUAL 0 ) + message(STATUS "Using for version string.") + else( NOT ${_bzr_log_result} EQUAL 0 ) + string( REGEX REPLACE "^(.*\n)?revno: ([^ \n]+).*" + "\\2" Kicad_REPO_REVISION "${_bazaar_LAST_CHANGE_LOG}" ) + string( REGEX REPLACE "^(.*\n)?committer: ([^\n]+).*" + "\\2" Kicad_REPO_LAST_CHANGED_AUTHOR "${_bazaar_LAST_CHANGE_LOG}" ) + string( REGEX REPLACE "^(.*\n)?timestamp: [a-zA-Z]+ ([^ \n]+).*" + "\\2" Kicad_REPO_LAST_CHANGED_DATE "${_bazaar_LAST_CHANGE_LOG}" ) + endif( NOT ${_bzr_log_result} EQUAL 0 ) + + set( ENV{LC_ALL} ${_Bazaar_SAVED_LC_ALL} ) + endif( Bazaar_FOUND ) + + # Check to make sure 'bzr log' command did not fail. Otherwise fallback + # to version strings defined in "/include/build_version.h". + if( Kicad_REPO_LAST_CHANGED_DATE ) + string( REGEX REPLACE "^([0-9]+)\\-([0-9]+)\\-([0-9]+)" "\\1-\\2-\\3" + _kicad_bzr_date ${Kicad_REPO_LAST_CHANGED_DATE} ) + set( KICAD_BUILD_VERSION "(${_kicad_bzr_date} BZR ${Kicad_REPO_REVISION})" ) + + # Definition to conditionally use date and revision returned from the + # Bazaar log command instead of hand coded date and revision in + # "include/build_version.h". If Bazaar is not found then the date + # and version information must be manually edited. + # Directive means bzr build, program version and build version will + # reflect this. + add_definitions( -DHAVE_SVN_VERSION ) + + # Generate version.h. + configure_file( ${CMAKE_SOURCE_DIR}/CMakeModules/version.h.cmake + ${CMAKE_BINARY_DIR}/version.h) + + message( STATUS "Kicad Bazaar build version: ${KICAD_BUILD_VERSION}") + endif(Kicad_REPO_LAST_CHANGED_DATE) +endmacro(create_bzr_version_header) diff --git a/CMakeModules/FindBazaar.cmake b/CMakeModules/FindBazaar.cmake new file mode 100644 index 0000000000..673cf2b7e4 --- /dev/null +++ b/CMakeModules/FindBazaar.cmake @@ -0,0 +1,81 @@ +# +# This program source code file is part of KICAD, a free EDA CAD application. +# +# Copyright (C) 2010 Wayne Stambaugh +# Copyright (C) 2010 Kicad Developers, see AUTHORS.txt for contributors. +# +# This program 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. +# +# This program 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 this program; if not, you may find one here: +# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html +# or you may search the http://www.gnu.org website for the version 2 license, +# or you may write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +# +# This CMake script finds the Bazaar version control system executable and +# and fetches the veresion string to valid that Bazaar was found and executes +# properly. +# +# Usage: +# find_package( Bazaar ) +# +# User definable. +# Bazaar_EXECUTABLE Set this to use a version of Bazaar that is not in +# current path. Defaults to bzr. +# +# Defines: +# Bazaar_FOUND Set to TRUE if Bazaar command line client is found +# and the bzr --version command executes properly. +# Bazaar_VERSION Result of the bzr --version command. +# + +set( Bazaar_FOUND FALSE ) + +find_program( Bazaar_EXECUTABLE bzr + DOC "Bazaar version control system command line client" ) +mark_as_advanced( Bazaar_EXECUTABLE ) + +if( Bazaar_EXECUTABLE ) + + # Bazaar commands should be executed with the C locale, otherwise + # the message (which are parsed) may be translated causing the regular + # expressions to fail. + set( _Bazaar_SAVED_LC_ALL "$ENV{LC_ALL}" ) + set( ENV{LC_ALL} C ) + + # Fetch the Bazaar executable version. + execute_process( COMMAND ${Bazaar_EXECUTABLE} --version + OUTPUT_VARIABLE bzr_version_output + ERROR_VARIABLE _bzr_version_error + RESULT_VARIABLE _bzr_version_result + OUTPUT_STRIP_TRAILING_WHITESPACE ) + + if( ${_bzr_version_result} EQUAL 0 ) + set( Bazaar_FOUND TRUE ) + string( REGEX REPLACE "^(.*\n)? \(bzr\) ([^\n]+).*" + "\\2" Bazaar_VERSION "${_bzr_version_output}" ) + message( STATUS "Bazaar version control system version ${Bazaar_VERSION} found." ) + endif( ${_bzr_version_result} EQUAL 0 ) + + # restore the previous LC_ALL + set( ENV{LC_ALL} ${_Bazaar_SAVED_LC_ALL} ) +endif( Bazaar_EXECUTABLE ) + +if( NOT Bazaar_FOUND ) + if( NOT Bazaar_FIND_QUIETLY ) + message( STATUS "Bazaar version control command line client was not found." ) + else( NOT Bazaar_FIND_QUIETLY ) + if( Bazaar_FIND_REQUIRED ) + message( FATAL_ERROR "Bazaar version control command line client was not found." ) + endif( Bazaar_FIND_REQUIRED ) + endif( NOT Bazaar_FIND_QUIETLY ) +endif( NOT Bazaar_FOUND )