[Cmake-commits] [cmake-commits] hoffman committed cmCMakeMinimumRequired.cxx 1.17.2.1 1.17.2.2 cmCMakeMinimumRequired.h 1.12.2.1 1.12.2.2 cmComputeLinkDepends.cxx 1.12.2.6 1.12.2.7 cmComputeLinkDepends.h 1.5.2.6 1.5.2.7 cmDocumentVariables.cxx 1.18.2.3 1.18.2.4 cmDocumentationFormatterDocbook.cxx 1.1.2.3 1.1.2.4 cmExportFileGenerator.cxx 1.11.2.3 1.11.2.4 cmExportInstallFileGenerator.cxx 1.8 1.8.2.1 cmExportInstallFileGenerator.h 1.2 1.2.2.1 cmExtraCodeBlocksGenerator.cxx 1.18.2.1 1.18.2.2 cmExtraEclipseCDT4Generator.cxx 1.13.2.2 1.13.2.3 cmExtraEclipseCDT4Generator.h 1.4 1.4.2.1 cmFileCommand.cxx 1.103.2.7 1.103.2.8 cmFileCommand.h 1.35.2.5 1.35.2.6 cmFindPackageCommand.cxx 1.36.2.6 1.36.2.7 cmFindPackageCommand.h 1.19.2.4 1.19.2.5 cmGetTargetPropertyCommand.h 1.12 1.12.2.1 cmGlobalVisualStudio6Generator.cxx 1.75 1.75.2.1 cmInstallExportGenerator.cxx 1.8 1.8.2.1 cmInstallExportGenerator.h 1.5 1.5.2.1 cmInstallGenerator.cxx 1.15 1.15.2.1 cmInstallTargetGenerator.h 1.24.2.3 1.24.2.4 cmLocalGenerator.cxx 1.269.2.8 1.269.2.9 cmLocalGenerator.h 1.103.2.2 1.103.2.3 cmLocalUnixMakefileGenerator3.cxx 1.240.2.7 1.240.2.8 cmLocalVisualStudio6Generator.cxx 1.141.2.3 1.141.2.4 cmLocalVisualStudio7Generator.cxx 1.217.2.13 1.217.2.14 cmSetCommand.cxx 1.33 1.33.2.1 cmTarget.cxx 1.207.2.11 1.207.2.12 cmTarget.h 1.109.2.7 1.109.2.8 cmTargetLinkLibrariesCommand.cxx 1.25.2.1 1.25.2.2 cmTargetLinkLibrariesCommand.h 1.15.2.1 1.15.2.2 cmake.cxx 1.375.2.15 1.375.2.16 cmake.h 1.109.2.6 1.109.2.7

cmake-commits at cmake.org cmake-commits at cmake.org
Tue Jan 13 13:03:56 EST 2009


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

Modified Files:
      Tag: CMake-2-6
	cmCMakeMinimumRequired.cxx cmCMakeMinimumRequired.h 
	cmComputeLinkDepends.cxx cmComputeLinkDepends.h 
	cmDocumentVariables.cxx cmDocumentationFormatterDocbook.cxx 
	cmExportFileGenerator.cxx cmExportInstallFileGenerator.cxx 
	cmExportInstallFileGenerator.h cmExtraCodeBlocksGenerator.cxx 
	cmExtraEclipseCDT4Generator.cxx cmExtraEclipseCDT4Generator.h 
	cmFileCommand.cxx cmFileCommand.h cmFindPackageCommand.cxx 
	cmFindPackageCommand.h cmGetTargetPropertyCommand.h 
	cmGlobalVisualStudio6Generator.cxx 
	cmInstallExportGenerator.cxx cmInstallExportGenerator.h 
	cmInstallGenerator.cxx cmInstallTargetGenerator.h 
	cmLocalGenerator.cxx cmLocalGenerator.h 
	cmLocalUnixMakefileGenerator3.cxx 
	cmLocalVisualStudio6Generator.cxx 
	cmLocalVisualStudio7Generator.cxx cmSetCommand.cxx 
	cmTarget.cxx cmTarget.h cmTargetLinkLibrariesCommand.cxx 
	cmTargetLinkLibrariesCommand.h cmake.cxx cmake.h 
Log Message:
ENH: merge in changes from CVS to branch for 2.6.3 RC 8


Index: cmComputeLinkDepends.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmComputeLinkDepends.h,v
retrieving revision 1.5.2.6
retrieving revision 1.5.2.7
diff -C 2 -d -r1.5.2.6 -r1.5.2.7
*** cmComputeLinkDepends.h	3 Sep 2008 13:43:17 -0000	1.5.2.6
--- cmComputeLinkDepends.h	13 Jan 2009 18:03:51 -0000	1.5.2.7
***************
*** 73,76 ****
--- 73,77 ----
    // Configuration information.
    const char* Config;
+   cmTarget::LinkLibraryType LinkType;
  
    // Output information.

Index: cmLocalVisualStudio7Generator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmLocalVisualStudio7Generator.cxx,v
retrieving revision 1.217.2.13
retrieving revision 1.217.2.14
diff -C 2 -d -r1.217.2.13 -r1.217.2.14
*** cmLocalVisualStudio7Generator.cxx	11 Nov 2008 21:52:22 -0000	1.217.2.13
--- cmLocalVisualStudio7Generator.cxx	13 Jan 2009 18:03:53 -0000	1.217.2.14
***************
*** 1227,1231 ****
                                        cmSourceFile const& sf,
                                        std::vector<std::string>* configs,
!                                       std::string::size_type dir_len);
    std::map<cmStdString, cmLVS7GFileConfig> FileConfigMap;
  };
--- 1227,1231 ----
                                        cmSourceFile const& sf,
                                        std::vector<std::string>* configs,
!                                       std::string const& dir_max);
    std::map<cmStdString, cmLVS7GFileConfig> FileConfigMap;
  };
***************
*** 1236,1245 ****
                                        cmSourceFile const& sf,
                                        std::vector<std::string>* configs,
!                                       std::string::size_type dir_len)
  {
    std::string objectName;
    if(lg->NeedObjectName.find(&sf) != lg->NeedObjectName.end())
      {
!     objectName = lg->GetObjectFileNameWithoutTarget(sf, dir_len);
      }
  
--- 1236,1245 ----
                                        cmSourceFile const& sf,
                                        std::vector<std::string>* configs,
!                                       std::string const& dir_max)
  {
    std::string objectName;
    if(lg->NeedObjectName.find(&sf) != lg->NeedObjectName.end())
      {
!     objectName = lg->GetObjectFileNameWithoutTarget(sf, dir_max);
      }
  
***************
*** 1359,1383 ****
      }
  
!   // Compute the maximum length of a configuration name.
!   std::string::size_type config_len_max = 0;
    for(std::vector<std::string>::iterator i = configs->begin();
        i != configs->end(); ++i)
      {
!     if(i->size() > config_len_max)
        {
!       config_len_max = i->size();
        }
      }
  
!   // Compute the maximum length of the full path to the intermediate
    // files directory for any configuration.  This is used to construct
    // object file names that do not produce paths that are too long.
!   std::string::size_type dir_len = 0;
!   dir_len += strlen(this->Makefile->GetCurrentOutputDirectory());
!   dir_len += 1;
!   dir_len += this->GetTargetDirectory(target).size();
!   dir_len += 1;
!   dir_len += config_len_max;
!   dir_len += 1;
  
    // Loop through each source in the source group.
--- 1359,1383 ----
      }
  
!   // Compute the maximum length configuration name.
!   std::string config_max;
    for(std::vector<std::string>::iterator i = configs->begin();
        i != configs->end(); ++i)
      {
!     if(i->size() > config_max.size())
        {
!       config_max = *i;
        }
      }
  
!   // Compute the maximum length full path to the intermediate
    // files directory for any configuration.  This is used to construct
    // object file names that do not produce paths that are too long.
!   std::string dir_max;
!   dir_max += this->Makefile->GetCurrentOutputDirectory();
!   dir_max += "/";
!   dir_max += this->GetTargetDirectory(target);
!   dir_max += "/";
!   dir_max += config_max;
!   dir_max += "/";
  
    // Loop through each source in the source group.
