Allow projects to specify extra inputs to CMake
Define a new 'CMAKE_CONFIGURE_DEPENDS' directory property that projects can use to specify input files to the CMake configuration process. Extend the RunCMake.Configure test to verify that the build system re-runs CMake when this input changes.
This commit is contained in:
parent
1ef444d678
commit
82d4317503
|
@ -48,6 +48,7 @@ Properties on Directories
|
||||||
/prop_dir/ADDITIONAL_MAKE_CLEAN_FILES
|
/prop_dir/ADDITIONAL_MAKE_CLEAN_FILES
|
||||||
/prop_dir/CACHE_VARIABLES
|
/prop_dir/CACHE_VARIABLES
|
||||||
/prop_dir/CLEAN_NO_CUSTOM
|
/prop_dir/CLEAN_NO_CUSTOM
|
||||||
|
/prop_dir/CMAKE_CONFIGURE_DEPENDS
|
||||||
/prop_dir/COMPILE_DEFINITIONS_CONFIG
|
/prop_dir/COMPILE_DEFINITIONS_CONFIG
|
||||||
/prop_dir/COMPILE_DEFINITIONS
|
/prop_dir/COMPILE_DEFINITIONS
|
||||||
/prop_dir/COMPILE_OPTIONS
|
/prop_dir/COMPILE_OPTIONS
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
CMAKE_CONFIGURE_DEPENDS
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Tell CMake about additional input files to the configuration process.
|
||||||
|
If any named file is modified the build system will re-run CMake to
|
||||||
|
re-configure the file and generate the build system again.
|
||||||
|
|
||||||
|
Specify files as a semicolon-separated list of paths. Relative paths
|
||||||
|
are interpreted as relative to the current source directory.
|
|
@ -114,6 +114,8 @@ void cmLocalGenerator::Configure()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->Makefile->AddCMakeDependFilesFromUser();
|
||||||
|
|
||||||
// Check whether relative paths should be used for optionally
|
// Check whether relative paths should be used for optionally
|
||||||
// relative paths.
|
// relative paths.
|
||||||
this->UseRelativePaths = this->Makefile->IsOn("CMAKE_USE_RELATIVE_PATHS");
|
this->UseRelativePaths = this->Makefile->IsOn("CMAKE_USE_RELATIVE_PATHS");
|
||||||
|
|
|
@ -3913,6 +3913,30 @@ cmTest* cmMakefile::GetTest(const char* testName) const
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cmMakefile::AddCMakeDependFilesFromUser()
|
||||||
|
{
|
||||||
|
std::vector<std::string> deps;
|
||||||
|
if(const char* deps_str = this->GetProperty("CMAKE_CONFIGURE_DEPENDS"))
|
||||||
|
{
|
||||||
|
cmSystemTools::ExpandListArgument(deps_str, deps);
|
||||||
|
}
|
||||||
|
for(std::vector<std::string>::iterator i = deps.begin();
|
||||||
|
i != deps.end(); ++i)
|
||||||
|
{
|
||||||
|
if(cmSystemTools::FileIsFullPath(i->c_str()))
|
||||||
|
{
|
||||||
|
this->AddCMakeDependFile(*i);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::string f = this->GetCurrentDirectory();
|
||||||
|
f += "/";
|
||||||
|
f += *i;
|
||||||
|
this->AddCMakeDependFile(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::string cmMakefile::GetListFileStack()
|
std::string cmMakefile::GetListFileStack()
|
||||||
{
|
{
|
||||||
cmOStringStream tmp;
|
cmOStringStream tmp;
|
||||||
|
|
|
@ -650,6 +650,7 @@ public:
|
||||||
///! When the file changes cmake will be re-run from the build system.
|
///! When the file changes cmake will be re-run from the build system.
|
||||||
void AddCMakeDependFile(const std::string& file)
|
void AddCMakeDependFile(const std::string& file)
|
||||||
{ this->ListFiles.push_back(file);}
|
{ this->ListFiles.push_back(file);}
|
||||||
|
void AddCMakeDependFilesFromUser();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the list file stack as a string
|
* Get the list file stack as a string
|
||||||
|
|
|
@ -2,3 +2,8 @@ file(READ ${stamp} content)
|
||||||
if(NOT content STREQUAL 1)
|
if(NOT content STREQUAL 1)
|
||||||
set(RunCMake_TEST_FAILED "Expected stamp '1' but got: '${content}'")
|
set(RunCMake_TEST_FAILED "Expected stamp '1' but got: '${content}'")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
file(READ ${output} content)
|
||||||
|
if(NOT content STREQUAL 1)
|
||||||
|
set(RunCMake_TEST_FAILED "Expected output '1' but got: '${content}'")
|
||||||
|
endif()
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
file(READ ${stamp} content)
|
||||||
|
if(NOT content STREQUAL 2)
|
||||||
|
set(RunCMake_TEST_FAILED "Expected stamp '2' but got: '${content}'")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
file(READ ${output} content)
|
||||||
|
if(NOT content STREQUAL 2)
|
||||||
|
set(RunCMake_TEST_FAILED "Expected output '2' but got: '${content}'")
|
||||||
|
endif()
|
|
@ -2,3 +2,10 @@ set(input ${CMAKE_CURRENT_BINARY_DIR}/CustomCMakeInput.txt)
|
||||||
set(stamp ${CMAKE_CURRENT_BINARY_DIR}/CustomCMakeStamp.txt)
|
set(stamp ${CMAKE_CURRENT_BINARY_DIR}/CustomCMakeStamp.txt)
|
||||||
file(READ ${input} content)
|
file(READ ${input} content)
|
||||||
file(WRITE ${stamp} "${content}")
|
file(WRITE ${stamp} "${content}")
|
||||||
|
|
||||||
|
set(depend ${CMAKE_CURRENT_BINARY_DIR}/CustomCMakeDepend.txt)
|
||||||
|
set(output ${CMAKE_CURRENT_BINARY_DIR}/CustomCMakeOutput.txt)
|
||||||
|
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${depend})
|
||||||
|
file(READ ${depend} content)
|
||||||
|
file(WRITE ${output} "${content}")
|
||||||
|
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS RerunCMake.txt)
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Source-tree dependency for "RerunCMake.cmake".
|
|
@ -10,10 +10,15 @@ file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
|
||||||
file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
|
file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
|
||||||
set(input "${RunCMake_TEST_BINARY_DIR}/CustomCMakeInput.txt")
|
set(input "${RunCMake_TEST_BINARY_DIR}/CustomCMakeInput.txt")
|
||||||
set(stamp "${RunCMake_TEST_BINARY_DIR}/CustomCMakeStamp.txt")
|
set(stamp "${RunCMake_TEST_BINARY_DIR}/CustomCMakeStamp.txt")
|
||||||
|
set(depend "${RunCMake_TEST_BINARY_DIR}/CustomCMakeDepend.txt")
|
||||||
|
set(output "${RunCMake_TEST_BINARY_DIR}/CustomCMakeOutput.txt")
|
||||||
file(WRITE "${input}" "1")
|
file(WRITE "${input}" "1")
|
||||||
|
file(WRITE "${depend}" "1")
|
||||||
run_cmake(RerunCMake)
|
run_cmake(RerunCMake)
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 1) # handle 1s resolution
|
execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 1) # handle 1s resolution
|
||||||
file(WRITE "${input}" "2")
|
file(WRITE "${input}" "2")
|
||||||
run_cmake_command(RerunCMake-build1 ${CMAKE_COMMAND} --build .)
|
run_cmake_command(RerunCMake-build1 ${CMAKE_COMMAND} --build .)
|
||||||
|
file(WRITE "${depend}" "2")
|
||||||
|
run_cmake_command(RerunCMake-build2 ${CMAKE_COMMAND} --build .)
|
||||||
unset(RunCMake_TEST_BINARY_DIR)
|
unset(RunCMake_TEST_BINARY_DIR)
|
||||||
unset(RunCMake_TEST_NO_CLEAN)
|
unset(RunCMake_TEST_NO_CLEAN)
|
||||||
|
|
Loading…
Reference in New Issue