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

fileapi: Add interfaceSources to the target codemodel replies

Fixes: #27489
Craig Scott 2 недель назад
Родитель
Сommit
b8af7837b3
90 измененных файлов с 674 добавлено и 114 удалено
  1. 38 0
      Help/manual/cmake-file-api.7.rst
  2. 198 10
      Help/manual/file_api/schema_target.json
  3. 8 0
      Help/release/dev/fileapi-interface-sources.rst
  4. 1 1
      Source/cmFileAPI.cxx
  5. 88 4
      Source/cmFileAPICodemodel.cxx
  6. 1 1
      Tests/RunCMake/CommandLine/E_capabilities-stdout.txt
  7. 17 2
      Tests/RunCMake/FileAPI/codemodel-v2-check.py
  8. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_alias.json
  9. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_custom.json
  10. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_cxx.json
  11. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_direct.json
  12. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_external.json
  13. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_framework.json
  14. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_imported.json
  15. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_interface.json
  16. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_object.json
  17. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_top.json
  18. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_alias_exe.json
  19. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_exe.json
  20. 34 0
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_headers_1.json
  21. 16 0
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_headers_2.json
  22. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_lib.json
  23. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_object_exe.json
  24. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_object_lib.json
  25. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_shared_exe.json
  26. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_shared_lib.json
  27. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_static_exe.json
  28. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_static_lib.json
  29. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_subdir.json
  30. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/compile_usage_exe.json
  31. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/custom_exe.json
  32. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/custom_tgt.json
  33. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_alias_exe.json
  34. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe.json
  35. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_cross_emulator.json
  36. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_cross_emulator_args.json
  37. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_precompileheader.json
  38. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_precompileheader_2arch.json
  39. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_precompileheader_multigen.json
  40. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_test_launcher.json
  41. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_test_launcher_and_cross_emulator.json
  42. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_lib.json
  43. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_object_exe.json
  44. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_object_lib.json
  45. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_shared_exe.json
  46. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_shared_lib.json
  47. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_standard_compile_feature_exe.json
  48. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_standard_exe.json
  49. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_static_exe.json
  50. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_static_lib.json
  51. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/exe_framework.json
  52. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/generated_exe.json
  53. 1 0
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/iface_none.json
  54. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/iface_srcs.json
  55. 1 0
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/iface_symbolic.json
  56. 1 0
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/import_framework.json
  57. 1 0
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/imported_exe.json
  58. 1 0
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/imported_interface_lib.json
  59. 1 0
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/imported_interface_symbolic_lib.json
  60. 1 0
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/imported_lib.json
  61. 1 0
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/imported_object_lib.json
  62. 1 0
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/imported_shared_lib.json
  63. 1 0
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/imported_static_lib.json
  64. 1 0
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/inject_direct_lib.json
  65. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/inject_direct_lib_impl.json
  66. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/interface_exe.json
  67. 1 0
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/interface_lib.json
  68. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/link_imported_exe.json
  69. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/link_imported_interface_exe.json
  70. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/link_imported_interface_symbolic_exe.json
  71. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/link_imported_object_exe.json
  72. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/link_imported_shared_exe.json
  73. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/link_imported_static_exe.json
  74. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/link_transitive_direct_exe.json
  75. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/link_usage_exe.json
  76. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/shared_framework.json
  77. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/static_framework.json
  78. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/transitive_direct_lib.json
  79. 1 0
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/unused_imported_shared_lib.json
  80. 3 1
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/usage_lib.json
  81. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/zero_check_alias.json
  82. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/zero_check_custom.json
  83. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/zero_check_cxx.json
  84. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/zero_check_direct.json
  85. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/zero_check_external.json
  86. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/zero_check_framework.json
  87. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/zero_check_imported.json
  88. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/zero_check_interface.json
  89. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/zero_check_object.json
  90. 5 2
      Tests/RunCMake/FileAPI/codemodel-v2-data/targets/zero_check_top.json

+ 38 - 0
Help/manual/cmake-file-api.7.rst

@@ -1637,6 +1637,35 @@ with members:
     available.  The value is an unsigned integer 0-based index into
     the ``backtraceGraph`` member's ``nodes`` array.
 
+``interfaceSources``
+  An optional member that is present when a target defines one or more
+  interface sources.  The value is a JSON array of entries corresponding
+  to the target's interface source files.  Each entry is a JSON object
+  with members:
+
+  ``path``
+    A string specifying the path to the source file on disk, represented
+    with forward slashes.  If the file is inside the top-level source
+    directory then the path is specified relative to that directory.
+    Otherwise the path is absolute.
+
+  ``sourceGroupIndex``
+    Optional member that is present when the source is part of a source
+    group either via the :command:`source_group` command or by default.
+    The value is an unsigned integer 0-based index into the
+    ``sourceGroups`` array.
+
+  ``isGenerated``
+    Optional member that is present with boolean value ``true`` if
+    the source is :prop_sf:`GENERATED`.
+
+  ``fileSetIndex``
+    Optional member that is present when the source is part of a file set.
+    The value is an unsigned integer 0-based index into the ``fileSets``
+    array.
+
+  This field was added in codemodel version 2.10.
+
 ``sourceGroups``
   Optional member that is present when sources are grouped together by
   the :command:`source_group` command or by default.  The value is a
