ENH: Add undocumented file(DIFFERENT) command
This new command will be used by generated installation scripts to determine whether an already-installed export file has changed.
This commit is contained in:
parent
254782ed76
commit
f074d9f571
|
@ -112,6 +112,10 @@ bool cmFileCommand
|
|||
{
|
||||
return this->HandleInstallCommand(args);
|
||||
}
|
||||
else if ( subCommand == "DIFFERENT" )
|
||||
{
|
||||
return this->HandleDifferentCommand(args);
|
||||
}
|
||||
else if ( subCommand == "RPATH_CHANGE" || subCommand == "CHRPATH" )
|
||||
{
|
||||
return this->HandleRPathChangeCommand(args);
|
||||
|
@ -830,6 +834,67 @@ bool cmFileCommand::HandleMakeDirectoryCommand(
|
|||
return true;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
cmFileCommand::HandleDifferentCommand(std::vector<std::string> const& args)
|
||||
{
|
||||
/*
|
||||
FILE(DIFFERENT <variable> FILES <lhs> <rhs>)
|
||||
*/
|
||||
|
||||
// Evaluate arguments.
|
||||
const char* file_lhs = 0;
|
||||
const char* file_rhs = 0;
|
||||
const char* var = 0;
|
||||
enum Doing { DoingNone, DoingVar, DoingFileLHS, DoingFileRHS };
|
||||
Doing doing = DoingVar;
|
||||
for(unsigned int i=1; i < args.size(); ++i)
|
||||
{
|
||||
if(args[i] == "FILES")
|
||||
{
|
||||
doing = DoingFileLHS;
|
||||
}
|
||||
else if(doing == DoingVar)
|
||||
{
|
||||
var = args[i].c_str();
|
||||
doing = DoingNone;
|
||||
}
|
||||
else if(doing == DoingFileLHS)
|
||||
{
|
||||
file_lhs = args[i].c_str();
|
||||
doing = DoingFileRHS;
|
||||
}
|
||||
else if(doing == DoingFileRHS)
|
||||
{
|
||||
file_rhs = args[i].c_str();
|
||||
doing = DoingNone;
|
||||
}
|
||||
else
|
||||
{
|
||||
cmOStringStream e;
|
||||
e << "DIFFERENT given unknown argument " << args[i];
|
||||
this->SetError(e.str().c_str());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if(!var)
|
||||
{
|
||||
this->SetError("DIFFERENT not given result variable name.");
|
||||
return false;
|
||||
}
|
||||
if(!file_lhs || !file_rhs)
|
||||
{
|
||||
this->SetError("DIFFERENT not given FILES option with two file names.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// Compare the files.
|
||||
const char* result =
|
||||
cmSystemTools::FilesDiffer(file_lhs, file_rhs)? "1" : "0";
|
||||
this->Makefile->AddDefinition(var, result);
|
||||
return true;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// File installation helper class.
|
||||
struct cmFileInstaller
|
||||
|
|
|
@ -172,6 +172,7 @@ protected:
|
|||
bool HandleRPathChangeCommand(std::vector<std::string> const& args);
|
||||
bool HandleRPathCheckCommand(std::vector<std::string> const& args);
|
||||
bool HandleRPathRemoveCommand(std::vector<std::string> const& args);
|
||||
bool HandleDifferentCommand(std::vector<std::string> const& args);
|
||||
|
||||
// file(INSTALL ...) related functions
|
||||
bool HandleInstallCommand(std::vector<std::string> const& args);
|
||||
|
|
Loading…
Reference in New Issue