vppapigen:  move import processing logic to individual plugins

Vppapigen currently embeds the import following control logic in
the runner.  This change delegates the control to the plugins.

Type: refactor

Change-Id: Iad20341bc9d652bedb71ca7037d3957fe60c7a0d
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
diff --git a/src/tools/vppapigen/vppapigen.py b/src/tools/vppapigen/vppapigen.py
index 5219bfd..b828706 100755
--- a/src/tools/vppapigen/vppapigen.py
+++ b/src/tools/vppapigen/vppapigen.py
@@ -1401,43 +1401,6 @@
     else:
         logging.basicConfig()
 
-    parser = VPPAPI(debug=args.debug, filename=filename, logger=log,
-                    revision=args.git_revision)
-
-    try:
-        if not args.input:
-            parsed_objects = parser.parse_fd(sys.stdin, log)
-        else:
-            parsed_objects = parser.parse_filename(args.input, log)
-    except ParseError as e:
-        print('Parse error: ', e, file=sys.stderr)
-        sys.exit(1)
-
-    # Build a list of objects. Hash of lists.
-    result = []
-
-    if args.output_module == 'C':
-        s = parser.process(parsed_objects)
-    else:
-        result = parser.process_imports(parsed_objects, False, result)
-        s = parser.process(result)
-
-    # Add msg_id field
-    s['Define'] = add_msg_id(s['Define'])
-
-    # Fold up CRCs
-    foldup_crcs(s['Define'])
-
-    #
-    # Debug
-    if args.debug:
-        import pprint
-        pp = pprint.PrettyPrinter(indent=4, stream=sys.stderr)
-        for t in s['Define']:
-            pp.pprint([t.name, t.flags, t.block])
-        for t in s['types']:
-            pp.pprint([t.name, t.block])
-
     #
     # Generate representation
     #
@@ -1472,6 +1435,49 @@
                       .format(module_path, err))
         return 1
 
+    parser = VPPAPI(debug=args.debug, filename=filename, logger=log,
+                    revision=args.git_revision)
+
+    try:
+        if not args.input:
+            parsed_objects = parser.parse_fd(sys.stdin, log)
+        else:
+            parsed_objects = parser.parse_filename(args.input, log)
+    except ParseError as e:
+        print('Parse error: ', e, file=sys.stderr)
+        sys.exit(1)
+
+    # Build a list of objects. Hash of lists.
+    result = []
+
+    # if the variable is not set in the plugin, assume it to be false.
+    try:
+        plugin.process_imports
+    except AttributeError:
+        plugin.process_imports = False
+
+    if plugin.process_imports:
+        result = parser.process_imports(parsed_objects, False, result)
+        s = parser.process(result)
+    else:
+        s = parser.process(parsed_objects)
+
+    # Add msg_id field
+    s['Define'] = add_msg_id(s['Define'])
+
+    # Fold up CRCs
+    foldup_crcs(s['Define'])
+
+    #
+    # Debug
+    if args.debug:
+        import pprint
+        pp = pprint.PrettyPrinter(indent=4, stream=sys.stderr)
+        for t in s['Define']:
+            pp.pprint([t.name, t.flags, t.block])
+        for t in s['types']:
+            pp.pprint([t.name, t.block])
+
     result = plugin.run(args, filename, s)
     if result:
         print(result, file=args.output)
diff --git a/src/tools/vppapigen/vppapigen_c.py b/src/tools/vppapigen/vppapigen_c.py
index 07975ce..a879074 100644
--- a/src/tools/vppapigen/vppapigen_c.py
+++ b/src/tools/vppapigen/vppapigen_c.py
@@ -6,6 +6,8 @@
 from io import StringIO
 import shutil
 
+process_imports = False
+
 datestring = datetime.datetime.utcfromtimestamp(
     int(os.environ.get('SOURCE_DATE_EPOCH', time.time())))
 input_filename = 'inputfil'
diff --git a/src/tools/vppapigen/vppapigen_crc.py b/src/tools/vppapigen/vppapigen_crc.py
index b3cb585..6947f12 100644
--- a/src/tools/vppapigen/vppapigen_crc.py
+++ b/src/tools/vppapigen/vppapigen_crc.py
@@ -1,6 +1,9 @@
 # CRC generation
 import json
 
+process_imports = True
+
+
 #
 # Plugin entry point
 #
diff --git a/src/tools/vppapigen/vppapigen_json.py b/src/tools/vppapigen/vppapigen_json.py
index f41bfb0..19f7d65 100644
--- a/src/tools/vppapigen/vppapigen_json.py
+++ b/src/tools/vppapigen/vppapigen_json.py
@@ -1,6 +1,8 @@
 # JSON generation
 import json
 
+process_imports = True
+
 
 def walk_imports(s):
     r = []