Explorar o código

Merge topic 'pkgc-import-system-fix' into release-4.1

d5f6cf5ba8 PkgC: Only remove system paths which are exact matches
93f77d8183 PkgC: Allow system paths during IMPORT, POPULATE

Acked-by: Kitware Robot <[email protected]>
Tested-by: buildbot <[email protected]>
Merge-request: !11078
Brad King hai 3 meses
pai
achega
4445478ef7

+ 3 - 0
Source/cmCMakePkgConfigCommand.cxx

@@ -911,6 +911,9 @@ std::pair<bool, bool> PopulatePCTarget(PopulateArguments& args,
   auto& pcEnv = maybeEnv->first;
   auto& imEnv = maybeEnv->second;
 
+  pcEnv.AllowSysCflags = true;
+  pcEnv.AllowSysLibs = true;
+
   pkgProviders providers;
   if (args.Providers) {
     for (auto const& provider_str : *args.Providers) {

+ 25 - 24
Source/cmPkgConfigResolver.cxx

@@ -56,6 +56,15 @@ std::string AppendAndTrim(std::string& str, cm::string_view sv)
   return { &*begin, static_cast<std::size_t>(cur - begin) + 1 };
 }
 
+cm::string_view TrimFlag(cm::string_view flag)
+{
+  std::size_t trim_size = 2;
+  for (auto c = flag.rbegin(); c != flag.rend() && std::isspace(*c); ++c) {
+    ++trim_size;
+  }
+  return { flag.data() + 2, flag.size() - trim_size };
+}
+
 } // namespace
 
 std::string cmPkgConfigVersionReq::string() const
@@ -460,12 +469,10 @@ cmPkgConfigCflagsResult cmPkgConfigResolver::MangleCflags(
 
   for (auto flag : flags) {
     if (flag.rfind("-I", 0) == 0) {
-      cm::string_view noprefix{ flag.data() + 2, flag.size() - 2 };
-
-      if (std::all_of(syspaths.begin(), syspaths.end(),
-                      [&](std::string const& path) {
-                        return noprefix.rfind(path, 0) == noprefix.npos;
-                      })) {
+      cm::string_view trimmed = TrimFlag(flag);
+      if (std::all_of(
+            syspaths.begin(), syspaths.end(),
+            [&](std::string const& path) { return path != trimmed; })) {
         result.Includes.emplace_back(AppendAndTrim(result.Flagline, flag));
       }
 
@@ -486,12 +493,10 @@ cmPkgConfigCflagsResult cmPkgConfigResolver::MangleCflags(
   for (auto flag : flags) {
     if (flag.rfind("-I", 0) == 0) {
       std::string reroot = Reroot(flag, "-I", sysroot);
-      cm::string_view noprefix{ reroot.data() + 2, reroot.size() - 2 };
-
-      if (std::all_of(syspaths.begin(), syspaths.end(),
-                      [&](std::string const& path) {
-                        return noprefix.rfind(path, 0) == noprefix.npos;
-                      })) {
+      cm::string_view trimmed = TrimFlag(reroot);
+      if (std::all_of(
+            syspaths.begin(), syspaths.end(),
+            [&](std::string const& path) { return path != trimmed; })) {
         result.Includes.emplace_back(AppendAndTrim(result.Flagline, reroot));
       }
 
@@ -548,12 +553,10 @@ cmPkgConfigLibsResult cmPkgConfigResolver::MangleLibs(
 
   for (auto flag : flags) {
     if (flag.rfind("-L", 0) == 0) {
-      cm::string_view noprefix{ flag.data() + 2, flag.size() - 2 };
-
-      if (std::all_of(syspaths.begin(), syspaths.end(),
-                      [&](std::string const& path) {
-                        return noprefix.rfind(path, 0) == noprefix.npos;
-                      })) {
+      cm::string_view trimmed = TrimFlag(flag);
+      if (std::all_of(
+            syspaths.begin(), syspaths.end(),
+            [&](std::string const& path) { return path != trimmed; })) {
         result.LibDirs.emplace_back(AppendAndTrim(result.Flagline, flag));
       }
 
@@ -576,12 +579,10 @@ cmPkgConfigLibsResult cmPkgConfigResolver::MangleLibs(
   for (auto flag : flags) {
     if (flag.rfind("-L", 0) == 0) {
       std::string reroot = Reroot(flag, "-L", sysroot);
-      cm::string_view noprefix{ reroot.data() + 2, reroot.size() - 2 };
-
-      if (std::all_of(syspaths.begin(), syspaths.end(),
-                      [&](std::string const& path) {
-                        return noprefix.rfind(path, 0) == noprefix.npos;
-                      })) {
+      cm::string_view trimmed = TrimFlag(reroot);
+      if (std::all_of(
+            syspaths.begin(), syspaths.end(),
+            [&](std::string const& path) { return path != trimmed; })) {
         result.LibDirs.emplace_back(AppendAndTrim(result.Flagline, reroot));
       }
 

+ 2 - 2
Tests/RunCMake/cmake_pkg_config/ExtractEnv-stderr.txt

@@ -1,5 +1,5 @@
-Includes: -I/Alpha;-I/Gamma
-LibDirs: -L/Delta;-L/Zeta
+Includes: -I/Alpha;-I/Alpha/sub;-I/Gamma
+LibDirs: -L/Delta;-L/Delta/sub;-L/Zeta
 Cflags: QuxInstalled
 PC_LIB_DIRS: Alpha;Beta
 PC_PATH: [^

+ 8 - 8
Tests/RunCMake/cmake_pkg_config/ExtractMangle-stderr.txt

@@ -1,8 +1,8 @@
-Cflags: Beta -I/Gamma
-Includes: -I/Gamma
-Libs: Epsilon -L/Zeta
-LibDirs: -L/Zeta
-Cflags: -I/Alpha Beta -I/Gamma
-Includes: -I/Alpha;-I/Gamma
-Libs: -L/Delta Epsilon -L/Zeta
-LibDirs: -L/Delta;-L/Zeta
+Cflags: -I/Alpha/sub Beta -I/Gamma
+Includes: -I/Alpha/sub;-I/Gamma
+Libs: -L/Delta/sub Epsilon -L/Zeta
+LibDirs: -L/Delta/sub;-L/Zeta
+Cflags: -I/Alpha -I/Alpha/sub Beta -I/Gamma
+Includes: -I/Alpha;-I/Alpha/sub;-I/Gamma
+Libs: -L/Delta -L/Delta/sub Epsilon -L/Zeta
+LibDirs: -L/Delta;-L/Delta/sub;-L/Zeta

+ 4 - 4
Tests/RunCMake/cmake_pkg_config/ExtractReroot-stderr.txt

@@ -1,4 +1,4 @@
-Cflags: -I/NewRoot/Alpha Beta -I/NewRoot/Gamma
-Includes: -I/NewRoot/Alpha;-I/NewRoot/Gamma
-Libs: -L/NewRoot/Delta Epsilon -L/NewRoot/Zeta
-LibDirs: -L/NewRoot/Delta;-L/NewRoot/Zeta
+Cflags: -I/NewRoot/Alpha -I/NewRoot/Alpha/sub Beta -I/NewRoot/Gamma
+Includes: -I/NewRoot/Alpha;-I/NewRoot/Alpha/sub;-I/NewRoot/Gamma
+Libs: -L/NewRoot/Delta -L/NewRoot/Delta/sub Epsilon -L/NewRoot/Zeta
+LibDirs: -L/NewRoot/Delta;-L/NewRoot/Delta/sub;-L/NewRoot/Zeta

+ 11 - 0
Tests/RunCMake/cmake_pkg_config/ImportSystem-check.cmake

@@ -0,0 +1,11 @@
+set(expected
+"Include Directories: /TestDirectories/Include
+Link Directories: /TestDirectories/Library
+"
+)
+
+file(READ "${RunCMake_TEST_BINARY_DIR}/import-system.txt" actual)
+
+if(NOT(expected STREQUAL actual))
+  set(RunCMake_TEST_FAILED "cmake_pkg_config import-system.txt does not match expected:\n${actual}")
+endif()

+ 12 - 0
Tests/RunCMake/cmake_pkg_config/ImportSystem.cmake

@@ -0,0 +1,12 @@
+set(CMAKE_PKG_CONFIG_SYS_INCLUDE_DIRS /TestDirectories/Include)
+set(CMAKE_PKG_CONFIG_SYS_LIB_DIRS /TestDirectories/Library)
+
+cmake_pkg_config(IMPORT import-simple REQUIRED)
+
+file(GENERATE
+  OUTPUT import-system.txt
+  CONTENT
+"Include Directories: $<TARGET_PROPERTY:PkgConfig::import-simple,INTERFACE_INCLUDE_DIRECTORIES>
+Link Directories: $<TARGET_PROPERTY:PkgConfig::import-simple,INTERFACE_LINK_DIRECTORIES>
+"
+)

+ 2 - 2
Tests/RunCMake/cmake_pkg_config/PackageRoot/relocate.pc

@@ -2,5 +2,5 @@ Name: Relocate
 Description: For testing relocation and flag mangling
 Version: 1.0.0
 
-Cflags: -I/Alpha Beta -I/Gamma
-Libs: -L/Delta Epsilon -L/Zeta
+Cflags: -I/Alpha -I/Alpha/sub Beta -I/Gamma
+Libs: -L/Delta -L/Delta/sub Epsilon -L/Zeta

+ 1 - 0
Tests/RunCMake/cmake_pkg_config/RunCMakeTest.cmake

@@ -20,6 +20,7 @@ run_cmake(ImportName)
 run_cmake(ImportPrefix)
 run_cmake(ImportRequires)
 run_cmake(ImportSimple)
+run_cmake(ImportSystem)
 run_cmake(ImportTransitiveFail)
 run_cmake(ImportTransitiveVersion)
 run_cmake(ImportTransitiveVersionFail)