From cb7f32f5b861fe115fa71f64500a5cbb0b643f1b Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Thu, 4 Jul 2013 10:00:27 +0200 Subject: [PATCH] Mark qt4_use_modules and qt4_automoc as obsolete. The QT_QMAKE_EXECUTABLE has to be passed through the cmake calls because the executable may not be in the PATH. --- Modules/FindQt4.cmake | 2 ++ Modules/Qt4Macros.cmake | 22 +++++++++++++++++++ Tests/RunCMake/CMakeLists.txt | 4 ++++ .../AutomocMacro-WARN-result.txt | 1 + .../AutomocMacro-WARN-stderr.txt | 5 +++++ .../ObsoleteQtMacros/AutomocMacro-WARN.cmake | 7 ++++++ .../RunCMake/ObsoleteQtMacros/CMakeLists.txt | 3 +++ .../ObsoleteQtMacros/RunCMakeTest.cmake | 6 +++++ .../UseModulesMacro-WARN-result.txt | 1 + .../UseModulesMacro-WARN-stderr.txt | 6 +++++ .../UseModulesMacro-WARN.cmake | 7 ++++++ Tests/RunCMake/ObsoleteQtMacros/empty.cpp | 7 ++++++ 12 files changed, 71 insertions(+) create mode 100644 Tests/RunCMake/ObsoleteQtMacros/AutomocMacro-WARN-result.txt create mode 100644 Tests/RunCMake/ObsoleteQtMacros/AutomocMacro-WARN-stderr.txt create mode 100644 Tests/RunCMake/ObsoleteQtMacros/AutomocMacro-WARN.cmake create mode 100644 Tests/RunCMake/ObsoleteQtMacros/CMakeLists.txt create mode 100644 Tests/RunCMake/ObsoleteQtMacros/RunCMakeTest.cmake create mode 100644 Tests/RunCMake/ObsoleteQtMacros/UseModulesMacro-WARN-result.txt create mode 100644 Tests/RunCMake/ObsoleteQtMacros/UseModulesMacro-WARN-stderr.txt create mode 100644 Tests/RunCMake/ObsoleteQtMacros/UseModulesMacro-WARN.cmake create mode 100644 Tests/RunCMake/ObsoleteQtMacros/empty.cpp diff --git a/Modules/FindQt4.cmake b/Modules/FindQt4.cmake index 8ce1934b4..7b37e1ead 100644 --- a/Modules/FindQt4.cmake +++ b/Modules/FindQt4.cmake @@ -100,6 +100,7 @@ # because you need a custom filename for the moc file or something similar. # # macro QT4_AUTOMOC(sourcefile1 sourcefile2 ... ) +# The qt4_automoc macro is obsolete. Use the CMAKE_AUTOMOC feature instead. # This macro is still experimental. # It can be used to have moc automatically handled. # So if you have the files foo.h and foo.cpp, and in foo.h a @@ -174,6 +175,7 @@ # must exist and are not updated in any way. # # function QT4_USE_MODULES( target [link_type] modules...) +# This function is obsolete. Use target_link_libraries with IMPORTED targets instead. # Make use the from Qt. Using a Qt module means # to link to the library, add the relevant include directories for the module, # and add the relevant compiler defines for using the module. diff --git a/Modules/Qt4Macros.cmake b/Modules/Qt4Macros.cmake index a0b2e3163..5e13b59a2 100644 --- a/Modules/Qt4Macros.cmake +++ b/Modules/Qt4Macros.cmake @@ -357,6 +357,17 @@ endmacro() macro(QT4_AUTOMOC) + if(NOT CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 2.8.11) + if(CMAKE_WARN_DEPRECATED) + set(messageType WARNING) + endif() + if(CMAKE_ERROR_DEPRECATED) + set(messageType FATAL_ERROR) + endif() + if(messageType) + message(${messageType} "The qt4_automoc macro is obsolete. Use the CMAKE_AUTOMOC feature instead.") + endif() + endif() QT4_GET_MOC_FLAGS(_moc_INCS) set(_matching_FILES ) @@ -467,6 +478,17 @@ macro(QT4_ADD_TRANSLATION _qm_files) endmacro() function(qt4_use_modules _target _link_type) + if(NOT CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 2.8.11) + if(CMAKE_WARN_DEPRECATED) + set(messageType WARNING) + endif() + if(CMAKE_ERROR_DEPRECATED) + set(messageType FATAL_ERROR) + endif() + if(messageType) + message(${messageType} "The qt4_use_modules function is obsolete. Use target_link_libraries with IMPORTED targets instead.") + endif() + endif() if ("${_link_type}" STREQUAL "LINK_PUBLIC" OR "${_link_type}" STREQUAL "LINK_PRIVATE") set(modules ${ARGN}) set(link_type ${_link_type}) diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index c1a08d246..71246e1d0 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -101,6 +101,10 @@ find_package(Qt5Core QUIET) if (QT4_FOUND AND Qt5Core_FOUND AND NOT Qt5Core_VERSION VERSION_LESS 5.1.0) add_RunCMake_test(IncompatibleQt) endif() +if (QT4_FOUND) + set(ObsoleteQtMacros_ARGS -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}) + add_RunCMake_test(ObsoleteQtMacros) +endif() if("${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio [^6]") add_RunCMake_test(include_external_msproject) diff --git a/Tests/RunCMake/ObsoleteQtMacros/AutomocMacro-WARN-result.txt b/Tests/RunCMake/ObsoleteQtMacros/AutomocMacro-WARN-result.txt new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/Tests/RunCMake/ObsoleteQtMacros/AutomocMacro-WARN-result.txt @@ -0,0 +1 @@ +0 diff --git a/Tests/RunCMake/ObsoleteQtMacros/AutomocMacro-WARN-stderr.txt b/Tests/RunCMake/ObsoleteQtMacros/AutomocMacro-WARN-stderr.txt new file mode 100644 index 000000000..6f7e8ee61 --- /dev/null +++ b/Tests/RunCMake/ObsoleteQtMacros/AutomocMacro-WARN-stderr.txt @@ -0,0 +1,5 @@ +CMake Warning at .*/Modules/Qt4Macros.cmake:[^ ]+ \(message\): + The qt4_automoc macro is obsolete. Use the CMAKE_AUTOMOC feature instead. +Call Stack \(most recent call first\): + AutomocMacro-WARN.cmake:7 \(qt4_automoc\) + CMakeLists.txt:3 \(include\) diff --git a/Tests/RunCMake/ObsoleteQtMacros/AutomocMacro-WARN.cmake b/Tests/RunCMake/ObsoleteQtMacros/AutomocMacro-WARN.cmake new file mode 100644 index 000000000..c0c64a5b7 --- /dev/null +++ b/Tests/RunCMake/ObsoleteQtMacros/AutomocMacro-WARN.cmake @@ -0,0 +1,7 @@ + +find_package(Qt4 REQUIRED) + +set(CMAKE_WARN_DEPRECATED 1) + +add_library(foo SHARED empty.cpp) +qt4_automoc(foo_moc_srcs empty.cpp) diff --git a/Tests/RunCMake/ObsoleteQtMacros/CMakeLists.txt b/Tests/RunCMake/ObsoleteQtMacros/CMakeLists.txt new file mode 100644 index 000000000..65ac8e8db --- /dev/null +++ b/Tests/RunCMake/ObsoleteQtMacros/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 2.8.11) +project(${RunCMake_TEST}) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/ObsoleteQtMacros/RunCMakeTest.cmake b/Tests/RunCMake/ObsoleteQtMacros/RunCMakeTest.cmake new file mode 100644 index 000000000..eee2cc399 --- /dev/null +++ b/Tests/RunCMake/ObsoleteQtMacros/RunCMakeTest.cmake @@ -0,0 +1,6 @@ +include(RunCMake) + +set(RunCMake_TEST_OPTIONS -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}) + +run_cmake(UseModulesMacro-WARN) +run_cmake(AutomocMacro-WARN) diff --git a/Tests/RunCMake/ObsoleteQtMacros/UseModulesMacro-WARN-result.txt b/Tests/RunCMake/ObsoleteQtMacros/UseModulesMacro-WARN-result.txt new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/Tests/RunCMake/ObsoleteQtMacros/UseModulesMacro-WARN-result.txt @@ -0,0 +1 @@ +0 diff --git a/Tests/RunCMake/ObsoleteQtMacros/UseModulesMacro-WARN-stderr.txt b/Tests/RunCMake/ObsoleteQtMacros/UseModulesMacro-WARN-stderr.txt new file mode 100644 index 000000000..b90c6651a --- /dev/null +++ b/Tests/RunCMake/ObsoleteQtMacros/UseModulesMacro-WARN-stderr.txt @@ -0,0 +1,6 @@ +CMake Warning at .*/Modules/Qt4Macros.cmake:[^ ]+ \(message\): + The qt4_use_modules function is obsolete. Use target_link_libraries with + IMPORTED targets instead. +Call Stack \(most recent call first\): + UseModulesMacro-WARN.cmake:[^ ]+ \(qt4_use_modules\) + CMakeLists.txt:3 \(include\) diff --git a/Tests/RunCMake/ObsoleteQtMacros/UseModulesMacro-WARN.cmake b/Tests/RunCMake/ObsoleteQtMacros/UseModulesMacro-WARN.cmake new file mode 100644 index 000000000..e86a3723b --- /dev/null +++ b/Tests/RunCMake/ObsoleteQtMacros/UseModulesMacro-WARN.cmake @@ -0,0 +1,7 @@ + +find_package(Qt4 REQUIRED) + +set(CMAKE_WARN_DEPRECATED 1) + +add_library(foo SHARED empty.cpp) +qt4_use_modules(foo LINK_PRIVATE Core) diff --git a/Tests/RunCMake/ObsoleteQtMacros/empty.cpp b/Tests/RunCMake/ObsoleteQtMacros/empty.cpp new file mode 100644 index 000000000..7279c5e0b --- /dev/null +++ b/Tests/RunCMake/ObsoleteQtMacros/empty.cpp @@ -0,0 +1,7 @@ +#ifdef _WIN32 +__declspec(dllexport) +#endif +int empty(void) +{ + return 0; +}