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
This commit is contained in:
parent
1d9889c5d3
commit
f7d4f27c2a
|
@ -26,48 +26,79 @@ 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;
|
||||
}
|
||||
}
|
||||
|
||||
/* 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 ((type != cmTarget::STATIC_LIBRARY) &&
|
||||
(this->Makefile->IsOn("CMAKE_TARGET_SUPPORTS_ONLY_STATIC_LIBS")))
|
||||
{
|
||||
std::string msg = "ADD_LIBRARY for library ";
|
||||
msg += args[0];
|
||||
msg += " is used with the SHARED or MODULE option, but the target "
|
||||
"platform supports only STATIC libraries. Building it STATIC instead. "
|
||||
"This may lead to problems.";
|
||||
cmSystemTools::Message(msg.c_str() ,"Warning");
|
||||
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 ";
|
||||
|
@ -77,22 +108,6 @@ bool cmAddLibraryCommand::InitialPass(std::vector<std::string> const& args)
|
|||
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) &&
|
||||
(this->Makefile->IsOn("CMAKE_TARGET_SUPPORTS_ONLY_STATIC_LIBS")))
|
||||
{
|
||||
std::string msg = "ADD_LIBRARY for library ";
|
||||
msg += args[0];
|
||||
msg += " is used with the SHARED or MODULE option, but the target "
|
||||
"platform supports only STATIC libraries. Building it STATIC instead. "
|
||||
"This may lead to problems.";
|
||||
cmSystemTools::Message(msg.c_str() ,"Warning");
|
||||
shared = 0;
|
||||
}
|
||||
|
||||
std::vector<std::string> srclists;
|
||||
while (s != args.end())
|
||||
{
|
||||
|
@ -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;
|
||||
|
|
|
@ -76,9 +76,6 @@ public:
|
|||
}
|
||||
|
||||
cmTypeMacro(cmAddLibraryCommand, cmCommand);
|
||||
|
||||
private:
|
||||
std::string LibName;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue