[cmake-commits] hoffman committed CMakeLists.txt 1.289.2.8 1.289.2.9 cmGlobalKdevelopGenerator.cxx 1.10.2.5 1.10.2.6 cmInstallTargetGenerator.cxx 1.12.2.4 1.12.2.5 cmLocalKdevelopGenerator.cxx 1.19 NONE cmLocalKdevelopGenerator.h 1.7 NONE cmLocalUnixMakefileGenerator3.cxx 1.128.2.9 1.128.2.10 cmLocalVisualStudio7Generator.cxx 1.125.2.9 1.125.2.10 cmLocalVisualStudio7Generator.h 1.22.2.4 1.22.2.5 cmLocalVisualStudioGenerator.cxx 1.2.2.3 1.2.2.4 cmMakefileExecutableTargetGenerator.cxx 1.12.2.8 1.12.2.9 cmMakefileLibraryTargetGenerator.cxx 1.14.2.6 1.14.2.7 cmMakefileTargetGenerator.cxx 1.16.2.9 1.16.2.10 cmSystemTools.cxx 1.327.2.3 1.327.2.4 cmSystemTools.h 1.133.2.1 1.133.2.2 cmTarget.cxx 1.96.2.8 1.96.2.9 cmTarget.h 1.62.2.3 1.62.2.4

cmake-commits at cmake.org cmake-commits at cmake.org
Mon Feb 5 13:21:34 EST 2007


Update of /cvsroot/CMake/CMake/Source
In directory public:/mounts/ram/cvs-serv30870/Source

Modified Files:
      Tag: CMake-2-4
	CMakeLists.txt cmGlobalKdevelopGenerator.cxx 
	cmInstallTargetGenerator.cxx cmLocalUnixMakefileGenerator3.cxx 
	cmLocalVisualStudio7Generator.cxx 
	cmLocalVisualStudio7Generator.h 
	cmLocalVisualStudioGenerator.cxx 
	cmMakefileExecutableTargetGenerator.cxx 
	cmMakefileLibraryTargetGenerator.cxx 
	cmMakefileTargetGenerator.cxx cmSystemTools.cxx 
	cmSystemTools.h cmTarget.cxx cmTarget.h 
Removed Files:
      Tag: CMake-2-4
	cmLocalKdevelopGenerator.cxx cmLocalKdevelopGenerator.h 
Log Message:
ENH: merge in changes from branch


Index: cmSystemTools.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmSystemTools.h,v
retrieving revision 1.133.2.1
retrieving revision 1.133.2.2
diff -u -d -r1.133.2.1 -r1.133.2.2
--- cmSystemTools.h	14 May 2006 19:22:43 -0000	1.133.2.1
+++ cmSystemTools.h	5 Feb 2007 18:21:32 -0000	1.133.2.2
@@ -212,6 +212,15 @@
    */
   static std::vector<cmStdString> ParseArguments(const char* command);
     
+  /** Parse arguments out of a windows command line string.  */
+  static void ParseWindowsCommandLine(const char* command,
+                                      std::vector<std::string>& args);
+
+  /** Compute an escaped version of the given argument for use in a
+      windows shell.  See kwsys/System.h.in for details.  */
+  static std::string EscapeWindowsShellArgument(const char* arg,
+                                                int shell_flags);
+
   static void EnableMessages() { s_DisableMessages = false; }
   static void DisableMessages() { s_DisableMessages = true; }
   static void DisableRunCommandOutput() {s_DisableRunCommandOutput = true; }

Index: cmLocalVisualStudioGenerator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmLocalVisualStudioGenerator.cxx,v
retrieving revision 1.2.2.3
retrieving revision 1.2.2.4
diff -u -d -r1.2.2.3 -r1.2.2.4
--- cmLocalVisualStudioGenerator.cxx	27 Oct 2006 20:01:48 -0000	1.2.2.3
+++ cmLocalVisualStudioGenerator.cxx	5 Feb 2007 18:21:32 -0000	1.2.2.4
@@ -152,7 +152,14 @@
 
     // Start with the command name.
     const cmCustomCommandLine& commandLine = *cl;
