# 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("//third_party/cython/rules.gni")

# GYP version: mojo/mojo.gyp:mojo_python
group("python") {
  deps = [
    ":embedder",
    ":validation_util",
    "//mojo/public/python",
  ]
}

# GYP version: mojo/mojo.gyp:mojo_python_embedder
python_binary_module("embedder") {
  python_base_module = "mojo"
  sources = [
    "system/mojo/embedder.pyx",
  ]
  deps = [
    "//mojo/edk/system",
  ]
  datadeps = [
    "//mojo/public/python:system",
  ]
}

copy("tests_module") {
  sources = [
    "system/mojo/tests/__init__.py",
  ]
  outputs = [
    "$root_out_dir/python/mojo/tests/{{source_file_part}}",
  ]
}

python_binary_module("validation_util") {
  python_base_module = "mojo/tests"
  sources = [
    "system/mojo/tests/validation_util.pyx",
  ]
  deps = [
    "//mojo/public/cpp/bindings/tests:mojo_public_bindings_test_utils",
  ]
  datadeps = [
    ":tests_module",
  ]
}
