ENH: Inform user when RPATH is set during installation.
- Original patch from Alex. - Modified to print only when RPATH is actually set.
This commit is contained in:
parent
852242e56b
commit
757875df91
|
@ -1411,7 +1411,8 @@ cmFileCommand::HandleRPathChangeCommand(std::vector<std::string> const& args)
|
||||||
cmSystemToolsFileTime* ft = cmSystemTools::FileTimeNew();
|
cmSystemToolsFileTime* ft = cmSystemTools::FileTimeNew();
|
||||||
bool have_ft = cmSystemTools::FileTimeGet(file, ft);
|
bool have_ft = cmSystemTools::FileTimeGet(file, ft);
|
||||||
std::string emsg;
|
std::string emsg;
|
||||||
if(!cmSystemTools::ChangeRPath(file, oldRPath, newRPath, &emsg))
|
bool changed;
|
||||||
|
if(!cmSystemTools::ChangeRPath(file, oldRPath, newRPath, &emsg, &changed))
|
||||||
{
|
{
|
||||||
cmOStringStream e;
|
cmOStringStream e;
|
||||||
e << "RPATH_CHANGE could not write new RPATH:\n"
|
e << "RPATH_CHANGE could not write new RPATH:\n"
|
||||||
|
@ -1422,9 +1423,21 @@ cmFileCommand::HandleRPathChangeCommand(std::vector<std::string> const& args)
|
||||||
this->SetError(e.str().c_str());
|
this->SetError(e.str().c_str());
|
||||||
success = false;
|
success = false;
|
||||||
}
|
}
|
||||||
if(success && have_ft)
|
if(success)
|
||||||
{
|
{
|
||||||
cmSystemTools::FileTimeSet(file, ft);
|
if(changed)
|
||||||
|
{
|
||||||
|
std::string message = "Set runtime path of \"";
|
||||||
|
message += file;
|
||||||
|
message += "\" to \"";
|
||||||
|
message += newRPath;
|
||||||
|
message += "\"";
|
||||||
|
this->Makefile->DisplayStatus(message.c_str(), -1);
|
||||||
|
}
|
||||||
|
if(have_ft)
|
||||||
|
{
|
||||||
|
cmSystemTools::FileTimeSet(file, ft);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
cmSystemTools::FileTimeDelete(ft);
|
cmSystemTools::FileTimeDelete(ft);
|
||||||
return success;
|
return success;
|
||||||
|
|
|
@ -2332,9 +2332,14 @@ std::string::size_type cmSystemToolsFindRPath(std::string const& have,
|
||||||
bool cmSystemTools::ChangeRPath(std::string const& file,
|
bool cmSystemTools::ChangeRPath(std::string const& file,
|
||||||
std::string const& oldRPath,
|
std::string const& oldRPath,
|
||||||
std::string const& newRPath,
|
std::string const& newRPath,
|
||||||
std::string* emsg)
|
std::string* emsg,
|
||||||
|
bool* changed)
|
||||||
{
|
{
|
||||||
#if defined(CMAKE_USE_ELF_PARSER)
|
#if defined(CMAKE_USE_ELF_PARSER)
|
||||||
|
if(changed)
|
||||||
|
{
|
||||||
|
*changed = false;
|
||||||
|
}
|
||||||
unsigned long rpathPosition = 0;
|
unsigned long rpathPosition = 0;
|
||||||
unsigned long rpathSize = 0;
|
unsigned long rpathSize = 0;
|
||||||
std::string rpathPrefix;
|
std::string rpathPrefix;
|
||||||
|
@ -2445,6 +2450,10 @@ bool cmSystemTools::ChangeRPath(std::string const& file,
|
||||||
// Make sure everything was okay.
|
// Make sure everything was okay.
|
||||||
if(f)
|
if(f)
|
||||||
{
|
{
|
||||||
|
if(changed)
|
||||||
|
{
|
||||||
|
*changed = true;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2460,6 +2469,7 @@ bool cmSystemTools::ChangeRPath(std::string const& file,
|
||||||
(void)oldRPath;
|
(void)oldRPath;
|
||||||
(void)newRPath;
|
(void)newRPath;
|
||||||
(void)emsg;
|
(void)emsg;
|
||||||
|
(void)changed;
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -391,7 +391,8 @@ public:
|
||||||
static bool ChangeRPath(std::string const& file,
|
static bool ChangeRPath(std::string const& file,
|
||||||
std::string const& oldRPath,
|
std::string const& oldRPath,
|
||||||
std::string const& newRPath,
|
std::string const& newRPath,
|
||||||
std::string* emsg = 0);
|
std::string* emsg = 0,
|
||||||
|
bool* changed = 0);
|
||||||
|
|
||||||
/** Try to remove the RPATH from an ELF binary. */
|
/** Try to remove the RPATH from an ELF binary. */
|
||||||
static bool RemoveRPath(std::string const& file, std::string* emsg = 0);
|
static bool RemoveRPath(std::string const& file, std::string* emsg = 0);
|
||||||
|
|
Loading…
Reference in New Issue