[cmake-commits] alex committed CMakeLists.txt 1.365 1.366 cmGlobalGenerator.cxx 1.187 1.188 cmGlobalGenerator.h 1.83 1.84 cmInstallCommand.cxx 1.22 1.23 cmInstallCommand.h 1.18 1.19 cmInstallExportGenerator.cxx NONE 1.1 cmInstallExportGenerator.h NONE 1.1

cmake-commits at cmake.org cmake-commits at cmake.org
Tue Jun 19 13:10:23 EDT 2007


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

Modified Files:
	CMakeLists.txt cmGlobalGenerator.cxx cmGlobalGenerator.h 
	cmInstallCommand.cxx cmInstallCommand.h 
Added Files:
	cmInstallExportGenerator.cxx cmInstallExportGenerator.h 
Log Message:

ENH: add INSTALL(EXPORT ...) mode and INSTALL( TARGETS ... EXPORT <set> ) ,
tests still have to be added

Alex


--- NEW FILE: cmInstallExportGenerator.cxx ---
/*=========================================================================

  Program:   CMake - Cross-Platform Makefile Generator
  Module:    $RCSfile: cmInstallExportGenerator.cxx,v $
  Language:  C++
  Date:      $Date: 2007/06/19 17:10:21 $
  Version:   $Revision: 1.1 $

  Copyright (c) 2002 Kitware, Inc., Insight Consortium.  All rights reserved.
  See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notices for more information.

=========================================================================*/

#include <stdio.h>

#include "cmInstallTargetGenerator.h"
#include "cmGeneratedFileStream.h"
#include "cmTarget.h"

#include "cmInstallExportGenerator.h"

cmInstallExportGenerator::cmInstallExportGenerator(const char* destination,
    const char* file_permissions,
    std::vector<std::string> const& configurations,
    const char* filename, const char* prefix, const char* tempOutputDir)
  :cmInstallGenerator(destination)
  ,FilePermissions(file_permissions)
  ,Configurations(configurations)
  ,Filename(filename)
  ,Prefix(prefix)
  ,TempOutputDir(tempOutputDir)
{
}

/* Helper function which adds the install locations from the generator
to the properties for this target.
*/
bool cmInstallExportGenerator::AddInstallLocations(cmTargetWithProperties* twp,
                                           cmInstallTargetGenerator* generator,
                                           const char* prefix)
{
  if (generator == 0) // nothing to do
    {
    return true;
    }

  if (prefix == 0)
    {
    prefix = "";
    }

  const std::vector<std::string>& configs = generator->GetConfigurations();
  if (configs.empty())
    {
    std::string propertyName = prefix;
    propertyName += "LOCATION";
    // check that this property doesn't exist yet and add it then
    if (twp->Properties.find(propertyName.c_str())== twp->Properties.end())
      {
      std::string destinationFilename = generator->GetDestination();
      destinationFilename += "/";
      destinationFilename += generator->GetInstallFilename(0);
      twp->Properties[propertyName.c_str()] = destinationFilename;
      }
    else
      {
      return false;
      }
    }
  else
    {
    for(std::vector<std::string>::const_iterator configIt = configs.begin();
        configIt != configs.end();
        ++configIt)
      {
      std::string propertyName = configIt->c_str();
      propertyName +=  "_";
      propertyName += prefix;
      propertyName += "LOCATION";
      // check that this property doesn't exist yet and add it then
      if (twp->Properties.find(propertyName.c_str())== twp->Properties.end())
        {
        std::string destinationFilename = generator->GetDestination();
        destinationFilename += "/";
        destinationFilename +=generator->GetInstallFilename(configIt->c_str());
        twp->Properties[propertyName.c_str()] = destinationFilename;
        }
      else
        {
        return false;
        }
      }
    }
  return true;
}