+    if(!workingDirectory)
+      {
     script += this->Convert(commandLine[0].c_str(),START_OUTPUT,SHELL);
+      }
+    else
+      {
+      script += this->Convert(commandLine[0].c_str(),NONE,SHELL);
+      }
 
     // Add the arguments.
     for(unsigned int j=1;j < commandLine.size(); ++j)

Index: cmLocalVisualStudio7Generator.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmLocalVisualStudio7Generator.h,v
retrieving revision 1.22.2.4
retrieving revision 1.22.2.5
diff -u -d -r1.22.2.4 -r1.22.2.5
--- cmLocalVisualStudio7Generator.h	27 Oct 2006 20:01:48 -0000	1.22.2.4
+++ cmLocalVisualStudio7Generator.h	5 Feb 2007 18:21:32 -0000	1.22.2.5
@@ -26,6 +26,8 @@
 class cmSourceGroup;
 struct cmVS7FlagTable;
 
+class cmLocalVisualStudio7GeneratorOptions;
+
 /** \class cmLocalVisualStudio7Generator
  * \brief Write Visual Studio .NET project files.
  *
@@ -65,10 +67,9 @@
   void SetPlatformName(const char* n) { this->PlatformName = n;}
   virtual void ConfigureFinalPass();
 private:
-  void FillFlagMapFromCommandFlags(std::map<cmStdString, 
-                                   cmStdString>& flagMap,
-                                   cmVS7FlagTable* flagTable,
-                                   std::string& flags);
+  typedef cmLocalVisualStudio7GeneratorOptions Options;
+  void ReadAndStoreExternalGUID(const char* name,
+                                const char* path);
   std::string GetBuildTypeLinkerFlags(std::string rootLinkerFlags,
                                       const char* configName);
   void FixGlobalTargets();
@@ -88,12 +89,10 @@
   std::string EscapeForXML(const char* s);
   std::string ConvertToXMLOutputPath(const char* path);
   std::string ConvertToXMLOutputPathSingle(const char* path);
-  void OutputDefineFlags(const char* flags,
-                         std::ostream& fout);
   void OutputTargetRules(std::ostream& fout, cmTarget &target, 
                          const char *libName);
   void OutputBuildTool(std::ostream& fout, const char* configName,
-                       const char* libname, cmTarget& t);
+                       cmTarget& t);
   void OutputLibraries(std::ostream& fout,
                        std::vector<cmStdString> const& libs);
   void OutputLibraryDirectories(std::ostream& fout,

--- cmLocalKdevelopGenerator.h DELETED ---

Index: cmLocalVisualStudio7Generator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmLocalVisualStudio7Generator.cxx,v
retrieving revision 1.125.2.9
retrieving revision 1.125.2.10
diff -u -d -r1.125.2.9 -r1.125.2.10
--- cmLocalVisualStudio7Generator.cxx	27 Oct 2006 20:01:48 -0000	1.125.2.9
+++ cmLocalVisualStudio7Generator.cxx	5 Feb 2007 18:21:32 -0000	1.125.2.10
@@ -16,14 +16,19 @@
 =========================================================================*/
 #include "cmGlobalVisualStudio7Generator.h"
 #include "cmLocalVisualStudio7Generator.h"
+#include "cmXMLParser.h"
+#include <cm_expat.h>
 #include "cmMakefile.h"
 #include "cmSystemTools.h"
 #include "cmSourceFile.h"
 #include "cmCacheManager.h"
 #include "cmake.h"
 
[...1152 lines suppressed...]
+    {
+    fout << indent << m->first << "=\"" << m->second << "\"\n";
+    }
+}
+
+//----------------------------------------------------------------------------
+void
+cmLocalVisualStudio7GeneratorOptions
+::OutputAdditionalOptions(std::ostream& fout,
+                          const char* prefix,
+                          const char* suffix)
+{
+  if(!this->FlagString.empty())
+    {
+    fout << prefix << "AdditionalOptions=\"";
+    fout <<
+      cmLocalVisualStudio7GeneratorEscapeForXML(this->FlagString.c_str());
+    fout << "\"" << suffix;
+    }
+}

