diff --git a/.gitignore b/.gitignore index 129b761f..000e403e 100644 --- a/.gitignore +++ b/.gitignore @@ -45,7 +45,7 @@ target_wrapper.* # QtCreator CMake CMakeLists.txt.user* -# QtCreator 4.8< compilation database +# QtCreator 4.8< compilation database compile_commands.json # QtCreator local machine specific files for imported projects @@ -54,6 +54,8 @@ compile_commands.json # My [Bb]in/ [Bb]in64/ +[Ll]ib/ +[Ll]ib64/ [Bb]uild*/ *.7z *.zip diff --git a/CMakeLists.txt b/CMakeLists.txt index 8d94ffe1..806309cb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,9 +67,6 @@ if(FRAMELESSHELPER_NO_WINDOW AND FRAMELESSHELPER_BUILD_EXAMPLES) set(FRAMELESSHELPER_BUILD_EXAMPLES OFF) endif() -set(PROJECT_VERSION_HEX "0x00000000") -math(EXPR PROJECT_VERSION_HEX "((${PROJECT_VERSION_MAJOR} & 0xff) << 24) | ((${PROJECT_VERSION_MINOR} & 0xff) << 16) | ((${PROJECT_VERSION_PATCH} & 0xff) << 8)" OUTPUT_FORMAT HEXADECIMAL) - set(FRAMELESSHELPER_64BIT_POSTFIX "") if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(FRAMELESSHELPER_64BIT_POSTFIX "64") @@ -99,6 +96,38 @@ if(FRAMELESSHELPER_ENABLE_VCLTL AND NOT MSVC) message(WARNING "VC-LTL is only available for the MSVC toolchain.") endif() +set(FRAMELESSHELPER_LICENSE_HEADER "/* +* MIT License +* +* Copyright (C) 2021-2023 by wangwenx190 (Yuhang Zhao) +* +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the \"Software\"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in +* all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/") + +set(FRAMELESSHELPER_MODIFY_LOST_WARNING "// Caution: This file is generated by CMake automatically during configure. +// WARNING!!! DO NOT EDIT THIS FILE MANUALLY!!! +// ALL YOUR MODIFICATIONS HERE WILL GET LOST AFTER RE-CONFIGURING!!! +// Also please do not include this file directly, +// it's designed to be included by FramelessHelper's own headers.") + +string(TOUPPER "${PROJECT_NAME}" PROJECT_NAME_UPPER) + set(__extra_flags "") if(NOT FRAMELESSHELPER_BUILD_STATIC) list(APPEND __extra_flags ENABLE_LTO) @@ -106,6 +135,10 @@ endif() setup_project( QT_PROJECT QML_IMPORT_DIR "${PROJECT_BINARY_DIR}/imports" + LICENSE_HEADER "${FRAMELESSHELPER_LICENSE_HEADER}" + MODIFY_LOST_WARNING "${FRAMELESSHELPER_MODIFY_LOST_WARNING}" + CONFIG_PREFIX "${PROJECT_NAME_UPPER}_FEATURE" + VERSION_PREFIX "${PROJECT_NAME_UPPER}" LANGUAGES CXX RC MAX_WARNING RTTI @@ -114,13 +147,6 @@ setup_project( ) unset(__extra_flags) -set(PROJECT_VERSION_COMMIT "UNKNOWN") -set(PROJECT_COMPILE_DATETIME "UNKNOWN") -if(NOT FRAMELESSHELPER_REPRODUCIBLE_OUTPUT) - get_commit_hash(RESULT PROJECT_VERSION_COMMIT) - string(TIMESTAMP PROJECT_COMPILE_DATETIME UTC) -endif() - if(MINGW AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set(FRAMELESSHELPER_ENABLE_SPECTRE OFF) set(FRAMELESSHELPER_ENABLE_EHCONTGUARD OFF) @@ -165,147 +191,29 @@ if(FRAMELESSHELPER_BUILD_QUICK AND NOT TARGET Qt${QT_VERSION_MAJOR}::Quick) set(FRAMELESSHELPER_BUILD_QUICK OFF) endif() -set(FRAMELESSHELPER_LICENSE_HEADER "/* -* MIT License -* -* Copyright (C) 2021-2023 by wangwenx190 (Yuhang Zhao) -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the \"Software\"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -* SOFTWARE. -*/") - -set(FRAMELESSHELPER_CMAKE_WARNING "// Generated automatically by CMake. -// WARNING! DO NOT EDIT THIS FILE MANUALLY! -// ALL CHANGES WILL BE LOST AFTER RE-CONFIGURING! -// Also please do not include this file directly, -// it's designed to be included by FramelessHelper's own headers.") - -### VERSION BEGIN ### set(FRAMELESSHELPER_VERSION_FILE "${PROJECT_BINARY_DIR}/framelesshelper.version") -if(NOT EXISTS "${FRAMELESSHELPER_VERSION_FILE}") - set(__version_content "${FRAMELESSHELPER_LICENSE_HEADER} - -${FRAMELESSHELPER_CMAKE_WARNING} - -#ifndef _FRAMELESSHELPER_VERSION_DEFINED_ -#define _FRAMELESSHELPER_VERSION_DEFINED_ - -[[maybe_unused]] inline constexpr const int FRAMELESSHELPER_VERSION_MAJOR = ${PROJECT_VERSION_MAJOR}; -[[maybe_unused]] inline constexpr const int FRAMELESSHELPER_VERSION_MINOR = ${PROJECT_VERSION_MINOR}; -[[maybe_unused]] inline constexpr const int FRAMELESSHELPER_VERSION_PATCH = ${PROJECT_VERSION_PATCH}; -//[[maybe_unused]] inline constexpr const int FRAMELESSHELPER_VERSION_TWEAK = ${PROJECT_VERSION_TWEAK}; -[[maybe_unused]] inline constexpr const char FRAMELESSHELPER_VERSION_STR[] = \"${PROJECT_VERSION}\"; -[[maybe_unused]] inline constexpr const char FRAMELESSHELPER_COMMIT_STR[] = \"${PROJECT_VERSION_COMMIT}\"; -[[maybe_unused]] inline constexpr const char FRAMELESSHELPER_COMPILE_DATETIME_STR[] = \"${PROJECT_COMPILE_DATETIME}\"; - -#define __FRAMELESSHELPER_VERSION_MAJOR__ ${PROJECT_VERSION_MAJOR} -#define __FRAMELESSHELPER_VERSION_MINOR__ ${PROJECT_VERSION_MINOR} -#define __FRAMELESSHELPER_VERSION_PATCH__ ${PROJECT_VERSION_PATCH} -//#define __FRAMELESSHELPER_VERSION_TWEAK__ ${PROJECT_VERSION_TWEAK} -#define __FRAMELESSHELPER_VERSION__ ${PROJECT_VERSION_HEX} -#define __FRAMELESSHELPER__ ${PROJECT_VERSION_HEX} - -#endif // _FRAMELESSHELPER_VERSION_DEFINED_ -") - file(WRITE "${FRAMELESSHELPER_VERSION_FILE}" "${__version_content}") - unset(__version_content) -endif() -### VERSION END ### +generate_project_version( + PATH "${FRAMELESSHELPER_VERSION_FILE}" + COMMIT_HASH COMMIT_SUBJECT COMMIT_AUTHOR + COMMIT_DATETIME COMMIT_BRANCH COMPILER_NAME + COMPILER_VENDOR COMPILER_VERSION BUILD_DATETIME + ARCHITECTURE CMAKE_VERSION GENERATOR +) -### MODULAR CONFIGURATION BEGIN ### set(FRAMELESSHELPER_CONFIG_FILE "${PROJECT_BINARY_DIR}/framelesshelper.config") -if(NOT EXISTS "${FRAMELESSHELPER_CONFIG_FILE}") - set(FRAMELESSHELPER_FEATURE_static_build "-1") - if(FRAMELESSHELPER_BUILD_STATIC) - set(FRAMELESSHELPER_FEATURE_static_build "1") - endif() - set(FRAMELESSHELPER_FEATURE_widgets "-1") - if(FRAMELESSHELPER_BUILD_WIDGETS) - set(FRAMELESSHELPER_FEATURE_widgets "1") - endif() - set(FRAMELESSHELPER_FEATURE_quick "-1") - if(FRAMELESSHELPER_BUILD_QUICK) - set(FRAMELESSHELPER_FEATURE_quick "1") - endif() - set(FRAMELESSHELPER_FEATURE_debug_output "-1") - if(NOT FRAMELESSHELPER_NO_DEBUG_OUTPUT) - set(FRAMELESSHELPER_FEATURE_debug_output "1") - endif() - set(FRAMELESSHELPER_FEATURE_bundle_resource "-1") - if(NOT FRAMELESSHELPER_NO_BUNDLE_RESOURCE) - set(FRAMELESSHELPER_FEATURE_bundle_resource "1") - endif() - set(FRAMELESSHELPER_FEATURE_private_qt "-1") - if(NOT FRAMELESSHELPER_NO_PRIVATE) - set(FRAMELESSHELPER_FEATURE_private_qt "1") - endif() - set(FRAMELESSHELPER_FEATURE_window "-1") - if(NOT FRAMELESSHELPER_NO_WINDOW) - set(FRAMELESSHELPER_FEATURE_window "1") - endif() - set(FRAMELESSHELPER_FEATURE_titlebar "-1") - if(NOT FRAMELESSHELPER_NO_TITLEBAR) - set(FRAMELESSHELPER_FEATURE_titlebar "1") - endif() - set(FRAMELESSHELPER_FEATURE_translation "-1") - if(NOT FRAMELESSHELPER_NO_TRANSLATION) - set(FRAMELESSHELPER_FEATURE_translation "1") - endif() - set(FRAMELESSHELPER_FEATURE_mica_material "-1") - if(NOT FRAMELESSHELPER_NO_MICA_MATERIAL) - set(FRAMELESSHELPER_FEATURE_mica_material "1") - endif() - set(FRAMELESSHELPER_FEATURE_border_painter "-1") - if(NOT FRAMELESSHELPER_NO_BORDER_PAINTER) - set(FRAMELESSHELPER_FEATURE_border_painter "1") - endif() - set(FRAMELESSHELPER_FEATURE_system_button "-1") - if(NOT FRAMELESSHELPER_NO_SYSTEM_BUTTON) - set(FRAMELESSHELPER_FEATURE_system_button "1") - endif() - set(__config_content "${FRAMELESSHELPER_LICENSE_HEADER} - -${FRAMELESSHELPER_CMAKE_WARNING} - -#pragma once - -#ifndef _FRAMELESSHELPER_CONFIG_DEFINED_ -#define _FRAMELESSHELPER_CONFIG_DEFINED_ - -#define FRAMELESSHELPER_FEATURE_static_build ${FRAMELESSHELPER_FEATURE_static_build} -#define FRAMELESSHELPER_FEATURE_widgets ${FRAMELESSHELPER_FEATURE_widgets} -#define FRAMELESSHELPER_FEATURE_quick ${FRAMELESSHELPER_FEATURE_quick} -#define FRAMELESSHELPER_FEATURE_debug_output ${FRAMELESSHELPER_FEATURE_debug_output} -#define FRAMELESSHELPER_FEATURE_bundle_resource ${FRAMELESSHELPER_FEATURE_bundle_resource} -#define FRAMELESSHELPER_FEATURE_private_qt ${FRAMELESSHELPER_FEATURE_private_qt} -#define FRAMELESSHELPER_FEATURE_window ${FRAMELESSHELPER_FEATURE_window} -#define FRAMELESSHELPER_FEATURE_titlebar ${FRAMELESSHELPER_FEATURE_titlebar} -#define FRAMELESSHELPER_FEATURE_translation ${FRAMELESSHELPER_FEATURE_translation} -#define FRAMELESSHELPER_FEATURE_mica_material ${FRAMELESSHELPER_FEATURE_mica_material} -#define FRAMELESSHELPER_FEATURE_border_painter ${FRAMELESSHELPER_FEATURE_border_painter} -#define FRAMELESSHELPER_FEATURE_system_button ${FRAMELESSHELPER_FEATURE_system_button} - -#endif // _FRAMELESSHELPER_CONFIG_DEFINED_ -") - file(WRITE "${FRAMELESSHELPER_CONFIG_FILE}" "${__config_content}") - unset(__config_content) -endif() -### MODULAR CONFIGURATION END ### +add_project_config(KEY "static_build" CONDITION FRAMELESSHELPER_BUILD_STATIC) +add_project_config(KEY "widgets" CONDITION FRAMELESSHELPER_BUILD_WIDGETS) +add_project_config(KEY "quick" CONDITION FRAMELESSHELPER_BUILD_QUICK) +add_project_config(KEY "debug_output" CONDITION NOT FRAMELESSHELPER_NO_DEBUG_OUTPUT) +add_project_config(KEY "bundle_resource" CONDITION NOT FRAMELESSHELPER_NO_BUNDLE_RESOURCE) +add_project_config(KEY "private_qt" CONDITION NOT FRAMELESSHELPER_NO_PRIVATE) +add_project_config(KEY "window" CONDITION NOT FRAMELESSHELPER_NO_WINDOW) +add_project_config(KEY "titlebar" CONDITION NOT FRAMELESSHELPER_NO_TITLEBAR) +add_project_config(KEY "translation" CONDITION NOT FRAMELESSHELPER_NO_TRANSLATION) +add_project_config(KEY "mica_material" CONDITION NOT FRAMELESSHELPER_NO_MICA_MATERIAL) +add_project_config(KEY "border_painter" CONDITION NOT FRAMELESSHELPER_NO_BORDER_PAINTER) +add_project_config(KEY "system_button" CONDITION NOT FRAMELESSHELPER_NO_SYSTEM_BUTTON) +generate_project_config(PATH "${FRAMELESSHELPER_CONFIG_FILE}") if(TARGET Qt${QT_VERSION_MAJOR}::Core AND TARGET Qt${QT_VERSION_MAJOR}::Gui) add_subdirectory(src) @@ -372,8 +280,6 @@ if(NOT FRAMELESSHELPER_NO_SUMMARY) endif() message("------------------------ FramelessHelper ------------------------") message("FramelessHelper version: ${PROJECT_VERSION}") - message("FramelessHelper commit hash: ${PROJECT_VERSION_COMMIT}") - message("FramelessHelper configure date and time: ${PROJECT_COMPILE_DATETIME} (UTC)") message("Build the static version of FramelessHelper: ${FRAMELESSHELPER_BUILD_STATIC}") message("Build the FramelessHelper::Widgets module: ${FRAMELESSHELPER_BUILD_WIDGETS}") message("Build the FramelessHelper::Quick module: ${FRAMELESSHELPER_BUILD_QUICK}") diff --git a/build/msvc2022.bat b/build/msvc2022.bat new file mode 100644 index 00000000..8f71a3e7 --- /dev/null +++ b/build/msvc2022.bat @@ -0,0 +1,20 @@ +@echo off +title Building FramelessHelper ... +setlocal +cls +call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat" +cd /d "%~dp0" +if exist cmake rd /s /q cmake +md cmake +cd cmake +md build +cd build +cmake -DCMAKE_PREFIX_PATH="C:\Qt\6.6.0\msvc2019_64" -DCMAKE_INSTALL_PREFIX="%~dp0cmake\install" -DCMAKE_CONFIGURATION_TYPES=Release;Debug -G"Ninja Multi-Config" -DFRAMELESSHELPER_ENABLE_VCLTL=ON -DFRAMELESSHELPER_ENABLE_YYTHUNKS=ON -DFRAMELESSHELPER_ENABLE_SPECTRE=ON -DFRAMELESSHELPER_ENABLE_EHCONTGUARD=ON -DFRAMELESSHELPER_ENABLE_INTELCET=ON -DFRAMELESSHELPER_ENABLE_INTELJCC=ON -DFRAMELESSHELPER_ENABLE_CFGUARD=ON -DFRAMELESSHELPER_FORCE_LTO=ON "%~dp0.." +cmake --build . --target all --config Release --parallel +cmake --build . --target all --config Debug --parallel +cmake --install . --config Release --strip +cmake --install . --config Debug +endlocal +cd /d "%~dp0" +pause +exit /b 0 diff --git a/cmake b/cmake index a0d72f17..41198b32 160000 --- a/cmake +++ b/cmake @@ -1 +1 @@ -Subproject commit a0d72f177e9a919c1f273b67d0456a052020781a +Subproject commit 41198b322221e1c79b025a74f511cf84e7bb3b1a diff --git a/include/FramelessHelper/Core/framelesshelpercore_global.h b/include/FramelessHelper/Core/framelesshelpercore_global.h index 0073411d..07448a4f 100644 --- a/include/FramelessHelper/Core/framelesshelpercore_global.h +++ b/include/FramelessHelper/Core/framelesshelpercore_global.h @@ -265,12 +265,6 @@ FRAMELESSHELPER_BEGIN_NAMESPACE #include "framelesshelper.version" -[[maybe_unused]] inline constexpr const int FRAMELESSHELPER_VERSION = - FRAMELESSHELPER_MAKE_VERSION( - FRAMELESSHELPER_VERSION_MAJOR, - FRAMELESSHELPER_VERSION_MINOR, - FRAMELESSHELPER_VERSION_PATCH); - namespace Global { @@ -489,13 +483,30 @@ Q_ENUM_NS(WindowCornerStyle) struct VersionInfo { - int version = 0; - const char *version_str = nullptr; - const char *commit = nullptr; - const char *compileDateTime = nullptr; - const char *compiler = nullptr; - bool isDebug = false; - bool isStatic = false; + struct { + unsigned long num = 0; + const char *str = nullptr; + } version = {}; + struct { + const char *hash = nullptr; + const char *subject = nullptr; + const char *author = nullptr; + const char *datetime = nullptr; + const char *branch = nullptr; + } commit = {}; + struct { + const char *name = nullptr; + const char *version = nullptr; + const char *vendor = nullptr; + } compiler = {}; + struct { + const char *cmake_version = nullptr; + const char *configure_datetime = nullptr; + const char *generator = nullptr; + const char *architecture = nullptr; + bool is_debug = false; + bool is_static = false; + } build = {}; }; struct Dpi diff --git a/include/FramelessHelper/Core/private/versionnumber_p.h b/include/FramelessHelper/Core/private/versionnumber_p.h index 7bc0602a..df950fc4 100644 --- a/include/FramelessHelper/Core/private/versionnumber_p.h +++ b/include/FramelessHelper/Core/private/versionnumber_p.h @@ -31,10 +31,10 @@ FRAMELESSHELPER_BEGIN_NAMESPACE struct VersionNumber { - int Major = 0; - int Minor = 0; - int Patch = 0; - int Tweak = 0; + unsigned long Major = 0; + unsigned long Minor = 0; + unsigned long Patch = 0; + unsigned long Tweak = 0; [[nodiscard]] friend constexpr bool operator==(const VersionNumber &lhs, const VersionNumber &rhs) noexcept { diff --git a/src/core/framelesshelpercore_global.cpp b/src/core/framelesshelpercore_global.cpp index 8a2d9175..5aa52c25 100644 --- a/src/core/framelesshelpercore_global.cpp +++ b/src/core/framelesshelpercore_global.cpp @@ -30,30 +30,6 @@ #include #include -#ifndef COMPILER_STRING -# ifdef Q_CC_CLANG // Must be before GNU, because Clang claims to be GNU too. -# define COMPILER_STRING __VERSION__ // Already includes the compiler's name. -# elif defined(Q_CC_GHS) -# define COMPILER_STRING "GHS " QT_STRINGIFY(__GHS_VERSION_NUMBER) -# elif defined(Q_CC_GNU) -# define COMPILER_STRING "GCC " __VERSION__ -# elif defined(Q_CC_MSVC) -# if (_MSC_VER < 1910) -# define COMPILER_STRING "MSVC 2015" -# elif (_MSC_VER < 1917) -# define COMPILER_STRING "MSVC 2017" -# elif (_MSC_VER < 1930) -# define COMPILER_STRING "MSVC 2019" -# elif (_MSC_VER < 2000) -# define COMPILER_STRING "MSVC 2022" -# else -# define COMPILER_STRING "MSVC version " QT_STRINGIFY(_MSC_VER) -# endif -# else -# define COMPILER_STRING "UNKNOWN" -# endif -#endif - #ifndef QT_NO_DEBUG_STREAM QT_BEGIN_NAMESPACE QDebug operator<<(QDebug d, const FRAMELESSHELPER_PREPEND_NAMESPACE(VersionNumber) &ver) @@ -70,16 +46,26 @@ QDebug operator<<(QDebug d, const FRAMELESSHELPER_PREPEND_NAMESPACE(VersionNumbe QDebug operator<<(QDebug d, const FRAMELESSHELPER_PREPEND_NAMESPACE(Global)::VersionInfo &ver) { const QDebugStateSaver saver(d); - int major = 0, minor = 0, patch = 0; - FRAMELESSHELPER_EXTRACT_VERSION(ver.version, major, minor, patch) - const auto ver_num = FRAMELESSHELPER_PREPEND_NAMESPACE(VersionNumber){major, minor, patch}; + unsigned long major = 0, minor = 0, patch = 0; + FRAMELESSHELPER_EXTRACT_VERSION(ver.version.num, major, minor, patch) + const auto ver_num = FRAMELESSHELPER_PREPEND_NAMESPACE(VersionNumber){ major, minor, patch }; d.nospace().noquote() << "VersionInfo(" << "version number: " << ver_num << ", " - << "version string: " << ver.version_str << ", " - << "commit hash: " << ver.commit << ", " - << "compiler: " << ver.compiler << ", " - << "debug build: " << ver.isDebug << ", " - << "static build: " << ver.isStatic << ')'; + << "version string: " << ver.version.str << ", " + << "commit hash: " << ver.commit.hash << ", " + << "commit subject: " << ver.commit.subject << ", " + << "commit author: " << ver.commit.author << ", " + << "commit date time: " << ver.commit.datetime << ", " + << "commit branch: " << ver.commit.branch << ", " + << "compiler name: " << ver.compiler.name << ", " + << "compiler version: " << ver.compiler.version << ", " + << "compiler vendor: " << ver.compiler.vendor << ", " + << "cmake version: " << ver.build.cmake_version << ", " + << "cmake configure date time: " << ver.build.configure_datetime << ", " + << "cmake generator: " << ver.build.generator << ", " + << "architecture: " << ver.build.architecture << ", " + << "debug build: " << ver.build.is_debug << ", " + << "static build: " << ver.build.is_static << ')'; return d; } @@ -195,30 +181,36 @@ void FramelessHelperCoreUninitialize() VersionInfo FramelessHelperVersion() { static const auto result = []() -> VersionInfo { - const auto _compiler = []() -> const char * { return COMPILER_STRING; }(); - const auto _debug = []() -> bool { + VersionInfo vi = {}; + vi.version.num = FRAMELESSHELPER_VERSION; + vi.version.str = FRAMELESSHELPER_VERSION_STR; + vi.commit.hash = FRAMELESSHELPER_COMMIT_HASH_STR; + vi.commit.subject = FRAMELESSHELPER_COMMIT_SUBJECT_STR; + vi.commit.author = FRAMELESSHELPER_COMMIT_AUTHOR_STR; + vi.commit.datetime = FRAMELESSHELPER_COMMIT_DATETIME_STR; + vi.commit.branch = FRAMELESSHELPER_COMMIT_BRANCH_STR; + vi.compiler.name = FRAMELESSHELPER_COMPILER_NAME_STR; + vi.compiler.version = FRAMELESSHELPER_COMPILER_VERSION_STR; + vi.compiler.vendor = FRAMELESSHELPER_COMPILER_VENDOR_STR; + vi.build.cmake_version = FRAMELESSHELPER_CMAKE_VERSION_STR; + vi.build.configure_datetime = FRAMELESSHELPER_BUILD_DATETIME_STR; + vi.build.generator = FRAMELESSHELPER_CMAKE_GENERATOR_STR; + vi.build.architecture = FRAMELESSHELPER_ARCHITECTURE_STR; + vi.build.is_debug = []() -> bool { #ifdef _DEBUG return true; #else return false; #endif }(); - const auto _static = []() -> bool { + vi.build.is_static = []() -> bool { #if FRAMELESSHELPER_CONFIG(static_build) return true; #else return false; #endif }(); - return VersionInfo{ - /* .version */ FRAMELESSHELPER_VERSION, - /* .version_str */ FRAMELESSHELPER_VERSION_STR, - /* .commit */ FRAMELESSHELPER_COMMIT_STR, - /* .compileDateTime */ FRAMELESSHELPER_COMPILE_DATETIME_STR, - /* .compiler */ _compiler, - /* .isDebug */ _debug, - /* .isStatic */ _static - }; + return vi; }(); return result; } @@ -258,11 +250,13 @@ void FramelessHelperPrintLogo() const VersionInfo ver = FramelessHelperVersion(); QString message = {}; QTextStream stream(&message, QIODevice::WriteOnly); - stream << "FramelessHelper (" << (ver.isStatic ? "static" : "shared") - << ", " << (ver.isDebug ? "debug" : "release") << ") version " - << ver.version_str << ", author wangwenx190 (Yuhang Zhao)." - << " Built by " << ver.compiler << " from " << ver.commit - << " on " << ver.compileDateTime << " (UTC)."; + stream << "FramelessHelper (" << (ver.build.is_static ? "static" : "shared") + << ", " << (ver.build.is_debug ? "debug" : "release") + << ver.build.architecture << ") version " << ver.version.str + << ", author wangwenx190 (Yuhang Zhao, 2546789017@qq.com)." + << " Built by " << ver.compiler.name << ver.compiler.version + << " from " << ver.commit.hash << " on " + << ver.build.configure_datetime << " (UTC)."; INFO.nospace().noquote() << message; } diff --git a/src/core/framelessmanager.cpp b/src/core/framelessmanager.cpp index cf7bfdea..4dedaf61 100644 --- a/src/core/framelessmanager.cpp +++ b/src/core/framelessmanager.cpp @@ -280,7 +280,7 @@ void FramelessManagerPrivate::initialize() // Set a global flag so that people can check whether FramelessHelper is being // used without actually accessing the FramelessHelper interface. static constexpr const char flag[] = "__FRAMELESSHELPER__"; - const int ver = FramelessHelperVersion().version; + const auto ver = quint64(FramelessHelperVersion().version.num); qputenv(flag, QByteArray::number(ver)); qApp->setProperty(flag, ver); } diff --git a/src/core/utils_win.cpp b/src/core/utils_win.cpp index 254f8d2f..633035ae 100644 --- a/src/core/utils_win.cpp +++ b/src/core/utils_win.cpp @@ -740,7 +740,7 @@ static constexpr const std::array g_win32MessageMap = SecureZeroMemory(&osvi, sizeof(osvi)); osvi.dwOSVersionInfoSize = sizeof(osvi); if (pRtlGetVersion(reinterpret_cast(&osvi)) == _STATUS_SUCCESS) { - return VersionNumber{int(osvi.dwMajorVersion), int(osvi.dwMinorVersion), int(osvi.dwBuildNumber)}; + return VersionNumber{ osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber }; } } return std::nullopt;