# 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/module_args/mojo.gni")
import("../mojo.gni")

if (mojo_use_prebuilt_mojo_shell) {
  copy("copy_mojo_shell") {
    filename = "mojo_shell"
    if (is_android) {
      filename = "MojoShell.apk"
      sources = [
        "prebuilt/shell/android-arm/$filename",
      ]
      outputs = [
        "$root_out_dir/apks/$filename",
      ]
    } else {
      assert(is_linux)
      sources = [
        "prebuilt/shell/linux-x64/$filename",
      ]
      outputs = [
        "$root_out_dir/$filename",
      ]
    }
  }
}

if (mojo_use_prebuilt_network_service) {
  copy("copy_network_service") {
    filename = "network_service.mojo"
    if (defined(mojo_prebuilt_network_service_location) &&
        mojo_prebuilt_network_service_location != "") {
      sources = [
        "$mojo_prebuilt_network_service_location",
      ]
    } else {
      if (is_android) {
        assert(cpu_arch == "arm",
               "Only arm version prebuilt netowrk_service.mojo is available.")
        sources = [
          "prebuilt/network_service/android-arm/$filename",
        ]
      } else {
        assert(is_linux)
        sources = [
          "prebuilt/network_service/linux-x64/$filename",
        ]
      }
    }

    outputs = [
      "$root_out_dir/$filename",
    ]
  }

  copy("copy_network_service_apptests") {
    filename = "network_service_apptests.mojo"
    if (defined(mojo_prebuilt_network_service_apptests_location) &&
        mojo_prebuilt_network_service_apptests_location != "") {
      sources = [
        "$mojo_prebuilt_network_service_apptests_location",
      ]
    } else {
      if (is_android) {
        assert(
            cpu_arch == "arm",
            "Only arm version prebuilt netowrk_service_apptests.mojo is available.")
        sources = [
          "prebuilt/network_service_apptests/android-arm/$filename",
        ]
      } else {
        assert(is_linux)
        sources = [
          "prebuilt/network_service_apptests/linux-x64/$filename",
        ]
      }
    }
    outputs = [
      "$root_out_dir/$filename",
    ]
  }
}

# This rule can be seen as a sort of adapter. This takes a dart framework
# loaded from Google Storage and then puts it in a rule which the
# "dart_package" template in mojo/public/dart/rules.gni can introspect on,
# accessing the 'label' and 'target_out_dir' variables.
if (mojo_use_dart_apptest_framework) {
  copy("dart_apptest_framework") {
    sources = [
      "prebuilt/frameworks/apptest.dartzip",
    ]
    outputs = [
      "$target_out_dir/dart_apptest_framework.dartzip",
    ]
  }
}
