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 <alexandru.croitor@qt.io>
This commit is contained in:
Alexey Edelev 2024-09-10 16:33:57 +02:00
parent 8d8805214d
commit ed57f8ab6d
7 changed files with 27 additions and 15 deletions

View File

@ -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}"

View File

@ -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")

View File

@ -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()

View File

@ -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.

View File

@ -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)

View File

@ -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}"

View File

@ -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)