diff options
Diffstat (limited to 'chromium/ui/ozone/generate_ozone_platform_list.py')
-rwxr-xr-x | chromium/ui/ozone/generate_ozone_platform_list.py | 142 |
1 files changed, 109 insertions, 33 deletions
diff --git a/chromium/ui/ozone/generate_ozone_platform_list.py b/chromium/ui/ozone/generate_ozone_platform_list.py index df85a1eab92..d47c398259b 100755 --- a/chromium/ui/ozone/generate_ozone_platform_list.py +++ b/chromium/ui/ozone/generate_ozone_platform_list.py @@ -6,26 +6,47 @@ """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. +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 - #include "ui/ozone/ozone_platform_list.h" + // platform_list.txt + + wayland + dri + + // platform_list.h + + #ifndef UI_OZONE_PLATFORM_LIST_H_ + #define UI_OZONE_PLATFORM_LIST_H_ namespace ui { - OzonePlatform* CreateOzonePlatformDri(); - OzonePlatform* CreateOzonePlatformWayland(); + const int kPlatformWayland = 0; + const int kPlatformDri = 1; - const OzonePlatformListEntry kOzonePlatforms[] = { - { "wayland", &CreateOzonePlatformWayland }, - { "dri", &CreateOzonePlatformDri }, - }; + extern const char *kPlatformNames[kPlatformCount]; + + } // namespace ui - const int kOzonePlatformCount = 2; + // 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 @@ -36,63 +57,118 @@ import sys import string -def GetConstructorName(name): +def GetConstantName(name): """Determine name of static constructor function from platform name. We just capitalize the platform name and prepend "CreateOzonePlatform". """ - return 'CreateOzonePlatform' + string.capitalize(name) + return 'kPlatform' + string.capitalize(name) -def GeneratePlatformList(out, platforms): - """Generate static array containing a list of ozone platforms.""" +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') - out.write('#include "ui/ozone/ozone_platform_list.h"\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 platform in platforms: - out.write('OzonePlatform* %s();\n' % GetConstructorName(platform)) + for plat_id, plat_name in enumerate(platforms): + out.write('const int %s = %d;\n' % (GetConstantName(plat_name), plat_id)) 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') + # 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') - out.write('const int kOzonePlatformCount = %d;\n' % len(platforms)) + # 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_file') + 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) - # 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() + # 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 |