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

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

#!/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_ Determine name of static constructor function from platform name.    We just capitalize the platform name and prepend "CreateOzonePlatform". Generate text file with list of platform names, in platform id order. Generate ids of ozone platforms & declaration of static names array. # Prototypes for platform initializers. # Platform count. # Declaration for names list. Generate static array containing a list of ozone platforms. # Definition of names list. # Prototypes for platform initializers. # Reorder the platforms when --default is specified. # The default platform must appear first in the platform list. # Write to standard output or file specified by --output_{cc,h}.