project: Add variable CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE
Follow up commit 0761186949
(project: Add variable
CMAKE_PROJECT_INCLUDE_BEFORE, 2019-03-28, v3.15.0-rc1~294^2) with a
project-specific variant. This variable will be used similar to the
already existing `CMAKE_PROJECT_INCLUDE_BEFORE` and
`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE` variables.
Fixes: #19854
This commit is contained in:
parent
154aa87ca6
commit
f7acc1266c
@ -102,9 +102,12 @@ options are intended for use as default values in package metadata and documenta
|
||||
Code Injection
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
If the :variable:`CMAKE_PROJECT_INCLUDE_BEFORE` variable is set, the file
|
||||
pointed to by that variable will be included as the first step of the
|
||||
If the :variable:`CMAKE_PROJECT_INCLUDE_BEFORE` or
|
||||
:variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE` variables are set,
|
||||
the files they point to will be included as the first step of the
|
||||
``project()`` command.
|
||||
If both are set, then :variable:`CMAKE_PROJECT_INCLUDE_BEFORE` will be
|
||||
included before :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE`.
|
||||
|
||||
If the :variable:`CMAKE_PROJECT_INCLUDE` or
|
||||
:variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE` variables are set, the files
|
||||
|
@ -216,6 +216,7 @@ Variables that Change Behavior
|
||||
/variable/CMAKE_PROJECT_INCLUDE
|
||||
/variable/CMAKE_PROJECT_INCLUDE_BEFORE
|
||||
/variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE
|
||||
/variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE_BEFORE
|
||||
/variable/CMAKE_SKIP_INSTALL_ALL_DEPENDENCY
|
||||
/variable/CMAKE_STAGING_PREFIX
|
||||
/variable/CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS
|
||||
|
@ -5,5 +5,6 @@ A CMake language file or module to be included as the last step of all
|
||||
:command:`project` command calls. This is intended for injecting custom code
|
||||
into project builds without modifying their source.
|
||||
|
||||
See also the :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE` and
|
||||
See also the :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE`,
|
||||
:variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE` and
|
||||
:variable:`CMAKE_PROJECT_INCLUDE_BEFORE` variables.
|
||||
|
@ -5,5 +5,6 @@ A CMake language file or module to be included as the first step of all
|
||||
:command:`project` command calls. This is intended for injecting custom code
|
||||
into project builds without modifying their source.
|
||||
|
||||
See also the :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE` and
|
||||
See also the :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE`,
|
||||
:variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE` and
|
||||
:variable:`CMAKE_PROJECT_INCLUDE` variables.
|
||||
|
@ -6,5 +6,6 @@ A CMake language file or module to be included as the last step of any
|
||||
name. This is intended for injecting custom code into project builds without
|
||||
modifying their source.
|
||||
|
||||
See also the :variable:`CMAKE_PROJECT_INCLUDE` and
|
||||
See also the :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE`,
|
||||
:variable:`CMAKE_PROJECT_INCLUDE` and
|
||||
:variable:`CMAKE_PROJECT_INCLUDE_BEFORE` variables.
|
||||
|
11
Help/variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE_BEFORE.rst
Normal file
11
Help/variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE_BEFORE.rst
Normal file
@ -0,0 +1,11 @@
|
||||
CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE
|
||||
-------------------------------------------
|
||||
|
||||
A CMake language file or module to be included as the first step of any
|
||||
:command:`project` command calls that specify ``<PROJECT-NAME>`` as the project
|
||||
name. This is intended for injecting custom code into project builds without
|
||||
modifying their source.
|
||||
|
||||
See also the :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE`,
|
||||
:variable:`CMAKE_PROJECT_INCLUDE` and
|
||||
:variable:`CMAKE_PROJECT_INCLUDE_BEFORE` variables.
|
@ -39,6 +39,11 @@ bool cmProjectCommand(std::vector<std::string> const& args,
|
||||
|
||||
std::string const& projectName = args[0];
|
||||
|
||||
if (!IncludeByVariable(status,
|
||||
"CMAKE_PROJECT_" + projectName + "_INCLUDE_BEFORE")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
mf.SetProjectName(projectName);
|
||||
|
||||
mf.AddCacheDefinition(projectName + "_BINARY_DIR",
|
||||
|
@ -75,6 +75,12 @@ add_test(CMakeOnly.ProjectIncludeAny ${CMAKE_CMAKE_COMMAND}
|
||||
|
||||
add_test(CMakeOnly.ProjectIncludeBefore ${CMAKE_CMAKE_COMMAND}
|
||||
-DTEST=ProjectIncludeBefore
|
||||
-DCMAKE_ARGS=-DCMAKE_PROJECT_ProjectInclude_INCLUDE_BEFORE=${CMAKE_CURRENT_SOURCE_DIR}/ProjectIncludeBefore/include.cmake
|
||||
-P ${CMAKE_CURRENT_BINARY_DIR}/Test.cmake
|
||||
)
|
||||
|
||||
add_test(CMakeOnly.ProjectIncludeBeforeAny ${CMAKE_CMAKE_COMMAND}
|
||||
-DTEST=ProjectIncludeBeforeAny
|
||||
-DCMAKE_ARGS=-DCMAKE_PROJECT_INCLUDE_BEFORE=${CMAKE_CURRENT_SOURCE_DIR}/ProjectIncludeBefore/include.cmake
|
||||
-P ${CMAKE_CURRENT_BINARY_DIR}/Test.cmake
|
||||
)
|
||||
|
5
Tests/CMakeOnly/ProjectIncludeBeforeAny/CMakeLists.txt
Normal file
5
Tests/CMakeOnly/ProjectIncludeBeforeAny/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
||||
set(FOO TRUE)
|
||||
project(ProjectInclude LANGUAGES NONE)
|
||||
if(NOT AUTO_INCLUDE)
|
||||
message(FATAL_ERROR "include file not found")
|
||||
endif()
|
9
Tests/CMakeOnly/ProjectIncludeBeforeAny/include.cmake
Normal file
9
Tests/CMakeOnly/ProjectIncludeBeforeAny/include.cmake
Normal file
@ -0,0 +1,9 @@
|
||||
if(NOT FOO)
|
||||
message(FATAL_ERROR "FOO is not set")
|
||||
endif()
|
||||
|
||||
if(NOT "${PROJECT_NAME}" STREQUAL "")
|
||||
message(FATAL_ERROR "PROJECT_NAME should be empty")
|
||||
endif()
|
||||
|
||||
set(AUTO_INCLUDE TRUE)
|
Loading…
Reference in New Issue
Block a user