# 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.

# This template makes a stub for a Linux system library that dynamically loads
# it at runtime.

# name: Name to use for the value of the --name arg.
# output_h/output_cc: Names for the generated header/cc file with no dir.
# header: header file to process. Example: "<foo/bar.h>"
# functions: List of strings for functions to process.
# config: (optional) Label of the config generated by pkgconfig.
# bundled_header: (optional)
template("generate_library_loader") {
  output_h = "$root_gen_dir/library_loaders/" + invoker.output_h
  output_cc = "$root_gen_dir/library_loaders/" + invoker.output_cc

  action_visibility = [ ":$target_name" ]
  action("${target_name}_loader") {
    visibility = action_visibility

    script = "//tools/generate_library_loader/generate_library_loader.py"

    outputs = [
      output_h,
      output_cc,
    ]

    args = [
      "--name",
      invoker.name,
      "--output-h",
      rebase_path(output_h, root_build_dir),
      "--output-cc",
      rebase_path(output_cc, root_build_dir),
      "--header",
      invoker.header,

      # Note GYP build exposes a per-target variable to control this, which, if
      # manually set to true, will disable dlopen(). Its not clear this is
      # needed, so here we just leave off. If this can be done globally, we can
      # expose one switch for this value, otherwise we need to add a template
      # param for this.
      "--link-directly=0",
    ]
    if (defined(invoker.bundled_header)) {
      args += [
        "--bundled-header",
        invoker.bundled_header,
      ]
    }
    args += invoker.functions
  }

  source_set(target_name) {
    if (defined(invoker.config)) {
      public_configs = [ invoker.config ]
    }
    sources = [
      output_cc,
      output_h,
    ]
    public_deps = [
      ":${target_name}_loader",
    ]
  }
}
