ENH: Added COMMENT option to ADD_CUSTOM_TARGET. This addresses bug#3461.

This commit is contained in:
Brad King 2006-10-04 18:10:30 -04:00
parent 168591e72d
commit 5a6b0792cd
5 changed files with 27 additions and 6 deletions

View File

@ -59,12 +59,15 @@ bool cmAddCustomTargetCommand::InitialPass(
std::vector<std::string> depends; std::vector<std::string> depends;
std::string working_directory; std::string working_directory;
bool verbatim = false; bool verbatim = false;
std::string comment_buffer;
const char* comment = 0;
// Keep track of parser state. // Keep track of parser state.
enum tdoing { enum tdoing {
doing_command, doing_command,
doing_depends, doing_depends,
doing_working_directory, doing_working_directory,
doing_comment,
doing_verbatim doing_verbatim
}; };
tdoing doing = doing_command; tdoing doing = doing_command;
@ -99,6 +102,10 @@ bool cmAddCustomTargetCommand::InitialPass(
doing = doing_verbatim; doing = doing_verbatim;
verbatim = true; verbatim = true;
} }
else if (copy == "COMMENT")
{
doing = doing_comment;
}
else if(copy == "COMMAND") else if(copy == "COMMAND")
{ {
doing = doing_command; doing = doing_command;
@ -123,6 +130,10 @@ bool cmAddCustomTargetCommand::InitialPass(
case doing_depends: case doing_depends:
depends.push_back(copy); depends.push_back(copy);
break; break;
case doing_comment:
comment_buffer = copy;
comment = comment_buffer.c_str();
break;
default: default:
this->SetError("Wrong syntax. Unknown type of argument."); this->SetError("Wrong syntax. Unknown type of argument.");
return false; return false;
@ -151,7 +162,7 @@ bool cmAddCustomTargetCommand::InitialPass(
bool escapeOldStyle = !verbatim; bool escapeOldStyle = !verbatim;
this->Makefile->AddUtilityCommand(args[0].c_str(), all, this->Makefile->AddUtilityCommand(args[0].c_str(), all,
working_directory.c_str(), depends, working_directory.c_str(), depends,
commandLines, escapeOldStyle); commandLines, escapeOldStyle, comment);
return true; return true;
} }

View File

@ -66,7 +66,8 @@ public:
" ADD_CUSTOM_TARGET(Name [ALL] [command1 [args1...]]\n" " ADD_CUSTOM_TARGET(Name [ALL] [command1 [args1...]]\n"
" [COMMAND command2 [args2...] ...]\n" " [COMMAND command2 [args2...] ...]\n"
" [DEPENDS depend depend depend ... ]\n" " [DEPENDS depend depend depend ... ]\n"
" [WORKING_DIRECTORY dir] [VERBATIM])\n" " [WORKING_DIRECTORY dir]\n"
" [COMMENT comment] [VERBATIM])\n"
"Adds a target with the given name that executes the given commands. " "Adds a target with the given name that executes the given commands. "
"The target has no output file and is ALWAYS CONSIDERED OUT OF DATE " "The target has no output file and is ALWAYS CONSIDERED OUT OF DATE "
"even if the commands try to create a file with the name of the " "even if the commands try to create a file with the name of the "
@ -81,6 +82,8 @@ public:
"empty target will be created. " "empty target will be created. "
"If WORKING_DIRECTORY is set, then the command will be run in that " "If WORKING_DIRECTORY is set, then the command will be run in that "
"directory. " "directory. "
"If COMMENT is set, the value will be displayed as a "
"message before the commands are executed at build time. "
"Dependencies listed with the DEPENDS argument may reference files " "Dependencies listed with the DEPENDS argument may reference files "
"and outputs of custom commands created with ADD_CUSTOM_COMMAND.\n" "and outputs of custom commands created with ADD_CUSTOM_COMMAND.\n"
"If VERBATIM is given then all the arguments to the commands will be " "If VERBATIM is given then all the arguments to the commands will be "

View File

@ -823,7 +823,7 @@ void cmMakefile::AddUtilityCommand(const char* utilityName, bool all,
const char* workingDirectory, const char* workingDirectory,
const std::vector<std::string>& depends, const std::vector<std::string>& depends,
const cmCustomCommandLines& commandLines, const cmCustomCommandLines& commandLines,
bool escapeOldStyle) bool escapeOldStyle, const char* comment)
{ {
// Create a target instance for this utility. // Create a target instance for this utility.
cmTarget target; cmTarget target;
@ -831,17 +831,22 @@ void cmMakefile::AddUtilityCommand(const char* utilityName, bool all,
target.SetInAll(all); target.SetInAll(all);
target.SetMakefile(this); target.SetMakefile(this);
if(!comment)
{
// Use an empty comment to avoid generation of default comment.
comment = "";
}
// Store the custom command in the target. // Store the custom command in the target.
std::string force = this->GetStartOutputDirectory(); std::string force = this->GetStartOutputDirectory();
force += cmake::GetCMakeFilesDirectory(); force += cmake::GetCMakeFilesDirectory();
force += "/"; force += "/";
force += utilityName; force += utilityName;
const char* no_main_dependency = 0; const char* no_main_dependency = 0;
const char* empty_comment = "";
bool no_replace = false; bool no_replace = false;
this->AddCustomCommandToOutput(force.c_str(), depends, this->AddCustomCommandToOutput(force.c_str(), depends,
no_main_dependency, no_main_dependency,
commandLines, empty_comment, commandLines, comment,
workingDirectory, no_replace, workingDirectory, no_replace,
escapeOldStyle); escapeOldStyle);
target.GetSourceLists().push_back(force); target.GetSourceLists().push_back(force);

View File

@ -195,7 +195,8 @@ public:
const char* workingDirectory, const char* workingDirectory,
const std::vector<std::string>& depends, const std::vector<std::string>& depends,
const cmCustomCommandLines& commandLines, const cmCustomCommandLines& commandLines,
bool escapeOldStyle = true); bool escapeOldStyle = true,
const char* comment = 0);
/** /**
* Add a link library to the build. * Add a link library to the build.

View File

@ -98,6 +98,7 @@ ADD_CUSTOM_TARGET(TDocument ALL
COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/doc1.h COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/doc1.h
${PROJECT_BINARY_DIR}/doc2.h ${PROJECT_BINARY_DIR}/doc2.h
DEPENDS ${PROJECT_BINARY_DIR}/doc1.h DEPENDS ${PROJECT_BINARY_DIR}/doc1.h
COMMENT "Running top-level TDocument commands"
) )
# Setup a pre- and post-build pair that will fail if not run in the # Setup a pre- and post-build pair that will fail if not run in the