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

if (is_android) {
  import("//build/config/android/rules.gni")
  import("//build/config/zip.gni")
}

# Generates a Service binary. The parameters of this template are those of an
# executable.
template("service") {
  base_target_name = target_name
  if (defined(invoker.output_name)) {
    base_target_name = invoker.output_name
  }

  service_deps = []
  if (defined(invoker.deps)) {
    service_deps += invoker.deps
  }

  service_data_deps =
      [ "//services/service_manager/public/cpp/standalone_service:main" ]

  if (defined(invoker.data_deps)) {
    service_data_deps += invoker.data_deps
  }

  if (defined(invoker.resources)) {
    # TODO(rockot): Remove this once all existing service targets have stopped
    # setting |resources|. This target serves no purpose other than to ensure
    # that |resources| is actually used, avoiding GN complaints.
    source_set("${target_name}__unused_resources_target") {
      testonly = true
      sources = invoker.resources
      deps = invoker.deps
    }
  }

  if (is_win) {
    executable_extension = "service.exe"
  } else {
    executable_extension = "service"
  }

  executable(target_name) {
    output_name = base_target_name
    output_extension = executable_extension

    if (defined(invoker.cflags)) {
      cflags = invoker.cflags
    }
    if (defined(invoker.cflags_c)) {
      cflags_c = invoker.cflags_c
    }
    if (defined(invoker.cflags_cc)) {
      cflags_cc = invoker.cflags_cc
    }
    if (defined(invoker.cflags_objc)) {
      cflags_objc = invoker.cflags_objc
    }
    if (defined(invoker.cflags_objcc)) {
      cflags_objcc = invoker.cflags_objcc
    }
    if (defined(invoker.defines)) {
      defines = invoker.defines
    }
    if (defined(invoker.include_dirs)) {
      include_dirs = invoker.include_dirs
    }
    if (defined(invoker.ldflags)) {
      ldflags = invoker.ldflags
    }
    if (defined(invoker.lib_dirs)) {
      lib_dirs = invoker.lib_dirs
    }
    if (defined(invoker.libs)) {
      libs = invoker.libs
    }

    data_deps = service_data_deps

    deps = [
      "//services/service_manager/public/cpp/standalone_service:main",
    ]

    deps += service_deps
    if (defined(invoker.public_deps)) {
      public_deps = invoker.public_deps
    }
    if (defined(invoker.all_dependent_configs)) {
      all_dependent_configs = invoker.all_dependent_configs
    }
    if (defined(invoker.public_configs)) {
      public_configs = invoker.public_configs
    }
    if (defined(invoker.check_includes)) {
      check_includes = invoker.check_includes
    }
    if (defined(invoker.configs)) {
      configs += invoker.configs
    }
    if (defined(invoker.data)) {
      data = invoker.data
    }
    if (defined(invoker.inputs)) {
      inputs = invoker.inputs
    }
    if (defined(invoker.public)) {
      public = invoker.public
    }
    if (defined(invoker.sources)) {
      sources = invoker.sources
    }
    if (defined(invoker.testonly)) {
      testonly = invoker.testonly
    }
  }
}
