Add CMAKE_SCRIPT_MODE_FILE variable (#2828)

New CMake variable is set when processing a -P script file,
but not when configuring a project.
This commit is contained in:
David Cole 2011-02-02 18:18:14 -05:00
parent 4f1e1fe782
commit 94d1684a8f
6 changed files with 38 additions and 11 deletions

View File

@ -96,6 +96,14 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
"See also CMAKE_CURRENT_LIST_FILE.",false, "See also CMAKE_CURRENT_LIST_FILE.",false,
"Variables that Provide Information"); "Variables that Provide Information");
cm->DefineProperty
("CMAKE_SCRIPT_MODE_FILE", cmProperty::VARIABLE,
"Full path to the -P script file currently being processed. ",
"When run in -P script mode, CMake sets this variable to the full "
"path of the script file. When run to configure a CMakeLists.txt "
"file, this variable is not set.", false,
"Variables that Provide Information");
cm->DefineProperty cm->DefineProperty
("CMAKE_BUILD_TOOL", cmProperty::VARIABLE, ("CMAKE_BUILD_TOOL", cmProperty::VARIABLE,
"Tool used for the actual build process.", "Tool used for the actual build process.",

View File

@ -22,21 +22,22 @@ bool cmGetCMakePropertyCommand
this->SetError("called with incorrect number of arguments"); this->SetError("called with incorrect number of arguments");
return false; return false;
} }
std::vector<std::string>::size_type cc; std::vector<std::string>::size_type cc;
std::string variable = args[0]; std::string variable = args[0];
std::string output = "NOTFOUND"; std::string output = "NOTFOUND";
if ( args[1] == "VARIABLES") if ( args[1] == "VARIABLES" )
{ {
int cacheonly = 0; int cacheonly = 0;
std::vector<std::string> vars = this->Makefile->GetDefinitions(cacheonly); std::vector<std::string> vars = this->Makefile->GetDefinitions(cacheonly);
for ( cc = 0; cc < vars.size(); cc ++ ) if (vars.size()>0)
{ {
if ( cc > 0 ) output = vars[0];
{ }
output += ";"; for ( cc = 1; cc < vars.size(); ++cc )
} {
output += ";";
output += vars[cc]; output += vars[cc];
} }
} }
@ -62,15 +63,15 @@ bool cmGetCMakePropertyCommand
} }
else else
{ {
const char *prop = const char *prop =
this->Makefile->GetCMakeInstance()->GetProperty(args[1].c_str()); this->Makefile->GetCMakeInstance()->GetProperty(args[1].c_str());
if (prop) if (prop)
{ {
output = prop; output = prop;
} }
} }
this->Makefile->AddDefinition(variable.c_str(), output.c_str()); this->Makefile->AddDefinition(variable.c_str(), output.c_str());
return true; return true;
} }

View File

@ -2744,6 +2744,11 @@ void cmMakefile::SetHomeOutputDirectory(const char* lib)
} }
} }
void cmMakefile::SetScriptModeFile(const char* scriptfile)
{
this->AddDefinition("CMAKE_SCRIPT_MODE_FILE", scriptfile);
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmSourceFile* cmMakefile::GetSource(const char* sourceName) cmSourceFile* cmMakefile::GetSource(const char* sourceName)
{ {

View File

@ -411,7 +411,12 @@ public:
return this->HomeOutputDirectory.c_str(); return this->HomeOutputDirectory.c_str();
} }
//@} //@}
/**
* Set CMAKE_SCRIPT_MODE_FILE variable when running a -P script.
*/
void SetScriptModeFile(const char* scriptfile);
//@{ //@{
/** /**
* Set/Get the start directory (or output directory). The start directory * Set/Get the start directory (or output directory). The start directory

View File

@ -510,6 +510,12 @@ void cmake::ReadListFile(const char *path)
(cmSystemTools::GetCurrentWorkingDirectory().c_str()); (cmSystemTools::GetCurrentWorkingDirectory().c_str());
lg->GetMakefile()->SetStartDirectory lg->GetMakefile()->SetStartDirectory
(cmSystemTools::GetCurrentWorkingDirectory().c_str()); (cmSystemTools::GetCurrentWorkingDirectory().c_str());
if (this->GetScriptMode())
{
std::string file(cmSystemTools::CollapseFullPath(path));
cmSystemTools::ConvertToUnixSlashes(file);
lg->GetMakefile()->SetScriptModeFile(file.c_str());
}
if (!lg->GetMakefile()->ReadListFile(0, path)) if (!lg->GetMakefile()->ReadListFile(0, path))
{ {
cmSystemTools::Error("Error processing file:", path); cmSystemTools::Error("Error processing file:", path);

View File

@ -194,6 +194,8 @@ elseif(testname STREQUAL random_with_various_alphabets) # pass
string(RANDOM LENGTH 78 ALPHABET "~`!@#$%^&*()_-+={}[]\\|:\\;'\",.<>/?" v) string(RANDOM LENGTH 78 ALPHABET "~`!@#$%^&*()_-+={}[]\\|:\\;'\",.<>/?" v)
message(STATUS "v='${v}'") message(STATUS "v='${v}'")
message(STATUS "CMAKE_SCRIPT_MODE_FILE='${CMAKE_SCRIPT_MODE_FILE}'")
else() # fail else() # fail
message(FATAL_ERROR "testname='${testname}' - error: no such test in '${CMAKE_CURRENT_LIST_FILE}'") message(FATAL_ERROR "testname='${testname}' - error: no such test in '${CMAKE_CURRENT_LIST_FILE}'")