summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmGlobalUnixMakefileGenerator3.cxx76
-rw-r--r--Source/cmGlobalUnixMakefileGenerator3.h1
-rw-r--r--Source/cmLocalUnixMakefileGenerator3.cxx154
-rw-r--r--Source/cmLocalUnixMakefileGenerator3.h17
4 files changed, 56 insertions, 192 deletions
diff --git a/Source/cmGlobalUnixMakefileGenerator3.cxx b/Source/cmGlobalUnixMakefileGenerator3.cxx
index 4a0596c..985e092 100644
--- a/Source/cmGlobalUnixMakefileGenerator3.cxx
+++ b/Source/cmGlobalUnixMakefileGenerator3.cxx
@@ -101,7 +101,6 @@ void cmGlobalUnixMakefileGenerator3::Generate()
this->WriteMainCMakefile();
// now write the support Makefiles
- this->WriteDependMakefile();
this->WriteBuildMakefile();
this->WriteCleanMakefile();
}
@@ -316,64 +315,6 @@ void cmGlobalUnixMakefileGenerator3
}
}
-void cmGlobalUnixMakefileGenerator3::WriteDependMakefile()
-{
- unsigned int i;
-
- // Open the output file. This should not be copy-if-different
- // because the check-build-system step compares the makefile time to
- // see if the build system must be regenerated.
- std::string makefileName = this->GetCMakeInstance()->GetHomeOutputDirectory();
- makefileName += "/depend.make";
- cmGeneratedFileStream makefileStream(makefileName.c_str());
- if(!makefileStream)
- {
- return;
- }
-
- // get a local generator for some useful methods
- cmLocalUnixMakefileGenerator3 *lg =
- static_cast<cmLocalUnixMakefileGenerator3 *>(m_LocalGenerators[0]);
-
- // Write the do not edit header.
- lg->WriteDisclaimer(makefileStream);
- //lg->WriteMakeVariables(makefileStream);
-
- // add the generic dependency
- std::vector<std::string> depends;
- std::vector<std::string> no_commands;
- lg->WriteMakeRule(makefileStream, 0, "depend", depends, no_commands);
-
- // include the build rules
- makefileStream
- << "# Include make rules for build targets\n";
- makefileStream
- << lg->GetIncludeDirective() << " "
- << lg->ConvertToOutputForExisting("build.make").c_str()
- << "\n\n";
-
- // include all the target depends
- for (i = 0; i < m_LocalGenerators.size(); ++i)
- {
- cmLocalUnixMakefileGenerator3 *lg2 =
- static_cast<cmLocalUnixMakefileGenerator3 *>(m_LocalGenerators[i]);
- // are any parents excluded
- bool exclude = false;
- cmLocalGenerator *lg3 = lg2;
- while (lg3)
- {
- if (lg3->GetExcludeAll())
- {
- exclude = true;
- break;
- }
- lg3 = lg3->GetParent();
- }
- lg2->WriteMainTargetIncludes(makefileStream,"depend.make","depend");
- lg2->WriteMainTargetRules(makefileStream,"depend.make","depend",!exclude);
- }
-}
-
void cmGlobalUnixMakefileGenerator3::WriteBuildMakefile()
{
unsigned int i;
@@ -401,6 +342,8 @@ void cmGlobalUnixMakefileGenerator3::WriteBuildMakefile()
std::vector<std::string> depends;
std::vector<std::string> no_commands;
lg->WriteMakeRule(makefileStream, 0, "build", depends, no_commands);
+ lg->WriteMakeRule(makefileStream, 0, "depend", depends, no_commands);
+ lg->WriteMakeRule(makefileStream, 0, "requires", depends, no_commands);
// include all the target depends
for (i = 0; i < m_LocalGenerators.size(); ++i)
@@ -420,8 +363,9 @@ void cmGlobalUnixMakefileGenerator3::WriteBuildMakefile()
lg3 = lg3->GetParent();
}
lg2->WriteMainTargetIncludes(makefileStream,"build.make","build");
- lg2->WriteMainTargetRules(makefileStream,"build.make","build",!exclude);
+ lg2->WriteMainTargetRules(makefileStream,"build.make","depend",!exclude);
lg2->WriteMainTargetRules(makefileStream,"build.make","requires",!exclude);
+ lg2->WriteMainTargetRules(makefileStream,"build.make","build",!exclude);
}
}
@@ -483,8 +427,8 @@ void cmGlobalUnixMakefileGenerator3
// Check the build system in this directory.
depends.push_back("cmake_check_build_system");
- commands.push_back(lg->GetRecursiveMakeCall("depend.make",0));
- commands.push_back(lg->GetRecursiveMakeCall("depend.make","requires"));
+ commands.push_back(lg->GetRecursiveMakeCall("build.make","depend"));
+ commands.push_back(lg->GetRecursiveMakeCall("build.make","requires"));
commands.push_back(lg->GetRecursiveMakeCall("build.make",0));
// Write the rule.
@@ -520,10 +464,10 @@ cmGlobalUnixMakefileGenerator3
commands.clear();
makeTargetName = dir;
makeTargetName += "/depend";
- commands.push_back(lg->GetRecursiveMakeCall("depend.make",makeTargetName.c_str()));
+ commands.push_back(lg->GetRecursiveMakeCall("build.make",makeTargetName.c_str()));
makeTargetName = dir;
makeTargetName += "/requires";
- commands.push_back(lg->GetRecursiveMakeCall("depend.make",makeTargetName.c_str()));
+ commands.push_back(lg->GetRecursiveMakeCall("build.make",makeTargetName.c_str()));
makeTargetName = dir;
makeTargetName += "/build";
commands.push_back(lg->GetRecursiveMakeCall("build.make",makeTargetName.c_str()));
@@ -548,10 +492,10 @@ cmGlobalUnixMakefileGenerator3
commands.clear();
makeTargetName = localName;
makeTargetName += "/depend";
- commands.push_back(lg->GetRecursiveMakeCall("depend.make",makeTargetName.c_str()));
+ commands.push_back(lg->GetRecursiveMakeCall("build.make",makeTargetName.c_str()));
makeTargetName = localName;
makeTargetName += "/requires";
- commands.push_back(lg->GetRecursiveMakeCall("depend.make",makeTargetName.c_str()));
+ commands.push_back(lg->GetRecursiveMakeCall("build.make",makeTargetName.c_str()));
makeTargetName = localName;
makeTargetName += "/build";
commands.push_back(lg->GetRecursiveMakeCall("build.make",makeTargetName.c_str()));
diff --git a/Source/cmGlobalUnixMakefileGenerator3.h b/Source/cmGlobalUnixMakefileGenerator3.h
index eb8d8da..b63d007 100644
--- a/Source/cmGlobalUnixMakefileGenerator3.h
+++ b/Source/cmGlobalUnixMakefileGenerator3.h
@@ -60,7 +60,6 @@ public:
protected:
void WriteMainMakefile();
void WriteMainCMakefile();
- void WriteDependMakefile();
void WriteBuildMakefile();
void WriteCleanMakefile();
void WriteMainCMakefileLanguageRules(cmGeneratedFileStream& cmakefileStream);
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx
index 9f9e47f..4efbe53 100644
--- a/Source/cmLocalUnixMakefileGenerator3.cxx
+++ b/Source/cmLocalUnixMakefileGenerator3.cxx
@@ -428,11 +428,12 @@ cmLocalUnixMakefileGenerator3
//----------------------------------------------------------------------------
void
cmLocalUnixMakefileGenerator3
-::WriteObjectDependFile(std::string &obj,
- const char * lang,
- const cmSourceFile& source,
- std::vector<std::string>& depends,
- std::string& depMakeFile)
+::WriteObjectDependRules(std::ostream& ruleFileStream,
+ std::string &obj,
+ const char * lang,
+ const cmSourceFile& source,
+ std::vector<std::string>& depends,
+ std::string& depMakeFile)
{
// TODO: what the heck is this?
// Generate the build-time dependencies file for this object file.
@@ -445,21 +446,6 @@ cmLocalUnixMakefileGenerator3
return;
}
- // Open the rule file for writing. This should be copy-if-different
- // because the rules may depend on this file itself.
- std::string ruleFileName = obj;
- ruleFileName += ".depend.make";
- std::string ruleFileNameFull = this->ConvertToFullPath(ruleFileName);
- cmGeneratedFileStream ruleFileStream(ruleFileNameFull.c_str());
- ruleFileStream.SetCopyIfDifferent(true);
- if(!ruleFileStream)
- {
- return;
- }
- this->WriteDisclaimer(ruleFileStream);
- ruleFileStream
- << "# depend stage file for object file " << obj.c_str() << ".\n\n";
-
// Create the list of dependencies known at cmake time. These are
// shared between the object file and dependency scanning rule.
depends.push_back(source.GetFullPath());
@@ -473,7 +459,6 @@ cmLocalUnixMakefileGenerator3
depends.push_back(i->c_str());
}
}
- this->AppendRuleDepend(depends, ruleFileNameFull.c_str());
// Write the dependency generation rule.
std::string relativeObj = this->GetHomeRelativeOutputPath();
@@ -532,6 +517,12 @@ cmLocalUnixMakefileGenerator3
ruleFileStream
<< "# Rule file for object file " << obj.c_str() << ".\n\n";
+ // generate the depend scanning rule
+ this->WriteObjectDependRules(ruleFileStream, obj, lang, source,
+ depends, depMakeFile);
+
+ this->AppendRuleDepend(depends, ruleFileNameFull.c_str());
+
// Include the dependencies for the target.
std::string depPath = this->GetHomeRelativeOutputPath();
depPath += depMakeFile;
@@ -543,7 +534,6 @@ cmLocalUnixMakefileGenerator3
<< "\n\n";
// Write the build rule.
- {
// Build the set of compiler flags.
std::string flags;
@@ -621,11 +611,10 @@ cmLocalUnixMakefileGenerator3
// Write the rule.
this->WriteMakeRule(ruleFileStream, 0,
relativeObj.c_str(), depends, commands);
- }
// If the language needs provides-requires mode, create the
// corresponding targets.
- std::string objectRequires = obj;
+ std::string objectRequires = relativeObj;
objectRequires += ".requires";
std::vector<std::string> no_commands;
@@ -713,9 +702,6 @@ cmLocalUnixMakefileGenerator3
std::vector<std::string> depends;
std::string depMakeFile;
- // generate the depends rule file
- this->WriteObjectDependFile(obj, lang, source, depends, depMakeFile);
-
// generate the build rule file
this->WriteObjectBuildFile(obj, lang, target, source, depends, depMakeFile,
provides_requires);
@@ -1430,62 +1416,30 @@ cmLocalUnixMakefileGenerator3
void
cmLocalUnixMakefileGenerator3
::WriteTargetRequiresRule(std::ostream& ruleFileStream, const cmTarget& target,
- const std::vector<std::string>& provides_requires)
+ const std::vector<std::string>& objects)
{
- // Create the driving make target.
- std::string dir = m_Makefile->GetStartOutputDirectory();
- dir += "/";
- dir += this->GetTargetDirectory(target);
- std::string targetRequires = dir;
- targetRequires += "/requires";
- targetRequires = this->Convert(targetRequires.c_str(),HOME_OUTPUT,MAKEFILE);
+ std::vector<std::string> depends;
+ std::vector<std::string> no_commands;
- std::string buildTarget = dir;
- buildTarget += "/build";
- buildTarget = this->Convert(buildTarget.c_str(),HOME_OUTPUT,MAKEFILE);
-
- std::string comment = "Directory-level requires rule for this target.";
- if(provides_requires.empty())
- {
- // No provides-requires mode objects in this target. Anything
- // that requires the target can build it directly.
- std::vector<std::string> no_commands;
- std::vector<std::string> depends;
- depends.push_back(buildTarget);
- this->WriteMakeRule(ruleFileStream, comment.c_str(),
- targetRequires.c_str(), depends, no_commands);
- }
- else
- {
- // There are provides-requires mode objects in this target. Use
- // provides-requires mode to build the target itself.
- std::string targetProvides = dir;
- targetProvides += "/provides";
- targetProvides = this->Convert(targetProvides.c_str(),HOME_OUTPUT,MAKEFILE);
+ // Construct the name of the dependency generation target.
+ std::string depTarget = this->GetRelativeTargetDirectory(target);
+ depTarget += "/requires";
+
+ // This target drives dependency generation for all object files.
+ std::string relPath = this->GetHomeRelativeOutputPath();
+ std::string objTarget;
+ for(std::vector<std::string>::const_iterator obj = objects.begin();
+ obj != objects.end(); ++obj)
{
- std::vector<std::string> no_commands;
- std::vector<std::string> depends;
- depends.push_back(buildTarget);
- this->WriteMakeRule(ruleFileStream, 0,
- targetProvides.c_str(), depends, no_commands);
+ objTarget = relPath;
+ objTarget += *obj;
+ objTarget += ".requires";
+ depends.push_back(objTarget);
}
- {
- // Build list of require-level dependencies.
- std::vector<std::string> depends;
- for(std::vector<std::string>::const_iterator
- pr = provides_requires.begin();
- pr != provides_requires.end(); ++pr)
- {
- depends.push_back(*pr);
- }
- // Write the requires rule for this target.
- std::vector<std::string> commands;
- //commands.push_back(this->GetRecursiveMakeCall(targetProvides.c_str()));
- this->WriteMakeRule(ruleFileStream, comment.c_str(),
- targetRequires.c_str(), depends, commands);
- }
- }
+ // Write the rule.
+ this->WriteMakeRule(ruleFileStream, 0,
+ depTarget.c_str(), depends, no_commands);
}
//----------------------------------------------------------------------------
@@ -1499,7 +1453,7 @@ cmLocalUnixMakefileGenerator3
const std::vector<std::string>& provides_requires)
{
// Write the dependency generation rule.
- this->WriteTargetDependRule(ruleFileName, target, objects);
+ this->WriteTargetDependRule(ruleFileStream, target, objects);
std::vector<std::string> commands;
@@ -1666,7 +1620,7 @@ cmLocalUnixMakefileGenerator3
this->WriteTargetCleanRule(ruleFileName, target, cleanFiles, objects, external_objects);
// Write the driving make target.
- this->WriteTargetRequiresRule(ruleFileStream, target, provides_requires);
+ this->WriteTargetRequiresRule(ruleFileStream, target, objects);
}
//----------------------------------------------------------------------------
@@ -1772,7 +1726,7 @@ cmLocalUnixMakefileGenerator3
const std::vector<std::string>& provides_requires)
{
// Write the dependency generation rule.
- this->WriteTargetDependRule(ruleFileName, target, objects);
+ this->WriteTargetDependRule(ruleFileStream, target, objects);
// TODO: Merge the methods that call this method to avoid
// code duplication.
@@ -1991,7 +1945,7 @@ cmLocalUnixMakefileGenerator3
this->WriteTargetCleanRule(ruleFileName, target, cleanFiles, objects, external_objects);
// Write the driving make target.
- this->WriteTargetRequiresRule(ruleFileStream, target, provides_requires);
+ this->WriteTargetRequiresRule(ruleFileStream, target, objects);
}
//----------------------------------------------------------------------------
@@ -2048,25 +2002,10 @@ cmLocalUnixMakefileGenerator3
//----------------------------------------------------------------------------
void
cmLocalUnixMakefileGenerator3
-::WriteTargetDependRule(const char* ruleFileName,
+::WriteTargetDependRule(std::ostream& ruleFileStream,
const cmTarget& target,
const std::vector<std::string>& objects)
{
- std::string dir = cmSystemTools::GetFilenamePath(ruleFileName);
- std::string dependFileName = dir;
- dependFileName += "/depend.make";
-
- // Open the rule file. This should be copy-if-different because the
- // rules may depend on this file itself.
- std::string ruleFileNameFull = this->ConvertToFullPath(dependFileName);
- cmGeneratedFileStream ruleFileStream(ruleFileNameFull.c_str());
- ruleFileStream.SetCopyIfDifferent(true);
- if(!ruleFileStream)
- {
- return;
- }
- this->WriteDisclaimer(ruleFileStream);
-
std::vector<std::string> depends;
std::vector<std::string> no_commands;
@@ -2089,25 +2028,6 @@ cmLocalUnixMakefileGenerator3
// Write the rule.
this->WriteMakeRule(ruleFileStream, 0,
depTarget.c_str(), depends, no_commands);
-
- // Include the rule file for each object.
- if(!objects.empty())
- {
- ruleFileStream
- << "# Include depend rules for object files.\n";
- for(std::vector<std::string>::const_iterator obj = objects.begin();
- obj != objects.end(); ++obj)
- {
- objTarget = relPath;
- objTarget += *obj;
- objTarget += ".depend.make";
- ruleFileStream
- << m_IncludeDirective << " "
- << this->ConvertToOutputForExisting(objTarget.c_str()).c_str()
- << "\n";
- }
- ruleFileStream << "\n";
- }
}
//----------------------------------------------------------------------------
diff --git a/Source/cmLocalUnixMakefileGenerator3.h b/Source/cmLocalUnixMakefileGenerator3.h
index 0302e64..e6ec5fc 100644
--- a/Source/cmLocalUnixMakefileGenerator3.h
+++ b/Source/cmLocalUnixMakefileGenerator3.h
@@ -194,12 +194,13 @@ protected:
std::vector<std::string>& provides_requires);
// write the depend.make file for an object
- void WriteObjectDependFile(std::string& obj,
- const char *lang,
- const cmSourceFile& source,
- std::vector<std::string>& depends,
- std::string& depMarkFile);
-
+ void WriteObjectDependRules(std::ostream& ruleFileStream,
+ std::string& obj,
+ const char *lang,
+ const cmSourceFile& source,
+ std::vector<std::string>& depends,
+ std::string& depMarkFile);
+
// this is used only by WriteObjectDependFile
bool GenerateDependsMakeFile(const std::string& lang,
const char* objFile,
@@ -269,7 +270,7 @@ protected:
const std::vector<std::string>& external_objects,
std::string& variableName,
std::string& variableNameExternal);
- void WriteTargetDependRule(const char* ruleFileName,
+ void WriteTargetDependRule(std::ostream& ruleFileStream,
const cmTarget& target,
const std::vector<std::string>& objects);
void WriteTargetCleanRule(const char *ruleFileName,
@@ -279,7 +280,7 @@ protected:
const std::vector<std::string>& external_objects);
void WriteTargetRequiresRule(std::ostream& ruleFileStream,
const cmTarget& target,
- const std::vector<std::string>& provides_requires);
+ const std::vector<std::string>& objects);
std::string GetTargetDirectory(const cmTarget& target);
std::string GetSubdirTargetName(const char* pass, const char* subdir);