@@ -1651,6 +1680,15 @@ with members:
     Each entry is an unsigned integer 0-based index into the
     main ``sources`` array for the target.
 
+  ``interfaceSourceIndexes``
+    Optional member that is present when at least one interface source file
+    is part of the source group.  The value is a JSON array listing the
+    interface sources belonging to the group.  Each entry is an unsigned
+    integer 0-based index into the main ``interfaceSources`` array for the
+    target.
+
+    This field was added in codemodel version 2.10.
+
 ``compileGroups``
   Optional member that is present when the target has sources that compile.
   The value is a JSON array of entries corresponding to groups of sources

+ 198 - 10
Help/manual/file_api/schema_target.json

@@ -31,6 +31,9 @@
     },
     {
       "$ref": "#/definitions/codemodelV2_9"
+    },
+    {
+      "$ref": "#/definitions/codemodelV2_10"
     }
   ],
   "definitions": {
@@ -47,7 +50,25 @@
         },
         "minor": {
           "type": "integer",
-          "minimum": 9
+          "const": 9
+        }
+      },
+      "additionalProperties": false
+    },
+    "codemodelVersionV2_10": {
+      "type": "object",
+      "required": [
+        "major",
+        "minor"
+      ],
+      "properties": {
+        "major": {
+          "type": "integer",
+          "const": 2
+        },
+        "minor": {
+          "type": "integer",
+          "minimum": 10
         }
       },
       "additionalProperties": false
@@ -615,7 +636,56 @@
         "additionalProperties": false
       }
     },
-    "sourceGroups": {
+    "interfaceSourcesV2_10": {
+      "type": "array",
+      "items": {
+        "type": "object",
+        "required": [
+          "path"
+        ],
+        "properties": {
+          "path": {
+            "$ref": "#/definitions/sourcesPath"
+          },
+          "sourceGroupIndex": {
+            "$ref": "#/definitions/sourcesSourceGroupIndex"
+          },
+          "isGenerated": {
+            "$ref": "#/definitions/sourcesIsGenerated"
+          },
+          "fileSetIndex": {
+            "$ref": "#/definitions/sourcesFileSetIndexV2_5"
+          }
+        },
+        "additionalProperties": false
+      }
+    },
+    "sourceGroupsV2_0": {
+      "type": "array",
+      "items": {
+        "type": "object",
+        "required": [
+          "name",
+          "sourceIndexes"
+        ],
+        "properties": {
+          "name": {
+            "type": "string",
+            "description": "Name of source group"
+          },
+          "sourceIndexes": {
+            "type": "array",
+            "items": {
+              "type": "integer",
+              "minimum": 0
+            },
+            "description": "Indices into sources array"
+          }
+        },
+        "additionalProperties": false
+      }
+    },
+    "sourceGroupsV2_10": {
       "type": "array",
       "items": {
         "type": "object",
@@ -635,6 +705,14 @@
               "minimum": 0
             },
             "description": "Indices into sources array"
+          },
+          "interfaceSourceIndexes": {
+            "type": "array",
+            "items": {
+              "type": "integer",
+              "minimum": 0
+            },
+            "description": "Indices into interfaceSources array"
           }
         },
         "additionalProperties": false