Index: CMakeLists.txt
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/CMakeLists.txt,v
retrieving revision 1.289.2.8
retrieving revision 1.289.2.9
diff -u -d -r1.289.2.8 -r1.289.2.9
--- CMakeLists.txt	3 Jan 2007 15:19:03 -0000	1.289.2.8
+++ CMakeLists.txt	5 Feb 2007 18:21:32 -0000	1.289.2.9
@@ -167,8 +167,7 @@
 # Kdevelop only works on UNIX and not windows
 IF(UNIX)
   SET(SRCS ${SRCS}
-    cmGlobalKdevelopGenerator.cxx
-    cmLocalKdevelopGenerator.cxx)
+    cmGlobalKdevelopGenerator.cxx)
 ENDIF(UNIX)
 # XCode only works on apple
 IF(APPLE)
@@ -278,15 +277,17 @@
 #
 SET(CPACK_SRCS
   CPack/cmCPackGenerators.cxx
-  CPack/cmCPackSTGZGenerator.cxx
-  CPack/cmCPackTGZGenerator.cxx
+  CPack/cmCPackGenericGenerator.cxx
+  CPack/cmCPackLog.cxx
   CPack/cmCPackNSISGenerator.cxx
   CPack/cmCPackPackageMakerGenerator.cxx
-  CPack/cmCPackZIPGenerator.cxx
+  CPack/cmCPackSTGZGenerator.cxx
+  CPack/cmCPackTGZGenerator.cxx
   CPack/cmCPackTarBZip2Generator.cxx
   CPack/cmCPackTarCompressGenerator.cxx
-  CPack/cmCPackGenericGenerator.cxx
-  CPack/cmCPackLog.cxx
+  CPack/cmCPackZIPGenerator.cxx
+  CPack/cmCPackCygwinBinaryGenerator.cxx
+  CPack/cmCPackCygwinSourceGenerator.cxx
   )
 # Build CPackLib
 ADD_LIBRARY(CPackLib ${CPACK_SRCS})
@@ -308,6 +309,7 @@
   IF(NOT UNIX)
     ADD_EXECUTABLE(cmw9xcom cmw9xcom.cxx)
     TARGET_LINK_LIBRARIES(cmw9xcom CMakeLib)
+    INSTALL_TARGETS(/bin cmw9xcom)
   ENDIF(NOT UNIX)
 ENDIF(WIN32)
 

Index: cmSystemTools.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmSystemTools.cxx,v
retrieving revision 1.327.2.3
retrieving revision 1.327.2.4
diff -u -d -r1.327.2.3 -r1.327.2.4
--- cmSystemTools.cxx	27 Oct 2006 20:01:48 -0000	1.327.2.3
+++ cmSystemTools.cxx	5 Feb 2007 18:21:32 -0000	1.327.2.4
@@ -21,6 +21,7 @@
 
 #include <cmsys/RegularExpression.hxx>
 #include <cmsys/Directory.hxx>
+#include <cmsys/System.h>
 
 // support for realpath call
 #ifndef _WIN32
@@ -370,6 +371,95 @@
           v == "N" || cmSystemTools::IsNOTFOUND(v.c_str()) || v == "IGNORE");
 }
 
