# 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",
    ]

    if (is_android) {
      sources += [
        "android/library_loader.cc",
        "android/mojo_main.cc",
        "android/mojo_main.h",
      ]

      # On android, the executable is also the native library used by the apk.
      # It means dynamic symbols must be preserved and exported.
      ldflags = [ "-Wl,--export-dynamic" ]

      deps += [
        ":jni_headers",
        "//ui/gl",
      ]
    }
  }
}  # !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",
  ]

  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.cc",
      "android/android_handler.h",
      "android/android_handler_loader.cc",
      "android/android_handler_loader.h",
      "android/ui_application_loader_android.cc",
      "android/ui_application_loader_android.h",
    ]

    deps += [
      ":jni_headers",
      ":run_android_application_function",
      "//mojo/application:content_handler",
      "//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/shell"
  }

  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",
    ]
  }

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

  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/network_service.mojo",
      "$root_out_dir/obj/shell/bootstrap_java.dex.jar",
    ]
  }

  copy("copy_mojo_shell") {
    sources = [
      "$root_out_dir/exe.stripped/mojo_shell",
    ]
    outputs = [
      "$root_out_dir/lib.stripped/libmojo_shell.so",
    ]
  }

  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",
      ":copy_mojo_shell_assets",
      ":java",
      ":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",
    ]
  }
}
