diff options
author | Ruslan Baratov <ruslan_baratov@yahoo.com> | 2019-03-28 19:43:40 (GMT) |
---|---|---|
committer | Ruslan Baratov <ruslan_baratov@yahoo.com> | 2019-04-01 17:30:19 (GMT) |
commit | 076118694995c19de7637156322818f3994de76a (patch) | |
tree | 232852f10182ebbc3773e7ee122c058dd8ff7aa1 | |
parent | 3e129d71bc12a325c0548aaaea24470cd172470b (diff) | |
download | CMake-076118694995c19de7637156322818f3994de76a.zip CMake-076118694995c19de7637156322818f3994de76a.tar.gz CMake-076118694995c19de7637156322818f3994de76a.tar.bz2 |
project: Add variable CMAKE_PROJECT_INCLUDE_BEFORE
-rw-r--r-- | Help/command/project.rst | 4 | ||||
-rw-r--r-- | Help/manual/cmake-variables.7.rst | 1 | ||||
-rw-r--r-- | Help/release/dev/project-include-before.rst | 5 | ||||
-rw-r--r-- | Help/variable/CMAKE_PROJECT_INCLUDE_BEFORE.rst | 6 | ||||
-rw-r--r-- | Source/cmProjectCommand.cxx | 4 | ||||
-rw-r--r-- | Tests/CMakeOnly/CMakeLists.txt | 6 | ||||
-rw-r--r-- | Tests/CMakeOnly/ProjectIncludeBefore/CMakeLists.txt | 5 | ||||
-rw-r--r-- | Tests/CMakeOnly/ProjectIncludeBefore/include.cmake | 9 |
8 files changed, 40 insertions, 0 deletions
diff --git a/Help/command/project.rst b/Help/command/project.rst index a95012d..7e33ccd 100644 --- a/Help/command/project.rst +++ b/Help/command/project.rst @@ -31,6 +31,10 @@ Further variables are set by the optional arguments described in the following. If any of these arguments is not used, then the corresponding variables are set to the empty string. +If the variable :variable:`CMAKE_PROJECT_INCLUDE_BEFORE` exists, the file +pointed to by that variable will be included as the first step of the project +command. + If the variable :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE` or :variable:`CMAKE_PROJECT_INCLUDE` exists, the file pointed to by that variable will be included as the last step of the project command. diff --git a/Help/manual/cmake-variables.7.rst b/Help/manual/cmake-variables.7.rst index e1584ef..e9dca47 100644 --- a/Help/manual/cmake-variables.7.rst +++ b/Help/manual/cmake-variables.7.rst @@ -196,6 +196,7 @@ Variables that Change Behavior /variable/CMAKE_PREFIX_PATH /variable/CMAKE_PROGRAM_PATH /variable/CMAKE_PROJECT_INCLUDE + /variable/CMAKE_PROJECT_INCLUDE_BEFORE /variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE /variable/CMAKE_SKIP_INSTALL_ALL_DEPENDENCY /variable/CMAKE_STAGING_PREFIX diff --git a/Help/release/dev/project-include-before.rst b/Help/release/dev/project-include-before.rst new file mode 100644 index 0000000..3f16cd7 --- /dev/null +++ b/Help/release/dev/project-include-before.rst @@ -0,0 +1,5 @@ +cmake_project_include_before +---------------------------- + +* A variable :variable:`CMAKE_PROJECT_INCLUDE_BEFORE` was added to allow + injection of custom code into the project. diff --git a/Help/variable/CMAKE_PROJECT_INCLUDE_BEFORE.rst b/Help/variable/CMAKE_PROJECT_INCLUDE_BEFORE.rst new file mode 100644 index 0000000..12a5263 --- /dev/null +++ b/Help/variable/CMAKE_PROJECT_INCLUDE_BEFORE.rst @@ -0,0 +1,6 @@ +CMAKE_PROJECT_INCLUDE_BEFORE +---------------------------- + +A CMake language file or module to be included before processing the +:command:`project` command. This is intended for injecting custom code into +project builds without modifying their source. diff --git a/Source/cmProjectCommand.cxx b/Source/cmProjectCommand.cxx index de5d1ed..0bf63d4 100644 --- a/Source/cmProjectCommand.cxx +++ b/Source/cmProjectCommand.cxx @@ -25,6 +25,10 @@ bool cmProjectCommand::InitialPass(std::vector<std::string> const& args, return false; } + if (!this->IncludeByVariable("CMAKE_PROJECT_INCLUDE_BEFORE")) { + return false; + } + std::string const& projectName = args[0]; this->Makefile->SetProjectName(projectName); diff --git a/Tests/CMakeOnly/CMakeLists.txt b/Tests/CMakeOnly/CMakeLists.txt index 57f0cf8..1aeab8b 100644 --- a/Tests/CMakeOnly/CMakeLists.txt +++ b/Tests/CMakeOnly/CMakeLists.txt @@ -62,6 +62,12 @@ add_test(CMakeOnly.ProjectIncludeAny ${CMAKE_CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/Test.cmake ) +add_test(CMakeOnly.ProjectIncludeBefore ${CMAKE_CMAKE_COMMAND} + -DTEST=ProjectIncludeBefore + -DCMAKE_ARGS=-DCMAKE_PROJECT_INCLUDE_BEFORE=${CMAKE_CURRENT_SOURCE_DIR}/ProjectIncludeBefore/include.cmake + -P ${CMAKE_CURRENT_BINARY_DIR}/Test.cmake + ) + include(CMakeParseArguments) function(add_major_test module) diff --git a/Tests/CMakeOnly/ProjectIncludeBefore/CMakeLists.txt b/Tests/CMakeOnly/ProjectIncludeBefore/CMakeLists.txt new file mode 100644 index 0000000..5cd9cba --- /dev/null +++ b/Tests/CMakeOnly/ProjectIncludeBefore/CMakeLists.txt @@ -0,0 +1,5 @@ +set(FOO TRUE) +project(ProjectInclude LANGUAGES NONE) +if(NOT AUTO_INCLUDE) + message(FATAL_ERROR "include file not found") +endif() diff --git a/Tests/CMakeOnly/ProjectIncludeBefore/include.cmake b/Tests/CMakeOnly/ProjectIncludeBefore/include.cmake new file mode 100644 index 0000000..0a4799d --- /dev/null +++ b/Tests/CMakeOnly/ProjectIncludeBefore/include.cmake @@ -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) |