public virtual bool BuildRequired( string grammarFileName )
{
BuildDependencyGenerator bd = new BuildDependencyGenerator( this, grammarFileName );
IList<string> outputFiles = bd.GetGeneratedFileList();
IList<string> inputFiles = bd.GetDependenciesFileList();
DateTime grammarLastModified = File.GetLastWriteTime( grammarFileName );
foreach ( string outputFile in outputFiles )
{
if ( !File.Exists( outputFile ) || grammarLastModified > File.GetLastWriteTime( outputFile ) )
{
// One of the output files does not exist or is out of date, so we must build it
if (Verbose)
{
if (!File.Exists(outputFile))
Console.Out.WriteLine("Output file " + outputFile + " does not exist: must build " + grammarFileName);
else
Console.Out.WriteLine("Output file " + outputFile + " is not up-to-date: must build " + grammarFileName);
}
return true;
}
// Check all of the imported grammars and see if any of these are younger
// than any of the output files.
if ( inputFiles != null )
{
foreach ( string inputFile in inputFiles )
{
if ( File.GetLastWriteTime( inputFile ) > File.GetLastWriteTime( outputFile ) )
{
// One of the imported grammar files has been updated so we must build
if (Verbose)
Console.Out.WriteLine("Input file " + inputFile + " is newer than output: must rebuild " + grammarFileName);
return true;
}
}
}
}
if ( Verbose )
{
Console.Out.WriteLine( "Grammar " + grammarFileName + " is up to date - build skipped" );
}
return false;
}