@@ -82,6 +82,8 @@ pub fn testAll(b: *Build, build_opts: BuildOptions) *Step {
82
82
83
83
// glibc tests
84
84
elf_step .dependOn (testAsNeeded (b , .{ .target = gnu_target }));
85
+ elf_step .dependOn (testLibraryPathsCompatibility (b , .{ .target = gnu_target , .use_lld = true }));
86
+ elf_step .dependOn (testLibraryPathsCompatibility (b , .{ .target = gnu_target , .use_lld = false }));
85
87
// https://github.com/ziglang/zig/issues/17430
86
88
// elf_step.dependOn(testCanonicalPlt(b, .{ .target = gnu_target }));
87
89
elf_step .dependOn (testCommentString (b , .{ .target = gnu_target }));
@@ -309,6 +311,53 @@ fn testAsNeeded(b: *Build, opts: Options) *Step {
309
311
return test_step ;
310
312
}
311
313
314
+ fn testLibraryPathsCompatibility (b : * Build , opts : Options ) * Step {
315
+ const test_step = addTestStep (b , "library-paths-compatibility" , opts );
316
+
317
+ const main_o = addObject (b , opts , .{
318
+ .name = "main" ,
319
+ .c_source_bytes =
320
+ \\#include <stdio.h>
321
+ \\int foo();
322
+ \\int main() {
323
+ \\ printf("%d\n", foo());
324
+ \\ return 0;
325
+ \\}
326
+ \\
327
+ ,
328
+ });
329
+ main_o .linkLibC ();
330
+
331
+ const libfoo = addSharedLibrary (b , opts , .{ .name = "foo" , .soname = .no });
332
+ addCSourceBytes (libfoo , "int foo() { return 42; }" , &.{});
333
+
334
+ {
335
+ const scripts = WriteFile .create (b );
336
+ const path = scripts .addCopyFile (libfoo .getEmittedBin (), "foo/libfoo.so" );
337
+
338
+ const exe = addExecutable (b , opts , .{ .name = "test" });
339
+ exe .addObject (main_o );
340
+
341
+ exe .addLibraryPath (.{ .generated = .{ .file = & scripts .generated_directory , .sub_path = "foo" } });
342
+ exe .addRPath (path .dirname ());
343
+
344
+ exe .linkSystemLibrary2 ("foo" , .{ .needed = false });
345
+ exe .linkLibC ();
346
+
347
+ const run = addRunArtifact (exe );
348
+ run .expectStdOutEqual ("42\n " );
349
+ test_step .dependOn (& run .step );
350
+
351
+ const check = exe .checkObject ();
352
+ check .checkInDynamicSection ();
353
+ check .checkExact ("NEEDED libfoo.so" );
354
+ check .checkNotPresent ("NEEDED foo/libfoo.so" );
355
+ test_step .dependOn (& check .step );
356
+ }
357
+
358
+ return test_step ;
359
+ }
360
+
312
361
fn testCanonicalPlt (b : * Build , opts : Options ) * Step {
313
362
const test_step = addTestStep (b , "canonical-plt" , opts );
314
363
0 commit comments