# Copyright 2021 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Defines a python library
#
# NOTE: Currently does NOT support depending on other python_libraries.
# TODO(https://fxbug.dev/73542): Enable other python_libraries as deps when use
# case show up.
#
# Example
#
# ```
# python_library("lib") {
#   library_name = "lib"
#   sources = [
#     "__init__.py",
#     "lib.py",
#   ]
# }
# ```
#
# Parameters
#
#   library_name (optional)
#     Name of the library, Python scripts can import this library by this name.
#     Type: string
#     Default: ${target_name}
#
#   sources
#
# Metadata
#
#   library_info
#     Exactly one scope including name of this library and its sources.
#
#   library_info_barrier
#     Empty for stopping metadata walks.
template("python_library") {
  assert(defined(invoker.sources), "sources is required")

  group(target_name) {
    forward_variables_from(invoker,
                           [
                             "testonly",
                             "visibility",
                           ])

    library_name = target_name
    if (defined(invoker.library_name)) {
      library_name = invoker.library_name
    }

    metadata = {
      library_info = [
        {
          library_name = library_name
          sources = rebase_path(invoker.sources, root_build_dir)
        },
      ]
      library_info_barrier = []
    }
  }
}
