Add CMAKE_ARGC and CMAKE_ARGV0..N-1 variables (#2828)
For now, these variables are only available in -P script mode.
This commit is contained in:
parent
94d1684a8f
commit
106958c047
|
@ -104,6 +104,22 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
|
||||||
"file, this variable is not set.", false,
|
"file, this variable is not set.", false,
|
||||||
"Variables that Provide Information");
|
"Variables that Provide Information");
|
||||||
|
|
||||||
|
cm->DefineProperty
|
||||||
|
("CMAKE_ARGC", cmProperty::VARIABLE,
|
||||||
|
"Number of command line arguments passed to CMake in script mode. ",
|
||||||
|
"When run in -P script mode, CMake sets this variable to the number "
|
||||||
|
"of command line arguments. See also CMAKE_ARGV0, 1, 2 ... ", false,
|
||||||
|
"Variables that Provide Information");
|
||||||
|
|
||||||
|
cm->DefineProperty
|
||||||
|
("CMAKE_ARGV0", cmProperty::VARIABLE,
|
||||||
|
"Command line argument passed to CMake in script mode. ",
|
||||||
|
"When run in -P script mode, CMake sets this variable to "
|
||||||
|
"the first command line argument. It then also sets CMAKE_ARGV1, "
|
||||||
|
"CMAKE_ARGV2, ... and so on, up to the number of command line arguments "
|
||||||
|
"given. See also CMAKE_ARGC.", 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.",
|
||||||
|
|
|
@ -2749,6 +2749,22 @@ void cmMakefile::SetScriptModeFile(const char* scriptfile)
|
||||||
this->AddDefinition("CMAKE_SCRIPT_MODE_FILE", scriptfile);
|
this->AddDefinition("CMAKE_SCRIPT_MODE_FILE", scriptfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cmMakefile::SetArgcArgv(const std::vector<std::string>& args)
|
||||||
|
{
|
||||||
|
cmOStringStream strStream;
|
||||||
|
strStream << args.size();
|
||||||
|
this->AddDefinition("CMAKE_ARGC", strStream.str().c_str());
|
||||||
|
//this->MarkVariableAsUsed("CMAKE_ARGC");
|
||||||
|
|
||||||
|
for (unsigned int t = 0; t < args.size(); ++t)
|
||||||
|
{
|
||||||
|
cmOStringStream tmpStream;
|
||||||
|
tmpStream << "CMAKE_ARGV" << t;
|
||||||
|
this->AddDefinition(tmpStream.str().c_str(), args[t].c_str());
|
||||||
|
//this->MarkVariableAsUsed(tmpStream.str().c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
cmSourceFile* cmMakefile::GetSource(const char* sourceName)
|
cmSourceFile* cmMakefile::GetSource(const char* sourceName)
|
||||||
{
|
{
|
||||||
|
|
|
@ -417,6 +417,11 @@ public:
|
||||||
*/
|
*/
|
||||||
void SetScriptModeFile(const char* scriptfile);
|
void SetScriptModeFile(const char* scriptfile);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set CMAKE_ARGC, CMAKE_ARGV0 ... variables.
|
||||||
|
*/
|
||||||
|
void SetArgcArgv(const std::vector<std::string>& args);
|
||||||
|
|
||||||
//@{
|
//@{
|
||||||
/**
|
/**
|
||||||
* Set/Get the start directory (or output directory). The start directory
|
* Set/Get the start directory (or output directory). The start directory
|
||||||
|
|
|
@ -462,7 +462,7 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::cerr << "loading initial cache file " << path.c_str() << "\n";
|
std::cerr << "loading initial cache file " << path.c_str() << "\n";
|
||||||
this->ReadListFile(path.c_str());
|
this->ReadListFile(args, path.c_str());
|
||||||
}
|
}
|
||||||
else if(arg.find("-P",0) == 0)
|
else if(arg.find("-P",0) == 0)
|
||||||
{
|
{
|
||||||
|
@ -478,13 +478,13 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
|
||||||
cmSystemTools::Error("No cmake script provided.");
|
cmSystemTools::Error("No cmake script provided.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
this->ReadListFile(path.c_str());
|
this->ReadListFile(args, path.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmake::ReadListFile(const char *path)
|
void cmake::ReadListFile(const std::vector<std::string>& args, const char *path)
|
||||||
{
|
{
|
||||||
// if a generator was not yet created, temporarily create one
|
// if a generator was not yet created, temporarily create one
|
||||||
cmGlobalGenerator *gg = this->GetGlobalGenerator();
|
cmGlobalGenerator *gg = this->GetGlobalGenerator();
|
||||||
|
@ -515,6 +515,8 @@ void cmake::ReadListFile(const char *path)
|
||||||
std::string file(cmSystemTools::CollapseFullPath(path));
|
std::string file(cmSystemTools::CollapseFullPath(path));
|
||||||
cmSystemTools::ConvertToUnixSlashes(file);
|
cmSystemTools::ConvertToUnixSlashes(file);
|
||||||
lg->GetMakefile()->SetScriptModeFile(file.c_str());
|
lg->GetMakefile()->SetScriptModeFile(file.c_str());
|
||||||
|
|
||||||
|
lg->GetMakefile()->SetArgcArgv(args);
|
||||||
}
|
}
|
||||||
if (!lg->GetMakefile()->ReadListFile(0, path))
|
if (!lg->GetMakefile()->ReadListFile(0, path))
|
||||||
{
|
{
|
||||||
|
@ -2203,13 +2205,14 @@ int cmake::ActualConfigure()
|
||||||
|
|
||||||
void cmake::PreLoadCMakeFiles()
|
void cmake::PreLoadCMakeFiles()
|
||||||
{
|
{
|
||||||
|
std::vector<std::string> args;
|
||||||
std::string pre_load = this->GetHomeDirectory();
|
std::string pre_load = this->GetHomeDirectory();
|
||||||
if ( pre_load.size() > 0 )
|
if ( pre_load.size() > 0 )
|
||||||
{
|
{
|
||||||
pre_load += "/PreLoad.cmake";
|
pre_load += "/PreLoad.cmake";
|
||||||
if ( cmSystemTools::FileExists(pre_load.c_str()) )
|
if ( cmSystemTools::FileExists(pre_load.c_str()) )
|
||||||
{
|
{
|
||||||
this->ReadListFile(pre_load.c_str());
|
this->ReadListFile(args, pre_load.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pre_load = this->GetHomeOutputDirectory();
|
pre_load = this->GetHomeOutputDirectory();
|
||||||
|
@ -2218,7 +2221,7 @@ void cmake::PreLoadCMakeFiles()
|
||||||
pre_load += "/PreLoad.cmake";
|
pre_load += "/PreLoad.cmake";
|
||||||
if ( cmSystemTools::FileExists(pre_load.c_str()) )
|
if ( cmSystemTools::FileExists(pre_load.c_str()) )
|
||||||
{
|
{
|
||||||
this->ReadListFile(pre_load.c_str());
|
this->ReadListFile(args, pre_load.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -406,7 +406,7 @@ protected:
|
||||||
bool DoSuppressDevWarnings;
|
bool DoSuppressDevWarnings;
|
||||||
|
|
||||||
///! read in a cmake list file to initialize the cache
|
///! read in a cmake list file to initialize the cache
|
||||||
void ReadListFile(const char *path);
|
void ReadListFile(const std::vector<std::string>& args, const char *path);
|
||||||
|
|
||||||
///! Check if CMAKE_CACHEFILE_DIR is set. If it is not, delete the log file.
|
///! Check if CMAKE_CACHEFILE_DIR is set. If it is not, delete the log file.
|
||||||
/// If it is set, truncate it to 50kb
|
/// If it is set, truncate it to 50kb
|
||||||
|
|
Loading…
Reference in New Issue