# 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("//mojo/public/mojo_application.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//third_party/cython/rules.gni")

mojo_native_application("content_handler") {
  output_name = "py_content_handler"
  deps = [
    ":content_handler_src",
  ]
}

python_binary_source_set("content_handler_src") {
  sources = [
    "content_handler_main.cc",
  ]
  deps = [
    ":mojo_system_impl",
    "//base",
    "//base:i18n",
    "//mojo/application",
    "//mojo/application:application",
    "//mojo/application:content_handler",
    "//mojo/environment:chromium",
    "//mojo/common",
    "//mojo/public/c/system:for_shared_library",
    "//mojo/public/cpp/utility",
    "//mojo/public/python:system_embedded",
    "//mojo/public/python:python_common",
    "//mojo/services/content_handler/public/interfaces",
    "//third_party/zlib:zip",
    "//url:url",
  ]
}

copy("common_system_pxd") {
  visibility = [ ":mojo_system_impl" ]
  sources = [
    "//mojo/public/python/c_async_waiter.pxd",
    "//mojo/public/python/c_export.pxd",
  ]
  outputs = [
    "$target_gen_dir/{{source_file_part}}",
  ]
}

python_binary_source_set("mojo_system_impl") {
  cython_sources = [
    "c_base.pxd",
    "$target_gen_dir/c_async_waiter.pxd",
    "$target_gen_dir/c_export.pxd",
    "mojo_system_impl.pyx",
  ]
  sources = [
    "python_system_impl_helper.cc",
    "python_system_impl_helper.h",
  ]
  deps = [
    "//base",
    "//mojo/environment:chromium",
    "//mojo/common",
    "//mojo/public/c/system:for_shared_library",
    "//mojo/public/cpp/system",
    "//mojo/public/cpp/utility",
    "//mojo/public/cpp/bindings:callback",
    "//mojo/public/python:python_common",
  ]
}
