mirror of
https://github.com/ziglang/zig.git
synced 2026-01-11 18:05:11 +00:00
CLI: fix only_core_functionality logic
This commit is contained in:
parent
a605bd9887
commit
29156de120
@ -105,13 +105,13 @@ pub const JobQueue = struct {
|
||||
}
|
||||
}
|
||||
|
||||
/// Creates the dependencies.zig file and corresponding `Module` for the
|
||||
/// build runner to obtain via `@import("@dependencies")`.
|
||||
pub fn createDependenciesModule(jq: *JobQueue, buf: *std.ArrayList(u8)) Allocator.Error!void {
|
||||
/// Creates the dependencies.zig source code for the build runner to obtain
|
||||
/// via `@import("@dependencies")`.
|
||||
pub fn createDependenciesSource(jq: *JobQueue, buf: *std.ArrayList(u8)) Allocator.Error!void {
|
||||
const keys = jq.table.keys();
|
||||
|
||||
if (keys.len == 0)
|
||||
return createEmptyDependenciesModule(buf);
|
||||
return createEmptyDependenciesSource(buf);
|
||||
|
||||
try buf.appendSlice("pub const packages = struct {\n");
|
||||
|
||||
@ -188,7 +188,7 @@ pub const JobQueue = struct {
|
||||
try buf.appendSlice("};\n");
|
||||
}
|
||||
|
||||
pub fn createEmptyDependenciesModule(buf: *std.ArrayList(u8)) Allocator.Error!void {
|
||||
pub fn createEmptyDependenciesSource(buf: *std.ArrayList(u8)) Allocator.Error!void {
|
||||
try buf.appendSlice(
|
||||
\\pub const packages = struct {};
|
||||
\\pub const root_deps: []const struct { []const u8, []const u8 } = &.{};
|
||||
|
||||
99
src/main.zig
99
src/main.zig
@ -4831,10 +4831,8 @@ pub fn cmdBuild(gpa: Allocator, arena: Allocator, args: []const []const u8) !voi
|
||||
.root = .{ .root_dir = build_root },
|
||||
.root_src_path = build_zig_basename,
|
||||
};
|
||||
var dependencies_zig_src = std.ArrayList(u8).init(gpa);
|
||||
defer dependencies_zig_src.deinit();
|
||||
if (build_options.only_core_functionality) {
|
||||
try Package.Fetch.createEmptyDependenciesModule(&dependencies_zig_src);
|
||||
try createEmptyDependenciesModule(arena, &main_mod, local_cache_directory);
|
||||
} else {
|
||||
var http_client: std.http.Client = .{ .allocator = gpa };
|
||||
defer http_client.deinit();
|
||||
@ -4890,40 +4888,16 @@ pub fn cmdBuild(gpa: Allocator, arena: Allocator, args: []const []const u8) !voi
|
||||
|
||||
if (fetch_only) return cleanExit();
|
||||
|
||||
try job_queue.createDependenciesModule(&dependencies_zig_src);
|
||||
var source_buf = std.ArrayList(u8).init(gpa);
|
||||
defer source_buf.deinit();
|
||||
try job_queue.createDependenciesSource(&source_buf);
|
||||
const deps_mod = try createDependenciesModule(
|
||||
arena,
|
||||
source_buf.items,
|
||||
&main_mod,
|
||||
local_cache_directory,
|
||||
);
|
||||
|
||||
const deps_mod = m: {
|
||||
// Atomically create the file in a directory named after the hash of its contents.
|
||||
const basename = "dependencies.zig";
|
||||
const rand_int = std.crypto.random.int(u64);
|
||||
const tmp_dir_sub_path = "tmp" ++ fs.path.sep_str ++
|
||||
Package.Manifest.hex64(rand_int);
|
||||
{
|
||||
var tmp_dir = try local_cache_directory.handle.makeOpenPath(tmp_dir_sub_path, .{});
|
||||
defer tmp_dir.close();
|
||||
try tmp_dir.writeFile(basename, dependencies_zig_src.items);
|
||||
}
|
||||
|
||||
var hh: Cache.HashHelper = .{};
|
||||
hh.addBytes(build_options.version);
|
||||
hh.addBytes(dependencies_zig_src.items);
|
||||
const hex_digest = hh.final();
|
||||
|
||||
const o_dir_sub_path = try arena.dupe(u8, "o" ++ fs.path.sep_str ++ hex_digest);
|
||||
try Package.Fetch.renameTmpIntoCache(
|
||||
local_cache_directory.handle,
|
||||
tmp_dir_sub_path,
|
||||
o_dir_sub_path,
|
||||
);
|
||||
|
||||
break :m try Package.Module.create(arena, .{
|
||||
.root = .{
|
||||
.root_dir = local_cache_directory,
|
||||
.sub_path = o_dir_sub_path,
|
||||
},
|
||||
.root_src_path = basename,
|
||||
});
|
||||
};
|
||||
{
|
||||
// We need a Module for each package's build.zig.
|
||||
const hashes = job_queue.table.keys();
|
||||
@ -4944,7 +4918,6 @@ pub fn cmdBuild(gpa: Allocator, arena: Allocator, args: []const []const u8) !voi
|
||||
deps_mod.deps.putAssumeCapacityNoClobber(hash_cloned, m);
|
||||
}
|
||||
}
|
||||
try main_mod.deps.put(arena, "@dependencies", deps_mod);
|
||||
}
|
||||
|
||||
try main_mod.deps.put(arena, "@build", &build_mod);
|
||||
@ -6795,3 +6768,55 @@ fn cmdFetch(
|
||||
|
||||
return cleanExit();
|
||||
}
|
||||
|
||||
fn createEmptyDependenciesModule(
|
||||
arena: Allocator,
|
||||
main_mod: *Package.Module,
|
||||
local_cache_directory: Cache.Directory,
|
||||
) !void {
|
||||
var source = std.ArrayList(u8).init(arena);
|
||||
try Package.Fetch.JobQueue.createEmptyDependenciesSource(&source);
|
||||
_ = try createDependenciesModule(arena, source.items, main_mod, local_cache_directory);
|
||||
}
|
||||
|
||||
/// Creates the dependencies.zig file and corresponding `Package.Module` for the
|
||||
/// build runner to obtain via `@import("@dependencies")`.
|
||||
fn createDependenciesModule(
|
||||
arena: Allocator,
|
||||
source: []const u8,
|
||||
main_mod: *Package.Module,
|
||||
local_cache_directory: Cache.Directory,
|
||||
) !*Package.Module {
|
||||
// Atomically create the file in a directory named after the hash of its contents.
|
||||
const basename = "dependencies.zig";
|
||||
const rand_int = std.crypto.random.int(u64);
|
||||
const tmp_dir_sub_path = "tmp" ++ fs.path.sep_str ++
|
||||
Package.Manifest.hex64(rand_int);
|
||||
{
|
||||
var tmp_dir = try local_cache_directory.handle.makeOpenPath(tmp_dir_sub_path, .{});
|
||||
defer tmp_dir.close();
|
||||
try tmp_dir.writeFile(basename, source);
|
||||
}
|
||||
|
||||
var hh: Cache.HashHelper = .{};
|
||||
hh.addBytes(build_options.version);
|
||||
hh.addBytes(source);
|
||||
const hex_digest = hh.final();
|
||||
|
||||
const o_dir_sub_path = try arena.dupe(u8, "o" ++ fs.path.sep_str ++ hex_digest);
|
||||
try Package.Fetch.renameTmpIntoCache(
|
||||
local_cache_directory.handle,
|
||||
tmp_dir_sub_path,
|
||||
o_dir_sub_path,
|
||||
);
|
||||
|
||||
const deps_mod = try Package.Module.create(arena, .{
|
||||
.root = .{
|
||||
.root_dir = local_cache_directory,
|
||||
.sub_path = o_dir_sub_path,
|
||||
},
|
||||
.root_src_path = basename,
|
||||
});
|
||||
try main_mod.deps.put(arena, "@dependencies", deps_mod);
|
||||
return deps_mod;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user