From 233856a3edeea748056df3b4ec5ab4ed843692a2 Mon Sep 17 00:00:00 2001 From: Joseph Gette Date: Tue, 18 Nov 2025 10:29:03 +0100 Subject: [PATCH 1/3] Introduce out_pc_dir attribute --- foreign_cc/private/framework.bzl | 16 +++++++++++++++- foreign_cc/providers.bzl | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/foreign_cc/private/framework.bzl b/foreign_cc/private/framework.bzl index 6bf25d96d..a081d3112 100644 --- a/foreign_cc/private/framework.bzl +++ b/foreign_cc/private/framework.bzl @@ -202,6 +202,10 @@ CC_EXTERNAL_RULE_ATTRIBUTES = { ), mandatory = False, ), + "out_pc_dir": attr.string( + doc = "Optional name of the output directory with the pkgconfig files", + mandatory = False, + ), "postfix_script": attr.string( doc = "Optional part of the shell script to be added after the make commands", mandatory = False, @@ -592,7 +596,8 @@ def cc_external_rule_impl(ctx, attrs): outputs.out_binary_files + outputs.libraries.static_libraries + outputs.libraries.shared_libraries + - [outputs.out_include_dir] if outputs.out_include_dir else [] + [outputs.out_include_dir] if outputs.out_include_dir else [] + + [outputs.out_pc_dir] if outputs.out_pc_dir else [] ) output_groups = _declare_output_groups(installdir_copy.file, output_groups) wrapped_files = [ @@ -842,6 +847,7 @@ _Outputs = provider( out_include_dir = "Directory with header files (relative to install directory)", out_binary_files = "Binary files, which will be created by the action", libraries = "Library files, which will be created by the action", + out_pc_dir = "Directory with pkgconfig files (relative to install directory)", declared_outputs = "All output files and directories of the action", ), ) @@ -854,6 +860,7 @@ def _define_outputs(ctx, attrs, lib_name): attr_out_data_files = attrs.out_data_files attr_shared_libs = attrs.out_shared_libs attr_static_libs = attrs.out_static_libs + attr_out_pc_dir = attrs.out_pc_dir static_libraries = [] if not attr_headers_only: @@ -875,6 +882,11 @@ def _define_outputs(ctx, attrs, lib_name): else: out_include_dir = "" + if attrs.out_pc_dir and (attr_shared_libs or attr_static_libs): + out_pc_dir = ctx.actions.declare_directory(lib_name + "/" + attr_out_pc_dir.lstrip("/")) + else: + out_pc_dir = "" + out_data_dirs = [] for dir in attr_out_data_dirs: out_data_dirs.append(ctx.actions.declare_directory(lib_name + "/" + dir.lstrip("/"))) @@ -893,11 +905,13 @@ def _define_outputs(ctx, attrs, lib_name): declared_outputs += out_data_dirs + out_binary_files + out_data_files declared_outputs += libraries.static_libraries declared_outputs += libraries.shared_libraries + libraries.interface_libraries + declared_outputs += [out_pc_dir] if out_pc_dir else [] return _Outputs( out_include_dir = out_include_dir, out_binary_files = out_binary_files, libraries = libraries, + out_pc_dir = out_pc_dir, declared_outputs = declared_outputs, ) diff --git a/foreign_cc/providers.bzl b/foreign_cc/providers.bzl index 2de172f14..3f49b7df9 100644 --- a/foreign_cc/providers.bzl +++ b/foreign_cc/providers.bzl @@ -20,6 +20,7 @@ Instances of ForeignCcArtifactInfo are encapsulated in a depset [ForeignCcDepsIn "dll_dir_name": "DLL directory, relative to install directory", "gen_dir": "Install directory", "include_dir_name": "Include directory, relative to install directory", + "pc_dir_name": "Pkgconfig directory, relative to install directory", "lib_dir_name": "Lib directory, relative to install directory", }, ) From d9ed5f77b76960c76b192391dba99c2961d164c8 Mon Sep 17 00:00:00 2001 From: Joseph Gette Date: Tue, 25 Nov 2025 12:16:41 +0100 Subject: [PATCH 2/3] Add pc_dir_name to the provider --- foreign_cc/private/framework.bzl | 1 + 1 file changed, 1 insertion(+) diff --git a/foreign_cc/private/framework.bzl b/foreign_cc/private/framework.bzl index a081d3112..505f0a075 100644 --- a/foreign_cc/private/framework.bzl +++ b/foreign_cc/private/framework.bzl @@ -591,6 +591,7 @@ def cc_external_rule_impl(ctx, attrs): dll_dir_name = attrs.out_dll_dir, lib_dir_name = attrs.out_lib_dir, include_dir_name = attrs.out_include_dir, + pc_dir_name = attrs.out_pc_dir, ) output_groups = ( outputs.out_binary_files + From d396464392f4ab2e52141f8e13c7c527825c790e Mon Sep 17 00:00:00 2001 From: Joseph Gette Date: Tue, 25 Nov 2025 12:29:17 +0100 Subject: [PATCH 3/3] Add missing brackets --- foreign_cc/private/framework.bzl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/foreign_cc/private/framework.bzl b/foreign_cc/private/framework.bzl index 505f0a075..eb7632d0b 100644 --- a/foreign_cc/private/framework.bzl +++ b/foreign_cc/private/framework.bzl @@ -597,8 +597,8 @@ def cc_external_rule_impl(ctx, attrs): outputs.out_binary_files + outputs.libraries.static_libraries + outputs.libraries.shared_libraries + - [outputs.out_include_dir] if outputs.out_include_dir else [] + - [outputs.out_pc_dir] if outputs.out_pc_dir else [] + ([outputs.out_include_dir] if outputs.out_include_dir else []) + + ([outputs.out_pc_dir] if outputs.out_pc_dir else []) ) output_groups = _declare_output_groups(installdir_copy.file, output_groups) wrapped_files = [