# Copyright (c) 2011 The Chromium Embedded Framework Authors. All rights
# reserved. Use of this source code is governed by a BSD-style license that
# can be found in the LICENSE file.

from __future__ import absolute_import
from cef_parser import *


def make_gypi_file(header):
  # header string
  result = \
"""# Copyright (c) $YEAR$ The Chromium Embedded Framework Authors. All rights
# reserved. Use of this source code is governed by a BSD-style license that
# can be found in the LICENSE file.
#
# ---------------------------------------------------------------------------
#
# This file was generated by the CEF translator tool and should not edited
# by hand. See the translator.README.txt file in the tools directory for
# more information.
#
# $hash=$$HASH$$$
#

{
  'variables': {
"""

  filenames = sorted(header.get_file_names())

  # cpp includes
  result += "    'autogen_cpp_includes': [\n"
  for filename in filenames:
    result += "      'include/" + filename + "',\n"
  result += "    ],\n"

  # capi includes
  result += "    'autogen_capi_includes': [\n"
  for filename in filenames:
    result += "      'include/capi/" + get_capi_file_name(filename) + "',\n"
  result += "    ],\n"

  classes = sorted(header.get_class_names())

  # library side includes
  result += "    'autogen_library_side': [\n"
  for clsname in classes:
    cls = header.get_class(clsname)
    filename = get_capi_name(clsname[3:], False)
    dir = cls.get_file_directory()
    if not dir is None:
      filename = dir + '/' + filename
    if cls.is_library_side():
      result += "      'libcef_dll/cpptoc/"+filename+"_cpptoc.cc',\n" \
                "      'libcef_dll/cpptoc/"+filename+"_cpptoc.h',\n"
    else:
      result += "      'libcef_dll/ctocpp/"+filename+"_ctocpp.cc',\n" \
                "      'libcef_dll/ctocpp/"+filename+"_ctocpp.h',\n"
  result += "    ],\n"

  # client side includes
  result += "    'autogen_client_side': [\n"
  for clsname in classes:
    cls = header.get_class(clsname)
    filename = get_capi_name(clsname[3:], False)
    dir = cls.get_file_directory()
    if not dir is None:
      filename = dir + '/' + filename
    if cls.is_library_side():
      result += "      'libcef_dll/ctocpp/"+filename+"_ctocpp.cc',\n" \
                "      'libcef_dll/ctocpp/"+filename+"_ctocpp.h',\n"
    else:
      result += "      'libcef_dll/cpptoc/"+filename+"_cpptoc.cc',\n" \
                "      'libcef_dll/cpptoc/"+filename+"_cpptoc.h',\n"
  result += "    ],\n"

  # footer string
  result += \
"""  },
}
"""

  # add the copyright year
  result = result.replace('$YEAR$', get_year())

  return result


def write_gypi_file(header, file):
  newcontents = make_gypi_file(header)
  return (file, newcontents)


# test the module
if __name__ == "__main__":
  import sys

  # verify that the correct number of command-line arguments are provided
  if len(sys.argv) < 2:
    sys.stderr.write('Usage: ' + sys.argv[0] + ' <infile>\n')
    sys.exit()

  # create the header object
  header = obj_header()
  header.add_file(sys.argv[1])

  # dump the result to stdout
  sys.stdout.write(make_gypi_file(header))