# 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.

import("//sky/engine/bindings/core/v8/generated.gni")
import("//sky/engine/bindings/core/core.gni")
import("//sky/engine/bindings/core/idl.gni")

bindings_scripts_dir = get_path_info(".", "abspath")
bindings_scripts_output_dir = "$root_gen_dir/sky/bindings/scripts"

# Replacing <(DEPTH) with "/" makes paths like "<(DEPTH)/foo" absolute.
_gypi = exec_script("//build/gypi_to_gn.py",
                    [
                      rebase_path("scripts.gypi"),
                      "--replace=<(DEPTH)=/",
                    ],
                    "scope",
                    [ "scripts.gypi" ])

jinja_module_files = get_path_info(_gypi.jinja_module_files, "abspath")
idl_lexer_parser_files = get_path_info(_gypi.idl_lexer_parser_files, "abspath")
idl_compiler_files = get_path_info(_gypi.idl_compiler_files, "abspath")

# Calls the compute_interfaces_info_individual script.
#
# Parameters:
#   sources_static = list of IDL files to pass as inputs
#   sources_generated = list of generated IDL files to pass as inputs
#   component_dir = name if subdirectory (one word, no slashes) of component.
#   output_file = pickle file to write
#
# FIXME: Note the static/generated split is for consistency with GYP. This
# split is not necessary in the GN build and could be combined into a single
# "sources".
template("compute_interfaces_info_individual") {
  action(target_name) {
    script = "$bindings_scripts_dir/compute_interfaces_info_individual.py"
    if (defined(invoker.visibility)) {
      visibility = invoker.visibility
    }

    # Save static list to temp file to avoid blowing out command-line length
    # limit.
    file_list = "$target_gen_dir/${target_name}_file_list.txt"
    write_file(file_list, rebase_path(invoker.sources_static, root_build_dir))

    inputs = [ "$bindings_scripts_dir/utilities.py" ] + invoker.sources_static +
             invoker.sources_generated

    outputs = [
      file_list,
      invoker.output_file,
    ]

    args = [
             "--component-dir",
             invoker.component_dir,
             "--idl-files-list",
             rebase_path(file_list, root_build_dir),
             "--interfaces-info-file",
             rebase_path(invoker.output_file, root_build_dir),
             "--write-file-only-if-changed=1",
             "--",
           ] + rebase_path(invoker.sources_generated, root_build_dir)

    deps = [
      # FIXME: should be {modules|core}_generated_idls
      # http://crbug.com/358074
      "//sky/engine/bindings:generated_idls",
    ]
  }
}

# Calls generate_event_interfaces
#
# Parameters:
#   sources = A list of IDL files to process.
#   output_file = The .in file to write, relative to the sky_gen_dir.
#   suffix = (Optional) String to be passed to script via --suffix
template("generate_event_interfaces") {
  action(target_name) {
    # Write the file list to a unique temp file to avoid blowing out the
    # command line length limit.
    idl_files_list = "$target_gen_dir/${target_name}_file_list.tmp"
    write_file(idl_files_list, rebase_path(invoker.sources, root_build_dir))

    inputs = [
               "//sky/engine/bindings/scripts/utilities.py",
               idl_files_list,
             ] + invoker.sources

    output_file = "$root_gen_dir/sky/" + invoker.output_file
    outputs = [
      output_file,
    ]

    script = "//sky/engine/bindings/scripts/generate_event_interfaces.py"
    args = [
      "--event-idl-files-list",
      rebase_path(idl_files_list, root_build_dir),
      "--event-interfaces-file",
      rebase_path(output_file, root_build_dir),
      "--write-file-only-if-changed=1",  # Always true for Ninja.
    ]

    if (defined(invoker.suffix)) {
      args += [
        "--suffix",
        invoker.suffix,
      ]
    }
  }
}