+//----------------------------------------------------------------------------
+void cmSystemTools::ParseWindowsCommandLine(const char* command,
+                                            std::vector<std::string>& args)
+{
+  // See the MSDN document "Parsing C Command-Line Arguments" at
+  // http://msdn2.microsoft.com/en-us/library/a1y7w461.aspx for rules
+  // of parsing the windows command line.
+
+  bool in_argument = false;
+  bool in_quotes = false;
+  int backslashes = 0;
+  std::string arg;
+  for(const char* c = command;*c; ++c)
+    {
+    if(*c == '\\')
+      {
+      ++backslashes;
+      in_argument = true;
+      }
+    else if(*c == '"')
+      {
+      int backslash_pairs  = backslashes >> 1;
+      int backslash_escaped = backslashes & 1;
+      arg.append(backslash_pairs, '\\');
+      backslashes = 0;
+      if(backslash_escaped)
+        {
+        /* An odd number of backslashes precede this quote.
+           It is escaped.  */
+        arg.append(1, '"');
+        }
+      else
+        {
+        /* An even number of backslashes precede this quote.
+           It is not escaped.  */
+        in_quotes = !in_quotes;
+        }
+      in_argument = true;
+      }
+    else
+      {
+      arg.append(backslashes, '\\');
+      backslashes = 0;
+      if(isspace(*c))
+        {
+        if(in_quotes)
+          {
+          arg.append(1, *c);
+          }
+        else if(in_argument)
+          {
+          args.push_back(arg);
+          arg = "";
+          in_argument = false;
+          }
+        }
+      else
+        {
+        in_argument = true;
+        arg.append(1, *c);
+        }
+      }
+    }
+  arg.append(backslashes, '\\');
+  if(in_argument)
+    {
+    args.push_back(arg);
+    }
+}
+
+std::string cmSystemTools::EscapeWindowsShellArgument(const char* arg,
+                                                      int shell_flags)
+{
+  char local_buffer[1024];
+  char* buffer = local_buffer;
+  int size = cmsysSystem_Shell_GetArgumentSizeForWindows(arg, shell_flags);
+  if(size > 1024)
+    {
+    buffer = new char[size];
+    }
+  cmsysSystem_Shell_GetArgumentForWindows(arg, buffer, shell_flags);
+  std::string result(buffer);
+  if(buffer != local_buffer)
+    {
+    delete [] buffer;
+    }
+  return result;
+}
+
 std::vector<cmStdString> cmSystemTools::ParseArguments(const char* command)
 {
   std::vector<cmStdString> args;

--- cmLocalKdevelopGenerator.cxx DELETED ---

Index: cmMakefileLibraryTargetGenerator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmMakefileLibraryTargetGenerator.cxx,v
retrieving revision 1.14.2.6
retrieving revision 1.14.2.7
diff -u -d -r1.14.2.6 -r1.14.2.7
--- cmMakefileLibraryTargetGenerator.cxx	3 Jan 2007 15:19:03 -0000	1.14.2.6
+++ cmMakefileLibraryTargetGenerator.cxx	5 Feb 2007 18:21:32 -0000	1.14.2.7
@@ -239,8 +239,9 @@
   std::string targetNameSO;
   std::string targetNameReal;
   std::string targetNameImport;
+  std::string targetNamePDB;
   this->Target->GetLibraryNames(
-    targetName, targetNameSO, targetNameReal, targetNameImport,
+    targetName, targetNameSO, targetNameReal, targetNameImport, targetNamePDB,
     this->LocalGenerator->ConfigurationName.c_str());
 
   // Construct the full path version of the names.
@@ -259,8 +260,7 @@
     outpath += "/";
     }
   std::string targetFullPath = outpath + targetName;
-  std::string targetFullPathPDB = 
-    outpath + this->Target->GetName() + std::string(".pdb");
+  std::string targetFullPathPDB = outpath + targetNamePDB;
   std::string targetFullPathSO = outpath + targetNameSO;
   std::string targetFullPathReal = outpath + targetNameReal;
   std::string targetFullPathImport = outpath + targetNameImport;
@@ -351,18 +351,21 @@
   std::string cleanSharedSOName;
   std::string cleanSharedRealName;
   std::string cleanImportName;
+    std::string cleanPDBName;
   this->Target->GetLibraryCleanNames(
     cleanStaticName,
     cleanSharedName,
     cleanSharedSOName,
     cleanSharedRealName,
     cleanImportName,
+      cleanPDBName,
     this->LocalGenerator->ConfigurationName.c_str());
   std::string cleanFullStaticName = outpath + cleanStaticName;
   std::string cleanFullSharedName = outpath + cleanSharedName;
   std::string cleanFullSharedSOName = outpath + cleanSharedSOName;
   std::string cleanFullSharedRealName = outpath + cleanSharedRealName;
   std::string cleanFullImportName = outpath + cleanImportName;
+    std::string cleanFullPDBName = outpath + cleanPDBName;
   libCleanFiles.push_back
       (this->Convert(cleanFullStaticName.c_str(),
                      cmLocalGenerator::START_OUTPUT,
@@ -398,6 +401,14 @@
                                           cmLocalGenerator::START_OUTPUT,
                                           cmLocalGenerator::UNCHANGED));
     }
