diff --git a/qt.conf b/qt.conf deleted file mode 100644 index 7963d66..0000000 --- a/qt.conf +++ /dev/null @@ -1,2 +0,0 @@ -[Paths] -Prefix = .. diff --git a/utils.cmake b/utils.cmake index 902779d..fe33694 100644 --- a/utils.cmake +++ b/utils.cmake @@ -717,3 +717,259 @@ function(setup_translations) install(FILES ${__qm_files} DESTINATION "${__inst_dir}") endif() endfunction() + +function(generate_win32_rc_file) + cmake_parse_arguments(RC_ARGS "LIBRARY" "PATH;COMMENTS;COMPANY;DESCRIPTION;VERSION;INTERNAL_NAME;COPYRIGHT;TRADEMARK;ORIGINAL_FILENAME;PRODUCT" "ICONS" ${ARGN}) + if(NOT RC_ARGS_PATH) + message(AUTHOR_WARNING "generate_win32_rc_file: You need to specify where to put the generated rc file for this function!") + return() + endif() + if(RC_ARGS_UNPARSED_ARGUMENTS) + message(AUTHOR_WARNING "generate_win32_rc_file: Unrecognized arguments: ${RC_ARGS_UNPARSED_ARGUMENTS}") + return() + endif() + set(__file_type) + if(RC_ARGS_LIBRARY) + set(__file_type "VFT_DLL") + else() + set(__file_type "VFT_APP") + endif() + set(__icons) + if(RC_ARGS_ICONS) + set(__index 1) + foreach(__icon IN LISTS RC_ARGS_ICONS) + string(APPEND __icons "IDI_ICON${__index} ICON \"${__icon}\"\n") + math(EXPR __index "${__index} +1") + endforeach() + endif() + set(__comments) + if(RC_ARGS_COMMENTS) + set(__comments "${RC_ARGS_COMMENTS}") + endif() + set(__company) + if(RC_ARGS_COMPANY) + set(__company "${RC_ARGS_COMPANY}") + endif() + set(__description) + if(RC_ARGS_DESCRIPTION) + set(__description "${RC_ARGS_DESCRIPTION}") + endif() + set(__version) + if(RC_ARGS_VERSION) + if(RC_ARGS_VERSION MATCHES "[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+") + # The given version string is valid, nothing to do. + elseif(RC_ARGS_VERSION MATCHES "[0-9]+\\.[0-9]+\\.[0-9]+") + set(__version "${RC_ARGS_VERSION}.0") + elseif(RC_ARGS_VERSION MATCHES "[0-9]+\\.[0-9]+") + set(__version "${RC_ARGS_VERSION}.0.0") + elseif(RC_ARGS_VERSION MATCHES "[0-9]+") + set(__version "${RC_ARGS_VERSION}.0.0.0") + else() + message(FATAL_ERROR "generate_win32_rc_file: Invalid version format: '${RC_ARGS_VERSION}'") + endif() + else() + set(__version "0.0.0.0") + endif() + set(__version_comma) + string(REPLACE "." "," __version_comma ${__version}) + set(__internal_name) + if(RC_ARGS_INTERNAL_NAME) + set(__internal_name "${RC_ARGS_INTERNAL_NAME}") + endif() + set(__copyright) + if(RC_ARGS_COPYRIGHT) + set(__copyright "${RC_ARGS_COPYRIGHT}") + endif() + set(__trademark) + if(RC_ARGS_TRADEMARK) + set(__trademark "${RC_ARGS_TRADEMARK}") + endif() + set(__original_filename) + if(RC_ARGS_ORIGINAL_FILENAME) + set(__original_filename "${RC_ARGS_ORIGINAL_FILENAME}") + endif() + set(__product) + if(RC_ARGS_PRODUCT) + set(__product "${RC_ARGS_PRODUCT}") + endif() + set(__contents "// This file is auto-generated by CMake. DO NOT EDIT! ALL MODIFICATIONS WILL BE LOST! + +#include // Use lower-cased file names to be compatible with MinGW. + +${__icons} + +VS_VERSION_INFO VERSIONINFO +FILEVERSION ${__version_comma} +PRODUCTVERSION ${__version_comma} +FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else // !_DEBUG + FILEFLAGS 0x0L +#endif // _DEBUG +FILEOS VOS_NT_WINDOWS32 +FILETYPE ${__file_type} +FILESUBTYPE VFT2_UNKNOWN +BEGIN + BLOCK \"StringFileInfo\" + BEGIN + BLOCK \"040904b0\" + BEGIN + VALUE \"CompanyName\", \"${__company}\\0\" + VALUE \"FileDescription\", \"${__description}\\0\" + VALUE \"FileVersion\", \"${__version}\\0\" + VALUE \"LegalCopyright\", \"${__copyright}\\0\" + VALUE \"OriginalFilename\", \"${__original_filename}\\0\" + VALUE \"ProductName\", \"${__product}\\0\" + VALUE \"ProductVersion\", \"${__version}\\0\" + VALUE \"Comments\", \"${__comments}\\0\" + VALUE \"LegalTrademarks\", \"${__trademark}\\0\" + VALUE \"InternalName\", \"${__internal_name}\\0\" + END + END + BLOCK \"VarFileInfo\" + BEGIN + VALUE \"Translation\", 0x0409, 1200 + END +END +") + file(WRITE "${RC_ARGS_PATH}" ${__contents}) +endfunction() + +function(generate_win32_manifest_file) + cmake_parse_arguments(MF_ARGS "UTF8_CODEPAGE;VISTA_COMPAT;WIN7_COMPAT;WIN8_COMPAT;WIN8_1_COMPAT;WIN10_COMPAT;WIN11_COMPAT;XAML_ISLANDS_COMPAT;REQUIRE_ADMIN" "PATH;ID;VERSION;DESCRIPTION" "" ${ARGN}) + if(NOT MF_ARGS_PATH) + message(AUTHOR_WARNING "generate_win32_manifest_file: You need to specify where to put the generated rc file for this function!") + return() + endif() + if(NOT MF_ARGS_ID) + message(AUTHOR_WARNING "generate_win32_manifest_file: You need to specify your application identifier for this function!") + return() + endif() + if(MF_ARGS_UNPARSED_ARGUMENTS) + message(AUTHOR_WARNING "generate_win32_manifest_file: Unrecognized arguments: ${MF_ARGS_UNPARSED_ARGUMENTS}") + return() + endif() + set(__id "${MF_ARGS_ID}") + set(__version) + if(MF_ARGS_VERSION) + if(MF_ARGS_VERSION MATCHES "[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+") + # The given version string is valid, nothing to do. + elseif(MF_ARGS_VERSION MATCHES "[0-9]+\\.[0-9]+\\.[0-9]+") + set(__version "${MF_ARGS_VERSION}.0") + elseif(MF_ARGS_VERSION MATCHES "[0-9]+\\.[0-9]+") + set(__version "${MF_ARGS_VERSION}.0.0") + elseif(MF_ARGS_VERSION MATCHES "[0-9]+") + set(__version "${MF_ARGS_VERSION}.0.0.0") + else() + message(FATAL_ERROR "generate_win32_manifest_file: Invalid version format: '${MF_ARGS_VERSION}'") + endif() + else() + set(__version "0.0.0.0") + endif() + set(__description) + if(MF_ARGS_DESCRIPTION) + set(__description "${MF_ARGS_DESCRIPTION}") + endif() + set(__execution_level) + if(MF_ARGS_REQUIRE_ADMIN) + set(__execution_level "requireAdministrator") + else() + set(__execution_level "asInvoker") + endif() + set(__vista_compat) + if(MF_ARGS_VISTA_COMPAT) + set(__vista_compat " + ") + endif() + set(__win7_compat) + if(MF_ARGS_WIN7_COMPAT) + set(__win7_compat " + ") + endif() + set(__win8_compat) + if(MF_ARGS_WIN8_COMPAT) + set(__win8_compat " + ") + endif() + set(__win8_1_compat) + if(MF_ARGS_WIN8_1_COMPAT) + set(__win8_1_compat " + ") + endif() + set(__win10_11_compat) + if(MF_ARGS_WIN10_COMPAT OR MF_ARGS_WIN11_COMPAT) + set(__win10_11_compat " + ") + endif() + set(__xaml_islands_compat " + + + + + + + + + + + + + + + + + + + ") + set(__utf8_codepage) + if(MF_ARGS_UTF8_CODEPAGE) + set(__utf8_codepage " + UTF-8") + endif() + set(__contents " + + + + + + ${__description} + + + + + + + + + + + + + + + ${__xaml_islands_compat} + ${__vista_compat} + ${__win7_compat} + ${__win8_compat} + ${__win8_1_compat} + ${__win10_11_compat} + + + + + + True/PM + + PerMonitorV2, PerMonitor + True + True + True + SegmentHeap + ${__utf8_codepage} + + + +") + file(WRITE "${MF_ARGS_PATH}" ${__contents}) +endfunction()