diff --git a/cmake/Qt3rdPartyLibraryHelpers.cmake b/cmake/Qt3rdPartyLibraryHelpers.cmake index 059213f5f25..f2b3882fc70 100644 --- a/cmake/Qt3rdPartyLibraryHelpers.cmake +++ b/cmake/Qt3rdPartyLibraryHelpers.cmake @@ -50,6 +50,7 @@ function(qt_internal_add_common_qt_library_helper target) endif() _qt_internal_add_library(${target} ${arg_STATIC} ${arg_SHARED} ${arg_MODULE} ${arg_INTERFACE}) + qt_internal_mark_as_internal_library(${target}) endfunction() # Wrapper function to create a regular cmake target and forward all the diff --git a/cmake/QtInternalTargets.cmake b/cmake/QtInternalTargets.cmake index db7be3d21ed..22080b4d536 100644 --- a/cmake/QtInternalTargets.cmake +++ b/cmake/QtInternalTargets.cmake @@ -325,8 +325,22 @@ function(qt_handle_apple_app_extension_api_only) # Build Qt libraries with -fapplication-extension. Needed to avoid linker warnings # transformed into errors on darwin platforms. set(flags "-fapplication-extension") - set(genex_condition "$>>") - set(flags "$<${genex_condition}:${flags}>") + + # The flags should only be applied to internal Qt libraries like modules and plugins. + # The reason why we use a custom property to apply the flags is because there's no other + # way to prevent the link options spilling out into user projects if the target that links + # against PlatformXInternal is a static library. + # The exported static library's INTERFACE_LINK_LIBRARIES property would contain + # $ and PlatformXInternal's INTERFACE_LINK_OPTIONS would be + # applied to a user project target. + # So to contain the spilling out of the flags, we ensure the link options are only added + # to internal Qt libraries that are marked with the property. + set(not_disabled "$>>") + set(is_qt_internal_library "$>") + + set(condition "$") + + set(flags "$<${condition}:${flags}>") target_compile_options(PlatformModuleInternal INTERFACE ${flags}) target_link_options(PlatformModuleInternal INTERFACE ${flags}) target_compile_options(PlatformPluginInternal INTERFACE ${flags}) diff --git a/cmake/QtModuleHelpers.cmake b/cmake/QtModuleHelpers.cmake index dc011a717ef..ec099845221 100644 --- a/cmake/QtModuleHelpers.cmake +++ b/cmake/QtModuleHelpers.cmake @@ -105,6 +105,7 @@ function(qt_internal_add_module target) endif() _qt_internal_add_library("${target}" ${type_to_create}) + qt_internal_mark_as_internal_library("${target}") get_target_property(target_type ${target} TYPE) diff --git a/cmake/QtPluginHelpers.cmake b/cmake/QtPluginHelpers.cmake index 23e3de8f888..1b92a638a0a 100644 --- a/cmake/QtPluginHelpers.cmake +++ b/cmake/QtPluginHelpers.cmake @@ -76,6 +76,7 @@ function(qt_internal_add_plugin target) ${ARGN} ) qt6_add_plugin(${target} ${plugin_args}) + qt_internal_mark_as_internal_library(${target}) qt_get_sanitized_plugin_type("${arg_TYPE}" plugin_type_escaped) diff --git a/cmake/QtTargetHelpers.cmake b/cmake/QtTargetHelpers.cmake index af775ca5142..9c1d0c5157b 100644 --- a/cmake/QtTargetHelpers.cmake +++ b/cmake/QtTargetHelpers.cmake @@ -753,3 +753,12 @@ function(qt_internal_adjust_main_config_runtime_output_dir target output_dir) RUNTIME_OUTPUT_DIRECTORY_${main_cmake_configuration} "${output_dir}" ) endfunction() + +# Marks a target with a property that it is a library (shared or static) which was built using the +# internal Qt API (qt_internal_add_module, qt_internal_add_plugin, etc) as opposed to it being +# a user project library (qt_add_library, qt_add_plugin, etc). +# +# Needed to allow selectively applying certain flags via PlatformXInternal targets. +function(qt_internal_mark_as_internal_library target) + set_target_properties(${target} PROPERTIES _qt_is_internal_library TRUE) +endfunction()