+
+    // List the PDB for cleaning only when the whole target is
+    // cleaned.  We do not want to delete the .pdb file just before
+    // linking the target.
+    this->CleanFiles.push_back
+      (this->Convert(cleanFullPDBName.c_str(),
+                     cmLocalGenerator::START_OUTPUT,
+                     cmLocalGenerator::UNCHANGED));
   }
 
 #ifdef _WIN32

Index: cmTarget.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmTarget.h,v
retrieving revision 1.62.2.3
retrieving revision 1.62.2.4
diff -u -d -r1.62.2.3 -r1.62.2.4
--- cmTarget.h	27 Oct 2006 20:01:48 -0000	1.62.2.3
+++ cmTarget.h	5 Feb 2007 18:21:32 -0000	1.62.2.4
@@ -201,6 +201,9 @@
                    std::string& base, std::string& suffix,
                    const char* config=0, bool implib = false);
 
+  /** Get the name of the pdb file for the target.  */
+  std::string GetPDBName(const char* config=0);
+  
   /** Get the full path to the target according to the settings in its
       makefile and the configuration type.  */
   std::string GetFullPath(const char* config=0, bool implib = false);
@@ -210,7 +213,7 @@
       should be called only on a library target.  */
   void GetLibraryNames(std::string& name, std::string& soName,
                        std::string& realName, std::string& impName,
-                       const char* config);
+                       std::string& pdbName, const char* config);
 
   /** Get the names of the library used to remove existing copies of
       the library from the build tree either before linking or during
@@ -221,20 +224,21 @@
                             std::string& sharedSOName,
                             std::string& sharedRealName,
                             std::string& importName,
+                            std::string& pdbName,
                             const char* config);
 
   /** Get the names of the executable needed to generate a build rule
       that takes into account executable version numbers.  This should
       be called only on an executable target.  */
   void GetExecutableNames(std::string& name, std::string& realName,
-                          const char* config);
+                          std::string& pdbName, const char* config);
 
   /** Get the names of the executable used to remove existing copies
       of the executable from the build tree either before linking or
       during a clean step.  This should be called only on an
       executable target.  */
   void GetExecutableCleanNames(std::string& name, std::string& realName,
-                               const char* config);
+                               std::string& pdbName, const char* config);
 
   /**
    * Compute whether this target must be relinked before installing.
@@ -313,10 +317,12 @@
                                std::string& soName,
                                std::string& realName,
                                std::string& impName,
+                               std::string& pdbName,
                                TargetType type,
                                const char* config);
   void GetExecutableNamesInternal(std::string& name,
                                   std::string& realName,
+                                  std::string& pdbName,
                                   TargetType type,
                                   const char* config);
 

Index: cmMakefileExecutableTargetGenerator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmMakefileExecutableTargetGenerator.cxx,v
retrieving revision 1.12.2.8
retrieving revision 1.12.2.9
diff -u -d -r1.12.2.8 -r1.12.2.9
--- cmMakefileExecutableTargetGenerator.cxx	3 Jan 2007 15:19:03 -0000	1.12.2.8
+++ cmMakefileExecutableTargetGenerator.cxx	5 Feb 2007 18:21:32 -0000	1.12.2.9
@@ -110,8 +110,9 @@
   // Get the name of the executable to generate.
   std::string targetName;
   std::string targetNameReal;
+  std::string targetNamePDB;
   this->Target->GetExecutableNames
-    (targetName, targetNameReal,
+    (targetName, targetNameReal, targetNamePDB,
                                    this->LocalGenerator->ConfigurationName.c_str());
 
   // Construct the full path version of the names.
@@ -187,8 +188,7 @@
     }
   std::string targetFullPath = outpath + targetName;
   std::string targetFullPathReal = outpath + targetNameReal;
-  std::string targetFullPathPDB = outpath + this->Target->GetName();
-  targetFullPathPDB += ".pdb";
+  std::string targetFullPathPDB = outpath + targetNamePDB;
   std::string targetOutPathPDB = 
     this->Convert(targetFullPathPDB.c_str(),
                   cmLocalGenerator::FULL,
@@ -269,12 +269,14 @@
   {
   std::string cleanName;
   std::string cleanRealName;
+  std::string cleanPDBName;
   this->Target->GetExecutableCleanNames
-    (cleanName, cleanRealName,
+    (cleanName, cleanRealName, cleanPDBName,
                                         this->LocalGenerator->ConfigurationName.c_str());
 
   std::string cleanFullName = outpath + cleanName;
   std::string cleanFullRealName = outpath + cleanRealName;
+  std::string cleanFullPDBName = outpath + cleanPDBName;
   exeCleanFiles.push_back(this->Convert(cleanFullName.c_str(),
                                         cmLocalGenerator::START_OUTPUT,
                                         cmLocalGenerator::UNCHANGED));
@@ -291,6 +293,14 @@
                                           cmLocalGenerator::START_OUTPUT,
                                           cmLocalGenerator::UNCHANGED));
     }
+
+  // List the PDB for cleaning only when the whole target is
+  // cleaned.  We do not want to delete the .pdb file just before
+  // linking the target.
+  this->CleanFiles.push_back
+    (this->Convert(cleanFullPDBName.c_str(),
+                                        cmLocalGenerator::START_OUTPUT,
+                                        cmLocalGenerator::UNCHANGED));
   }
 
   // Add a command to remove any existing files for this executable.

Index: cmLocalUnixMakefileGenerator3.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmLocalUnixMakefileGenerator3.cxx,v
retrieving revision 1.128.2.9
retrieving revision 1.128.2.10
diff -u -d -r1.128.2.9 -r1.128.2.10
--- cmLocalUnixMakefileGenerator3.cxx	27 Oct 2006 20:01:48 -0000	1.128.2.9
+++ cmLocalUnixMakefileGenerator3.cxx	5 Feb 2007 18:21:32 -0000	1.128.2.10
@@ -1690,8 +1690,9 @@
     objectName = cmSystemTools::GetFilenameName(objectName.c_str());
     std::string targetName;
     std::string targetNameReal;
+    std::string targetNamePDB;
     target.GetExecutableNames(targetName, targetNameReal,
-                                   this->ConfigurationName.c_str());
+                              targetNamePDB, this->ConfigurationName.c_str());
     if ( target.GetPropertyAsBool("MACOSX_BUNDLE") )
       {
       // Construct the full path version of the names.

Index: cmMakefileTargetGenerator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmMakefileTargetGenerator.cxx,v
retrieving revision 1.16.2.9
retrieving revision 1.16.2.10
diff -u -d -r1.16.2.9 -r1.16.2.10
--- cmMakefileTargetGenerator.cxx	3 Jan 2007 15:19:03 -0000	1.16.2.9
+++ cmMakefileTargetGenerator.cxx	5 Feb 2007 18:21:32 -0000	1.16.2.10
@@ -279,6 +279,15 @@
 
     *this->FlagFileStream << lang << "_FLAGS = " << flags << "\n\n";
     }
+
+  // Add target-specific flags.
+  if(this->Target->GetProperty("COMPILE_FLAGS"))
+    {
+    std::string flags;    
+    this->LocalGenerator->AppendFlags
+      (flags, this->Target->GetProperty("COMPILE_FLAGS"));
+    *this->FlagFileStream << "# TARGET_FLAGS = " << flags << "\n\n";
+    }
 }
 
 //----------------------------------------------------------------------------
@@ -457,15 +466,29 @@
     this->Makefile->GetRequiredDefinition(compileRuleVar.c_str());
   cmSystemTools::ExpandListArgument(compileRule, commands);
 
-  std::string outpath = this->Makefile->GetStartOutputDirectory();
-  outpath += "/";
-  outpath += this->Target->GetName();
-  outpath += ".pdb";
-  outpath = this->Convert(outpath.c_str(), cmLocalGenerator::FULL,
+  std::string targetOutPathPDB;
+  {
+  std::string targetFullPathPDB;
+  const char* configName = this->LocalGenerator->ConfigurationName.c_str();
+  if(this->Target->GetType() == cmTarget::EXECUTABLE)
+    {
+    targetFullPathPDB = this->LocalGenerator->ExecutableOutputPath;
+    targetFullPathPDB += this->Target->GetPDBName(configName);
+    }
+  else if(this->Target->GetType() == cmTarget::STATIC_LIBRARY ||
+          this->Target->GetType() == cmTarget::SHARED_LIBRARY ||
+          this->Target->GetType() == cmTarget::MODULE_LIBRARY)
+    {
+    targetFullPathPDB = this->LocalGenerator->LibraryOutputPath;
+    targetFullPathPDB += this->Target->GetPDBName(configName);
+    }
+  targetOutPathPDB =
+    this->Convert(targetFullPathPDB.c_str(),cmLocalGenerator::FULL,
                           cmLocalGenerator::MAKEFILE);
+  }
   cmLocalGenerator::RuleVariables vars;
   vars.Language = lang;
-  vars.TargetPDB = outpath.c_str();
+  vars.TargetPDB = targetOutPathPDB.c_str();
   vars.Source = sourceFile.c_str();
   vars.Object = relativeObj.c_str();
   std::string objdir = this->LocalGenerator->GetHomeRelativeOutputPath();

Index: cmInstallTargetGenerator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmInstallTargetGenerator.cxx,v
retrieving revision 1.12.2.4
retrieving revision 1.12.2.5
diff -u -d -r1.12.2.4 -r1.12.2.5
--- cmInstallTargetGenerator.cxx	13 Oct 2006 14:52:02 -0000	1.12.2.4
+++ cmInstallTargetGenerator.cxx	5 Feb 2007 18:21:32 -0000	1.12.2.5
@@ -208,8 +208,9 @@
     std::string targetNameSO;
     std::string targetNameReal;
     std::string targetNameImport;
+    std::string targetNamePDB;
     target->GetLibraryNames(targetName, targetNameSO, targetNameReal,
-                            targetNameImport, i->c_str());
+                            targetNameImport, targetNamePDB, i->c_str());
     if(this->ImportLibrary)
       {
       // Use the import library name.
@@ -245,8 +246,10 @@
     std::string targetNameSO;
     std::string targetNameReal;
     std::string targetNameImport;
+    std::string targetNamePDB;
     target->GetLibraryNames(targetName, targetNameSO, targetNameReal,
-                            targetNameImport, this->ConfigurationName);
+                            targetNameImport, targetNamePDB,
+                            this->ConfigurationName);
     if(this->ImportLibrary)
       {
       // Use the import library name.

Index: cmGlobalKdevelopGenerator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmGlobalKdevelopGenerator.cxx,v
retrieving revision 1.10.2.5
retrieving revision 1.10.2.6
diff -u -d -r1.10.2.5 -r1.10.2.6
--- cmGlobalKdevelopGenerator.cxx	13 Oct 2006 14:52:02 -0000	1.10.2.5
+++ cmGlobalKdevelopGenerator.cxx	5 Feb 2007 18:21:32 -0000	1.10.2.6
@@ -17,7 +17,7 @@
 =========================================================================*/
 
 #include "cmGlobalKdevelopGenerator.h"