***************
*** 1387,1391 ****
      {
      std::string source = (*sf)->GetFullPath();
!     FCInfo fcinfo(this, target, *(*sf), configs, dir_len);
  
      if (source != libName || target.GetType() == cmTarget::UTILITY ||
--- 1387,1391 ----
      {
      std::string source = (*sf)->GetFullPath();
!     FCInfo fcinfo(this, target, *(*sf), configs, dir_max);
  
      if (source != libName || target.GetType() == cmTarget::UTILITY ||

Index: cmInstallGenerator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmInstallGenerator.cxx,v
retrieving revision 1.15
retrieving revision 1.15.2.1
diff -C 2 -d -r1.15 -r1.15.2.1
*** cmInstallGenerator.cxx	28 Jan 2008 13:38:35 -0000	1.15
--- cmInstallGenerator.cxx	13 Jan 2009 18:03:52 -0000	1.15.2.1
***************
*** 190,196 ****
  {
    std::string result = "NOT CMAKE_INSTALL_COMPONENT OR "
!     "\"${CMAKE_INSTALL_COMPONENT}\" MATCHES \"^(";
    result += component;
!   result += ")$\"";
    return result;
  }
--- 190,196 ----
  {
    std::string result = "NOT CMAKE_INSTALL_COMPONENT OR "
!     "\"${CMAKE_INSTALL_COMPONENT}\" STREQUAL \"";
    result += component;
!   result += "\"";
    return result;
  }

Index: cmExportFileGenerator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmExportFileGenerator.cxx,v
retrieving revision 1.11.2.3
retrieving revision 1.11.2.4
diff -C 2 -d -r1.11.2.3 -r1.11.2.4
*** cmExportFileGenerator.cxx	1 May 2008 16:35:39 -0000	1.11.2.3
--- cmExportFileGenerator.cxx	13 Jan 2009 18:03:51 -0000	1.11.2.4
***************
*** 178,186 ****
  {
    // Compute which library configuration to link.
!   cmTarget::LinkLibraryType linkType = cmTarget::OPTIMIZED;
!   if(config && cmSystemTools::UpperCase(config) == "DEBUG")
!     {
!     linkType = cmTarget::DEBUG;
!     }
  
    // Construct the list of libs linked for this configuration.
--- 178,182 ----
  {
    // Compute which library configuration to link.
!   cmTarget::LinkLibraryType linkType = target->ComputeLinkType(config);
  
    // Construct the list of libs linked for this configuration.

Index: cmake.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmake.h,v
retrieving revision 1.109.2.6
retrieving revision 1.109.2.7
diff -C 2 -d -r1.109.2.6 -r1.109.2.7
*** cmake.h	6 Aug 2008 21:04:20 -0000	1.109.2.6
--- cmake.h	13 Jan 2009 18:03:54 -0000	1.109.2.7
***************
*** 333,336 ****
--- 333,340 ----
    bool IsPropertyChained(const char *name, cmProperty::ScopeType scope);
  
+   /** Get the list of configurations (in upper case) considered to be
+       debugging configurations.*/
+   std::vector<std::string> const& GetDebugConfigs();
+ 
    // record accesses of properties and variables
    void RecordPropertyAccess(const char *name, cmProperty::ScopeType scope);
***************
*** 457,460 ****
--- 461,465 ----
    cmFileTimeComparison* FileComparison;
    std::string GraphVizFile;
+   std::vector<std::string> DebugConfigs;
    
    void UpdateConversionPathTable();

Index: cmFindPackageCommand.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmFindPackageCommand.h,v
retrieving revision 1.19.2.4
retrieving revision 1.19.2.5
diff -C 2 -d -r1.19.2.4 -r1.19.2.5
*** cmFindPackageCommand.h	31 Dec 2008 15:14:29 -0000	1.19.2.4
--- cmFindPackageCommand.h	13 Jan 2009 18:03:52 -0000	1.19.2.5
***************
*** 98,102 ****
    bool CheckDirectory(std::string const& dir);
    bool FindConfigFile(std::string const& dir, std::string& file);
-   bool FindConfigFileToLoad(std::string const& dir, std::string& file);
    bool CheckVersion(std::string const& config_file);
    bool CheckVersionFile(std::string const& version_file);
--- 98,101 ----

Index: cmTarget.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmTarget.h,v
retrieving revision 1.109.2.7
retrieving revision 1.109.2.8
diff -C 2 -d -r1.109.2.7 -r1.109.2.8
*** cmTarget.h	3 Sep 2008 13:43:18 -0000	1.109.2.7
--- cmTarget.h	13 Jan 2009 18:03:53 -0000	1.109.2.8
***************
*** 187,190 ****
--- 187,193 ----
      {return this->OriginalLinkLibraries;}
  
+   /** Compute the link type to use for the given configuration.  */
+   LinkLibraryType ComputeLinkType(const char* config);
+ 
    /**
     * Clear the dependency information recorded for this target, if any.

Index: cmExtraEclipseCDT4Generator.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmExtraEclipseCDT4Generator.h,v
retrieving revision 1.4
retrieving revision 1.4.2.1
diff -C 2 -d -r1.4 -r1.4.2.1
*** cmExtraEclipseCDT4Generator.h	19 Feb 2008 21:27:03 -0000	1.4
--- cmExtraEclipseCDT4Generator.h	13 Jan 2009 18:03:52 -0000	1.4.2.1
***************
*** 85,90 ****
                                           const std::string& path);
  
    // Helper functions
!   static void AppendStorageScanners(cmGeneratedFileStream& fout);
    static void AppendTarget         (cmGeneratedFileStream& fout,
                                      const std::string&     target,
--- 85,93 ----
                                           const std::string& path);
  
+   static std::string EscapeForXML(const std::string& value);
+ 
    // Helper functions
!   static void AppendStorageScanners(cmGeneratedFileStream& fout, 
!                                     const cmMakefile& makefile);
    static void AppendTarget         (cmGeneratedFileStream& fout,
                                      const std::string&     target,
***************
*** 105,112 ****
--- 108,120 ----
                                      const std::string&     path);
  
+   bool AppendOutLinkedResource(cmGeneratedFileStream& fout,
+                                const std::string&     defname,
+                                const std::string&     altdefname);
+ 
    std::vector<std::string> SrcLinkedResources;
    std::vector<std::string> OutLinkedResources;
    std::string HomeDirectory;
    std::string HomeOutputDirectory;
+   std::set<std::string> TargetsToIgnore;
    bool IsOutOfSourceBuild;
    bool GenerateSourceProject;

Index: cmGetTargetPropertyCommand.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmGetTargetPropertyCommand.h,v
retrieving revision 1.12
retrieving revision 1.12.2.1
diff -C 2 -d -r1.12 -r1.12.2.1
*** cmGetTargetPropertyCommand.h	23 Jan 2008 15:27:59 -0000	1.12
--- cmGetTargetPropertyCommand.h	13 Jan 2009 18:03:52 -0000	1.12.2.1
***************
*** 59,77 ****
          "will be set to \"NOTFOUND\".  Use set_target_properties to set "
          "property values.  Properties are usually used to control how "
!         "a target is built.\n"
!         "The read-only property \"<CONFIG>_LOCATION\" provides the full "
!         "path to the file on disk that will be created for the target when "
!         "building under configuration <CONFIG> "
!         "(in upper-case, such as \"DEBUG_LOCATION\"). "
!         "The read-only property \"LOCATION\" specifies "
!         "the full path to the file on disk that will be created for the "
!         "target. The path may contain a build-system-specific portion that "
!         "is replaced at build time with the configuration getting built "
!         "(such as \"$(ConfigurationName)\" in VS). "
!         "This is very useful for executable targets to get "
!         "the path to the executable file for use in a custom command.\n"
!         "The read-only property \"TYPE\" returns which type the specified "
!         "target has (EXECUTABLE, STATIC_LIBRARY, SHARED_LIBRARY, "
!         "MODULE_LIBRARY, UTILITY, INSTALL_FILES or INSTALL_PROGRAMS). "
          "This command can get properties for any target so far created. "
          "The targets do not need to be in the current CMakeLists.txt file.";
--- 59,63 ----
          "will be set to \"NOTFOUND\".  Use set_target_properties to set "
          "property values.  Properties are usually used to control how "
!         "a target is built, but some query the target instead.  "
          "This command can get properties for any target so far created. "
          "The targets do not need to be in the current CMakeLists.txt file.";

Index: cmTargetLinkLibrariesCommand.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmTargetLinkLibrariesCommand.cxx,v
retrieving revision 1.25.2.1
retrieving revision 1.25.2.2
diff -C 2 -d -r1.25.2.1 -r1.25.2.2
*** cmTargetLinkLibrariesCommand.cxx	3 Sep 2008 13:43:18 -0000	1.25.2.1
--- cmTargetLinkLibrariesCommand.cxx	13 Jan 2009 18:03:53 -0000	1.25.2.2
***************
*** 189,215 ****
      }
  
    // Include this library in the link interface for the target.
!   if(llt == cmTarget::DEBUG)
      {
!     // Put in only the DEBUG configuration interface.
!     this->Target->AppendProperty("LINK_INTERFACE_LIBRARIES_DEBUG", lib);
      }
!   else if(llt == cmTarget::OPTIMIZED)
      {
!     // Put in only the non-DEBUG configuration interface.
      this->Target->AppendProperty("LINK_INTERFACE_LIBRARIES", lib);
  
!     // Make sure the DEBUG configuration interface exists so that this
!     // one will not be used as a fall-back.
!     if(!this->Target->GetProperty("LINK_INTERFACE_LIBRARIES_DEBUG"))
        {
!       this->Target->SetProperty("LINK_INTERFACE_LIBRARIES_DEBUG", "");
        }
      }
-   else
-     {
-     // Put in both the DEBUG and non-DEBUG configuration interfaces.
-     this->Target->AppendProperty("LINK_INTERFACE_LIBRARIES", lib);
-     this->Target->AppendProperty("LINK_INTERFACE_LIBRARIES_DEBUG", lib);
-     }
  }
--- 189,226 ----
      }
  
+   // Get the list of configurations considered to be DEBUG.
+   std::vector<std::string> const& debugConfigs =
+     this->Makefile->GetCMakeInstance()->GetDebugConfigs();
+   std::string prop;
+ 
    // Include this library in the link interface for the target.
!   if(llt == cmTarget::DEBUG || llt == cmTarget::GENERAL)
      {
!     // Put in the DEBUG configuration interfaces.
!     for(std::vector<std::string>::const_iterator i = debugConfigs.begin();
!         i != debugConfigs.end(); ++i)
!       {
!       prop = "LINK_INTERFACE_LIBRARIES_";
!       prop += *i;
!       this->Target->AppendProperty(prop.c_str(), lib);
!       }
      }
!   if(llt == cmTarget::OPTIMIZED || llt == cmTarget::GENERAL)
      {
!     // Put in the non-DEBUG configuration interfaces.
      this->Target->AppendProperty("LINK_INTERFACE_LIBRARIES", lib);
  
!     // Make sure the DEBUG configuration interfaces exist so that the
!     // general one will not be used as a fall-back.
!     for(std::vector<std::string>::const_iterator i = debugConfigs.begin();
!         i != debugConfigs.end(); ++i)
        {
!       prop = "LINK_INTERFACE_LIBRARIES_";
!       prop += *i;
!       if(!this->Target->GetProperty(prop.c_str()))
!         {
!         this->Target->SetProperty(prop.c_str(), "");
!         }
        }
      }
  }

Index: cmDocumentationFormatterDocbook.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmDocumentationFormatterDocbook.cxx,v
retrieving revision 1.1.2.3
retrieving revision 1.1.2.4
diff -C 2 -d -r1.1.2.3 -r1.1.2.4
*** cmDocumentationFormatterDocbook.cxx	24 Oct 2008 15:18:46 -0000	1.1.2.3
--- cmDocumentationFormatterDocbook.cxx	13 Jan 2009 18:03:51 -0000	1.1.2.4
***************
*** 135,152 ****
      section.GetEntries();
  
!   os << "<itemizedlist>\n";
!   for(std::vector<cmDocumentationEntry>::const_iterator op 
!         = entries.begin(); op != entries.end(); ++ op )
      {
!     if(op->Name.size())
        {
!       os << "    <listitem><link linkend=\"" << prefix << "_";
!       cmDocumentationPrintDocbookEscapes(os, op->Name.c_str());
!       os << "\"><emphasis><literal>";
!       cmDocumentationPrintDocbookEscapes(os, op->Name.c_str());
!       os << "</literal></emphasis></link></listitem>\n";
        }
      }
-   os << "</itemizedlist>\n" ;
  
    for(std::vector<cmDocumentationEntry>::const_iterator op = entries.begin(); 
--- 135,155 ----
      section.GetEntries();
  
!   if (!entries.empty())
      {
!     os << "<itemizedlist>\n";
!     for(std::vector<cmDocumentationEntry>::const_iterator op 
!           = entries.begin(); op != entries.end(); ++ op )
        {
!       if(op->Name.size())
!         {
!         os << "    <listitem><link linkend=\"" << prefix << "_";
!         cmDocumentationPrintDocbookEscapes(os, op->Name.c_str());
!         os << "\"><emphasis><literal>";
!         cmDocumentationPrintDocbookEscapes(os, op->Name.c_str());
!         os << "</literal></emphasis></link></listitem>\n";
!         }
        }
+     os << "</itemizedlist>\n" ;
      }
  
    for(std::vector<cmDocumentationEntry>::const_iterator op = entries.begin(); 

Index: cmExtraEclipseCDT4Generator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmExtraEclipseCDT4Generator.cxx,v
retrieving revision 1.13.2.2
retrieving revision 1.13.2.3
diff -C 2 -d -r1.13.2.2 -r1.13.2.3
*** cmExtraEclipseCDT4Generator.cxx	6 Aug 2008 21:04:19 -0000	1.13.2.2
--- cmExtraEclipseCDT4Generator.cxx	13 Jan 2009 18:03:52 -0000	1.13.2.3
***************
*** 41,44 ****
--- 41,74 ----
  #endif
    this->SupportedGlobalGenerators.push_back("Unix Makefiles");
+ 
+   // don't create these targets in Eclipse, they are too many and 
+   // should be only rarely used directly
+   this->TargetsToIgnore.insert("preinstall");
+   this->TargetsToIgnore.insert("install/local");
+   this->TargetsToIgnore.insert("ContinuousBuild");
+   this->TargetsToIgnore.insert("ContinuousConfigure");
+   this->TargetsToIgnore.insert("ContinuousCoverage");
+   this->TargetsToIgnore.insert("ContinuousMemCheck");
+   this->TargetsToIgnore.insert("ContinuousStart");
+   this->TargetsToIgnore.insert("ContinuousSubmit");
+   this->TargetsToIgnore.insert("ContinuousTest");
+   this->TargetsToIgnore.insert("ContinuousUpdate");
+   this->TargetsToIgnore.insert("ExperimentalBuild");
+   this->TargetsToIgnore.insert("ExperimentalConfigure");
+   this->TargetsToIgnore.insert("ExperimentalCoverage");
+   this->TargetsToIgnore.insert("ExperimentalMemCheck");
+   this->TargetsToIgnore.insert("ExperimentalStart");
+   this->TargetsToIgnore.insert("ExperimentalSubmit");
+   this->TargetsToIgnore.insert("ExperimentalTest");
+   this->TargetsToIgnore.insert("ExperimentalUpdate");
+   this->TargetsToIgnore.insert("NightlyBuild");
+   this->TargetsToIgnore.insert("NightlyConfigure");
+   this->TargetsToIgnore.insert("NightlyCoverage");
+   this->TargetsToIgnore.insert("NightlyMemCheck");
+   this->TargetsToIgnore.insert("NightlyMemoryCheck");
+   this->TargetsToIgnore.insert("NightlyStart");
+   this->TargetsToIgnore.insert("NightlySubmit");
+   this->TargetsToIgnore.insert("NightlyTest");
+   this->TargetsToIgnore.insert("NightlyUpdate");
  }
  
***************
*** 67,71 ****
    mf->SetToolSupportsColor(true);
    mf->SetForceVerboseMakefiles(true);
-   mf->EnableInstallTarget();
  }
  
--- 97,100 ----
***************
*** 352,391 ****
        }
      // for EXECUTABLE_OUTPUT_PATH when not in binary dir
!     std::string outputPath = mf->GetSafeDefinition("EXECUTABLE_OUTPUT_PATH");
!     if (!outputPath.empty() && !cmSystemTools::IsSubDirectory(
!                         outputPath.c_str(), this->HomeOutputDirectory.c_str()))
!       {
!       std::string name = this->GetPathBasename(outputPath);
! 
!       // make sure linked resource name is unique
!       while (this->GlobalGenerator->GetProjectMap().find(name)
!              != this->GlobalGenerator->GetProjectMap().end())
!         {
!         name += "_";
!         }
!         this->AppendLinkedResource(fout, name,
!                                    this->GetEclipsePath(outputPath));
!         this->OutLinkedResources.push_back(name);
!       }
      // for LIBRARY_OUTPUT_PATH when not in binary dir
!     if (outputPath != mf->GetSafeDefinition("LIBRARY_OUTPUT_PATH"))
!       {
!       outputPath = mf->GetSafeDefinition("LIBRARY_OUTPUT_PATH");
!       if (!outputPath.empty() && !cmSystemTools::IsSubDirectory(
!                         outputPath.c_str(), this->HomeOutputDirectory.c_str()))
!         {
!         std::string name = this->GetPathBasename(outputPath);
  
-         // make sure linked resource name is unique
-         while (this->GlobalGenerator->GetProjectMap().find(name)
-                != this->GlobalGenerator->GetProjectMap().end())
-           {
-           name += "_";
-           }
-         this->AppendLinkedResource(fout, name,
-                                    this->GetEclipsePath(outputPath));
-         this->OutLinkedResources.push_back(name);
-         }
-       }
      fout << "\t</linkedResources>\n";
      }
--- 381,392 ----
        }
      // for EXECUTABLE_OUTPUT_PATH when not in binary dir
!     this->AppendOutLinkedResource(fout,
!       mf->GetSafeDefinition("CMAKE_RUNTIME_OUTPUT_DIRECTORY"),
!       mf->GetSafeDefinition("EXECUTABLE_OUTPUT_PATH"));
      // for LIBRARY_OUTPUT_PATH when not in binary dir
!     this->AppendOutLinkedResource(fout,
!       mf->GetSafeDefinition("CMAKE_LIBRARY_OUTPUT_DIRECTORY"),
!       mf->GetSafeDefinition("LIBRARY_OUTPUT_PATH"));
  
      fout << "\t</linkedResources>\n";
      }
***************
*** 574,578 ****
            emmited.insert(def);
            fout << "<pathentry kind=\"mac\" name=\"" << def
!                << "\" path=\"\" value=\"" << val << "\"/>\n";
            }
          }
--- 575,580 ----
            emmited.insert(def);
            fout << "<pathentry kind=\"mac\" name=\"" << def
!                << "\" path=\"\" value=\"" << this->EscapeForXML(val) 
!                << "\"/>\n";
            }
          }
***************
*** 616,635 ****
      {
      emmited.insert(generator->GetAllTargetName());
!     cmExtraEclipseCDT4Generator::AppendTarget(fout,
!                                               generator->GetAllTargetName(),
!                                               make);
!     }
!   if (generator->GetPreinstallTargetName())
!     {
!     emmited.insert(generator->GetPreinstallTargetName());
!     cmExtraEclipseCDT4Generator
!     ::AppendTarget(fout, generator->GetPreinstallTargetName(), make);
      }
- 
    if (generator->GetCleanTargetName())
      {
      emmited.insert(generator->GetCleanTargetName());
!     cmExtraEclipseCDT4Generator
!     ::AppendTarget(fout, generator->GetCleanTargetName(), make);
      }
  
--- 618,627 ----
      {
      emmited.insert(generator->GetAllTargetName());
!     this->AppendTarget(fout, generator->GetAllTargetName(), make);
      }
    if (generator->GetCleanTargetName())
      {
      emmited.insert(generator->GetCleanTargetName());
!     this->AppendTarget(fout, generator->GetCleanTargetName(), make);
      }
  
***************
*** 644,688 ****
      for(cmTargets::const_iterator t = targets.begin(); t != targets.end(); ++t)
        {
        switch(t->second.GetType())
          {
          case cmTarget::UTILITY:
          case cmTarget::GLOBAL_TARGET:
            {
!           // only add these global targets
!           if (!( (t->first=="install")
!               || (t->first=="install/strip")
!               || (t->first=="test")
!               || (t->first=="Experimental")
!               || (t->first=="Nightly")
!               || (t->first=="edit_cache")
!               || (t->first=="package")
!               || (t->first=="package_source")
!               || (t->first=="rebuild_cache") ))
              {
!             break;
              }
            // add the edit_cache target only if it's not ccmake
            // otherwise ccmake will be executed in the log view of Eclipse,
            // which is no terminal, so curses don't work there, Alex
!           if (t->first=="edit_cache") 
              {
              if (strstr(mf->GetRequiredDefinition("CMAKE_EDIT_COMMAND"), 
                                                   "ccmake")!=NULL)
                {
!               break;
                }
              }
!           }
!         case cmTarget::EXECUTABLE:
!         case cmTarget::STATIC_LIBRARY:
!         case cmTarget::SHARED_LIBRARY:
!         case cmTarget::MODULE_LIBRARY:
!           {
!           if(emmited.find(t->first) == emmited.end())
              {
              emmited.insert(t->first);
!             cmExtraEclipseCDT4Generator::AppendTarget(fout, t->first, make);
              }
!            break;
            }
          // ignore these:
--- 636,687 ----
      for(cmTargets::const_iterator t = targets.begin(); t != targets.end(); ++t)
        {
+       bool addFastTarget = false;
        switch(t->second.GetType())
          {
+         case cmTarget::EXECUTABLE:
+         case cmTarget::STATIC_LIBRARY:
+         case cmTarget::SHARED_LIBRARY:
+         case cmTarget::MODULE_LIBRARY:
+            addFastTarget = true;
+            // no break here
          case cmTarget::UTILITY:
          case cmTarget::GLOBAL_TARGET:
            {
!           bool insertTarget = true;
!           if(insertTarget && (this->TargetsToIgnore.find(t->first) != 
!                                                   this->TargetsToIgnore.end()))
              {
!             insertTarget = false;
              }
+ 
+           if(insertTarget && (emmited.find(t->first) != emmited.end()))
+             {
+             insertTarget = false;
+             }
+ 
            // add the edit_cache target only if it's not ccmake
            // otherwise ccmake will be executed in the log view of Eclipse,
            // which is no terminal, so curses don't work there, Alex
!           if (insertTarget && (t->first=="edit_cache"))
              {
              if (strstr(mf->GetRequiredDefinition("CMAKE_EDIT_COMMAND"), 
                                                   "ccmake")!=NULL)
                {
!               insertTarget = false;
                }
              }
! 
!           if (insertTarget)
              {
              emmited.insert(t->first);
!             this->AppendTarget(fout, t->first, make);
!             if (addFastTarget || t->first=="install")
!               {
!               std::string fastTarget = t->first;
!               fastTarget = fastTarget + "/fast";
!               this->AppendTarget(fout, fastTarget, make);
!               }
              }
!           break;
            }
          // ignore these:
***************
*** 699,703 ****
            ;
  
!   this->AppendStorageScanners(fout);
  
    fout << "</cconfiguration>\n"
--- 698,702 ----
            ;
  
!   this->AppendStorageScanners(fout, *mf);
  
    fout << "</cconfiguration>\n"
***************
*** 793,802 ****
  }
  
  //----------------------------------------------------------------------------
  // Helper functions
  //----------------------------------------------------------------------------
  void cmExtraEclipseCDT4Generator
! ::AppendStorageScanners(cmGeneratedFileStream& fout)
  {
    fout << 
      "<storageModule moduleId=\"scannerConfiguration\">\n"
--- 792,829 ----
  }
  
+ std::string cmExtraEclipseCDT4Generator::EscapeForXML(const std::string& value)
+ {
+   std::string str = value;
+   cmSystemTools::ReplaceString(str, "&", "&amp;");
+   cmSystemTools::ReplaceString(str, "<", "&lt;");
+   cmSystemTools::ReplaceString(str, ">", "&gt;");
+   cmSystemTools::ReplaceString(str, "\"", "&quot;");
+   // NOTE: This one is not necessary, since as of Eclipse CDT4 it will
+   //       automatically change this to the original value (').
+   //cmSystemTools::ReplaceString(str, "'", "&apos;");
+   return str;
+ }
+ 
  //----------------------------------------------------------------------------
  // Helper functions
  //----------------------------------------------------------------------------
  void cmExtraEclipseCDT4Generator
! ::AppendStorageScanners(cmGeneratedFileStream& fout, 
!                         const cmMakefile& makefile)
  {
+   // we need the "make" and the C (or C++) compiler which are used, Alex
+   std::string make = makefile.GetRequiredDefinition("CMAKE_MAKE_PROGRAM");
+   std::string compiler = makefile.GetSafeDefinition("CMAKE_C_COMPILER");
+   if (compiler.empty())
+     {
+     compiler = makefile.GetSafeDefinition("CMAKE_CXX_COMPILER");
+     }
+   if (compiler.empty())  //Hmm, what to do now ?
+     {
+     compiler = "gcc";
+     }
+ 
+ 
+   // the following right now hardcodes gcc behaviour :-/
    fout << 
      "<storageModule moduleId=\"scannerConfiguration\">\n"
***************
*** 809,818 ****
      true, "", true, "specsFile",
      "-E -P -v -dD ${plugin_state_location}/${specs_file}",
!     "gcc", true, true);
    cmExtraEclipseCDT4Generator::AppendScannerProfile(fout,
      "org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile",
      true, "", true, "makefileGenerator",
      "-f ${project_name}_scd.mk",
!     "make", true, true);
  
    fout << "</storageModule>\n";
--- 836,845 ----
      true, "", true, "specsFile",
      "-E -P -v -dD ${plugin_state_location}/${specs_file}",
!     compiler, true, true);
    cmExtraEclipseCDT4Generator::AppendScannerProfile(fout,
      "org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile",
      true, "", true, "makefileGenerator",
      "-f ${project_name}_scd.mk",
!     make, true, true);
  
    fout << "</storageModule>\n";
***************
*** 882,883 ****
--- 909,958 ----
      ;
  }
+ 
+ bool cmExtraEclipseCDT4Generator
+ ::AppendOutLinkedResource(cmGeneratedFileStream& fout,
+                           const std::string&     defname,
+                           const std::string&     altdefname)
+ {
+   if (defname.empty() && altdefname.empty())
+     {
+     return false;
+     }
+ 
+   std::string outputPath = (defname.empty() ? altdefname : defname);
+ 
+   if (!cmSystemTools::FileIsFullPath(outputPath.c_str()))
+     {
+     outputPath = this->HomeOutputDirectory + "/" + outputPath;
+     }
+   if (cmSystemTools::IsSubDirectory(outputPath.c_str(),
+                                     this->HomeOutputDirectory.c_str()))
+     {
+     return false;
+     }
+ 
+   std::string name = this->GetPathBasename(outputPath);
+ 
+   // make sure linked resource name is unique
+   while (this->GlobalGenerator->GetProjectMap().find(name)
+       != this->GlobalGenerator->GetProjectMap().end())
+     {
+     name += "_";
+     }
+ 
+   if (std::find(this->OutLinkedResources.begin(),
+                 this->OutLinkedResources.end(),
+                 name)
+       != this->OutLinkedResources.end())
+     {
+     return false;
+     }
+   else
+     {
+     this->AppendLinkedResource(fout, name,
+                                this->GetEclipsePath(outputPath));
+     this->OutLinkedResources.push_back(name);
+     return true;
+     }
+ }
+ 

Index: cmTarget.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmTarget.cxx,v
retrieving revision 1.207.2.11
retrieving revision 1.207.2.12
diff -C 2 -d -r1.207.2.11 -r1.207.2.12
*** cmTarget.cxx	24 Oct 2008 15:18:54 -0000	1.207.2.11
--- cmTarget.cxx	13 Jan 2009 18:03:53 -0000	1.207.2.12
***************
*** 136,143 ****
    cm->DefineProperty
      ("DEBUG_POSTFIX", cmProperty::TARGET,
!      "A postfix that will be applied to this target when build debug.",
!      "A property on a target that specifies a postfix to add to the "
!      "target name when built in debug mode. For example \"foo.dll\" "
!      "versus \"fooD.dll\".  Ignored for Mac Frameworks and App Bundles.");
  
    cm->DefineProperty
--- 136,152 ----
    cm->DefineProperty
      ("DEBUG_POSTFIX", cmProperty::TARGET,
!      "See target property <CONFIG>_POSTFIX.",
!      "This property is a special case of the more-general <CONFIG>_POSTFIX "
!      "property for the DEBUG configuration.");
! 
!   cm->DefineProperty
!     ("<CONFIG>_POSTFIX", cmProperty::TARGET,
!      "Postfix to append to the target file name for configuration <CONFIG>.",
!      "When building with configuration <CONFIG> the value of this property "
!      "is appended to the target file name built on disk.  "
!      "For non-executable targets, this property is initialized by the value "
!      "of the variable CMAKE_<CONFIG>_POSTFIX if it is set when a target is "
!      "created.  "
!      "This property is ignored on the Mac for Frameworks and App Bundles.");
  
    cm->DefineProperty
***************
*** 377,389 ****
    cm->DefineProperty
      ("LOCATION", cmProperty::TARGET,
!      "Deprecated.  Use LOCATION_<CONFIG> or avoid altogether.",
!      "This property is provided for compatibility with CMake 2.4 and below. "
       "It was meant to get the location of an executable target's output file "
       "for use in add_custom_command.  "
       "In CMake 2.6 and above add_custom_command automatically recognizes a "
       "target name in its COMMAND and DEPENDS options and computes the "
!      "target location.  Therefore this property need not be used.  "
!      "This property is not defined for IMPORTED targets because they "
!      "were not available in CMake 2.4 or below anyway.");
  
    cm->DefineProperty
--- 386,404 ----
    cm->DefineProperty
      ("LOCATION", cmProperty::TARGET,
!      "Read-only location of a target on disk.",
!      "For an imported target, this read-only property returns the value of "
!      "the LOCATION_<CONFIG> property for an unspecified configuration "
!      "<CONFIG> provided by the target.\n"
!      "For a non-imported target, this property is provided for compatibility "
!      "with CMake 2.4 and below.  "
       "It was meant to get the location of an executable target's output file "
       "for use in add_custom_command.  "
+      "The path may contain a build-system-specific portion that "
+      "is replaced at build time with the configuration getting built "
+      "(such as \"$(ConfigurationName)\" in VS). "
       "In CMake 2.6 and above add_custom_command automatically recognizes a "
       "target name in its COMMAND and DEPENDS options and computes the "
!      "target location.  "
!      "Therefore this property is not needed for creating custom commands.");
  
    cm->DefineProperty
***************
*** 392,396 ****
       "A read-only property that indicates where a target's main file is "
       "located on disk for the configuration <CONFIG>.  "
!      "The property is defined only for library and executable targets.");
  
    cm->DefineProperty
--- 407,417 ----
       "A read-only property that indicates where a target's main file is "
       "located on disk for the configuration <CONFIG>.  "
!      "The property is defined only for library and executable targets.  "
!      "An imported target may provide a set of configurations different "
!      "from that of the importing project.  "
!      "By default CMake looks for an exact-match but otherwise uses an "
!      "arbitrary available configuration.  "
!      "Use the MAP_IMPORTED_CONFIG_<CONFIG> property to map imported "
!      "configurations explicitly.");
  
    cm->DefineProperty
***************
*** 1291,1294 ****
--- 1312,1343 ----
  
  //----------------------------------------------------------------------------
+ cmTarget::LinkLibraryType cmTarget::ComputeLinkType(const char* config)
+ {
+   // No configuration is always optimized.
+   if(!(config && *config))
+     {
+     return cmTarget::OPTIMIZED;
+     }
+ 
+   // Get the list of configurations considered to be DEBUG.
+   std::vector<std::string> const& debugConfigs =
+     this->Makefile->GetCMakeInstance()->GetDebugConfigs();
+ 
+   // Check if any entry in the list matches this configuration.
+   std::string configUpper = cmSystemTools::UpperCase(config);
+   for(std::vector<std::string>::const_iterator i = debugConfigs.begin();
+       i != debugConfigs.end(); ++i)
+     {
+     if(*i == configUpper)
+       {
+       return cmTarget::DEBUG;
+       }
+     }
+ 
+   // The current configuration is not a debug configuration.
+   return cmTarget::OPTIMIZED;
+ }
+ 
+ //----------------------------------------------------------------------------
  void cmTarget::ClearDependencyInformation( cmMakefile& mf,
                                             const char* target )
***************
*** 2002,2012 ****
       this->GetType() == cmTarget::UNKNOWN_LIBRARY)
      {
!     if(!this->IsImported() && strcmp(prop,"LOCATION") == 0)
        {
!       // Set the LOCATION property of the target.  Note that this
        // cannot take into account the per-configuration name of the
        // target because the configuration type may not be known at
!       // CMake time.  It is now deprecated as described in the
!       // documentation.
        this->SetProperty("LOCATION", this->GetLocation(0));
        }
--- 2051,2065 ----
       this->GetType() == cmTarget::UNKNOWN_LIBRARY)
      {
!     if(strcmp(prop,"LOCATION") == 0)
        {
!       // Set the LOCATION property of the target.
!       //
!       // For an imported target this is the location of an arbitrary
!       // available configuration.
!       //
!       // For a non-imported target this is deprecated because it
        // cannot take into account the per-configuration name of the
        // target because the configuration type may not be known at
!       // CMake time.
        this->SetProperty("LOCATION", this->GetLocation(0));
        }
***************
*** 3654,3662 ****
  
      // Compute which library configuration to link.
!     cmTarget::LinkLibraryType linkType = cmTarget::OPTIMIZED;
!     if(config && cmSystemTools::UpperCase(config) == "DEBUG")
!       {
!       linkType = cmTarget::DEBUG;
!       }
  
      // Construct the list of libs linked for this configuration.
--- 3707,3711 ----
  
      // Compute which library configuration to link.
!     cmTarget::LinkLibraryType linkType = this->ComputeLinkType(config);
  
      // Construct the list of libs linked for this configuration.

Index: cmCMakeMinimumRequired.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmCMakeMinimumRequired.cxx,v
retrieving revision 1.17.2.1
retrieving revision 1.17.2.2
diff -C 2 -d -r1.17.2.1 -r1.17.2.2
*** cmCMakeMinimumRequired.cxx	24 Mar 2008 22:23:26 -0000	1.17.2.1
--- cmCMakeMinimumRequired.cxx	13 Jan 2009 18:03:49 -0000	1.17.2.2
***************
*** 48,55 ****
      else
        {
!       cmOStringStream e;
!       e << "called with unknown argument \"" << args[i].c_str() << "\".";
!       this->SetError(e.str().c_str());
!       return false;
        }
      }
--- 48,52 ----
      else
        {
!       this->UnknownArguments.push_back(args[i]);
        }
      }
***************
*** 63,67 ****
    if(version_string.empty())
      {
!     return true;
      }
  
--- 60,64 ----
    if(version_string.empty())
      {
!     return this->EnforceUnknownArguments();
      }
  
***************
*** 108,111 ****
--- 105,114 ----
      }
  
+   // The version is not from the future, so enforce unknown arguments.
+   if(!this->EnforceUnknownArguments())
+     {
+     return false;
+     }
+ 
    if (required_major < 2 || required_major == 2 && required_minor < 4)
    {
***************
*** 120,121 ****
--- 123,137 ----
  }
  
+ //----------------------------------------------------------------------------
+ bool cmCMakeMinimumRequired::EnforceUnknownArguments()
+ {
+   if(!this->UnknownArguments.empty())
+     {
+     cmOStringStream e;
+     e << "called with unknown argument \""
+       << this->UnknownArguments[0] << "\".";
+     this->SetError(e.str().c_str());
+     return false;
+     }
+   return true;
+ }

Index: cmDocumentVariables.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmDocumentVariables.cxx,v
retrieving revision 1.18.2.3
retrieving revision 1.18.2.4
diff -C 2 -d -r1.18.2.3 -r1.18.2.4
*** cmDocumentVariables.cxx	3 Sep 2008 13:43:17 -0000	1.18.2.3
--- cmDocumentVariables.cxx	13 Jan 2009 18:03:51 -0000	1.18.2.4
***************
*** 577,583 ****
       "Variables That Change Behavior");
  
!   
    // Variables defined by CMake that describe the system
!   
    cm->DefineProperty
      ("CMAKE_SYSTEM", cmProperty::VARIABLE,
--- 577,590 ----
       "Variables That Change Behavior");
  
!   cm->DefineProperty
!     ("CMAKE_COLOR_MAKEFILE", cmProperty::VARIABLE,
!      "Enables color output when using the Makefile generator.",
!      "When enabled, the generated Makefiles will produce colored output. "
!      "Default is ON.",false,
!      "Variables That Change Behavior");
! 
! 
    // Variables defined by CMake that describe the system
! 
    cm->DefineProperty
      ("CMAKE_SYSTEM", cmProperty::VARIABLE,
***************
*** 823,838 ****
       false,
       "Variables that Control the Build");
-   
  
    cm->DefineProperty
      ("CMAKE_DEBUG_POSTFIX", cmProperty::VARIABLE,
!      "A postfix to add to targets when build as debug.",
!      "This variable is used to initialize the DEBUG_POSTFIX "
!      "property on all the targets. If set the postfix will be "
!      "appended to any targets built when the configuration is "
!      "Debug.",
       false,
       "Variables that Control the Build");
!   
    cm->DefineProperty
      ("CMAKE_BUILD_WITH_INSTALL_RPATH", cmProperty::VARIABLE,
--- 830,850 ----
       false,
       "Variables that Control the Build");
  
    cm->DefineProperty
      ("CMAKE_DEBUG_POSTFIX", cmProperty::VARIABLE,
!      "See variable CMAKE_<CONFIG>_POSTFIX.",
!      "This variable is a special case of the more-general "
!      "CMAKE_<CONFIG>_POSTFIX variable for the DEBUG configuration.",
       false,
       "Variables that Control the Build");
!   cm->DefineProperty
!     ("CMAKE_<CONFIG>_POSTFIX", cmProperty::VARIABLE,
!      "Default filename postfix for libraries under configuration <CONFIG>.",
!      "When a non-executable target is created its <CONFIG>_POSTFIX "
!      "target property is initialized with the value of this variable "
!      "if it is set.",
!      false,
!      "Variables that Control the Build");
! 
    cm->DefineProperty
      ("CMAKE_BUILD_WITH_INSTALL_RPATH", cmProperty::VARIABLE,

Index: cmake.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmake.cxx,v
retrieving revision 1.375.2.15
retrieving revision 1.375.2.16
diff -C 2 -d -r1.375.2.15 -r1.375.2.16
*** cmake.cxx	2 Dec 2008 12:07:40 -0000	1.375.2.15
--- cmake.cxx	13 Jan 2009 18:03:53 -0000	1.375.2.16
***************
*** 3365,3368 ****
--- 3365,3381 ----
  
    cm->DefineProperty(
+     "DEBUG_CONFIGURATIONS", cmProperty::GLOBAL,
+     "Specify which configurations are for debugging.",
+     "The value must be a semi-colon separated list of configuration names.  "
+     "Currently this property is used only by the target_link_libraries "
+     "command (see its documentation for details).  "
+     "Additional uses may be defined in the future.  "
+     "\n"
+     "This property must be set at the top level of the project and before "
+     "the first target_link_libraries command invocation.  "
+     "If any entry in the list does not match a valid configuration for "
+     "the project the behavior is undefined.");
+ 
+   cm->DefineProperty(
      "GLOBAL_DEPENDS_DEBUG_MODE", cmProperty::GLOBAL,
      "Enable global target dependency graph debug mode.",
***************
*** 3552,3555 ****
--- 3565,3574 ----
      }
  
+   // Special hook to invalidate cached value.
+   if(strcmp(prop, "DEBUG_CONFIGURATIONS") == 0)
+     {
+     this->DebugConfigs.clear();
+     }
+ 
    this->Properties.SetProperty(prop, value, cmProperty::GLOBAL);
  }
***************
*** 3561,3564 ****
--- 3580,3590 ----
      return;
      }
+ 
+   // Special hook to invalidate cached value.
+   if(strcmp(prop, "DEBUG_CONFIGURATIONS") == 0)
+     {
+     this->DebugConfigs.clear();
+     }
+ 
    this->Properties.AppendProperty(prop, value, cmProperty::GLOBAL);
  }
***************
*** 4272,4273 ****
--- 4298,4324 ----
      }
  }
+ 
+ //----------------------------------------------------------------------------
+ std::vector<std::string> const& cmake::GetDebugConfigs()
+ {
+   // Compute on-demand.
+   if(this->DebugConfigs.empty())
+     {
+     if(const char* config_list = this->GetProperty("DEBUG_CONFIGURATIONS"))
+       {
+       // Expand the specified list and convert to upper-case.
+       cmSystemTools::ExpandListArgument(config_list, this->DebugConfigs);
+       for(std::vector<std::string>::iterator i = this->DebugConfigs.begin();
+           i != this->DebugConfigs.end(); ++i)
+         {
+         *i = cmSystemTools::UpperCase(*i);
+         }
+       }
+     // If no configurations were specified, use a default list.
+     if(this->DebugConfigs.empty())
+       {
+       this->DebugConfigs.push_back("DEBUG");
+       }
+     }
+   return this->DebugConfigs;
+ }

Index: cmLocalVisualStudio6Generator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmLocalVisualStudio6Generator.cxx,v
retrieving revision 1.141.2.3
retrieving revision 1.141.2.4
diff -C 2 -d -r1.141.2.3 -r1.141.2.4
*** cmLocalVisualStudio6Generator.cxx	12 Sep 2008 14:56:21 -0000	1.141.2.3
--- cmLocalVisualStudio6Generator.cxx	13 Jan 2009 18:03:53 -0000	1.141.2.4
***************
*** 64,68 ****
    // Setup /I and /LIBPATH options for the resulting DSP file.  VS 6
    // truncates long include paths so make it as short as possible if
!   // the length threatents this problem.
    unsigned int maxIncludeLength = 3000;
    bool useShortPath = false;
--- 64,68 ----
    // Setup /I and /LIBPATH options for the resulting DSP file.  VS 6
    // truncates long include paths so make it as short as possible if
!   // the length threatens this problem.
    unsigned int maxIncludeLength = 3000;
    bool useShortPath = false;
***************
*** 168,176 ****
  }
  
  void cmLocalVisualStudio6Generator::CreateSingleDSP(const char *lname, 
                                                      cmTarget &target)
  {
    // add to the list of projects
!   std::string pname = lname;
    this->CreatedProjectNames.push_back(pname);
    // create the dsp.cmake file
--- 168,182 ----
  }
  
+ // Utility function to make a valid VS6 *.dsp filename out
+ // of a CMake target name:
+ //
+ extern std::string GetVS6TargetName(const std::string& targetName);
+ 
  void cmLocalVisualStudio6Generator::CreateSingleDSP(const char *lname, 
                                                      cmTarget &target)
  {
    // add to the list of projects
!   std::string pname = GetVS6TargetName(lname);
! 
    this->CreatedProjectNames.push_back(pname);
    // create the dsp.cmake file
***************
*** 178,182 ****
    fname = this->Makefile->GetStartOutputDirectory();
    fname += "/";
!   fname += lname;
    fname += ".dsp";
    // save the name of the real dsp file
--- 184,188 ----
    fname = this->Makefile->GetStartOutputDirectory();
    fname += "/";
!   fname += pname;
    fname += ".dsp";
    // save the name of the real dsp file
***************
*** 189,193 ****
      cmSystemTools::ReportLastSystemError("");
      }
!   this->WriteDSPFile(fout,lname,target);
    fout.close();
    // if the dsp file has changed, then write it.
--- 195,199 ----
      cmSystemTools::ReportLastSystemError("");
      }
!   this->WriteDSPFile(fout,pname.c_str(),target);
    fout.close();
    // if the dsp file has changed, then write it.
***************
*** 198,202 ****
  void cmLocalVisualStudio6Generator::AddDSPBuildRule(cmTarget& tgt)
  {
!   std::string dspname = tgt.GetName();
    dspname += ".dsp.cmake";
    const char* dsprule = 
--- 204,208 ----
  void cmLocalVisualStudio6Generator::AddDSPBuildRule(cmTarget& tgt)
  {
!   std::string dspname = GetVS6TargetName(tgt.GetName());
    dspname += ".dsp.cmake";
    const char* dsprule = 
***************
*** 288,295 ****
      }
    
-   // trace the visual studio dependencies
-   std::string name = libName;
-   name += ".dsp.cmake";
- 
    // We may be modifying the source groups temporarily, so make a copy.
    std::vector<cmSourceGroup> sourceGroups = this->Makefile->GetSourceGroups();
--- 294,297 ----
***************
*** 371,376 ****
      }
  
!   // Compute the maximum length of a configuration name.
!   std::string::size_type config_len_max = 0;
    for(std::vector<std::string>::iterator i = this->Configurations.begin();
        i != this->Configurations.end(); ++i)
--- 373,378 ----
      }
  
!   // Compute the maximum length configuration name.
!   std::string config_max;
    for(std::vector<std::string>::iterator i = this->Configurations.begin();
        i != this->Configurations.end(); ++i)
***************
*** 378,395 ****
      // Strip the subdirectory name out of the configuration name.
      std::string config = this->GetConfigName(*i);
!     if(config.size() > config_len_max)
        {
!       config_len_max = config.size();
        }
      }
  
!   // Compute the maximum length of the full path to the intermediate
    // files directory for any configuration.  This is used to construct
    // object file names that do not produce paths that are too long.
!   std::string::size_type dir_len = 0;
!   dir_len += strlen(this->Makefile->GetCurrentOutputDirectory());
!   dir_len += 1;
!   dir_len += config_len_max;
!   dir_len += 1;
  
    // Loop through each source in the source group.
--- 380,397 ----
      // Strip the subdirectory name out of the configuration name.
      std::string config = this->GetConfigName(*i);
!     if(config.size() > config_max.size())
        {
!       config_max = config;
        }
      }
  
!   // Compute the maximum length full path to the intermediate
    // files directory for any configuration.  This is used to construct
    // object file names that do not produce paths that are too long.
!   std::string dir_max;
!   dir_max += this->Makefile->GetCurrentOutputDirectory();
!   dir_max += "/";
!   dir_max += config_max;
!   dir_max += "/";
  
    // Loop through each source in the source group.
***************
*** 407,411 ****
        objectNameDir =
          cmSystemTools::GetFilenamePath(
!           this->GetObjectFileNameWithoutTarget(*(*sf), dir_len));
        }
  
--- 409,413 ----
        objectNameDir =
          cmSystemTools::GetFilenamePath(
!           this->GetObjectFileNameWithoutTarget(*(*sf), dir_max));
        }
  
***************
*** 463,467 ****
        cmSystemTools::ExpandListArgument(dependsValue, depends);
        }
!     if (source != libName || target.GetType() == cmTarget::UTILITY ||
        target.GetType() == cmTarget::GLOBAL_TARGET)
        {
--- 465,470 ----
        cmSystemTools::ExpandListArgument(dependsValue, depends);
        }
!     if (GetVS6TargetName(source) != libName ||
!       target.GetType() == cmTarget::UTILITY ||
        target.GetType() == cmTarget::GLOBAL_TARGET)
        {
***************
*** 759,767 ****
    this->Configurations.erase(this->Configurations.begin(), 
                               this->Configurations.end());
    // now add all the configurations possible
    std::string line;
    while(cmSystemTools::GetLineFromStream(fin, line))
      {
!     cmSystemTools::ReplaceString(line, "OUTPUT_LIBNAME",libName);
      if (reg.find(line))
        {
--- 762,772 ----
    this->Configurations.erase(this->Configurations.begin(), 
                               this->Configurations.end());
+ 
    // now add all the configurations possible
+   std::string vs6name = GetVS6TargetName(libName);
    std::string line;
    while(cmSystemTools::GetLineFromStream(fin, line))
      {
!     cmSystemTools::ReplaceString(line, "OUTPUT_LIBNAME", vs6name.c_str());
      if (reg.find(line))
        {
***************
*** 1056,1061 ****
           && target.GetType() != cmTarget::STATIC_LIBRARY 
           && target.GetType() != cmTarget::MODULE_LIBRARY) || 
!         (target.GetType()==cmTarget::SHARED_LIBRARY && libName != j->first) ||
!         (target.GetType()==cmTarget::MODULE_LIBRARY && libName != j->first))
        {
        // Compute the proper name to use to link this library.
--- 1061,1068 ----
           && target.GetType() != cmTarget::STATIC_LIBRARY 
           && target.GetType() != cmTarget::MODULE_LIBRARY) || 
!         (target.GetType()==cmTarget::SHARED_LIBRARY
!          && libName != GetVS6TargetName(j->first)) ||
!         (target.GetType()==cmTarget::MODULE_LIBRARY
!          && libName != GetVS6TargetName(j->first)))
        {
        // Compute the proper name to use to link this library.
***************
*** 1405,1414 ****
      cmSystemTools::ReplaceString(line, "TARGET_IMPLIB_FLAG_RELWITHDEBINFO",
                                   targetImplibFlagRelWithDebInfo.c_str());
!     cmSystemTools::ReplaceString(line, "OUTPUT_LIBNAME",libName);
  #ifdef CM_USE_OLD_VS6
!     // because LIBRARY_OUTPUT_PATH and EXECUTABLE_OUTPUT_PATH 
      // are already quoted in the template file,
      // we need to remove the quotes here, we still need
!     // to convert to output path for unix to win32 conversion 
      cmSystemTools::ReplaceString
        (line, "LIBRARY_OUTPUT_PATH",
--- 1412,1424 ----
      cmSystemTools::ReplaceString(line, "TARGET_IMPLIB_FLAG_RELWITHDEBINFO",
                                   targetImplibFlagRelWithDebInfo.c_str());
! 
!     std::string vs6name = GetVS6TargetName(libName);
!     cmSystemTools::ReplaceString(line, "OUTPUT_LIBNAME", vs6name.c_str());
! 
  #ifdef CM_USE_OLD_VS6
!     // because LIBRARY_OUTPUT_PATH and EXECUTABLE_OUTPUT_PATH
      // are already quoted in the template file,
      // we need to remove the quotes here, we still need
!     // to convert to output path for unix to win32 conversion
      cmSystemTools::ReplaceString
        (line, "LIBRARY_OUTPUT_PATH",
***************
*** 1512,1541 ****
  
      // Add per-target and per-configuration preprocessor definitions.
!     this->AppendDefines
!       (flags, this->Makefile->GetProperty("COMPILE_DEFINITIONS"), 0);
!     this->AppendDefines(flags, target.GetProperty("COMPILE_DEFINITIONS"), 0);
!     this->AppendDefines
!       (flagsDebug,
!        this->Makefile->GetProperty("COMPILE_DEFINITIONS_DEBUG"), 0);
!     this->AppendDefines(flagsDebug,
!                         target.GetProperty("COMPILE_DEFINITIONS_DEBUG"), 0);
!     this->AppendDefines
!       (flagsRelease,
!        this->Makefile->GetProperty("COMPILE_DEFINITIONS_RELEASE"), 0);
!     this->AppendDefines(flagsRelease,
!                         target.GetProperty("COMPILE_DEFINITIONS_RELEASE"), 0);
!     this->AppendDefines
!       (flagsMinSize,
!        this->Makefile->GetProperty("COMPILE_DEFINITIONS_MINSIZEREL"), 0);
!     this->AppendDefines
!       (flagsMinSize,
!        target.GetProperty("COMPILE_DEFINITIONS_MINSIZEREL"), 0);
!     this->AppendDefines
!       (flagsDebugRel,
!        this->Makefile->GetProperty("COMPILE_DEFINITIONS_RELWITHDEBINFO"), 0);
!     this->AppendDefines
!       (flagsDebugRel,
!        target.GetProperty("COMPILE_DEFINITIONS_RELWITHDEBINFO"), 0);
  
      // The template files have CXX FLAGS in them, that need to be replaced.
      // There are not separate CXX and C template files, so we use the same
--- 1522,1568 ----
  
      // Add per-target and per-configuration preprocessor definitions.
!     std::string defines = " ";
!     std::string debugDefines = " ";
!     std::string releaseDefines = " ";
!     std::string minsizeDefines = " ";
!     std::string debugrelDefines = " ";
  
+     this->AppendDefines(
+       defines,
+       this->Makefile->GetProperty("COMPILE_DEFINITIONS"), 0);
+     this->AppendDefines(
+       debugDefines,
+       this->Makefile->GetProperty("COMPILE_DEFINITIONS_DEBUG"),0);
+     this->AppendDefines(
+       releaseDefines,
+       this->Makefile->GetProperty("COMPILE_DEFINITIONS_RELEASE"), 0);
+     this->AppendDefines(
+       minsizeDefines,
+       this->Makefile->GetProperty("COMPILE_DEFINITIONS_MINSIZEREL"), 0);
+     this->AppendDefines(
+       debugrelDefines,
+       this->Makefile->GetProperty("COMPILE_DEFINITIONS_RELWITHDEBINFO"), 0);
+ 
+     this->AppendDefines(
+       defines,
+       target.GetProperty("COMPILE_DEFINITIONS"), 0);
+     this->AppendDefines(
+       debugDefines,
+       target.GetProperty("COMPILE_DEFINITIONS_DEBUG"), 0);
+     this->AppendDefines(
+       releaseDefines,
+       target.GetProperty("COMPILE_DEFINITIONS_RELEASE"), 0);
+     this->AppendDefines(
+       minsizeDefines,
+       target.GetProperty("COMPILE_DEFINITIONS_MINSIZEREL"), 0);
+     this->AppendDefines(
+       debugrelDefines,
+       target.GetProperty("COMPILE_DEFINITIONS_RELWITHDEBINFO"), 0);
+     flags += defines;
+     flagsDebug += debugDefines;
+     flagsRelease += releaseDefines;
+     flagsMinSize += minsizeDefines;
+     flagsDebugRel += debugrelDefines;
+  
      // The template files have CXX FLAGS in them, that need to be replaced.
      // There are not separate CXX and C template files, so we use the same
***************
*** 1551,1554 ****
--- 1578,1592 ----
                                   flagsRelease.c_str());
      cmSystemTools::ReplaceString(line, "CMAKE_CXX_FLAGS", flags.c_str());
+ 
+     cmSystemTools::ReplaceString(line, "COMPILE_DEFINITIONS_MINSIZE", 
+                                  minsizeDefines.c_str());
+     cmSystemTools::ReplaceString(line, "COMPILE_DEFINITIONS_DEBUG", 
+                                  debugDefines.c_str());
+     cmSystemTools::ReplaceString(line, "COMPILE_DEFINITIONS_RELWITHDEBINFO", 
+                                  debugrelDefines.c_str());
+     cmSystemTools::ReplaceString(line, "COMPILE_DEFINITIONS_RELEASE", 
+                                  releaseDefines.c_str());
+     cmSystemTools::ReplaceString(line, "COMPILE_DEFINITIONS", defines.c_str());
+ 
      fout << line.c_str() << std::endl;
      }

Index: cmInstallExportGenerator.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmInstallExportGenerator.h,v
retrieving revision 1.5
retrieving revision 1.5.2.1
diff -C 2 -d -r1.5 -r1.5.2.1
*** cmInstallExportGenerator.h	28 Jan 2008 13:38:35 -0000	1.5
--- cmInstallExportGenerator.h	13 Jan 2009 18:03:52 -0000	1.5.2.1
***************
*** 43,47 ****
    typedef std::vector<cmTargetExport*> ExportSet;
  
-   typedef cmInstallGeneratorIndent Indent;
    virtual void GenerateScript(std::ostream& os);
    virtual void GenerateScriptConfigs(std::ostream& os, Indent const& indent);
--- 43,46 ----

Index: cmGlobalVisualStudio6Generator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmGlobalVisualStudio6Generator.cxx,v
retrieving revision 1.75
retrieving revision 1.75.2.1
diff -C 2 -d -r1.75 -r1.75.2.1
*** cmGlobalVisualStudio6Generator.cxx	28 Jan 2008 13:38:35 -0000	1.75
--- cmGlobalVisualStudio6Generator.cxx	13 Jan 2009 18:03:52 -0000	1.75.2.1
***************
*** 373,376 ****
--- 373,393 ----
  }
  
+ 
+ // Utility function to make a valid VS6 *.dsp filename out
+ // of a CMake target name:
+ //
+ std::string GetVS6TargetName(const std::string& targetName)
+ {
+   std::string name(targetName);
+ 
+   // Eliminate hyphens. VS6 cannot handle hyphens in *.dsp filenames...
+   // Replace them with underscores.
+   //
+   cmSystemTools::ReplaceString(name, "-", "_");
+ 
+   return name;
+ }
+ 
+ 
  // Write a dsp file into the DSW file,
  // Note, that dependencies from executables to 
***************
*** 403,407 ****
            {
            fout << "Begin Project Dependency\n";
!           fout << "Project_Dep_Name " << j->first.c_str() << "\n";
            fout << "End Project Dependency\n";
            }
--- 420,425 ----
            {
            fout << "Begin Project Dependency\n";
!           fout << "Project_Dep_Name "
!                << GetVS6TargetName(j->first.c_str()) << "\n";
            fout << "End Project Dependency\n";
            }
***************
*** 420,424 ****
        std::string depName = this->GetUtilityForTarget(target, i->c_str());
        fout << "Begin Project Dependency\n";
!       fout << "Project_Dep_Name " << depName << "\n";
        fout << "End Project Dependency\n";
        }
--- 438,442 ----
        std::string depName = this->GetUtilityForTarget(target, i->c_str());
        fout << "Begin Project Dependency\n";
!       fout << "Project_Dep_Name " << GetVS6TargetName(depName) << "\n";
        fout << "End Project Dependency\n";
        }
***************
*** 452,456 ****
    {
      fout << "Begin Project Dependency\n";
!     fout << "Project_Dep_Name " << *i << "\n";
      fout << "End Project Dependency\n";
    }
--- 470,474 ----
    {
      fout << "Begin Project Dependency\n";
!     fout << "Project_Dep_Name " << GetVS6TargetName(*i) << "\n";
      fout << "End Project Dependency\n";
    }

Index: cmSetCommand.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmSetCommand.cxx,v
retrieving revision 1.33
retrieving revision 1.33.2.1
diff -C 2 -d -r1.33 -r1.33.2.1
*** cmSetCommand.cxx	13 Mar 2008 17:52:49 -0000	1.33
--- cmSetCommand.cxx	13 Jan 2009 18:03:53 -0000	1.33.2.1
***************
*** 172,176 ****
                                     value.c_str(),
                                     docstring,
!                                    type);
      }
    else
--- 172,176 ----
                                     value.c_str(),
                                     docstring,
!                                    type, force);
      }
    else

Index: cmExtraCodeBlocksGenerator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmExtraCodeBlocksGenerator.cxx,v
retrieving revision 1.18.2.1
retrieving revision 1.18.2.2
diff -C 2 -d -r1.18.2.1 -r1.18.2.2
*** cmExtraCodeBlocksGenerator.cxx	3 Sep 2008 13:43:17 -0000	1.18.2.1
--- cmExtraCodeBlocksGenerator.cxx	13 Jan 2009 18:03:52 -0000	1.18.2.2
***************
*** 419,422 ****
--- 419,429 ----
      command += target;
      }
+   else if (strcmp(this->GlobalGenerator->GetName(), "MinGW Makefiles")==0)
+     {
+     command += " -f ";
+     command += makefile;
+     command += " ";
+     command += target;
+     }
    else
      {

Index: cmCMakeMinimumRequired.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmCMakeMinimumRequired.h,v
retrieving revision 1.12.2.1
retrieving revision 1.12.2.2
diff -C 2 -d -r1.12.2.1 -r1.12.2.2
*** cmCMakeMinimumRequired.h	18 Mar 2008 14:23:54 -0000	1.12.2.1
--- cmCMakeMinimumRequired.h	13 Jan 2009 18:03:49 -0000	1.12.2.2
***************
*** 78,87 ****
        "  cmake_policy(VERSION 2.4)\n"
        "which enables compatibility features for CMake 2.4 and lower.\n"
!       "The FATAL_ERROR option is accepted but ignored.  It is left from "
!       "CMake versions 2.4 and lower in which failure to meet the minimum "
!       "version was a warning by default.";
      }
    
    cmTypeMacro(cmCMakeMinimumRequired, cmCommand);
  };
  
--- 78,92 ----
        "  cmake_policy(VERSION 2.4)\n"
        "which enables compatibility features for CMake 2.4 and lower.\n"
!       "The FATAL_ERROR option is accepted but ignored by CMake 2.6 "
!       "and higher.  "
!       "It should be specified so CMake versions 2.4 and lower fail with an "
!       "error instead of just a warning.";
      }
    
    cmTypeMacro(cmCMakeMinimumRequired, cmCommand);
+ 
+ private:
+   std::vector<std::string> UnknownArguments;
+   bool EnforceUnknownArguments();
  };
  

Index: cmLocalGenerator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmLocalGenerator.cxx,v
retrieving revision 1.269.2.8
retrieving revision 1.269.2.9
diff -C 2 -d -r1.269.2.8 -r1.269.2.9
*** cmLocalGenerator.cxx	24 Oct 2008 15:18:48 -0000	1.269.2.8
--- cmLocalGenerator.cxx	13 Jan 2009 18:03:52 -0000	1.269.2.9
***************
*** 137,140 ****
--- 137,141 ----
        }
      }
+   this->ObjectMaxPathViolations.clear();
    }
  
***************
*** 646,653 ****
         !sf->GetPropertyAsBool("EXTERNAL_OBJECT"))
        {
!       std::string::size_type dir_len = 0;
!       dir_len += strlen(this->Makefile->GetCurrentOutputDirectory());
!       dir_len += 1;
!       std::string obj = this->GetObjectFileNameWithoutTarget(*sf, dir_len);
        if(!obj.empty())
          {
--- 647,654 ----
         !sf->GetPropertyAsBool("EXTERNAL_OBJECT"))
        {
!       std::string dir_max;
!       dir_max += this->Makefile->GetCurrentOutputDirectory();
!       dir_max += "/";
!       std::string obj = this->GetObjectFileNameWithoutTarget(*sf, dir_max);
        if(!obj.empty())
          {
***************
*** 2476,2480 ****
  cmLocalGenerator
  ::CreateSafeUniqueObjectFileName(const char* sin,
!                                  std::string::size_type dir_len)
  {
    // Look for an existing mapped name for this object file.
--- 2477,2481 ----
  cmLocalGenerator
  ::CreateSafeUniqueObjectFileName(const char* sin,
!                                  std::string const& dir_max)
  {
    // Look for an existing mapped name for this object file.
***************
*** 2537,2543 ****
  
  #if defined(CM_LG_ENCODE_OBJECT_NAMES)
!     cmLocalGeneratorCheckObjectName(ssin, dir_len, this->ObjectPathMax);
  #else
!     (void)dir_len;
  #endif
  
--- 2538,2563 ----
  
  #if defined(CM_LG_ENCODE_OBJECT_NAMES)
!     if(!cmLocalGeneratorCheckObjectName(ssin, dir_max.size(),
!                                         this->ObjectPathMax))
!       {
!       // Warn if this is the first time the path has been seen.
!       if(this->ObjectMaxPathViolations.insert(dir_max).second)
!         {
!         cmOStringStream m;
!         m << "The object file directory\n"
!           << "  " << dir_max << "\n"
!           << "has " << dir_max.size() << " characters.  "
!           << "The maximum full path to an object file is "
!           << this->ObjectPathMax << " characters "
!           << "(see CMAKE_OBJECT_PATH_MAX).  "
!           << "Object file\n"
!           << "  " << ssin << "\n"
!           << "cannot be safely placed under this directory.  "
!           << "The build may not work correctly.";
!         this->Makefile->IssueMessage(cmake::WARNING, m.str());
!         }
!       }
  #else
!     (void)dir_max;
  #endif
  
***************
*** 2555,2559 ****
  cmLocalGenerator
  ::GetObjectFileNameWithoutTarget(const cmSourceFile& source,
!                                  std::string::size_type dir_len,
                                   bool* hasSourceExtension)
  {
--- 2575,2579 ----
  cmLocalGenerator
  ::GetObjectFileNameWithoutTarget(const cmSourceFile& source,
!                                  std::string const& dir_max,
                                   bool* hasSourceExtension)
  {
***************
*** 2643,2647 ****
  
    // Convert to a safe name.
!   return this->CreateSafeUniqueObjectFileName(objectName.c_str(), dir_len);
  }
  
--- 2663,2667 ----
  
    // Convert to a safe name.
!   return this->CreateSafeUniqueObjectFileName(objectName.c_str(), dir_max);
  }
  

Index: cmInstallExportGenerator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmInstallExportGenerator.cxx,v
retrieving revision 1.8
retrieving revision 1.8.2.1
diff -C 2 -d -r1.8 -r1.8.2.1
*** cmInstallExportGenerator.cxx	28 Jan 2008 13:38:35 -0000	1.8
--- cmInstallExportGenerator.cxx	13 Jan 2009 18:03:52 -0000	1.8.2.1
***************
*** 204,207 ****
--- 204,231 ----
                                                       Indent const& indent)
  {
+   // Remove old per-configuration export files if the main changes.
+   std::string installedDir = "$ENV{DESTDIR}";
+   installedDir += this->GetInstallDestination();
+   installedDir += "/";
+   std::string installedFile = installedDir;
+   installedFile += this->FileName;
+   os << indent << "IF(EXISTS \"" << installedFile << "\")\n";
+   Indent indentN = indent.Next();
+   Indent indentNN = indentN.Next();
+   Indent indentNNN = indentNN.Next();
+   os << indentN << "FILE(DIFFERENT EXPORT_FILE_CHANGED FILES\n"
+      << indentN << "     \"" << installedFile << "\"\n"
+      << indentN << "     \"" << this->MainImportFile << "\")\n";
+   os << indentN << "IF(EXPORT_FILE_CHANGED)\n";
+   os << indentNN << "FILE(GLOB OLD_CONFIG_FILES \"" << installedDir
+      << this->EFGen->GetConfigImportFileGlob() << "\")\n";
+   os << indentNN << "IF(OLD_CONFIG_FILES)\n";
+   os << indentNNN << "MESSAGE(STATUS \"Old export file \\\"" << installedFile
+      << "\\\" will be replaced.  Removing files [${OLD_CONFIG_FILES}].\")\n";
+   os << indentNNN << "FILE(REMOVE ${OLD_CONFIG_FILES})\n";
+   os << indentNN << "ENDIF(OLD_CONFIG_FILES)\n";
+   os << indentN << "ENDIF(EXPORT_FILE_CHANGED)\n";
+   os << indent << "ENDIF()\n";
+ 
    // Install the main export file.
    std::vector<std::string> files;

Index: cmFileCommand.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmFileCommand.cxx,v
retrieving revision 1.103.2.7
retrieving revision 1.103.2.8
diff -C 2 -d -r1.103.2.7 -r1.103.2.8
*** cmFileCommand.cxx	12 Sep 2008 14:56:20 -0000	1.103.2.7
--- cmFileCommand.cxx	13 Jan 2009 18:03:52 -0000	1.103.2.8
***************
*** 113,116 ****
--- 113,120 ----
      return this->HandleInstallCommand(args);
      }
+   else if ( subCommand == "DIFFERENT" )
+     {
+     return this->HandleDifferentCommand(args);
+     }
    else if ( subCommand == "RPATH_CHANGE" || subCommand == "CHRPATH" )
      {
***************
*** 832,835 ****
--- 836,900 ----
  
  //----------------------------------------------------------------------------
+ bool
+ cmFileCommand::HandleDifferentCommand(std::vector<std::string> const& args)
+ {
+   /*
+     FILE(DIFFERENT <variable> FILES <lhs> <rhs>)
+    */
+ 
+   // Evaluate arguments.
+   const char* file_lhs = 0;
+   const char* file_rhs = 0;
+   const char* var = 0;
+   enum Doing { DoingNone, DoingVar, DoingFileLHS, DoingFileRHS };
+   Doing doing = DoingVar;
+   for(unsigned int i=1; i < args.size(); ++i)
+     {
+     if(args[i] == "FILES")
+       {
+       doing = DoingFileLHS;
+       }
+     else if(doing == DoingVar)
+       {
+       var = args[i].c_str();
+       doing = DoingNone;
+       }
+     else if(doing == DoingFileLHS)
+       {
+       file_lhs = args[i].c_str();
+       doing = DoingFileRHS;
+       }
+     else if(doing == DoingFileRHS)
+       {
+       file_rhs = args[i].c_str();
+       doing = DoingNone;
+       }
+     else
+       {
+       cmOStringStream e;
+       e << "DIFFERENT given unknown argument " << args[i];
+       this->SetError(e.str().c_str());
+       return false;
+       }
+     }
+   if(!var)
+     {
+     this->SetError("DIFFERENT not given result variable name.");
+     return false;
+     }
+   if(!file_lhs || !file_rhs)
+     {
+     this->SetError("DIFFERENT not given FILES option with two file names.");
+     return false;
+     }
+ 
+   // Compare the files.
+   const char* result =
+     cmSystemTools::FilesDiffer(file_lhs, file_rhs)? "1" : "0";
+   this->Makefile->AddDefinition(var, result);
+   return true;
+ }
+ 
+ //----------------------------------------------------------------------------
  // File installation helper class.
  struct cmFileInstaller
***************
*** 1050,1054 ****
  
    // Copy the file.
!   if(copy && !cmSystemTools::CopyAFile(fromFile, toFile, true))
      {
      cmOStringStream e;
--- 1115,1119 ----
  
    // Copy the file.
!   if(copy && !cmSystemTools::CopyAFile(fromFile, toFile, true, false))
      {
      cmOStringStream e;
***************
*** 1065,1069 ****
    if(copy && !always)
      {
!     cmSystemTools::CopyFileTime(fromFile, toFile);
      }
  
--- 1130,1140 ----
    if(copy && !always)
      {
!     if (!cmSystemTools::CopyFileTime(fromFile, toFile))
!       {
!       cmOStringStream e;
!       e << "Problem setting modification time on file \"" << toFile << "\"";
!       this->FileCommand->SetError(e.str().c_str());
!       return false;
!       }
      }
  
***************
*** 1683,1691 ****
  {
      std::string stype = "FILES";
!     bool doing_files = false;
!     bool doing_properties = false;
!     bool doing_permissions_file = false;
!     bool doing_permissions_dir = false;
!     bool doing_permissions_match = false;
      bool use_given_permissions_file = false;
      bool use_given_permissions_dir = false;
--- 1754,1761 ----
  {
      std::string stype = "FILES";
!     enum Doing { DoingNone, DoingFiles, DoingProperties,
!                  DoingPermissionsFile, DoingPermissionsDir,
!                  DoingPermissionsMatch, DoingSelf24 };
!     Doing doing = DoingNone;
      bool use_given_permissions_file = false;
      bool use_given_permissions_dir = false;
***************
*** 1712,1719 ****
          i++;
          destination = args[i];
!         doing_files = false;
!         doing_properties = false;
!         doing_permissions_file = false;
!         doing_permissions_dir = false;
          }
        else if ( *cstr == "TYPE" && i < args.size()-1 )
--- 1782,1786 ----
          i++;
          destination = args[i];
!         doing = DoingNone;
          }
        else if ( *cstr == "TYPE" && i < args.size()-1 )
***************
*** 1734,1741 ****
            optional = true;
            }
!         doing_properties = false;
!         doing_files = false;
!         doing_permissions_file = false;
!         doing_permissions_dir = false;
          }
        else if ( *cstr == "RENAME" && i < args.size()-1 )
--- 1801,1805 ----
            optional = true;
            }
!         doing = DoingNone;
          }
        else if ( *cstr == "RENAME" && i < args.size()-1 )
***************
*** 1751,1758 ****
          i++;
          rename = args[i];
!         doing_properties = false;
!         doing_files = false;
!         doing_permissions_file = false;
!         doing_permissions_dir = false;
          }
        else if ( *cstr == "REGEX" && i < args.size()-1 )
--- 1815,1819 ----
          i++;
          rename = args[i];
!         doing = DoingNone;
          }
        else if ( *cstr == "REGEX" && i < args.size()-1 )
***************
*** 1768,1775 ****
            return false;
            }
