Index: Source/bindings/scripts/idltopathgenerator.py |
diff --git a/Source/bindings/scripts/idltopathgenerator.py b/Source/bindings/scripts/idltopathgenerator.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b326cd2eb24e8497d3436c0019f47c0c5a716718 |
--- /dev/null |
+++ b/Source/bindings/scripts/idltopathgenerator.py |
@@ -0,0 +1,139 @@ |
+from __future__ import print_function |
+ |
+import time |
+start = time.clock() |
+ |
+import os |
+import argparse |
+import sys |
+ |
+def main(): |
+ """Main function.""" |
+ |
+ parser = argparse.ArgumentParser( |
+ description="Generates a table of idl name to source code path.") |
+ |
+ parser.add_argument("--blink-source-directory", required=True, |
+ help="The directory that contains the Blink source.") |
+ parser.add_argument("--idl-list-file", required=True, |
+ help="The file that contains the list of idl files.") |
+ parser.add_argument("--output-file", required=True, |
+ help="The file to write the output table to.") |
+ |
+ args = parser.parse_args() |
+ |
+ # print("args.blink_source_directory = " + args.blink_source_directory) |
+ # print("args.idl_list_file = " + args.idl_list_file) |
+ # print("args.output_file = " + args.output_file) |
+ |
+ # Find the WebCore directory |
+ webkit_source = os.path.abspath(args.blink_source_directory) |
+ |
+ idl_to_path_map = {} |
+ core_dir = os.path.join(webkit_source, "core") |
+ for (dirpath, dirnames, filenames) in os.walk(core_dir): |
+ process_directory(dirpath, filenames, webkit_source, idl_to_path_map) |
+ |
+ no_in_core = len(idl_to_path_map) |
+ if no_in_core == 0: |
+ # Something is terribly bad. |
+ print("Something is bad. Found no idl files in " + core_dir) |
+ sys.exit(1) |
+ |
+ modules_dir = os.path.join(webkit_source, "modules") |
+ for (dirpath, dirnames, filenames) in os.walk(modules_dir): |
+ process_directory(dirpath, filenames, webkit_source, idl_to_path_map) |
+ |
+ if len(idl_to_path_map) == no_in_core: |
+ # Something is terribly bad. |
+ print("Something is bad. Found no idl files in " + modules_dir) |
+ sys.exit(1) |
+ |
+ # print("Found %d idl files in %s and %s." % (len(idl_to_path_map), core_dir, modules_dir)) |
+ # These are not (currently) found by the code above. |
+ fallbacks = ( |
+ ("HTMLBDIElement", "core/html"), |
+ ("HTMLSummaryElement","core/html"), |
+ ("InternalSettingsGenerated", ".."), |
+ ) |
+ for fallback in fallbacks: |
+ if not fallback[0] in idl_to_path_map: |
+ idl_to_path_map[fallback[0]] = fallback[1] |
+ |
+ _write_output(idl_to_path_map, args.output_file) |
+ print("Wrote new version of %s in %dms." % (args.output_file, |
+ 1000*(time.clock() - start))) |
+ |
+def process_directory(dirpath, filenames, webkit_source, idl_to_path_map): |
+ """Inserts every idl found file_names into idl_to_path_map.""" |
+ include_path = os.path.relpath(dirpath, webkit_source) |
+ include_path = include_path.replace("\\", "/") |
+ |
+ for filename in filenames: |
+ if filename.endswith(".idl"): |
+ interface_name = filename[:-4] |
+ if interface_name: |
+ if (interface_name == "JavaScriptCallFrame" or |
+ interface_name == "ScriptProfile" or |
+ interface_name == "ScriptProfileNode"): |
+ # Not sure why these inspector files aren't in the |
+ # same directory as the idl files, but... |
+ interface_include_path = "bindings/v8" |
+ else: |
+ interface_include_path = include_path |
+ |
+ idl_to_path_map[interface_name] = interface_include_path |
+ |
+def _write_output(idl_to_path_map, output_file): |
+ output = [] |
+ output.append("#!/usr/bin/perl") |
+ output.append("use strict;") |
+ output.append("use warnings;") |
+ output.append("use Exporter;") |
+ |
+ output.append("") |
+ output.append("# GENERATED BY idltopath.py, DO NOT MODIFY BY HAND.") |
eseidel
2013/04/25 07:03:39
Woh. Using python to generate perl, eh?
I think
|
+ output.append("# (c) 2013 Daniel Bratell, Opera Software ASA") |
+ output.append("") |
+ output.append("package idltopath;") |
+ output.append("") |
+ output.append("our @ISA = qw( Exporter );") |
+ output.append("# our @EXPORT_OK = qw( export_me export_me_too );") |
+ |
+ output.append("# These are exported by default.") |
+ output.append("our @EXPORT = qw( idl_to_path );") |
+ output.append("") |
+ output.append("my %idl_to_path_hash = (") |
+ |
+ for (interface_name, interface_include_path) in idl_to_path_map.iteritems(): |
+ output.append(' "%s" => "%s",' % ( |
+ interface_name, interface_include_path)) |
+ |
+ output.append(");") |
+ output.append("") |
+ output.append("sub idl_to_path") |
+ output.append("{") |
+ output.append(" my $interface = shift;") |
+ output.append("") |
+ output.append(" if ($idl_to_path_hash{$interface}) {") |
+ output.append(" return $idl_to_path_hash{$interface} . '/';") |
+ output.append(" } elsif ($interface =~ /^SVGPath/ && $idl_to_path_hash{$interface . \"Abs\"}) {") |
+ output.append(" return $idl_to_path_hash{$interface . \"Abs\"} . '/';") |
+ output.append(" } else {") |
+ output.append(" return 'fixmebratell89/';") |
+ output.append(" }") |
+ output.append("}") |
+ |
+ output.append("1;") # To make sure the module returns "true". |
+ |
+# print("\n".join(output)) |
+ |
+ entries = [] |
+ for (interface_name, interface_include_path) in idl_to_path_map.iteritems(): |
+ entries.append("%s,%s" % (interface_name, interface_include_path)) |
+ |
+ with open(output_file, "w") as f: |
+ f.write("\n".join(entries)) |
+ |
+if __name__ == "__main__": |
+ main() |