-#include "cmLocalKdevelopGenerator.h"
+#include "cmLocalUnixMakefileGenerator3.h"
 #include "cmMakefile.h"
 #include "cmake.h"
 #include "cmSourceFile.h"
@@ -36,7 +36,8 @@
 ///! Create a local generator appropriate to this Global Generator
 cmLocalGenerator *cmGlobalKdevelopGenerator::CreateLocalGenerator()
 {
-  cmLocalGenerator *lg = new cmLocalKdevelopGenerator;
+  cmLocalUnixMakefileGenerator3 *lg = new cmLocalUnixMakefileGenerator3;
+  lg->SetForceVerboseMakefiles(true);
   lg->SetGlobalGenerator(this);
   return lg;
 }
@@ -185,6 +186,7 @@
             hname += *ext;
             if(cmSystemTools::FileExists(hname.c_str()))
               {
+              cmSystemTools::ReplaceString(hname, projectDir.c_str(), "");
               files.insert(hname);
               break;
               }

Index: cmTarget.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmTarget.cxx,v
retrieving revision 1.96.2.8
retrieving revision 1.96.2.9
diff -u -d -r1.96.2.8 -r1.96.2.9
--- cmTarget.cxx	3 Jan 2007 15:19:03 -0000	1.96.2.8
+++ cmTarget.cxx	5 Feb 2007 18:21:32 -0000	1.96.2.9
@@ -1172,6 +1172,17 @@
 }
 
 //----------------------------------------------------------------------------
