From 574eb23f2ba18da574f7b93a637fb286e3930f1e Mon Sep 17 00:00:00 2001 From: K4 Date: Sun, 23 Aug 2026 14:25:32 +0200 Subject: [PATCH] Compilation: relax version suffix constraints in recognizing .so files (#36399) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolves https://github.com/ziglang/zig/issues/23545 Co-authored-by: Egor Zudin Reviewed-on: https://codeberg.org/ziglang/zig/pulls/36399 Reviewed-by: Alex Rønne Petersen --- src/Compilation.zig | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Compilation.zig b/src/Compilation.zig index fcb65eb66d89daedb4a2cd9e168a1461ad1486af..03afa7d415903ee647a0d8b3e4dbd589b4337a38 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -7094,7 +7094,7 @@ pub fn hasSharedLibraryExt(filename: []const u8) bool { { return true; } - // Look for .so.X, .so.X.Y, .so.X.Y.Z + // Look for .so.X, .so.X.Y, .so.X.Y.Z.* var it = mem.splitScalar(u8, filename, '.'); _ = it.first(); var so_txt = it.next() orelse return false; @@ -7108,7 +7108,6 @@ pub fn hasSharedLibraryExt(filename: []const u8) bool { _ = std.fmt.parseInt(u32, n1, 10) catch return false; if (n2) |x| _ = std.fmt.parseInt(u32, x, 10) catch return false; if (n3) |x| _ = std.fmt.parseInt(u32, x, 10) catch return false; - if (it.next() != null) return false; return true; } @@ -7140,8 +7139,6 @@ pub fn classifyFileExt(filename: []const u8) FileExt { return .assembly_with_cpp; } else if (mem.endsWith(u8, filename, ".zig")) { return .zig; - } else if (hasSharedLibraryExt(filename)) { - return .shared_library; } else if (hasStaticLibraryExt(filename)) { return .static_library; } else if (hasObjectExt(filename)) { @@ -7154,6 +7151,8 @@ pub fn classifyFileExt(filename: []const u8) FileExt { return .res; } else if (std.ascii.endsWithIgnoreCase(filename, ".manifest")) { return .manifest; + } else if (hasSharedLibraryExt(filename)) { // currently the only check that doesn't only look at the end, thus goes last + return .shared_library; } else { return .unknown; } @@ -7168,7 +7167,9 @@ test "classifyFileExt" { try std.testing.expectEqual(FileExt.shared_library, classifyFileExt("foo.so.1")); try std.testing.expectEqual(FileExt.shared_library, classifyFileExt("foo.so.1.2")); try std.testing.expectEqual(FileExt.shared_library, classifyFileExt("foo.so.1.2.3")); - try std.testing.expectEqual(FileExt.unknown, classifyFileExt("foo.so.1.2.3~")); + try std.testing.expectEqual(FileExt.shared_library, classifyFileExt("foo.so.1.2.3.4")); + try std.testing.expectEqual(FileExt.shared_library, classifyFileExt("foo.so.1.2.3.dev4")); + try std.testing.expectEqual(FileExt.static_library, classifyFileExt("foo.so.1.a")); try std.testing.expectEqual(FileExt.zig, classifyFileExt("foo.zig")); } -- 2.54.0