cmGeneratorTarget: Move IsChrPathUsed from cmTarget.

This commit is contained in:
Stephen Kelly 2015-08-04 19:19:46 +02:00
parent 8d2de00244
commit e27d737e27
6 changed files with 78 additions and 75 deletions

View File

@ -321,7 +321,11 @@ cmComputeLinkInformation
this->RuntimeAlways =
(this->Makefile->
GetSafeDefinition("CMAKE_PLATFORM_REQUIRED_RUNTIME_PATH"));
this->RuntimeUseChrpath = this->Target->IsChrpathUsed(config);
cmGeneratorTarget *gtgt = this->Target->GetMakefile()
->GetGlobalGenerator()
->GetGeneratorTarget(this->Target);
this->RuntimeUseChrpath = gtgt->IsChrpathUsed(config);
// Get options needed to help find dependent libraries.
std::string rlVar = "CMAKE_";

View File

@ -746,7 +746,7 @@ cmGeneratorTarget::NeedRelinkBeforeInstall(const std::string& config) const
}
// If chrpath is going to be used no relinking is needed.
if(this->Target->IsChrpathUsed(config))
if(this->IsChrpathUsed(config))
{
return false;
}
@ -779,6 +779,73 @@ cmGeneratorTarget::NeedRelinkBeforeInstall(const std::string& config) const
|| this->Target->HaveInstallTreeRPATH();
}
//----------------------------------------------------------------------------
bool cmGeneratorTarget::IsChrpathUsed(const std::string& config) const
{
// Only certain target types have an rpath.
if(!(this->GetType() == cmTarget::SHARED_LIBRARY ||
this->GetType() == cmTarget::MODULE_LIBRARY ||
this->GetType() == cmTarget::EXECUTABLE))
{
return false;
}
// If the target will not be installed we do not need to change its
// rpath.
if(!this->Target->GetHaveInstallRule())
{
return false;
}
// Skip chrpath if skipping rpath altogether.
if(this->Makefile->IsOn("CMAKE_SKIP_RPATH"))
{
return false;
}
// Skip chrpath if it does not need to be changed at install time.
if(this->GetPropertyAsBool("BUILD_WITH_INSTALL_RPATH"))
{
return false;
}
// Allow the user to disable builtin chrpath explicitly.
if(this->Makefile->IsOn("CMAKE_NO_BUILTIN_CHRPATH"))
{
return false;
}
if(this->Makefile->IsOn("CMAKE_PLATFORM_HAS_INSTALLNAME"))
{
return true;
}
#if defined(CMAKE_USE_ELF_PARSER)
// Enable if the rpath flag uses a separator and the target uses ELF
// binaries.
std::string ll = this->Target->GetLinkerLanguage(config);
if(!ll.empty())
{
std::string sepVar = "CMAKE_SHARED_LIBRARY_RUNTIME_";
sepVar += ll;
sepVar += "_FLAG_SEP";
const char* sep = this->Makefile->GetDefinition(sepVar);
if(sep && *sep)
{
// TODO: Add ELF check to ABI detection and get rid of
// CMAKE_EXECUTABLE_FORMAT.
if(const char* fmt =
this->Makefile->GetDefinition("CMAKE_EXECUTABLE_FORMAT"))
{
return strcmp(fmt, "ELF") == 0;
}
}
}
#endif
static_cast<void>(config);
return false;
}
//----------------------------------------------------------------------------
std::string cmGeneratorTarget::GetSOName(const std::string& config) const

View File

@ -215,6 +215,9 @@ public:
*/
bool NeedRelinkBeforeInstall(const std::string& config) const;
/** Return true if builtin chrpath will work for this target */
bool IsChrpathUsed(const std::string& config) const;
struct SourceFileFlags
GetTargetSourceFileFlags(const cmSourceFile* sf) const;

View File

@ -656,11 +656,10 @@ cmInstallTargetGenerator
std::string const& toDestDirPath)
{
// Skip the chrpath if the target does not need it.
if(this->ImportLibrary || !this->Target->Target->IsChrpathUsed(config))
if(this->ImportLibrary || !this->Target->IsChrpathUsed(config))
{
return;
}
// Skip if on Apple
if(this->Target->Target->GetMakefile()
->IsOn("CMAKE_PLATFORM_HAS_INSTALLNAME"))
@ -695,7 +694,7 @@ cmInstallTargetGenerator
std::string const& toDestDirPath)
{
// Skip the chrpath if the target does not need it.
if(this->ImportLibrary || !this->Target->Target->IsChrpathUsed(config))
if(this->ImportLibrary || !this->Target->IsChrpathUsed(config))
{
return;
}

View File

@ -4313,73 +4313,6 @@ void cmTarget::GetLanguages(std::set<std::string>& languages,
}
}
//----------------------------------------------------------------------------
bool cmTarget::IsChrpathUsed(const std::string& config) const
{
// Only certain target types have an rpath.
if(!(this->GetType() == cmTarget::SHARED_LIBRARY ||
this->GetType() == cmTarget::MODULE_LIBRARY ||
this->GetType() == cmTarget::EXECUTABLE))
{
return false;
}
// If the target will not be installed we do not need to change its
// rpath.
if(!this->GetHaveInstallRule())
{
return false;
}
// Skip chrpath if skipping rpath altogether.
if(this->Makefile->IsOn("CMAKE_SKIP_RPATH"))
{
return false;
}
// Skip chrpath if it does not need to be changed at install time.
if(this->GetPropertyAsBool("BUILD_WITH_INSTALL_RPATH"))
{
return false;
}
// Allow the user to disable builtin chrpath explicitly.
if(this->Makefile->IsOn("CMAKE_NO_BUILTIN_CHRPATH"))
{
return false;
}
if(this->Makefile->IsOn("CMAKE_PLATFORM_HAS_INSTALLNAME"))
{
return true;
}
#if defined(CMAKE_USE_ELF_PARSER)
// Enable if the rpath flag uses a separator and the target uses ELF
// binaries.
std::string ll = this->GetLinkerLanguage(config);
if(!ll.empty())
{
std::string sepVar = "CMAKE_SHARED_LIBRARY_RUNTIME_";
sepVar += ll;
sepVar += "_FLAG_SEP";
const char* sep = this->Makefile->GetDefinition(sepVar);
if(sep && *sep)
{
// TODO: Add ELF check to ABI detection and get rid of
// CMAKE_EXECUTABLE_FORMAT.
if(const char* fmt =
this->Makefile->GetDefinition("CMAKE_EXECUTABLE_FORMAT"))
{
return strcmp(fmt, "ELF") == 0;
}
}
}
#endif
static_cast<void>(config);
return false;
}
//----------------------------------------------------------------------------
cmTarget::ImportInfo const*
cmTarget::GetImportInfo(const std::string& config) const

View File

@ -398,9 +398,6 @@ public:
bool HaveBuildTreeRPATH(const std::string& config) const;
bool HaveInstallTreeRPATH() const;
/** Return true if builtin chrpath will work for this target */
bool IsChrpathUsed(const std::string& config) const;
/** Return the install name directory for the target in the
* build tree. For example: "\@rpath/", "\@loader_path/",
* or "/full/path/to/library". */