From ed57f8ab6d156e4f78e517870011485b08e00dc5 Mon Sep 17 00:00:00 2001 From: Alexey Edelev Date: Tue, 10 Sep 2024 16:33:57 +0200 Subject: [PATCH] Make per-repos WARNINGS_ARE_ERRORS work Add the WARNINGS_ARE_ERRORS flags unconditionally, so developers may control skipping per-target or per-repo. This allows setting the WARNINGS_ARE_ERRORS cmake option for each repo independently when configuring them. So qtbase might be built without the flag enabled and setting the WARNINGS_ARE_ERRORS to TRUE for the depending repo enables it for the internal Qt targets. Add the new internal function that controls the related internal flag. Keep qt_skip_warnings_are_errors for compatibility since it's used in qtwebengine. Combine qt_internal_set_skip_warnings_are_errors and qt_skip_warnings_are_errors_when_repo_unclean functionality in the new qt_internal_default_warnings_are_errors function. Change-Id: I1330c75cd67a24e6386f5e94a089e43fa2012bc4 Reviewed-by: Alexandru Croitor --- cmake/Qt3rdPartyLibraryHelpers.cmake | 4 ++-- cmake/QtExecutableHelpers.cmake | 3 ++- cmake/QtFlagHandlingHelpers.cmake | 18 ++++++++++++++---- cmake/QtInternalTargets.cmake | 9 ++++----- cmake/QtModuleHelpers.cmake | 3 ++- cmake/QtPluginHelpers.cmake | 3 ++- qmake/CMakeLists.txt | 2 +- 7 files changed, 27 insertions(+), 15 deletions(-) diff --git a/cmake/Qt3rdPartyLibraryHelpers.cmake b/cmake/Qt3rdPartyLibraryHelpers.cmake index 3affb1ba239..df6bb10e64c 100644 --- a/cmake/Qt3rdPartyLibraryHelpers.cmake +++ b/cmake/Qt3rdPartyLibraryHelpers.cmake @@ -95,7 +95,7 @@ function(qt_internal_add_cmake_library target) qt_internal_add_common_qt_library_helper(${target} ${library_helper_args}) - qt_skip_warnings_are_errors_when_repo_unclean("${target}") + qt_internal_default_warnings_are_errors("${target}") if (arg_OUTPUT_DIRECTORY) set_target_properties(${target} PROPERTIES @@ -198,7 +198,7 @@ function(qt_internal_add_3rdparty_library target) qt_internal_add_qt_repo_known_module(${target}) qt_internal_add_target_aliases(${target}) - qt_skip_warnings_are_errors_when_repo_unclean("${target}") + qt_internal_default_warnings_are_errors("${target}") set_target_properties(${target} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${QT_BUILD_DIR}/${INSTALL_LIBDIR}" diff --git a/cmake/QtExecutableHelpers.cmake b/cmake/QtExecutableHelpers.cmake index c63ffa221f3..9428f94ef67 100644 --- a/cmake/QtExecutableHelpers.cmake +++ b/cmake/QtExecutableHelpers.cmake @@ -93,7 +93,8 @@ function(qt_internal_add_executable name) endif() qt_autogen_tools_initial_setup(${name}) - qt_skip_warnings_are_errors_when_repo_unclean("${name}") + + qt_internal_default_warnings_are_errors("${name}") set(extra_libraries "") if(arg_CORE_LIBRARY STREQUAL "Bootstrap") diff --git a/cmake/QtFlagHandlingHelpers.cmake b/cmake/QtFlagHandlingHelpers.cmake index 36d035b5220..f8bd95a92e7 100644 --- a/cmake/QtFlagHandlingHelpers.cmake +++ b/cmake/QtFlagHandlingHelpers.cmake @@ -301,17 +301,27 @@ function(qt_internal_set_exceptions_flags target value) set_target_properties(${target} PROPERTIES _qt_internal_use_exceptions ${value}) endfunction() +# Deprecated. Replaced by qt_internal_set_skip_warnings_are_errors. function(qt_skip_warnings_are_errors target) + qt_internal_set_skip_warnings_are_errors(${target} TRUE) +endfunction() + +# Controls the QT_SKIP_WARNINGS_ARE_ERRORS property for the given target. +function(qt_internal_set_skip_warnings_are_errors target value) get_target_property(target_type "${target}" TYPE) if(target_type STREQUAL "INTERFACE_LIBRARY") return() endif() - set_target_properties("${target}" PROPERTIES QT_SKIP_WARNINGS_ARE_ERRORS ON) + set_target_properties("${target}" PROPERTIES QT_SKIP_WARNINGS_ARE_ERRORS ${value}) endfunction() -function(qt_skip_warnings_are_errors_when_repo_unclean target) - if(QT_REPO_NOT_WARNINGS_CLEAN) - qt_skip_warnings_are_errors("${target}") +# Sets the default warnings behavior according to the WARNINGS_ARE_ERRORS and +# QT_REPO_NOT_WARNINGS_CLEAN flags. +function(qt_internal_default_warnings_are_errors target) + if(WARNINGS_ARE_ERRORS AND NOT QT_REPO_NOT_WARNINGS_CLEAN) + qt_internal_set_skip_warnings_are_errors("${target}" FALSE) + else() + qt_internal_set_skip_warnings_are_errors("${target}" TRUE) endif() endfunction() diff --git a/cmake/QtInternalTargets.cmake b/cmake/QtInternalTargets.cmake index c53df7e6bfe..5e1ea19ea0d 100644 --- a/cmake/QtInternalTargets.cmake +++ b/cmake/QtInternalTargets.cmake @@ -158,11 +158,10 @@ qt_internal_add_global_definition(QT_USE_QSTRINGBUILDER SCOPE PLUGIN TOOL MODULE qt_internal_add_global_definition(QT_NO_FOREACH) qt_internal_add_global_definition(QT_NO_STD_FORMAT_SUPPORT SCOPE PLUGIN TOOL MODULE) -if(WARNINGS_ARE_ERRORS) - qt_internal_set_warnings_are_errors_flags(PlatformModuleInternal INTERFACE) - qt_internal_set_warnings_are_errors_flags(PlatformPluginInternal INTERFACE) - qt_internal_set_warnings_are_errors_flags(PlatformAppInternal INTERFACE) -endif() +qt_internal_set_warnings_are_errors_flags(PlatformModuleInternal INTERFACE) +qt_internal_set_warnings_are_errors_flags(PlatformPluginInternal INTERFACE) +qt_internal_set_warnings_are_errors_flags(PlatformAppInternal INTERFACE) + if(WIN32) # Needed for M_PI define. Same as mkspecs/features/qt_module.prf. # It's set for every module being built, but it's not propagated to user apps. diff --git a/cmake/QtModuleHelpers.cmake b/cmake/QtModuleHelpers.cmake index 1620b64567e..621824896ee 100644 --- a/cmake/QtModuleHelpers.cmake +++ b/cmake/QtModuleHelpers.cmake @@ -311,7 +311,8 @@ function(qt_internal_add_module target) endif() qt_internal_add_target_aliases("${target}") - qt_skip_warnings_are_errors_when_repo_unclean("${target}") + + qt_internal_default_warnings_are_errors("${target}") # No need to compile Q_IMPORT_PLUGIN-containing files for non-executables. if(is_static_lib) diff --git a/cmake/QtPluginHelpers.cmake b/cmake/QtPluginHelpers.cmake index b010e7604b1..ae73ee5aa79 100644 --- a/cmake/QtPluginHelpers.cmake +++ b/cmake/QtPluginHelpers.cmake @@ -160,7 +160,8 @@ function(qt_internal_add_plugin target) qt_set_common_target_properties("${target}") qt_internal_add_target_aliases("${target}") - qt_skip_warnings_are_errors_when_repo_unclean("${target}") + + qt_internal_default_warnings_are_errors("${target}") set_target_properties("${target}" PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${output_directory}" diff --git a/qmake/CMakeLists.txt b/qmake/CMakeLists.txt index 9334ca72ab8..012d22d909e 100644 --- a/qmake/CMakeLists.txt +++ b/qmake/CMakeLists.txt @@ -152,5 +152,5 @@ set_target_properties(${target_name} PROPERTIES ) qt_internal_apply_gc_binaries(${target_name} PRIVATE) -qt_skip_warnings_are_errors(${target_name}) +qt_internal_set_skip_warnings_are_errors(${target_name} TRUE)