install: Fix computed import prefix in export files when it is "/"

When exporting from a project (with install(EXPORT ...)), the
`<PROJECT>Targets.cmake` file contains logic for computing the
`_IMPORT_PREFIX` from its own location.  This `_IMPORT_PREFIX` is then
used in the `<PROJECT>Targets-<config>.cmake` file to generate the
`IMPORTED_LOCATION_<CONFIG>`.  The generation unconditionally appends a
"/" to `_IMPORT_PREFIX` before appending the rest of the path.  If
`_IMPORT_PREFIX` is "/", then the `IMPORTED_LOCATION_<CONFIG>`
properties all start with exactly two leading slashes ("//").

Exactly two leading slashes is a special case in POSIX file paths, such
that its interpretation is left up to the implementation.  This means
that changing the path prefix from "/" to "//" should not be allowed.

Since references to `_IMPORT_PREFIX` are always followed by a "/",
simply check the value to replace "/" with "".
This commit is contained in:
Ben Keller 2016-05-10 11:44:40 -04:00 committed by Brad King
parent 8317ea01aa
commit 290e4ce8a8
1 changed files with 4 additions and 1 deletions

View File

@ -122,7 +122,10 @@ bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os)
"PATH)\n"; "PATH)\n";
dest = cmSystemTools::GetFilenamePath(dest); dest = cmSystemTools::GetFilenamePath(dest);
} }
os << "\n"; os << "if(_IMPORT_PREFIX STREQUAL \"/\")\n"
<< " set(_IMPORT_PREFIX \"\")\n"
<< "endif()\n"
<< "\n";
} }
std::vector<std::string> missingTargets; std::vector<std::string> missingTargets;