[Cmake-commits] CMake branch, next, updated. v3.0.0-rc1-530-g5bd73aa

Brad King brad.king at kitware.com
Thu Mar 6 09:44:26 EST 2014


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  5bd73aaf9cb41e60cd2298e84f9b2f071a890208 (commit)
       via  489b1c23b9a880da0012427b60cce7b6f5ddaa27 (commit)
       via  745caae6dddc9ab5c38a669adf3906f6e3484c80 (commit)
      from  e2d4b755f3119e0e5459532b10809a84a9813f6e (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5bd73aaf9cb41e60cd2298e84f9b2f071a890208
commit 5bd73aaf9cb41e60cd2298e84f9b2f071a890208
Merge: e2d4b75 489b1c2
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Mar 6 09:44:25 2014 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Thu Mar 6 09:44:25 2014 -0500

    Merge topic 'link-libraries-response-files' into next
    
    489b1c23 Windows: Use response files to specify link libraries for GNU tools
    745caae6 Makefile: Rename linker response file boolean to be more specific


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=489b1c23b9a880da0012427b60cce7b6f5ddaa27
commit 489b1c23b9a880da0012427b60cce7b6f5ddaa27
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Mar 4 13:25:42 2014 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Mar 5 13:07:41 2014 -0500

    Windows: Use response files to specify link libraries for GNU tools
    
    Work around the command-line-length limit by using an @linklibs.rsp
    response file to pass the flags for link libraries.  This allows
    very long lists of libraries to be used in addition to the existing
    support for passing object files via response file.
    
    Suggested-by: Peter Keuschnigg <peter.keuschnigg at pmu.ac.at>

diff --git a/Help/release/dev/link-libraries-response-files.rst b/Help/release/dev/link-libraries-response-files.rst
new file mode 100644
index 0000000..cecf7f6
--- /dev/null
+++ b/Help/release/dev/link-libraries-response-files.rst
@@ -0,0 +1,5 @@
+link-libraries-response-files
+-----------------------------
+
+* The Makefile generators learned to use response files with GNU tools
+  on Windows to pass library directories and names to the linker.
diff --git a/Modules/Platform/Windows-GNU.cmake b/Modules/Platform/Windows-GNU.cmake
index 2bb7a20..5c5b360 100644
--- a/Modules/Platform/Windows-GNU.cmake
+++ b/Modules/Platform/Windows-GNU.cmake
@@ -87,6 +87,7 @@ macro(__windows_compiler_gnu lang)
   set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "")
 
   set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_OBJECTS ${__WINDOWS_GNU_LD_RESPONSE})
+  set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_LIBRARIES ${__WINDOWS_GNU_LD_RESPONSE})
   set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_INCLUDES 1)
 
   # We prefer "@" for response files but it is not supported by gcc 3.
@@ -103,7 +104,9 @@ macro(__windows_compiler_gnu lang)
     endif()
     # The GNU 3.x compilers do not support response files (only linkers).
     set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_INCLUDES 0)
-  elseif(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_OBJECTS)
+    # Link libraries are generated only for the front-end.
+    set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_LIBRARIES 0)
+  else()
     # Use "@" to pass the response file to the front-end.
     set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "@")
   endif()
diff --git a/Source/cmMakefileExecutableTargetGenerator.cxx b/Source/cmMakefileExecutableTargetGenerator.cxx
index 6754525..1802054 100644
--- a/Source/cmMakefileExecutableTargetGenerator.cxx
+++ b/Source/cmMakefileExecutableTargetGenerator.cxx
@@ -318,6 +318,18 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
     }
   }
 
