From 5fb120a3c0e1b252fb85e8259b481c28b9dba465 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Sun, 17 May 2026 20:16:56 -0700 Subject: [PATCH] maker: implement cleanTmpFiles --- lib/compiler/Maker.zig | 23 +++++++++++++---------- lib/std/Build/Configuration.zig | 8 ++++++++ 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/lib/compiler/Maker.zig b/lib/compiler/Maker.zig index dcc8cb21f72b8b572cac85e45aefea69b7893a96..e8dff14a4611f23a80637129c6e967addccf5453 100644 --- a/lib/compiler/Maker.zig +++ b/lib/compiler/Maker.zig @@ -833,7 +833,7 @@ fn makeStepNames( var pending_count: usize = 0; var total_compile_errors: usize = 0; - var cleanup_task = io.async(cleanTmpFiles, .{ io, step_stack.keys() }); + var cleanup_task = io.async(cleanTmpFiles, .{ maker, step_stack.keys() }); defer cleanup_task.await(io); for (step_stack.keys()) |step_index| { @@ -1677,17 +1677,20 @@ fn fatalWithHint(comptime f: []const u8, args: anytype) noreturn { fatal(f, args); } -fn cleanTmpFiles(io: Io, steps: []const Configuration.Step.Index) void { - std.log.err("TODO implement cleanTmpFiles", .{}); - if (true) return; +fn cleanTmpFiles(maker: *Maker, steps: []const Configuration.Step.Index) void { + const graph = maker.graph; + const io = graph.io; + const conf = &maker.scanned_config.configuration; for (steps) |step_index| { - const wf = step_index.cast(std.Build.Step.WriteFile) orelse continue; - if (wf.mode != .tmp) continue; - const path = wf.generated_directory.path orelse continue; - Dir.cwd().deleteTree(io, path) catch |err| { - log.warn("failed to delete {s}: {t}", .{ path, err }); - }; + const conf_step = step_index.ptr(conf); + const wf = conf_step.extended.cast(conf, Configuration.Step.WriteFile) orelse continue; + if (wf.flags.mode != .tmp) continue; + const step = maker.stepByIndex(step_index); + if (step.state != .success) continue; + const tmp_path = generatedPath(maker, wf.generated_directory).*; + tmp_path.root_dir.handle.deleteTree(io, tmp_path.subPathOrDot()) catch |err| + log.warn("failed to delete temporary path {f}: {t}", .{ tmp_path, err }); } } diff --git a/lib/std/Build/Configuration.zig b/lib/std/Build/Configuration.zig index e79d9c58dc54376a649864e13e0e699a38c80723..34cd8c62e7940f616637d37074cb28c6fe3dd029 100644 --- a/lib/std/Build/Configuration.zig +++ b/lib/std/Build/Configuration.zig @@ -2513,6 +2513,14 @@ pub const Storage = enum { return base_flags.tag; } + pub fn cast(this: @This(), c: *const Configuration, comptime S: type) ?S { + const wanted_tag = @typeInfo(S.Flags).@"struct".fields[0].defaultValue().?; + const base_flags: BaseFlags = @bitCast(c.extra[@intFromEnum(this)]); + if (base_flags.tag != wanted_tag) return null; + var i: usize = @intFromEnum(this); + return data(c.extra, &i, S); + } + pub fn get(this: @This(), buffer: []const u32) U { var i: usize = @intFromEnum(this); const base_flags: BaseFlags = @bitCast(buffer[i]); -- 2.54.0