# Copyright 2018 The Chromium OS 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("//common-mk/deps.gni")
import("//common-mk/generate-dbus-adaptors.gni")
import("//common-mk/generate-dbus-proxies.gni")
import("//common-mk/pkg_config.gni")

group("all") {
  deps = [
    ":libwebserv-${libbase_ver}",
    ":libwebserv_common",
    ":webservd",
    ":webservd_common",
  ]
  if (use.test) {
    deps += [
      ":libwebserv_testrunner",
      ":webservd_testrunner",
    ]
  }
}

default_pkg_deps = [
  "libbrillo",
  "libchrome-${libbase_ver}",
  "libpermission_broker-client",
]

pkg_config("target_defaults") {
  include_dirs = [ "." ]

  pkg_deps = default_pkg_deps
}

generate_dbus_adaptors("generate_webservd_adaptors") {
  # Not using dbus_service_config here deliberately in order not to
  # get tied to some constant service name, since it will be
  # provided by the consumer of libwebserv library.
  dbus_service_config = ""
  dbus_adaptors_out_dir = "include/dbus_bindings"
  sources = [
    "libwebserv/dbus_bindings/org.chromium.WebServer.RequestHandler.dbus-xml",
  ]
}

generate_dbus_proxies("generate_webservd_proxies") {
  dbus_service_config = "webservd/dbus_bindings/dbus-service-config.json"
  mock_output_file = "include/webservd/dbus-mocks.h"
  proxy_output_file = "include/webservd/dbus-proxies.h"
  sources = [
    "webservd/dbus_bindings/org.chromium.WebServer.ProtocolHandler.dbus-xml",
    "webservd/dbus_bindings/org.chromium.WebServer.Server.dbus-xml",
  ]
}

static_library("libwebserv_common") {
  configs += [ ":target_defaults" ]
  sources = [
    "libwebserv/dbus_protocol_handler.cc",
    "libwebserv/dbus_response.cc",
    "libwebserv/dbus_server.cc",
    "libwebserv/protocol_handler.cc",
    "libwebserv/request.cc",
    "libwebserv/request_handler_callback.cc",
    "libwebserv/request_utils.cc",
    "libwebserv/response.cc",
    "libwebserv/server.cc",
  ]
  deps = [
    ":generate_webservd_adaptors",
    ":generate_webservd_proxies",
  ]

  # This static library is used in libwebserv shared library, which means
  # we must generate position-independent code for the files comprising
  # this library. Since this option is disabled by default for targets
  # other than 'shared_library', turn it on explicitly for this lib.
  # Override the default -fPIE flag (which is set for static_library
  # in //common-mk/BUILDCONFIG.gn) with -fPIC.
  configs -= [ "//common-mk:pie" ]
  configs += [ "//common-mk:pic" ]
}

pkg_config("webservd_common_config") {
  pkg_deps = [
    "libmicrohttpd",
    "openssl",
  ]
}

generate_dbus_adaptors("generate_libwebserv_adaptors") {
  dbus_service_config = "webservd/dbus_bindings/dbus-service-config.json"
  dbus_adaptors_out_dir = "include/dbus_bindings"
  sources = [
    "webservd/dbus_bindings/org.chromium.WebServer.ProtocolHandler.dbus-xml",
    "webservd/dbus_bindings/org.chromium.WebServer.Server.dbus-xml",
  ]
}

generate_dbus_proxies("generate_libwebserv_proxies") {
  # Not using dbus_service_config here deliberately in order not to
  # get tied to some constant service name, since it will be
  # provided by the consumer of libwebserv library.
  dbus_service_config = ""
  mock_output_file = "include/libwebserv/dbus-mocks.h"
  proxy_output_file = "include/libwebserv/dbus-proxies.h"
  sources = [
    "libwebserv/dbus_bindings/org.chromium.WebServer.RequestHandler.dbus-xml",
  ]
}

static_library("webservd_common") {
  configs += [ ":target_defaults" ]
  all_dependent_configs = [ ":webservd_common_config" ]

  deps = [
    ":generate_libwebserv_adaptors",
    ":generate_libwebserv_proxies",
  ]

  sources = [
    "webservd/config.cc",
    "webservd/dbus_protocol_handler.cc",
    "webservd/dbus_request_handler.cc",
    "webservd/error_codes.cc",
    "webservd/fake_encryptor.cc",
    "webservd/log_manager.cc",
    "webservd/permission_broker_firewall.cc",
    "webservd/protocol_handler.cc",
    "webservd/request.cc",
    "webservd/server.cc",
    "webservd/temp_file_manager.cc",
    "webservd/utils.cc",
  ]
}

write_deps("write_libwebserv_deps") {
  pkg_deps = default_pkg_deps
  target = "libwebserv-${libbase_ver}"
}

shared_library("libwebserv-${libbase_ver}") {
  configs += [ ":target_defaults" ]
  deps = [
    ":libwebserv_common",
    ":write_libwebserv_deps",
  ]
}

pkg_config("webservd_config") {
  pkg_deps = [ "libminijail" ]
}

executable("webservd") {
  configs += [
    ":target_defaults",
    ":webservd_config",
  ]
  sources = [ "webservd/main.cc" ]
  deps = [ ":webservd_common" ]
}

if (use.test) {
  executable("libwebserv_testrunner") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":libwebserv_common",
      "//common-mk/testrunner",
    ]
  }

  executable("webservd_testrunner") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    sources = [
      "webservd/config_test.cc",
      "webservd/log_manager_test.cc",
    ]
    deps = [
      ":webservd_common",
      "//common-mk/testrunner",
    ]
  }
}
