make docgen accept --zig-lib-dir

This commit is contained in:
Andrew Kelley 2023-03-16 15:43:51 -07:00
parent b3af5d076c
commit b4d58e93ea
2 changed files with 64 additions and 26 deletions

View file

@ -47,6 +47,9 @@ pub fn build(b: *std.Build) !void {
const docgen_cmd = b.addRunArtifact(docgen_exe); const docgen_cmd = b.addRunArtifact(docgen_exe);
docgen_cmd.addArgs(&.{ "--zig", b.zig_exe }); docgen_cmd.addArgs(&.{ "--zig", b.zig_exe });
if (b.zig_lib_dir) |p| {
docgen_cmd.addArgs(&.{ "--zig-lib-dir", p });
}
docgen_cmd.addFileSourceArg(.{ .path = "doc/langref.html.in" }); docgen_cmd.addFileSourceArg(.{ .path = "doc/langref.html.in" });
const langref_file = docgen_cmd.addOutputFileArg("langref.html"); const langref_file = docgen_cmd.addOutputFileArg("langref.html");
const install_langref = b.addInstallFileWithDir(langref_file, .prefix, "doc/langref.html"); const install_langref = b.addInstallFileWithDir(langref_file, .prefix, "doc/langref.html");

View file

@ -28,10 +28,10 @@ const usage =
\\ \\
; ;
fn errorf(comptime format: []const u8, args: anytype) noreturn { fn fatal(comptime format: []const u8, args: anytype) noreturn {
const stderr = io.getStdErr().writer(); const stderr = io.getStdErr().writer();
stderr.print("error: " ++ format, args) catch {}; stderr.print("error: " ++ format ++ "\n", args) catch {};
process.exit(1); process.exit(1);
} }
@ -45,6 +45,7 @@ pub fn main() !void {
if (!args_it.skip()) @panic("expected self arg"); if (!args_it.skip()) @panic("expected self arg");
var zig_exe: []const u8 = "zig"; var zig_exe: []const u8 = "zig";
var opt_zig_lib_dir: ?[]const u8 = null;
var do_code_tests = true; var do_code_tests = true;
var files = [_][]const u8{ "", "" }; var files = [_][]const u8{ "", "" };
@ -59,24 +60,29 @@ pub fn main() !void {
if (args_it.next()) |param| { if (args_it.next()) |param| {
zig_exe = param; zig_exe = param;
} else { } else {
errorf("expected parameter after --zig\n", .{}); fatal("expected parameter after --zig", .{});
}
} else if (mem.eql(u8, arg, "--zig-lib-dir")) {
if (args_it.next()) |param| {
opt_zig_lib_dir = param;
} else {
fatal("expected parameter after --zig-lib-dir", .{});
} }
} else if (mem.eql(u8, arg, "--skip-code-tests")) { } else if (mem.eql(u8, arg, "--skip-code-tests")) {
do_code_tests = false; do_code_tests = false;
} else { } else {
errorf("unrecognized option: '{s}'\n", .{arg}); fatal("unrecognized option: '{s}'", .{arg});
} }
} else { } else {
if (i > 1) { if (i > 1) {
errorf("too many arguments\n", .{}); fatal("too many arguments", .{});
} }
files[i] = arg; files[i] = arg;
i += 1; i += 1;
} }
} }
if (i < 2) { if (i < 2) {
errorf("not enough arguments\n", .{}); fatal("not enough arguments", .{});
process.exit(1);
} }
var in_file = try fs.cwd().openFile(files[0], .{ .mode = .read_only }); var in_file = try fs.cwd().openFile(files[0], .{ .mode = .read_only });
@ -95,7 +101,7 @@ pub fn main() !void {
try fs.cwd().makePath(tmp_dir_name); try fs.cwd().makePath(tmp_dir_name);
defer fs.cwd().deleteTree(tmp_dir_name) catch {}; defer fs.cwd().deleteTree(tmp_dir_name) catch {};
try genHtml(allocator, &tokenizer, &toc, buffered_writer.writer(), zig_exe, do_code_tests); try genHtml(allocator, &tokenizer, &toc, buffered_writer.writer(), zig_exe, opt_zig_lib_dir, do_code_tests);
try buffered_writer.flush(); try buffered_writer.flush();
} }
@ -1268,6 +1274,7 @@ fn genHtml(
toc: *Toc, toc: *Toc,
out: anytype, out: anytype,
zig_exe: []const u8, zig_exe: []const u8,
opt_zig_lib_dir: ?[]const u8,
do_code_tests: bool, do_code_tests: bool,
) !void { ) !void {
var progress = Progress{ .dont_print_on_dumb = true }; var progress = Progress{ .dont_print_on_dumb = true };
@ -1278,7 +1285,7 @@ fn genHtml(
try env_map.put("ZIG_DEBUG_COLOR", "1"); try env_map.put("ZIG_DEBUG_COLOR", "1");
const host = try std.zig.system.NativeTargetInfo.detect(.{}); const host = try std.zig.system.NativeTargetInfo.detect(.{});
const builtin_code = try getBuiltinCode(allocator, &env_map, zig_exe); const builtin_code = try getBuiltinCode(allocator, &env_map, zig_exe, opt_zig_lib_dir);
for (toc.nodes) |node| { for (toc.nodes) |node| {
defer root_node.completeOne(); defer root_node.completeOne();
@ -1370,6 +1377,9 @@ fn genHtml(
"--color", "on", "--color", "on",
"--enable-cache", tmp_source_file_name, "--enable-cache", tmp_source_file_name,
}); });
if (opt_zig_lib_dir) |zig_lib_dir| {
try build_args.appendSlice(&.{ "--zig-lib-dir", zig_lib_dir });
}
try shell_out.print("$ zig build-exe {s} ", .{name_plus_ext}); try shell_out.print("$ zig build-exe {s} ", .{name_plus_ext});
@ -1512,8 +1522,12 @@ fn genHtml(
defer test_args.deinit(); defer test_args.deinit();
try test_args.appendSlice(&[_][]const u8{ try test_args.appendSlice(&[_][]const u8{
zig_exe, "test", tmp_source_file_name, zig_exe, "test",
tmp_source_file_name,
}); });
if (opt_zig_lib_dir) |zig_lib_dir| {
try test_args.appendSlice(&.{ "--zig-lib-dir", zig_lib_dir });
}
try shell_out.print("$ zig test {s}.zig ", .{code.name}); try shell_out.print("$ zig test {s}.zig ", .{code.name});
switch (code.mode) { switch (code.mode) {
@ -1564,12 +1578,13 @@ fn genHtml(
defer test_args.deinit(); defer test_args.deinit();
try test_args.appendSlice(&[_][]const u8{ try test_args.appendSlice(&[_][]const u8{
zig_exe, zig_exe, "test",
"test", "--color", "on",
"--color",
"on",
tmp_source_file_name, tmp_source_file_name,
}); });
if (opt_zig_lib_dir) |zig_lib_dir| {
try test_args.appendSlice(&.{ "--zig-lib-dir", zig_lib_dir });
}
try shell_out.print("$ zig test {s}.zig ", .{code.name}); try shell_out.print("$ zig test {s}.zig ", .{code.name});
switch (code.mode) { switch (code.mode) {
@ -1624,8 +1639,12 @@ fn genHtml(
defer test_args.deinit(); defer test_args.deinit();
try test_args.appendSlice(&[_][]const u8{ try test_args.appendSlice(&[_][]const u8{
zig_exe, "test", tmp_source_file_name, zig_exe, "test",
tmp_source_file_name,
}); });
if (opt_zig_lib_dir) |zig_lib_dir| {
try test_args.appendSlice(&.{ "--zig-lib-dir", zig_lib_dir });
}
var mode_arg: []const u8 = ""; var mode_arg: []const u8 = "";
switch (code.mode) { switch (code.mode) {
.Debug => {}, .Debug => {},
@ -1684,17 +1703,17 @@ fn genHtml(
defer build_args.deinit(); defer build_args.deinit();
try build_args.appendSlice(&[_][]const u8{ try build_args.appendSlice(&[_][]const u8{
zig_exe, zig_exe, "build-obj",
"build-obj", "--color", "on",
"--name", code.name,
tmp_source_file_name, tmp_source_file_name,
"--color",
"on",
"--name",
code.name,
try std.fmt.allocPrint(allocator, "-femit-bin={s}{c}{s}", .{ try std.fmt.allocPrint(allocator, "-femit-bin={s}{c}{s}", .{
tmp_dir_name, fs.path.sep, name_plus_obj_ext, tmp_dir_name, fs.path.sep, name_plus_obj_ext,
}), }),
}); });
if (opt_zig_lib_dir) |zig_lib_dir| {
try build_args.appendSlice(&.{ "--zig-lib-dir", zig_lib_dir });
}
try shell_out.print("$ zig build-obj {s}.zig ", .{code.name}); try shell_out.print("$ zig build-obj {s}.zig ", .{code.name});
@ -1758,13 +1777,15 @@ fn genHtml(
defer test_args.deinit(); defer test_args.deinit();
try test_args.appendSlice(&[_][]const u8{ try test_args.appendSlice(&[_][]const u8{
zig_exe, zig_exe, "build-lib",
"build-lib",
tmp_source_file_name, tmp_source_file_name,
try std.fmt.allocPrint(allocator, "-femit-bin={s}{s}{s}", .{ try std.fmt.allocPrint(allocator, "-femit-bin={s}{s}{s}", .{
tmp_dir_name, fs.path.sep_str, bin_basename, tmp_dir_name, fs.path.sep_str, bin_basename,
}), }),
}); });
if (opt_zig_lib_dir) |zig_lib_dir| {
try test_args.appendSlice(&.{ "--zig-lib-dir", zig_lib_dir });
}
try shell_out.print("$ zig build-lib {s}.zig ", .{code.name}); try shell_out.print("$ zig build-lib {s}.zig ", .{code.name});
switch (code.mode) { switch (code.mode) {
@ -1829,9 +1850,23 @@ fn exec(allocator: Allocator, env_map: *process.EnvMap, args: []const []const u8
return result; return result;
} }
fn getBuiltinCode(allocator: Allocator, env_map: *process.EnvMap, zig_exe: []const u8) ![]const u8 { fn getBuiltinCode(
const result = try exec(allocator, env_map, &[_][]const u8{ zig_exe, "build-obj", "--show-builtin" }); allocator: Allocator,
return result.stdout; env_map: *process.EnvMap,
zig_exe: []const u8,
opt_zig_lib_dir: ?[]const u8,
) ![]const u8 {
if (opt_zig_lib_dir) |zig_lib_dir| {
const result = try exec(allocator, env_map, &.{
zig_exe, "build-obj", "--show-builtin", "--zig-lib-dir", zig_lib_dir,
});
return result.stdout;
} else {
const result = try exec(allocator, env_map, &.{
zig_exe, "build-obj", "--show-builtin",
});
return result.stdout;
}
} }
fn dumpArgs(args: []const []const u8) void { fn dumpArgs(args: []const []const u8) void {