Merge topic 'rpath-use-implicit-link-dirs'
95a9c80
Merge topic 'LINK_LIBRARIES-property' into rpath-use-implicit-link-dirsbaa33ac
AIX-GNU: Put implicit link directories in runtime libpath (#13909)171b099
Avoid duplicate RPATH entries
This commit is contained in:
commit
e85f1c28d4
|
@ -23,4 +23,5 @@ macro(__aix_compiler_gnu lang)
|
||||||
set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG_SEP ":")
|
set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG_SEP ":")
|
||||||
set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS} -Wl,-G,-brtl,-bnoipath")
|
set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS} -Wl,-G,-brtl,-bnoipath")
|
||||||
set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-Wl,-brtl,-bnoipath,-bexpall") # +s, flag for exe link to use shared lib
|
set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-Wl,-brtl,-bnoipath,-bexpall") # +s, flag for exe link to use shared lib
|
||||||
|
set(CMAKE_${lang}_USE_IMPLICIT_LINK_DIRECTORIES_IN_RUNTIME_PATH 1)
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
|
@ -1783,6 +1783,22 @@ cmComputeLinkInformation::AddLibraryRuntimeInfo(std::string const& fullPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
static void cmCLI_ExpandListUnique(const char* str,
|
||||||
|
std::vector<std::string>& out,
|
||||||
|
std::set<cmStdString>& emitted)
|
||||||
|
{
|
||||||
|
std::vector<std::string> tmp;
|
||||||
|
cmSystemTools::ExpandListArgument(str, tmp);
|
||||||
|
for(std::vector<std::string>::iterator i = tmp.begin(); i != tmp.end(); ++i)
|
||||||
|
{
|
||||||
|
if(emitted.insert(*i).second)
|
||||||
|
{
|
||||||
|
out.push_back(*i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void cmComputeLinkInformation::GetRPath(std::vector<std::string>& runtimeDirs,
|
void cmComputeLinkInformation::GetRPath(std::vector<std::string>& runtimeDirs,
|
||||||
bool for_install)
|
bool for_install)
|
||||||
|
@ -1808,10 +1824,11 @@ void cmComputeLinkInformation::GetRPath(std::vector<std::string>& runtimeDirs,
|
||||||
this->Target->GetPropertyAsBool("INSTALL_RPATH_USE_LINK_PATH");
|
this->Target->GetPropertyAsBool("INSTALL_RPATH_USE_LINK_PATH");
|
||||||
|
|
||||||
// Construct the RPATH.
|
// Construct the RPATH.
|
||||||
|
std::set<cmStdString> emitted;
|
||||||
if(use_install_rpath)
|
if(use_install_rpath)
|
||||||
{
|
{
|
||||||
const char* install_rpath = this->Target->GetProperty("INSTALL_RPATH");
|
const char* install_rpath = this->Target->GetProperty("INSTALL_RPATH");
|
||||||
cmSystemTools::ExpandListArgument(install_rpath, runtimeDirs);
|
cmCLI_ExpandListUnique(install_rpath, runtimeDirs, emitted);
|
||||||
}
|
}
|
||||||
if(use_build_rpath || use_link_rpath)
|
if(use_build_rpath || use_link_rpath)
|
||||||
{
|
{
|
||||||
|
@ -1822,9 +1839,12 @@ void cmComputeLinkInformation::GetRPath(std::vector<std::string>& runtimeDirs,
|
||||||
// Put this directory in the rpath if using build-tree rpath
|
// Put this directory in the rpath if using build-tree rpath
|
||||||
// support or if using the link path as an rpath.
|
// support or if using the link path as an rpath.
|
||||||
if(use_build_rpath)
|
if(use_build_rpath)
|
||||||
|
{
|
||||||
|
if(emitted.insert(*ri).second)
|
||||||
{
|
{
|
||||||
runtimeDirs.push_back(*ri);
|
runtimeDirs.push_back(*ri);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if(use_link_rpath)
|
else if(use_link_rpath)
|
||||||
{
|
{
|
||||||
// Do not add any path inside the source or build tree.
|
// Do not add any path inside the source or build tree.
|
||||||
|
@ -1835,15 +1855,40 @@ void cmComputeLinkInformation::GetRPath(std::vector<std::string>& runtimeDirs,
|
||||||
!cmSystemTools::IsSubDirectory(ri->c_str(), topSourceDir) &&
|
!cmSystemTools::IsSubDirectory(ri->c_str(), topSourceDir) &&
|
||||||
!cmSystemTools::IsSubDirectory(ri->c_str(), topBinaryDir))
|
!cmSystemTools::IsSubDirectory(ri->c_str(), topBinaryDir))
|
||||||
{
|
{
|
||||||
|
if(emitted.insert(*ri).second)
|
||||||
|
{
|
||||||
runtimeDirs.push_back(*ri);
|
runtimeDirs.push_back(*ri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add runtime paths required by the languages to always be
|
||||||
|
// present. This is done even when skipping rpath support.
|
||||||
|
{
|
||||||
|
cmTarget::LinkClosure const* lc =
|
||||||
|
this->Target->GetLinkClosure(this->Config, this->HeadTarget);
|
||||||
|
for(std::vector<std::string>::const_iterator li = lc->Languages.begin();
|
||||||
|
li != lc->Languages.end(); ++li)
|
||||||
|
{
|
||||||
|
std::string useVar = "CMAKE_" + *li +
|
||||||
|
"_USE_IMPLICIT_LINK_DIRECTORIES_IN_RUNTIME_PATH";
|
||||||
|
if(this->Makefile->IsOn(useVar.c_str()))
|
||||||
|
{
|
||||||
|
std::string dirVar = "CMAKE_" + *li +
|
||||||
|
"_IMPLICIT_LINK_DIRECTORIES";
|
||||||
|
if(const char* dirs = this->Makefile->GetDefinition(dirVar.c_str()))
|
||||||
|
{
|
||||||
|
cmCLI_ExpandListUnique(dirs, runtimeDirs, emitted);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Add runtime paths required by the platform to always be
|
// Add runtime paths required by the platform to always be
|
||||||
// present. This is done even when skipping rpath support.
|
// present. This is done even when skipping rpath support.
|
||||||
cmSystemTools::ExpandListArgument(this->RuntimeAlways.c_str(), runtimeDirs);
|
cmCLI_ExpandListUnique(this->RuntimeAlways.c_str(), runtimeDirs, emitted);
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
|
@ -1867,6 +1867,9 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
|
||||||
cmProperty::VARIABLE,0,0);
|
cmProperty::VARIABLE,0,0);
|
||||||
cm->DefineProperty("CMAKE_PLATFORM_REQUIRED_RUNTIME_PATH",
|
cm->DefineProperty("CMAKE_PLATFORM_REQUIRED_RUNTIME_PATH",
|
||||||
cmProperty::VARIABLE,0,0);
|
cmProperty::VARIABLE,0,0);
|
||||||
|
cm->DefineProperty(
|
||||||
|
"CMAKE_<LANG>_USE_IMPLICIT_LINK_DIRECTORIES_IN_RUNTIME_PATH",
|
||||||
|
cmProperty::VARIABLE,0,0);
|
||||||
cm->DefineProperty("CMAKE_SHARED_MODULE_CREATE_<LANG>_FLAGS",
|
cm->DefineProperty("CMAKE_SHARED_MODULE_CREATE_<LANG>_FLAGS",
|
||||||
cmProperty::VARIABLE,0,0);
|
cmProperty::VARIABLE,0,0);
|
||||||
cm->DefineProperty("CMAKE_SHARED_MODULE_<LANG>_FLAGS",
|
cm->DefineProperty("CMAKE_SHARED_MODULE_<LANG>_FLAGS",
|
||||||
|
|
Loading…
Reference in New Issue