diff --git a/scripts/check-examples.sh b/scripts/check-examples.sh index f866248e8..7cb16520d 100755 --- a/scripts/check-examples.sh +++ b/scripts/check-examples.sh @@ -151,7 +151,10 @@ echo "ok app-only (failed as expected)" fixtures="scripts/fixtures/build-api" for id in fixture_both fixture_native; do mkdir -p "$work/$id" - cp "$fixtures"/plugin/{build.zig,build.zig.zon,plugin.zig,lib.zig,lib.c} "$work/$id/" + cp "$fixtures"/plugin/{build.zig,build.zig.zon,plugin.zig} "$work/$id/" + # The C dependency's symbol carries the id, so dropping either package's C source fails the link. + sed "s/@ID@/$id/g" "$fixtures/plugin/lib.zig.tmpl" > "$work/$id/lib.zig" + sed "s/@ID@/$id/g" "$fixtures/plugin/lib.c.tmpl" > "$work/$id/lib.c" sed "s/@ID@/$id/g" "$fixtures/plugin/plugin.zig.zon.tmpl" > "$work/$id/plugin.zig.zon" (cd "$work/$id" && zig fetch --save=fizzy "$sdk_tarball" >/dev/null) done diff --git a/scripts/fixtures/build-api/plugin/lib.c b/scripts/fixtures/build-api/plugin/lib.c deleted file mode 100644 index 87c510882..000000000 --- a/scripts/fixtures/build-api/plugin/lib.c +++ /dev/null @@ -1,4 +0,0 @@ -// Weak: both fixture packages link this file into one executable. -__attribute__((weak)) int fixture_answer(void) { - return 42; -} diff --git a/scripts/fixtures/build-api/plugin/lib.c.tmpl b/scripts/fixtures/build-api/plugin/lib.c.tmpl new file mode 100644 index 000000000..1e106862c --- /dev/null +++ b/scripts/fixtures/build-api/plugin/lib.c.tmpl @@ -0,0 +1,5 @@ +// Not weak, and named for the package (`@ID@`): the two fixture packages link into one +// executable, and each must need its own C source for the link to succeed. +int @ID@_answer(void) { + return 42; +} diff --git a/scripts/fixtures/build-api/plugin/lib.zig b/scripts/fixtures/build-api/plugin/lib.zig deleted file mode 100644 index 0b9956a00..000000000 --- a/scripts/fixtures/build-api/plugin/lib.zig +++ /dev/null @@ -1,3 +0,0 @@ -//! The fixture plugin's dependency of its own: Zig declaring a function that `lib.c` defines, so -//! a lost import or a lost C source fails the plugin's compile or link. -pub extern fn fixture_answer() c_int; diff --git a/scripts/fixtures/build-api/plugin/lib.zig.tmpl b/scripts/fixtures/build-api/plugin/lib.zig.tmpl new file mode 100644 index 000000000..70567a924 --- /dev/null +++ b/scripts/fixtures/build-api/plugin/lib.zig.tmpl @@ -0,0 +1,5 @@ +//! The fixture plugin's dependency of its own: Zig declaring the function that `lib.c` defines +//! under a name of this package alone, so a lost import or a lost C source fails the plugin's +//! compile or link. +extern fn @ID@_answer() c_int; +pub const answer = @ID@_answer; diff --git a/scripts/fixtures/build-api/plugin/plugin.zig b/scripts/fixtures/build-api/plugin/plugin.zig index dffb3e589..ffe5af9b0 100644 --- a/scripts/fixtures/build-api/plugin/plugin.zig +++ b/scripts/fixtures/build-api/plugin/plugin.zig @@ -40,7 +40,7 @@ const vtable: sdk.Plugin.VTable = .{}; pub fn register(host: *sdk.Host) !void { // Calls into the C source of the package's own dependency: it must have reached the link. - if (fixture_lib.fixture_answer() != 42) return error.FixtureDependency; + if (fixture_lib.answer() != 42) return error.FixtureDependency; try writeAndLoadTape(host.allocator); try host.registerPlugin(&plugin); try host.registerSurface(.{