Просмотр исходного кода

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 "".
Ben Keller 9 лет назад
Родитель
Сommit
290e4ce8a8
1 измененных файлов с 4 добавлено и 1 удалено
  1. 4 1
      Source/cmExportInstallFileGenerator.cxx

+ 4 - 1
Source/cmExportInstallFileGenerator.cxx

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