# 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/bindings.gni")
import("//sky/engine/build/scripts/scripts.gni")
import("//sky/engine/core/core.gni")

visibility = [ "//sky/*" ]

# Main interface IDL files (excluding dependencies and testing)
# are included as properties on global objects, and in aggregate bindings.
main_interface_idl_files = core_idl_files

main_interface_idl_files_list = "$target_gen_dir/main_interface_idl_files.tmp"
write_file(main_interface_idl_files_list,
           rebase_path(main_interface_idl_files, root_build_dir))

generated_global_constructors_idl_files =
    [ "$sky_output_dir/WindowConstructors.idl" ]
generated_global_constructors_header_files =
    [ "$sky_output_dir/WindowConstructors.h" ]

# FIXME: Generate separate core_global_objects
# http://crbug.com/358074
# GYP version: generated.gyp:global_objects
action("global_objects") {
  script = "scripts/compute_global_objects.py"

  inputs = [
             "scripts/utilities.py",

             # Only look in main IDL files (exclude dependencies and testing,
             # which should not define global objects).
             main_interface_idl_files_list,
           ] + main_interface_idl_files

  outputs = [
    "$bindings_output_dir/GlobalObjects.pickle",
  ]

  args = [
    "--idl-files-list",
    rebase_path(main_interface_idl_files_list, root_build_dir),
    "--write-file-only-if-changed=1",  # Always true for Ninja. FIXME: remove
                                       # when everything switched to GN.
    "--",
    rebase_path("$bindings_output_dir/GlobalObjects.pickle", root_build_dir),
  ]
}

# GYP version: generated.gyp:global_constructors_idls
action("global_constructors_idls") {
  script = "scripts/generate_global_constructors.py"

  inputs = [
             "scripts/generate_global_constructors.py",
             "scripts/utilities.py",
             "$bindings_output_dir/GlobalObjects.pickle",

             # Only includes main IDL files (exclude dependencies and testing,
             # which should not appear on global objects).
             main_interface_idl_files_list,
           ] + main_interface_idl_files

  outputs = generated_global_constructors_idl_files +
            generated_global_constructors_header_files

  args = [
    "--idl-files-list",
    rebase_path(main_interface_idl_files_list, root_build_dir),
    "--global-objects-file",
    rebase_path("$bindings_output_dir/GlobalObjects.pickle", root_build_dir),
    "--write-file-only-if-changed=1",  # Always true for Ninja.
    "--",
    "Window",
    rebase_path("$sky_output_dir/WindowConstructors.idl", root_build_dir),
  ]

  deps = [
    ":global_objects",
  ]
}

# GYP version: generated.gyp:generated_idls
group("generated_idls") {
  deps = [
    ":global_constructors_idls",
    "//sky/engine/core:generated_testing_idls",
  ]
}