bool cmInstallExportGenerator::SetExportSet(const char* name,
                                       const std::vector<cmTargetExport*>* set)
{
  if ((name == 0) || (*name == 0) || (set==0))
    {
    return false;
    }

  this->Name = name;

  /* iterate over all targets in the set.
  If a cmTargetWithProperties with the same name already exists in this 
  generator, add the new properties to it. If the property already exists, 
  fail with an error.
  If no cmTargetWithProperties exists, create a new one.
  */
  for(std::vector<cmTargetExport*>::const_iterator it=set->begin();
      it != set->end();
      ++it)
    {
    std::string targetName = (*it)->Target->GetName();

    cmTargetWithProperties* targetWithProps = 0;
    for(unsigned int i=0; i<this->Targets.size(); i++)
      {
      if (targetName == this->Targets[i]->Target->GetName())
        {
        targetWithProps = this->Targets[i];
        }
      }

    if (targetWithProps == 0)
      {
      targetWithProps = new cmTargetWithProperties((*it)->Target);
      this->Targets.push_back(targetWithProps);
      }

    if (this->AddInstallLocations(targetWithProps, (*it)->ArchiveGenerator, 
                                  "ARCHIVE_") == false)
      {
      return false;
      }
    if (this->AddInstallLocations(targetWithProps, (*it)->RuntimeGenerator, 
                                  "") == false)
      {
      return false;
      }
    if (this->AddInstallLocations(targetWithProps, (*it)->LibraryGenerator, 
                                  "LIBRARY_") == false)
      {
      return false;
      }
    }

  return true;
}

void cmInstallExportGenerator::GenerateScript(std::ostream& os)
{
  // for the case that somebody exports the same set with the same file name 
  // to different locations make the temp filename unique
  char buf[64];
  snprintf(buf, 64, "%p", this);
  this->ExportFilename = this->TempOutputDir;
  this->ExportFilename += "/";
  this->ExportFilename += this->Filename;
  this->ExportFilename += ".";
  this->ExportFilename += buf;

  cmGeneratedFileStream exportFileStream(this->ExportFilename.c_str());
  if(!exportFileStream)
    {
    return;
    }

  /* for every target add the IMPORT statements and set the properties
    of the target.  */
  for(std::vector<cmTargetWithProperties*>::const_iterator 
      targetIt = this->Targets.begin();
      targetIt != this->Targets.end();
      ++targetIt)
    {
      switch ((*targetIt)->Target->GetType())
        {
        case cmTarget::EXECUTABLE:
          exportFileStream << "ADD_EXECUTABLE(" << this->Prefix.c_str() 
                           << (*targetIt)->Target->GetName() 
                           << " IMPORT )\n";
          break;
        case cmTarget::STATIC_LIBRARY:
          exportFileStream << "ADD_LIBRARY(" << this->Prefix.c_str() 
                           << (*targetIt)->Target->GetName() 
                           << " STATIC IMPORT )\n";
          break;
        case cmTarget::SHARED_LIBRARY:
          exportFileStream << "ADD_LIBRARY(" << this->Prefix.c_str() 
                           << (*targetIt)->Target->GetName()
                           << " SHARED IMPORT )\n";
          break;
        case cmTarget::MODULE_LIBRARY:
          exportFileStream << "ADD_LIBRARY(" << this->Prefix.c_str() 
                           << (*targetIt)->Target->GetName()
                           << " MODULE IMPORT )\n";
          break;
        default:  // should never happen
          break;
        }

      exportFileStream << "SET_TARGET_PROPERTIES ( " << this->Prefix.c_str() 
                       << (*targetIt)->Target->GetName() << " PROPERTIES \n";

      for (std::map<std::string, std::string>::const_iterator
           propIt = (*targetIt)->Properties.begin();
           propIt != (*targetIt)->Properties.end();
           ++propIt)
        {
        exportFileStream << "                     " << propIt->first 
                         << " \"" << propIt->second << "\"\n";
        }
      exportFileStream << "                      )\n\n";
    }

  // install rule for the file created above
  this->AddInstallRule(os, this->Destination.c_str(), cmTarget::INSTALL_FILES, 
                       this->ExportFilename.c_str(), false, 0, 
                       this->FilePermissions.c_str(), 0, this->Configurations, 
                       0, this->Filename.c_str(), 0);

}


Index: cmGlobalGenerator.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmGlobalGenerator.h,v
retrieving revision 1.83
retrieving revision 1.84
diff -u -d -r1.83 -r1.84
--- cmGlobalGenerator.h	18 Jun 2007 15:59:23 -0000	1.83
+++ cmGlobalGenerator.h	19 Jun 2007 17:10:21 -0000	1.84
@@ -27,6 +27,8 @@
 class cmLocalGenerator;
 class cmExternalMakefileProjectGenerator;
 class cmTarget;
