Selaa lähdekoodia

ENH: add ability to use ; separated lists in SET and expand them for addexecutable and addlibrary

Bill Hoffman 23 vuotta sitten
vanhempi
sitoutus
dbdb0adce8

+ 4 - 3
Source/cmAddExecutableCommand.cxx

@@ -18,14 +18,15 @@
 #include "cmCacheManager.h"
 
 // cmExecutableCommand
-bool cmAddExecutableCommand::InitialPass(std::vector<std::string> const& args)
+bool cmAddExecutableCommand::InitialPass(std::vector<std::string> const& argsIn)
 {
-  if(args.size() < 2 )
+  if(argsIn.size() < 2 )
     {
     this->SetError("called with incorrect number of arguments");
     return false;
     }
-
+  std::vector<std::string> args;
+  cmSystemTools::ExpandListArguments(argsIn, args);
   std::vector<std::string>::const_iterator s = args.begin();
 
   std::string exename = *s;

+ 4 - 3
Source/cmAddLibraryCommand.cxx

@@ -18,14 +18,15 @@
 #include "cmCacheManager.h"
 
 // cmLibraryCommand
-bool cmAddLibraryCommand::InitialPass(std::vector<std::string> const& args)
+bool cmAddLibraryCommand::InitialPass(std::vector<std::string> const& argsIn)
 {
-  if(args.size() < 1 )
+  if(argsIn.size() < 1 )
     {
     this->SetError("called with incorrect number of arguments");
     return false;
     }
-
+  std::vector<std::string> args;
+  cmSystemTools::ExpandListArguments(argsIn, args);
   // Library type defaults to value of BUILD_SHARED_LIBS, if it exists,
   // otherwise it defaults to static library.
   int shared = !cmSystemTools::IsOff(m_Makefile->GetDefinition("BUILD_SHARED_LIBS"));

+ 19 - 1
Source/cmSetCommand.cxx

@@ -41,7 +41,25 @@ bool cmSetCommand::InitialPass(std::vector<std::string> const& args)
   cmCacheManager::CacheEntryType type = cmCacheManager::STRING; // required if cache
   const char* docstring = 0; // required if cache
   std::string::size_type cacheStart = 0;
-
+  
+  // check for SET(VAR v1 v2 ... vn) 
+  // and create
+  if(args.size() > 2)
+    {
+    if(args[1] != "CACHE" && args[2] != "CACHE")
+      {
+      value = args[1];
+      for(int i =2; i < args.size(); ++i)
+        {
+        value += ";";
+        value += args[i];
+        }
+      m_Makefile->AddDefinition(variable, value.c_str());
+      return true;
+      }
+    }
+  
+    
   if(args.size() == 2)
     {
       // SET (VAR value )

+ 3 - 1
Source/cmSetCommand.h

@@ -73,7 +73,9 @@ public:
       " TYPE and DOCSTRING are required.  If TYPE is INTERNAL, then the "
       " VALUE is Always written into the cache, replacing any values "
       "existing in the cache.  If it is not a CACHE VAR, then this always "
-      "writes into the current makefile.";
+      "writes into the current makefile.\n"
+      "An optional syntax is SET(VAR VALUE1 ... VALUEN).\n"
+      "In this case VAR is set to a ; separated list of values.";
     }
   
   cmTypeMacro(cmSetCommand, cmCommand);