+  // Select whether to use a response file for libraries.
+  bool useResponseFileForLibs = false;
+  {
+  std::string responseVar = "CMAKE_";
+  responseVar += linkLanguage;
+  responseVar += "_USE_RESPONSE_FILE_FOR_LIBRARIES";
+  if(this->Makefile->IsOn(responseVar.c_str()))
+    {
+    useResponseFileForLibs = true;
+    }
+  }
+
   // Expand the rule variables.
   {
   // Set path conversion for link script shells.
@@ -325,7 +337,7 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
 
   // Collect up flags to link in needed libraries.
   std::string linkLibs;
-  this->CreateLinkLibs(linkLibs, relink, depends);
+  this->CreateLinkLibs(linkLibs, relink, useResponseFileForLibs, depends);
 
   // Construct object file lists that may be needed to expand the
   // rule.
diff --git a/Source/cmMakefileLibraryTargetGenerator.cxx b/Source/cmMakefileLibraryTargetGenerator.cxx
index c639f3e..39e00b2 100644
--- a/Source/cmMakefileLibraryTargetGenerator.cxx
+++ b/Source/cmMakefileLibraryTargetGenerator.cxx
@@ -485,6 +485,18 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
     }
   }
 
+  // Select whether to use a response file for libraries.
+  bool useResponseFileForLibs = false;
+  {
+  std::string responseVar = "CMAKE_";
+  responseVar += linkLanguage;
+  responseVar += "_USE_RESPONSE_FILE_FOR_LIBRARIES";
+  if(this->Makefile->IsOn(responseVar.c_str()))
+    {
+    useResponseFileForLibs = true;
+    }
+  }
+
   // For static libraries there might be archiving rules.
   bool haveStaticLibraryRule = false;
   std::vector<std::string> archiveCreateCommands;
@@ -546,7 +558,7 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
   std::string linkLibs;
   if(this->Target->GetType() != cmTarget::STATIC_LIBRARY)
     {
-    this->CreateLinkLibs(linkLibs, relink, depends);
+    this->CreateLinkLibs(linkLibs, relink, useResponseFileForLibs, depends);
     }
 
   // Construct object file lists that may be needed to expand the
diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx
index 0f2b6e3..facbcc6 100644
--- a/Source/cmMakefileTargetGenerator.cxx
+++ b/Source/cmMakefileTargetGenerator.cxx
@@ -1834,14 +1834,40 @@ cmMakefileTargetGenerator
 void
 cmMakefileTargetGenerator
 ::CreateLinkLibs(std::string& linkLibs, bool relink,
+                 bool useResponseFile,
                  std::vector<std::string>& makefile_depends)
 {
   std::string frameworkPath;
   std::string linkPath;
   this->LocalGenerator
     ->OutputLinkLibraries(linkLibs, frameworkPath, linkPath,
-                          *this->GeneratorTarget, relink, false);
+                          *this->GeneratorTarget, relink,
+                          useResponseFile);
   linkLibs = frameworkPath + linkPath + linkLibs;
+
+  if(useResponseFile)
+    {
+    // Lookup the response file reference flag.
+    std::string responseFlagVar = "CMAKE_";
+    responseFlagVar += this->Target->GetLinkerLanguage(this->ConfigName);
+    responseFlagVar += "_RESPONSE_FILE_LINK_FLAG";
+    const char* responseFlag =
+      this->Makefile->GetDefinition(responseFlagVar.c_str());
+    if(!responseFlag)
+      {
+      responseFlag = "@";
+      }
+
+    // Create this response file.
+    std::string link_rsp =
+      this->CreateResponseFile("linklibs.rsp", linkLibs, makefile_depends);
+
+    // Reference the response file.
+    linkLibs = responseFlag;
+    linkLibs += this->Convert(link_rsp.c_str(),
+                              cmLocalGenerator::NONE,
+                              cmLocalGenerator::SHELL);
+    }
 }
 
 //----------------------------------------------------------------------------
