mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -04: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()
 |