Index: ui/ozone/generate_ozone_platform_list.py |
diff --git a/ui/ozone/generate_ozone_platform_list.py b/ui/ozone/generate_ozone_platform_list.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..a73ead719a04453869ccef39782fce6b735b9299 |
--- /dev/null |
+++ b/ui/ozone/generate_ozone_platform_list.py |
@@ -0,0 +1,101 @@ |
+#!/usr/bin/env python |
+# Copyright (c) 2013 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. |
+ |
+"""Code generator for Ozone platform list. |
+ |
+This script takes as arguments a list of platform names and generates a C++ |
+source file containing a list of those platforms. Each list entry contains the |
+name and a function pointer to the initializer for that platform. |
+ |
+Example Output: ./generate_ozone_platform_list.py --default wayland dri wayland |
+ |
+ #include "ui/ozone/ozone_platform_list.h" |
+ |
+ namespace ui { |
+ |
+ OzonePlatform* CreateOzonePlatformDri(); |
+ OzonePlatform* CreateOzonePlatformWayland(); |
+ |
+ const OzonePlatformListEntry kOzonePlatforms[] = { |
+ { "wayland", &CreateOzonePlatformWayland }, |
+ { "dri", &CreateOzonePlatformDri }, |
+ }; |
+ |
+ const int kOzonePlatformCount = 2; |
+ |
+ } // namespace ui |
+""" |
+ |
+import optparse |
+import os |
+import collections |
+import re |
+import sys |
+import string |
+ |
+ |
+def GetConstructorName(name): |
+ """Determine name of static constructor function from platform name. |
+ |
+ We just capitalize the platform name and prepend "CreateOzonePlatform". |
+ """ |
+ |
+ return 'CreateOzonePlatform' + string.capitalize(name) |
+ |
+ |
+def GeneratePlatformList(out, platforms): |
+ """Generate static array containing a list of ozone platforms.""" |
+ |
+ out.write('#include "ui/ozone/ozone_platform_list.h"\n') |
+ out.write('\n') |
+ |
+ out.write('namespace ui {\n') |
+ out.write('\n') |
+ |
+ # Prototypes for platform initializers. |
+ for platform in platforms: |
+ out.write('OzonePlatform* %s();\n' % GetConstructorName(platform)) |
+ out.write('\n') |
+ |
+ # List of platform names and initializers. |
+ out.write('const OzonePlatformListEntry kOzonePlatforms[] = {\n') |
+ for platform in platforms: |
+ out.write(' { "%s", &%s },\n' % (platform, GetConstructorName(platform))) |
+ out.write('};\n') |
+ out.write('\n') |
+ |
+ out.write('const int kOzonePlatformCount = %d;\n' % len(platforms)) |
+ out.write('\n') |
+ |
+ out.write('} // namespace ui\n') |
+ |
+ |
+def main(argv): |
+ parser = optparse.OptionParser() |
+ parser.add_option('--output_file') |
+ parser.add_option('--default') |
+ options, platforms = parser.parse_args(argv) |
+ |
+ # Write to standard output or file specified by --output_file. |
+ out = sys.stdout |
+ if options.output_file: |
+ out = open(options.output_file, 'wb') |
+ |
+ # Reorder the platforms when --default is specified. |
+ # The default platform must appear first in the platform list. |
+ if options.default and options.default in platforms: |
+ platforms.remove(options.default) |
+ platforms.insert(0, options.default) |
+ |
+ GeneratePlatformList(out, platforms) |
+ |
+ if options.output_file: |
+ out.close() |
+ |
+ return 0 |
+ |
+ |
+if __name__ == '__main__': |
+ sys.exit(main(sys.argv[1:])) |