summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBill Hoffman <bill.hoffman@kitware.com>2012-02-17 12:41:39 -0500
committerBill Hoffman <bill.hoffman@kitware.com>2012-02-17 12:41:39 -0500
commit9090572f5cdde7b30d2c1ad1c0bbf4ab86ddb969 (patch)
tree4069a3f908fd7d1fa0709c774ad476152f4dcd77
parente2042b68d36e0881bfc00f926a275dda3d6cbc9d (diff)
downloadcmake-9090572f5cdde7b30d2c1ad1c0bbf4ab86ddb969.tar.gz
Add ability to include a file in a project via a cache variable.
If a variable exists called CMAKE_PROJECT_<projectName>_INCLUDE, the file pointed to by that variable will be included as the last step of the project command.
-rw-r--r--Source/cmProjectCommand.cxx18
-rw-r--r--Source/cmProjectCommand.h5
-rw-r--r--Tests/CMakeOnly/CMakeLists.txt8
-rw-r--r--Tests/CMakeOnly/ProjectInclude/CMakeLists.txt4
-rw-r--r--Tests/CMakeOnly/ProjectInclude/include.cmake1
-rw-r--r--Tests/CMakeOnly/Test.cmake.in3
6 files changed, 37 insertions, 2 deletions
diff --git a/Source/cmProjectCommand.cxx b/Source/cmProjectCommand.cxx
index 6e3b6afecc..4c1abcff20 100644
--- a/Source/cmProjectCommand.cxx
+++ b/Source/cmProjectCommand.cxx
@@ -77,6 +77,24 @@ bool cmProjectCommand
languages.push_back("CXX");
}
this->Makefile->EnableLanguage(languages, false);
+ std::string extraInclude = "CMAKE_PROJECT_" + args[0] + "_INCLUDE";
+ const char* include = this->Makefile->GetDefinition(extraInclude.c_str());
+ if(include)
+ {
+ std::string fullFilePath;
+ bool readit =
+ this->Makefile->ReadListFile( this->Makefile->GetCurrentListFile(),
+ include);
+ if(!readit && !cmSystemTools::GetFatalErrorOccured())
+ {
+ std::string m =
+ "could not find load file:\n"
+ " ";
+ m += include;
+ this->SetError(m.c_str());
+ return false;
+ }
+ }
return true;
}
diff --git a/Source/cmProjectCommand.h b/Source/cmProjectCommand.h
index fc2b7a2bd7..1e5fc090aa 100644
--- a/Source/cmProjectCommand.h
+++ b/Source/cmProjectCommand.h
@@ -68,7 +68,10 @@ public:
"By default C and CXX are enabled. E.g. if you do not have a "
"C++ compiler, you can disable the check for it by explicitly listing "
"the languages you want to support, e.g. C. By using the special "
- "language \"NONE\" all checks for any language can be disabled.";
+ "language \"NONE\" all checks for any language can be disabled. "
+ "If a variable exists called CMAKE_PROJECT_<projectName>_INCLUDE_FILE, "
+ "the file pointed to by that variable will be included as the last step "
+ "of the project command.";
}
cmTypeMacro(cmProjectCommand, cmCommand);
diff --git a/Tests/CMakeOnly/CMakeLists.txt b/Tests/CMakeOnly/CMakeLists.txt
index 4407efbbda..629f578260 100644
--- a/Tests/CMakeOnly/CMakeLists.txt
+++ b/Tests/CMakeOnly/CMakeLists.txt
@@ -22,3 +22,11 @@ add_CMakeOnly_test(CheckLanguage)
add_CMakeOnly_test(AllFindModules)
add_CMakeOnly_test(TargetScope)
+
+add_CMakeOnly_test(ProjectInclude)
+
+add_test(CMakeOnly.ProjectInclude ${CMAKE_CMAKE_COMMAND}
+ -DTEST=ProjectInclude
+ -DCMAKE_ARGS=-DCMAKE_PROJECT_ProjectInclude_INCLUDE=${CMAKE_CURRENT_SOURCE_DIR}/ProjectInclude/include.cmake
+ -P ${CMAKE_CURRENT_BINARY_DIR}/Test.cmake
+ )
diff --git a/Tests/CMakeOnly/ProjectInclude/CMakeLists.txt b/Tests/CMakeOnly/ProjectInclude/CMakeLists.txt
new file mode 100644
index 0000000000..a9abb4ad7a
--- /dev/null
+++ b/Tests/CMakeOnly/ProjectInclude/CMakeLists.txt
@@ -0,0 +1,4 @@
+project(ProjectInclude)
+if(NOT AUTO_INCLUDE)
+ message(FATAL_ERROR "include file not found")
+endif()
diff --git a/Tests/CMakeOnly/ProjectInclude/include.cmake b/Tests/CMakeOnly/ProjectInclude/include.cmake
new file mode 100644
index 0000000000..527ebe7d04
--- /dev/null
+++ b/Tests/CMakeOnly/ProjectInclude/include.cmake
@@ -0,0 +1 @@
+set(AUTO_INCLUDE TRUE)
diff --git a/Tests/CMakeOnly/Test.cmake.in b/Tests/CMakeOnly/Test.cmake.in
index aa2d09374f..42af068918 100644
--- a/Tests/CMakeOnly/Test.cmake.in
+++ b/Tests/CMakeOnly/Test.cmake.in
@@ -3,7 +3,8 @@ set(binary_dir "@CMAKE_CURRENT_BINARY_DIR@/${TEST}-build")
file(REMOVE_RECURSE "${binary_dir}")
file(MAKE_DIRECTORY "${binary_dir}")
execute_process(
- COMMAND ${CMAKE_COMMAND} "${source_dir}" -G "@CMAKE_TEST_GENERATOR@"
+ COMMAND ${CMAKE_COMMAND} ${CMAKE_ARGS}
+ "${source_dir}" -G "@CMAKE_TEST_GENERATOR@"
WORKING_DIRECTORY "${binary_dir}"
RESULT_VARIABLE result
)