!         doing_properties = false;
!         doing_files = false;
!         doing_permissions_file = false;
!         doing_permissions_dir = false;
          }
        else if ( *cstr == "EXCLUDE"  )
--- 1829,1833 ----
            return false;
            }
!         doing = DoingNone;
          }
        else if ( *cstr == "EXCLUDE"  )
***************
*** 1785,1789 ****
            }
          current_match_rule->Properties.Exclude = true;
!         doing_permissions_match = true;
          }
        else if ( *cstr == "PROPERTIES"  )
--- 1843,1847 ----
            }
          current_match_rule->Properties.Exclude = true;
!         doing = DoingPermissionsMatch;
          }
        else if ( *cstr == "PROPERTIES"  )
***************
*** 1797,1804 ****
            }
  
!         doing_properties = true;
!         doing_files = false;
!         doing_permissions_file = false;
!         doing_permissions_dir = false;
          }
        else if ( *cstr == "PERMISSIONS" )
--- 1855,1859 ----
            }
  
!         doing = DoingProperties;
          }
        else if ( *cstr == "PERMISSIONS" )
***************
*** 1806,1821 ****
          if(current_match_rule)
            {
!           doing_permissions_match = true;
!           doing_permissions_file = false;
            }
          else
            {
!           doing_permissions_match = false;
!           doing_permissions_file = true;
            use_given_permissions_file = true;
            }
