diff --git a/zig-impl/build.zig b/zig-impl/build.zig index c9eacf5..b57c96a 100644 --- a/zig-impl/build.zig +++ b/zig-impl/build.zig @@ -1,12 +1,27 @@ -const Builder = @import("std").build.Builder; +const std = @import("std"); -pub fn build(b: *Builder) void { - const mode = b.standardReleaseOptions(); - const lib = b.addStaticLibrary("ipc", "src/main.zig"); +const build_dir = "build"; + +pub fn build(b: *std.build.Builder) void { + // Standard release options allow the person running `zig build` to select + // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. + // const mode = b.standardReleaseOptions(); + const mode = std.builtin.Mode.Debug; + // const mode = std.builtin.Mode.ReleaseSmall; + + const lib = b.addStaticLibrary("ipc", "src/bindings.zig"); + lib.setOutputDir(build_dir); + lib.linkLibC(); lib.setBuildMode(mode); lib.install(); - var main_tests = b.addTest("src/main.zig"); + const solib = b.addSharedLibrary("ipc", "src/bindings.zig", b.version(0, 1, 0)); + solib.setOutputDir(build_dir); + solib.linkLibC(); + solib.setBuildMode(mode); + solib.install(); + + const main_tests = b.addTest("src/main.zig"); main_tests.setBuildMode(mode); const test_step = b.step("test", "Run library tests"); diff --git a/zig-impl/src/context.zig b/zig-impl/src/context.zig index bec0996..5c71dea 100644 --- a/zig-impl/src/context.zig +++ b/zig-impl/src/context.zig @@ -183,11 +183,8 @@ pub const Context = struct { return error.IndexNotFound; } - // Return the new fd. Can be useful to the caller. - pub fn connect(self: *Self, path: []const u8) !i32 { - return self.connect_ (Connection.Type.IPC, path); - } - + /// Connect to the service directly, without reaching IPCd first. + /// Return the connection FD. pub fn connect_service (self: *Self, service_name: []const u8) !i32 { var buffer: [1000]u8 = undefined; var fbs = std.io.fixedBufferStream(&buffer); @@ -196,9 +193,11 @@ pub const Context = struct { try self.server_path(service_name, writer); var path = fbs.getWritten(); - return self.connect(path); + return self.connect_ (Connection.Type.IPC, path); } + /// Tries to connect to IPCd first, then the service (if needed). + /// Return the connection FD. pub fn connect_ipc (self: *Self, service_name: []const u8) !i32 { // First, try ipcd. if (try self.connect_ipcd (service_name, Connection.Type.IPC)) |fd| { @@ -217,7 +216,7 @@ pub const Context = struct { try self.add_ (newcon, newfd); } - pub fn accept_new_client(self: *Self, event: *Event, server_index: usize) !void { + fn accept_new_client(self: *Self, event: *Event, server_index: usize) !void { // net.StreamServer var serverfd = self.pollfd.items[server_index].fd; var path = self.connections.items[server_index].path orelse return error.ServerWithNoPath; diff --git a/zig-impl/test-bindings/pong.c b/zig-impl/test-bindings/pong.c index 3cf60ef..3bccc6a 100644 --- a/zig-impl/test-bindings/pong.c +++ b/zig-impl/test-bindings/pong.c @@ -1,4 +1,5 @@ #include +#include int main(void) { int ret = 0; @@ -12,6 +13,9 @@ int main(void) { return 1; } + printf ("Context initiated.\n"); + +#if 0 printf ("Connect to a 'pong' service.\n"); ret = ipc_connect_service (ctx, &servicefd, "pong"); @@ -47,6 +51,13 @@ int main(void) { message[size] = '\0'; printf ("Response: %s.\n", message); +#endif + printf ("Deinit context\n"); + ipc_context_deinit (ctx); + + free(ctx); + + printf ("Context freed.\n"); return 0; }