1
0
Эх сурвалжийг харах

ENH: Add support for displaying the list of components

Andy Cedilnik 19 жил өмнө
parent
commit
7ded253013

+ 38 - 3
Source/cmGlobalGenerator.cxx

@@ -1395,12 +1395,16 @@ void cmGlobalGenerator::CreateDefaultGlobalTargets(cmTargets* targets)
     singleLine.erase(singleLine.begin(), singleLine.end());
     singleLine.erase(singleLine.begin(), singleLine.end());
     depends.erase(depends.begin(), depends.end());
     depends.erase(depends.begin(), depends.end());
     singleLine.push_back(this->GetCMakeInstance()->GetCTestCommand());
     singleLine.push_back(this->GetCMakeInstance()->GetCTestCommand());
+    singleLine.push_back("--force-new-ctest-process");
     if(cmakeCfgIntDir && *cmakeCfgIntDir && cmakeCfgIntDir[0] != '.')
     if(cmakeCfgIntDir && *cmakeCfgIntDir && cmakeCfgIntDir[0] != '.')
       {
       {
       singleLine.push_back("-C");
       singleLine.push_back("-C");
       singleLine.push_back(mf->GetDefinition("CMAKE_CFG_INTDIR"));
       singleLine.push_back(mf->GetDefinition("CMAKE_CFG_INTDIR"));
       }
       }
-    singleLine.push_back("--force-new-ctest-process");
+    else // TODO: This is a hack. Should be something to do with the generator
+      {
+      singleLine.push_back("$(ARGS)");
+      }
     cpackCommandLines.push_back(singleLine);
     cpackCommandLines.push_back(singleLine);
     (*targets)[this->GetTestTargetName()]
     (*targets)[this->GetTestTargetName()]
       = this->CreateGlobalTarget(this->GetTestTargetName(),
       = this->CreateGlobalTarget(this->GetTestTargetName(),
@@ -1464,9 +1468,40 @@ void cmGlobalGenerator::CreateDefaultGlobalTargets(cmTargets* targets)
   //Install
   //Install
   if(this->InstallTargetEnabled)
   if(this->InstallTargetEnabled)
     {
     {
+    if(!cmakeCfgIntDir || !*cmakeCfgIntDir || cmakeCfgIntDir[0] == '.')
+      {
+      std::set<cmStdString>* componentsSet
+        = this->GetCMakeInstance()->GetInstallComponents();
+      cpackCommandLines.erase(cpackCommandLines.begin(), 
+        cpackCommandLines.end());
+      depends.erase(depends.begin(), depends.end());
+      cmOStringStream ostr;
+      if ( componentsSet->size() > 0 )
+        {
+        ostr << "Available install components are:";
+        std::set<cmStdString>::iterator it;
+        for (
+          it = componentsSet->begin();
+          it != componentsSet->end();
+          ++ it )
+          {
+          ostr << " \"" << it->c_str() << "\"";
+          }
+        }
+      else
+        {
+        ostr << "Only default component available";
+        }
+      singleLine.push_back(ostr.str().c_str());
+      //cpackCommandLines.push_back(singleLine);
+      (*targets)["list_install_components"]
+        = this->CreateGlobalTarget("list_install_components",
+          ostr.str().c_str(),
+          &cpackCommandLines, depends);
+      }
     std::string cmd;
     std::string cmd;
     cpackCommandLines.erase(cpackCommandLines.begin(),
     cpackCommandLines.erase(cpackCommandLines.begin(),
-                            cpackCommandLines.end());
+      cpackCommandLines.end());
     singleLine.erase(singleLine.begin(), singleLine.end());
     singleLine.erase(singleLine.begin(), singleLine.end());
     depends.erase(depends.begin(), depends.end());
     depends.erase(depends.begin(), depends.end());
     if ( this->GetPreinstallTargetName() )
     if ( this->GetPreinstallTargetName() )
@@ -1518,7 +1553,7 @@ void cmGlobalGenerator::CreateDefaultGlobalTargets(cmTargets* targets)
       {
       {
       singleLine.insert(singleLine.begin()+1, "-DCMAKE_INSTALL_LOCAL_ONLY=1");
       singleLine.insert(singleLine.begin()+1, "-DCMAKE_INSTALL_LOCAL_ONLY=1");
       cpackCommandLines.erase(cpackCommandLines.begin(),
       cpackCommandLines.erase(cpackCommandLines.begin(),
-                              cpackCommandLines.end());
+        cpackCommandLines.end());
       cpackCommandLines.push_back(singleLine);
       cpackCommandLines.push_back(singleLine);
 
 
       (*targets)[install_local] =
       (*targets)[install_local] =

+ 1 - 0
Source/cmInstallTargetGenerator.cxx

@@ -33,6 +33,7 @@ cmInstallTargetGenerator
   Component(component), Optional(optional)
   Component(component), Optional(optional)
 {
 {
   this->Target->SetHaveInstallRule(true);
   this->Target->SetHaveInstallRule(true);
+  this->Target->GetMakefile()->GetCMakeInstance()->AddInstallComponent(component);
 }
 }
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------

+ 12 - 0
Source/cmake.cxx

@@ -1307,6 +1307,18 @@ int cmake::ExecuteCMakeCommand(std::vector<std::string>& args)
   return 1;
   return 1;
 }
 }
 
 
+//----------------------------------------------------------------------------
+void cmake::AddInstallComponent(const char* component)
+{
+  if ( !component )
+    {
+    return;
+    }
+  this->InstallComponents.insert(component);
+}
+
+
+//----------------------------------------------------------------------------
 void cmake::GetRegisteredGenerators(std::vector<std::string>& names)
 void cmake::GetRegisteredGenerators(std::vector<std::string>& names)
 {
 {
   for(RegisteredGeneratorsMap::const_iterator i = this->Generators.begin();
   for(RegisteredGeneratorsMap::const_iterator i = this->Generators.begin();

+ 8 - 0
Source/cmake.h

@@ -284,6 +284,12 @@ class cmake
   // Do we want debug output during the cmake run.
   // Do we want debug output during the cmake run.
   bool GetDebugOutput() { return this->DebugOutput; }
   bool GetDebugOutput() { return this->DebugOutput; }
   void DebugOutputOn() { this->DebugOutput = true;}
   void DebugOutputOn() { this->DebugOutput = true;}
+
+  //! Add or get installation components
+  void AddInstallComponent(const char* component);
+  std::set<cmStdString>* GetInstallComponents()
+  { return &this->InstallComponents; }
+
 protected:
 protected:
   typedef cmGlobalGenerator* (*CreateGeneratorFunctionType)();
   typedef cmGlobalGenerator* (*CreateGeneratorFunctionType)();
   typedef std::map<cmStdString,
   typedef std::map<cmStdString,
@@ -302,6 +308,8 @@ protected:
 
 
   std::set<cmStdString> WrittenFiles;
   std::set<cmStdString> WrittenFiles;
 
 
+  std::set<cmStdString> InstallComponents;
+
   ///! return true if the same cmake was used to make the cache.
   ///! return true if the same cmake was used to make the cache.
   bool CacheVersionMatches();
   bool CacheVersionMatches();
   ///! read in a cmake list file to initialize the cache
   ///! read in a cmake list file to initialize the cache