-         doing_properties = false;
-         doing_files = false;
-         doing_permissions_dir = false;
          }
        else if ( *cstr == "DIR_PERMISSIONS" )
--- 1861,1871 ----
          if(current_match_rule)
            {
!           doing = DoingPermissionsMatch;
            }
          else
            {
!           doing = DoingPermissionsFile;
            use_given_permissions_file = true;
            }
          }
        else if ( *cstr == "DIR_PERMISSIONS" )
***************
*** 1830,1837 ****
  
          use_given_permissions_dir = true;
!         doing_properties = false;
!         doing_files = false;
!         doing_permissions_file = false;
!         doing_permissions_dir = true;
          }
        else if ( *cstr == "USE_SOURCE_PERMISSIONS" )
--- 1880,1884 ----
  
          use_given_permissions_dir = true;
!         doing = DoingPermissionsDir;
          }
        else if ( *cstr == "USE_SOURCE_PERMISSIONS" )
***************
*** 1845,1852 ****
            }
  
!         doing_properties = false;
!         doing_files = false;
!         doing_permissions_file = false;
!         doing_permissions_dir = false;
          use_source_permissions = true;
          }
--- 1892,1896 ----
            }
  
!         doing = DoingNone;
          use_source_permissions = true;
          }
***************
*** 1861,1872 ****
            }
  