@@ -1052,7 +1130,7 @@
           "$ref": "#/definitions/sourcesV2_0"
         },
         "sourceGroups": {
-          "$ref": "#/definitions/sourceGroups"
+          "$ref": "#/definitions/sourceGroupsV2_0"
         },
         "compileGroups": {
           "$ref": "#/definitions/compileGroupsV2_0"
@@ -1116,7 +1194,7 @@
           "$ref": "#/definitions/sourcesV2_0"
         },
         "sourceGroups": {
-          "$ref": "#/definitions/sourceGroups"
+          "$ref": "#/definitions/sourceGroupsV2_0"
         },
         "compileGroups": {
           "$ref": "#/definitions/compileGroupsV2_1"
@@ -1180,7 +1258,7 @@
           "$ref": "#/definitions/sourcesV2_0"
         },
         "sourceGroups": {
-          "$ref": "#/definitions/sourceGroups"
+          "$ref": "#/definitions/sourceGroupsV2_0"
         },
         "compileGroups": {
           "$ref": "#/definitions/compileGroupsV2_2"
@@ -1247,7 +1325,7 @@
           "$ref": "#/definitions/sourcesV2_5"
         },
         "sourceGroups": {
-          "$ref": "#/definitions/sourceGroups"
+          "$ref": "#/definitions/sourceGroupsV2_0"
         },
         "compileGroups": {
           "$ref": "#/definitions/compileGroupsV2_2"
@@ -1314,7 +1392,7 @@
           "$ref": "#/definitions/sourcesV2_5"
         },
         "sourceGroups": {
-          "$ref": "#/definitions/sourceGroups"
+          "$ref": "#/definitions/sourceGroupsV2_0"
         },
         "compileGroups": {
           "$ref": "#/definitions/compileGroupsV2_6"
@@ -1384,7 +1462,7 @@
           "$ref": "#/definitions/sourcesV2_5"
         },
         "sourceGroups": {
-          "$ref": "#/definitions/sourceGroups"
+          "$ref": "#/definitions/sourceGroupsV2_0"
         },
         "compileGroups": {
           "$ref": "#/definitions/compileGroupsV2_6"
@@ -1457,7 +1535,7 @@
           "$ref": "#/definitions/sourcesV2_5"
         },
         "sourceGroups": {
-          "$ref": "#/definitions/sourceGroups"
+          "$ref": "#/definitions/sourceGroupsV2_0"
         },
         "compileGroups": {
           "$ref": "#/definitions/compileGroupsV2_6"
@@ -1564,7 +1642,117 @@
           "$ref": "#/definitions/symbolicV2_9"
         },
         "sourceGroups": {
-          "$ref": "#/definitions/sourceGroups"
+          "$ref": "#/definitions/sourceGroupsV2_0"
+        },
+        "compileGroups": {
+          "$ref": "#/definitions/compileGroupsV2_6"
+        },
+        "backtraceGraph": {
+          "$ref": "#/definitions/backtraceGraph"
+        }
+      },
+      "additionalProperties": false
+    },
+    "codemodelV2_10": {
+      "required": [
+        "codemodelVersion",
+        "name",
+        "id",
+        "type",
+        "paths",
+        "sources",
+        "backtraceGraph"
+      ],
+      "properties": {
+        "codemodelVersion": {
+          "$ref": "#/definitions/codemodelVersionV2_10"
+        },
+        "name": {
+          "$ref": "#/definitions/name"
+        },
+        "id": {
+          "$ref": "#/definitions/id"
+        },
+        "type": {
+          "$ref": "#/definitions/typeV2_9"
+        },
+        "imported": {
+          "$ref": "#/definitions/importedV2_9"
+        },
+        "local": {
+          "$ref": "#/definitions/localV2_9"
+        },
+        "abstract": {
+          "$ref": "#/definitions/abstractV2_9"
+        },
+        "backtrace": {
+          "$ref": "#/definitions/backtrace"
+        },
+        "folder": {
+          "$ref": "#/definitions/folder"
+        },
+        "paths": {
+          "$ref": "#/definitions/paths"
+        },
+        "nameOnDisk": {
+          "$ref": "#/definitions/nameOnDisk"
+        },
+        "artifacts": {
+          "$ref": "#/definitions/artifacts"
+        },
+        "isGeneratorProvided": {
+          "$ref": "#/definitions/isGeneratorProvided"
+        },
+        "install": {
+          "$ref": "#/definitions/install"
+        },
+        "launchers": {
+          "$ref": "#/definitions/launchersV2_7"
+        },
+        "link": {
+          "$ref": "#/definitions/link"
+        },
+        "archive": {
+          "$ref": "#/definitions/archive"
+        },
+        "debugger": {
+          "$ref": "#/definitions/debuggerV2_8"
+        },
+        "dependencies": {
+          "$ref": "#/definitions/dependencies"
+        },
+        "linkLibraries": {
+          "$ref": "#/definitions/linkLibrariesV2_9"
+        },
+        "interfaceLinkLibraries": {
+          "$ref": "#/definitions/interfaceLinkLibrariesV2_9"
+        },
+        "compileDependencies": {
+          "$ref": "#/definitions/compileDependenciesV2_9"
+        },
+        "interfaceCompileDependencies": {
+          "$ref": "#/definitions/interfaceCompileDependenciesV2_9"
+        },
+        "objectDependencies": {
+          "$ref": "#/definitions/onlyTargetDependenciesArrayV2_9"
+        },
+        "orderDependencies": {
+          "$ref": "#/definitions/onlyTargetDependenciesArrayV2_9"
+        },
+        "fileSets": {
+          "$ref": "#/definitions/fileSetsV2_5"
+        },
+        "sources": {
+          "$ref": "#/definitions/sourcesV2_5"
+        },
+        "interfaceSources": {
+          "$ref": "#/definitions/interfaceSourcesV2_10"
+        },
+        "symbolic": {
+          "$ref": "#/definitions/symbolicV2_9"
+        },
+        "sourceGroups": {
+          "$ref": "#/definitions/sourceGroupsV2_10"
         },
         "compileGroups": {
           "$ref": "#/definitions/compileGroupsV2_6"

+ 8 - 0
Help/release/dev/fileapi-interface-sources.rst

@@ -0,0 +1,8 @@
+fileapi-interface-sources
+-------------------------
+
+* The :manual:`cmake-file-api(7)` "codemodel" version 2 version field has
+  been updated to 2.10.
+* The :manual:`cmake-file-api(7)` "codemodel" version 2 "target" object
+  gained a new ``interfaceSources`` array field, and the ``sourceGroups``
+  array items gained a new ``interfaceSourceIndexes`` array field.

+ 1 - 1
Source/cmFileAPI.cxx

@@ -822,7 +822,7 @@ std::string cmFileAPI::NoSupportedVersion(
 // Update the following files as well when updating this constant:
 //   Help/manual/cmake-file-api.7.rst
 //   Tests/RunCMake/FileAPI/codemodel-v2-check.py (check_objects())
-static unsigned int const CodeModelV2Minor = 9;
+static unsigned int const CodeModelV2Minor = 10;
 
 void cmFileAPI::BuildClientRequestCodeModel(
   ClientRequest& r, std::vector<RequestVersion> const& versions)

+ 88 - 4
Source/cmFileAPICodemodel.cxx

@@ -450,6 +450,7 @@ class Target
   {
     std::string Name;
     Json::Value SourceIndexes = Json::arrayValue;
+    Json::Value InterfaceSourceIndexes = Json::arrayValue;
   };
   std::unordered_map<cmSourceGroup const*, Json::ArrayIndex> SourceGroupsMap;
   std::vector<SourceGroup> SourceGroups;
@@ -464,6 +465,8 @@ class Target
 
   using FileSetDatabase = std::map<std::string, Json::ArrayIndex>;
 
+  std::vector<cmFileSetVisibility> FileSetVisibilities;
+
   template <typename T>
   JBT<T> ToJBT(BT<T> const& bt)
   {
@@ -484,7 +487,7 @@ class Target
   void ProcessLanguages();
   void ProcessLanguage(std::string const& lang);
 
-  Json::ArrayIndex AddSourceGroup(cmSourceGroup* sg, Json::ArrayIndex si);
+  Json::ArrayIndex AddSourceGroup(cmSourceGroup* sg);
   CompileData BuildCompileData(cmSourceFile* sf);
   CompileData MergeCompileData(CompileData const& fd);
   Json::ArrayIndex AddSourceCompileGroup(cmSourceFile* sf,
@@ -504,6 +507,9 @@ class Target
   Json::Value DumpSources(FileSetDatabase const& fsdb);
   Json::Value DumpSource(cmGeneratorTarget::SourceAndKind const& sk,
                          Json::ArrayIndex si, FileSetDatabase const& fsdb);
+  Json::Value DumpInterfaceSources(FileSetDatabase const& fsdb);
+  Json::Value DumpInterfaceSource(std::string path, Json::ArrayIndex si,
+                                  FileSetDatabase const& fsdb);
   Json::Value DumpSourceGroups();
   Json::Value DumpSourceGroup(SourceGroup& sg);
   Json::Value DumpCompileGroups();
@@ -1373,6 +1379,11 @@ Json::Value Target::Dump()
     // output a sources array to preserve backward compatibility
     target["sources"] = this->DumpSources(fileSetInfo.second);
 
+    auto interfaceSources = this->DumpInterfaceSources(fileSetInfo.second);
+    if (!interfaceSources.empty()) {
+      target["interfaceSources"] = std::move(interfaceSources);
+    }
+
     Json::Value folder = this->DumpFolder();
     if (!folder.isNull()) {
       target["folder"] = std::move(folder);
@@ -1466,7 +1477,7 @@ void Target::ProcessLanguage(std::string const& lang)
   }
 }
 
-Json::ArrayIndex Target::AddSourceGroup(cmSourceGroup* sg, Json::ArrayIndex si)
+Json::ArrayIndex Target::AddSourceGroup(cmSourceGroup* sg)
 {
   auto i = this->SourceGroupsMap.find(sg);
   if (i == this->SourceGroupsMap.end()) {
@@ -1476,7 +1487,6 @@ Json::ArrayIndex Target::AddSourceGroup(cmSourceGroup* sg, Json::ArrayIndex si)
     g.Name = sg->GetFullName();
     this->SourceGroups.push_back(std::move(g));
   }
-  this->SourceGroups[i->second].SourceIndexes.append(si);
   return i->second;
 }
 
@@ -1710,6 +1720,11 @@ std::pair<Json::Value, Target::FileSetDatabase> Target::DumpFileSets()
   Json::Value fsJson = Json::nullValue;
   FileSetDatabase fsdb;
 
+  // We record the visibility of each file set for later use when dumping
+  // interface sources, which needs to map files to file set visibility
+  // with only an index available. Those indexes match this vector.
+  this->FileSetVisibilities.clear();
+
   // Build the fileset database.
   auto const* tgt = this->GT->Target;
   auto const& fs_names = tgt->GetAllFileSetNames();
@@ -1737,6 +1752,7 @@ std::pair<Json::Value, Target::FileSetDatabase> Target::DumpFileSets()
         fs->EvaluateDirectoryEntries(directoryEntries, context, this->GT);
 
       fsJson.append(this->DumpFileSet(fs, directories));
+      this->FileSetVisibilities.push_back(fs->GetVisibility());
 
       std::map<std::string, std::vector<std::string>> files_per_dirs;
       for (auto const& entry : fileEntries) {
@@ -1814,7 +1830,9 @@ Json::Value Target::DumpSource(cmGeneratorTarget::SourceAndKind const& sk,
   }
 
   if (cmSourceGroup* sg = this->GT->LocalGenerator->FindSourceGroup(path)) {
-    source["sourceGroupIndex"] = this->AddSourceGroup(sg, si);
+    Json::ArrayIndex const groupIndex = this->AddSourceGroup(sg);
+    source["sourceGroupIndex"] = groupIndex;
+    this->SourceGroups[groupIndex].SourceIndexes.append(si);
   }
 
   switch (sk.Kind) {
@@ -1841,6 +1859,69 @@ Json::Value Target::DumpSource(cmGeneratorTarget::SourceAndKind const& sk,
   return source;
 }
 
+Json::Value Target::DumpInterfaceSources(FileSetDatabase const& fsdb)
+{
+  Json::Value interfaceSources = Json::arrayValue;
+  auto dumpFile = [this, &interfaceSources, &fsdb](std::string const& file) {
+    std::string path = file;
+    if (!cmSystemTools::FileIsFullPath(path)) {
+      path = cmStrCat(
+        this->GT->GetLocalGenerator()->GetCurrentSourceDirectory(), '/', file);
+    }
+    path = cmSystemTools::CollapseFullPath(path);
+
+    interfaceSources.append(
+      this->DumpInterfaceSource(path, interfaceSources.size(), fsdb));
+  };
+
+  cmValue prop = this->GT->GetProperty("INTERFACE_SOURCES");
+  if (prop) {
+    cmList files{ cmGeneratorExpression::Evaluate(
+      *prop, this->GT->GetLocalGenerator(), this->Config, this->GT) };
+
+    for (std::string const& file : files) {
+      dumpFile(file);
+    }
+  }
+
+  for (auto const& fsIter : fsdb) {
+    Json::ArrayIndex const index = fsIter.second;
+    // FileSetVisibilities was populated by DumpFileSets() and will always
+    // have the same size as the file sets array that index is indexing into
+    if (this->FileSetVisibilities[index] != cmFileSetVisibility::Private) {
+      dumpFile(fsIter.first);
+    }
+  }
+
+  return interfaceSources;
+}
+
+Json::Value Target::DumpInterfaceSource(std::string path, Json::ArrayIndex si,
+                                        FileSetDatabase const& fsdb)
+{
+  Json::Value source = Json::objectValue;
+
+  cmSourceFile* sf = this->GT->Makefile->GetOrCreateSource(path);
+  path = sf->ResolveFullPath();
+  source["path"] = RelativeIfUnder(this->TopSource, path);
+  if (sf->GetIsGenerated()) {
+    source["isGenerated"] = true;
+  }
+
+  auto fsit = fsdb.find(path);
+  if (fsit != fsdb.end()) {
+    source["fileSetIndex"] = fsit->second;
+  }
+
+  if (cmSourceGroup* sg = this->GT->LocalGenerator->FindSourceGroup(path)) {
+    Json::ArrayIndex const groupIndex = this->AddSourceGroup(sg);
+    source["sourceGroupIndex"] = groupIndex;
+    this->SourceGroups[groupIndex].InterfaceSourceIndexes.append(si);
+  }
+
+  return source;
+}
+
 Json::Value Target::DumpCompileData(CompileData const& cd)
 {
   Json::Value result = Json::objectValue;
@@ -1951,6 +2032,9 @@ Json::Value Target::DumpSourceGroup(SourceGroup& sg)
   Json::Value group = Json::objectValue;
   group["name"] = sg.Name;
   group["sourceIndexes"] = std::move(sg.SourceIndexes);
+  if (!sg.InterfaceSourceIndexes.empty()) {
+    group["interfaceSourceIndexes"] = std::move(sg.InterfaceSourceIndexes);
+  }
   return group;
 }
 

+ 1 - 1
Tests/RunCMake/CommandLine/E_capabilities-stdout.txt

@@ -1 +1 @@
-^{"debugger":(true|false),"fileApi":{"requests":\[{"kind":"codemodel","version":\[{"major":2,"minor":9}]},{"kind":"configureLog","version":\[{"major":1,"minor":0}]},{"kind":"cache","version":\[{"major":2,"minor":0}]},{"kind":"cmakeFiles","version":\[{"major":1,"minor":1}]},{"kind":"toolchains","version":\[{"major":1,"minor":1}]}]},"generators":\[.*\],"serverMode":false,"tls":(true|false),"version":{.*}}$
+^{"debugger":(true|false),"fileApi":{"requests":\[{"kind":"codemodel","version":\[{"major":2,"minor":10}]},{"kind":"configureLog","version":\[{"major":1,"minor":0}]},{"kind":"cache","version":\[{"major":2,"minor":0}]},{"kind":"cmakeFiles","version":\[{"major":1,"minor":1}]},{"kind":"toolchains","version":\[{"major":1,"minor":1}]}]},"generators":\[.*\],"serverMode":false,"tls":(true|false),"version":{.*}}$

+ 17 - 2
Tests/RunCMake/FileAPI/codemodel-v2-check.py

@@ -13,7 +13,7 @@ def check_objects(o, g):
     assert is_list(o)
     assert len(o) == 1
     major = 2
-    minor = 9
+    minor = 10
     check_index_object(o[0], "codemodel", major, minor, check_object_codemodel(g, major, minor))
 
 def check_backtrace(t, b, backtrace):
@@ -318,6 +318,11 @@ def check_target(c, major, minor):
             expected_keys.append("symbolic")
             assert is_bool(obj["symbolic"], expected["symbolic"])
 
+        if expected["interfaceSources"] is not None:
+            expected_keys.append("interfaceSources")
+            assert is_list(obj["interfaceSources"])
+            assert len(obj["interfaceSources"]) == len(expected["interfaceSources"])
+
         assert is_dict(obj["paths"])
         assert sorted(obj["paths"].keys()) == ["build", "source"]
         assert matches(obj["paths"]["build"], expected["build"])
@@ -710,7 +715,16 @@ def check_target(c, major, minor):
 
             def check_source_group(actual, expected):
                 assert is_dict(actual)
-                assert sorted(actual.keys()) == ["name", "sourceIndexes"]
+
+                expected_group_keys = ["name", "sourceIndexes"]
+                if expected["interfaceSourcePaths"] is not None:
+                    expected_group_keys.append("interfaceSourceIndexes")
+                    check_list_match(lambda a, e: matches(obj["interfaceSources"][a]["path"], e),
+                                     actual["interfaceSourceIndexes"], expected["interfaceSourcePaths"],
+                                     missing_exception=lambda e: "Interface source path: %s" % e,
+                                     extra_exception=lambda a: "Interface source path: %s" % obj["interfaceSources"][a]["path"])
+
+                assert sorted(actual.keys()) == sorted(expected_group_keys)
 
                 check_list_match(lambda a, e: matches(obj["sources"][a]["path"], e),
                                  actual["sourceIndexes"], expected["sourcePaths"],
@@ -1167,6 +1181,7 @@ def gen_check_build_system_targets(c, g, inSource):
                             "sourcePaths": [
                                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/CMakeFiles/([0-9a-f]+/)?generate\\.stamp\\.rule$",
                             ],
+                            "interfaceSourcePaths": None,
                         },
                     ]
                 elif e["name"] in ("ALL_BUILD"):

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_alias.json

@@ -42,18 +42,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/alias/CMakeFiles/ALL_BUILD$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/alias/CMakeFiles/ALL_BUILD\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_custom.json

@@ -42,18 +42,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/custom/CMakeFiles/ALL_BUILD$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/custom/CMakeFiles/ALL_BUILD\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_cxx.json

@@ -42,18 +42,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/cxx/CMakeFiles/ALL_BUILD$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/cxx/CMakeFiles/ALL_BUILD\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_direct.json

@@ -42,18 +42,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/direct/CMakeFiles/ALL_BUILD$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/direct/CMakeFiles/ALL_BUILD\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_external.json

@@ -42,18 +42,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/FileAPIExternalBuild/CMakeFiles/ALL_BUILD$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/FileAPIExternalBuild/CMakeFiles/ALL_BUILD\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_framework.json

@@ -42,18 +42,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/framework/CMakeFiles/ALL_BUILD$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/framework/CMakeFiles/ALL_BUILD\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_imported.json

@@ -42,18 +42,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/imported/CMakeFiles/ALL_BUILD$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/imported/CMakeFiles/ALL_BUILD\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_interface.json

@@ -42,18 +42,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/interface/CMakeFiles/ALL_BUILD$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/interface/CMakeFiles/ALL_BUILD\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_object.json

@@ -42,18 +42,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/object/CMakeFiles/ALL_BUILD$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/object/CMakeFiles/ALL_BUILD\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_top.json

@@ -42,18 +42,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/CMakeFiles/ALL_BUILD$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/CMakeFiles/ALL_BUILD\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_alias_exe.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_exe.json

@@ -45,12 +45,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 34 - 0
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_headers_1.json

@@ -171,12 +171,41 @@
       ]
     }
   ],
+  "interfaceSources": [
+    {
+      "path": "^fileset/error\\.c$",
+      "isGenerated": null,
+      "fileSetName": "HEADERS",
+      "sourceGroupName": "Header Files"
+    },
+    {
+      "path": "^fileset/other\\.c$",
+      "isGenerated": null,
+      "fileSetName": "HEADERS",
+      "sourceGroupName": "Source Files"
+    },
+    {
+      "path": "^fileset/h3\\.h$",
+      "isGenerated": null,
+      "fileSetName": "c",
+      "sourceGroupName": "Header Files"
+    },
+    {
+      "path": "^fileset/dir/h2\\.h$",
+      "isGenerated": null,
+      "fileSetName": "b",
+      "sourceGroupName": "Header Files"
+    }
+  ],
   "sourceGroups": [
     {
       "name": "Source Files",
       "sourcePaths": [
         "^fileset/empty\\.c$",
         "^fileset/other\\.c$"
+      ],
+      "interfaceSourcePaths": [
+        "^fileset/other\\.c$"
       ]
     },
     {
@@ -186,6 +215,11 @@
         "^fileset/h1\\.h$",
         "^fileset/dir/h2\\.h$",
         "^fileset/dir/h4\\.h$"
+      ],
+      "interfaceSourcePaths": [
+        "^fileset/error\\.c$",
+        "^fileset/dir/h2\\.h$",
+        "^fileset/h3\\.h$"
       ]
     }
   ],

+ 16 - 0
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_headers_2.json

@@ -42,11 +42,27 @@
       ]
     }
   ],
