diff options
author | Brad King <brad.king@kitware.com> | 2008-01-29 20:47:18 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2008-01-29 20:47:18 (GMT) |
commit | 319c4c4d8033d8c37f320839196ed174c4674fdf (patch) | |
tree | d4fc94a1a40578b6c17ef21bea87642f642fe894 /Source/cmInstallTargetGenerator.cxx | |
parent | 6e70424fc85ad81f60c589dd01cc127af1be0fad (diff) | |
download | CMake-319c4c4d8033d8c37f320839196ed174c4674fdf.zip CMake-319c4c4d8033d8c37f320839196ed174c4674fdf.tar.gz CMake-319c4c4d8033d8c37f320839196ed174c4674fdf.tar.bz2 |
ENH: Update cmInstallTargetGenerator to get the shared libraries linked by a target from cmComputeLinkInformation instead of duplicating the computation.
Diffstat (limited to 'Source/cmInstallTargetGenerator.cxx')
-rw-r--r-- | Source/cmInstallTargetGenerator.cxx | 75 |
1 files changed, 28 insertions, 47 deletions
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; } } } |