Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
172 changes: 88 additions & 84 deletions build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,13 @@ pub fn build(b: *std.Build) void {

{
// Add the varargs workaround
libpipewire.addCSourceFile(.{
libpipewire.root_module.addCSourceFile(.{
.file = b.path("src/wrap/va.c"),
.flags = va_flags,
});

// Add the source files
libpipewire.addCSourceFiles(.{
libpipewire.root_module.addCSourceFiles(.{
.root = upstream.path("src/pipewire"),
.files = &.{
"buffers.c",
Expand Down Expand Up @@ -341,8 +341,8 @@ pub fn build(b: *std.Build) void {
.link_libc = true,
}),
});
dump_coeffs_exe.addIncludePath(upstream.path("spa/include"));
dump_coeffs_exe.addCSourceFiles(.{
dump_coeffs_exe.root_module.addIncludePath(upstream.path("spa/include"));
dump_coeffs_exe.root_module.addCSourceFiles(.{
.root = upstream.path("spa/plugins/audioconvert"),
.files = &.{
"resample-native.c",
Expand All @@ -356,13 +356,13 @@ pub fn build(b: *std.Build) void {
for (resampler_precomp_tuples) |tuple| {
dump_coeffs.addArgs(&.{ "-t", tuple });
}
const resample_native_precomp_h = dump_coeffs.captureStdOut();
const resample_native_precomp_h = dump_coeffs.captureStdOut(.{});
const write_coeffs = b.addWriteFiles();
_ = write_coeffs.addCopyFile(
resample_native_precomp_h,
"resample-native-precomp.h",
);
audioconvert.addIncludePath(write_coeffs.getDirectory());
audioconvert.root_module.addIncludePath(write_coeffs.getDirectory());
}

_ = PipewireModule.build(b, pm_ctx, .{
Expand Down Expand Up @@ -435,11 +435,11 @@ pub fn build(b: *std.Build) void {

// Include and install the library headers
{
libpipewire.addIncludePath(b.dependency("valgrind_h", .{}).path(""));
libpipewire.addIncludePath(upstream.path("spa/include"));
libpipewire.addIncludePath(upstream.path("src"));
libpipewire.addConfigHeader(version_h);
libpipewire.addConfigHeader(config_h);
libpipewire.root_module.addIncludePath(b.dependency("valgrind_h", .{}).path(""));
libpipewire.root_module.addIncludePath(upstream.path("spa/include"));
libpipewire.root_module.addIncludePath(upstream.path("src"));
libpipewire.root_module.addConfigHeader(version_h);
libpipewire.root_module.addConfigHeader(config_h);

libpipewire.installHeadersDirectory(upstream.path("src/pipewire"), "pipewire", .{});
libpipewire.installHeadersDirectory(upstream.path("spa/include/spa"), "spa", .{});
Expand Down Expand Up @@ -478,78 +478,82 @@ pub fn build(b: *std.Build) void {
});
libpipewire_zig.addIncludePath(upstream.path("spa/include"));

const exe_tests = b.addTest(.{ .root_module = libpipewire_zig });
const run_exe_tests = b.addRunArtifact(exe_tests);
const test_step = b.step("test", "Run tests");
test_step.dependOn(&run_exe_tests.step);
// Build the video play example.
{
const zin = b.dependency("zin", .{}).module("zin");
//{
// const zin = b.dependency("zin", .{}).module("zin");

const video_play = b.addExecutable(.{
.name = "video-play",
.root_module = b.createModule(.{
.root_source_file = b.path("src/examples/video_play.zig"),
.target = target,
.optimize = optimize,
.imports = &.{
.{ .name = "zin", .module = zin },
},
}),
});
// const video_play = b.addExecutable(.{
// .name = "video-play",
// .root_module = b.createModule(.{
// .root_source_file = b.path("src/examples/video_play.zig"),
// .target = target,
// .optimize = optimize,
// .imports = &.{
// .{ .name = "zin", .module = zin },
// },
// }),
// });

if (use_zig_module) {
video_play.root_module.addImport("pipewire", libpipewire_zig);
} else {
video_play.linkLibrary(libpipewire);
video_play.root_module.addImport("pipewire", c);
}
// if (use_zig_module) {
// video_play.root_module.addImport("pipewire", libpipewire_zig);
// } else {
// video_play.linkLibrary(libpipewire);
// video_play.root_module.addImport("pipewire", c);
// }

video_play.root_module.addOptions("example_options", example_options);
// video_play.root_module.addOptions("example_options", example_options);

b.installArtifact(video_play);
// b.installArtifact(video_play);

const run_step = b.step("video-play", "Run the video-play example");
// const run_step = b.step("video-play", "Run the video-play example");

const run_cmd = b.addRunArtifact(video_play);
run_step.dependOn(&run_cmd.step);
// const run_cmd = b.addRunArtifact(video_play);
// run_step.dependOn(&run_cmd.step);

run_cmd.step.dependOn(b.getInstallStep());
// run_cmd.step.dependOn(b.getInstallStep());

if (b.args) |args| {
run_cmd.addArgs(args);
}
}
// if (b.args) |args| {
// run_cmd.addArgs(args);
// }
//}

// Build the audio src example.
{
const audio_src = b.addExecutable(.{
.name = "audio-src",
.root_module = b.createModule(.{
.root_source_file = b.path("src/examples/audio_src.zig"),
.target = target,
.optimize = optimize,
}),
});

if (use_zig_module) {
audio_src.root_module.addImport("pipewire", libpipewire_zig);
} else {
audio_src.linkLibrary(libpipewire);
audio_src.root_module.addImport("pipewire", c);
}

audio_src.root_module.addOptions("example_options", example_options);

b.installArtifact(audio_src);

const run_step = b.step("audio-src", "Run the audio-src example");

const run_cmd = b.addRunArtifact(audio_src);
run_step.dependOn(&run_cmd.step);

run_cmd.step.dependOn(b.getInstallStep());

if (b.args) |args| {
run_cmd.addArgs(args);
}
}
//{
// const audio_src = b.addExecutable(.{
// .name = "audio-src",
// .root_module = b.createModule(.{
// .root_source_file = b.path("src/examples/audio_src.zig"),
// .target = target,
// .optimize = optimize,
// }),
// });

// if (use_zig_module) {
// audio_src.root_module.addImport("pipewire", libpipewire_zig);
// } else {
// audio_src.root_module.linkLibrary(libpipewire);
// audio_src.root_module.addImport("pipewire", c);
// }

// audio_src.root_module.addOptions("example_options", example_options);

// b.installArtifact(audio_src);

// const run_step = b.step("audio-src", "Run the audio-src example");

// const run_cmd = b.addRunArtifact(audio_src);
// run_step.dependOn(&run_cmd.step);

// run_cmd.step.dependOn(b.getInstallStep());

// if (b.args) |args| {
// run_cmd.addArgs(args);
// }
//}
}

/// Flags used for the vararg wrapper.
Expand Down Expand Up @@ -633,21 +637,21 @@ pub const PipewireModule = struct {
.sanitize_c = .off, // https://github.com/allyourcodebase/pipewire/issues/3
}),
});
lib.addCSourceFiles(.{
lib.root_module.addCSourceFiles(.{
.root = ctx.upstream.path("src/modules"),
.files = self.files,
.flags = flags,
});
lib.addIncludePath(ctx.upstream.path("spa/include"));
lib.addIncludePath(ctx.upstream.path("src"));
lib.addConfigHeader(ctx.version);
lib.addConfigHeader(ctx.config);
lib.root_module.addIncludePath(ctx.upstream.path("spa/include"));
lib.root_module.addIncludePath(ctx.upstream.path("src"));
lib.root_module.addConfigHeader(ctx.version);
lib.root_module.addConfigHeader(ctx.config);

namespace(lib, "pipewire__module_init");
namespace(lib, "mod_topic");

ctx.libpipewire.addIncludePath(ctx.upstream.path("spa/include"));
ctx.libpipewire.linkLibrary(lib);
ctx.libpipewire.root_module.addIncludePath(ctx.upstream.path("spa/include"));
ctx.libpipewire.root_module.linkLibrary(lib);

return lib;
}
Expand All @@ -673,7 +677,7 @@ pub const PipewirePlugin = struct {
.link_libc = true,
}),
});
lib.addCSourceFiles(.{
lib.root_module.addCSourceFiles(.{
.root = ctx.upstream.path(b.pathJoin(&.{
"spa",
"plugins",
Expand All @@ -682,14 +686,14 @@ pub const PipewirePlugin = struct {
.files = self.files,
.flags = flags,
});
lib.addIncludePath(ctx.upstream.path("spa/include"));
lib.addConfigHeader(ctx.config);
lib.root_module.addIncludePath(ctx.upstream.path("spa/include"));
lib.root_module.addConfigHeader(ctx.config);

namespace(lib, "spa_handle_factory_enum");
namespace(lib, "spa_log_topic_enum");

ctx.libpipewire.addIncludePath(ctx.upstream.path("spa/include"));
ctx.libpipewire.linkLibrary(lib);
ctx.libpipewire.root_module.addIncludePath(ctx.upstream.path("spa/include"));
ctx.libpipewire.root_module.linkLibrary(lib);

return lib;
}
Expand Down
5 changes: 0 additions & 5 deletions build.zig.zon
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,6 @@
.url = "git+https://gitlab.freedesktop.org/pipewire/pipewire.git#1.5.81",
.hash = "N-V-__8AAKYw2AD301ZQsWszbYSWZQF5y-q4WXJif0UGRvFh",
},
// Used by the examples
.zin = .{
.url = "git+https://github.com/marler8997/zin#62706713b7089b4220d8e1eb49f8d776138a9058",
.hash = "zin-0.0.0-W7QDx9BaAwC-H1uS9Cz68oMn9uh5fWuVis5b-eqhCeeq",
},
},
.paths = .{
"LICENSE",
Expand Down
27 changes: 13 additions & 14 deletions src/build/generate_client_conf.zig
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,30 @@ const std = @import("std");
const options = @import("options");
const assert = std.debug.assert;

pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{ .thread_safe = false }){};
defer if (gpa.deinit() != .ok) @panic("leak detected");
const allocator = gpa.allocator();
pub fn main(init: std.process.Init) !void {
const allocator = init.arena.allocator();
const io = init.io;

const args = try std.process.argsAlloc(allocator);
defer std.process.argsFree(allocator, args);
const args = try init.minimal.args.toSlice(allocator);
//defer std.process.argsFree(allocator, args);

const input_path = args[1];
const output_path = args[2];
assert(args.len == 3);

const cwd = std.fs.cwd();
const cwd = std.Io.Dir.cwd();

const input = try cwd.openFile(input_path, .{});
defer input.close();
const input = try cwd.openFile(io, input_path, .{});
defer input.close(io);

var input_buf: [4096]u8 = undefined;
var reader = input.readerStreaming(&input_buf);
var reader = input.readerStreaming(io, &input_buf);

const output = try cwd.createFile(output_path, .{});
defer output.close();
const output = try cwd.createFile(io, output_path, .{});
defer output.close(io);

var output_buf: [4096]u8 = undefined;
var writer = output.writerStreaming(&output_buf);
var writer = output.writerStreaming(io, &output_buf);

while (true) {
_ = reader.interface.streamDelimiter(&writer.interface, '@') catch |err| switch (err) {
Expand All @@ -48,5 +47,5 @@ pub fn main() !void {
}

try writer.interface.flush();
try output.sync();
try output.sync(io);
}
Loading