# 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/pkg_config.gni")

group("all") {
  deps = [
    ":l2tpipsec_vpn",
    ":libl2tpipsec_vpn",
  ]
  if (use.test) {
    deps += [ ":vpn_manager_test" ]
  }
  if (use.fuzzer) {
    deps += [
      ":vpn_manager_ipsec_manager_fuzzer",
      ":vpn_manager_service_manager_fuzzer",
    ]
  }
}

pkg_config("target_defaults") {
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "openssl",
  ]
  defines = [
    "IPSEC_STARTER=\"/usr/libexec/ipsec/starter\"",
    "IPSEC_UPDOWN=\"/usr/libexec/l2tpipsec_vpn/pluto_updown\"",
    "L2TPD=\"/usr/sbin/xl2tpd\"",
    "PKCS11_LIB=\"${libdir}/libchaps.so\"",
  ]
}

static_library("libl2tpipsec_vpn") {
  sources = [
    "daemon.cc",
    "ipsec_manager.cc",
    "l2tp_manager.cc",
    "service_manager.cc",
  ]
  configs += [ ":target_defaults" ]
}

executable("l2tpipsec_vpn") {
  sources = [ "l2tpipsec_vpn.cc" ]
  configs += [ ":target_defaults" ]
  deps = [ ":libl2tpipsec_vpn" ]
}

if (use.test) {
  executable("vpn_manager_test") {
    sources = [
      "daemon_test.cc",
      "ipsec_manager_test.cc",
      "l2tp_manager_test.cc",
      "service_manager_test.cc",
      "testrunner.cc",
    ]
    configs += [
      # //common-mk:test should be at the top. crbug.com/887845
      # TODO(crbug.com/887845): Remove this note after library order issue is resolved.
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [ ":libl2tpipsec_vpn" ]
  }
}

if (use.fuzzer) {
  executable("vpn_manager_ipsec_manager_fuzzer") {
    sources = [
      "ipsec_manager.cc",
      "ipsec_manager_fuzzer.cc",
    ]
    configs += [
      "//common-mk/common_fuzzer",
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [ ":libl2tpipsec_vpn" ]
  }
  executable("vpn_manager_service_manager_fuzzer") {
    sources = [
      "service_manager.cc",
      "service_manager_fuzzer.cc",
    ]
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
  }
}
