cmake_policy(SET CMP0011 NEW) # don`t affect includer policies if (POLICY CMP0057) cmake_policy(SET CMP0057 NEW) # Support if() IN_LIST endif() if (POLICY CMP0053) cmake_policy(SET CMP0053 NEW) endif() set(__prop_names "LABEL;FULLNAME;COMPANY;ICON;INFO;BUILDTYPE") list(APPEND __prop_names "ANDROID_TARGET_SDK;ANDROID_STORE_FILE;ANDROID_STORE_PASSWORD;ANDROID_KEY_PASSWORD;ANDROID_KEY_ALIAS;ANDROID_NEW_LOADER") set(__version_names "MAJOR;MINOR;REVISION;BUILD;SUFFIX") include(TargetArch) if (NOT MY_ARCH) target_architecture(MY_ARCH) endif() macro(set_version _T) set(_VERSION_ 3) # macro version set(_name) set(_is_name 1) set(_is_out 0) set(_out) #message("set_version \"${_T}\"") 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) #message("set_version component \"${_i}\"") set(_is_name 0) if (_i IN_LIST __version_names) else() message(FATAL_ERROR "Invalid version component \"${_i}\"!") endif() set(_name ${_i}) set(${_T}_VERSION_${_name}) else() #message("set_version value \"${_name}\" = \"${_i}\"") 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}_BUILDTYPE "${CMAKE_BUILD_TYPE}") 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 _${_T}_CACHED_VERSION_VER) OR (NOT ("x${_${_T}_CACHED_VERSION_VER}" STREQUAL "x${_VERSION_}"))) set(_${_T}_CACHED_VERSION_VER "${_VERSION_}" 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) string(TIMESTAMP _cur_date "%d.%m.%Y %H:%M") file(WRITE "${_out}" "// This file generated by CMake set_version() version ${_VERSION_} #ifndef ${_def} #define ${_def} // Project #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_NAME \"${${_T}_VERSION}\" #define ${_TN}_MAKE_VERSION(major, minor, revision) ((major << 16) | (minor << 8) | revision) #define ${_TN}_VERSION ${_TN}_MAKE_VERSION(${_TN}_VERSION_MAJOR, ${_TN}_VERSION_MINOR, ${_TN}_VERSION_REVISION) // Tools #define ${_TN}_CMAKE_VERSION \"${CMAKE_VERSION}\" #define ${_TN}_CXX_COMPILER \"${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}\" #define ${_TN}_BUILD_DATE \"${_cur_date}\" #define ${_TN}_BUILD_TYPE \"${${_T}_BUILDTYPE}\" #define ${_TN}_ARCH \"${MY_ARCH}\" #endif // ${_def} ") endif() endif() endmacro() macro(set_lang _T) set(${_T}_LANG) foreach(_i ${ARGN}) list(APPEND ${_T}_LANG "${_i}") endforeach() endmacro() macro(import_version _T _F) if (NOT "x${_T}" STREQUAL "x${_F}") set(_names "${__version_names};FULLSUFFIX") foreach(_i ${_names}) set(${_T}_VERSION_${_i} "${${_F}_VERSION_${_i}}") endforeach() set(${_T}_VERSION "${${_F}_VERSION}") set(${_T}_LANG "${${_F}_LANG}") endif() endmacro() macro(import_deploy_properties _T _F) if (NOT "x${_T}" STREQUAL "x${_F}") foreach(_i ${__prop_names}) set(${_T}_${_i} "${${_F}_${_i}}") endforeach() endif() endmacro() macro(set_deploy_property _T) set(_name) set(_is_name 1) foreach(_i ${ARGN}) if (("x${_i}" STREQUAL "xSHARED") OR ("x${_i}" STREQUAL "xSTATIC")) set(${_T}_TYPE "${_i}") elseif(_is_name) set(_is_name 0) if (_i IN_LIST __prop_names) else() message(FATAL_ERROR "Invalid property name \"${_i}\"!") endif() set(_name ${_i}) else() set(_is_name 1) set(${_T}_${_name} ${_i}) endif() endforeach() endmacro() macro(make_rc _T _out) if (WIN32) if ("x${${_T}_VERSION_MAJOR}" STREQUAL "x") message(FATAL_ERROR "Version for \"${_T}\" not set, use set_version()!") endif() if ("x${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "xWindows") set(CMAKE_RC_COMPILE_OBJECT " -O coff ") endif() string(REPLACE "\"" "\"\"" WINDOWS_RC_FULLNAME "${${_T}_FULLNAME}") string(REPLACE "\"" "\"\"" WINDOWS_RC_VERSION "${${_T}_VERSION}" ) string(REPLACE "\"" "\"\"" WINDOWS_RC_LABEL "${${_T}_LABEL}" ) string(REPLACE "\"" "\"\"" WINDOWS_RC_COMPANY "${${_T}_COMPANY}" ) string(REPLACE "\"" "\"\"" WINDOWS_RC_INFO "${${_T}_INFO}" ) if (("x${${_T}_TYPE}" STREQUAL "x") OR ("x${${_T}_TYPE}" STREQUAL "xEXECUTABLE")) set(WINDOWS_RC_FILETYPE "0x1L") set(_rc_prefix "") set(_rc_ext "exe") elseif ("x${${_T}_TYPE}" STREQUAL "xSHARED") set(WINDOWS_RC_FILETYPE "0x2L") set(_rc_prefix "lib") set(_rc_ext "dll") elseif ("x${${_T}_TYPE}" STREQUAL "xSTATIC") set(WINDOWS_RC_FILETYPE "0x7L") set(_rc_prefix "lib") set(_rc_ext "a") endif() set(_rc_version "${${_T}_VERSION_MAJOR},${${_T}_VERSION_MINOR},${${_T}_VERSION_REVISION},${${_T}_VERSION_BUILD}") set(_icon) if (NOT ("x${${_T}_ICON}" STREQUAL "x")) get_filename_component(WINDOWS_RC_ICON "${${_T}_ICON}" REALPATH BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(_icon "1 ICON \"${WINDOWS_RC_ICON}\"") endif() set(_rc_file "${CMAKE_CURRENT_BINARY_DIR}/${_T}_winres.rc") file(WRITE "${_rc_file}" "# if defined(UNDER_CE) # include # else # include # endif #pragma code_page(65001) ${_icon} VS_VERSION_INFO VERSIONINFO FILEVERSION ${_rc_version} PRODUCTVERSION ${_rc_version} FILEFLAGSMASK 0x3fL FILEFLAGS 0x0L FILEOS 0x40004L FILETYPE ${WINDOWS_RC_FILETYPE} FILESUBTYPE 0x0L BEGIN BLOCK \"StringFileInfo\" BEGIN BLOCK \"041904B0\" BEGIN VALUE \"Comments\", \"\\0\" VALUE \"CompanyName\", \"${WINDOWS_RC_COMPANY}\\0\" VALUE \"FileDescription\", \"${WINDOWS_RC_INFO}\\0\" VALUE \"FileVersion\", \"${WINDOWS_RC_VERSION}\\0\" VALUE \"InternalName\", \"${WINDOWS_RC_FULLNAME}\\0\" VALUE \"LegalTrademarks\", \"\\0\" VALUE \"LegalCopyright\", \"${WINDOWS_RC_COMPANY}\\0\" VALUE \"OriginalFilename\", \"${_rc_prefix}${_T}.${_rc_ext}\\0\" VALUE \"ProductName\", \"${WINDOWS_RC_LABEL}\\0\" VALUE \"ProductVersion\", \"${WINDOWS_RC_VERSION}\\0\" END END BLOCK \"VarFileInfo\" BEGIN VALUE \"Translation\", 0x0419, 0x04B0, 0x0409, 0x04B0 END END ") set(${_out} ${_rc_file}) else() set(${_out}) endif() endmacro()