!         doing_properties = false;
!         doing_files = false;
!         doing_permissions_file = false;
!         doing_permissions_dir = false;
          installer.MatchlessFiles = false;
          }
        else if ( *cstr == "COMPONENTS"  )
          {
          cmOStringStream e;
          e << "INSTALL called with old-style COMPONENTS argument.  "
--- 1905,1921 ----
            }
  
!         doing = DoingNone;
          installer.MatchlessFiles = false;
          }
        else if ( *cstr == "COMPONENTS"  )
          {
+         if(this->Makefile->IsOn("CMAKE_INSTALL_SELF_2_4"))
+           {
+           // When CMake 2.4 builds this CMake version we need to support
+           // the install scripts it generates since it asks this CMake
+           // to install itself using the rules it generated.
+           doing = DoingSelf24;
+           continue;
+           }
          cmOStringStream e;
          e << "INSTALL called with old-style COMPONENTS argument.  "
***************
*** 1885,1889 ****
          return false;
          }
!       else if ( *cstr == "FILES" && !doing_files)
          {
          if(current_match_rule)
--- 1934,1938 ----
          return false;
          }
!       else if(*cstr == "FILES" && doing != DoingFiles)
          {
          if(current_match_rule)
***************
*** 1895,1913 ****
            }
  
!         doing_files = true;
!         doing_properties = false;
!         doing_permissions_file = false;
!         doing_permissions_dir = false;
          }
