From a24ffe957cbf20e21ab24b6a142c7578b95175b4 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Thu, 13 Feb 2025 12:50:36 +0100 Subject: [PATCH 1/4] [cmake] make C and C++ standards configurable use cache variables to allow overriding them from command line --- CMakeLists.txt | 6 ++---- client/SDL/CMakeLists.txt | 5 +---- client/Sample/CMakeLists.txt | 5 +---- client/X11/CMakeLists.txt | 5 +---- cmake/ProjectCStandard.cmake | 3 +++ cmake/ProjectCXXStandard.cmake | 3 +++ rdtk/CMakeLists.txt | 6 ++---- server/proxy/modules/bitmap-filter/CMakeLists.txt | 4 +--- server/proxy/modules/demo/CMakeLists.txt | 4 +--- server/proxy/modules/dyn-channel-dump/CMakeLists.txt | 4 +--- uwac/CMakeLists.txt | 6 ++---- winpr/CMakeLists.txt | 5 +---- 12 files changed, 19 insertions(+), 37 deletions(-) create mode 100644 cmake/ProjectCStandard.cmake create mode 100644 cmake/ProjectCXXStandard.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index af4b3cef3..fb2c68729 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,10 +25,6 @@ if(POLICY CMP0091) endif() project(FreeRDP LANGUAGES C) -set(CMAKE_C_STANDARD 11) -set(CMAKE_C_STANDARD_REQUIRED ON) -set(CMAKE_C_EXTENSIONS ON) - add_custom_target(fuzzers COMMENT "Build fuzzers") if(NOT DEFINED VENDOR) @@ -60,6 +56,8 @@ endif() # Include our extra modules list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/) +include(ProjectCStandard) + # Check for cmake compatibility (enable/disable features) include(CheckCmakeCompat) diff --git a/client/SDL/CMakeLists.txt b/client/SDL/CMakeLists.txt index fd67ec593..f37ccb7a8 100644 --- a/client/SDL/CMakeLists.txt +++ b/client/SDL/CMakeLists.txt @@ -28,11 +28,8 @@ project(sdl-freerdp LANGUAGES CXX VERSION ${FREERDP_DEFAULT_PROJECT_VERSION}) message("project ${PROJECT_NAME} is using version ${PROJECT_VERSION}") -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS ON) - list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/) +include(ProjectCXXStandard) include(CommonConfigOptions) include(ConfigureFreeRDP) diff --git a/client/Sample/CMakeLists.txt b/client/Sample/CMakeLists.txt index 4783ca6b9..4eabb029c 100644 --- a/client/Sample/CMakeLists.txt +++ b/client/Sample/CMakeLists.txt @@ -27,11 +27,8 @@ project(sfreerdp LANGUAGES C VERSION ${FREERDP_DEFAULT_PROJECT_VERSION}) message("project ${PROJECT_NAME} is using version ${PROJECT_VERSION}") -set(CMAKE_C_STANDARD 11) -set(CMAKE_C_STANDARD_REQUIRED ON) -set(CMAKE_C_EXTENSIONS ON) - list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/) +include(ProjectCStandard) include(CommonConfigOptions) include(ConfigureFreeRDP) diff --git a/client/X11/CMakeLists.txt b/client/X11/CMakeLists.txt index 5fd376599..85ee03868 100644 --- a/client/X11/CMakeLists.txt +++ b/client/X11/CMakeLists.txt @@ -27,11 +27,8 @@ message("project ${PROJECT_NAME} is using version ${PROJECT_VERSION}") set(MODULE_NAME "xfreerdp") -set(CMAKE_C_STANDARD 11) -set(CMAKE_C_STANDARD_REQUIRED ON) -set(CMAKE_C_EXTENSIONS ON) - list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/) +include(ProjectCStandard) include(CommonConfigOptions) include(ConfigureFreeRDP) diff --git a/cmake/ProjectCStandard.cmake b/cmake/ProjectCStandard.cmake new file mode 100644 index 000000000..b91a55ebe --- /dev/null +++ b/cmake/ProjectCStandard.cmake @@ -0,0 +1,3 @@ +set(CMAKE_C_STANDARD 11 CACHE STRING "project default") +set(CMAKE_C_STANDARD_REQUIRED ON CACHE BOOL "project default") +set(CMAKE_C_EXTENSIONS ON CACHE BOOL "project default") diff --git a/cmake/ProjectCXXStandard.cmake b/cmake/ProjectCXXStandard.cmake new file mode 100644 index 000000000..1db12fac5 --- /dev/null +++ b/cmake/ProjectCXXStandard.cmake @@ -0,0 +1,3 @@ +set(CMAKE_CXX_STANDARD 17 CACHE STRING "project default") +set(CMAKE_CXX_STANDARD_REQUIRED ON CACHE BOOL "project default") +set(CMAKE_CXX_EXTENSIONS ON CACHE BOOL "project default") diff --git a/rdtk/CMakeLists.txt b/rdtk/CMakeLists.txt index 803afdb4b..1929e4b79 100644 --- a/rdtk/CMakeLists.txt +++ b/rdtk/CMakeLists.txt @@ -23,13 +23,12 @@ set(RDTK_VERSION "${RDTK_VERSION_MAJOR}.${RDTK_VERSION_MINOR}.${RDTK_VERSION_REV set(RDTK_VERSION_FULL "${RDTK_VERSION}") set(RDTK_API_VERSION "${RDTK_VERSION_MAJOR}") +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/) if(NOT FREERDP_UNIFIED_BUILD) cmake_minimum_required(VERSION 3.13) project(RdTk VERSION ${RDTK_VERSION} LANGUAGES C) - set(CMAKE_C_STANDARD 11) - set(CMAKE_C_STANDARD_REQUIRED ON) - set(CMAKE_C_EXTENSIONS ON) + include(ProjectCStandard) set(WINPR_VERSION_MAJOR 3) option(BUILD_TESTING_INTERNAL "Build library unit tests" ON) @@ -40,7 +39,6 @@ else() endif() # Include our extra modules -set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/) include(CommonConfigOptions) # Include cmake modules diff --git a/server/proxy/modules/bitmap-filter/CMakeLists.txt b/server/proxy/modules/bitmap-filter/CMakeLists.txt index d6c82fec0..1216506eb 100644 --- a/server/proxy/modules/bitmap-filter/CMakeLists.txt +++ b/server/proxy/modules/bitmap-filter/CMakeLists.txt @@ -33,12 +33,10 @@ project(proxy-bitmap-filter-plugin VERSION ${FREERDP_DEFAULT_PROJECT_VERSION} LA message("project ${PROJECT_NAME} is using version ${PROJECT_VERSION}") set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../../cmake/) +include(ProjectCXXStandard) include(CommonConfigOptions) include(CXXCompilerFlags) -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - set(SRCS bitmap-filter.cpp) addtargetwithresourcefile(${PROJECT_NAME} FALSE "${PROJECT_VERSION}" SRCS FALSE) diff --git a/server/proxy/modules/demo/CMakeLists.txt b/server/proxy/modules/demo/CMakeLists.txt index 5502afa4f..0f2af41c9 100644 --- a/server/proxy/modules/demo/CMakeLists.txt +++ b/server/proxy/modules/demo/CMakeLists.txt @@ -33,12 +33,10 @@ project(proxy-demo-plugin VERSION ${FREERDP_DEFAULT_PROJECT_VERSION} LANGUAGES C message("project ${PROJECT_NAME} is using version ${PROJECT_VERSION}") set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../../cmake/) +include(ProjectCXXStandard) include(CommonConfigOptions) include(CXXCompilerFlags) -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - set(SRCS demo.cpp) addtargetwithresourcefile(${PROJECT_NAME} FALSE "${PROJECT_VERSION}" SRCS FALSE) diff --git a/server/proxy/modules/dyn-channel-dump/CMakeLists.txt b/server/proxy/modules/dyn-channel-dump/CMakeLists.txt index 3eb6f6ed4..d2549e191 100644 --- a/server/proxy/modules/dyn-channel-dump/CMakeLists.txt +++ b/server/proxy/modules/dyn-channel-dump/CMakeLists.txt @@ -34,9 +34,7 @@ message("project ${PROJECT_NAME} is using version ${PROJECT_VERSION}") set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../../cmake/) include(CommonConfigOptions) include(CXXCompilerFlags) - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) +include(ProjectCXXStandard) set(SRCS dyn-channel-dump.cpp) addtargetwithresourcefile(${PROJECT_NAME} FALSE "${PROJECT_VERSION}" SRCS FALSE) diff --git a/uwac/CMakeLists.txt b/uwac/CMakeLists.txt index c6693bf88..82d098c0e 100644 --- a/uwac/CMakeLists.txt +++ b/uwac/CMakeLists.txt @@ -23,13 +23,12 @@ set(UWAC_VERSION "${UWAC_VERSION_MAJOR}.${UWAC_VERSION_MINOR}.${UWAC_VERSION_REV set(UWAC_VERSION_FULL "${UWAC_VERSION}") set(UWAC_API_VERSION "${UWAC_VERSION_MAJOR}") +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/) if(NOT FREERDP_UNIFIED_BUILD) cmake_minimum_required(VERSION 3.13) project(uwac VERSION ${UWAC_VERSION} LANGUAGES C) - set(CMAKE_C_STANDARD 11) - set(CMAKE_C_STANDARD_REQUIRED ON) - set(CMAKE_C_EXTENSIONS ON) + include(ProjectCStandard) option(BUILD_TESTING_INTERNAL "Build library unit tests" ON) @@ -40,7 +39,6 @@ option(UWAC_FORCE_STATIC_BUILD "Force UWAC to be build as static library (recomm option(UWAC_HAVE_PIXMAN_REGION "Use PIXMAN or FreeRDP for region calculations" "NOT FREERDP_UNIFIED_BUILD") # Include our extra modules -set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/) include(CommonConfigOptions) include(CheckFunctionExists) diff --git a/winpr/CMakeLists.txt b/winpr/CMakeLists.txt index 08e33e186..dc9384c6a 100644 --- a/winpr/CMakeLists.txt +++ b/winpr/CMakeLists.txt @@ -26,10 +26,7 @@ if(NOT FREERDP_UNIFIED_BUILD) endif() project(WinPR LANGUAGES C) - set(CMAKE_C_STANDARD 11) - set(CMAKE_C_STANDARD_REQUIRED ON) - set(CMAKE_C_EXTENSIONS ON) - + include(ProjectCStandard) include(CommonConfigOptions) include(ConfigOptions) From d34b33b979f973239baf87344fff01eac4a7f151 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Thu, 13 Feb 2025 12:42:32 +0100 Subject: [PATCH 2/4] [client,sdl] initialize member --- client/SDL/SDL2/dialogs/sdl_widget.hpp | 2 +- client/SDL/SDL3/dialogs/sdl_widget.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/SDL/SDL2/dialogs/sdl_widget.hpp b/client/SDL/SDL2/dialogs/sdl_widget.hpp index 10c2a6b4a..4d49a91bf 100644 --- a/client/SDL/SDL2/dialogs/sdl_widget.hpp +++ b/client/SDL/SDL2/dialogs/sdl_widget.hpp @@ -81,7 +81,7 @@ class SdlWidget TTF_Font* _font = nullptr; SDL_Texture* _image = nullptr; - SDL_Rect _rect; + SDL_Rect _rect = {}; bool _input = false; bool _wrap = false; size_t _text_width = 0; diff --git a/client/SDL/SDL3/dialogs/sdl_widget.hpp b/client/SDL/SDL3/dialogs/sdl_widget.hpp index bdefc5003..6deff5164 100644 --- a/client/SDL/SDL3/dialogs/sdl_widget.hpp +++ b/client/SDL/SDL3/dialogs/sdl_widget.hpp @@ -79,7 +79,7 @@ class SdlWidget TTF_Font* _font = nullptr; SDL_Texture* _image = nullptr; - SDL_FRect _rect; + SDL_FRect _rect = {}; bool _input = false; bool _wrap = false; size_t _text_width = 0; From 6ddc268eda75218030160e7df6b17a7981981d7d Mon Sep 17 00:00:00 2001 From: akallabeth Date: Thu, 13 Feb 2025 09:39:01 +0100 Subject: [PATCH 3/4] [cmake] drop -Wno-used-but-marked-unused __attribute__((unused)) does emit that warning if a variable is used. The C23/C++17 version [[maybe_unused]] does not, so drop the warning to have consistency --- cmake/CommonCompilerFlags.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/CommonCompilerFlags.cmake b/cmake/CommonCompilerFlags.cmake index d755cf37b..1031fef4c 100644 --- a/cmake/CommonCompilerFlags.cmake +++ b/cmake/CommonCompilerFlags.cmake @@ -21,6 +21,7 @@ if(ENABLE_WARNING_VERBOSE) -Wno-reserved-identifier -Wno-covered-switch-default -Wno-disabled-macro-expansion + -Wno-used-but-marked-unused ) endif() endif() From e89efdece96dc292a96bb5aef07e05261e38616c Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Wed, 12 Feb 2025 14:31:45 +0100 Subject: [PATCH 4/4] [winpr] add WINPR_ATTR_UNUSED --- winpr/include/winpr/platform.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/winpr/include/winpr/platform.h b/winpr/include/winpr/platform.h index a88066a17..be331a044 100644 --- a/winpr/include/winpr/platform.h +++ b/winpr/include/winpr/platform.h @@ -593,6 +593,16 @@ WINPR_PRAGMA_DIAG_POP #endif #endif +#if defined(__cplusplus) && (__cplusplus >= 201703L) +#define WINPR_ATTR_UNUSED [[maybe_unused]] /** @since version 3.12.0 */ +#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 202000L) +#define WINPR_ATTR_UNUSED [[maybe_unused]] /** @since version 3.12.0 */ +#elif defined(__GNUC__) || defined(__clang__) +#define WINPR_ATTR_UNUSED __attribute__((unused)) /** @since version 3.12.0 */ +#else +#define WINPR_ATTR_UNUSED /** @since version 3.12.0 */ +#endif + #define WINPR_UNUSED(x) (void)(x) #endif /* WINPR_PLATFORM_H */