+std::string cmTarget::GetPDBName(const char* config)
+{
+  std::string prefix;
+  std::string base;
+  std::string suffix;
+  this->GetFullNameInternal(this->GetType(), config, false,
+                            prefix, base, suffix);
+  return prefix+base+".pdb";
+}
+
+//----------------------------------------------------------------------------
 std::string cmTarget::GetFullName(const char* config, bool implib)
 {
   return this->GetFullNameInternal(this->GetType(), config, implib);
@@ -1337,10 +1348,11 @@
                                std::string& soName,
                                std::string& realName,
                                std::string& impName,
+                               std::string& pdbName,
                                const char* config)
 {
   // Get the names based on the real type of the library.
-  this->GetLibraryNamesInternal(name, soName, realName, impName,
+  this->GetLibraryNamesInternal(name, soName, realName, impName, pdbName,
                                 this->GetType(), config);
 }
 
@@ -1349,6 +1361,7 @@
                                     std::string& sharedSOName,
                                     std::string& sharedRealName,
                                     std::string& importName,
+                                    std::string& pdbName,
                                     const char* config)
 {
   // Get the name as if this were a static library.
@@ -1356,7 +1369,7 @@
   std::string realName;
   std::string impName;
   this->GetLibraryNamesInternal(staticName, soName, realName, impName,
-                                cmTarget::STATIC_LIBRARY, config);
+                                pdbName, cmTarget::STATIC_LIBRARY, config);
 
   // Get the names as if this were a shared library.
   if(this->GetType() == cmTarget::STATIC_LIBRARY)
