Merge topic 'install-export-usr-move'

0c727b9 install(EXPORT): Force absolute paths for usr-move
This commit is contained in:
Brad King 2013-03-12 13:46:51 -04:00 committed by CMake Topic Stage
commit 556ae30717
2 changed files with 29 additions and 9 deletions

View File

@ -74,17 +74,35 @@ bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os)
const char* installDest = this->IEGen->GetDestination();
if(!cmSystemTools::FileIsFullPath(installDest))
{
std::string dest = installDest;
os << "# Compute the installation prefix relative to this file.\n"
<< "get_filename_component(_IMPORT_PREFIX "
<< "\"${CMAKE_CURRENT_LIST_FILE}\" PATH)\n";
while(!dest.empty())
std::string installPrefix =
this->IEGen->GetMakefile()->GetSafeDefinition("CMAKE_INSTALL_PREFIX");
std::string absDest = installPrefix + "/" + installDest + "/";
if(strncmp(absDest.c_str(), "/lib/", 5) == 0 ||
strncmp(absDest.c_str(), "/lib64/", 7) == 0 ||
strncmp(absDest.c_str(), "/usr/lib/", 9) == 0 ||
strncmp(absDest.c_str(), "/usr/lib64/", 11) == 0)
{
os <<
"get_filename_component(_IMPORT_PREFIX \"${_IMPORT_PREFIX}\" PATH)\n";
dest = cmSystemTools::GetFilenamePath(dest);
// Assume this is a build for system package installation rather than a
// relocatable distribution. Use an absolute prefix because some Linux
// distros symlink /lib to /usr/lib which confuses the relative path
// computation below if we generate for /lib under one prefix and but the
// file is loaded from another.
os << "set(_IMPORT_PREFIX \"" << installPrefix << "\")\n";
}
else
{
std::string dest = installDest;
os << "# Compute the installation prefix relative to this file.\n"
<< "get_filename_component(_IMPORT_PREFIX "
<< "\"${CMAKE_CURRENT_LIST_FILE}\" PATH)\n";
while(!dest.empty())
{
os <<
"get_filename_component(_IMPORT_PREFIX \"${_IMPORT_PREFIX}\" PATH)\n";
dest = cmSystemTools::GetFilenamePath(dest);
}
os << "\n";
}
os << "\n";
// Import location properties may reference this variable.
this->ImportPrefix = "${_IMPORT_PREFIX}/";

View File

@ -36,6 +36,8 @@ public:
cmExportSet* GetExportSet() {return this->ExportSet;}
cmMakefile* GetMakefile() const { return this->Makefile; }
const std::string& GetNamespace() const { return this->Namespace; }
protected: