summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2012-04-18 19:28:12 (GMT)
committerBrad King <brad.king@kitware.com>2012-04-18 19:49:38 (GMT)
commit369e3464beb8258ce5b2af8bcbe6b476fca379de (patch)
tree86ca6b0e9cb1f1b39462c50bd53df8398d457ed2 /Source
parentf9b758e91a9afa17123c5b81b5568ebbd52db598 (diff)
downloadCMake-369e3464beb8258ce5b2af8bcbe6b476fca379de.zip
CMake-369e3464beb8258ce5b2af8bcbe6b476fca379de.tar.gz
CMake-369e3464beb8258ce5b2af8bcbe6b476fca379de.tar.bz2
Factor out custom command .rule file path generation
Add cmGlobalGenerator::GenerateRuleFile to compute a generator-specific rule file location. This will allow specific generators to override the location of .rule files without changing the behavior of other generators.
Diffstat (limited to 'Source')
-rw-r--r--Source/cmGlobalGenerator.cxx15
-rw-r--r--Source/cmGlobalGenerator.h3
-rw-r--r--Source/cmMakefile.cxx14
3 files changed, 22 insertions, 10 deletions
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index 545f9e8..b06cdb4 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -2092,6 +2092,21 @@ cmTarget cmGlobalGenerator::CreateGlobalTarget(
}
//----------------------------------------------------------------------------
+std::string
+cmGlobalGenerator::GenerateRuleFile(std::string const& output) const
+{
+ std::string ruleFile = output;
+ ruleFile += ".rule";
+ const char* dir = this->GetCMakeCFGIntDir();
+ if(dir && dir[0] == '$')
+ {
+ cmSystemTools::ReplaceString(ruleFile, dir,
+ cmake::GetCMakeFilesDirectory());
+ }
+ return ruleFile;
+}
+
+//----------------------------------------------------------------------------
void cmGlobalGenerator::AppendDirectoryForConfig(const char*, const char*,
const char*, std::string&)
{
diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h
index 80b948b..5254b89 100644
--- a/Source/cmGlobalGenerator.h
+++ b/Source/cmGlobalGenerator.h
@@ -277,6 +277,9 @@ public:
i.e. "Can I build Debug and Release in the same tree?" */
virtual bool IsMultiConfig() { return false; }
+ /** Generate an <output>.rule file path for a given command output. */
+ virtual std::string GenerateRuleFile(std::string const& output) const;
+
protected:
typedef std::vector<cmLocalGenerator*> GeneratorVector;
// for a project collect all its targets by following depend
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index f2865f6..17bb5ed 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -948,17 +948,11 @@ cmMakefile::AddCustomCommandToOutput(const std::vector<std::string>& outputs,
// Generate a rule file if the main dependency is not available.
if(!file)
{
+ cmGlobalGenerator* gg = this->LocalGenerator->GetGlobalGenerator();
+
// Construct a rule file associated with the first output produced.
- std::string outName = outputs[0];
- outName += ".rule";
- const char* dir =
- this->LocalGenerator->GetGlobalGenerator()->
- GetCMakeCFGIntDir();
- if(dir && dir[0] == '$')
- {
- cmSystemTools::ReplaceString(outName, dir,
- cmake::GetCMakeFilesDirectory());
- }
+ std::string outName = gg->GenerateRuleFile(outputs[0]);
+
// Check if the rule file already exists.
file = this->GetSource(outName.c_str());
if(file && file->GetCustomCommand() && !replace)