summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmComputeLinkInformation.cxx13
-rw-r--r--Source/cmComputeLinkInformation.h2
-rw-r--r--Source/cmInstallTargetGenerator.cxx75
3 files changed, 43 insertions, 47 deletions
diff --git a/Source/cmComputeLinkInformation.cxx b/Source/cmComputeLinkInformation.cxx
index 190ffb8..990b8e5 100644
--- a/Source/cmComputeLinkInformation.cxx
+++ b/Source/cmComputeLinkInformation.cxx
@@ -284,6 +284,13 @@ std::vector<std::string> const& cmComputeLinkInformation::GetFrameworkPaths()
}
//----------------------------------------------------------------------------
+std::set<cmTarget*> const&
+cmComputeLinkInformation::GetSharedLibrariesLinked()
+{
+ return this->SharedLibrariesLinked;
+}
+
+//----------------------------------------------------------------------------
bool cmComputeLinkInformation::Compute()
{
// Skip targets that do not link.
@@ -340,6 +347,12 @@ void cmComputeLinkInformation::AddItem(std::string const& item,
return;
}
+ // Keep track of shared libraries linked.
+ if(tgt && tgt->GetType() == cmTarget::SHARED_LIBRARY)
+ {
+ this->SharedLibrariesLinked.insert(tgt);
+ }
+
if(tgt && (tgt->GetType() == cmTarget::STATIC_LIBRARY ||
tgt->GetType() == cmTarget::SHARED_LIBRARY ||
tgt->GetType() == cmTarget::MODULE_LIBRARY ||
diff --git a/Source/cmComputeLinkInformation.h b/Source/cmComputeLinkInformation.h
index 96af2e4..33328c0 100644
--- a/Source/cmComputeLinkInformation.h
+++ b/Source/cmComputeLinkInformation.h
@@ -56,6 +56,7 @@ public:
std::string GetRPathString(bool for_install);
std::string GetChrpathString();
std::string GetChrpathTool();
+ std::set<cmTarget*> const& GetSharedLibrariesLinked();
private:
void AddItem(std::string const& item, cmTarget* tgt);
@@ -65,6 +66,7 @@ private:
std::vector<std::string> Depends;
std::vector<std::string> FrameworkPaths;
std::vector<std::string> RuntimeSearchPath;
+ std::set<cmTarget*> SharedLibrariesLinked;
// Context information.
cmTarget* Target;
diff --git a/Source/cmInstallTargetGenerator.cxx b/Source/cmInstallTargetGenerator.cxx
index 4f6539a..521fa4d 100644
--- a/Source/cmInstallTargetGenerator.cxx
+++ b/Source/cmInstallTargetGenerator.cxx
@@ -382,56 +382,37 @@ cmInstallTargetGenerator
// Build a map of build-tree install_name to install-tree install_name for
// shared libraries linked to this target.
std::map<cmStdString, cmStdString> install_name_remap;
- cmTarget::LinkLibraryType linkType = cmTarget::OPTIMIZED;
- if(config && cmSystemTools::UpperCase(config) == "DEBUG")
+ if(cmComputeLinkInformation* cli = this->Target->GetLinkInformation(config))
{
- linkType = cmTarget::DEBUG;
- }
- // TODO: Merge with ComputeLinkInformation.
- const cmTarget::LinkLibraryVectorType& inLibs =
- this->Target->GetLinkLibraries();
- for(cmTarget::LinkLibraryVectorType::const_iterator j = inLibs.begin();
- j != inLibs.end(); ++j)
- {
- std::string lib = j->first;
- if((this->Target->GetType() == cmTarget::EXECUTABLE ||
- lib != this->Target->GetName()) &&
- (j->second == cmTarget::GENERAL || j->second == linkType))
+ std::set<cmTarget*> const& sharedLibs = cli->GetSharedLibrariesLinked();
+ for(std::set<cmTarget*>::const_iterator j = sharedLibs.begin();
+ j != sharedLibs.end(); ++j)
{
- if(cmTarget* tgt = this->Target->GetMakefile()->
- GetLocalGenerator()->GetGlobalGenerator()->
- FindTarget(0, lib.c_str()))
+ // If the build tree and install tree use different path
+ // components of the install_name field then we need to create a
+ // mapping to be applied after installation.
+ cmTarget* tgt = *j;
+ std::string for_build = tgt->GetInstallNameDirForBuildTree(config);
+ std::string for_install = tgt->GetInstallNameDirForInstallTree(config);
+ std::string fname = this->GetInstallFilename(tgt, config, false, true);
+
+ // Map from the build-tree install_name.
+ for_build += fname;
+
+ // Map to the install-tree install_name.
+ if (!for_install.empty())
{
- if(tgt->GetType() == cmTarget::SHARED_LIBRARY)
- {
- // If the build tree and install tree use different path
- // components of the install_name field then we need to create a
- // mapping to be applied after installation.
- std::string for_build = tgt->GetInstallNameDirForBuildTree(config);
- std::string for_install =
- tgt->GetInstallNameDirForInstallTree(config);
- std::string fname =
- this->GetInstallFilename(tgt, config, false, true);
-
- // Map from the build-tree install_name.
- for_build += fname;
-
- // Map to the install-tree install_name.
- if (!for_install.empty())
- {
- for_install += fname;
- }
- else
- {
- for_install = tgt->GetInstallNameFixupPath();
- }
-
- if(for_build != for_install)
- {
- // Store the mapping entry.
- install_name_remap[for_build] = for_install;
- }
- }
+ for_install += fname;
+ }
+ else
+ {
+ for_install = tgt->GetInstallNameFixupPath();
+ }
+
+ if(for_build != for_install)
+ {
+ // Store the mapping entry.
+ install_name_remap[for_build] = for_install;
}
}
}