@@ -101,11 +101,6 @@ pub fn build(b: *std.Build) !void {
101101 if (want_examples ) try buildExamples (b , optimize , target , module );
102102 }
103103 if (want_core ) {
104- if (target .result .os .tag == .linux ) {
105- module .addCSourceFile (.{
106- .file = b .path ("src/core/linux/wayland.c" ),
107- });
108- }
109104 linkCore (b , module );
110105 }
111106 if (want_sysaudio ) {
@@ -278,11 +273,42 @@ fn linkCore(b: *std.Build, module: *std.Build.Module) void {
278273 const optimize = module .optimize orelse @panic ("module must have .optimize specified" );
279274
280275 if (target .result .os .tag == .linux ) {
281- if (b .lazyDependency ("wayland_headers " , .{
276+ if (b .lazyDependency ("shimizu " , .{
282277 .target = target ,
283278 .optimize = optimize ,
284279 })) | dep | {
285- module .linkLibrary (dep .artifact ("wayland-headers" ));
280+ module .addImport ("shimizu" , dep .module ("shimizu" ));
281+
282+ const generate_wayland_protocols_zig_cmd = b .addRunArtifact (dep .artifact ("shimizu-scanner" ));
283+ generate_wayland_protocols_zig_cmd .addFileArg (b .path ("src/core/linux/Wayland/xdg-shell.xml" ));
284+ generate_wayland_protocols_zig_cmd .addFileArg (b .path ("src/core/linux/Wayland/xdg-decoration-unstable-v1.xml" ));
285+
286+ // lowest common denominators as of 2024-01-05 https://wayland.app/protocols/xdg-shell#compositor-support
287+ generate_wayland_protocols_zig_cmd .addArgs (&.{ "--interface-version" , "xdg_wm_base" , "2" });
288+ generate_wayland_protocols_zig_cmd .addArgs (&.{ "--interface-version" , "wp_presentation" , "1" });
289+ generate_wayland_protocols_zig_cmd .addArgs (&.{ "--interface-version" , "wp_viewporter" , "1" });
290+ generate_wayland_protocols_zig_cmd .addArgs (&.{ "--interface-version" , "zwp_linux_dmabuf_v1" , "3" });
291+ generate_wayland_protocols_zig_cmd .addArgs (&.{ "--interface-version" , "zwp_tablet_manager_v2" , "1" });
292+ generate_wayland_protocols_zig_cmd .addArgs (&.{ "--interface-version" , "zxdg_decoration_manager_v1" , "1" });
293+
294+ generate_wayland_protocols_zig_cmd .addArg ("--import" );
295+ generate_wayland_protocols_zig_cmd .addFileArg (b .path ("src/core/linux/Wayland/wayland.xml" ));
296+ generate_wayland_protocols_zig_cmd .addArg ("@import(\" core\" )" );
297+
298+ generate_wayland_protocols_zig_cmd .addArg ("--output" );
299+ const wayland_protocols_dir = generate_wayland_protocols_zig_cmd .addOutputDirectoryArg ("wayland-unstable" );
300+
301+ const wayland_protocols_module = b .addModule ("wayland-protocols" , .{
302+ .root_source_file = wayland_protocols_dir .path (b , "root.zig" ),
303+ .target = target ,
304+ .optimize = optimize ,
305+ .imports = &.{
306+ .{ .name = "wire" , .module = dep .module ("wire" ) },
307+ .{ .name = "core" , .module = dep .module ("core" ) },
308+ },
309+ });
310+
311+ module .addImport ("wayland-protocols" , wayland_protocols_module );
286312 }
287313 if (b .lazyDependency ("x11_headers" , .{
288314 .target = target ,
0 commit comments