Merge topic 'DependencyScanning_13474'

8aed02a -fix Java dependency scanning, broken in previous commit
7ae4479 -fix line length
87fe428 fix #13474: also rescan dependencies if the depender does not exist
This commit is contained in:
David Cole 2012-08-24 14:23:42 -04:00 committed by CMake Topic Stage
commit 6d4a3053e6
4 changed files with 51 additions and 20 deletions

View File

@ -98,7 +98,7 @@ bool cmDepends::Check(const char *makeFile, const char *internalFile,
// Check whether dependencies must be regenerated.
bool okay = true;
std::ifstream fin(internalFile);
if(!(fin && this->CheckDependencies(fin, validDeps)))
if(!(fin && this->CheckDependencies(fin, internalFile, validDeps)))
{
// Clear all dependencies so they will be regenerated.
this->Clear(makeFile);
@ -143,6 +143,7 @@ bool cmDepends::WriteDependencies(const char*, const char*,
//----------------------------------------------------------------------------
bool cmDepends::CheckDependencies(std::istream& internalDepends,
const char* internalDependsFileName,
std::map<std::string, DependencyVector>& validDeps)
{
// Parse dependencies from the stream. If any dependee is missing
@ -186,8 +187,11 @@ bool cmDepends::CheckDependencies(std::istream& internalDepends,
}
*/
// Dependencies must be regenerated if the dependee does not exist
// or if the depender exists and is older than the dependee.
// Dependencies must be regenerated
// * if the dependee does not exist
// * if the depender exists and is older than the dependee.
// * if the depender does not exist, but the dependee is newer than the
// depends file
bool regenerate = false;
const char* dependee = this->Dependee+1;
const char* depender = this->Depender;
@ -211,24 +215,49 @@ bool cmDepends::CheckDependencies(std::istream& internalDepends,
cmSystemTools::Stdout(msg.str().c_str());
}
}
else if(dependerExists)
else
{
// The dependee and depender both exist. Compare file times.
int result = 0;
if((!this->FileComparison->FileTimeCompare(depender, dependee,
&result) || result < 0))
if(dependerExists)
{
// The depender is older than the dependee.
regenerate = true;
// Print verbose output.
if(this->Verbose)
// The dependee and depender both exist. Compare file times.
int result = 0;
if((!this->FileComparison->FileTimeCompare(depender, dependee,
&result) || result < 0))
{
cmOStringStream msg;
msg << "Dependee \"" << dependee
<< "\" is newer than depender \""
<< depender << "\"." << std::endl;
cmSystemTools::Stdout(msg.str().c_str());
// The depender is older than the dependee.
regenerate = true;
// Print verbose output.
if(this->Verbose)
{
cmOStringStream msg;
msg << "Dependee \"" << dependee
<< "\" is newer than depender \""
<< depender << "\"." << std::endl;
cmSystemTools::Stdout(msg.str().c_str());
}
}
}
else
{
// The dependee exists, but the depender doesn't. Regenerate if the
// internalDepends file is older than the dependee.
int result = 0;
if((!this->FileComparison->FileTimeCompare(internalDependsFileName,
dependee, &result) || result < 0))
{
// The depends-file is older than the dependee.
regenerate = true;
// Print verbose output.
if(this->Verbose)
{
cmOStringStream msg;
msg << "Dependee \"" << dependee
<< "\" is newer than depends file \""
<< internalDependsFileName << "\"." << std::endl;
cmSystemTools::Stdout(msg.str().c_str());
}
}
}
}

View File

@ -83,6 +83,7 @@ protected:
// Return false if dependencies must be regenerated and true
// otherwise.
virtual bool CheckDependencies(std::istream& internalDepends,
const char* internalDependsFileName,
std::map<std::string, DependencyVector>& validDeps);
// Finalize the dependency information for the target.

View File

@ -38,7 +38,7 @@ bool cmDependsJava::WriteDependencies(const char *src, const char *,
return true;
}
bool cmDependsJava::CheckDependencies(std::istream&,
bool cmDependsJava::CheckDependencies(std::istream&, const char*,
std::map<std::string, DependencyVector >&)
{
return true;

View File

@ -32,7 +32,8 @@ protected:
virtual bool WriteDependencies(const char *src, const char *file,
std::ostream& makeDepends, std::ostream& internalDepends);
virtual bool CheckDependencies(std::istream& internalDepends,
std::map<std::string, DependencyVector >& validDeps);
const char* internalDependsFileName,
std::map<std::string, DependencyVector>& validDeps);
private:
cmDependsJava(cmDependsJava const&); // Purposely not implemented.