file(INSTALL): Add undocumented options to control output verbosity

Create options "MESSAGE_ALWAYS", "MESSAGE_LAZY", and "MESSAGE_NEVER" to
specify whether to print the "Installing" and "Up-to-date" messages.
Extend the RunCMake.file test with cases covering these options.
This commit is contained in:
Brad King 2014-06-24 11:42:39 -04:00
parent 464567a577
commit abebcd235c
7 changed files with 103 additions and 3 deletions

View File

@ -1705,6 +1705,9 @@ struct cmFileInstaller: public cmFileCopier
cmFileCopier(command, "INSTALL"),
InstallType(cmInstallType_FILES),
Optional(false),
MessageAlways(false),
MessageLazy(false),
MessageNever(false),
DestDirLength(0)
{
// Installation does not use source permissions by default.
@ -1726,6 +1729,9 @@ struct cmFileInstaller: public cmFileCopier
protected:
cmInstallType InstallType;
bool Optional;
bool MessageAlways;
bool MessageLazy;
bool MessageNever;
int DestDirLength;
std::string Rename;
@ -1740,10 +1746,13 @@ protected:
{ return this->Rename.empty()? fromName : this->Rename; }
virtual void ReportCopy(const char* toFile, Type type, bool copy)
{
if(!this->MessageNever && (copy || !this->MessageLazy))
{
std::string message = (copy? "Installing: " : "Up-to-date: ");
message += toFile;
this->Makefile->DisplayStatus(message.c_str(), -1);
}
if(type != TypeDir)
{
// Add the file to the manifest.
@ -1829,6 +1838,16 @@ bool cmFileInstaller::Parse(std::vector<std::string> const& args)
return false;
}
if(((this->MessageAlways?1:0) +
(this->MessageLazy?1:0) +
(this->MessageNever?1:0)) > 1)
{
this->FileCommand->SetError("INSTALL options MESSAGE_ALWAYS, "
"MESSAGE_LAZY, and MESSAGE_NEVER "
"are mutually exclusive.");
return false;
}
return true;
}
@ -1880,6 +1899,42 @@ bool cmFileInstaller::CheckKeyword(std::string const& arg)
this->Optional = true;
}
}
else if(arg == "MESSAGE_ALWAYS")
{
if(this->CurrentMatchRule)
{
this->NotAfterMatch(arg);
}
else
{
this->Doing = DoingNone;
this->MessageAlways = true;
}
}
else if(arg == "MESSAGE_LAZY")
{
if(this->CurrentMatchRule)
{
this->NotAfterMatch(arg);
}
else
{
this->Doing = DoingNone;
this->MessageLazy = true;
}
}
else if(arg == "MESSAGE_NEVER")
{
if(this->CurrentMatchRule)
{
this->NotAfterMatch(arg);
}
else
{
this->Doing = DoingNone;
this->MessageNever = true;
}
}
else if(arg == "PERMISSIONS")
{
if(this->CurrentMatchRule)

View File

@ -3,4 +3,6 @@
-- Installing: .*/Tests/RunCMake/file/INSTALL-DIRECTORY-build/dir/empty.txt
-- Up-to-date: .*/Tests/RunCMake/file/INSTALL-DIRECTORY-build/dir
-- Up-to-date: .*/Tests/RunCMake/file/INSTALL-DIRECTORY-build/dir/empty.txt
-- Up-to-date: .*/Tests/RunCMake/file/INSTALL-DIRECTORY-build/dir
-- Up-to-date: .*/Tests/RunCMake/file/INSTALL-DIRECTORY-build/dir/empty.txt
-- After Installing

View File

@ -4,4 +4,7 @@ file(REMOVE RECURSE ${dst})
message(STATUS "Before Installing")
file(INSTALL FILES ${src}/ DESTINATION ${dst} TYPE DIRECTORY)
file(INSTALL FILES ${src}/ DESTINATION ${dst} TYPE DIRECTORY)
file(INSTALL FILES ${src}/ DESTINATION ${dst} TYPE DIRECTORY MESSAGE_NEVER)
file(INSTALL FILES ${src}/ DESTINATION ${dst} TYPE DIRECTORY MESSAGE_LAZY)
file(INSTALL FILES ${src}/ DESTINATION ${dst} TYPE DIRECTORY MESSAGE_ALWAYS)
message(STATUS "After Installing")

View File

@ -0,0 +1 @@
1

View File

@ -0,0 +1,32 @@
CMake Error at INSTALL-MESSAGE-bad.cmake:1 \(file\):
file INSTALL options MESSAGE_ALWAYS, MESSAGE_LAZY, and MESSAGE_NEVER are
mutually exclusive.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)
+
CMake Error at INSTALL-MESSAGE-bad.cmake:2 \(file\):
file INSTALL options MESSAGE_ALWAYS, MESSAGE_LAZY, and MESSAGE_NEVER are
mutually exclusive.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)
+
CMake Error at INSTALL-MESSAGE-bad.cmake:3 \(file\):
file INSTALL options MESSAGE_ALWAYS, MESSAGE_LAZY, and MESSAGE_NEVER are
mutually exclusive.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)
+
CMake Error at INSTALL-MESSAGE-bad.cmake:4 \(file\):
file option MESSAGE_ALWAYS may not appear after PATTERN or REGEX.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)
+
CMake Error at INSTALL-MESSAGE-bad.cmake:5 \(file\):
file option MESSAGE_LAZY may not appear after PATTERN or REGEX.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)
+
CMake Error at INSTALL-MESSAGE-bad.cmake:6 \(file\):
file option MESSAGE_NEVER may not appear after PATTERN or REGEX.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)

View File

@ -0,0 +1,6 @@
file(INSTALL DESTINATION dir MESSAGE_ALWAYS MESSAGE_LAZY)
file(INSTALL DESTINATION dir MESSAGE_ALWAYS MESSAGE_NEVER)
file(INSTALL DESTINATION dir MESSAGE_LAZY MESSAGE_NEVER)
file(INSTALL DESTINATION dir PATTERN *.txt MESSAGE_ALWAYS)
file(INSTALL DESTINATION dir PATTERN *.txt MESSAGE_LAZY)
file(INSTALL DESTINATION dir PATTERN *.txt MESSAGE_NEVER)

View File

@ -1,4 +1,5 @@
include(RunCMake)
run_cmake(INSTALL-DIRECTORY)
run_cmake(INSTALL-MESSAGE-bad)
run_cmake(FileOpenFailRead)