authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2021-06-20 13:43:38 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2021-06-20 13:43:38 -07:00
log21e9824c43eb8d7b4bee9b3d07e80dbca623b82f
tree03d5d69371056aaf8929c8d64aee533679300864
parent0d3e261e8a6b3de11f42fe209c1a5822de0d7df8

allow defining dependencies when dep doesnt have a zig.mod


4 files changed, 14 insertions(+), 6 deletions(-)

src/common.zig+3-2
...@@ -180,7 +180,7 @@ fn get_moddir(basedir: []const u8, d: u.Dep, parent_name: []const u8, options: C...@@ -180,7 +180,7 @@ fn get_moddir(basedir: []const u8, d: u.Dep, parent_name: []const u8, options: C
180 }180 }
181}181}
182182
183fn get_module_from_dep(list: *std.ArrayList(u.Module), d: u.Dep, dir: []const u8, parent_name: []const u8, options: CollectOptions) !void {183pub fn get_module_from_dep(list: *std.ArrayList(u.Module), d: u.Dep, dir: []const u8, parent_name: []const u8, options: CollectOptions) anyerror!void {
184 const moddir = try get_moddir(dir, d, parent_name, options);184 const moddir = try get_moddir(dir, d, parent_name, options);
185 switch (d.type) {185 switch (d.type) {
186 .system_lib => {186 .system_lib => {
...@@ -203,7 +203,7 @@ fn get_module_from_dep(list: *std.ArrayList(u.Module), d: u.Dep, dir: []const u8...@@ -203,7 +203,7 @@ fn get_module_from_dep(list: *std.ArrayList(u.Module), d: u.Dep, dir: []const u8
203 var dd = try collect_deps(dir, try u.concat(&.{ moddir, "/zig.mod" }), options) catch |e| switch (e) {203 var dd = try collect_deps(dir, try u.concat(&.{ moddir, "/zig.mod" }), options) catch |e| switch (e) {
204 error.FileNotFound => {204 error.FileNotFound => {
205 if (d.main.len > 0 or d.c_include_dirs.len > 0 or d.c_source_files.len > 0) {205 if (d.main.len > 0 or d.c_include_dirs.len > 0 or d.c_source_files.len > 0) {
206 var mod_from = try u.Module.from(d);206 var mod_from = try u.Module.from(d, dir, options);
207 if (d.type != .local) mod_from.clean_path = u.trim_prefix(moddir, dir)[1..];207 if (d.type != .local) mod_from.clean_path = u.trim_prefix(moddir, dir)[1..];
208 if (mod_from.is_for_this()) try list.append(mod_from);208 if (mod_from.is_for_this()) try list.append(mod_from);
209 }209 }
...@@ -283,6 +283,7 @@ fn add_files_package(pkg_name: []const u8, dirs: []const []const u8, list: *std....@@ -283,6 +283,7 @@ fn add_files_package(pkg_name: []const u8, dirs: []const []const u8, list: *std.
283 .only_os = &.{},283 .only_os = &.{},
284 .except_os = &.{},284 .except_os = &.{},
285 .yaml = null,285 .yaml = null,
286 .deps = &.{},
286 };287 };
287 try get_module_from_dep(list, d, destination, parent_name, .{288 try get_module_from_dep(list, d, destination, parent_name, .{
288 .log = false,289 .log = false,
src/util/dep.zig+1
...@@ -24,6 +24,7 @@ pub const Dep = struct {...@@ -24,6 +24,7 @@ pub const Dep = struct {
24 only_os: []const []const u8,24 only_os: []const []const u8,
25 except_os: []const []const u8,25 except_os: []const []const u8,
26 yaml: ?yaml.Mapping,26 yaml: ?yaml.Mapping,
27 deps: []const u.Dep,
2728
28 pub fn clean_path(self: Dep) ![]const u8 {29 pub fn clean_path(self: Dep) ![]const u8 {
29 if (self.type == .local) {30 if (self.type == .local) {
src/util/modfile.zig+2-2
...@@ -45,7 +45,6 @@ pub const ModFile = struct {...@@ -45,7 +45,6 @@ pub const ModFile = struct {
45 u.assert(false, "name may not contain any '/'", .{});45 u.assert(false, "name may not contain any '/'", .{});
46 }46 }
4747
48
49 return Self{48 return Self{
50 .alloc = alloc,49 .alloc = alloc,
51 .id = if (id.len == 0) try u.random_string(48) else id,50 .id = if (id.len == 0) try u.random_string(48) else id,
...@@ -62,7 +61,7 @@ pub const ModFile = struct {...@@ -62,7 +61,7 @@ pub const ModFile = struct {
62 };61 };
63 }62 }
6463
65 fn dep_list_by_name(alloc: *std.mem.Allocator, mapping: yaml.Mapping, prop: []const u8) ![]const u.Dep {64 fn dep_list_by_name(alloc: *std.mem.Allocator, mapping: yaml.Mapping, prop: []const u8) anyerror![]const u.Dep {
66 const dep_list = &std.ArrayList(u.Dep).init(alloc);65 const dep_list = &std.ArrayList(u.Dep).init(alloc);
67 if (mapping.get(prop)) |dep_seq| {66 if (mapping.get(prop)) |dep_seq| {
68 if (dep_seq == .sequence) {67 if (dep_seq == .sequence) {
...@@ -115,6 +114,7 @@ pub const ModFile = struct {...@@ -115,6 +114,7 @@ pub const ModFile = struct {
115 .only_os = try u.list_remove(try u.split(item.mapping.get_string("only_os"), ","), ""),114 .only_os = try u.list_remove(try u.split(item.mapping.get_string("only_os"), ","), ""),
116 .except_os = try u.list_remove(try u.split(item.mapping.get_string("except_os"), ","), ""),115 .except_os = try u.list_remove(try u.split(item.mapping.get_string("except_os"), ","), ""),
117 .yaml = item.mapping,116 .yaml = item.mapping,
117 .deps = try dep_list_by_name(alloc, item.mapping, "dependencies"),
118 });118 });
119 }119 }
120 }120 }
src/util/module.zig+8-2
...@@ -4,6 +4,7 @@ const builtin = std.builtin;...@@ -4,6 +4,7 @@ const builtin = std.builtin;
44
5const u = @import("index.zig");5const u = @import("index.zig");
6const yaml = @import("./yaml.zig");6const yaml = @import("./yaml.zig");
7const common = @import("./../common.zig");
78
8//9//
9//10//
...@@ -23,7 +24,12 @@ pub const Module = struct {...@@ -23,7 +24,12 @@ pub const Module = struct {
23 deps: []Module,24 deps: []Module,
24 clean_path: []const u8,25 clean_path: []const u8,
2526
26 pub fn from(dep: u.Dep) !Module {27 pub fn from(dep: u.Dep, dir: []const u8, options: common.CollectOptions) !Module {
28 const moddeps = &std.ArrayList(Module).init(gpa);
29 defer moddeps.deinit();
30 for (dep.deps) |d| {
31 try common.get_module_from_dep(moddeps, d, dir, dep.name, options);
32 }
27 return Module{33 return Module{
28 .is_sys_lib = false,34 .is_sys_lib = false,
29 .id = if (dep.id.len > 0) dep.id else try u.random_string(48),35 .id = if (dep.id.len > 0) dep.id else try u.random_string(48),
...@@ -32,7 +38,7 @@ pub const Module = struct {...@@ -32,7 +38,7 @@ pub const Module = struct {
32 .c_include_dirs = dep.c_include_dirs,38 .c_include_dirs = dep.c_include_dirs,
33 .c_source_flags = dep.c_source_flags,39 .c_source_flags = dep.c_source_flags,
34 .c_source_files = dep.c_source_files,40 .c_source_files = dep.c_source_files,
35 .deps = &.{},41 .deps = moddeps.toOwnedSlice(),
36 .clean_path = try dep.clean_path(),42 .clean_path = try dep.clean_path(),
37 .only_os = dep.only_os,43 .only_os = dep.only_os,
38 .except_os = dep.except_os,44 .except_os = dep.except_os,