build: use pkgconfig name for gtk4-layer-shell system integration
By linking using the pkg-config name we gain the compiler flags in pkgconf for linking, specifically the -I <headers> to include system-installed headers. This allows the gtk4-layer-shell pkg to not require the source files specified in the `pkg/gtk4-layer-shell/build.zig.zon`. pkg(gtk4-layer-shell): Refactor to allow dynamic linking Refactored `pkg/gtk4-layer-shell/build.zig` to have similar structure to `pkg/oniguruma/build.zig`. Now dynamic link using pkgconfig, this adds pkgconfig compiler flags. So we are now using system-installed headers to resolve @cInclude().pull/6624/head
parent
dcb8440b52
commit
35aab1a302
|
|
@ -3,23 +3,40 @@ const std = @import("std");
|
|||
// TODO: Import this from build.zig.zon when possible
|
||||
const version: std.SemanticVersion = .{ .major = 1, .minor = 1, .patch = 0 };
|
||||
|
||||
const dynamic_link_opts: std.Build.Module.LinkSystemLibraryOptions = .{
|
||||
.preferred_link_mode = .dynamic,
|
||||
.search_strategy = .mode_first,
|
||||
};
|
||||
|
||||
pub fn build(b: *std.Build) !void {
|
||||
const target = b.standardTargetOptions(.{});
|
||||
const optimize = b.standardOptimizeOption(.{});
|
||||
|
||||
const upstream = b.dependency("gtk4_layer_shell", .{});
|
||||
const wayland_protocols = b.dependency("wayland_protocols", .{});
|
||||
|
||||
// Zig API
|
||||
const module = b.addModule("gtk4-layer-shell", .{
|
||||
.root_source_file = b.path("src/main.zig"),
|
||||
.target = target,
|
||||
.optimize = optimize,
|
||||
});
|
||||
module.addIncludePath(upstream.path("include"));
|
||||
// Needs the gtk.h header
|
||||
module.linkSystemLibrary("gtk4", dynamic_link_opts);
|
||||
|
||||
if (b.systemIntegrationOption("gtk4-layer-shell", .{})) {
|
||||
module.linkSystemLibrary("gtk4-layer-shell-0", dynamic_link_opts);
|
||||
} else {
|
||||
_ = try buildLib(b, module, .{
|
||||
.target = target,
|
||||
.optimize = optimize,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
fn buildLib(b: *std.Build, module: *std.Build.Module, options: anytype) !*std.Build.Step.Compile {
|
||||
const target = options.target;
|
||||
const optimize = options.optimize;
|
||||
|
||||
const upstream = b.dependency("gtk4_layer_shell", .{});
|
||||
const wayland_protocols = b.dependency("wayland_protocols", .{});
|
||||
// Shared library
|
||||
const lib = b.addSharedLibrary(.{
|
||||
.name = "gtk4-layer-shell",
|
||||
|
|
@ -29,6 +46,7 @@ pub fn build(b: *std.Build) !void {
|
|||
lib.linkLibC();
|
||||
lib.addIncludePath(upstream.path("include"));
|
||||
lib.addIncludePath(upstream.path("src"));
|
||||
module.addIncludePath(upstream.path("include"));
|
||||
|
||||
// GTK
|
||||
lib.linkSystemLibrary2("gtk4", dynamic_link_opts);
|
||||
|
|
@ -76,6 +94,16 @@ pub fn build(b: *std.Build) !void {
|
|||
.{ .include_extensions = &.{".h"} },
|
||||
);
|
||||
|
||||
// Certain files relating to session lock were removed as we don't use them
|
||||
const srcs: []const []const u8 = &.{
|
||||
"gtk4-layer-shell.c",
|
||||
"layer-surface.c",
|
||||
"libwayland-shim.c",
|
||||
"registry.c",
|
||||
"stolen-from-libwayland.c",
|
||||
"stubbed-surface.c",
|
||||
"xdg-surface-server.c",
|
||||
};
|
||||
lib.addCSourceFiles(.{
|
||||
.root = upstream.path("src"),
|
||||
.files = srcs,
|
||||
|
|
@ -87,20 +115,5 @@ pub fn build(b: *std.Build) !void {
|
|||
});
|
||||
|
||||
b.installArtifact(lib);
|
||||
return lib;
|
||||
}
|
||||
|
||||
// Certain files relating to session lock were removed as we don't use them
|
||||
const srcs: []const []const u8 = &.{
|
||||
"gtk4-layer-shell.c",
|
||||
"layer-surface.c",
|
||||
"libwayland-shim.c",
|
||||
"registry.c",
|
||||
"stolen-from-libwayland.c",
|
||||
"stubbed-surface.c",
|
||||
"xdg-surface-server.c",
|
||||
};
|
||||
|
||||
const dynamic_link_opts: std.Build.Module.LinkSystemLibraryOptions = .{
|
||||
.preferred_link_mode = .dynamic,
|
||||
.search_strategy = .mode_first,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -506,7 +506,7 @@ pub fn add(
|
|||
// IMPORTANT: gtk4-layer-shell must be linked BEFORE
|
||||
// wayland-client, as it relies on shimming libwayland's APIs.
|
||||
if (b.systemIntegrationOption("gtk4-layer-shell", .{})) {
|
||||
step.linkSystemLibrary2("gtk4-layer-shell", dynamic_link_opts);
|
||||
step.linkSystemLibrary2("gtk4-layer-shell-0", dynamic_link_opts);
|
||||
} else {
|
||||
// gtk4-layer-shell *must* be dynamically linked,
|
||||
// so we don't add it as a static library
|
||||
|
|
|
|||
Loading…
Reference in New Issue