# Runs the idl_compiler script over a list of sources.
#
# Parameters:
#   sources = list of IDL files to compile
#   output_dir = string containing the directory to put the output files.
template("idl_compiler") {
  output_dir = invoker.output_dir

  action_foreach(target_name) {
    # TODO(brettw) GYP adds a "-S before the script name to skip "import site" to
    # speed up startup. Figure out if we need this and do something similar (not
    # really expressible in GN now).
    script = "//sky/engine/bindings/scripts/idl_compiler.py"

    inputs = idl_lexer_parser_files + idl_compiler_files  # to be explicit (covered by parsetab)
    inputs += [
      "$bindings_scripts_output_dir/lextab.py",
      "$bindings_scripts_output_dir/parsetab.pickle",
      "$bindings_scripts_output_dir/cached_jinja_templates.stamp",
      "$bindings_dir/IDLExtendedAttributes.txt",

      # If the dependency structure or public interface info (e.g.,
      # [ImplementedAs]) changes, we rebuild all files, since we're not
      # computing dependencies file-by-file in the build.
      # This data is generally stable.
      "$bindings_core_output_dir/InterfacesInfoAll.pickle",
    ]

    # Further, if any dependency (partial interface or implemented
    # interface) changes, rebuild everything, since every IDL potentially
    # depends on them, because we're not computing dependencies
    # file-by-file.
    # FIXME: This is too conservative, and causes excess rebuilds:
    # compute this file-by-file.  http://crbug.com/341748
    # This should theoretically just be the IDL files passed in.
    inputs += core_all_dependency_idl_files

    sources = invoker.sources
    outputs = [
      "$output_dir/V8{{source_name_part}}.cpp",
      "$output_dir/V8{{source_name_part}}.h",
    ]

    args = [
      "--cache-dir",
      rebase_path(bindings_scripts_output_dir, root_build_dir),
      "--output-dir",
      rebase_path(output_dir, root_build_dir),
      "--interfaces-info",
      rebase_path("$bindings_core_output_dir/InterfacesInfoAll.pickle",
                  root_build_dir),
      "--write-file-only-if-changed=1",  # Always true for Ninja.
      "{{source}}",
    ]

    deps = [
      "//sky/engine/bindings/core/v8:interfaces_info",
      "//sky/engine/bindings/scripts:cached_lex_yacc_tables",
      "//sky/engine/bindings/scripts:cached_jinja_templates",
      "//sky/engine/core:generated_testing_idls",
    ]
  }
}

# Runs the idl_compiler to generate IDL dictionary impl files.
#
# Parameters:
#   sources = a list of IDL files to process
#   outputs = a list of files to write to
template("idl_dictionary") {
  output_dir = "$root_gen_dir/sky/"

  action(target_name) {
    script = "//sky/engine/bindings/scripts/idl_compiler.py"
    idl_files_list = "$target_gen_dir/${target_name}_file_list.tmp"
    write_file(idl_files_list, rebase_path(invoker.sources, root_build_dir))

    inputs = [ idl_files_list ] + invoker.sources
    outputs = invoker.outputs

    args = [
      "--cache-dir",
      rebase_path(bindings_scripts_output_dir, root_build_dir),
      "--output-dir",
      rebase_path(output_dir, root_build_dir),
      "--interfaces-info",
      rebase_path("$bindings_core_output_dir/InterfacesInfoAll.pickle",
                  root_build_dir),
      "--write-file-only-if-changed=1",
      "--generate-dictionary-impl",
      rebase_path(idl_files_list, root_build_dir),
    ]

    deps = [
      "//sky/engine/bindings/core/v8:interfaces_info",
      "//sky/engine/bindings/scripts:cached_lex_yacc_tables",
      "//sky/engine/bindings/scripts:cached_jinja_templates",
    ]
  }
}

# Calls the aggregate_generated_bindings script.
#
# Parameters:
#   sources = a list of source IDL files.
#   component_dir = Name of directory for these files (one word, no slashes).
#   outputs = a list of files to write to.
template("aggregate_generated_bindings") {
  action(target_name) {
    script = "//sky/engine/bindings/scripts/aggregate_generated_bindings.py"

    # Write lists of main IDL files to a file, so that the command lines don't
    # exceed OS length limits.
    idl_files_list = "$target_gen_dir/${target_name}_file_list.tmp"
    write_file(idl_files_list, rebase_path(invoker.sources, root_build_dir))

    inputs = [ idl_files_list ] + invoker.sources
    outputs = invoker.outputs

    args = [
      invoker.component_dir,
      rebase_path(idl_files_list, root_build_dir),
      "--",
    ]
    args += rebase_path(invoker.outputs, root_build_dir)
  }
}
