summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2006-10-23 17:37:24 (GMT)
committerBrad King <brad.king@kitware.com>2006-10-23 17:37:24 (GMT)
commitd1a9c93119958a1a394fe0dde5814cd6a8f3f748 (patch)
treecf2adb57d85858bb4ecca2fe3e288a1fdcb8a979
parent0c52510f21fdddf289735aa30a0df9671d63970a (diff)
downloadCMake-d1a9c93119958a1a394fe0dde5814cd6a8f3f748.zip
CMake-d1a9c93119958a1a394fe0dde5814cd6a8f3f748.tar.gz
CMake-d1a9c93119958a1a394fe0dde5814cd6a8f3f748.tar.bz2
ENH: Patch from Alex to provide nicer syntax for FILE_IS_NEWER. Using name IS_NEWER_THAN so old syntax will continue to work.
-rw-r--r--Source/cmIfCommand.cxx23
-rw-r--r--Source/cmIfCommand.h1
-rw-r--r--Tests/StringFileTest/CMakeLists.txt3
3 files changed, 27 insertions, 0 deletions
diff --git a/Source/cmIfCommand.cxx b/Source/cmIfCommand.cxx
index 722cc78..1553171 100644
--- a/Source/cmIfCommand.cxx
+++ b/Source/cmIfCommand.cxx
@@ -493,6 +493,29 @@ bool cmIfCommand::IsTrue(const std::vector<std::string> &args,
reducible = 1;
}
+ // is file A newer than file B
+ if (argP1 != newArgs.end() && argP2 != newArgs.end() &&
+ *(argP1) == "IS_NEWER_THAN")
+ {
+ int fileIsNewer=0;
+ bool success=cmSystemTools::FileTimeCompare(arg->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;
+ }
+
++arg;
}
}
diff --git a/Source/cmIfCommand.h b/Source/cmIfCommand.h
index 1d07248..c7044a3 100644
--- a/Source/cmIfCommand.h
+++ b/Source/cmIfCommand.h
@@ -130,6 +130,7 @@ public:
"True if the named file or directory exists. "
"Behavior is well-defined only for full paths.\n"
" IF(FILE_IS_NEWER file1 file2)\n"
+ " IF(file1 IS_NEWER_THAN file2)\n"
"True if file1 is newer than file2 or if one of the two files "
"doesn't exist. "
"Behavior is well-defined only for full paths.\n"
diff --git a/Tests/StringFileTest/CMakeLists.txt b/Tests/StringFileTest/CMakeLists.txt
index 3376a38..e6288db 100644
--- a/Tests/StringFileTest/CMakeLists.txt
+++ b/Tests/StringFileTest/CMakeLists.txt
@@ -79,6 +79,9 @@ ENDFOREACH(var)
IF(NOT FILE_IS_NEWER "${file}" "${CMAKE_CURRENT_SOURCE_DIR}/InputFile.h.in")
MESSAGE(FATAL_ERROR "IF(FILE_IS_NEWER) does not seem to work.")
ENDIF(NOT FILE_IS_NEWER "${file}" "${CMAKE_CURRENT_SOURCE_DIR}/InputFile.h.in")
+IF(NOT "${file}" IS_NEWER_THAN "${CMAKE_CURRENT_SOURCE_DIR}/InputFile.h.in")
+ MESSAGE(FATAL_ERROR "IF(FILE_IS_NEWER) does not seem to work.")
+ENDIF(NOT "${file}" IS_NEWER_THAN "${CMAKE_CURRENT_SOURCE_DIR}/InputFile.h.in")
# Test configuration of the string
SET(TEST_DEFINED 123)