+  "interfaceSources": [
+    {
+      "path": "^fileset/h1\\.h$",
+      "isGenerated": null,
+      "fileSetName": "HEADERS",
+      "sourceGroupName": "Header Files"
+    }
+  ],
   "sourceGroups": [
     {
       "name": "Source Files",
       "sourcePaths": [
         "^fileset/empty\\.c$"
+      ],
+      "interfaceSourcePaths": null
+    },
+    {
+      "name": "Header Files",
+      "sourcePaths": [],
+      "interfaceSourcePaths": [
+        "^fileset/h1\\.h$"
       ]
     }
   ],

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_lib.json

@@ -45,12 +45,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_object_exe.json

@@ -54,18 +54,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "Object Libraries",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/(object|build/c_object_lib\\.build)/.*/empty(\\.c)?\\.o(bj)?$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_object_lib.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_shared_exe.json

@@ -45,12 +45,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_shared_lib.json

@@ -45,12 +45,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_static_exe.json

@@ -45,12 +45,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_static_lib.json

@@ -45,12 +45,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_subdir.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^subdir/empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/compile_usage_exe.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/custom_exe.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/custom_tgt.json

@@ -48,18 +48,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/custom/CMakeFiles/custom_tgt(-(Debug|Release|RelWithDebInfo|MinSizeRel))?$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/(custom/)?CMakeFiles/([0-9a-f]+/)?custom_tgt(-\\(CONFIG\\))?\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_alias_exe.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.cxx$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.cxx$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_cross_emulator.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.cxx$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_cross_emulator_args.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.cxx$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_precompileheader.json

