summaryrefslogtreecommitdiff
path: root/utils/ipc/mojo/public/tools/bindings/validate_typemap_config.py
diff options
context:
space:
mode:
Diffstat (limited to 'utils/ipc/mojo/public/tools/bindings/validate_typemap_config.py')
-rwxr-xr-xutils/ipc/mojo/public/tools/bindings/validate_typemap_config.py57
1 files changed, 57 insertions, 0 deletions
diff --git a/utils/ipc/mojo/public/tools/bindings/validate_typemap_config.py b/utils/ipc/mojo/public/tools/bindings/validate_typemap_config.py
new file mode 100755
index 00000000..f1783d59
--- /dev/null
+++ b/utils/ipc/mojo/public/tools/bindings/validate_typemap_config.py
@@ -0,0 +1,57 @@
+#!/usr/bin/env python
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import argparse
+import json
+import os
+import re
+import sys
+
+
+def CheckCppTypemapConfigs(target_name, config_filename, out_filename):
+ _SUPPORTED_CONFIG_KEYS = set([
+ 'types', 'traits_headers', 'traits_private_headers', 'traits_sources',
+ 'traits_deps', 'traits_public_deps'
+ ])
+ _SUPPORTED_TYPE_KEYS = set([
+ 'mojom', 'cpp', 'copyable_pass_by_value', 'force_serialize', 'hashable',
+ 'move_only', 'nullable_is_same_type'
+ ])
+ with open(config_filename, 'r') as f:
+ for config in json.load(f):
+ for key in config.keys():
+ if key not in _SUPPORTED_CONFIG_KEYS:
+ raise ValueError('Invalid typemap property "%s" when processing %s' %
+ (key, target_name))
+
+ types = config.get('types')
+ if not types:
+ raise ValueError('Typemap for %s must specify at least one type to map'
+ % target_name)
+
+ for entry in types:
+ for key in entry.keys():
+ if key not in _SUPPORTED_TYPE_KEYS:
+ raise IOError(
+ 'Invalid type property "%s" in typemap for "%s" on target %s' %
+ (key, entry.get('mojom', '(unknown)'), target_name))
+
+ with open(out_filename, 'w') as f:
+ f.truncate(0)
+
+
+def main():
+ parser = argparse.ArgumentParser()
+ _, args = parser.parse_known_args()
+ if len(args) != 3:
+ print('Usage: validate_typemap_config.py target_name config_filename '
+ 'stamp_filename')
+ sys.exit(1)
+
+ CheckCppTypemapConfigs(args[0], args[1], args[2])
+
+
+if __name__ == '__main__':
+ main()