ENH: Patch from Alex for adding IF(FILE_IS_NEWER). I also added a test.

This commit is contained in:
Brad King 2006-08-25 16:31:07 -04:00
parent ebf532b106
commit 6449089436
3 changed files with 31 additions and 1 deletions

View File

@ -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())
{

View File

@ -128,6 +128,10 @@ public:
" IF(EXISTS directory-name)\n"
"True if the named file or directory exists. "
"Behavior is well-defined only for full paths.\n"
" IF(FILE_IS_NEWER file1 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"
" IF(IS_DIRECTORY directory-name)\n"
"True if the given name is a directory. "
"Behavior is well-defined only for full paths.\n"

View File

@ -75,6 +75,11 @@ FOREACH(var
FILE(APPEND "${file}" "#define ${var} \"${${var}}\"\n")
ENDFOREACH(var)
# Verify that the file was created recently.
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")
# Test configuration of the string
SET(TEST_DEFINED 123)
SET(TEST_NOT_DEFINED)