blob: df85a1eab92c136eb5d714d5968c14f53d5c1284 [file] [log] [blame]
#!/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:]))