From 3fb6bb144998de72d03b58e7c1daf134e2438373 Mon Sep 17 00:00:00 2001 From: Ian Johnson Date: Wed, 27 Mar 2024 23:25:21 -0400 Subject: [PATCH] std-docs: include builtin module in sources.tar Now that `-femit-docs` includes all modules, including the builtin module, in the generated source tarball, it makes sense to apply the same logic to the std-docs server. std-docs constructs its own tarball, so a different approach is needed to achieve the same end result. --- lib/compiler/std-docs.zig | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/lib/compiler/std-docs.zig b/lib/compiler/std-docs.zig index 93a04a28e5..d86be67702 100644 --- a/lib/compiler/std-docs.zig +++ b/lib/compiler/std-docs.zig @@ -177,6 +177,26 @@ fn serveSourcesTar(request: *std.http.Server.Request, context: *Context) !void { try w.writeFile(file); try w.writeByteNTimes(0, padding); } + + { + // Since this command is JIT compiled, the builtin module available in + // this source file corresponds to the user's host system. + const builtin_zig = @embedFile("builtin"); + + var file_header = std.tar.output.Header.init(); + file_header.typeflag = .regular; + try file_header.setPath("builtin", "builtin.zig"); + try file_header.setSize(builtin_zig.len); + try file_header.updateChecksum(); + try w.writeAll(std.mem.asBytes(&file_header)); + try w.writeAll(builtin_zig); + const padding = p: { + const remainder = builtin_zig.len % 512; + break :p if (remainder > 0) 512 - remainder else 0; + }; + try w.writeByteNTimes(0, padding); + } + // intentionally omitting the pointless trailer //try w.writeByteNTimes(0, 512 * 2); try response.end();