@@ -1367,14 +1380,15 @@
     // type will never be MODULE.  Either way the only names that
     // might have to be cleaned are the shared library names.
     this->GetLibraryNamesInternal(sharedName, sharedSOName, sharedRealName,
-                                  importName, cmTarget::SHARED_LIBRARY,
-                                  config);
+                                  importName, pdbName,
+                                  cmTarget::SHARED_LIBRARY, config);
     }
   else
     {
     // Use the name of the real type of the library (shared or module).
     this->GetLibraryNamesInternal(sharedName, sharedSOName, sharedRealName,
-                                  importName, this->GetType(), config);
+                                  importName, pdbName, this->GetType(),
+                                  config);
     }
 }
 
@@ -1382,6 +1396,7 @@
                                        std::string& soName,
                                        std::string& realName,
                                        std::string& impName,
+                                       std::string& pdbName,
                                        TargetType type,
                                        const char* config)
 {
@@ -1468,27 +1483,34 @@
     {
     impName = "";
     }
+
+  // The program database file name.
+  pdbName = prefix+base+".pdb";
 }
 
 void cmTarget::GetExecutableNames(std::string& name,
                                   std::string& realName,
+                                  std::string& pdbName,
                                   const char* config)
 {
   // Get the names based on the real type of the executable.
-  this->GetExecutableNamesInternal(name, realName, this->GetType(), config);
+  this->GetExecutableNamesInternal(name, realName, pdbName,
+                                   this->GetType(), config);
 }
 
 void cmTarget::GetExecutableCleanNames(std::string& name,
                                        std::string& realName,
+                                       std::string& pdbName,
                                        const char* config)
 {
   // Get the name and versioned name of this executable.
-  this->GetExecutableNamesInternal(name, realName, cmTarget::EXECUTABLE,
-                                   config);
+  this->GetExecutableNamesInternal(name, realName, pdbName,
+                                   cmTarget::EXECUTABLE, config);
 }
 
 void cmTarget::GetExecutableNamesInternal(std::string& name,
                                           std::string& realName,
+                                          std::string& pdbName,
                                           TargetType type,
                                           const char* config)
 {
@@ -1528,6 +1550,9 @@
 #if defined(__CYGWIN__)
   realName += suffix;
 #endif
+
+  // The program database file name.
+  pdbName = prefix+base+".pdb";
 }
 
 //----------------------------------------------------------------------------



More information about the Cmake-commits mailing list