Skip to content

Commit ef390f2

Browse files
authored
Merge pull request #566 from cerisier/canonical-name-module
fix: use label as canonical name for zig_module and use it for module deps
2 parents c706875 + 7d1aeec commit ef390f2

File tree

14 files changed

+145
-36
lines changed

14 files changed

+145
-36
lines changed

.bazelrc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ build --workspace_status_command=$(pwd)/workspace_status.sh
1818
# To update these lines, execute
1919
# `bazel run @rules_bazel_integration_test//tools:update_deleted_packages`
2020
# docs: https://bazel.build/reference/command-line-reference#flag--deleted_packages
21-
build --deleted_packages=e2e/workspace,e2e/workspace/bazel_builtin,e2e/workspace/c-sources,e2e/workspace/cc-dependencies,e2e/workspace/cc-dependencies/shared-library,e2e/workspace/cc-dependencies/static-library,e2e/workspace/cc-dependencies/static-library-cdeps,e2e/workspace/configure-mode,e2e/workspace/configure-target,e2e/workspace/configure-threaded,e2e/workspace/configure-use_cc_common_link,e2e/workspace/configure-use_cc_common_link/shared-library,e2e/workspace/configure-use_cc_common_link/static-library,e2e/workspace/configure-version,e2e/workspace/data-dependencies,e2e/workspace/embed-file,e2e/workspace/env-attr,e2e/workspace/import-name-attr,e2e/workspace/include-dependencies,e2e/workspace/include-dependencies/zig-include,e2e/workspace/include-dependencies/zig-include-define,e2e/workspace/include-dependencies/zig-include-isystem,e2e/workspace/include-dependencies/zig-std-include,e2e/workspace/link-dependencies,e2e/workspace/link-dependencies/shared-library,e2e/workspace/link-dependencies/static-library,e2e/workspace/linker-script,e2e/workspace/linkopts-attr,e2e/workspace/location-expansion,e2e/workspace/multiple-sources-and-packages-test,e2e/workspace/multiple-sources-binary,e2e/workspace/root-module-from-single-dependency,e2e/workspace/runfiles-library,e2e/workspace/runfiles-library/dependency,e2e/workspace/runfiles-library/dependency/transitive-dependency,e2e/workspace/simple-binary,e2e/workspace/simple-library,e2e/workspace/simple-shared-library,e2e/workspace/simple-test,e2e/workspace/test-runner-attr,e2e/workspace/transitive-zig-modules-binary,e2e/workspace/transitive-zig-modules-binary/hello-world,e2e/workspace/transitive-zig-modules-binary/hello-world/data,e2e/workspace/transitive-zig-modules-binary/hello-world/data/hello,e2e/workspace/transitive-zig-modules-binary/hello-world/data/world,e2e/workspace/transitive-zig-modules-binary/hello-world/io,e2e/workspace/translate-c/transitive-cc-library-zig-binary,e2e/workspace/zig-docs,e2e/workspace/zig-header,e2e/workspace/zig-module-binary,e2e/workspace/zig-module-binary/data,e2e/workspace/zig-module-binary/io,zig/tests/integration_tests/minimal,zig/tests/integration_tests/mirrors,zig/tests/integration_tests/workspace,zig/tests/integration_tests/workspace/custom_interpreter,zig/tests/integration_tests/workspace/env-attr,zig/tests/integration_tests/workspace/runfiles
22-
query --deleted_packages=e2e/workspace,e2e/workspace/bazel_builtin,e2e/workspace/c-sources,e2e/workspace/cc-dependencies,e2e/workspace/cc-dependencies/shared-library,e2e/workspace/cc-dependencies/static-library,e2e/workspace/cc-dependencies/static-library-cdeps,e2e/workspace/configure-mode,e2e/workspace/configure-target,e2e/workspace/configure-threaded,e2e/workspace/configure-use_cc_common_link,e2e/workspace/configure-use_cc_common_link/shared-library,e2e/workspace/configure-use_cc_common_link/static-library,e2e/workspace/configure-version,e2e/workspace/data-dependencies,e2e/workspace/embed-file,e2e/workspace/env-attr,e2e/workspace/import-name-attr,e2e/workspace/include-dependencies,e2e/workspace/include-dependencies/zig-include,e2e/workspace/include-dependencies/zig-include-define,e2e/workspace/include-dependencies/zig-include-isystem,e2e/workspace/include-dependencies/zig-std-include,e2e/workspace/link-dependencies,e2e/workspace/link-dependencies/shared-library,e2e/workspace/link-dependencies/static-library,e2e/workspace/linker-script,e2e/workspace/linkopts-attr,e2e/workspace/location-expansion,e2e/workspace/multiple-sources-and-packages-test,e2e/workspace/multiple-sources-binary,e2e/workspace/root-module-from-single-dependency,e2e/workspace/runfiles-library,e2e/workspace/runfiles-library/dependency,e2e/workspace/runfiles-library/dependency/transitive-dependency,e2e/workspace/simple-binary,e2e/workspace/simple-library,e2e/workspace/simple-shared-library,e2e/workspace/simple-test,e2e/workspace/test-runner-attr,e2e/workspace/transitive-zig-modules-binary,e2e/workspace/transitive-zig-modules-binary/hello-world,e2e/workspace/transitive-zig-modules-binary/hello-world/data,e2e/workspace/transitive-zig-modules-binary/hello-world/data/hello,e2e/workspace/transitive-zig-modules-binary/hello-world/data/world,e2e/workspace/transitive-zig-modules-binary/hello-world/io,e2e/workspace/translate-c/transitive-cc-library-zig-binary,e2e/workspace/zig-docs,e2e/workspace/zig-header,e2e/workspace/zig-module-binary,e2e/workspace/zig-module-binary/data,e2e/workspace/zig-module-binary/io,zig/tests/integration_tests/minimal,zig/tests/integration_tests/mirrors,zig/tests/integration_tests/workspace,zig/tests/integration_tests/workspace/custom_interpreter,zig/tests/integration_tests/workspace/env-attr,zig/tests/integration_tests/workspace/runfiles
21+
build --deleted_packages=e2e/workspace,e2e/workspace/bazel_builtin,e2e/workspace/c-sources,e2e/workspace/canonical-name-module,e2e/workspace/canonical-name-module/other,e2e/workspace/cc-dependencies,e2e/workspace/cc-dependencies/shared-library,e2e/workspace/cc-dependencies/static-library,e2e/workspace/cc-dependencies/static-library-cdeps,e2e/workspace/configure-mode,e2e/workspace/configure-target,e2e/workspace/configure-threaded,e2e/workspace/configure-use_cc_common_link,e2e/workspace/configure-use_cc_common_link/shared-library,e2e/workspace/configure-use_cc_common_link/static-library,e2e/workspace/configure-version,e2e/workspace/data-dependencies,e2e/workspace/embed-file,e2e/workspace/env-attr,e2e/workspace/import-name-attr,e2e/workspace/include-dependencies,e2e/workspace/include-dependencies/zig-include,e2e/workspace/include-dependencies/zig-include-define,e2e/workspace/include-dependencies/zig-include-isystem,e2e/workspace/include-dependencies/zig-std-include,e2e/workspace/link-dependencies,e2e/workspace/link-dependencies/shared-library,e2e/workspace/link-dependencies/static-library,e2e/workspace/linker-script,e2e/workspace/linkopts-attr,e2e/workspace/location-expansion,e2e/workspace/multiple-sources-and-packages-test,e2e/workspace/multiple-sources-binary,e2e/workspace/root-module-from-single-dependency,e2e/workspace/runfiles-library,e2e/workspace/runfiles-library/dependency,e2e/workspace/runfiles-library/dependency/transitive-dependency,e2e/workspace/simple-binary,e2e/workspace/simple-library,e2e/workspace/simple-shared-library,e2e/workspace/simple-test,e2e/workspace/test-runner-attr,e2e/workspace/transitive-zig-modules-binary,e2e/workspace/transitive-zig-modules-binary/hello-world,e2e/workspace/transitive-zig-modules-binary/hello-world/data,e2e/workspace/transitive-zig-modules-binary/hello-world/data/hello,e2e/workspace/transitive-zig-modules-binary/hello-world/data/world,e2e/workspace/transitive-zig-modules-binary/hello-world/io,e2e/workspace/translate-c/transitive-cc-library-zig-binary,e2e/workspace/zig-docs,e2e/workspace/zig-header,e2e/workspace/zig-module-binary,e2e/workspace/zig-module-binary/data,e2e/workspace/zig-module-binary/io,zig/tests/integration_tests/minimal,zig/tests/integration_tests/mirrors,zig/tests/integration_tests/workspace,zig/tests/integration_tests/workspace/custom_interpreter,zig/tests/integration_tests/workspace/env-attr,zig/tests/integration_tests/workspace/runfiles
22+
query --deleted_packages=e2e/workspace,e2e/workspace/bazel_builtin,e2e/workspace/c-sources,e2e/workspace/canonical-name-module,e2e/workspace/canonical-name-module/other,e2e/workspace/cc-dependencies,e2e/workspace/cc-dependencies/shared-library,e2e/workspace/cc-dependencies/static-library,e2e/workspace/cc-dependencies/static-library-cdeps,e2e/workspace/configure-mode,e2e/workspace/configure-target,e2e/workspace/configure-threaded,e2e/workspace/configure-use_cc_common_link,e2e/workspace/configure-use_cc_common_link/shared-library,e2e/workspace/configure-use_cc_common_link/static-library,e2e/workspace/configure-version,e2e/workspace/data-dependencies,e2e/workspace/embed-file,e2e/workspace/env-attr,e2e/workspace/import-name-attr,e2e/workspace/include-dependencies,e2e/workspace/include-dependencies/zig-include,e2e/workspace/include-dependencies/zig-include-define,e2e/workspace/include-dependencies/zig-include-isystem,e2e/workspace/include-dependencies/zig-std-include,e2e/workspace/link-dependencies,e2e/workspace/link-dependencies/shared-library,e2e/workspace/link-dependencies/static-library,e2e/workspace/linker-script,e2e/workspace/linkopts-attr,e2e/workspace/location-expansion,e2e/workspace/multiple-sources-and-packages-test,e2e/workspace/multiple-sources-binary,e2e/workspace/root-module-from-single-dependency,e2e/workspace/runfiles-library,e2e/workspace/runfiles-library/dependency,e2e/workspace/runfiles-library/dependency/transitive-dependency,e2e/workspace/simple-binary,e2e/workspace/simple-library,e2e/workspace/simple-shared-library,e2e/workspace/simple-test,e2e/workspace/test-runner-attr,e2e/workspace/transitive-zig-modules-binary,e2e/workspace/transitive-zig-modules-binary/hello-world,e2e/workspace/transitive-zig-modules-binary/hello-world/data,e2e/workspace/transitive-zig-modules-binary/hello-world/data/hello,e2e/workspace/transitive-zig-modules-binary/hello-world/data/world,e2e/workspace/transitive-zig-modules-binary/hello-world/io,e2e/workspace/translate-c/transitive-cc-library-zig-binary,e2e/workspace/zig-docs,e2e/workspace/zig-header,e2e/workspace/zig-module-binary,e2e/workspace/zig-module-binary/data,e2e/workspace/zig-module-binary/io,zig/tests/integration_tests/minimal,zig/tests/integration_tests/mirrors,zig/tests/integration_tests/workspace,zig/tests/integration_tests/workspace/custom_interpreter,zig/tests/integration_tests/workspace/env-attr,zig/tests/integration_tests/workspace/runfiles
2323

