# 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("//build/config/ui.gni")
import("//mojo/public/mojo.gni")
import("//mojo/public/tools/bindings/mojom.gni")

# We don't support building in the component build since mojo apps are
# inherently components.
assert(!is_component_build)

group("shell") {
  testonly = true

  deps = [
    ":mojo_shell",
    ":tests",
  ]

  if (!is_win) {
    deps += [ ":mojo_launcher" ]
  }

  if (is_android) {
    deps += [ ":mojo_shell_apk" ]
  }
}

group("tests") {
  testonly = true
  deps = [
    ":external_application_unittests",
    ":mojo_shell_tests",
  ]
}

if (is_android) {
  import("//build/config/android/config.gni")
  import("//build/config/android/rules.gni")
}

if (!use_prebuilt_mojo_shell) {
  executable("mojo_shell") {
    sources = [
      "desktop/mojo_main.cc",
    ]

    deps = [
      ":init",
      ":lib",
      "//base",
      "//build/config/sanitizers:deps",
      "//mojo/common",
      "//mojo/environment:chromium",
    ]
  }
}  # !use_prebuilt_mojo_shell

executable("mojo_launcher") {
  sources = [
    "launcher_main.cc",
  ]

  deps = [
    ":external_application_registrar_bindings",
    ":external_application_registrar_connection",
    ":init",
    ":in_process_dynamic_service_runner",
    "//base",
    "//build/config/sanitizers:deps",
    "//mojo/common",
    "//mojo/edk/system",
    "//mojo/environment:chromium",
    "//url",
  ]
}

source_set("init") {
  sources = [
    "init.cc",
    "init.h",
  ]

  deps = [
    "//base",
  ]
}

source_set("in_process_dynamic_service_runner") {
  sources = [
    "dynamic_service_runner.cc",
    "dynamic_service_runner.h",
    "in_process_dynamic_service_runner.cc",
    "in_process_dynamic_service_runner.h",
  ]

  deps = [
    "//base",
    "//mojo/gles2",
    "//mojo/public/cpp/system",
  ]

  # This target has to include the public thunk headers, which generally
  # shouldn't be included without picking an implementation. We are providing
  # the implementation but the thunk header target cannot declare that we are
  # permitted to include it since it's in the public SDK and we are not.
  # Suppress include checking so we can still check the rest of the targets in
  # this file.
  check_includes = false
}

source_set("lib") {
  sources = [
    "app_child_process.cc",
    "app_child_process.h",
    "app_child_process_host.cc",
    "app_child_process_host.h",
    "child_process.cc",
    "child_process.h",
    "child_process_host.cc",
    "child_process_host.h",
    "context.cc",
    "context.h",
    "data_pipe_peek.cc",
    "data_pipe_peek.h",
    "dynamic_application_loader.cc",
    "dynamic_application_loader.h",
    "external_application_listener.h",
    "external_application_listener_posix.cc",
    "external_application_listener_win.cc",
    "filename_util.cc",
    "filename_util.h",
    "incoming_connection_listener_posix.cc",
    "incoming_connection_listener_posix.h",
    "mojo_url_resolver.cc",
    "mojo_url_resolver.h",
    "out_of_process_dynamic_service_runner.cc",
    "out_of_process_dynamic_service_runner.h",
    "switches.cc",
    "switches.h",
    "task_runners.cc",
    "task_runners.h",
    "test_child_process.cc",
    "test_child_process.h",
    "ui_application_loader_android.cc",
    "ui_application_loader_android.h",
  ]

  deps = [
    ":app_child_process_bindings",
    ":external_application_registrar_bindings",
    ":init",
    ":in_process_dynamic_service_runner",
    "//base",
    "//base/third_party/dynamic_annotations",
    "//base:base_static",
    "//mojo/application",
    "//mojo/application_manager",
    "//mojo/common",
    "//mojo/common:tracing_impl",
    "//mojo/edk/system",
    "//mojo/public/cpp/bindings",
    "//mojo/public/interfaces/application",
    "//mojo/services/network/public/interfaces",
    "//shell/domain_socket",
    "//mojo/spy",
    "//services/tracing:bindings",
    "//url",
  ]

  if (is_win) {
    deps -= [ "//shell/domain_socket" ]
  }

  if (is_android) {
    sources += [
      "android/android_handler.h",
      "android/android_handler.cc",
      "android/android_handler_loader.h",
      "android/android_handler_loader.cc",
      "network_application_loader.cc",
      "network_application_loader.h",
    ]

    deps += [
      ":jni_headers",
      ":run_android_application_function",
      "//mojo/application:content_handler",
      "//mojo/services/network:lib",
      "//services/gles2",
      "//services/native_viewport:lib",
    ]
  }

  # This target includes some files behind #ifdef OS... guards. Since gn is not
  # smart enough to understand preprocess includes, it does complains about
  # these includes when not using the build files for that OS. Suppress checking
  # so we can enable checking for the rest of the targets in this file.
  # TODO: Might be better to split the files with OS-specific includes out to a
  # separate source_set so we can leave checking on for the rest of the target.
  check_includes = false
}

