# 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"
    if (defined(invoker.visibility)) {
      visibility = invoker.visibility
    }

    outputs = [ output_h, output_cc ]

    args = [
      "--name", invoker.name,
      "--output-h", rebase_path(output_h),
      "--output-cc", rebase_path(output_cc),
      "--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_h, output_cc ]
    deps = [ ":${target_name}_loader" ]
  }
}
