From 2a63160c06c40baaeb73fa9b1438dde9604af25c Mon Sep 17 00:00:00 2001 From: jcalabro Date: Fri, 19 Jan 2024 22:54:17 -0500 Subject: [PATCH] Update to Latest Zig --- build.zig | 20 +++++++-------- build.zig.zon | 13 +++++++++- facil.io/build.zig | 62 ++++++++++++++++++++++++++-------------------- src/fio.zig | 28 ++++++++++----------- src/http_auth.zig | 4 +-- src/websockets.zig | 16 ++++++------ 6 files changed, 81 insertions(+), 62 deletions(-) diff --git a/build.zig b/build.zig index 1a2193a..e2f05c6 100644 --- a/build.zig +++ b/build.zig @@ -1,7 +1,7 @@ const std = @import("std"); const build_facilio = @import("facil.io/build.zig").build_facilio; -pub fn build(b: *std.build.Builder) !void { +pub fn build(b: *std.Build) !void { const target = b.standardTargetOptions(.{}); // Standard release options allow the person running `zig build` to select // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. @@ -16,8 +16,8 @@ pub fn build(b: *std.build.Builder) !void { }; // create a module to be used internally. - var zap_module = b.createModule(.{ - .source_file = .{ .path = "src/zap.zig" }, + const zap_module = b.createModule(.{ + .root_source_file = .{ .path = "src/zap.zig" }, }); // register the module so it can be referenced using the package manager. @@ -81,7 +81,7 @@ pub fn build(b: *std.build.Builder) !void { }); example.linkLibrary(facilio); - example.addModule("zap", zap_module); + example.root_module.addImport("zap", zap_module); // const example_run = example.run(); const example_run = b.addRunArtifact(example); @@ -120,7 +120,7 @@ pub fn build(b: *std.build.Builder) !void { .optimize = optimize, }); auth_tests.linkLibrary(facilio); - auth_tests.addModule("zap", zap_module); + auth_tests.root_module.addImport("zap", zap_module); const run_auth_tests = b.addRunArtifact(auth_tests); const install_auth_tests = b.addInstallArtifact(auth_tests, .{}); @@ -133,7 +133,7 @@ pub fn build(b: *std.build.Builder) !void { .optimize = optimize, }); mustache_tests.linkLibrary(facilio); - mustache_tests.addModule("zap", zap_module); + mustache_tests.root_module.addImport("zap", zap_module); const run_mustache_tests = b.addRunArtifact(mustache_tests); const install_mustache_tests = b.addInstallArtifact(mustache_tests, .{}); @@ -147,7 +147,7 @@ pub fn build(b: *std.build.Builder) !void { }); httpparams_tests.linkLibrary(facilio); - httpparams_tests.addModule("zap", zap_module); + httpparams_tests.root_module.addImport("zap", zap_module); const run_httpparams_tests = b.addRunArtifact(httpparams_tests); // TODO: for some reason, tests aren't run more than once unless // dependencies have changed. @@ -164,7 +164,7 @@ pub fn build(b: *std.build.Builder) !void { }); sendfile_tests.linkLibrary(facilio); - sendfile_tests.addModule("zap", zap_module); + sendfile_tests.root_module.addImport("zap", zap_module); const run_sendfile_tests = b.addRunArtifact(sendfile_tests); const install_sendfile_tests = b.addInstallArtifact(sendfile_tests, .{}); @@ -197,7 +197,7 @@ pub fn build(b: *std.build.Builder) !void { // // pkghash // - var pkghash_exe = b.addExecutable(.{ + const pkghash_exe = b.addExecutable(.{ .name = "pkghash", .root_source_file = .{ .path = "./tools/pkghash.zig" }, .target = target, @@ -211,7 +211,7 @@ pub fn build(b: *std.build.Builder) !void { // // announceybot // - var announceybot_exe = b.addExecutable(.{ + const announceybot_exe = b.addExecutable(.{ .name = "announceybot", .root_source_file = .{ .path = "./tools/announceybot.zig" }, .target = target, diff --git a/build.zig.zon b/build.zig.zon index b8d9e70..e701258 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -1 +1,12 @@ -.{ .name = "zap", .version = "0.4.0" } +.{ + .name = "zap", + .version = "0.4.0", + .paths = .{ + "build.zig", + "build.zig.zon", + "doc", + "flake.nix", + "src", + "shell.nix", + }, +} diff --git a/facil.io/build.zig b/facil.io/build.zig index e072242..b946f2a 100644 --- a/facil.io/build.zig +++ b/facil.io/build.zig @@ -2,11 +2,11 @@ const std = @import("std"); pub fn build_facilio( comptime subdir: []const u8, - b: *std.build.Builder, - target: std.zig.CrossTarget, + b: *std.Build, + target: std.Build.ResolvedTarget, optimize: std.builtin.OptimizeMode, use_openssl: bool, -) !*std.build.CompileStep { +) !*std.Build.Step.Compile { const lib = b.addStaticLibrary(.{ .name = "facil.io", .target = target, @@ -15,7 +15,7 @@ pub fn build_facilio( // Generate flags var flags = std.ArrayList([]const u8).init(std.heap.page_allocator); - if (lib.optimize != .Debug) try flags.append("-Os"); + if (lib.root_module.optimize != .Debug) try flags.append("-Os"); try flags.append("-Wno-return-type-c-linkage"); try flags.append("-fno-sanitize=undefined"); @@ -26,7 +26,7 @@ pub fn build_facilio( // try flags.append("-DFIO_HTTP_EXACT_LOGGING"); - if (target.getAbi() == .musl) + if (target.result.abi == .musl) try flags.append("-D_LARGEFILE64_SOURCE"); if (use_openssl) try flags.append("-DHAVE_OPENSSL -DFIO_TLS_FOUND"); @@ -42,30 +42,38 @@ pub fn build_facilio( lib.addIncludePath(.{ .path = subdir ++ "/lib/facil/tls" }); // C source files - lib.addCSourceFiles(&.{ - subdir ++ "/lib/facil/fio.c", - subdir ++ "/lib/facil/fio_zig.c", - subdir ++ "/lib/facil/http/http.c", - subdir ++ "/lib/facil/http/http1.c", - subdir ++ "/lib/facil/http/websockets.c", - subdir ++ "/lib/facil/http/http_internal.c", - subdir ++ "/lib/facil/fiobj/fiobj_numbers.c", - subdir ++ "/lib/facil/fiobj/fio_siphash.c", - subdir ++ "/lib/facil/fiobj/fiobj_str.c", - subdir ++ "/lib/facil/fiobj/fiobj_ary.c", - subdir ++ "/lib/facil/fiobj/fiobj_data.c", - subdir ++ "/lib/facil/fiobj/fiobj_hash.c", - subdir ++ "/lib/facil/fiobj/fiobj_json.c", - subdir ++ "/lib/facil/fiobj/fiobject.c", - subdir ++ "/lib/facil/fiobj/fiobj_mustache.c", - subdir ++ "/lib/facil/cli/fio_cli.c", - }, flags.items); + lib.addCSourceFiles( + .{ + .files = &.{ + subdir ++ "/lib/facil/fio.c", + subdir ++ "/lib/facil/fio_zig.c", + subdir ++ "/lib/facil/http/http.c", + subdir ++ "/lib/facil/http/http1.c", + subdir ++ "/lib/facil/http/websockets.c", + subdir ++ "/lib/facil/http/http_internal.c", + subdir ++ "/lib/facil/fiobj/fiobj_numbers.c", + subdir ++ "/lib/facil/fiobj/fio_siphash.c", + subdir ++ "/lib/facil/fiobj/fiobj_str.c", + subdir ++ "/lib/facil/fiobj/fiobj_ary.c", + subdir ++ "/lib/facil/fiobj/fiobj_data.c", + subdir ++ "/lib/facil/fiobj/fiobj_hash.c", + subdir ++ "/lib/facil/fiobj/fiobj_json.c", + subdir ++ "/lib/facil/fiobj/fiobject.c", + subdir ++ "/lib/facil/fiobj/fiobj_mustache.c", + subdir ++ "/lib/facil/cli/fio_cli.c", + }, + .flags = flags.items, + }, + ); if (use_openssl) { - lib.addCSourceFiles(&.{ - subdir ++ "/lib/facil/tls/fio_tls_openssl.c", - subdir ++ "/lib/facil/tls/fio_tls_missing.c", - }, flags.items); + lib.addCSourceFiles(.{ + .files = &.{ + subdir ++ "/lib/facil/tls/fio_tls_openssl.c", + subdir ++ "/lib/facil/tls/fio_tls_missing.c", + }, + .flags = flags.items, + }); } // link against libc diff --git a/src/fio.zig b/src/fio.zig index a71ff6c..31e9496 100644 --- a/src/fio.zig +++ b/src/fio.zig @@ -118,10 +118,10 @@ pub const struct_fio_str_info_s = extern struct { pub const fio_str_info_s = struct_fio_str_info_s; pub extern fn http_send_body(h: [*c]http_s, data: ?*anyopaque, length: usize) c_int; pub fn fiobj_each1(arg_o: FIOBJ, arg_start_at: usize, arg_task: ?*const fn (FIOBJ, ?*anyopaque) callconv(.C) c_int, arg_arg: ?*anyopaque) callconv(.C) usize { - var o = arg_o; - var start_at = arg_start_at; - var task = arg_task; - var arg = arg_arg; + const o = arg_o; + const start_at = arg_start_at; + const task = arg_task; + const arg = arg_arg; if ((((o != 0) and ((o & @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))) == @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 0)))))) and ((o & @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6))))) != @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6)))))) and (fiobj_type_vtable(o).*.each != null)) return fiobj_type_vtable(o).*.each.?(o, start_at, task, arg); return 0; } @@ -288,8 +288,8 @@ pub const fiobj_object_header_s = extern struct { ref: u32, }; pub fn fiobj_type_is(arg_o: FIOBJ, arg_type: fiobj_type_enum) callconv(.C) usize { - var o = arg_o; - var @"type" = arg_type; + const o = arg_o; + const @"type" = arg_type; while (true) { switch (@as(c_int, @bitCast(@as(c_uint, @"type")))) { @as(c_int, 1) => return @as(usize, @bitCast(@as(c_long, @intFromBool(((o & @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))) != 0) or (@as(c_int, @bitCast(@as(c_uint, @as([*c]fiobj_type_enum, @ptrFromInt(o))[@as(c_uint, @intCast(@as(c_int, 0)))]))) == FIOBJ_T_NUMBER))))), @@ -311,7 +311,7 @@ pub fn fiobj_type_is(arg_o: FIOBJ, arg_type: fiobj_type_enum) callconv(.C) usize return @as(usize, @bitCast(@as(c_long, @intFromBool((((o != 0) and ((o & @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))) == @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 0)))))) and ((o & @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6))))) != @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6)))))) and (@as(c_int, @bitCast(@as(c_uint, @as([*c]fiobj_type_enum, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(o & ~@as(usize, @bitCast(@as(c_long, @as(c_int, 7)))))))))[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, @bitCast(@as(c_uint, @"type")))))))); } pub fn fiobj_type(arg_o: FIOBJ) callconv(.C) fiobj_type_enum { - var o = arg_o; + const o = arg_o; if (!(o != 0)) return @as(u8, @bitCast(@as(i8, @truncate(FIOBJ_T_NULL)))); if ((o & @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))) != 0) return @as(u8, @bitCast(@as(i8, @truncate(FIOBJ_T_NUMBER)))); if ((o & @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6))))) == @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6))))) return @as(u8, @bitCast(@as(u8, @truncate(o)))); @@ -326,7 +326,7 @@ pub extern const FIOBJECT_VTABLE_ARRAY: fiobj_object_vtable_s; pub extern const FIOBJECT_VTABLE_HASH: fiobj_object_vtable_s; pub extern const FIOBJECT_VTABLE_DATA: fiobj_object_vtable_s; pub fn fiobj_type_vtable(arg_o: FIOBJ) callconv(.C) [*c]const fiobj_object_vtable_s { - var o = arg_o; + const o = arg_o; while (true) { switch (@as(c_int, @bitCast(@as(c_uint, fiobj_type(o))))) { @as(c_int, 1) => return &FIOBJECT_VTABLE_NUMBER, @@ -361,7 +361,7 @@ pub fn fiobj_obj2float(o: FIOBJ) callconv(.C) f64 { pub extern fn fio_ltocstr(c_long) fio_str_info_s; pub fn fiobj_obj2cstr(o: FIOBJ) callconv(.C) fio_str_info_s { if (!(o != 0)) { - var ret: fio_str_info_s = fio_str_info_s{ + const ret: fio_str_info_s = fio_str_info_s{ .capa = @as(usize, @bitCast(@as(c_long, @as(c_int, 0)))), .len = @as(usize, @bitCast(@as(c_long, @as(c_int, 4)))), .data = @as([*c]u8, @ptrFromInt(@intFromPtr("null"))), @@ -374,7 +374,7 @@ pub fn fiobj_obj2cstr(o: FIOBJ) callconv(.C) fio_str_info_s { switch (@as(c_int, @bitCast(@as(c_uint, @as(u8, @bitCast(@as(u8, @truncate(o)))))))) { @as(c_int, 6) => { { - var ret: fio_str_info_s = fio_str_info_s{ + const ret: fio_str_info_s = fio_str_info_s{ .capa = @as(usize, @bitCast(@as(c_long, @as(c_int, 0)))), .len = @as(usize, @bitCast(@as(c_long, @as(c_int, 4)))), .data = @as([*c]u8, @ptrFromInt(@intFromPtr("null"))), @@ -384,7 +384,7 @@ pub fn fiobj_obj2cstr(o: FIOBJ) callconv(.C) fio_str_info_s { }, @as(c_int, 38) => { { - var ret: fio_str_info_s = fio_str_info_s{ + const ret: fio_str_info_s = fio_str_info_s{ .capa = @as(usize, @bitCast(@as(c_long, @as(c_int, 0)))), .len = @as(usize, @bitCast(@as(c_long, @as(c_int, 5)))), .data = @as([*c]u8, @ptrFromInt(@intFromPtr("false"))), @@ -394,7 +394,7 @@ pub fn fiobj_obj2cstr(o: FIOBJ) callconv(.C) fio_str_info_s { }, @as(c_int, 22) => { { - var ret: fio_str_info_s = fio_str_info_s{ + const ret: fio_str_info_s = fio_str_info_s{ .capa = @as(usize, @bitCast(@as(c_long, @as(c_int, 0)))), .len = @as(usize, @bitCast(@as(c_long, @as(c_int, 4)))), .data = @as([*c]u8, @ptrFromInt(@intFromPtr("true"))), @@ -556,8 +556,8 @@ pub extern fn http_date2rfc7231(target: [*c]u8, tmbuf: [*c]struct_tm) usize; pub extern fn http_date2rfc2109(target: [*c]u8, tmbuf: [*c]struct_tm) usize; pub extern fn http_date2rfc2822(target: [*c]u8, tmbuf: [*c]struct_tm) usize; pub fn http_date2str(arg_target: [*c]u8, arg_tmbuf: [*c]struct_tm) callconv(.C) usize { - var target = arg_target; - var tmbuf = arg_tmbuf; + const target = arg_target; + const tmbuf = arg_tmbuf; return http_date2rfc7231(target, tmbuf); } pub extern fn http_time2str(target: [*c]u8, t: time_t) usize; diff --git a/src/http_auth.zig b/src/http_auth.zig index e8a7ad2..6cba1f6 100644 --- a/src/http_auth.zig +++ b/src/http_auth.zig @@ -122,7 +122,7 @@ pub fn Basic(comptime Lookup: type, comptime kind: BasicAuthStrategy) type { ); return .AuthFailed; } - var decoded = buffer[0..decoded_size]; + const decoded = buffer[0..decoded_size]; decoder.decode(decoded, encoded) catch |err| { zap.debug( "ERROR: UserPassAuth: unable to decode `{s}`: {any}\n", @@ -400,7 +400,7 @@ pub fn UserPassSession(comptime Lookup: type, comptime lockedPwLookups: bool) ty lookup: *Lookup, args: UserPassSessionArgs, ) !Self { - var ret: Self = .{ + const ret: Self = .{ .allocator = allocator, .settings = .{ .usernameParam = try allocator.dupe(u8, args.usernameParam), diff --git a/src/websockets.zig b/src/websockets.zig index 0e46270..c92ba37 100644 --- a/src/websockets.zig +++ b/src/websockets.zig @@ -50,7 +50,7 @@ pub fn Handler(comptime ContextType: type) type { /// This function will end the HTTP stage of the connection and attempt to "upgrade" to a WebSockets connection. pub fn upgrade(h: [*c]fio.http_s, settings: *WebSocketSettings) WebSocketError!void { - var fio_settings: fio.websocket_settings_s = .{ + const fio_settings: fio.websocket_settings_s = .{ .on_message = internal_on_message, .on_open = internal_on_open, .on_ready = internal_on_ready, @@ -64,8 +64,8 @@ pub fn Handler(comptime ContextType: type) type { } fn internal_on_message(handle: WsHandle, msg: fio.fio_str_info_s, is_text: u8) callconv(.C) void { - var user_provided_settings: ?*WebSocketSettings = @as(?*WebSocketSettings, @ptrCast(@alignCast(fio.websocket_udata_get(handle)))); - var message = msg.data[0..msg.len]; + const user_provided_settings: ?*WebSocketSettings = @as(?*WebSocketSettings, @ptrCast(@alignCast(fio.websocket_udata_get(handle)))); + const message = msg.data[0..msg.len]; if (user_provided_settings) |settings| { if (settings.on_message) |on_message| { on_message(settings.context, handle, message, is_text == 1); @@ -74,7 +74,7 @@ pub fn Handler(comptime ContextType: type) type { } fn internal_on_open(handle: WsHandle) callconv(.C) void { - var user_provided_settings: ?*WebSocketSettings = @as(?*WebSocketSettings, @ptrCast(@alignCast(fio.websocket_udata_get(handle)))); + const user_provided_settings: ?*WebSocketSettings = @as(?*WebSocketSettings, @ptrCast(@alignCast(fio.websocket_udata_get(handle)))); if (user_provided_settings) |settings| { if (settings.on_open) |on_open| { on_open(settings.context, handle); @@ -83,7 +83,7 @@ pub fn Handler(comptime ContextType: type) type { } fn internal_on_ready(handle: WsHandle) callconv(.C) void { - var user_provided_settings: ?*WebSocketSettings = @as(?*WebSocketSettings, @ptrCast(@alignCast(fio.websocket_udata_get(handle)))); + const user_provided_settings: ?*WebSocketSettings = @as(?*WebSocketSettings, @ptrCast(@alignCast(fio.websocket_udata_get(handle)))); if (user_provided_settings) |settings| { if (settings.on_ready) |on_ready| { on_ready(settings.context, handle); @@ -92,7 +92,7 @@ pub fn Handler(comptime ContextType: type) type { } fn internal_on_shutdown(handle: WsHandle) callconv(.C) void { - var user_provided_settings: ?*WebSocketSettings = @as(?*WebSocketSettings, @ptrCast(@alignCast(fio.websocket_udata_get(handle)))); + const user_provided_settings: ?*WebSocketSettings = @as(?*WebSocketSettings, @ptrCast(@alignCast(fio.websocket_udata_get(handle)))); if (user_provided_settings) |settings| { if (settings.on_shutdown) |on_shutdown| { on_shutdown(settings.context, handle); @@ -101,7 +101,7 @@ pub fn Handler(comptime ContextType: type) type { } fn internal_on_close(uuid: isize, udata: ?*anyopaque) callconv(.C) void { - var user_provided_settings: ?*WebSocketSettings = @as(?*WebSocketSettings, @ptrCast(@alignCast(udata))); + const user_provided_settings: ?*WebSocketSettings = @as(?*WebSocketSettings, @ptrCast(@alignCast(udata))); if (user_provided_settings) |settings| { if (settings.on_close) |on_close| { on_close(settings.context, uuid); @@ -192,7 +192,7 @@ pub fn Handler(comptime ContextType: type) type { /// we need it to look up the ziggified callbacks. pub inline fn subscribe(handle: WsHandle, args: *SubscribeArgs) WebSocketError!usize { if (handle == null) return error.SubscribeError; - var fio_args: fio.websocket_subscribe_s_zigcompat = .{ + const fio_args: fio.websocket_subscribe_s_zigcompat = .{ .ws = handle.?, .channel = util.str2fio(args.channel), .on_message = if (args.on_message) |_| internal_subscription_on_message else null,