Просмотр исходного кода

ENH: add IMPORT keyword to ADD_LIBRARY, dependencies are not yet working
STYLE: fix line lengths and indentation, use enum as argument to AddLibrary() instead of int (which was initialized from a bool in some cases)

Alex

Alexander Neundorf 18 лет назад
Родитель
Сommit
f7d4f27c2a
5 измененных файлов с 56 добавлено и 45 удалено
  1. 34 19
      Source/cmAddLibraryCommand.cxx
  2. 0 3
      Source/cmAddLibraryCommand.h
  3. 3 1
      Source/cmCPluginAPI.cxx
  4. 18 21
      Source/cmMakefile.cxx
  5. 1 1
      Source/cmMakefile.h

+ 34 - 19
Source/cmAddLibraryCommand.cxx

@@ -26,62 +26,62 @@ bool cmAddLibraryCommand::InitialPass(std::vector<std::string> const& args)
     }
   // Library type defaults to value of BUILD_SHARED_LIBS, if it exists,
   // otherwise it defaults to static library.
-  int shared = 
-    !cmSystemTools::IsOff(this->Makefile->GetDefinition("BUILD_SHARED_LIBS"));
+  cmTarget::TargetType type = cmTarget::SHARED_LIBRARY;
+  if (cmSystemTools::IsOff(this->Makefile->GetDefinition("BUILD_SHARED_LIBS")))
+    {
+    type = cmTarget::STATIC_LIBRARY;
+    }
   bool excludeFromAll = false;
+  bool importTarget = false;
   
   std::vector<std::string>::const_iterator s = args.begin();
 
-  this->LibName = *s;
+  std::string libName = *s;
 
   ++s;
   
   // If the second argument is "SHARED" or "STATIC", then it controls
   // the type of library.  Otherwise, it is treated as a source or
-  // source list name. There man be two keyword arguments, check for them
+  // source list name. There may be two keyword arguments, check for them
   while ( s != args.end() )
     {
     std::string libType = *s;
     if(libType == "STATIC")
       {
       ++s;
-      shared = 0;
+      type = cmTarget::STATIC_LIBRARY;
       }
     else if(libType == "SHARED")
       {
       ++s;
-      shared = 1;
+      type = cmTarget::SHARED_LIBRARY;
       }
     else if(libType == "MODULE")
       {
       ++s;
-      shared = 2;
+      type = cmTarget::MODULE_LIBRARY;
       }
     else if(*s == "EXCLUDE_FROM_ALL")
       {
       ++s;
       excludeFromAll = true;
       }
+    else if(*s == "IMPORT")
+      {
+      ++s;
+      importTarget = true;
+      }
     else
       {
       break;
       }
     }
 
-  if (s == args.end())
-    {
-    std::string msg = "You have called ADD_LIBRARY for library ";
-    msg += args[0];
-    msg += " without any source files. This typically indicates a problem ";
-    msg += "with your CMakeLists.txt file";
-    cmSystemTools::Message(msg.c_str() ,"Warning");
-    }
-
   /* ideally we should check whether for the linker language of the target 
     CMAKE_${LANG}_CREATE_SHARED_LIBRARY is defined and if not default to
     STATIC. But at this point we know only the name of the target, but not 
     yet its linker language. */
-  if ((shared != 0) && 
+  if ((type != cmTarget::STATIC_LIBRARY) && 
        (this->Makefile->IsOn("CMAKE_TARGET_SUPPORTS_ONLY_STATIC_LIBS")))
     {
     std::string msg = "ADD_LIBRARY for library ";
@@ -90,7 +90,22 @@ bool cmAddLibraryCommand::InitialPass(std::vector<std::string> const& args)
         "platform supports only STATIC libraries. Building it STATIC instead. "
         "This may lead to problems.";
     cmSystemTools::Message(msg.c_str() ,"Warning");
-    shared = 0;
+    type = cmTarget::STATIC_LIBRARY;
+    }
+
+  if (importTarget)
+    {
+    this->Makefile->AddNewTarget(type, libName.c_str(), true);
+    return true;
+    }
+
+  if (s == args.end())
+    {
+    std::string msg = "You have called ADD_LIBRARY for library ";
+    msg += args[0];
+    msg += " without any source files. This typically indicates a problem ";
+    msg += "with your CMakeLists.txt file";
+    cmSystemTools::Message(msg.c_str() ,"Warning");
     }
 
   std::vector<std::string> srclists;
@@ -100,7 +115,7 @@ bool cmAddLibraryCommand::InitialPass(std::vector<std::string> const& args)
     ++s;
     }
 
