From ea8645d8468c9647e6b5847d9787ca0da1f3262c Mon Sep 17 00:00:00 2001 From: Alexandru Croitor Date: Tue, 19 Jul 2022 19:56:22 +0200 Subject: [PATCH] CMake: Deprecate _add_app/executable/test/tool PUBLIC_LIBRARIES option Warn projects not to use it because PUBLIC_LIBRARIES don't make sense for executable targets and it also led to some issues in the internal functions where some of them did not expect to receive PUBLIC_LIBRARIES. To ensure builds don't needlessly break, treat PUBLIC_LIBRARIES values as regular LIBRARIES. In the future we might add an error instead. Using PUBLIC_LIBRARIES in qt_internal_add_app, etc, accidentally worked because the option name and the values following it were parsed as values of the "previous" option, like SOURCES or INCLUDE_DIRECTORIES or LIBRARIES, and when those got passed through to qt_internal_extend_target, things magically worked. We have a lot of projects using PUBLIC_LIBRARIES, mostly due to the way qmake pro files were written and how pro2cmake converted them. We'll have to clean up each repo. Change-Id: I69e09d34afdf98f0d47c08d324643fc986f8131c Reviewed-by: Alexey Edelev --- cmake/QtAppHelpers.cmake | 13 +++++++++++-- cmake/QtExecutableHelpers.cmake | 13 +++++++++++-- cmake/QtTestHelpers.cmake | 17 +++++++++++++---- cmake/QtToolHelpers.cmake | 12 +++++++++++- 4 files changed, 46 insertions(+), 9 deletions(-) diff --git a/cmake/QtAppHelpers.cmake b/cmake/QtAppHelpers.cmake index d5c05fe90f0..774944ea53f 100644 --- a/cmake/QtAppHelpers.cmake +++ b/cmake/QtAppHelpers.cmake @@ -5,7 +5,7 @@ function(qt_internal_add_app target) "qt_internal_add_app" "NO_INSTALL;INSTALL_VERSIONED_LINK;EXCEPTIONS" "${__default_target_info_args};INSTALL_DIR" - "${__default_private_args}" + "${__default_private_args};PUBLIC_LIBRARIES" ${ARGN}) set(exceptions "") @@ -26,6 +26,12 @@ function(qt_internal_add_app target) set(no_install NO_INSTALL) endif() + if(arg_PUBLIC_LIBRARIES) + message(WARNING + "qt_internal_add_app's PUBLIC_LIBRARIES option is deprecated, and will be removed in " + "a future Qt version. Use the LIBRARIES option instead.") + endif() + qt_internal_add_executable("${target}" QT_APP DELAY_RC @@ -39,7 +45,10 @@ function(qt_internal_add_app target) ${arg_INCLUDE_DIRECTORIES} DEFINES ${arg_DEFINES} - LIBRARIES ${arg_LIBRARIES} Qt::PlatformAppInternal + LIBRARIES + ${arg_LIBRARIES} + ${arg_PUBLIC_LIBRARIES} + Qt::PlatformAppInternal COMPILE_OPTIONS ${arg_COMPILE_OPTIONS} LINK_OPTIONS ${arg_LINK_OPTIONS} MOC_OPTIONS ${arg_MOC_OPTIONS} diff --git a/cmake/QtExecutableHelpers.cmake b/cmake/QtExecutableHelpers.cmake index ef6800fa7b1..c9129d3b5ed 100644 --- a/cmake/QtExecutableHelpers.cmake +++ b/cmake/QtExecutableHelpers.cmake @@ -104,12 +104,21 @@ function(qt_internal_add_executable name) ${arg_INCLUDE_DIRECTORIES} ) + if(arg_PUBLIC_LIBRARIES) + message(WARNING + "qt_internal_add_executable's PUBLIC_LIBRARIES option is deprecated, and will be " + "removed in a future Qt version. Use the LIBRARIES option instead.") + endif() + qt_internal_extend_target("${name}" SOURCES ${arg_SOURCES} INCLUDE_DIRECTORIES ${private_includes} DEFINES ${arg_DEFINES} - LIBRARIES ${arg_LIBRARIES} Qt::PlatformCommonInternal - PUBLIC_LIBRARIES ${extra_libraries} ${arg_PUBLIC_LIBRARIES} + LIBRARIES + ${arg_LIBRARIES} + ${arg_PUBLIC_LIBRARIES} + Qt::PlatformCommonInternal + ${extra_libraries} DBUS_ADAPTOR_SOURCES "${arg_DBUS_ADAPTOR_SOURCES}" DBUS_ADAPTOR_FLAGS "${arg_DBUS_ADAPTOR_FLAGS}" DBUS_INTERFACE_SOURCES "${arg_DBUS_INTERFACE_SOURCES}" diff --git a/cmake/QtTestHelpers.cmake b/cmake/QtTestHelpers.cmake index 6bdbfeec2d2..cb80d22071d 100644 --- a/cmake/QtTestHelpers.cmake +++ b/cmake/QtTestHelpers.cmake @@ -240,6 +240,12 @@ function(qt_internal_add_test name) set(version_arg VERSION "${arg_VERSION}") endif() + if(arg_PUBLIC_LIBRARIES) + message(WARNING + "qt_internal_add_test's PUBLIC_LIBRARIES option is deprecated, and will be " + "removed in a future Qt version. Use the LIBRARIES option instead.") + endif() + # Handle cases where we have a qml test without source files if (arg_SOURCES) set(private_includes @@ -260,8 +266,11 @@ function(qt_internal_add_test name) ${private_includes} DEFINES ${arg_DEFINES} - PUBLIC_LIBRARIES ${QT_CMAKE_EXPORT_NAMESPACE}::Core ${QT_CMAKE_EXPORT_NAMESPACE}::Test ${arg_PUBLIC_LIBRARIES} - LIBRARIES ${arg_LIBRARIES} + LIBRARIES + ${arg_LIBRARIES} + ${arg_PUBLIC_LIBRARIES} + ${QT_CMAKE_EXPORT_NAMESPACE}::Core + ${QT_CMAKE_EXPORT_NAMESPACE}::Test COMPILE_OPTIONS ${arg_COMPILE_OPTIONS} LINK_OPTIONS ${arg_LINK_OPTIONS} MOC_OPTIONS ${arg_MOC_OPTIONS} @@ -284,7 +293,7 @@ function(qt_internal_add_test name) # QMLTest specifics qt_internal_extend_target("${name}" CONDITION arg_QMLTEST - PUBLIC_LIBRARIES ${QT_CMAKE_EXPORT_NAMESPACE}::QuickTest + LIBRARIES ${QT_CMAKE_EXPORT_NAMESPACE}::QuickTest ) qt_internal_extend_target("${name}" CONDITION arg_QMLTEST AND NOT ANDROID @@ -299,7 +308,7 @@ function(qt_internal_add_test name) # Android requires Qt::Gui so add it by default for tests qt_internal_extend_target("${name}" CONDITION ANDROID - PUBLIC_LIBRARIES ${QT_CMAKE_EXPORT_NAMESPACE}::Gui + LIBRARIES ${QT_CMAKE_EXPORT_NAMESPACE}::Gui ) endif() diff --git a/cmake/QtToolHelpers.cmake b/cmake/QtToolHelpers.cmake index 2f49e4d8726..5b9340a3a3b 100644 --- a/cmake/QtToolHelpers.cmake +++ b/cmake/QtToolHelpers.cmake @@ -43,6 +43,7 @@ function(qt_internal_add_tool target_name) set(multi_value_keywords EXTRA_CMAKE_FILES EXTRA_CMAKE_INCLUDES + PUBLIC_LIBRARIES ${__default_private_args}) qt_parse_all_arguments(arg "qt_internal_add_tool" "${option_keywords}" "${one_value_keywords}" @@ -194,6 +195,12 @@ function(qt_internal_add_tool target_name) set(output_dir "${QT_BUILD_DIR}/${install_dir}") + if(arg_PUBLIC_LIBRARIES) + message(WARNING + "qt_internal_add_tool's PUBLIC_LIBRARIES option is deprecated, and will be " + "removed in a future Qt version. Use the LIBRARIES option instead.") + endif() + qt_internal_add_executable("${target_name}" OUTPUT_DIRECTORY "${output_dir}" ${exceptions} @@ -205,7 +212,10 @@ function(qt_internal_add_tool target_name) QT_USE_QSTRINGBUILDER ${arg_DEFINES} ${corelib} - LIBRARIES ${arg_LIBRARIES} Qt::PlatformToolInternal + LIBRARIES + ${arg_LIBRARIES} + ${arg_PUBLIC_LIBRARIES} + Qt::PlatformToolInternal COMPILE_OPTIONS ${arg_COMPILE_OPTIONS} LINK_OPTIONS ${arg_LINK_OPTIONS} MOC_OPTIONS ${arg_MOC_OPTIONS}