diff --git a/cmake/QtConfig.cmake.in b/cmake/QtConfig.cmake.in index 959fbda4268..f4107dc5005 100644 --- a/cmake/QtConfig.cmake.in +++ b/cmake/QtConfig.cmake.in @@ -155,7 +155,15 @@ foreach(module ${__qt_umbrella_find_components}) _qt_internal_save_find_package_context_for_debugging(@INSTALL_CMAKE_NAMESPACE@${module}) - if(NOT @INSTALL_CMAKE_NAMESPACE@${module}_FOUND) + if(@INSTALL_CMAKE_NAMESPACE@${module}_FOUND) + get_target_property(__qt_${module}_is_private @INSTALL_CMAKE_NAMESPACE@::${module} + _qt_is_private_module + ) + if(__qt_${module}_is_private) + _qt_internal_show_private_module_warning(${module}) + endif() + unset(__qt_${module}_is_private) + else() find_package(@INSTALL_CMAKE_NAMESPACE@${module} ${@INSTALL_CMAKE_NAMESPACE@_FIND_VERSION} ${_@INSTALL_CMAKE_NAMESPACE@_FIND_PARTS_QUIET} diff --git a/cmake/QtModuleConfigPrivate.cmake.in b/cmake/QtModuleConfigPrivate.cmake.in index 31bf64a4783..6c16eae2ef6 100644 --- a/cmake/QtModuleConfigPrivate.cmake.in +++ b/cmake/QtModuleConfigPrivate.cmake.in @@ -20,18 +20,8 @@ if(NOT DEFINED "@INSTALL_CMAKE_NAMESPACE@@target_private@_FOUND") set("@INSTALL_CMAKE_NAMESPACE@@target_private@_FOUND" TRUE) endif() -if(NOT __qt_@target@_always_load_private_module - AND NOT DEFINED QT_REPO_MODULE_VERSION - AND NOT QT_NO_PRIVATE_MODULE_WARNING - AND NOT __qt_private_module_@target_private@_warning_shown) - message(WARNING - "This project is using headers of the @target_private@ module and will therefore be tied " - "to this specific Qt module build version. " - "Running this project against other versions of the Qt modules may crash at any arbitrary " - "point. This is not a bug, but a result of using Qt internals. You have been warned! " - "\nYou can disable this warning by setting QT_NO_PRIVATE_MODULE_WARNING to ON." - ) - set(__qt_private_module_@target_private@_warning_shown TRUE) +if(NOT __qt_@target@_always_load_private_module) + _qt_internal_show_private_module_warning(@target_private@) endif() if(NOT QT_NO_CREATE_TARGETS AND @INSTALL_CMAKE_NAMESPACE@@target_private@_FOUND) diff --git a/cmake/QtPublicDependencyHelpers.cmake b/cmake/QtPublicDependencyHelpers.cmake index 8e00afe4280..eaf81faf503 100644 --- a/cmake/QtPublicDependencyHelpers.cmake +++ b/cmake/QtPublicDependencyHelpers.cmake @@ -127,6 +127,11 @@ endmacro() # contain preformed dependencies. See foreach block for reference. # The same applies for find_dependency_path_list. macro(_qt_internal_find_qt_dependencies target target_dep_list find_dependency_path_list) + set(__qt_${target}_find_qt_dependencies_save_QT_NO_PRIVATE_MODULE_WARNING + ${QT_NO_PRIVATE_MODULE_WARNING} + ) + set(QT_NO_PRIVATE_MODULE_WARNING ON) + foreach(__qt_${target}_target_dep IN LISTS ${target_dep_list}) list(GET __qt_${target}_target_dep 0 __qt_${target}_pkg) list(GET __qt_${target}_target_dep 1 __qt_${target}_version) @@ -146,6 +151,11 @@ macro(_qt_internal_find_qt_dependencies target target_dep_list find_dependency_p endif() endif() endforeach() + + set(QT_NO_PRIVATE_MODULE_WARNING + ${__qt_${target}_find_qt_dependencies_save_QT_NO_PRIVATE_MODULE_WARNING} + ) + unset(__qt_${target}_find_qt_dependencies_save_QT_NO_PRIVATE_MODULE_WARNING) endmacro() # If a dependency package was not found, provide some hints in the error message on how to debug @@ -312,3 +322,23 @@ macro(_qt_internal_setup_qt_host_path endif() endif() endmacro() + +function(_qt_internal_show_private_module_warning module) + if(DEFINED QT_REPO_MODULE_VERSION OR QT_NO_PRIVATE_MODULE_WARNING) + return() + endif() + + get_cmake_property(warning_shown __qt_private_module_${module}_warning_shown) + if(warning_shown) + return() + endif() + + message(WARNING + "This project is using headers of the ${module} module and will therefore be tied " + "to this specific Qt module build version. " + "Running this project against other versions of the Qt modules may crash at any arbitrary " + "point. This is not a bug, but a result of using Qt internals. You have been warned! " + "\nYou can disable this warning by setting QT_NO_PRIVATE_MODULE_WARNING to ON." + ) + set_property(GLOBAL PROPERTY __qt_private_module_${module}_warning_shown TRUE) +endfunction()