!       else if ( doing_properties && i < args.size()-1 )
          {
          properties[args[i]] = args[i+1].c_str();
          i++;
          }
!       else if ( doing_files )
          {
          files.push_back(*cstr);
          }
!       else if(doing_permissions_file)
          {
          if(!installer.CheckPermissions(args[i], permissions_file))
--- 1944,1959 ----
            }
  
!         doing = DoingFiles;
          }
!       else if(doing == DoingProperties && i < args.size()-1)
          {
          properties[args[i]] = args[i+1].c_str();
          i++;
          }
!       else if(doing == DoingFiles)
          {
          files.push_back(*cstr);
          }
!       else if(doing == DoingPermissionsFile)
          {
          if(!installer.CheckPermissions(args[i], permissions_file))
***************
*** 1916,1920 ****
            }
          }
!       else if(doing_permissions_dir)
          {
          if(!installer.CheckPermissions(args[i], permissions_dir))
--- 1962,1966 ----
            }
          }
!       else if(doing == DoingPermissionsDir)
          {
          if(!installer.CheckPermissions(args[i], permissions_dir))
***************
*** 1923,1927 ****
            }
          }
!       else if(doing_permissions_match)
          {
          if(!installer.CheckPermissions(
--- 1969,1973 ----
            }
          }
!       else if(doing == DoingPermissionsMatch)
          {
          if(!installer.CheckPermissions(
***************
*** 1931,1934 ****
--- 1977,1987 ----
            }
          }
+       else if(doing == DoingSelf24)
+         {
+         // Ignore these arguments for compatibility.  This should be
+         // reached only when CMake 2.4 is installing the current
+         // CMake.  It can be removed when CMake 2.6 or higher is
+         // required to build CMake.
+         }
        else
          {

Index: cmFindPackageCommand.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmFindPackageCommand.cxx,v
retrieving revision 1.36.2.6
retrieving revision 1.36.2.7
diff -C 2 -d -r1.36.2.6 -r1.36.2.7
*** cmFindPackageCommand.cxx	31 Dec 2008 15:14:29 -0000	1.36.2.6
--- cmFindPackageCommand.cxx	13 Jan 2009 18:03:52 -0000	1.36.2.7
***************
*** 711,725 ****
      }
  
!   // Search for the config file if it is not already found.
!   if(cmSystemTools::IsOff(def))
!     {
!     this->FindConfig();
!     def = this->Makefile->GetDefinition(this->Variable.c_str());
!     }
! 
!   // If the config file was found, load it.
!   std::string file;
!   bool result = true;
!   bool found = false;
    if(!cmSystemTools::IsOff(def))
      {
--- 711,716 ----
      }
  
!   // Try to load the config file if the directory is known
!   bool cachedDirectoryOk = false;
    if(!cmSystemTools::IsOff(def))
      {
***************
*** 734,769 ****
        dir = this->Makefile->GetCurrentDirectory() + dir;
        }
! 
!     // Find the configuration file.
!     if(this->FindConfigFileToLoad(dir, file))
        {
!       // Set the version variables before loading the config file.
!       // It may override them.
!       this->StoreVersionFound();
  
!       // Parse the configuration file.
!       if(this->ReadListFile(file.c_str()))
!         {
!         // The package has been found.
!         found = true;
!         }
!       else
!         {
!         // The configuration file is invalid.
!         result = false;
!         }
        }
      else
        {
!       // The variable setting is wrong.
!       cmOStringStream e;
!       e << "cannot find package " << this->Name << " because "
!         << this->Variable << " is set to \"" << def << "\" "
!         << "which is not a directory containing a package configuration "
!         << "file (or it is not for the requested version).  "
!         << "Please set the cache entry " << this->Variable << " "
!         << "to the correct directory, or delete it to ask CMake "
!         << "to search.";
!       this->SetError(e.str().c_str());
        result = false;
        }
--- 725,766 ----
        dir = this->Makefile->GetCurrentDirectory() + dir;
        }
!     // The file location was cached.  Look for the correct file.
!     std::string file;
!     if (this->FindConfigFile(dir, file))
        {
!       this->FileFound = file;
!       cachedDirectoryOk = true;
!       }
!     def = this->Makefile->GetDefinition(this->Variable.c_str());
!     }
  