+class cmTargetExport;
+class cmInstallTargetGenerator;
 
 /** \class cmGlobalGenerator
  * \brief Responable for overseeing the generation process for the entire tree
@@ -129,8 +131,17 @@
   const char* GetExtraGeneratorName() const;
 
   void AddInstallComponent(const char* component);
+
+  ///! Add one installed target to the sets of the exports
+  void AddTargetToExports(const char* exportSet, cmTarget* target, 
+                          cmInstallTargetGenerator* archive,
+                          cmInstallTargetGenerator* runTime,
+                          cmInstallTargetGenerator* library);
+  ///! Get the export target set with the   given name
+  const std::vector<cmTargetExport*>* GetExportSet(const char* name) const;
+
   void EnableInstallTarget();
-  
+
   int TryCompileTimeout;
   
   bool GetForceUnixPaths() {return this->ForceUnixPaths;}
@@ -231,6 +242,8 @@
   // Set of named installation components requested by the project.
   std::set<cmStdString> InstallComponents;
   bool InstallTargetEnabled;
+  // Sets of named target exports
+  std::map<cmStdString, std::vector<cmTargetExport*> > ExportSets;
 
   // Manifest of all targets that will be built for each configuration.
   // This is computed just before local generators generate.

Index: cmGlobalGenerator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmGlobalGenerator.cxx,v
retrieving revision 1.187
retrieving revision 1.188
diff -u -d -r1.187 -r1.188
--- cmGlobalGenerator.cxx	18 Jun 2007 15:59:23 -0000	1.187
+++ cmGlobalGenerator.cxx	19 Jun 2007 17:10:21 -0000	1.188
@@ -21,6 +21,7 @@
 #include "cmMakefile.h"
 #include "cmSourceFile.h"
 #include "cmVersion.h"
+#include "cmInstallExportGenerator.h"
 
 #include <stdlib.h> // required for atof
 
@@ -56,8 +57,7 @@
 cmGlobalGenerator::~cmGlobalGenerator()
 {
   // Delete any existing cmLocalGenerators
-  unsigned int i;
-  for (i = 0; i < this->LocalGenerators.size(); ++i)
+  for (unsigned int i = 0; i < this->LocalGenerators.size(); ++i)
     {
     delete this->LocalGenerators[i];
     }
@@ -67,6 +67,17 @@
     {
     delete this->ExtraGenerator;
     }
+
+  for (std::map<cmStdString, std::vector<cmTargetExport*> >::iterator 
+       setIt = this->ExportSets.begin();
+       setIt != this->ExportSets.end();
+       ++setIt)
+    {
+      for (unsigned int i = 0; i < setIt->second.size(); ++i)
+        {
+        delete setIt->second[i];
+        }
+    }
 }
 
 // Find the make program for the generator, required for try compiles
@@ -1014,6 +1025,33 @@
     }
 }
 
+void cmGlobalGenerator::AddTargetToExports(const char* exportSetName, 
+                                           cmTarget* target, 
+                                           cmInstallTargetGenerator* archive,
+                                           cmInstallTargetGenerator* runTime,
+                                           cmInstallTargetGenerator* library)
+{
+  if ((exportSetName) && (*exportSetName) && (target))
+    {
+    cmTargetExport* te = new cmTargetExport(target, archive, runTime, library);
+    this->ExportSets[exportSetName].push_back(te);
+    }
+}
+
+const std::vector<cmTargetExport*>* cmGlobalGenerator::GetExportSet(
+                                                        const char* name) const
+{
+  std::map<cmStdString, std::vector<cmTargetExport*> >::const_iterator 
+                                     exportSetIt = this->ExportSets.find(name);
+  if (exportSetIt != this->ExportSets.end())
+    {
+    return &exportSetIt->second;
+    }
+
+  return 0;
+}
+
+
 void cmGlobalGenerator::EnableInstallTarget()
 {
   this->InstallTargetEnabled = true;

Index: cmInstallCommand.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmInstallCommand.cxx,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- cmInstallCommand.cxx	19 Jun 2007 15:11:06 -0000	1.22
+++ cmInstallCommand.cxx	19 Jun 2007 17:10:21 -0000	1.23
@@ -20,6 +20,7 @@
 #include "cmInstallFilesGenerator.h"
 #include "cmInstallScriptGenerator.h"
 #include "cmInstallTargetGenerator.h"
+#include "cmInstallExportGenerator.h"
 
 #include <cmsys/Glob.hxx>
 
@@ -62,6 +63,10 @@
     {
     return this->HandleDirectoryMode(args);
     }
+  else if(args[0] == "EXPORT")
+    {
+    return this->HandleExportMode(args);
+    }
 
   // Unknown mode.
   cmStdString e = "called with unknown mode ";
@@ -135,6 +140,7 @@
   bool doing_permissions = false;
   bool doing_component = false;
   bool doing_configurations = false;
+  bool doing_export = false;
   bool archive_settings = true;
   bool library_settings = true;
   bool runtime_settings = true;
@@ -148,6 +154,7 @@
   std::string archive_component;
   std::string library_component;
   std::string runtime_component;
+  std::string exportName;
   std::vector<std::string> archive_configurations;
   std::vector<std::string> library_configurations;
   std::vector<std::string> runtime_configurations;
@@ -164,6 +171,7 @@
       doing_permissions = false;
       doing_component = false;
       doing_configurations = false;
+      doing_export = false;
       }
     else if(args[i] == "PERMISSIONS")
       {
@@ -173,6 +181,7 @@
       doing_permissions = true;
       doing_component = false;
       doing_configurations = false;
+      doing_export = false;
       }
     else if(args[i] == "COMPONENT")
       {
@@ -182,6 +191,7 @@
       doing_permissions = false;
       doing_component = true;
       doing_configurations = false;
+      doing_export = false;
       }
     else if(args[i] == "CONFIGURATIONS")
       {
@@ -191,6 +201,7 @@
       doing_permissions = false;
       doing_component = false;
       doing_configurations = true;
+      doing_export = false;
       }
     else if(args[i] == "ARCHIVE")
       {
@@ -200,6 +211,7 @@
       doing_permissions = false;
       doing_component = false;
       doing_configurations = false;
+      doing_export = false;
       archive_settings = true;
       library_settings = false;
       runtime_settings = false;
@@ -212,6 +224,7 @@
       doing_permissions = false;
       doing_component = false;
       doing_configurations = false;
+      doing_export = false;
       archive_settings = false;
       library_settings = true;
       runtime_settings = false;
@@ -224,10 +237,21 @@
       doing_permissions = false;
       doing_component = false;
       doing_configurations = false;
+      doing_export = false;
       archive_settings = false;
       library_settings = false;
       runtime_settings = true;
       }
+    else if(args[i] == "EXPORT")
+      {
+      // Switch to setting only runtime properties.
+      doing_targets = false;
+      doing_destination = false;
+      doing_permissions = false;
+      doing_component = false;
+      doing_configurations = false;
+      doing_export = true;
+      }
     else if(args[i] == "OPTIONAL")
       {
       // Set the optional property.
@@ -370,6 +394,11 @@
         runtime_configurations.push_back(args[i]);
         }
       }
+    else if(doing_export)
+      {
+      exportName = args[i];
+      doing_export = false;
+      }
     else
       {
       // Unknown argument.
@@ -566,6 +595,15 @@
     this->Makefile->AddInstallGenerator(runtimeGenerator);
     this->Makefile->AddInstallGenerator(libraryGenerator);
 
+    if (!exportName.empty())
+      {
+      this->Makefile->GetLocalGenerator()->GetGlobalGenerator()
+                                       ->AddTargetToExports(exportName.c_str(),
+                                                            &target,
+                                                            archiveGenerator,
+                                                            runtimeGenerator,
+                                                            libraryGenerator);
+      }
     }
 
   // Tell the global generator about any installation component names
@@ -1126,6 +1164,154 @@
 }
 
 //----------------------------------------------------------------------------
+bool cmInstallCommand::HandleExportMode(std::vector<std::string> const& args)
+{
+  // This is the EXPORT mode.
+  bool doing_exports = true;
+  bool doing_destination = false;
+  bool doing_permissions = false;
+  bool doing_configurations = false;
+  bool doing_filename = false;
+  bool doing_prefix = false;
+  std::vector<std::string> exports;
+  const char* destination = 0;
+  std::string filename;
+  std::string permissions;
+  std::string prefix;
+  std::vector<std::string> configurations;
+  for(unsigned int i=1; i < args.size(); ++i)
+    {
+    if(args[i] == "DESTINATION")
+      {
+      // Switch to setting the destination property.
+      doing_exports = false;
+      doing_destination = true;
+      doing_permissions = false;
+      doing_configurations = false;
+      doing_filename = false;
+      doing_prefix = false;
+      }
+    else if(args[i] == "PERMISSIONS")
+      {
+      // Switch to setting the permissions property.
+      doing_exports = false;
+      doing_destination = false;
+      doing_permissions = true;
+      doing_configurations = false;
+      doing_filename = false;
+      doing_prefix = false;
+      }
+    else if(args[i] == "CONFIGURATIONS")
+      {
+      // Switch to setting the configurations property.
+      doing_exports = false;
+      doing_destination = false;
+      doing_permissions = false;
+      doing_configurations = true;
+      doing_filename = false;
+      doing_prefix = false;
+      }
+    else if(args[i] == "FILENAME")
+      {
+      // Switch to setting the rename property.
+      doing_exports = false;
+      doing_destination = false;
+      doing_permissions = false;
+      doing_configurations = false;
+      doing_filename = true;
+      doing_prefix = false;
+      }
+    else if(args[i] == "PREFIX")
+      {
+      // Switch to setting the rename property.
+      doing_exports = false;
+      doing_destination = false;
+      doing_permissions = false;
+      doing_configurations = false;
+      doing_filename = false;
+      doing_prefix = true;
+      }
+    else if(doing_exports)
+      {
+      // Store the file for installation.
+      exports.push_back(args[i]);
+      }
+    else if(doing_configurations)
+      {
+      configurations.push_back(args[i]);
+      }
+    else if(doing_destination)
+      {
+      destination = args[i].c_str();
+      doing_destination = false;
+      }
+    else if(doing_permissions)
+      {
+      // Check the requested permission.
+      if(!this->CheckPermissions(args[i], permissions))
+        {
+        cmOStringStream e;
+        e << args[0] << " given invalid permission \""
+          << args[i] << "\".";
+        this->SetError(e.str().c_str());
+        return false;
+        }
+      }
+    else if(doing_filename)
+      {
+      filename = args[i];
+      doing_filename = false;
+      }
+    else if(doing_prefix)
+      {
+      prefix = args[i];
+      doing_prefix = false;
+      }
+    else
+      {
+      // Unknown argument.
+      cmOStringStream e;
+      e << args[0] << " given unknown argument \"" << args[i] << "\".";
+      this->SetError(e.str().c_str());
+      return false;
+      }
+    }
+
+  std::string cmakeDir = this->Makefile->GetHomeOutputDirectory();
+  cmakeDir += cmake::GetCMakeFilesDirectory();
+  for(std::vector<std::string>::const_iterator exportIt = exports.begin();
+      exportIt != exports.end();
+      ++exportIt)
+    {
+
+    const std::vector<cmTargetExport*>* exportSet = this->
+                          Makefile->GetLocalGenerator()->GetGlobalGenerator()->
+                          GetExportSet(exportIt->c_str());
+    if (exportSet == 0)
+      {
+      return false;
+      }
+
+    // Create the export install generator.
+    cmInstallExportGenerator* exportGenerator = new cmInstallExportGenerator(
+                          destination, permissions.c_str(), configurations, 
+                          filename.c_str(), prefix.c_str(), cmakeDir.c_str());
+
+    if (exportGenerator->SetExportSet(exportIt->c_str(),exportSet))
+      {
+      this->Makefile->AddInstallGenerator(exportGenerator);
+      }
+    else
+      {
+      delete exportGenerator;
+      return false;
+      }
+    }
+
+  return true;
+}
+
+//----------------------------------------------------------------------------
 void cmInstallCommand::ComputeDestination(const char* destination,
                                           std::string& dest) const
 {

Index: cmInstallCommand.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmInstallCommand.h,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- cmInstallCommand.h	19 Jun 2007 15:11:06 -0000	1.18
+++ cmInstallCommand.h	19 Jun 2007 17:10:21 -0000	1.19
@@ -248,6 +248,7 @@
   bool HandleTargetsMode(std::vector<std::string> const& args);
   bool HandleFilesMode(std::vector<std::string> const& args);
   bool HandleDirectoryMode(std::vector<std::string> const& args);
+  bool HandleExportMode(std::vector<std::string> const& args);
   void ComputeDestination(const char* destination, std::string& dest) const;
   bool CheckPermissions(std::string const& arg, std::string& permissions)const;
 };

--- NEW FILE: cmInstallExportGenerator.h ---
/*=========================================================================

  Program:   CMake - Cross-Platform Makefile Generator
  Module:    $RCSfile: cmInstallExportGenerator.h,v $
  Language:  C++
  Date:      $Date: 2007/06/19 17:10:21 $
  Version:   $Revision: 1.1 $

  Copyright (c) 2002 Kitware, Inc., Insight Consortium.  All rights reserved.
  See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notices for more information.

=========================================================================*/
#ifndef cmInstallExportGenerator_h
#define cmInstallExportGenerator_h

