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

# Keep in sync with 'remoting_webapp' target in remoting/remoting_client.gypi.

import("//build/config/chrome_build.gni")
import("//build/config/features.gni")
import("//build/util/version.gni")
import("//remoting/remoting_enable.gni")
import("//remoting/remoting_locales.gni")
import("//remoting/remoting_options.gni")
import("//remoting/remoting_version.gni")
import("//remoting/webapp/files.gni")
import("//third_party/closure_compiler/closure_args.gni")

# The base remoting directory that is used as the root directory for file
# references. Many of the scripts rely on the files being specified relative
# to this directory.
remoting_dir = "//remoting"

buildtype = "Dev"
if (!is_debug) {
  if (is_official_build) {
    buildtype = "Official"
  } else {
    buildtype = "Release"
  }
}

template("build_locales_listfile") {
  action(target_name) {
    locales_listfile_output = invoker.locales_listfile_output

    script = "../tools/build/remoting_localize.py"

    inputs = []
    outputs = [
      locales_listfile_output,
    ]

    args = [
      "--locale_output",
      rebase_path(webapp_locale_dir, root_build_dir) +
          "/@{json_suffix}/messages.json",
      "--locales_listfile",
      rebase_path(locales_listfile_output, root_build_dir),
    ]
    args += remoting_locales
  }
}

template("build_webapp_html") {
  target_jscompile = ""

  # Do not enable JSCompile on instrumented builds.
  if (enable_remoting_jscompile && invoker.instrument_js == []) {
    target_jscompile = "${target_name}_jscompile"
    target_jscompile_stamp = "$target_gen_dir/${target_jscompile}.stamp"
    action(target_jscompile) {
      js_files = remoting_webapp_js_proto_files + invoker.js_files
      externs =
          remoting_webapp_js_externs_files + [
            "../../third_party/closure_compiler/externs/chrome_extensions.js",
            "../../third_party/closure_compiler/externs/metrics_private.js",
          ]

      script = "../../third_party/closure_compiler/compile.py"
      inputs = js_files
      outputs = [
        target_jscompile_stamp,
      ]

      extra_closure_args = [
        "jscomp_error=reportUnknownTypes",
        "jscomp_error=duplicate",
        "jscomp_error=misplacedTypeAnnotation",
      ]

      args = rebase_path(js_files, root_build_dir)
      args += [
                "--no_single_file",
                "--out_file",
                rebase_path(target_jscompile_stamp, root_build_dir),
                "--closure_args",
              ] + default_closure_args + extra_closure_args
      args += [ "--externs" ] + rebase_path(externs, root_build_dir)
    }
  }

  action(target_name) {
    html_template_file = invoker.html_template_file
    html_template_include_files = invoker.html_template_include_files
    js_files = invoker.js_files
    html_output = invoker.html_output
    exclude_js = invoker.exclude_js
    instrument_js = invoker.instrument_js

    script = rebase_path("//remoting/webapp/build-html.py")

    # Create a file that contains a list of all the JavaScript files needed
    # to build the unit test page. This is needed to avoid problems on platforms
    # that limit the size of a command line.
    file_list = "$target_gen_dir/${target_name}_files.txt"
    files = rebase_path(js_files, root_build_dir)
    write_file(file_list, files)

    inputs = [ html_template_file ] + html_template_include_files + js_files

    outputs = [
      html_output,
    ]

    if (target_jscompile != "") {
      deps = [
        ":$target_jscompile",
      ]
    }

    args = [
      rebase_path(html_output, root_build_dir),
      rebase_path(html_template_file, root_build_dir),
    ]
    args += [
      "--template-dir",
      rebase_path(remoting_dir, root_build_dir),
    ]
    args += [ "--templates" ] + html_template_include_files
    args += [
      "--js-list-file",
      rebase_path(file_list, root_build_dir),
    ]
    args += [ "--templates" ] + html_template_include_files
    args += [
      "--js-list-file",
      rebase_path(file_list, root_build_dir),
    ]
    args += [ "--exclude-js" ] + rebase_path(exclude_js, root_build_dir)
    args += [ "--instrument-js" ] + rebase_path(instrument_js, root_build_dir)
  }
}

