diff --git a/qad/cmake/QADDeploy.cmake b/qad/cmake/QADDeploy.cmake index 763fc53..6da280e 100644 --- a/qad/cmake/QADDeploy.cmake +++ b/qad/cmake/QADDeploy.cmake @@ -1,8 +1,27 @@ +# set_version( [MAJOR ] [MINOR ] [REVISION ] [SUFFIX ] [BUILD ] [OUTPUT ]) +# +# Set target version, optionally creates file +# +# Create variable _VERSION with full version name +# +# If OUTPUT then generate header with +# version defines - _VERSION_ +# Also create define _VERSION with full string version +# +# +# +# +# import_version( ) +# +# Copy all version components from +# +# +# +# # set_deploy_property( [SHARED | STATIC] NAME [NAME [...]]) # # Set target deploy property, where NAME one of: # * LABEL - application icon name -# * VERSION - version # * FULLNAME - package name in format "*.*.*" # * COMPANY - company name # * ICON - icon file @@ -54,13 +73,97 @@ if (POLICY CMP0057) cmake_policy(SET CMP0057 NEW) # Support if() IN_LIST endif() -set(__prop_names "LABEL;VERSION;FULLNAME;COMPANY;ICON;INFO") +set(__prop_names "LABEL;FULLNAME;COMPANY;ICON;INFO") +set(__version_names "MAJOR;MINOR;REVISION;BUILD;SUFFIX") include(TargetArch) if (NOT MY_ARCH) target_architecture(MY_ARCH) endif() +macro(set_version _T) + set(_name) + set(_is_name 1) + set(_is_out 0) + set(_out) + foreach(_i ${ARGN}) + if (_is_out) + set(_is_out 0) + set(_out "${_i}") + elseif ("x${_i}" STREQUAL "xOUTPUT") + set(_is_out 1) + elseif(_is_name) + set(_is_name 0) + if (_i IN_LIST __version_names) + else() + message(FATAL_ERROR "Invalid version component \"${_i}\"!") + endif() + set(_name ${_i}) + else() + set(_is_name 1) + set(${_T}_VERSION_${_name} ${_i}) + endif() + endforeach() + set(${_T}_VERSION_FULLSUFFIX "${${_T}_VERSION_SUFFIX}") + if (NOT ("x${${_T}_VERSION_FULLSUFFIX}" STREQUAL "x")) + if(NOT ("${${_T}_VERSION_FULLSUFFIX}" MATCHES "_.*")) + set(${_T}_VERSION_FULLSUFFIX "_${${_T}_VERSION_FULLSUFFIX}") + endif() + endif() + if ("x${${_T}_VERSION_MAJOR}" STREQUAL "x") + set(${_T}_VERSION_MAJOR "0") + endif() + if ("x${${_T}_VERSION_MINOR}" STREQUAL "x") + set(${_T}_VERSION_MINOR "0") + endif() + if ("x${${_T}_VERSION_REVISION}" STREQUAL "x") + set(${_T}_VERSION_REVISION "0") + endif() + if ("x${${_T}_VERSION_BUILD}" STREQUAL "x") + set(${_T}_VERSION_BUILD "0") + endif() + set(${_T}_VERSION "${${_T}_VERSION_MAJOR}.${${_T}_VERSION_MINOR}.${${_T}_VERSION_REVISION}${${_T}_VERSION_FULLSUFFIX}") + set(_${_T}_VERSION_WB "${${_T}_VERSION}-${${_T}_VERSION_BUILD}") + if (_out) + set(_${_T}_VERSION_CHANGED 0) + if ((NOT _${_T}_CACHED_VERSION) OR (NOT ("x${_${_T}_CACHED_VERSION}" STREQUAL "x${_${_T}_VERSION_WB}"))) + set(_${_T}_CACHED_VERSION "${_${_T}_VERSION_WB}" CACHE STRING "" FORCE) + set(_${_T}_VERSION_CHANGED 1) + endif() + if ((NOT EXISTS "${_out}") OR _${_T}_VERSION_CHANGED) + get_filename_component(_def "${_out}" NAME) + string(MAKE_C_IDENTIFIER "${_T}_${_def}" _def) + string(TOUPPER "${_def}" _def) + string(TOUPPER "${_T}" _TN) + file(WRITE "${_out}" +"// This file generated by CMake set_version() + +#ifndef ${_def} +#define ${_def} + +#define ${_TN}_VERSION_MAJOR ${${_T}_VERSION_MAJOR} +#define ${_TN}_VERSION_MINOR ${${_T}_VERSION_MINOR} +#define ${_TN}_VERSION_REVISION ${${_T}_VERSION_REVISION} +#define ${_TN}_VERSION_BUILD ${${_T}_VERSION_BUILD} +#define ${_TN}_VERSION_SUFFIX \"${${_T}_VERSION_SUFFIX}\" +#define ${_TN}_VERSION \"${${_T}_VERSION}\" + +#endif // ${_def} +") + endif() + endif() +endmacro() + + +macro(import_version _T _F) + set(_names "${__version_names};FULLSUFFIX") + foreach(_i ${_names}) + set(${_T}_VERSION_${_i} "${${_F}_VERSION_${_i}}") + endforeach() + set(${_T}_VERSION "${${_F}_VERSION}") +endmacro() + + macro(set_deploy_property _T) set(_name) set(_is_name 1) @@ -98,7 +201,7 @@ macro(make_rc _T _out) endif() get_filename_component(WINDOWS_RC_ICON "${${_T}_ICON}" REALPATH BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(_rc_file "${CMAKE_CURRENT_BINARY_DIR}/winres.rc") - file(WRITE ${_rc_file} + file(WRITE "${_rc_file}" "# if defined(UNDER_CE) # include # else