mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 13:30:52 -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()
							 |