summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmLocalGenerator.cxx61
1 files changed, 35 insertions, 26 deletions
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 5b86ff9..6952338 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -472,6 +472,9 @@ void cmLocalGenerator::AddCustomCommandToCreateObject(const char* ofname,
flags += this->Makefile->GetSafeDefinition(varString.c_str());
flags += " ";
flags += this->GetIncludeFlags(lang);
+
+ // Construct the command lines.
+ cmCustomCommandLines commandLines;
std::vector<std::string> commands;
cmSystemTools::ExpandList(rules, commands);
cmLocalGenerator::RuleVariables vars;
@@ -482,39 +485,45 @@ void cmLocalGenerator::AddCustomCommandToCreateObject(const char* ofname,
for(std::vector<std::string>::iterator i = commands.begin();
i != commands.end(); ++i)
{
+ // Expand the full command line string.
this->ExpandRuleVariables(*i, vars);
+
+ // Parse the string to get the custom command line.
+ cmCustomCommandLine commandLine;
+ std::vector<cmStdString> cmd = cmSystemTools::ParseArguments(i->c_str());
+ for(std::vector<cmStdString>::iterator a = cmd.begin();
+ a != cmd.end(); ++a)
+ {
+ commandLine.push_back(*a);
+ }
+
+ // Store this command line.
+ commandLines.push_back(commandLine);
}
- std::vector<std::string> sourceAndDeps;
- sourceAndDeps.push_back(sourceFile);
- if(commands.size() > 1)
- {
- cmSystemTools::Error("Currently custom rules can only have one command sorry ");
- }
- // Check for extra object-file dependencies.
+
+ // Check for extra object-file dependencies.
std::vector<std::string> depends;
const char* additionalDeps = source.GetProperty("OBJECT_DEPENDS");
if(additionalDeps)
{
cmSystemTools::ExpandListArgument(additionalDeps, depends);
- for(std::vector<std::string>::iterator i = depends.begin();
- i != depends.end(); ++i)
- {
- sourceAndDeps.push_back(this->Convert(i->c_str(),START_OUTPUT,SHELL));
- }
- }
-#if 0
- std::string command;
- std::string args;
- cmSystemTools::SplitProgramFromArgs(commands[0].c_str(), command, args);
- std::vector<std::string> argsv;
- argsv.push_back(args);
- this->Makefile->AddCustomCommandToOutput(ofname,
- command.c_str(),
- argsv,
- source.GetFullPath().c_str(),
- sourceAndDeps,
- "build from source");
-#endif
+ }
+
+ // Generate a meaningful comment for the command.
+ std::string comment = "Building ";
+ comment += lang;
+ comment += " object ";
+ comment += this->Convert(ofname, START_OUTPUT);
+
+ // Add the custom command to build the object file.
+ this->Makefile->AddCustomCommandToOutput(
+ ofname,
+ depends,
+ source.GetFullPath().c_str(),
+ commandLines,
+ comment.c_str(),
+ this->Makefile->GetStartOutputDirectory()
+ );
}
void cmLocalGenerator::AddBuildTargetRule(const char* llang, cmTarget& target)