diff --git a/Source/cmMakefileTargetGenerator.h b/Source/cmMakefileTargetGenerator.h
index d47708d..72dc6bc 100644
--- a/Source/cmMakefileTargetGenerator.h
+++ b/Source/cmMakefileTargetGenerator.h
@@ -165,6 +165,7 @@ protected:
 
   /** Create list of flags for link libraries. */
   void CreateLinkLibs(std::string& linkLibs, bool relink,
+                      bool useResponseFile,
                       std::vector<std::string>& makefile_depends);
 
   /** Create lists of object files for linking and cleaning.  */

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=745caae6dddc9ab5c38a669adf3906f6e3484c80
commit 745caae6dddc9ab5c38a669adf3906f6e3484c80
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Mar 4 13:21:15 2014 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Mar 5 08:54:14 2014 -0500

    Makefile: Rename linker response file boolean to be more specific
    
    Rename local variable useResponseFile to useResponseFileForObjects
    when it represents CMAKE_<LANG>_USE_RESPONSE_FILE_FOR_OBJECTS.

diff --git a/Source/cmMakefileExecutableTargetGenerator.cxx b/Source/cmMakefileExecutableTargetGenerator.cxx
index 696ce94..6754525 100644
--- a/Source/cmMakefileExecutableTargetGenerator.cxx
+++ b/Source/cmMakefileExecutableTargetGenerator.cxx
@@ -307,14 +307,14 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
     }
 
   // Select whether to use a response file for objects.
-  bool useResponseFile = false;
+  bool useResponseFileForObjects = false;
   {
   std::string responseVar = "CMAKE_";
   responseVar += linkLanguage;
   responseVar += "_USE_RESPONSE_FILE_FOR_OBJECTS";
   if(this->Makefile->IsOn(responseVar.c_str()))
     {
-    useResponseFile = true;
+    useResponseFileForObjects = true;
     }
   }
 
@@ -330,8 +330,8 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
   // Construct object file lists that may be needed to expand the
   // rule.
   std::string buildObjs;
-  this->CreateObjectLists(useLinkScript, false, useResponseFile,
-                          buildObjs, depends);
+  this->CreateObjectLists(useLinkScript, false,
+                          useResponseFileForObjects, buildObjs, depends);
 
   cmLocalGenerator::RuleVariables vars;
   vars.RuleLauncher = "RULE_LAUNCH_LINK";
diff --git a/Source/cmMakefileLibraryTargetGenerator.cxx b/Source/cmMakefileLibraryTargetGenerator.cxx
index 2832515..c639f3e 100644
--- a/Source/cmMakefileLibraryTargetGenerator.cxx
+++ b/Source/cmMakefileLibraryTargetGenerator.cxx
@@ -474,14 +474,14 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
   bool useLinkScript = this->GlobalGenerator->GetUseLinkScript();
 
   // Select whether to use a response file for objects.
-  bool useResponseFile = false;
+  bool useResponseFileForObjects = false;
   {
   std::string responseVar = "CMAKE_";
   responseVar += linkLanguage;
   responseVar += "_USE_RESPONSE_FILE_FOR_OBJECTS";
   if(this->Makefile->IsOn(responseVar.c_str()))
     {
-    useResponseFile = true;
+    useResponseFileForObjects = true;
     }
   }
 
@@ -528,7 +528,7 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
     useLinkScript = true;
 
     // Archiving rules never use a response file.
-    useResponseFile = false;
+    useResponseFileForObjects = false;
 
     // Limit the length of individual object lists to less than the
     // 32K command line length limit on Windows.  We could make this a
@@ -552,8 +552,8 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
   // Construct object file lists that may be needed to expand the
   // rule.
   std::string buildObjs;
-  this->CreateObjectLists(useLinkScript, useArchiveRules, useResponseFile,
-                          buildObjs, depends);
+  this->CreateObjectLists(useLinkScript, useArchiveRules,
+                          useResponseFileForObjects, buildObjs, depends);
 
   cmLocalGenerator::RuleVariables vars;
   vars.TargetPDB = targetOutPathPDB.c_str();

-----------------------------------------------------------------------

Summary of changes:


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list