@@ -158,19 +158,22 @@
       ]
     }
   ],
+  "interfaceSources": null,
   "sourceGroups": [
     {
       "name": "Source Files",
       "sourcePaths": [
         ".*cmake_pch(_[^.]+)?(\\.hxx)?\\.cxx$",
         "^empty\\.cxx$"
-      ]
+      ],
+      "interfaceSourcePaths": null
     },
     {
       "name": "Precompile Header File",
       "sourcePaths": [
         ".*/cmake_pch(_[^.]+)?\\.hxx$"
-      ]
+      ],
+      "interfaceSourcePaths": null
     }
   ]
 }

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_precompileheader_2arch.json

@@ -240,6 +240,7 @@
       ]
     }
   ],
+  "interfaceSources": null,
   "sourceGroups": [
     {
       "name": "Source Files",
@@ -247,14 +248,16 @@
         ".*cmake_pch(_[^.]+)?(\\.hxx)?\\.cxx$",
         ".*cmake_pch(_[^.]+)?(\\.hxx)?\\.cxx$",
         "^empty\\.cxx$"
-      ]
+      ],
+      "interfaceSourcePaths": null
     },
     {
       "name": "Precompile Header File",
       "sourcePaths": [
         ".*/cmake_pch(_[^.]+)?\\.hxx$",
         ".*/cmake_pch(_[^.]+)?\\.hxx$"
-      ]
+      ],
+      "interfaceSourcePaths": null
     }
   ]
 }

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_precompileheader_multigen.json