!   // Search for the config file if it is not already found.
!   if(cmSystemTools::IsOff(def) || !cachedDirectoryOk)
!     {
!     this->FindConfig();
!     def = this->Makefile->GetDefinition(this->Variable.c_str());
!     }
! 
!   // If the directory for the config file was found, try to read the file.
!   bool result = true;
!   bool found = false;
!   // in the following test FileFound should never be empty if def is valid
!   // but I don't want to put an assert() in there now, in case this still
!   // makes it into 2.6.3
!   if(!cmSystemTools::IsOff(def) && (!this->FileFound.empty()))
!     {
!     // Set the version variables before loading the config file.
!     // It may override them.
!     this->StoreVersionFound();
! 
!     // Parse the configuration file.
!     if(this->ReadListFile(this->FileFound.c_str()))
!       {
!       // The package has been found.
!       found = true;
        }
      else
        {
!       // The configuration file is invalid.
        result = false;
        }
***************
*** 817,821 ****
    if(found)
      {
!     this->Makefile->AddDefinition(fileVar.c_str(), file.c_str());
      }
    else
--- 814,818 ----
    if(found)
      {
!     this->Makefile->AddDefinition(fileVar.c_str(), this->FileFound.c_str());
      }
    else
***************
*** 1246,1267 ****
  
  //----------------------------------------------------------------------------
- bool cmFindPackageCommand::FindConfigFileToLoad(std::string const& dir,
-                                                 std::string& file)
- {
-   if(this->FileFound.empty())
-     {
-     // The file location was cached.  Look for the correct file.
-     return this->FindConfigFile(dir, file);
-     }
-   else
-     {
-     // The file location was just found during this call.
-     // Use the file found without searching again.
-     file = this->FileFound;
-     return true;
-     }
- }
- 
- //----------------------------------------------------------------------------
  bool cmFindPackageCommand::CheckVersion(std::string const& config_file)
  {
--- 1243,1246 ----

Index: cmExportInstallFileGenerator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmExportInstallFileGenerator.cxx,v
retrieving revision 1.8
retrieving revision 1.8.2.1
diff -C 2 -d -r1.8 -r1.8.2.1
*** cmExportInstallFileGenerator.cxx	6 Feb 2008 19:20:35 -0000	1.8
--- cmExportInstallFileGenerator.cxx	13 Jan 2009 18:03:51 -0000	1.8.2.1
***************
*** 29,32 ****
--- 29,41 ----
  
  //----------------------------------------------------------------------------
+ std::string cmExportInstallFileGenerator::GetConfigImportFileGlob()
+ {
+   std::string glob = this->FileBase;
+   glob += "-*";
+   glob += this->FileExt;
+   return glob;
+ }
+ 
+ //----------------------------------------------------------------------------
  bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os)
  {
***************
*** 56,60 ****
       << "GET_FILENAME_COMPONENT(_DIR \"${CMAKE_CURRENT_LIST_FILE}\" PATH)\n"
       << "FILE(GLOB CONFIG_FILES \"${_DIR}/"
!      << this->FileBase << "-*" << this->FileExt << "\")\n"
       << "FOREACH(f ${CONFIG_FILES})\n"
       << "  INCLUDE(${f})\n"
--- 65,69 ----
       << "GET_FILENAME_COMPONENT(_DIR \"${CMAKE_CURRENT_LIST_FILE}\" PATH)\n"
       << "FILE(GLOB CONFIG_FILES \"${_DIR}/"
!      << this->GetConfigImportFileGlob() << "\")\n"
       << "FOREACH(f ${CONFIG_FILES})\n"
       << "  INCLUDE(${f})\n"

Index: cmTargetLinkLibrariesCommand.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmTargetLinkLibrariesCommand.h,v
retrieving revision 1.15.2.1
retrieving revision 1.15.2.2
diff -C 2 -d -r1.15.2.1 -r1.15.2.2
*** cmTargetLinkLibrariesCommand.h	3 Sep 2008 13:43:18 -0000	1.15.2.1
--- cmTargetLinkLibrariesCommand.h	13 Jan 2009 18:03:53 -0000	1.15.2.2
***************
*** 75,79 ****
        "the library immediately following it is to be used only for the "
        "corresponding build configuration.  "
!       "The \"debug\" keyword corresponds to the Debug configuration.  "
        "The \"optimized\" keyword corresponds to all other configurations.  "
        "The \"general\" keyword corresponds to all configurations, and is "
--- 75,81 ----
        "the library immediately following it is to be used only for the "
        "corresponding build configuration.  "
!       "The \"debug\" keyword corresponds to the Debug configuration "
!       "(or to configurations named in the DEBUG_CONFIGURATIONS global "
!       "property if it is set).  "
        "The \"optimized\" keyword corresponds to all other configurations.  "
        "The \"general\" keyword corresponds to all configurations, and is "
***************
*** 94,105 ****
        "                        [[debug|optimized|general] <lib>] ...)\n"
        "The LINK_INTERFACE_LIBRARIES mode appends the libraries "
!       "to the LINK_INTERFACE_LIBRARIES and LINK_INTERFACE_LIBRARIES_DEBUG "
        "target properties instead of using them for linking.  "
        "Libraries specified as \"debug\" are appended to the "
!       "the LINK_INTERFACE_LIBRARIES_DEBUG property.  "
        "Libraries specified as \"optimized\" are appended to the "
        "the LINK_INTERFACE_LIBRARIES property.  "
        "Libraries specified as \"general\" (or without any keyword) are "
!       "appended to both properties."
        ;
      }
--- 96,109 ----
        "                        [[debug|optimized|general] <lib>] ...)\n"
        "The LINK_INTERFACE_LIBRARIES mode appends the libraries "
!       "to the LINK_INTERFACE_LIBRARIES and its per-configuration equivalent "
        "target properties instead of using them for linking.  "
        "Libraries specified as \"debug\" are appended to the "
!       "the LINK_INTERFACE_LIBRARIES_DEBUG property (or to the properties "
!       "corresponding to configurations listed in the DEBUG_CONFIGURATIONS "
!       "global property if it is set).  "
        "Libraries specified as \"optimized\" are appended to the "
        "the LINK_INTERFACE_LIBRARIES property.  "
        "Libraries specified as \"general\" (or without any keyword) are "
!       "treated as if specified for both \"debug\" and \"optimized\"."
        ;
      }