-  this->Makefile->AddLibrary(this->LibName.c_str(), shared, srclists,
+  this->Makefile->AddLibrary(libName.c_str(), type, srclists,
                              excludeFromAll);
   
   return true;

+ 0 - 3
Source/cmAddLibraryCommand.h

@@ -76,9 +76,6 @@ public:
     }
   
   cmTypeMacro(cmAddLibraryCommand, cmCommand);
-
-private:
-  std::string LibName;
 };
 
 

+ 3 - 1
Source/cmCPluginAPI.cxx

@@ -394,7 +394,9 @@ void CCONV cmAddLibrary(void *arg, const char *libname, int shared,
     {
     srcs2.push_back(srcs[i]);
     }
-  mf->AddLibrary(libname, (shared ? true : false), srcs2);
+  mf->AddLibrary(libname, 
+                 (shared? cmTarget::SHARED_LIBRARY : cmTarget::STATIC_LIBRARY),
+                  srcs2);
 }
 
 char CCONV *cmExpandVariablesInString(void *arg, const char *source,

+ 18 - 21
Source/cmMakefile.cxx

@@ -1336,26 +1336,19 @@ void cmMakefile::AddGlobalLinkInformation(const char* name, cmTarget& target)
 }
 
 
-void cmMakefile::AddLibrary(const char* lname, int shared,
+void cmMakefile::AddLibrary(const char* lname, cmTarget::TargetType type,
                             const std::vector<std::string> &srcs,
                             bool excludeFromAll)
 {
-  cmTarget* target=0;
-  switch (shared)
+  // wrong type ? default to STATIC
+  if (    (type != cmTarget::STATIC_LIBRARY) 
+       && (type != cmTarget::SHARED_LIBRARY) 
+       && (type != cmTarget::MODULE_LIBRARY))
     {
-    case 0:
-      target=this->AddNewTarget(cmTarget::STATIC_LIBRARY, lname, false);
-      break;
-    case 1:
-      target=this->AddNewTarget(cmTarget::SHARED_LIBRARY, lname, false);
-      break;
-    case 2:
-      target=this->AddNewTarget(cmTarget::MODULE_LIBRARY, lname, false);
-      break;
-    default:
-      target=this->AddNewTarget(cmTarget::STATIC_LIBRARY, lname, false);
+    type = cmTarget::STATIC_LIBRARY;
     }
 
+  cmTarget* target = this->AddNewTarget(type, lname, false);
   // Clear its dependencies. Otherwise, dependencies might persist
   // over changes in CMakeLists.txt, making the information stale and
   // hence useless.
@@ -1383,21 +1376,25 @@ cmTarget* cmMakefile::AddExecutable(const char *exeName,
 }
 
 
-cmTarget* cmMakefile::AddNewTarget(cmTarget::TargetType type, const char* name, bool isImported)
+cmTarget* cmMakefile::AddNewTarget(cmTarget::TargetType type, 
+                                   const char* name, 
+                                   bool isImported)
 {
   cmTargets::iterator it;
   cmTarget target;
   target.SetType(type, name);
   target.SetMakefile(this);
   if (isImported)
-  {
+    {
     target.MarkAsImported();
-    it=this->ImportedTargets.insert(cmTargets::value_type(target.GetName(), target)).first;
-  }
+    it=this->ImportedTargets.insert(
+                        cmTargets::value_type(target.GetName(), target)).first;
+    }
   else
-  {
-    it=this->Targets.insert(cmTargets::value_type(target.GetName(), target)).first;
-  }
+    {
+    it=this->Targets.insert(
+                        cmTargets::value_type(target.GetName(), target)).first;
+    }
   this->LocalGenerator->GetGlobalGenerator()->AddTarget(*it);
   return &it->second;
 }

+ 1 - 1
Source/cmMakefile.h

@@ -283,7 +283,7 @@ public:
   /**
    * Set the name of the library.
    */
-  void AddLibrary(const char *libname, int shared,
+  void AddLibrary(const char *libname, cmTarget::TargetType type,
                   const std::vector<std::string> &srcs,
                   bool excludeFromAll = false);