245 lines
7.3 KiB
CMake
245 lines
7.3 KiB
CMake
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 "<CMAKE_RC_COMPILER> -O coff <SOURCE> <OBJECT>")
|
|
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 <winbase.h>
|
|
# else
|
|
# include <winver.h>
|
|
# 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()
|