summaryrefslogtreecommitdiff
path: root/CMakeModules/WriteVersionHeader.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeModules/WriteVersionHeader.cmake')
-rw-r--r--CMakeModules/WriteVersionHeader.cmake88
1 files changed, 88 insertions, 0 deletions
diff --git a/CMakeModules/WriteVersionHeader.cmake b/CMakeModules/WriteVersionHeader.cmake
new file mode 100644
index 0000000..013a36a
--- /dev/null
+++ b/CMakeModules/WriteVersionHeader.cmake
@@ -0,0 +1,88 @@
+#
+# This program source code file is part of KICAD, a free EDA CAD application.
+#
+# Copyright (C) 2015 Wayne Stambaugh <stambaughw@verizon.net>
+# Copyright (C) 2015-2016 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
+#
+
+# Automagically create version header file if the version string was
+# not defined during the build configuration. If
+# CreateGitVersionHeader cannot determine the current repo version, a
+# version.h file is still created with KICAD_VERSION set to "no-vcs-found".
+include( ${CMAKE_MODULE_PATH}/KiCadVersion.cmake )
+
+# Attempt to detect if we have a git repo and set the version string if
+# the version wasn't set to something other than the default value in
+# KiCadVersion.cmake.
+if( KICAD_VERSION STREQUAL "no-vcs-found" AND EXISTS "${SRC_PATH}/.git" )
+ message( STATUS "Using Git to determine build version string." )
+ include( ${CMAKE_MODULE_PATH}/CreateGitVersionHeader.cmake )
+ create_git_version_header( ${SRC_PATH} )
+endif()
+
+# $KICAD_VERSION_FULL will always be set to something. Even if it is "no-vcs-found".
+set( KICAD_VERSION_FULL "${KICAD_VERSION}" )
+
+# Optional branch name detected by git or configuration defined option.
+if( KICAD_BRANCH_NAME )
+ set( KICAD_VERSION_FULL "${KICAD_VERSION_FULL}-${KICAD_BRANCH_NAME}" )
+endif()
+
+# Optional user version information defined at configuration.
+if( KICAD_VERSION_EXTRA )
+ set( KICAD_VERSION_FULL "${KICAD_VERSION_FULL}-${KICAD_VERSION_EXTRA}" )
+endif()
+
+set( _wvh_new_version_text
+"/* Do not modify this file, it was automatically generated by CMake. */
+
+/*
+ * Define the KiCad build version string.
+ */
+#ifndef __KICAD_VERSION_H__
+#define __KICAD_VERSION_H__
+
+#define KICAD_VERSION_FULL \"${KICAD_VERSION_FULL}\"
+
+#endif /* __KICAD_VERSION_H__ */
+" )
+
+set( _wvh_write_version_file ON )
+
+# Only write the header if it has changed, to avoid rebuilds
+if( EXISTS ${OUTPUT_FILE} )
+ file( READ ${OUTPUT_FILE} _wvh_old_version_text )
+ if( _wvh_old_version_text STREQUAL _wvh_new_version_text )
+ message( STATUS "Not updating ${OUTPUT_FILE}" )
+ set( _wvh_write_version_file OFF )
+ endif()
+endif()
+
+if( _wvh_write_version_file )
+ message( STATUS "Writing ${OUTPUT_FILE} file with version: ${KICAD_VERSION_FULL}" )
+
+ file( WRITE ${OUTPUT_FILE} ${_wvh_new_version_text} )
+
+endif()
+
+# There should always be a valid version.h file. Otherwise, the build will fail.
+if( NOT EXISTS ${OUTPUT_FILE} )
+ message( FATAL_ERROR "Configuration failed to write file ${OUTPUT_FILE}." )
+endif()