vndk-def: Add --enumerate to deps-closure

This commit adds --enumerate to deps-closure so that a user can print
the dependency closure for each specified libraries or all libraries.

Bug: 62644173
Test: ./vndk_definition_tool.py deps-closure \
--system ... --vendor ...  --enumerate

Change-Id: I18bb27be10c565538356f774cc6752f8cfc79bd4
diff --git a/vndk/tools/definition-tool/vndk_definition_tool.py b/vndk/tools/definition-tool/vndk_definition_tool.py
index 302cc5c..0b5fc3d 100755
--- a/vndk/tools/definition-tool/vndk_definition_tool.py
+++ b/vndk/tools/definition-tool/vndk_definition_tool.py
@@ -2218,7 +2218,7 @@
     def add_argparser_options(self, parser):
         super(DepsClosureCommand, self).add_argparser_options(parser)
 
-        parser.add_argument('lib', nargs='+',
+        parser.add_argument('lib', nargs='*',
                             help='root set of the shared libraries')
 
         parser.add_argument('--exclude-lib', action='append', default=[],
@@ -2230,6 +2230,20 @@
         parser.add_argument('--revert', action='store_true',
                             help='print usage dependency')
 
+        parser.add_argument('--enumerate', action='store_true',
+                            help='print closure for each lib instead of union')
+
+    def print_deps_closure(self, root_libs, graph, is_excluded_libs,
+                           is_reverted, indent):
+        if is_reverted:
+            closure = graph.compute_users_closure(root_libs, is_excluded_libs)
+        else:
+            closure = graph.compute_deps_closure(root_libs, is_excluded_libs)
+
+        for lib in sorted_lib_path_list(closure):
+            print(indent + lib)
+
+
     def main(self, args):
         generic_refs, graph = self.create_from_args(args)
 
@@ -2239,7 +2253,7 @@
         root_libs = graph.get_libs(args.lib, report_error)
         excluded_libs = graph.get_libs(args.exclude_lib, report_error)
 
-        # Compute and print the closure.
+        # Define the exclusion filter.
         if args.exclude_ndk:
             def is_excluded_libs(lib):
                 return lib.is_ndk or lib in excluded_libs
@@ -2247,13 +2261,16 @@
             def is_excluded_libs(lib):
                 return lib in excluded_libs
 
-        if args.revert:
-            closure = graph.compute_users_closure(root_libs, is_excluded_libs)
+        if not args.enumerate:
+            self.print_deps_closure(root_libs, graph, is_excluded_libs,
+                                    args.revert, '')
         else:
-            closure = graph.compute_deps_closure(root_libs, is_excluded_libs)
-
-        for lib in sorted_lib_path_list(closure):
-            print(lib)
+            if not root_libs:
+                root_libs = list(graph.all_libs())
+            for lib in sorted(root_libs):
+                print(lib.path)
+                self.print_deps_closure({lib}, graph, is_excluded_libs,
+                                        args.revert, '\t')
         return 0