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..d47c398259b97243d700df86ad4ddd88bf998387 |
--- /dev/null |
+++ b/ui/ozone/generate_ozone_platform_list.py |
@@ -0,0 +1,177 @@ |
+#!/usr/bin/env python |
+# Copyright 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 platform gets an integer identifier that is used to find objects for that |
+platform (particularly constructors for platform-specific objects). |
+ |
+Example Output: ./generate_ozone_platform_list.py --default wayland dri wayland |
+ |
+ // platform_list.txt |
+ |
+ wayland |
+ dri |
+ |
+ // platform_list.h |
+ |
+ #ifndef UI_OZONE_PLATFORM_LIST_H_ |
+ #define UI_OZONE_PLATFORM_LIST_H_ |
+ |
+ namespace ui { |
+ |
+ const int kPlatformWayland = 0; |
+ const int kPlatformDri = 1; |
+ |
+ extern const char *kPlatformNames[kPlatformCount]; |
+ |
+ } // namespace ui |
+ |
+ // platform_list.cc |
+ |
+ #include "ui/ozone/platform_list.h" |
+ |
+ namespace ui { |
+ |
+ const char *kPlatformNames[] = { |
+ "wayland", // kPlatformWayland |
+ "dri", // kPlatformDri |
+ }; |
+ |
+ } // namespace ui |
+ |
+ #endif // UI_OZONE_PLATFORM_LIST_H_ |
+ |
+""" |
+ |
+import optparse |
+import os |
+import collections |
+import re |
+import sys |
+import string |
+ |
+ |
+def GetConstantName(name): |
+ """Determine name of static constructor function from platform name. |
+ |
+ We just capitalize the platform name and prepend "CreateOzonePlatform". |
+ """ |
+ |
+ return 'kPlatform' + string.capitalize(name) |
+ |
+ |
+def GeneratePlatformListText(out, platforms): |
+ """Generate text file with list of platform names, in platform id order.""" |
+ |
+ for platform in platforms: |
+ out.write(platform) |
+ out.write('\n') |
+ |
+ out.write('\n') |
+ |
+ |
+def GeneratePlatformListHeader(out, platforms): |
+ """Generate ids of ozone platforms & declaration of static names array.""" |
+ |
+ out.write('// DO NOT MODIFY. GENERATED BY generate_ozone_platform_list.py\n') |
+ out.write('\n') |
+ |
+ out.write('#ifndef UI_OZONE_PLATFORM_LIST_H_\n') |
+ out.write('#define UI_OZONE_PLATFORM_LIST_H_\n') |
+ out.write('\n') |
+ |
+ out.write('namespace ui {\n') |
+ out.write('\n') |
+ |
+ # Prototypes for platform initializers. |
+ for plat_id, plat_name in enumerate(platforms): |
+ out.write('const int %s = %d;\n' % (GetConstantName(plat_name), plat_id)) |
+ out.write('\n') |
+ |
+ # Platform count. |
+ out.write('const int kPlatformCount = %d;\n' % len(platforms)) |
+ out.write('\n') |
+ |
+ # Declaration for names list. |
+ out.write('extern const char* kPlatformNames[kPlatformCount];\n') |
+ out.write('\n') |
+ |
+ out.write('} // namespace ui\n') |
+ out.write('\n') |
+ |
+ out.write('#endif // UI_OZONE_PLATFORM_LIST_H_\n') |
+ out.write('\n') |
+ |
+ |
+def GeneratePlatformListSource(out, platforms): |
+ """Generate static array containing a list of ozone platforms.""" |
+ |
+ out.write('// DO NOT MODIFY. GENERATED BY generate_ozone_platform_list.py\n') |
+ out.write('\n') |
+ |
+ out.write('#include "ui/ozone/platform_list.h"\n') |
+ out.write('\n') |
+ |
+ out.write('namespace ui {\n') |
+ out.write('\n') |
+ |
+ # Definition of names list. |
+ out.write('const char* kPlatformNames[] = {\n') |
+ |
+ # Prototypes for platform initializers. |
+ for plat_name in platforms: |
+ out.write(' "%s", // %s\n' % (plat_name, GetConstantName(plat_name))) |
+ out.write('};\n') |
+ out.write('\n') |
+ |
+ out.write('} // namespace ui\n') |
+ out.write('\n') |
+ |
+ |
+def main(argv): |
+ parser = optparse.OptionParser() |
+ parser.add_option('--output_cc') |
+ parser.add_option('--output_h') |
+ parser.add_option('--output_txt') |
+ parser.add_option('--default') |
+ options, platforms = parser.parse_args(argv) |
+ |
+ # 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) |
+ |
+ # Write to standard output or file specified by --output_{cc,h}. |
+ out_cc = sys.stdout |
+ out_h = sys.stdout |
+ out_txt = sys.stdout |
+ if options.output_cc: |
+ out_cc = open(options.output_cc, 'wb') |
+ if options.output_h: |
+ out_h = open(options.output_h, 'wb') |
+ if options.output_txt: |
+ out_txt = open(options.output_txt, 'wb') |
+ |
+ GeneratePlatformListText(out_txt, platforms) |
+ GeneratePlatformListHeader(out_h, platforms) |
+ GeneratePlatformListSource(out_cc, platforms) |
+ |
+ if options.output_cc: |
+ out_cc.close() |
+ if options.output_h: |
+ out_h.close() |
+ if options.output_txt: |
+ out_txt.close() |
+ |
+ return 0 |
+ |
+ |
+if __name__ == '__main__': |
+ sys.exit(main(sys.argv[1:])) |