@@ -203,13 +203,15 @@
       ]
     }
   ],
+  "interfaceSources": null,
   "sourceGroups": [
     {
       "name": "Source Files",
       "sourcePaths": [
         ".*cmake_pch(_[^.]+)?(\\.hxx)?\\.cxx$",
         "^empty\\.cxx$"
-      ]
+      ],
+      "interfaceSourcePaths": null
     },
     {
       "name": "Precompile Header File",
@@ -218,7 +220,8 @@
         ".*/Release/cmake_pch(_[^.]+)?\\.hxx$",
         ".*/MinSizeRel/cmake_pch(_[^.]+)?\\.hxx$",
         ".*/RelWithDebInfo/cmake_pch(_[^.]+)?\\.hxx$"
-      ]
+      ],
+      "interfaceSourcePaths": null
     }
   ]
 }

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_test_launcher.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.cxx$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_test_launcher_and_cross_emulator.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.cxx$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_lib.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.cxx$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_object_exe.json

@@ -54,18 +54,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.cxx$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "Object Libraries",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/(object|build/cxx_object_lib\\.build)/.*/empty(\\.cxx)?\\.o(bj)?$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_object_lib.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.cxx$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_shared_exe.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.cxx$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_shared_lib.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.cxx$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_standard_compile_feature_exe.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.cxx$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_standard_exe.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.cxx$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_static_exe.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.cxx$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_static_lib.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.cxx$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/exe_framework.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.cxx$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/generated_exe.json

