Browse Source

cmDyndepCollation: add a query for visibility of an object's modules

This will be used to hide private modules from the view of consuming
targets.
Ben Boeckel 2 years ago
parent
commit
8207a3a266
2 changed files with 19 additions and 0 deletions
  1. 17 0
      Source/cmDyndepCollation.cxx
  2. 2 0
      Source/cmDyndepCollation.h

+ 17 - 0
Source/cmDyndepCollation.cxx

@@ -623,3 +623,20 @@ bool cmDyndepCollation::WriteDyndepMetadata(
 
   return result;
 }
+
+bool cmDyndepCollation::IsObjectPrivate(
+  std::string const& object, cmCxxModuleExportInfo const& export_info)
+{
+#ifdef _WIN32
+  std::string output_path = object;
+  cmSystemTools::ConvertToUnixSlashes(output_path);
+#else
+  std::string const& output_path = object;
+#endif
+  auto fileset_info_itr = export_info.ObjectToFileSet.find(output_path);
+  if (fileset_info_itr == export_info.ObjectToFileSet.end()) {
+    return false;
+  }
+  auto const& file_set = fileset_info_itr->second;
+  return !cmFileSetVisibilityIsForInterface(file_set.Visibility);
+}

+ 2 - 0
Source/cmDyndepCollation.h

@@ -49,4 +49,6 @@ struct cmDyndepCollation
                                   std::vector<cmScanDepInfo> const& objects,
                                   cmCxxModuleExportInfo const& export_info,
                                   cmDyndepMetadataCallbacks const& cb);
+  static bool IsObjectPrivate(std::string const& object,
+                              cmCxxModuleExportInfo const& export_info);
 };