if (is_android) {
  generate_jni("jni_headers") {
    sources = [
      "android/apk/src/org/chromium/mojo_shell_apk/AndroidHandler.java",
      "android/apk/src/org/chromium/mojo_shell_apk/Bootstrap.java",
      "android/apk/src/org/chromium/mojo_shell_apk/MojoMain.java",
    ]
    jni_package = "mojo"
  }

  android_library("bootstrap_java") {
    java_files =
        [ "android/apk/src/org/chromium/mojo_shell_apk/Bootstrap.java" ]

    deps = [
      "//base:base_java",
    ]

    dex_path = "$target_out_dir/bootstrap_java.dex.jar"
  }

  shared_library("bootstrap") {
    sources = [
      "android/bootstrap.cc",
    ]
    deps = [
      ":jni_headers",
      ":lib",
      ":run_android_application_function",
      "//base",
    ]
  }

  # Shared header between the bootstrap and the main shell .so.
  source_set("run_android_application_function") {
    sources = [
      "android/run_android_application_function.h",
    ]
  }

  android_library("java") {
    java_files = [
      "android/apk/src/org/chromium/mojo_shell_apk/AndroidHandler.java",
      "android/apk/src/org/chromium/mojo_shell_apk/FileHelper.java",
      "android/apk/src/org/chromium/mojo_shell_apk/MojoMain.java",
      "android/apk/src/org/chromium/mojo_shell_apk/MojoShellActivity.java",
      "android/apk/src/org/chromium/mojo_shell_apk/MojoShellApplication.java",
    ]

    deps = [
      "//base:base_java",
      "//net/android:net_java",
    ]
  }

  android_resources("resources") {
    resource_dirs = [ "android/apk/res" ]
    custom_package = "org.chromium.mojo_shell_apk"
  }

  shared_library("libmojo_shell") {
    sources = [
      "android/library_loader.cc",
      "android/mojo_main.cc",
      "android/mojo_main.h",
    ]
    deps = [
      ":jni_headers",
      ":lib",
      "//mojo/application_manager",
      "//net",
      "//services/native_viewport:lib",
      "//ui/gl",
    ]
  }

  mojo_shell_assets_dir = "$root_build_dir/mojo_shell_assets"

  copy_ex("copy_mojo_shell_assets") {
    clear_dir = true
    dest = mojo_shell_assets_dir
    sources = [
      "$root_out_dir/lib.stripped/libbootstrap.so",
      "$root_out_dir/obj/shell/bootstrap_java.dex.jar",
    ]
  }

  android_apk("mojo_shell_apk") {
    apk_name = "MojoShell"

    android_manifest = "android/apk/AndroidManifest.xml"

    native_libs = [ "libmojo_shell.so" ]

    asset_location = mojo_shell_assets_dir

    deps = [
      ":copy_mojo_shell_assets",
      ":java",
      ":libmojo_shell",
      ":resources",
      "//services/native_viewport:native_viewport_java",
    ]
  }
}

mojom("app_child_process_bindings") {
  sources = [
    "app_child_process.mojom",
  ]
}

mojom("external_application_registrar_bindings") {
  sources = [
    "external_application_registrar.mojom",
  ]

  deps = [
    "//mojo/public/interfaces/application",
  ]
}

source_set("external_application_registrar_connection") {
  sources = [
    "external_application_registrar_connection.cc",
    "external_application_registrar_connection.h",
  ]

  deps = [
    ":external_application_registrar_bindings",
    "//base",
    "//mojo/common",
    "//mojo/edk/system",
    "//mojo/public/cpp/bindings",
    "//mojo/public/interfaces/application",
    "//shell/domain_socket",
    "//url",
  ]

  if (is_win) {
    deps -= [ "//shell/domain_socket" ]
  }
}

# GYP version: mojo/mojo.gyp:mojo_shell_tests
test("mojo_shell_tests") {
  sources = [
    "child_process_host_unittest.cc",
    "data_pipe_peek_unittest.cc",
    "dynamic_application_loader_unittest.cc",
    "in_process_dynamic_service_runner_unittest.cc",
    "mojo_url_resolver_unittest.cc",
    "shell_test_base.cc",
    "shell_test_base.h",
    "shell_test_base_unittest.cc",
    "shell_test_main.cc",
  ]

  deps = [
    ":in_process_dynamic_service_runner",
    ":lib",
    "//base",
    "//base:i18n",
    "//base/test:test_support",
    "//testing/gtest",
    "//net:test_support",
    "//url",
    "//mojo/application_manager",
    "//mojo/common",
    "//mojo/edk/system",
    "//mojo/environment:chromium",
    "//mojo/public/cpp/bindings",
    "//services/test_service:bindings",
  ]

  datadeps = [
    "//services/test_service:test_app",
    "//services/test_service:test_request_tracker_app",
  ]

  if (is_android) {
    deps += [
      # TODO(GYP):
      #'../testing/android/native_test.gyp:native_test_native_code',
    ]
  }
}

# GYP version: mojo/mojo.gyp:mojo_shell_test_support
source_set("test_support") {
  sources = [
    "shell_test_helper.cc",
    "shell_test_helper.h",
  ]

  deps = [
    ":init",
    ":lib",
    "//base",
    "//mojo/application_manager",
    "//mojo/edk/system",
  ]
}

test("external_application_unittests") {
  sources = [
    "incoming_connection_listener_unittest.cc",
    "external_application_listener_unittest.cc",
    "external_application_test_main.cc",
  ]

  deps = [
    ":lib",
    ":external_application_registrar_connection",
    ":external_application_registrar_bindings",
    "//base",
    "//base/test:test_support",
    "//testing/gtest",
    "//url",
    "//mojo/application",
    "//mojo/application_manager",
    "//mojo/common",
    "//mojo/edk/system",
    "//mojo/environment:chromium",
    "//shell/domain_socket",
    "//shell/domain_socket:tests",
  ]

  if (is_win) {
    sources -= [
      "incoming_connection_listener_unittest.cc",
      "external_application_listener_unittest.cc",
    ]

    deps -= [
      ":lib",
      ":external_application_registrar_connection",
      ":external_application_registrar_bindings",
      "//shell/domain_socket",
      "//shell/domain_socket:tests",
    ]
  }
}
