blob: 67167d8a3ff1a3bde23ddf6230c25c3639886784 [file] [log] [blame] [edit]
# Copyright 2023 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
load("//bazel/build_defs:always_fail.bzl", "always_fail")
load("//bazel/portage/build_defs/extract_package_from_manifest:extract.bzl", "extract")
load("//bazel/portage/build_defs/extract_package_from_manifest:files.bzl", "HEADER", "SHARED_LIBRARY")
load("//bazel/portage/build_defs/extract_package_from_manifest:filter.bzl", "filter_file_type", _filter_executable = "filter_executable", _filter_package = "filter_package", _filter_paths = "filter_paths")
load("//bazel/portage/build_defs/extract_package_from_manifest:update_manifest.bzl", "update_manifest")
visibility("public")
filter_executable = _filter_executable
filter_package = _filter_package
filter_paths = _filter_paths
def filter_header_files(**kwargs):
filter_file_type(file_type = HEADER, **kwargs)
def filter_shared_libraries(**kwargs):
filter_file_type(file_type = SHARED_LIBRARY, **kwargs)
def extract_package(name, pkg, manifest_file, ld_library_path_regexes = [], header_file_dir_regexes = [], manifest_content = None, **kwargs):
"""Extracts files from a tbz2 file to one usable by bazel.
Args:
name: (str) The name of the target.
pkg: (Label) Binary package to extract the interface from.
manifest_file: (File) A .bzl file generated by extract_interface.
Create an empty file for the initial invocation.
ld_library_path_regexes: (List[str]) Regexes for directories containing
shared libraries.
header_file_dir_regexes: (List[str]) Regexes for directories containing header files.
manifest_content: (Autogenerated Dict) The content of the manifest.
**kwargs: kwargs to pass through to the extractor.
"""
manifest_regenerate_command = "bazel run %s" % native.package_relative_label(":%s_update" % name)
update_manifest(
name = "%s_update" % name,
manifest_file = manifest_file,
ld_library_path_regexes = ld_library_path_regexes,
header_file_dir_regexes = header_file_dir_regexes,
manifest_regenerate_command = manifest_regenerate_command,
pkg = pkg,
)
if manifest_content == None:
always_fail(
name = name,
message = "Run %s" % manifest_regenerate_command,
)
else:
extract(
name = name,
manifest_content = json.encode(manifest_content),
manifest_regenerate_command = manifest_regenerate_command,
pkg = pkg,
**kwargs
)