@@ -54,18 +54,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPIExternalSource/empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "Generated Source Files",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/FileAPIExternalBuild/generated\\.cxx$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 1 - 0
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/iface_none.json

@@ -11,6 +11,7 @@
     "isGeneratorProvided": null,
     "fileSets": null,
     "sources": [],
+    "interfaceSources": null,
     "sourceGroups": null,
     "compileGroups": null,
     "backtrace": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/iface_srcs.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 1 - 0
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/iface_symbolic.json

@@ -11,6 +11,7 @@
     "isGeneratorProvided": null,
     "fileSets": null,
     "sources": [],
+    "interfaceSources": null,
     "sourceGroups": null,
     "compileGroups": null,
     "backtrace": [

+ 1 - 0
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/import_framework.json

@@ -11,6 +11,7 @@
     "isGeneratorProvided": null,
     "fileSets": null,
     "sources": [],
+    "interfaceSources": null,
     "sourceGroups": null,
     "compileGroups": null,
     "backtrace": [

+ 1 - 0
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/imported_exe.json

@@ -11,6 +11,7 @@
     "isGeneratorProvided": null,
     "fileSets": null,
     "sources": [],
+    "interfaceSources": null,
     "sourceGroups": null,
     "compileGroups": null,
     "backtrace": [

+ 1 - 0
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/imported_interface_lib.json

@@ -11,6 +11,7 @@
     "isGeneratorProvided": null,
     "fileSets": null,
     "sources": [],
+    "interfaceSources": null,
     "sourceGroups": null,
     "compileGroups": null,
     "backtrace": [

+ 1 - 0
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/imported_interface_symbolic_lib.json

@@ -11,6 +11,7 @@
     "isGeneratorProvided": null,
     "fileSets": null,
     "sources": [],
+    "interfaceSources": null,
     "sourceGroups": null,
     "compileGroups": null,
     "backtrace": [

+ 1 - 0
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/imported_lib.json

@@ -11,6 +11,7 @@
     "isGeneratorProvided": null,
     "fileSets": null,
     "sources": [],
+    "interfaceSources": null,
     "sourceGroups": null,
     "compileGroups": null,
     "backtrace": [

+ 1 - 0
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/imported_object_lib.json

@@ -11,6 +11,7 @@
     "isGeneratorProvided": null,
     "fileSets": null,
     "sources": [],
+    "interfaceSources": null,
     "sourceGroups": null,
     "compileGroups": null,
     "backtrace": [

+ 1 - 0
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/imported_shared_lib.json

@@ -11,6 +11,7 @@
     "isGeneratorProvided": null,
     "fileSets": null,
     "sources": [],
+    "interfaceSources": null,
     "sourceGroups": null,
     "compileGroups": null,
     "backtrace": [

+ 1 - 0
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/imported_static_lib.json

@@ -11,6 +11,7 @@
     "isGeneratorProvided": null,
     "fileSets": null,
     "sources": [],
+    "interfaceSources": null,
     "sourceGroups": null,
     "compileGroups": null,
     "backtrace": [

+ 1 - 0
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/inject_direct_lib.json

@@ -11,6 +11,7 @@
     "isGeneratorProvided": null,
     "fileSets": null,
     "sources": [],
+    "interfaceSources": null,
     "sourceGroups": null,
     "compileGroups": null,
     "backtrace": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/inject_direct_lib_impl.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^direct/other\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/interface_exe.json

@@ -57,12 +57,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 1 - 0
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/interface_lib.json

@@ -11,6 +11,7 @@
     "isGeneratorProvided": null,
     "fileSets": null,
     "sources": [],
+    "interfaceSources": null,
     "sourceGroups": null,
     "compileGroups": null,
     "backtrace": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/link_imported_exe.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/link_imported_interface_exe.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/link_imported_interface_symbolic_exe.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/link_imported_object_exe.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/link_imported_shared_exe.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/link_imported_static_exe.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/link_transitive_direct_exe.json

@@ -54,18 +54,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "Object Libraries",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/(direct|build/inject_direct_lib_impl\\.build)/.*/other(\\.c)?\\.o(bj)?$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/link_usage_exe.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/shared_framework.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.cxx$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/static_framework.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.cxx$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/transitive_direct_lib.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 1 - 0
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/unused_imported_shared_lib.json

@@ -11,6 +11,7 @@
     "isGeneratorProvided": null,
     "fileSets": null,
     "sources": [],
+    "interfaceSources": null,
     "sourceGroups": null,
     "compileGroups": null,
     "backtrace": [

+ 3 - 1
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/usage_lib.json

@@ -33,12 +33,14 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "Source Files",
             "sourcePaths": [
                 "^empty\\.c$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": [

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/zero_check_alias.json

@@ -42,18 +42,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/alias/CMakeFiles/ZERO_CHECK$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/alias/CMakeFiles/ZERO_CHECK\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/zero_check_custom.json

@@ -42,18 +42,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/custom/CMakeFiles/ZERO_CHECK$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/custom/CMakeFiles/ZERO_CHECK\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/zero_check_cxx.json

@@ -42,18 +42,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/cxx/CMakeFiles/ZERO_CHECK$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/cxx/CMakeFiles/ZERO_CHECK\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/zero_check_direct.json

@@ -42,18 +42,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/direct/CMakeFiles/ZERO_CHECK$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/direct/CMakeFiles/ZERO_CHECK\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/zero_check_external.json

@@ -42,18 +42,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/FileAPIExternalBuild/CMakeFiles/ZERO_CHECK$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/FileAPIExternalBuild/CMakeFiles/ZERO_CHECK\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/zero_check_framework.json

@@ -42,18 +42,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/framework/CMakeFiles/ZERO_CHECK$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/framework/CMakeFiles/ZERO_CHECK\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/zero_check_imported.json

@@ -42,18 +42,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/imported/CMakeFiles/ZERO_CHECK$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/imported/CMakeFiles/ZERO_CHECK\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/zero_check_interface.json

@@ -42,18 +42,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/interface/CMakeFiles/ZERO_CHECK$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/interface/CMakeFiles/ZERO_CHECK\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/zero_check_object.json

@@ -42,18 +42,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/object/CMakeFiles/ZERO_CHECK$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/object/CMakeFiles/ZERO_CHECK\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,

+ 5 - 2
Tests/RunCMake/FileAPI/codemodel-v2-data/targets/zero_check_top.json

@@ -42,18 +42,21 @@
             ]
         }
     ],
+    "interfaceSources": null,
     "sourceGroups": [
         {
             "name": "",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/CMakeFiles/ZERO_CHECK$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         },
         {
             "name": "CMake Rules",
             "sourcePaths": [
                 "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/CMakeFiles/ZERO_CHECK\\.rule$"
-            ]
+            ],
+            "interfaceSourcePaths": null
         }
     ],
     "compileGroups": null,