#!/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 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:]))