mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 13:10:19 -04:00 
			
		
		
		
	Version information  and more  in the  Windows resources  for main
    applications, installer and un-installer.
    Update  CMake   policies  for  new  project()   command,  and  DEB
    dependency changes
    Support  older  libgfortran  packages,  and  other  Linux  package
    dependencies.
    Use new project description file in Debian packaging.
    Linux packaging dependency adjustments  for Debian style packages,
    including  a machine  readable  Debian  copyright format,  project
    description in separate file for  CPack compatibility, and use for
    DEB packaging.
    Configure check for need to link libm Standard C Math Library.
    CMake compatibility for <3.17.
		
	
			
		
			
				
	
	
		
			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()
 |