summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2008-10-15 14:21:14 (GMT)
committerBrad King <brad.king@kitware.com>2008-10-15 14:21:14 (GMT)
commit07454a39f1fc57b147d1311b952702f3ff2b595b (patch)
tree011334564c55097ba6d50f21e01c7316eac704aa
parentcd1528279c8c3662af0d1641e0d95e05821b6d10 (diff)
downloadCMake-07454a39f1fc57b147d1311b952702f3ff2b595b.zip
CMake-07454a39f1fc57b147d1311b952702f3ff2b595b.tar.gz
CMake-07454a39f1fc57b147d1311b952702f3ff2b595b.tar.bz2
ENH: Factor out listing of objects on command line
Previously generation of object file lists for linker and cleaning command lines was duplicated for library and executable target generators. This combines the implementations.
-rw-r--r--Source/cmMakefileExecutableTargetGenerator.cxx28
-rw-r--r--Source/cmMakefileLibraryTargetGenerator.cxx32
-rw-r--r--Source/cmMakefileTargetGenerator.cxx38
-rw-r--r--Source/cmMakefileTargetGenerator.h5
4 files changed, 48 insertions, 55 deletions
diff --git a/Source/cmMakefileExecutableTargetGenerator.cxx b/Source/cmMakefileExecutableTargetGenerator.cxx
index c741284..848ae20 100644
--- a/Source/cmMakefileExecutableTargetGenerator.cxx
+++ b/Source/cmMakefileExecutableTargetGenerator.cxx
@@ -353,33 +353,9 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
// Construct object file lists that may be needed to expand the
// rule.
- std::string variableName;
- std::string variableNameExternal;
- this->WriteObjectsVariable(variableName, variableNameExternal);
std::string buildObjs;
- if(useResponseFile)
- {
- std::string objects;
- this->WriteObjectsString(objects);
- std::string objects_rsp =
- this->CreateResponseFile("objects.rsp", objects, depends);
- buildObjs = "@";
- buildObjs += this->Convert(objects_rsp.c_str(),
- cmLocalGenerator::NONE,
- cmLocalGenerator::SHELL);
- }
- else if(useLinkScript)
- {
- this->WriteObjectsString(buildObjs);
- }
- else
- {
- buildObjs = "$(";
- buildObjs += variableName;
- buildObjs += ") $(";
- buildObjs += variableNameExternal;
- buildObjs += ")";
- }
+ this->CreateObjectLists(useLinkScript, false, useResponseFile,
+ buildObjs, depends);
cmLocalGenerator::RuleVariables vars;
vars.Language = linkLanguage;
diff --git a/Source/cmMakefileLibraryTargetGenerator.cxx b/Source/cmMakefileLibraryTargetGenerator.cxx
index 9cde469..a67b44a 100644
--- a/Source/cmMakefileLibraryTargetGenerator.cxx
+++ b/Source/cmMakefileLibraryTargetGenerator.cxx
@@ -687,36 +687,10 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
// Construct object file lists that may be needed to expand the
// rule.
- std::string variableName;
- std::string variableNameExternal;
- this->WriteObjectsVariable(variableName, variableNameExternal);
std::string buildObjs;
- if(useResponseFile)
- {
- std::string objects;
- this->WriteObjectsString(objects);
- std::string objects_rsp =
- this->CreateResponseFile("objects.rsp", objects, depends);
- buildObjs = "@";
- buildObjs += this->Convert(objects_rsp.c_str(),
- cmLocalGenerator::NONE,
- cmLocalGenerator::SHELL);
- }
- else if(useLinkScript)
- {
- if(!useArchiveRules)
- {
- this->WriteObjectsString(buildObjs);
- }
- }
- else
- {
- buildObjs = "$(";
- buildObjs += variableName;
- buildObjs += ") $(";
- buildObjs += variableNameExternal;
- buildObjs += ")";
- }
+ this->CreateObjectLists(useLinkScript, useArchiveRules, useResponseFile,
+ buildObjs, depends);
+
cmLocalGenerator::RuleVariables vars;
vars.TargetPDB = targetOutPathPDB.c_str();
diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx
index 0374373..b25ae60 100644
--- a/Source/cmMakefileTargetGenerator.cxx
+++ b/Source/cmMakefileTargetGenerator.cxx
@@ -1623,6 +1623,44 @@ cmMakefileTargetGenerator
}
//----------------------------------------------------------------------------
+void
+cmMakefileTargetGenerator
+::CreateObjectLists(bool useLinkScript, bool useArchiveRules,
+ bool useResponseFile, std::string& buildObjs,
+ std::vector<std::string>& makefile_depends)
+{
+ std::string variableName;
+ std::string variableNameExternal;
+ this->WriteObjectsVariable(variableName, variableNameExternal);
+ if(useResponseFile)
+ {
+ std::string objects;
+ this->WriteObjectsString(objects);
+ std::string objects_rsp =
+ this->CreateResponseFile("objects.rsp", objects, makefile_depends);
+ buildObjs = "@";
+ buildObjs += this->Convert(objects_rsp.c_str(),
+ cmLocalGenerator::NONE,
+ cmLocalGenerator::SHELL);
+ }
+ else if(useLinkScript)
+ {
+ if(!useArchiveRules)
+ {
+ this->WriteObjectsString(buildObjs);
+ }
+ }
+ else
+ {
+ buildObjs = "$(";
+ buildObjs += variableName;
+ buildObjs += ") $(";
+ buildObjs += variableNameExternal;
+ buildObjs += ")";
+ }
+}
+
+//----------------------------------------------------------------------------
const char* cmMakefileTargetGenerator::GetFortranModuleDirectory()
{
// Compute the module directory.
diff --git a/Source/cmMakefileTargetGenerator.h b/Source/cmMakefileTargetGenerator.h
index 0b55c6e..c7cbab9 100644
--- a/Source/cmMakefileTargetGenerator.h
+++ b/Source/cmMakefileTargetGenerator.h
@@ -144,6 +144,11 @@ protected:
std::string const& options,
std::vector<std::string>& makefile_depends);
+ /** Create lists of object files for linking and cleaning. */
+ void CreateObjectLists(bool useLinkScript, bool useArchiveRules,
+ bool useResponseFile, std::string& buildObjs,
+ std::vector<std::string>& makefile_depends);
+
virtual void CloseFileStreams();
void RemoveForbiddenFlags(const char* flagVar, const char* linkLang,
std::string& linkFlags);