[cmake-commits] alex committed cmGlobalGenerator.cxx 1.194 1.195 cmGlobalGenerator.h 1.86 1.87 cmTarget.cxx 1.154 1.155

cmake-commits at cmake.org cmake-commits at cmake.org
Wed Jul 11 17:29:19 EDT 2007


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

Modified Files:
	cmGlobalGenerator.cxx cmGlobalGenerator.h cmTarget.cxx 
Log Message:
COMP: revert last commit for now, broke Visual Studio

Alex


Index: cmGlobalGenerator.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmGlobalGenerator.h,v
retrieving revision 1.86
retrieving revision 1.87
diff -u -d -r1.86 -r1.87
--- cmGlobalGenerator.h	11 Jul 2007 20:22:04 -0000	1.86
+++ cmGlobalGenerator.h	11 Jul 2007 21:29:17 -0000	1.87
@@ -153,7 +153,7 @@
   ///! is an extension to be ignored
   bool IgnoreFile(const char* ext);
   ///! What is the preference for linkers and this language (None or Prefered)
-  int GetLinkerPreference(const char* lang);
+  const char* GetLinkerPreference(const char* lang);
   ///! What is the object file extension for a given source file?
   const char* GetLanguageOutputExtension(cmSourceFile const&);
 
@@ -257,7 +257,7 @@
   std::map<cmStdString, cmStdString> OutputExtensions;
   std::map<cmStdString, cmStdString> LanguageToOutputExtension;
   std::map<cmStdString, cmStdString> ExtensionToLanguage;
-  std::map<cmStdString, int> LanguageToLinkerPreference; 
+  std::map<cmStdString, cmStdString> LanguageToLinkerPreference; 
 
   // this is used to improve performance 
   std::map<cmStdString,cmTarget *> TotalTargets;

Index: cmGlobalGenerator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmGlobalGenerator.cxx,v
retrieving revision 1.194
retrieving revision 1.195
diff -u -d -r1.194 -r1.195
--- cmGlobalGenerator.cxx	11 Jul 2007 20:22:04 -0000	1.194
+++ cmGlobalGenerator.cxx	11 Jul 2007 21:29:17 -0000	1.195
@@ -570,35 +570,12 @@
   std::string linkerPrefVar = std::string("CMAKE_") +
     std::string(l) + std::string("_LINKER_PREFERENCE");
   const char* linkerPref = mf->GetDefinition(linkerPrefVar.c_str());
-  int preference = 0;
-  if(linkerPref)
-    {
-    if (sscanf(linkerPref, "%d", &preference)!=1)
-      {
-      // backward compatibility: before 2.6 LINKER_PREFERENCE
-      // was either "None" or "Prefered", and only the first character was 
-      // tested. So if there is a custom language out there and it is 
-      // "Prefered", set its preference high
-      if (linkerPref[0]=='P')
-        {
-        preference = 100;
-        }
-      else
-        {
-        preference = 0;
-        }
-      }
-    }
-
-  if (preference < 0)
+  if(!linkerPref)
     {
-    std::string msg = linkerPrefVar;
-    msg += " is negative, adjusting it to 0";
-    cmSystemTools::Message(msg.c_str(), "Warning");
-    preference = 0;
+    linkerPref = "None";
     }
+  this->LanguageToLinkerPreference[l] = linkerPref;
 
-  this->LanguageToLinkerPreference[l] = preference;
 
   std::string outputExtensionVar = std::string("CMAKE_") +
     std::string(l) + std::string("_OUTPUT_EXTENSION");
@@ -775,6 +752,10 @@
         }
       notFoundVars += "\n";
       }
+    cmSystemTools::Error("This project requires some variables to be set,\n"
+                         "and cmake can not find them.\n"
+                         "Please set the following variables:\n",
+                         notFoundVars.c_str());
     }
   // at this point this->LocalGenerators has been filled,
   // so create the map from project name to vector of local generators
@@ -1139,14 +1120,13 @@
     }
 }
 
-int cmGlobalGenerator::GetLinkerPreference(const char* lang)
+const char* cmGlobalGenerator::GetLinkerPreference(const char* lang)
 {
-  std::map<cmStdString, int>::const_iterator it = this->LanguageToLinkerPreference.find(lang);
-  if (it != this->LanguageToLinkerPreference.end())
+  if(this->LanguageToLinkerPreference.count(lang))
     {
-    return it->second;
+    return this->LanguageToLinkerPreference[lang].c_str();
     }
-  return 0;
+  return "None";
 }
 
 void cmGlobalGenerator::FillProjectMap()