Index: cmLocalGenerator.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmLocalGenerator.h,v
retrieving revision 1.103.2.2
retrieving revision 1.103.2.3
diff -C 2 -d -r1.103.2.2 -r1.103.2.3
*** cmLocalGenerator.h	24 Oct 2008 15:18:48 -0000	1.103.2.2
--- cmLocalGenerator.h	13 Jan 2009 18:03:52 -0000	1.103.2.3
***************
*** 341,348 ****
    // Compute object file names.
    std::string GetObjectFileNameWithoutTarget(const cmSourceFile& source,
!                                              std::string::size_type dir_len,
                                               bool* hasSourceExtension = 0);
    std::string& CreateSafeUniqueObjectFileName(const char* sin,
!                                               std::string::size_type dir_len);
  
    void ConfigureRelativePaths();
--- 341,348 ----
    // Compute object file names.
    std::string GetObjectFileNameWithoutTarget(const cmSourceFile& source,
!                                              std::string const& dir_max,
                                               bool* hasSourceExtension = 0);
    std::string& CreateSafeUniqueObjectFileName(const char* sin,
!                                               std::string const& dir_max);
  
    void ConfigureRelativePaths();
***************
*** 371,374 ****
--- 371,375 ----
    std::map<cmStdString, cmStdString> UniqueObjectNamesMap;
    std::string::size_type ObjectPathMax;
+   std::set<cmStdString> ObjectMaxPathViolations;
    bool WindowsShell;
    bool WindowsVSIDE;

Index: cmInstallTargetGenerator.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmInstallTargetGenerator.h,v
retrieving revision 1.24.2.3
retrieving revision 1.24.2.4
diff -C 2 -d -r1.24.2.3 -r1.24.2.4
*** cmInstallTargetGenerator.h	24 Oct 2008 15:18:48 -0000	1.24.2.3
--- cmInstallTargetGenerator.h	13 Jan 2009 18:03:52 -0000	1.24.2.4
***************
*** 65,69 ****
  
  protected:
-   typedef cmInstallGeneratorIndent Indent;
    virtual void GenerateScript(std::ostream& os);
    virtual void GenerateScriptConfigs(std::ostream& os, Indent const& indent);
--- 65,68 ----

Index: cmComputeLinkDepends.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmComputeLinkDepends.cxx,v
retrieving revision 1.12.2.6
retrieving revision 1.12.2.7
diff -C 2 -d -r1.12.2.6 -r1.12.2.7
*** cmComputeLinkDepends.cxx	3 Sep 2008 13:43:17 -0000	1.12.2.6
--- cmComputeLinkDepends.cxx	13 Jan 2009 18:03:49 -0000	1.12.2.7
***************
*** 189,192 ****
--- 189,193 ----
    // The configuration being linked.
    this->Config = (config && *config)? config : 0;
+   this->LinkType = this->Target->ComputeLinkType(this->Config);
  
    // Enable debug mode if requested.
***************
*** 447,457 ****
    cmSystemTools::ExpandListArgument(value, deplist);
  
-   // Compute which library configuration to link.
-   cmTarget::LinkLibraryType linkType = cmTarget::OPTIMIZED;
-   if(this->Config && cmSystemTools::UpperCase(this->Config) == "DEBUG")
-     {
-     linkType = cmTarget::DEBUG;
-     }
- 
    // Look for entries meant for this configuration.
    std::vector<std::string> actual_libs;
--- 448,451 ----
***************
*** 501,505 ****
  
        // If the library is meant for this link type then use it.
!       if(llt == cmTarget::GENERAL || llt == linkType)
          {
          actual_libs.push_back(*di);
--- 495,499 ----
  
        // If the library is meant for this link type then use it.
!       if(llt == cmTarget::GENERAL || llt == this->LinkType)
          {
          actual_libs.push_back(*di);
***************
*** 525,535 ****
                                             LinkLibraryVectorType const& libs)
  {
-   // Compute which library configuration to link.
-   cmTarget::LinkLibraryType linkType = cmTarget::OPTIMIZED;
-   if(this->Config && cmSystemTools::UpperCase(this->Config) == "DEBUG")
-     {
-     linkType = cmTarget::DEBUG;
-     }
- 
    // Look for entries meant for this configuration.
    std::vector<std::string> actual_libs;
--- 519,522 ----
***************
*** 537,541 ****
        li != libs.end(); ++li)
      {
!     if(li->second == cmTarget::GENERAL || li->second == linkType)
        {
        actual_libs.push_back(li->first);
--- 524,528 ----
        li != libs.end(); ++li)
      {
!     if(li->second == cmTarget::GENERAL || li->second == this->LinkType)
        {
        actual_libs.push_back(li->first);

Index: cmExportInstallFileGenerator.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmExportInstallFileGenerator.h,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -C 2 -d -r1.2 -r1.2.2.1
*** cmExportInstallFileGenerator.h	1 Feb 2008 13:56:00 -0000	1.2
--- cmExportInstallFileGenerator.h	13 Jan 2009 18:03:51 -0000	1.2.2.1
***************
*** 60,63 ****
--- 60,67 ----
    std::map<cmStdString, cmStdString> const& GetConfigImportFiles()
      { return this->ConfigImportFiles; }
+ 
+   /** Compute the globbing expression used to load per-config import
+       files from the main file.  */
+   std::string GetConfigImportFileGlob();
  protected:
  

Index: cmLocalUnixMakefileGenerator3.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmLocalUnixMakefileGenerator3.cxx,v
retrieving revision 1.240.2.7
retrieving revision 1.240.2.8
diff -C 2 -d -r1.240.2.7 -r1.240.2.8
*** cmLocalUnixMakefileGenerator3.cxx	24 Oct 2008 15:18:48 -0000	1.240.2.7
--- cmLocalUnixMakefileGenerator3.cxx	13 Jan 2009 18:03:52 -0000	1.240.2.8
***************
*** 1929,1938 ****
  
    // Get the object file name without the target directory.
!   std::string::size_type dir_len = 0;
!   dir_len += strlen(this->Makefile->GetCurrentOutputDirectory());
!   dir_len += 1;
!   dir_len += obj.size();
    std::string objectName =
!     this->GetObjectFileNameWithoutTarget(source, dir_len,
                                           hasSourceExtension);
    if(nameWithoutTargetDir)
--- 1929,1938 ----
  
    // Get the object file name without the target directory.
!   std::string dir_max;
!   dir_max += this->Makefile->GetCurrentOutputDirectory();
!   dir_max += "/";
!   dir_max += obj;
    std::string objectName =
!     this->GetObjectFileNameWithoutTarget(source, dir_max,
                                           hasSourceExtension);
    if(nameWithoutTargetDir)

Index: cmFileCommand.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmFileCommand.h,v
retrieving revision 1.35.2.5
retrieving revision 1.35.2.6
diff -C 2 -d -r1.35.2.5 -r1.35.2.6
*** cmFileCommand.h	31 Dec 2008 15:14:29 -0000	1.35.2.5
--- cmFileCommand.h	13 Jan 2009 18:03:52 -0000	1.35.2.6
***************
*** 173,176 ****
--- 173,177 ----
    bool HandleRPathCheckCommand(std::vector<std::string> const& args);
    bool HandleRPathRemoveCommand(std::vector<std::string> const& args);
+   bool HandleDifferentCommand(std::vector<std::string> const& args);
  
    // file(INSTALL ...) related functions



More information about the Cmake-commits mailing list