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:
Brad King 2008-05-27 10:22:03 -04:00
parent 852242e56b
commit 757875df91
3 changed files with 29 additions and 5 deletions

View File

@ -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;

View File

@ -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
} }

View File

@ -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);