From 07454a39f1fc57b147d1311b952702f3ff2b595b Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 15 Oct 2008 10:21:14 -0400 Subject: [PATCH] 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. --- .../cmMakefileExecutableTargetGenerator.cxx | 28 +------------- Source/cmMakefileLibraryTargetGenerator.cxx | 32 ++-------------- Source/cmMakefileTargetGenerator.cxx | 38 +++++++++++++++++++ Source/cmMakefileTargetGenerator.h | 5 +++ 4 files changed, 48 insertions(+), 55 deletions(-) diff --git a/Source/cmMakefileExecutableTargetGenerator.cxx b/Source/cmMakefileExecutableTargetGenerator.cxx index c741284703..848ae20dc2 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 9cde469ce7..a67b44a1ad 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 0374373a01..b25ae60645 100644 --- a/Source/cmMakefileTargetGenerator.cxx +++ b/Source/cmMakefileTargetGenerator.cxx @@ -1622,6 +1622,44 @@ cmMakefileTargetGenerator return responseFileName; } +//---------------------------------------------------------------------------- +void +cmMakefileTargetGenerator +::CreateObjectLists(bool useLinkScript, bool useArchiveRules, + bool useResponseFile, std::string& buildObjs, + std::vector& 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() { diff --git a/Source/cmMakefileTargetGenerator.h b/Source/cmMakefileTargetGenerator.h index 0b55c6eb87..c7cbab9aee 100644 --- a/Source/cmMakefileTargetGenerator.h +++ b/Source/cmMakefileTargetGenerator.h @@ -144,6 +144,11 @@ protected: std::string const& options, std::vector& makefile_depends); + /** Create lists of object files for linking and cleaning. */ + void CreateObjectLists(bool useLinkScript, bool useArchiveRules, + bool useResponseFile, std::string& buildObjs, + std::vector& makefile_depends); + virtual void CloseFileStreams(); void RemoveForbiddenFlags(const char* flagVar, const char* linkLang, std::string& linkFlags);