summaryrefslogtreecommitdiffstats
path: root/Source/cmComputeTargetDepends.cxx
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2014-03-18 16:04:46 (GMT)
committerStephen Kelly <steveire@gmail.com>2014-04-02 21:12:56 (GMT)
commitc355d10865ba0dbaef06d0eafe678627c875a5f5 (patch)
treea5429c2f7c97153ce8ed815fdf7ad9cd9ee8fe56 /Source/cmComputeTargetDepends.cxx
parente5da9e51d02ba912bba4f556ecd6453dd187c8d8 (diff)
downloadCMake-c355d10865ba0dbaef06d0eafe678627c875a5f5.zip
CMake-c355d10865ba0dbaef06d0eafe678627c875a5f5.tar.gz
CMake-c355d10865ba0dbaef06d0eafe678627c875a5f5.tar.bz2
cmComputeTargetDepends: Track object library depends.
Relieve cmGeneratorTarget of that responsibility.
Diffstat (limited to 'Source/cmComputeTargetDepends.cxx')
-rw-r--r--Source/cmComputeTargetDepends.cxx29
1 files changed, 29 insertions, 0 deletions
diff --git a/Source/cmComputeTargetDepends.cxx b/Source/cmComputeTargetDepends.cxx
index b4dbce7..db8b7f3 100644
--- a/Source/cmComputeTargetDepends.cxx
+++ b/Source/cmComputeTargetDepends.cxx
@@ -16,6 +16,7 @@
#include "cmLocalGenerator.h"
#include "cmMakefile.h"
#include "cmSystemTools.h"
+#include "cmSourceFile.h"
#include "cmTarget.h"
#include "cmake.h"
@@ -213,6 +214,34 @@ void cmComputeTargetDepends::CollectTargetDepends(int depender_index)
{
std::set<std::string> emitted;
{
+ cmGeneratorTarget* gt = depender->GetMakefile()->GetLocalGenerator()
+ ->GetGlobalGenerator()
+ ->GetGeneratorTarget(depender);
+ std::vector<cmSourceFile const*> objectFiles;
+ gt->GetExternalObjects(objectFiles);
+ for(std::vector<cmSourceFile const*>::const_iterator
+ it = objectFiles.begin(); it != objectFiles.end(); ++it)
+ {
+ std::string objLib = (*it)->GetObjectLibrary();
+ if (!objLib.empty() && emitted.insert(objLib).second)
+ {
+ if(depender->GetType() != cmTarget::EXECUTABLE &&
+ depender->GetType() != cmTarget::STATIC_LIBRARY &&
+ depender->GetType() != cmTarget::SHARED_LIBRARY &&
+ depender->GetType() != cmTarget::MODULE_LIBRARY)
+ {
+ this->GlobalGenerator->GetCMakeInstance()
+ ->IssueMessage(cmake::FATAL_ERROR,
+ "Only executables and non-OBJECT libraries may "
+ "reference target objects.",
+ depender->GetBacktrace());
+ return;
+ }
+ const_cast<cmTarget*>(depender)->AddUtility(objLib);
+ }
+ }
+ }
+ {
std::vector<std::string> tlibs;
depender->GetDirectLinkLibraries("", tlibs, depender);
// A target should not depend on itself.