Browse Source

modified to handle src list vectors without proper dollar signs

Ken Martin 23 years ago
parent
commit
d1879a77e8
1 changed files with 62 additions and 17 deletions
  1. 62 17
      Source/cmTarget.cxx

+ 62 - 17
Source/cmTarget.cxx

@@ -34,10 +34,13 @@ void cmTarget::GenerateSourceFilesFromSourceLists( cmMakefile &mf)
   for (std::vector<std::string>::const_iterator s = m_SourceLists.begin();
        s != m_SourceLists.end(); ++s)
     {
+    int done = 0;
     // replace any variables
     std::string temps = *s;
     mf.ExpandVariablesInString(temps);
-    // look for a srclist
+
+    // look for a srclist, this is old code we really don't want
+    // any source lists in the future.
     if (mf.GetSources().find(temps) != mf.GetSources().end())
       {
       const std::vector<cmSourceFile*> &clsList = 
@@ -46,28 +49,70 @@ void cmTarget::GenerateSourceFilesFromSourceLists( cmMakefile &mf)
       m_SourceFiles.insert(m_SourceFiles.end(), 
                            clsList.begin(), 
                            clsList.end());
+      done = 1;
       }
-    // if one wasn't found then assume it is a single class
-    else
+
+    // Next if one wasn't found then assume it is a single class
+    if (!done && mf.GetSource(temps.c_str()))
       {
-      // if the source file is already in the makefile, use it
-      if (mf.GetSource(temps.c_str()))
-        {
-        m_SourceFiles.push_back(mf.GetSource(temps.c_str()));
-        }
-      // otherwise try to create it
-      else
+      m_SourceFiles.push_back(mf.GetSource(temps.c_str()));
+      done = 1;
+      }
+
+    // if it wasn't a source file listed with the makefile
+    // see if it is a variable. This is for old CMake 1.2 compatability 
+    // where a source list would be passed into here, by making it
+    // a vector we need to possibly lookup the variable to maintain
+    // CMake 1.2 compatability.
+    if (!done)
+      {
+      const char* versionValue
+        = mf.GetDefinition("CMAKE_MINIMUM_REQUIRED_VERSION");
+      if (!versionValue || atof(versionValue) <= 1.2)
         {
-        cmSourceFile file;
-        file.SetIsAnAbstractClass(false);
-        file.SetName(temps.c_str(), mf.GetCurrentDirectory(),
-                     mf.GetSourceExtensions(),
-                     mf.GetHeaderExtensions());
-        m_SourceFiles.push_back(mf.AddSource(file));
+        const char* varValue = 
+          mf.GetDefinition(temps.c_str());
+        if (varValue)
+          {
+          std::vector<std::string> tval;
+          tval.push_back(varValue);
+          std::vector<std::string> args;
+          cmSystemTools::ExpandListArguments(tval, args);
+          int i;
+          for (i = 0; i < args.size(); ++i)
+            {
+            if (mf.GetSource(args[i].c_str()))
+              {
+              m_SourceFiles.push_back(mf.GetSource(args[i].c_str()));
+              }
+            else
+              {
+              cmSourceFile file;
+              file.SetIsAnAbstractClass(false);
+              file.SetName(args[i].c_str(), mf.GetCurrentDirectory(),
+                           mf.GetSourceExtensions(),
+                           mf.GetHeaderExtensions());
+              m_SourceFiles.push_back(mf.AddSource(file));
+              }
+            }
+          done = 1;
+          }
         }
       }
+      
+    // if we still are not done, try to create the SourceFile structure
+    if (!done)
+      {
+      cmSourceFile file;
+      file.SetIsAnAbstractClass(false);
+      file.SetName(temps.c_str(), mf.GetCurrentDirectory(),
+                   mf.GetSourceExtensions(),
+                   mf.GetHeaderExtensions());
+      m_SourceFiles.push_back(mf.AddSource(file));
+      done = 1;
+      }
     }
-
+  
   // expand any link library variables whle we are at it
   LinkLibraries::iterator p = m_LinkLibraries.begin();
   for (;p != m_LinkLibraries.end(); ++p)