eliminate stderr usage in std.Build make() functions
* Eliminate all uses of `std.debug.print` in make() functions, instead
properly using the step failure reporting mechanism.
* Introduce the concept of skipped build steps. These do not cause the
build to fail, and they do allow their dependants to run.
* RunStep gains a new flag, `skip_foreign_checks` which causes the
RunStep to be skipped if stdio mode is `check` and the binary cannot
be executed due to it being a foreign executable.
- RunStep is improved to automatically use known interpreters to
execute binaries if possible (integrating with flags such as
-fqemu and -fwasmtime). It only does this after attempting a native
execution and receiving a "exec file format" error.
- Update RunStep to use an ArrayList for the checks rather than this
ad-hoc reallocation/copying mechanism.
- `expectStdOutEqual` now also implicitly adds an exit_code==0 check
if there is not already an expected termination. This matches
previously expected behavior from older API and can be overridden by
directly setting the checks array.
* Add `dest_sub_path` to `InstallArtifactStep` which allows choosing an
arbitrary subdirectory relative to the prefix, as well as overriding
the basename.
- Delete the custom InstallWithRename step that I found deep in the
test/ directory.
* WriteFileStep will now update its step display name after the first
file is added.
* Add missing stdout checks to various standalone test case build
scripts.
This commit is contained in:
@@ -12,6 +12,9 @@ artifact: *CompileStep,
|
||||
dest_dir: InstallDir,
|
||||
pdb_dir: ?InstallDir,
|
||||
h_dir: ?InstallDir,
|
||||
/// If non-null, adds additional path components relative to dest_dir, and
|
||||
/// overrides the basename of the CompileStep.
|
||||
dest_sub_path: ?[]const u8,
|
||||
|
||||
pub fn create(owner: *std.Build, artifact: *CompileStep) *InstallArtifactStep {
|
||||
if (artifact.install_step) |s| return s;
|
||||
@@ -40,6 +43,7 @@ pub fn create(owner: *std.Build, artifact: *CompileStep) *InstallArtifactStep {
|
||||
}
|
||||
} else null,
|
||||
.h_dir = if (artifact.kind == .lib and artifact.emit_h) .header else null,
|
||||
.dest_sub_path = null,
|
||||
};
|
||||
self.step.dependOn(&artifact.step);
|
||||
artifact.install_step = self;
|
||||
@@ -71,7 +75,9 @@ fn make(step: *Step, prog_node: *std.Progress.Node) !void {
|
||||
const self = @fieldParentPtr(InstallArtifactStep, "step", step);
|
||||
const dest_builder = self.dest_builder;
|
||||
|
||||
const full_dest_path = dest_builder.getInstallPath(self.dest_dir, self.artifact.out_filename);
|
||||
const dest_sub_path = if (self.dest_sub_path) |sub_path| sub_path else self.artifact.out_filename;
|
||||
const full_dest_path = dest_builder.getInstallPath(self.dest_dir, dest_sub_path);
|
||||
|
||||
try src_builder.updateFile(
|
||||
self.artifact.getOutputSource().getPath(src_builder),
|
||||
full_dest_path,
|
||||
|
||||
Reference in New Issue
Block a user