summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Joldasov <bratishkaerik@getgoogleoff.me>2023-11-17 20:24:26 +0600
committerSam James <sam@gentoo.org>2023-11-22 11:36:22 +0000
commit08419414eebb1bb26e9e72cffb66ce81a0e64751 (patch)
tree5e363a4c192d28e3b9e2a4d2b9afd857e8d324d3 /dev-lang/zig-bin
parentmedia-gfx/blender: add 4.0.1, update 9999 (diff)
downloadgentoo-08419414eebb1bb26e9e72cffb66ce81a0e64751.tar.gz
gentoo-08419414eebb1bb26e9e72cffb66ce81a0e64751.tar.bz2
gentoo-08419414eebb1bb26e9e72cffb66ce81a0e64751.zip
dev-lang/zig{,-bin}: fix getconf patch for instances with whitespaces in between outputs
Fixes: 42ac667416fe133255c3baca620e9af61315cb3b Fixes: 69c2497bbaf42a517fe3449f749609b4449b7952 Signed-off-by: Eric Joldasov <bratishkaerik@getgoogleoff.me> Closes: https://github.com/gentoo/gentoo/pull/33871 Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'dev-lang/zig-bin')
-rw-r--r--dev-lang/zig-bin/files/zig-0.11.0-first-try-getconf.patch38
1 files changed, 21 insertions, 17 deletions
diff --git a/dev-lang/zig-bin/files/zig-0.11.0-first-try-getconf.patch b/dev-lang/zig-bin/files/zig-0.11.0-first-try-getconf.patch
index 6d1b3ca7e5b7..5a63e9e74ad9 100644
--- a/dev-lang/zig-bin/files/zig-0.11.0-first-try-getconf.patch
+++ b/dev-lang/zig-bin/files/zig-0.11.0-first-try-getconf.patch
@@ -17,14 +17,14 @@ Bug: https://bugs.gentoo.org/914731
Bug: https://bugs.gentoo.org/914101
diff --git a/lib/std/zig/system/NativeTargetInfo.zig b/lib/std/zig/system/NativeTargetInfo.zig
-index 99a1a8f2e..d1032a716 100644
+index 99a1a8f2e..0250db968 100644
--- a/lib/std/zig/system/NativeTargetInfo.zig
+++ b/lib/std/zig/system/NativeTargetInfo.zig
@@ -19,6 +19,32 @@ dynamic_linker: DynamicLinker = DynamicLinker{},
-
+
pub const DynamicLinker = Target.DynamicLinker;
-
-+// Copy-pasted from `std.zig.CrossTarget.parse` to avoid changing visibility of mentioned function.
+
++// Copy-pasted from `std.zig.CrossTarget.parse` to avoid introducing unexpected new public function as part of standard library.
+/// Parses a version with an omitted patch component, such as "1.0",
+/// which SemanticVersion.parse is not capable of.
+fn parseWithOptionalPatchField(ver: []const u8) error{ InvalidVersion, Overflow }!std.SemanticVersion {
@@ -38,7 +38,7 @@ index 99a1a8f2e..d1032a716 100644
+ };
+ }
+ }.parseVersionComponent;
-+ var version_components = mem.split(u8, ver, ".");
++ var version_components = mem.splitScalar(u8, ver, '.');
+ const major = version_components.first();
+ const minor = version_components.next() orelse return error.InvalidVersion;
+ const patch = version_components.next() orelse "0";
@@ -53,10 +53,10 @@ index 99a1a8f2e..d1032a716 100644
pub const DetectError = error{
FileSystem,
SystemResources,
-@@ -307,6 +333,35 @@ fn detectAbiAndDynamicLinker(
+@@ -307,6 +333,39 @@ fn detectAbiAndDynamicLinker(
}
const ld_info_list = ld_info_list_buffer[0..ld_info_list_len];
-
+
+ if (is_linux and !os_is_non_native and cross_target.glibc_version == null) try_getconf: {
+ var buf: [4096]u8 = undefined;
+ var fba = std.heap.FixedBufferAllocator.init(&buf);
@@ -68,20 +68,24 @@ index 99a1a8f2e..d1032a716 100644
+ .max_output_bytes = 1024,
+ }) catch break :try_getconf;
+ if (!std.mem.startsWith(u8, getconf.stdout, "glibc ")) break :try_getconf;
-+ const version_string = getconf.stdout["glibc ".len..];
++ const version_string = std.mem.trim(u8, getconf.stdout["glibc ".len..], &std.ascii.whitespace);
+ const glibc_version = parseWithOptionalPatchField(version_string) catch break :try_getconf;
+
+ var os_with_glibc = os;
+ os_with_glibc.version_range.linux.glibc = glibc_version;
+
++ const target: Target = .{
++ .cpu = cpu,
++ .os = os_with_glibc,
++ .abi = .gnu,
++ .ofmt = cross_target.ofmt orelse Target.ObjectFormat.default(os_with_glibc.tag, cpu.arch),
++ };
+ const result: NativeTargetInfo = .{
-+ .target = .{
-+ .cpu = cpu,
-+ .os = os_with_glibc,
-+ .abi = cross_target.abi orelse Target.Abi.default(cpu.arch, os_with_glibc),
-+ .ofmt = cross_target.ofmt orelse Target.ObjectFormat.default(os_with_glibc.tag, cpu.arch),
-+ },
-+ .dynamic_linker = cross_target.dynamic_linker,
++ .target = target,
++ .dynamic_linker = if (cross_target.dynamic_linker.get() == null)
++ target.standardDynamicLinkerPath()
++ else
++ cross_target.dynamic_linker,
+ };
+ return result;
+ }
@@ -89,7 +93,7 @@ index 99a1a8f2e..d1032a716 100644
// Best case scenario: the executable is dynamically linked, and we can iterate
// over our own shared objects and find a dynamic linker.
const elf_file = blk: {
-@@ -563,7 +618,7 @@ fn glibcVerFromSoFile(file: fs.File) !std.SemanticVersion {
+@@ -563,7 +622,7 @@ fn glibcVerFromSoFile(file: fs.File) !std.SemanticVersion {
while (it.next()) |s| {
if (mem.startsWith(u8, s, "GLIBC_2.")) {
const chopped = s["GLIBC_".len..];
@@ -98,7 +102,7 @@ index 99a1a8f2e..d1032a716 100644
error.Overflow => return error.InvalidGnuLibCVersion,
error.InvalidVersion => return error.InvalidGnuLibCVersion,
};
-@@ -586,7 +641,7 @@ fn glibcVerFromLinkName(link_name: []const u8, prefix: []const u8) !std.Semantic
+@@ -586,7 +645,7 @@ fn glibcVerFromLinkName(link_name: []const u8, prefix: []const u8) !std.Semantic
}
// chop off "libc-" and ".so"
const link_name_chopped = link_name[prefix.len .. link_name.len - suffix.len];