summaryrefslogtreecommitdiff
path: root/Source/cmIfCommand.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2006-08-25 16:31:07 -0400
committerBrad King <brad.king@kitware.com>2006-08-25 16:31:07 -0400
commit6449089436d16406f35f1ee9aef33c07ca89785e (patch)
tree8886177e6b9e0e1fab6cde440fe97a1eb7064986 /Source/cmIfCommand.cxx
parentebf532b106fed4bb4c2993be43e3ec2a42573f6b (diff)
downloadcmake-6449089436d16406f35f1ee9aef33c07ca89785e.tar.gz
ENH: Patch from Alex for adding IF(FILE_IS_NEWER). I also added a test.
Diffstat (limited to 'Source/cmIfCommand.cxx')
-rw-r--r--Source/cmIfCommand.cxx23
1 files changed, 22 insertions, 1 deletions
diff --git a/Source/cmIfCommand.cxx b/Source/cmIfCommand.cxx
index e745735d38..c9a6c08cb3 100644
--- a/Source/cmIfCommand.cxx
+++ b/Source/cmIfCommand.cxx
@@ -226,7 +226,7 @@ bool cmIfCommand::IsTrue(const std::vector<std::string> &args,
IncrementArguments(newArgs,argP1,argP2);
reducible = 1;
}
- // does a file exist
+ // does a directory with this name exist
if (*arg == "IS_DIRECTORY" && argP1 != newArgs.end())
{
if(cmSystemTools::FileIsDirectory((argP1)->c_str()))
@@ -242,6 +242,27 @@ bool cmIfCommand::IsTrue(const std::vector<std::string> &args,
IncrementArguments(newArgs,argP1,argP2);
reducible = 1;
}
+ // is file A newer than file B
+ if (*arg == "FILE_IS_NEWER" && argP1 != newArgs.end() && argP2 != newArgs.end())
+ {
+ int fileIsNewer=0;
+ bool success=cmSystemTools::FileTimeCompare((argP1)->c_str(), (argP2)->c_str(),
+ &fileIsNewer);
+ if(success==false || fileIsNewer==1 || fileIsNewer==0)
+ {
+ *arg = "1";
+ }
+ else
+ {
+ *arg = "0";
+ }
+
+ newArgs.erase(argP2);
+ newArgs.erase(argP1);
+ argP1 = arg;
+ IncrementArguments(newArgs,argP1,argP2);
+ reducible = 1;
+ }
// does a command exist
if (*arg == "COMMAND" && argP1 != newArgs.end())
{