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