template("desktop_remoting_webapp") {
  locales_listfile = target_name + "_locales"
  locales_listfile_output = "$target_gen_dir/${target_name}_locales.txt"

  build_locales_listfile(locales_listfile) {
    # Template uses locales_listfile_output from outer scope.
  }

  background_html = target_name + "_background_html"
  background_html_output = "$target_gen_dir/html/$target_name/background.html"

  build_webapp_html(background_html) {
    html_template_file = remoting_webapp_template_background
    html_template_include_files = []
    js_files = remoting_webapp_background_html_all_js_files
    html_output = background_html_output
    exclude_js = []
    instrument_js = []
  }

  message_window_html = target_name + "_message_window_html"
  message_window_html_output =
      "$target_gen_dir/html/$target_name/message_window.html"

  build_webapp_html(message_window_html) {
    html_template_file = remoting_webapp_template_message_window
    html_template_include_files = []
    js_files = remoting_webapp_message_window_html_all_js_files
    html_output = message_window_html_output
    exclude_js = []
    instrument_js = []
  }

  wcs_sandbox_html = target_name + "_wcs_sandbox_html"
  wcs_sandbox_html_output = "$target_gen_dir/html/$target_name/wcs_sandbox.html"

  build_webapp_html(wcs_sandbox_html) {
    html_template_file = remoting_webapp_template_wcs_sandbox
    html_template_include_files = []
    js_files = remoting_webapp_wcs_sandbox_html_all_js_files
    html_output = wcs_sandbox_html_output
    exclude_js = []
    instrument_js = []
  }

  main_html = target_name + "_main_html"
  main_html_output = "$target_gen_dir/html/$target_name/main.html"

  build_webapp_html(main_html) {
    html_template_file = remoting_webapp_template_main
    html_template_include_files = remoting_webapp_template_files
    js_files = remoting_webapp_crd_main_html_all_js_files
    html_output = main_html_output
    exclude_js = []
    instrument_js = []
  }

  public_session_html = target_name + "_public_session_html"
  public_session_html_output =
      "$target_gen_dir/html/$target_name/public_session.html"

  build_webapp_html(public_session_html) {
    html_template_file = remoting_webapp_template_public_session
    html_template_include_files = remoting_webapp_public_session_template_files
    js_files = remoting_webapp_public_session_html_all_js_files
    html_output = public_session_html_output
    exclude_js = []
    instrument_js = []
  }

  action(target_name) {
    script = "//remoting/webapp/build-webapp.py"

    output_dir = invoker.output_dir
    zip_path = invoker.zip_path
    extra_files = invoker.extra_files

    dr_generated_html_files = [
      background_html_output,
      message_window_html_output,
      wcs_sandbox_html_output,
      main_html_output,
      public_session_html_output,
      "$target_gen_dir/credits.html",
    ]

    # Windows debug builds of remoting_client_plugin_newlib.pexe trigger OOM in
    # arm-nacl-ld.gold.exe - enable for release builds only on Windows.
    if (enable_nacl && (!is_win || !is_debug)) {
      pnacl_tc = "//build/toolchain/nacl:newlib_pnacl"
      pexe_label = "//remoting/client/plugin:remoting_client_plugin_newlib"
      pexe_dir = get_label_info("${pexe_label}($pnacl_tc)", "root_out_dir")

      extra_files += [ "$pexe_dir/remoting_client_plugin_newlib.pexe" ]
      if (is_debug) {
        extra_files += [ "$pexe_dir/remoting_client_plugin_newlib.pexe.debug" ]
      }
    }

    inputs = [ rebase_path("crd/manifest.json.jinja2") ] +
             remoting_version_files + rebase_path(remoting_webapp_crd_files) +
             extra_files + dr_generated_html_files

    outputs = [
      zip_path,
    ]

    deps = [
      ":$background_html",
      ":$locales_listfile",
      ":$main_html",
      ":$message_window_html",
      ":$public_session_html",
      ":$wcs_sandbox_html",
      "//remoting/resources",
      "//remoting/webapp:credits",
    ]

    # Windows debug builds of remoting_client_plugin_newlib.pexe trigger OOM in
    # arm-nacl-ld.gold.exe - enable for release builds only on Windows.
    if (enable_nacl && (!is_win || !is_debug)) {
      deps += [ "${pexe_label}($pnacl_tc)" ]
      if (is_debug) {
        deps += [ "${pexe_label}_debug($pnacl_tc)" ]
      }
    }

    # Create a file that contains a list of all the resource files needed
    # to build the webapp. This is needed to avoid problems on platforms that
    # limit the size of a command line.
    file_list = "$target_gen_dir/${target_name}_files.txt"
    files = []
    files += rebase_path(dr_generated_html_files, root_build_dir)
    files += rebase_path(remoting_webapp_crd_files, root_build_dir)
    files += rebase_path(extra_files, root_build_dir)
    write_file(file_list, files)

    args = [
      buildtype,
      chrome_version_full,
      rebase_path(output_dir, root_build_dir),
      rebase_path(zip_path, root_build_dir),
      rebase_path("crd/manifest.json.jinja2", root_build_dir),
    ]
    args += [
      "--files_listfile",
      rebase_path(file_list, root_build_dir),
    ]
    args += [
      "--locales_listfile",
      rebase_path(locales_listfile_output, root_build_dir),
    ]
    args += [
      "--use_gcd",
      "$remoting_use_gcd",
    ]
  }
}