#include "cmInstallGenerator.h"

class cmTarget;


class cmInstallTargetGenerator;

/* cmInstallExportTarget is used in cmGlobalGenerator to collect the 
install generators for the exported targets. These are then used by the 
cmInstallExportGenerator.
*/
class cmTargetExport
{
public:
  cmTargetExport(cmTarget* tgt, 
                 cmInstallTargetGenerator* archive, 
                 cmInstallTargetGenerator* runtime, 
                 cmInstallTargetGenerator* library
                ) : Target(tgt), ArchiveGenerator(archive),
                    RuntimeGenerator(runtime), LibraryGenerator(library) {}

  cmTarget* Target;
  cmInstallTargetGenerator* ArchiveGenerator;
  cmInstallTargetGenerator* RuntimeGenerator;
  cmInstallTargetGenerator* LibraryGenerator;
private:
  cmTargetExport();
};


/** \class cmInstallExportGenerator
 * \brief Generate rules for creating an export files.
 */
class cmInstallExportGenerator: public cmInstallGenerator
{
public:
  cmInstallExportGenerator(const char* dest, const char* file_permissions,
                           const std::vector<std::string>& configurations,
                           const char* filename, const char* prefix, 
                           const char* tempOutputDir);

  bool SetExportSet(const char* name, 
                    const std::vector<cmTargetExport*>* exportSet);
protected:
  // internal class which collects all the properties which will be set
  // in the export file for the target
  class cmTargetWithProperties
  {
  public:
    cmTargetWithProperties(cmTarget* target):Target(target) {}
    cmTarget* Target;
    std::map<std::string, std::string> Properties;
  private:
    cmTargetWithProperties();
  };

  virtual void GenerateScript(std::ostream& os);
  static bool AddInstallLocations(cmTargetWithProperties *twp, 
                                  cmInstallTargetGenerator* generator,
                                  const char* prefix);

  std::string Name;
  std::string FilePermissions;
  const std::vector<std::string> Configurations;
  std::string Filename;
  std::string Prefix;
  std::string TempOutputDir;
  std::string ExportFilename;

  std::vector<cmTargetWithProperties*> Targets;
};

#endif

Index: CMakeLists.txt
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/CMakeLists.txt,v
retrieving revision 1.365
retrieving revision 1.366
diff -u -d -r1.365 -r1.366
--- CMakeLists.txt	18 Jun 2007 15:59:23 -0000	1.365
+++ CMakeLists.txt	19 Jun 2007 17:10:21 -0000	1.366
@@ -115,6 +115,7 @@
   cmGlobalUnixMakefileGenerator3.h
   cmInstallGenerator.h
   cmInstallGenerator.cxx
+  cmInstallExportGenerator.cxx
   cmInstallFilesGenerator.h
   cmInstallFilesGenerator.cxx
   cmInstallScriptGenerator.h



More information about the Cmake-commits mailing list