mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-18 13:10:17 -06:00
find_package(): Add policy to remove the FindQt module
Removing FindQt.cmake gives Qt upstream a path forward to export its own QtConfig.cmake files which can be found by find_package() without having to explicitly specify CONFIG. Projects that still want to use Qt3/4 can call find_package(Qt[34]), include(FindQt), or add FindQt.cmake to their CMAKE_MODULE_PATH.
This commit is contained in:
@@ -225,7 +225,6 @@ They are normally called through the :command:`find_package` command.
|
|||||||
/module/FindPython3
|
/module/FindPython3
|
||||||
/module/FindQt3
|
/module/FindQt3
|
||||||
/module/FindQt4
|
/module/FindQt4
|
||||||
/module/FindQt
|
|
||||||
/module/FindQuickTime
|
/module/FindQuickTime
|
||||||
/module/FindRTI
|
/module/FindRTI
|
||||||
/module/FindRuby
|
/module/FindRuby
|
||||||
@@ -283,6 +282,7 @@ Deprecated Find Modules
|
|||||||
/module/FindCUDA
|
/module/FindCUDA
|
||||||
/module/FindPythonInterp
|
/module/FindPythonInterp
|
||||||
/module/FindPythonLibs
|
/module/FindPythonLibs
|
||||||
|
/module/FindQt
|
||||||
/module/FindwxWindows
|
/module/FindwxWindows
|
||||||
|
|
||||||
Legacy CPack Modules
|
Legacy CPack Modules
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ Policies Introduced by CMake 3.14
|
|||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
|
CMP0084: The FindQt module does not exist for find_package(). </policy/CMP0084>
|
||||||
CMP0083: Add PIE options when linking executable. </policy/CMP0083>
|
CMP0083: Add PIE options when linking executable. </policy/CMP0083>
|
||||||
CMP0082: Install rules from add_subdirectory() are interleaved with those in caller. </policy/CMP0082>
|
CMP0082: Install rules from add_subdirectory() are interleaved with those in caller. </policy/CMP0082>
|
||||||
|
|
||||||
|
|||||||
26
Help/policy/CMP0084.rst
Normal file
26
Help/policy/CMP0084.rst
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
CMP0084
|
||||||
|
-------
|
||||||
|
|
||||||
|
The :module:`FindQt` module does not exist for :command:`find_package`.
|
||||||
|
|
||||||
|
The existence of :module:`FindQt` means that for Qt upstream to provide
|
||||||
|
package config files that can be found by ``find_package(Qt)``, the consuming
|
||||||
|
project has to explicitly specify ``find_package(Qt CONFIG)``. Removing this
|
||||||
|
module gives Qt a path forward for exporting its own config files which can
|
||||||
|
easily be found by consuming projects.
|
||||||
|
|
||||||
|
This policy pretends that CMake's internal :module:`FindQt` module does not
|
||||||
|
exist for :command:`find_package`. If a project really wants to use Qt 3 or 4,
|
||||||
|
it can call ``find_package(Qt[34])``, ``include(FindQt)``, or add
|
||||||
|
:module:`FindQt` to their :variable:`CMAKE_MODULE_PATH`.
|
||||||
|
|
||||||
|
The ``OLD`` behavior of this policy is for :module:`FindQt` to exist for
|
||||||
|
:command:`find_package`. The ``NEW`` behavior is to pretend that it doesn't
|
||||||
|
exist for :command:`find_package`.
|
||||||
|
|
||||||
|
This policy was introduced in CMake version 3.14. CMake version
|
||||||
|
|release| warns when the policy is not set and uses ``OLD`` behavior.
|
||||||
|
Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
|
||||||
|
explicitly.
|
||||||
|
|
||||||
|
.. include:: DEPRECATED.txt
|
||||||
8
Help/release/dev/deprecate-findqt.rst
Normal file
8
Help/release/dev/deprecate-findqt.rst
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
deprecate-findqt
|
||||||
|
----------------
|
||||||
|
|
||||||
|
* The :module:`FindQt` module is no longer used by the :command:`find_package`
|
||||||
|
command as a find module. This allows the Qt Project upstream to optionally
|
||||||
|
provide its own ``QtConfig.cmake`` package configuration file and have
|
||||||
|
applications use it via ``find_package(Qt)`` rather than
|
||||||
|
``find_package(Qt CONFIG)``. See policy :policy:`CMP0084`.
|
||||||
@@ -10,6 +10,9 @@ Searches for all installed versions of Qt3 or Qt4.
|
|||||||
This module cannot handle Qt5 or any later versions.
|
This module cannot handle Qt5 or any later versions.
|
||||||
For those, see :manual:`cmake-qt(7)`.
|
For those, see :manual:`cmake-qt(7)`.
|
||||||
|
|
||||||
|
This module exists for the :command:`find_package` command only if
|
||||||
|
policy :policy:`CMP0084` is not set to ``NEW``.
|
||||||
|
|
||||||
This module should only be used if your project can work with multiple
|
This module should only be used if your project can work with multiple
|
||||||
versions of Qt. If not, you should just directly use FindQt4 or
|
versions of Qt. If not, you should just directly use FindQt4 or
|
||||||
FindQt3. If multiple versions of Qt are found on the machine, then
|
FindQt3. If multiple versions of Qt are found on the machine, then
|
||||||
@@ -34,6 +37,11 @@ then the FindQt3 or FindQt4 module is included.
|
|||||||
QT3_INSTALLED is set to TRUE if qt3 is found.
|
QT3_INSTALLED is set to TRUE if qt3 is found.
|
||||||
#]=======================================================================]
|
#]=======================================================================]
|
||||||
|
|
||||||
|
if(_findqt_testing)
|
||||||
|
set(_findqt_included TRUE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
# look for signs of qt3 installations
|
# look for signs of qt3 installations
|
||||||
file(GLOB GLOB_TEMP_VAR /usr/lib*/qt-3*/bin/qmake /usr/lib*/qt3*/bin/qmake)
|
file(GLOB GLOB_TEMP_VAR /usr/lib*/qt-3*/bin/qmake /usr/lib*/qt3*/bin/qmake)
|
||||||
if(GLOB_TEMP_VAR)
|
if(GLOB_TEMP_VAR)
|
||||||
|
|||||||
@@ -111,6 +111,8 @@ cmFindPackageCommand::cmFindPackageCommand()
|
|||||||
this->SortOrder = None;
|
this->SortOrder = None;
|
||||||
this->SortDirection = Asc;
|
this->SortDirection = Asc;
|
||||||
this->AppendSearchPathGroups();
|
this->AppendSearchPathGroups();
|
||||||
|
|
||||||
|
this->DeprecatedFindModules["Qt"] = cmPolicies::CMP0084;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmFindPackageCommand::AppendSearchPathGroups()
|
void cmFindPackageCommand::AppendSearchPathGroups()
|
||||||
@@ -653,8 +655,31 @@ bool cmFindPackageCommand::FindModule(bool& found)
|
|||||||
std::string module = "Find";
|
std::string module = "Find";
|
||||||
module += this->Name;
|
module += this->Name;
|
||||||
module += ".cmake";
|
module += ".cmake";
|
||||||
std::string mfile = this->Makefile->GetModulesFile(module.c_str());
|
bool system = false;
|
||||||
|
std::string mfile = this->Makefile->GetModulesFile(module.c_str(), system);
|
||||||
if (!mfile.empty()) {
|
if (!mfile.empty()) {
|
||||||
|
if (system) {
|
||||||
|
auto it = this->DeprecatedFindModules.find(this->Name);
|
||||||
|
if (it != this->DeprecatedFindModules.end()) {
|
||||||
|
cmPolicies::PolicyStatus status =
|
||||||
|
this->Makefile->GetPolicyStatus(it->second);
|
||||||
|
switch (status) {
|
||||||
|
case cmPolicies::WARN: {
|
||||||
|
std::ostringstream e;
|
||||||
|
e << cmPolicies::GetPolicyWarning(it->second) << "\n";
|
||||||
|
this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, e.str());
|
||||||
|
CM_FALLTHROUGH;
|
||||||
|
}
|
||||||
|
case cmPolicies::OLD:
|
||||||
|
break;
|
||||||
|
case cmPolicies::REQUIRED_IF_USED:
|
||||||
|
case cmPolicies::REQUIRED_ALWAYS:
|
||||||
|
case cmPolicies::NEW:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Load the module we found, and set "<name>_FIND_MODULE" to true
|
// Load the module we found, and set "<name>_FIND_MODULE" to true
|
||||||
// while inside it.
|
// while inside it.
|
||||||
found = true;
|
found = true;
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#define cmFindPackageCommand_h
|
#define cmFindPackageCommand_h
|
||||||
|
|
||||||
#include "cmConfigure.h" // IWYU pragma: keep
|
#include "cmConfigure.h" // IWYU pragma: keep
|
||||||
|
#include "cmPolicies.h"
|
||||||
|
|
||||||
#include "cm_kwiml.h"
|
#include "cm_kwiml.h"
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
@@ -148,6 +149,8 @@ private:
|
|||||||
};
|
};
|
||||||
std::map<std::string, OriginalDef> OriginalDefs;
|
std::map<std::string, OriginalDef> OriginalDefs;
|
||||||
|
|
||||||
|
std::map<std::string, cmPolicies::PolicyID> DeprecatedFindModules;
|
||||||
|
|
||||||
std::string Name;
|
std::string Name;
|
||||||
std::string Variable;
|
std::string Variable;
|
||||||
std::string Version;
|
std::string Version;
|
||||||
|
|||||||
@@ -3500,7 +3500,8 @@ void cmMakefile::DisplayStatus(const char* message, float s) const
|
|||||||
cm->UpdateProgress(message, s);
|
cm->UpdateProgress(message, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string cmMakefile::GetModulesFile(const char* filename) const
|
std::string cmMakefile::GetModulesFile(const char* filename,
|
||||||
|
bool& system) const
|
||||||
{
|
{
|
||||||
std::string result;
|
std::string result;
|
||||||
|
|
||||||
@@ -3547,8 +3548,10 @@ std::string cmMakefile::GetModulesFile(const char* filename) const
|
|||||||
// Normally, prefer the files found in CMAKE_MODULE_PATH. Only when the file
|
// Normally, prefer the files found in CMAKE_MODULE_PATH. Only when the file
|
||||||
// from which we are being called is located itself in CMAKE_ROOT, then
|
// from which we are being called is located itself in CMAKE_ROOT, then
|
||||||
// prefer results from CMAKE_ROOT depending on the policy setting.
|
// prefer results from CMAKE_ROOT depending on the policy setting.
|
||||||
|
system = false;
|
||||||
result = moduleInCMakeModulePath;
|
result = moduleInCMakeModulePath;
|
||||||
if (result.empty()) {
|
if (result.empty()) {
|
||||||
|
system = true;
|
||||||
result = moduleInCMakeRoot;
|
result = moduleInCMakeRoot;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3571,11 +3574,13 @@ std::string cmMakefile::GetModulesFile(const char* filename) const
|
|||||||
CM_FALLTHROUGH;
|
CM_FALLTHROUGH;
|
||||||
}
|
}
|
||||||
case cmPolicies::OLD:
|
case cmPolicies::OLD:
|
||||||
|
system = false;
|
||||||
result = moduleInCMakeModulePath;
|
result = moduleInCMakeModulePath;
|
||||||
break;
|
break;
|
||||||
case cmPolicies::REQUIRED_IF_USED:
|
case cmPolicies::REQUIRED_IF_USED:
|
||||||
case cmPolicies::REQUIRED_ALWAYS:
|
case cmPolicies::REQUIRED_ALWAYS:
|
||||||
case cmPolicies::NEW:
|
case cmPolicies::NEW:
|
||||||
|
system = true;
|
||||||
result = moduleInCMakeRoot;
|
result = moduleInCMakeRoot;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -689,7 +689,13 @@ public:
|
|||||||
/**
|
/**
|
||||||
* Return a location of a file in cmake or custom modules directory
|
* Return a location of a file in cmake or custom modules directory
|
||||||
*/
|
*/
|
||||||
std::string GetModulesFile(const char* name) const;
|
std::string GetModulesFile(const char* name) const
|
||||||
|
{
|
||||||
|
bool system;
|
||||||
|
return this->GetModulesFile(name, system);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string GetModulesFile(const char* name, bool& system) const;
|
||||||
|
|
||||||
///! Set/Get a property of this directory
|
///! Set/Get a property of this directory
|
||||||
void SetProperty(const std::string& prop, const char* value);
|
void SetProperty(const std::string& prop, const char* value);
|
||||||
|
|||||||
@@ -246,7 +246,10 @@ class cmMakefile;
|
|||||||
"in caller.", \
|
"in caller.", \
|
||||||
3, 14, 0, cmPolicies::WARN) \
|
3, 14, 0, cmPolicies::WARN) \
|
||||||
SELECT(POLICY, CMP0083, "Add PIE options when linking executable.", 3, 14, \
|
SELECT(POLICY, CMP0083, "Add PIE options when linking executable.", 3, 14, \
|
||||||
0, cmPolicies::WARN)
|
0, cmPolicies::WARN) \
|
||||||
|
SELECT(POLICY, CMP0084, \
|
||||||
|
"The FindQt module does not exist for find_package().", 3, 14, 0, \
|
||||||
|
cmPolicies::WARN)
|
||||||
|
|
||||||
#define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1)
|
#define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1)
|
||||||
#define CM_FOR_EACH_POLICY_ID(POLICY) \
|
#define CM_FOR_EACH_POLICY_ID(POLICY) \
|
||||||
|
|||||||
20
Tests/RunCMake/find_package/CMP0084-NEW-stderr.txt
Normal file
20
Tests/RunCMake/find_package/CMP0084-NEW-stderr.txt
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
^CMake Warning at CMP0084-NEW\.cmake:[0-9]+ \(find_package\):
|
||||||
|
No "FindQt\.cmake" found in CMAKE_MODULE_PATH\.
|
||||||
|
Call Stack \(most recent call first\):
|
||||||
|
CMakeLists\.txt:3 \(include\)
|
||||||
|
+
|
||||||
|
CMake Warning \(dev\) at CMP0084-NEW\.cmake:[0-9]+ \(find_package\):
|
||||||
|
FindQt\.cmake must either be part of this project itself, in this case
|
||||||
|
adjust CMAKE_MODULE_PATH so that it points to the correct location inside
|
||||||
|
its source tree\.
|
||||||
|
|
||||||
|
Or it must be installed by a package which has already been found via
|
||||||
|
find_package\(\)\. In this case make sure that package has indeed been found
|
||||||
|
and adjust CMAKE_MODULE_PATH to contain the location where that package has
|
||||||
|
installed FindQt\.cmake\. This must be a location provided by that package\.
|
||||||
|
This error in general means that the buildsystem of this project is relying
|
||||||
|
on a Find-module without ensuring that it is actually available\.
|
||||||
|
|
||||||
|
Call Stack \(most recent call first\):
|
||||||
|
CMakeLists\.txt:[0-9]+ \(include\)
|
||||||
|
This warning is for project developers\. Use -Wno-dev to suppress it\.$
|
||||||
7
Tests/RunCMake/find_package/CMP0084-NEW.cmake
Normal file
7
Tests/RunCMake/find_package/CMP0084-NEW.cmake
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
cmake_policy(SET CMP0084 NEW)
|
||||||
|
set(_findqt_testing TRUE)
|
||||||
|
find_package(Qt MODULE)
|
||||||
|
|
||||||
|
if(_findqt_included)
|
||||||
|
message(FATAL_ERROR "FindQt.cmake erroneously included")
|
||||||
|
endif()
|
||||||
7
Tests/RunCMake/find_package/CMP0084-OLD.cmake
Normal file
7
Tests/RunCMake/find_package/CMP0084-OLD.cmake
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
cmake_policy(SET CMP0084 OLD)
|
||||||
|
set(_findqt_testing TRUE)
|
||||||
|
find_package(Qt MODULE)
|
||||||
|
|
||||||
|
if(NOT _findqt_included)
|
||||||
|
message(FATAL_ERROR "FindQt.cmake not included")
|
||||||
|
endif()
|
||||||
8
Tests/RunCMake/find_package/CMP0084-WARN-stderr.txt
Normal file
8
Tests/RunCMake/find_package/CMP0084-WARN-stderr.txt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
^CMake Warning \(dev\) at CMP0084-WARN\.cmake:[0-9]+ \(find_package\):
|
||||||
|
Policy CMP0084 is not set: The FindQt module does not exist for
|
||||||
|
find_package\(\)\. Run "cmake --help-policy CMP0084" for policy details\. Use
|
||||||
|
the cmake_policy command to set the policy and suppress this warning\.
|
||||||
|
|
||||||
|
Call Stack \(most recent call first\):
|
||||||
|
CMakeLists\.txt:[0-9]+ \(include\)
|
||||||
|
This warning is for project developers\. Use -Wno-dev to suppress it\.$
|
||||||
6
Tests/RunCMake/find_package/CMP0084-WARN.cmake
Normal file
6
Tests/RunCMake/find_package/CMP0084-WARN.cmake
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
set(_findqt_testing TRUE)
|
||||||
|
find_package(Qt MODULE)
|
||||||
|
|
||||||
|
if(NOT _findqt_included)
|
||||||
|
message(FATAL_ERROR "FindQt.cmake not included")
|
||||||
|
endif()
|
||||||
@@ -23,3 +23,6 @@ run_cmake(PolicyPop)
|
|||||||
run_cmake(SetFoundFALSE)
|
run_cmake(SetFoundFALSE)
|
||||||
run_cmake(WrongVersion)
|
run_cmake(WrongVersion)
|
||||||
run_cmake(WrongVersionConfig)
|
run_cmake(WrongVersionConfig)
|
||||||
|
run_cmake(CMP0084-OLD)
|
||||||
|
run_cmake(CMP0084-WARN)
|
||||||
|
run_cmake(CMP0084-NEW)
|
||||||
|
|||||||
Reference in New Issue
Block a user