Index: cmTarget.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmTarget.cxx,v
retrieving revision 1.154
retrieving revision 1.155
diff -u -d -r1.154 -r1.155
--- cmTarget.cxx	11 Jul 2007 20:22:04 -0000	1.154
+++ cmTarget.cxx	11 Jul 2007 21:29:17 -0000	1.155
@@ -1477,57 +1477,59 @@
     const_cast<cmTarget*>(this)->SetProperty("LINKER_LANGUAGE", "CXX");
     }
   const char* linkerLang = this->GetProperty("LINKER_LANGUAGE");
-  if (linkerLang==0)
+  if(linkerLang)
     {
-    // if the property has not yet been set, collect all languages in the
-    // target and then find the language with the highest preference value
-    std::set<cmStdString> languages;
-    for(std::vector<cmSourceFile*>::const_iterator 
-        i = this->SourceFiles.begin(); i != this->SourceFiles.end(); ++i)
+    return linkerLang;
+    }
+  std::set<cmStdString> languages;
+  for(std::vector<cmSourceFile*>::const_iterator i
+        = this->SourceFiles.begin();
+      i != this->SourceFiles.end(); ++i)
+    {
+    if(const char* lang = (*i)->GetLanguage())
       {
-      if(const char* lang = (*i)->GetLanguage())
-        {
-        languages.insert(lang);
-        }
+      languages.insert(lang);
       }
-
-    std::string linkerLangList;              // only used for the error message
-    int maxLinkerPref = 0;
-    bool multiplePreferedLanguages = false;
-    for(std::set<cmStdString>::const_iterator sit = languages.begin();
-        sit != languages.end(); ++sit)
+    }
+  if(languages.size() == 0)
+    {
+    return 0;
+    }
+  if(languages.size() == 1)
+    {
+    const_cast<cmTarget*>(this)->SetProperty("LINKER_LANGUAGE",
+                                             languages.begin()->c_str());
+    return this->GetProperty("LINKER_LANGUAGE");
+    }
+  const char* prefLang = 0;
+  for(std::set<cmStdString>::const_iterator s = languages.begin();
+      s != languages.end(); ++s)
+    {
+    const char* lpref = gg->GetLinkerPreference(s->c_str());
+    if(lpref[0] == 'P')
       {
-      int linkerPref = gg->GetLinkerPreference(sit->c_str());
-      if ((linkerPref > maxLinkerPref) || (linkerLang==0))
+      if(prefLang && !(*s == prefLang))
         {
-        maxLinkerPref = linkerPref;
-        linkerLang = sit->c_str();
-        linkerLangList = *sit;
-        multiplePreferedLanguages = false;
+        std::string m = "Error Target: ";
+        m += this->Name + " Contains more than one Prefered language: ";
+        m += *s;
+        m += " and ";
+        m += prefLang;
+        m += "\nYou must set the LINKER_LANGUAGE property for this target.";
+        cmSystemTools::Error(m.c_str());
         }
-      else if (linkerPref == maxLinkerPref)
+      else
         {
-        linkerLangList += "; ";
-        linkerLangList += *sit;
-        multiplePreferedLanguages = true;
+        prefLang = s->c_str();
         }
       }
-
-    if (linkerLang!=0)
-      {
-      const_cast<cmTarget*>(this)->SetProperty("LINKER_LANGUAGE", linkerLang);
-      }
-    if (multiplePreferedLanguages)
-      {
-      cmOStringStream err;
-      err << "Error: Target " << this->Name << " contains multiple languages "
-          << "with the highest linker preference (" << maxLinkerPref << "): " 
-          << linkerLangList << "\n"
-          << "You must set the LINKER_LANGUAGE property for this target.";
-      cmSystemTools::Error(err.str().c_str());
-      }
     }
-  return linkerLang;
+  if(!prefLang)
+    {
+    prefLang = languages.begin()->c_str();
+    }
+  const_cast<cmTarget*>(this)->SetProperty("LINKER_LANGUAGE", prefLang);
+  return this->GetProperty("LINKER_LANGUAGE");
 }
 
 //----------------------------------------------------------------------------



More information about the Cmake-commits mailing list