mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-22 20:28:42 -05:00
168 lines
5.1 KiB
CMake
168 lines
5.1 KiB
CMake
|
include (CMakeParseArguments)
|
||
|
|
||
|
set (_THIS_MODULE_BASE_DIR "${CMAKE_CURRENT_LIST_DIR}")
|
||
|
|
||
|
# generate_product_version() function
|
||
|
#
|
||
|
# This function uses VersionInfo.in template file and VersionResource.rc file
|
||
|
# to generate WIN32 resource with version information and general resource strings.
|
||
|
#
|
||
|
# Usage:
|
||
|
# generate_product_version(
|
||
|
# SomeOutputResourceVariable
|
||
|
# NAME MyVersinedTarget
|
||
|
# ICON ${PATH_TO_ICON}
|
||
|
# VERSION_MAJOR 2
|
||
|
# VERSION_MINOR 3
|
||
|
# VERSION_PATCH 1
|
||
|
# VERSION_REVISION sha1
|
||
|
# )
|
||
|
#
|
||
|
# You can use generated resource for your executable targets:
|
||
|
# add_executable(target-name ${target-files} ${SomeOutputResourceVariable})
|
||
|
# add_library (target-name SHARED ${target-files} ${SomeOutputResourceVariable})
|
||
|
#
|
||
|
# You can specify resource strings in arguments:
|
||
|
# NAME - name of executable (no defaults, ex: Microsoft Word)
|
||
|
# BUNDLE - bundle (${PROJECT_NAME} or ${NAME} is default, ex: Microsoft Office)
|
||
|
# ICON - path to application icon, default: ${CMAKE_SOURCE_DIR}/icons/windows-icons/${NAME}.ico
|
||
|
# VERSION_MAJOR - default: 1
|
||
|
# VERSION_MINOR - deafult: 0
|
||
|
# VERSION_PATCH - deafult: 0
|
||
|
# VERSION_REVISION - deafult: 0
|
||
|
# VENDOR_NAME - your vendor name, default: ${PROJECT_VENDOR}
|
||
|
# LEGAL_COPYRIGHT - default: ${PROJECT_COPYRIGHT}
|
||
|
# COMMENTS - default: ${PROJECT_DESCRIPTION}
|
||
|
# ORIGINAL_FILENAME - default: ${NAME}
|
||
|
# INTERNAL_NAME - default: ${NAME}
|
||
|
# FILE_DESCRIPTION - default: ${COMMENTS}
|
||
|
function(generate_version_info outfiles)
|
||
|
set (options)
|
||
|
set (oneValueArgs
|
||
|
NAME
|
||
|
BUNDLE
|
||
|
ICON
|
||
|
VERSION_MAJOR
|
||
|
VERSION_MINOR
|
||
|
VERSION_PATCH
|
||
|
VERSION_REVISION
|
||
|
VENDOR_NAME
|
||
|
LEGAL_COPYRIGHT
|
||
|
COMMENTS
|
||
|
ORIGINAL_FILENAME
|
||
|
INTERNAL_NAME
|
||
|
FILE_DESCRIPTION)
|
||
|
set (multiValueArgs)
|
||
|
cmake_parse_arguments(PRODUCT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||
|
|
||
|
if (NOT PRODUCT_BUNDLE)
|
||
|
if (PROJECT_NAME)
|
||
|
set (PRODUCT_BUNDLE "${PROJECT_NAME}")
|
||
|
else ()
|
||
|
set (PRODUCT_BUNDLE "${PRODUCT_NAME}")
|
||
|
endif ()
|
||
|
endif()
|
||
|
|
||
|
if (NOT PRODUCT_ICON)
|
||
|
set (PRODUCT_ICON "${CMAKE_SOURCE_DIR}/icons/windows-icons/${PRODUCT_NAME}.ico")
|
||
|
endif ()
|
||
|
|
||
|
if (NOT PRODUCT_VERSION_MAJOR)
|
||
|
if (PROJECT_VERSION_MAJOR)
|
||
|
set (PRODUCT_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
|
||
|
else ()
|
||
|
set (PRODUCT_VERSION_MAJOR 1)
|
||
|
endif ()
|
||
|
else ()
|
||
|
if (NOT ${PRODUCT_VERSION_MAJOR} MATCHES "^[0-9]+$")
|
||
|
message (FATAL_ERROR "Numeric major version number required")
|
||
|
endif ()
|
||
|
endif ()
|
||
|
|
||
|
if (NOT PRODUCT_VERSION_MINOR)
|
||
|
if (PROJECT_VERSION_MINOR)
|
||
|
set (PRODUCT_VERSION_MINOR ${PROJECT_VERSION_MINOR})
|
||
|
else ()
|
||
|
set (PRODUCT_VERSION_MINOR 0)
|
||
|
endif ()
|
||
|
else ()
|
||
|
if (NOT ${PRODUCT_VERSION_MINOR} MATCHES "^[0-9]+$")
|
||
|
message (FATAL_ERROR "Numeric minor version number required")
|
||
|
endif ()
|
||
|
endif()
|
||
|
|
||
|
if (NOT PRODUCT_VERSION_PATCH)
|
||
|
if (PROJECT_VERSION_PATCH)
|
||
|
set (PRODUCT_VERSION_PATCH ${PROJECT_VERSION_PATCH})
|
||
|
else ()
|
||
|
set (PRODUCT_VERSION_PATCH 0)
|
||
|
endif ()
|
||
|
else ()
|
||
|
if (NOT ${PRODUCT_VERSION_PATCH} MATCHES "^[0-9]+$")
|
||
|
message (FATAL_ERROR "Numeric patch version number required")
|
||
|
endif ()
|
||
|
endif()
|
||
|
|
||
|
if (NOT PRODUCT_VERSION_TWEAK)
|
||
|
if (PROJECT_VERSION_TWEAK)
|
||
|
set (PRODUCT_VERSION_TWEAK ${PROJECT_VERSION_TWEAK})
|
||
|
else ()
|
||
|
set (PRODUCT_VERSION_TWEAK 0)
|
||
|
endif ()
|
||
|
else()
|
||
|
if (NOT ${PRODUCT_VERSION_TWEAK} MATCHES "^[0-9]+$")
|
||
|
message (FATAL_ERROR "Numeric tweak version number required")
|
||
|
endif()
|
||
|
endif()
|
||
|
|
||
|
if (NOT PROJECT_VERSION_REVISION AND BUILD_TYPE_REVISION)
|
||
|
set (PRODUCT_VERSION_REVISION ${BUILD_TYPE_REVISION})
|
||
|
endif ()
|
||
|
|
||
|
if (NOT PRODUCT_VENDOR_NAME AND PROJECT_VENDOR)
|
||
|
set (PRODUCT_VENDOR_NAME ${PROJECT_VENDOR})
|
||
|
endif ()
|
||
|
|
||
|
if (NOT PRODUCT_LEGAL_COPYRIGHT)
|
||
|
if (PROJECT_COPYRIGHT)
|
||
|
set (PRODUCT_LEGAL_COPYRIGHT ${PROJECT_COPYRIGHT})
|
||
|
else ()
|
||
|
string(TIMESTAMP PRODUCT_CURRENT_YEAR "%Y")
|
||
|
set(PRODUCT_LEGAL_COPYRIGHT "${PRODUCT_VENDOR_NAME} (C) Copyright ${PRODUCT_CURRENT_YEAR}")
|
||
|
endif ()
|
||
|
endif()
|
||
|
|
||
|
if (NOT PRODUCT_COMMENTS)
|
||
|
if (PROJECT_DESCRIPTION)
|
||
|
set(PRODUCT_COMMENTS ${PROJECT_DESCRIPTION})
|
||
|
else ()
|
||
|
set(PRODUCT_COMMENTS "${PRODUCT_NAME} v${PRODUCT_VERSION_MAJOR}.${PRODUCT_VERSION_MINOR}.${PRODUCT_VERSION_PATCH}")
|
||
|
endif ()
|
||
|
endif()
|
||
|
|
||
|
if (NOT PRODUCT_ORIGINAL_FILENAME)
|
||
|
set(PRODUCT_ORIGINAL_FILENAME "${PRODUCT_NAME}")
|
||
|
endif()
|
||
|
|
||
|
if (NOT PRODUCT_INTERNAL_NAME)
|
||
|
set(PRODUCT_INTERNAL_NAME "${PRODUCT_NAME}")
|
||
|
endif()
|
||
|
|
||
|
if (NOT PRODUCT_FILE_DESCRIPTION)
|
||
|
set(PRODUCT_FILE_DESCRIPTION "${PRODUCT_COMMENTS}")
|
||
|
endif()
|
||
|
|
||
|
set (_VersionInfoFile VersionInfo_${PRODUCT_NAME}.h)
|
||
|
set (_VersionResourceFile VersionResource_${PRODUCT_NAME}.rc)
|
||
|
configure_file(
|
||
|
${_THIS_MODULE_BASE_DIR}/VersionInfo.h.in
|
||
|
${_VersionInfoFile}
|
||
|
@ONLY)
|
||
|
configure_file(
|
||
|
${_THIS_MODULE_BASE_DIR}/VersionResource.rc.in
|
||
|
${_VersionResourceFile}
|
||
|
@ONLY)
|
||
|
list(APPEND ${outfiles} ${CMAKE_CURRENT_BINARY_DIR}/${_VersionInfoFile} ${CMAKE_CURRENT_BINARY_DIR}/${_VersionResourceFile})
|
||
|
set (${outfiles} ${${outfiles}} PARENT_SCOPE)
|
||
|
endfunction()
|