1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-21 14:40:48 +08:00

Autogen: Default AUTOGEN_USE_SYSTEM_INCLUDE to ON if it is not set

Add policy CMP0151 to preserve the old behavior by default.
This commit is contained in:
Orkun Tokdemir
2023-04-27 11:28:30 +02:00
committed by Brad King
parent 033dc7ee2f
commit 7bf4e30090
9 changed files with 80 additions and 3 deletions

View File

@@ -57,6 +57,7 @@ Policies Introduced by CMake 3.27
.. toctree::
:maxdepth: 1
CMP0151: AUTOMOC include directory is a system include directory by default. </policy/CMP0151>
CMP0150: ExternalProject_Add and FetchContent_Declare treat relative git repository paths as being relative to parent project's remote. </policy/CMP0150>
CMP0149: Visual Studio generators select latest Windows SDK by default. </policy/CMP0149>
CMP0148: The FindPythonInterp and FindPythonLibs modules are removed. </policy/CMP0148>

28
Help/policy/CMP0151.rst Normal file
View File

@@ -0,0 +1,28 @@
CMP0151
-------
.. versionadded:: 3.27
AUTOMOC include directory is a system include directory by default.
Headers generated for :ref:`Qt AUTOMOC` are placed in target-specific include
directories. CMake 3.26 and older added these as normal include directories.
CMake 3.27 and newer prefer to add them as system include directories.
This policy provides compatibility for projects that have not been updated
to expect this.
If the :prop_tgt:`AUTOGEN_USE_SYSTEM_INCLUDE` target property is set,
perhaps via the :variable:`CMAKE_AUTOGEN_USE_SYSTEM_INCLUDE` variable,
then its value is used regardless of the setting of this policy.
The ``OLD`` behavior for this policy is to add autogen include directory to
the target's include directories.
The ``NEW`` behavior for this policy is to add autogen include directory to
the target's system include directories.
This policy was introduced in CMake version 3.27. Use the
:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
Unlike many policies, CMake version |release| does *not* warn
when this policy is not set and simply uses ``OLD`` behavior.
.. include:: DEPRECATED.txt

View File

@@ -6,6 +6,9 @@ on a target to indicate that the autogen target include directory should
be added as a system include directory or normal include directory to the
target.
If this property is not set, the autogen target include directory is added
as a system include directory by default. See policy :policy:`CMP0151`.
See the :manual:`cmake-qt(7)` manual for more information on using CMake
with Qt.

View File

@@ -455,6 +455,10 @@ class cmMakefile;
"ExternalProject_Add and FetchContent_Declare commands " \
"treat relative GIT_REPOSITORY paths as being relative " \
"to the parent project's remote.", \
3, 27, 0, cmPolicies::WARN) \
SELECT(POLICY, CMP0151, \
"AUTOMOC include directory is a system include directory by " \
"default.", \
3, 27, 0, cmPolicies::WARN)
#define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1)

View File

@@ -587,7 +587,18 @@ bool cmQtAutoGenInitializer::InitCustomTargets()
addBefore = true;
}
} else {
addBefore = true;
switch (this->Makefile->GetPolicyStatus(cmPolicies::CMP0151)) {
case cmPolicies::WARN:
case cmPolicies::OLD:
addBefore = true;
break;
case cmPolicies::REQUIRED_IF_USED:
case cmPolicies::REQUIRED_ALWAYS:
case cmPolicies::NEW:
this->GenTarget->AddSystemIncludeDirectory(this->Dir.IncludeGenExp,
"CXX");
break;
}
}
this->GenTarget->AddIncludeDirectory(this->Dir.IncludeGenExp, addBefore);
}

View File

@@ -0,0 +1,10 @@
enable_language(CXX)
find_package(Qt${with_qt_version} REQUIRED COMPONENTS Core Widgets Gui)
set(CMAKE_AUTOMOC ON)
add_library(dummy SHARED empty.cpp)
target_link_libraries(dummy Qt${with_qt_version}::Core
Qt${with_qt_version}::Widgets
Qt${with_qt_version}::Gui)

View File

@@ -0,0 +1 @@
include("${CMAKE_CURRENT_LIST_DIR}/CMP0151-common.cmake")

View File

@@ -0,0 +1 @@
include("${CMAKE_CURRENT_LIST_DIR}/CMP0151-common.cmake")

View File

@@ -40,9 +40,18 @@ if (DEFINED with_qt_version)
string(APPEND test_expect_stdout "_Debug")
endif()
block()
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CMP0151-new-build)
run_cmake_with_options(CMP0151-new ${RunCMake_TEST_OPTIONS} -DCMAKE_POLICY_DEFAULT_CMP0151=NEW)
set(RunCMake_TEST_NO_CLEAN 1)
set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}")
message(STATUS "RunCMake_TEST_EXPECT_stdout: ${RunCMake_TEST_EXPECT_stdout}")
run_cmake_command(CMP0151-new-build ${CMAKE_COMMAND} --build . --config Debug --verbose)
endblock()
block()
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutogenUseSystemIncludeOn-build)
run_cmake(AutogenUseSystemIncludeOn)
run_cmake_with_options(AutogenUseSystemIncludeOn ${RunCMake_TEST_OPTIONS} -DCMAKE_POLICY_DEFAULT_CMP0151=NEW)
set(RunCMake_TEST_NO_CLEAN 1)
set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}")
message(STATUS "RunCMake_TEST_EXPECT_stdout: ${RunCMake_TEST_EXPECT_stdout}")
@@ -61,9 +70,18 @@ if (DEFINED with_qt_version)
string(APPEND test_expect_stdout "_Debug")
endif()
block()
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CMP0151-old-build)
run_cmake_with_options(CMP0151-old ${RunCMake_TEST_OPTIONS} -DCMAKE_POLICY_DEFAULT_CMP0151=OLD)
set(RunCMake_TEST_NO_CLEAN 1)
set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}")
message(STATUS "RunCMake_TEST_EXPECT_stdout: ${RunCMake_TEST_EXPECT_stdout}")
run_cmake_command(CMP0151-old-build ${CMAKE_COMMAND} --build . --config Debug --verbose)
endblock()
block()
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutogenUseSystemIncludeOff-build)
run_cmake(AutogenUseSystemIncludeOff)
run_cmake_with_options(AutogenUseSystemIncludeOff ${RunCMake_TEST_OPTIONS} -DCMAKE_POLICY_DEFAULT_CMP0151=NEW)
set(RunCMake_TEST_NO_CLEAN 1)
set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}")
message(STATUS "RunCMake_TEST_EXPECT_stdout: ${RunCMake_TEST_EXPECT_stdout}")