2424
# Load any settings specific to the current user.
2525
# Place settings that should affect the integration tests into `.bazelrc.ic.user`.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
load("@bazel_skylib//rules:build_test.bzl", "build_test")
2+
load("@rules_zig//zig:defs.bzl", "zig_binary", "zig_library")
3+
4+
zig_library(
5+
name = "data",
6+
main = "data.zig",
7+
)
8+
9+
zig_binary(
10+
name = "binary",
11+
main = "main.zig",
12+
deps = [
13+
":data",
14+
"//canonical-name-module/other:data",
15+
],
16+
)
17+
18+
build_test(
19+
name = "output_test",
20+
size = "small",
21+
targets = [":binary"],
22+
)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub const hello_world = "Hello World!\n";
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
const builtin = @import("builtin");
2+
const std = @import("std");
3+
const data = @import("data");
4+
const other_data = @import("other/data");
5+
6+
pub fn main() void {
7+
if (builtin.zig_version.major == 0 and builtin.zig_version.minor >= 15) {
8+
std.fs.File.stdout().writeAll(
9+
data.hello_world,
10+
) catch unreachable;
11+
} else {
12+
std.io.getStdOut().writeAll(
13+
data.hello_world,
14+
) catch unreachable;
15+
}
16+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
load("@rules_zig//zig:defs.bzl", "zig_library")
2+
3+
zig_library(
4+
name = "data",
5+
import_name = "other/data",
6+
main = "data.zig",
7+
visibility = ["//visibility:public"],
8+
)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub const other_hello_world = "Hello World!\n";

zig/private/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ bzl_library(
1616
deps = [
1717
"//zig/private/common:bazel_builtin",
1818
"//zig/private/common:data",
19+
"//zig/private/common:escape_label",
1920
"//zig/private/common:filetypes",
2021
"//zig/private/providers:zig_module_info",
2122
],

zig/private/common/BUILD.bazel

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ bzl_library(
2525
":cdeps",
2626
":csrcs",
2727
":data",
28+
":escape_label",
2829
":filetypes",
2930
":linker_script",
3031
":location_expansion",
@@ -50,6 +51,7 @@ bzl_library(
5051
":bazel_builtin",
5152
":cdeps",
5253
":csrcs",
54+
":escape_label",
5355
":location_expansion",
5456
":zig_cache",
5557
":zig_lib_dir",
@@ -86,6 +88,7 @@ bzl_library(
8688
srcs = ["translate_c.bzl"],
8789
visibility = ["//zig:__subpackages__"],
8890
deps = [
91+
":escape_label",
8992
"//zig/private:cc_helper",
9093
"//zig/private/providers:zig_module_info",
9194
"@rules_cc//cc:action_names.bzl",
@@ -104,6 +107,12 @@ bzl_library(
104107
visibility = ["//zig:__subpackages__"],
105108
)
106109

110+
bzl_library(
111+
name = "escape_label",
112+
srcs = ["escape_label.bzl"],
113+
visibility = ["//zig:__subpackages__"],
114+
)
115+
107116
bzl_library(
108117
name = "filetypes",
109118
srcs = ["filetypes.bzl"],
@@ -138,6 +147,7 @@ filegroup(
138147
":cdeps.bzl",
139148
":csrcs.bzl",
140149
":data.bzl",
150+
":escape_label.bzl",
141151
":filetypes.bzl",
142152
":linker_script.bzl",
143153
":location_expansion.bzl",
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
"""Utility function for escaping Bazel labels into valid path components."""
2+
3+
# Taken from https://github.com/bazelbuild/rules_cc/blob/109e43da9b210aa1806ac27bb640d2233c9703ce/cc/private/cc_common.bzl#L681-L701
4+
5+
_PATH_ESCAPE_REPLACEMENTS = {
6+
"_": "_U",
7+
"/": "_S",
8+
"\\": "_B",
9+
":": "_C",
10+
"@": "_A",
11+
}
12+
13+
# buildifier: disable=function-docstring
14+
def escape_label(*, label):
15+
path = label.package + ":" + label.name
16+
if label.repo_name:
17+
path = label.repo_name + "@" + path
18+
return escape_label_str(path)
19+
20+
# buildifier: disable=function-docstring
21+
def escape_label_str(label_str):
22+
result = []
23+
for idx in range(len(label_str)):
24+
c = label_str[idx]
25+
result.append(_PATH_ESCAPE_REPLACEMENTS.get(
26+
c,
27+
c, # no escaping by default
28+
))
29+
return "".join(result)

zig/private/common/translate_c.bzl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
load("@rules_cc//cc:find_cc_toolchain.bzl", "find_cc_toolchain")
44
load("@rules_cc//cc/common:cc_common.bzl", "cc_common")
55
load("@rules_cc//cc/common:cc_info.bzl", "CcInfo")
6+
load("//zig/private/common:escape_label.bzl", "escape_label", "escape_label_str")
67
load("//zig/private/providers:zig_module_info.bzl", "zig_module_info")
78

89
def zig_translate_c(*, ctx, name, zigtoolchaininfo, global_args, cc_infos, output_prefix = ""):
@@ -84,7 +85,10 @@ def zig_translate_c(*, ctx, name, zigtoolchaininfo, global_args, cc_infos, outpu
8485

8586
return zig_module_info(
8687
name = name,
87-
canonical_name = "{}/{}".format(str(ctx.label), name),
88+
# To avoid collisions, we need to escape both label and name,
89+
# joined using a separator that cannot appear in escapted text.
90+
# (here "__" is used as separator, since "_" is escaped as "_U").
91+
canonical_name = "{}__{}".format(escape_label(label = ctx.label), escape_label_str(name)),
8892
main = zig_out,
8993
cdeps = [cc_info],
9094
)

0 commit comments

Comments
 (0)