| Index: ui/ozone/generate_constructor_list.py
|
| diff --git a/ui/ozone/generate_constructor_list.py b/ui/ozone/generate_constructor_list.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..02945b3b986cc3e63553346f34fd23fe61b88890
|
| --- /dev/null
|
| +++ b/ui/ozone/generate_constructor_list.py
|
| @@ -0,0 +1,173 @@
|
| +#!/usr/bin/env python
|
| +# Copyright 2014 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 PlatformObject<> constructor list.
|
| +
|
| +This script takes as arguments a list of platform names as a text file and
|
| +a list of types and generates a C++ source file containing a list of
|
| +the constructors for that object in platform order.
|
| +
|
| +Example Output: ./ui/ozone/generate_constructor_list.py \
|
| + --platform test \
|
| + --platform dri \
|
| + --export OZONE_EXPORT \
|
| + --namespace ui \
|
| + --typename OzonePlatform \
|
| + --include '"ui/ozone/ozone_platform.h"'
|
| +
|
| + // DO NOT MODIFY. GENERATED BY generate_constructor_list.py
|
| +
|
| + #include "ui/ozone/platform_object_internal.h"
|
| +
|
| + #include "ui/ozone/ozone_platform.h"
|
| +
|
| + namespace ui {
|
| +
|
| + OzonePlatform* CreateOzonePlatformTest();
|
| + OzonePlatform* CreateOzonePlatformDri();
|
| +
|
| + } // namespace ui
|
| +
|
| + namespace ui {
|
| +
|
| + typedef ui::OzonePlatform* (*OzonePlatformConstructor)();
|
| +
|
| + template <> const OzonePlatformConstructor
|
| + PlatformConstructorList<ui::OzonePlatform>::kConstructors[] = {
|
| + &ui::CreateOzonePlatformTest,
|
| + &ui::CreateOzonePlatformDri,
|
| + };
|
| +
|
| + template class OZONE_EXPORT PlatformObject<ui::OzonePlatform>;
|
| +
|
| + } // namespace ui
|
| +"""
|
| +
|
| +import optparse
|
| +import os
|
| +import collections
|
| +import re
|
| +import sys
|
| +import string
|
| +
|
| +
|
| +def GetTypedefName(typename):
|
| + """Determine typedef name of constructor for typename.
|
| +
|
| + This is just typename + "Constructor".
|
| + """
|
| +
|
| + return typename + 'Constructor'
|
| +
|
| +
|
| +def GetConstructorName(typename, platform):
|
| + """Determine name of static constructor function from platform name.
|
| +
|
| + This is just "Create" + typename + platform.
|
| + """
|
| +
|
| + return 'Create' + typename + string.capitalize(platform)
|
| +
|
| +
|
| +def GenerateConstructorList(out, namespace, export, typenames, platforms,
|
| + includes):
|
| + """Generate static array containing a list of constructors."""
|
| +
|
| + out.write('// DO NOT MODIFY. GENERATED BY generate_constructor_list.py\n')
|
| + out.write('\n')
|
| +
|
| + out.write('#include "ui/ozone/platform_object_internal.h"\n')
|
| + out.write('\n')
|
| +
|
| + for include in includes:
|
| + out.write('#include %(include)s\n' % {'include': include})
|
| + out.write('\n')
|
| +
|
| + out.write('namespace %(namespace)s {\n' % {'namespace': namespace})
|
| + out.write('\n')
|
| +
|
| + # Declarations of constructor functions.
|
| + for typename in typenames:
|
| + for platform in platforms:
|
| + constructor = GetConstructorName(typename, platform)
|
| + out.write('%(typename)s* %(constructor)s();\n'
|
| + % {'typename': typename,
|
| + 'constructor': constructor})
|
| + out.write('\n')
|
| +
|
| + out.write('} // namespace %(namespace)s\n' % {'namespace': namespace})
|
| + out.write('\n')
|
| +
|
| + out.write('namespace ui {\n')
|
| + out.write('\n')
|
| +
|
| + # Handy typedefs for constructor types.
|
| + for typename in typenames:
|
| + out.write('typedef %(typename)s* (*%(typedef)s)();\n'
|
| + % {'typename': namespace + '::' + typename,
|
| + 'typedef': GetTypedefName(typename)})
|
| + out.write('\n')
|
| +
|
| + # The actual constructor lists.
|
| + for typename in typenames:
|
| + out.write('template <> const %(typedef)s\n'
|
| + % {'typedef': GetTypedefName(typename)})
|
| + out.write('PlatformConstructorList<%(typename)s>::kConstructors[] = {\n'
|
| + % {'typename': namespace + '::' + typename})
|
| + for platform in platforms:
|
| + constructor = GetConstructorName(typename, platform)
|
| + out.write(' &%(namespace)s::%(constructor)s,\n'
|
| + % {'namespace': namespace, 'constructor': constructor})
|
| + out.write('};\n')
|
| + out.write('\n')
|
| +
|
| + # Exported template instantiation.
|
| + for typename in typenames:
|
| + out.write('template class %(export)s PlatformObject<%(typename)s>;\n'
|
| + % {'export': export, 'typename': namespace + '::' + typename})
|
| + out.write('\n')
|
| +
|
| + out.write('} // namespace ui\n')
|
| + out.write('\n')
|
| +
|
| +
|
| +def main(argv):
|
| + parser = optparse.OptionParser()
|
| + parser.add_option('--namespace', default='ozone')
|
| + parser.add_option('--export', default='OZONE_EXPORT')
|
| + parser.add_option('--platform_list')
|
| + parser.add_option('--output_cc')
|
| + parser.add_option('--include', action='append', default=[])
|
| + parser.add_option('--platform', action='append', default=[])
|
| + parser.add_option('--typename', action='append', default=[])
|
| + options, _ = parser.parse_args(argv)
|
| +
|
| + platforms = list(options.platform)
|
| + typenames = list(options.typename)
|
| + includes = list(options.include)
|
| +
|
| + if options.platform_list:
|
| + platforms = open(options.platform_list, 'r').read().strip().split('\n')
|
| +
|
| + if not platforms:
|
| + sys.stderr.write('No platforms are selected!')
|
| + sys.exit(1)
|
| +
|
| + # Write to standard output or file specified by --output_cc.
|
| + out_cc = sys.stdout
|
| + if options.output_cc:
|
| + out_cc = open(options.output_cc, 'wb')
|
| +
|
| + GenerateConstructorList(out_cc, options.namespace, options.export,
|
| + typenames, platforms, includes)
|
| +
|
| + if options.output_cc:
|
| + out_cc.close()
|
| +
|
| + return 0
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + sys.exit(main(sys.argv[1:]))
|
|
|