╭─────────────╮ │scroll to top│ ╰─────────────╯ ╭ build.zig ────────────────────────────────────────────────────╮ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰───────────────────────────────────────────────────────────────╯
╭────╮ ╭ clone ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╮ │http│ ssh │ │ ╰────╯ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╯
147 unit_tests.root_module.addImport("haxy", haxy); 148 149 const run_unit_tests = b.addRunArtifact(unit_tests); 150 run_unit_tests.has_side_effects = true; 151 run_unit_tests.step.dependOn(&install_server_exe.step); 152 const test_step = b.step("testnet", "Run network unit tests"); 153 test_step.dependOn(&run_unit_tests.step); 154 } 155 } 156 157 // reads every ANSI-art text file while configuring the build. sorting keeps 158 // the generated module stable when directory iteration order changes. 159 fn ansiArtModule(b: *std.Build) *std.Build.Module { 160 const io = b.graph.io; 161 var dir = b.build_root.handle.openDir(io, "src/embed/ansi", .{ .iterate = true }) catch |err| { 162 std.debug.panic("unable to open src/embed/ansi: {t}", .{err}); 163 }; 164 defer dir.close(io); 165 166 var names: std.ArrayList([]const u8) = .empty; 167 var iter = dir.iterate(); 168 while (iter.next(io) catch |err| std.debug.panic("unable to read src/embed/ansi: {t}", .{err})) |entry| { 169 if (entry.kind != .file or !std.mem.endsWith(u8, entry.name, ".txt")) continue; 170 names.append(b.allocator, b.dupe(entry.name)) catch @panic("OOM"); 171 } 172 std.mem.sort([]const u8, names.items, {}, struct { 173 fn lessThan(_: void, lhs: []const u8, rhs: []const u8) bool { 174 return std.mem.order(u8, lhs, rhs) == .lt; 175 } 176 }.lessThan); 177 if (names.items.len == 0) @panic("src/embed/ansi must contain at least one .txt file"); 178 179 const contents = b.allocator.alloc([]const u8, names.items.len) catch @panic("OOM"); 180 for (names.items, contents) |name, *content| { 181 content.* = dir.readFileAlloc(io, name, b.allocator, .limited(16 * 1024 * 1024)) catch |err| { 182 std.debug.panic("unable to read src/embed/ansi/{s}: {t}", .{ name, err }); 183 }; 184 } 185 186 const options = b.addOptions(); 187 options.addOption([]const []const u8, "art", contents); 188 return options.createModule(); 189 } 190