| ... | @@ -620,6 +620,35 @@ fn make(step: *Step, options: Step.MakeOptions) !void { | ... | @@ -620,6 +620,35 @@ fn make(step: *Step, options: Step.MakeOptions) !void { |
| 620 | var man = b.graph.cache.obtain(); | 620 | var man = b.graph.cache.obtain(); |
| 621 | defer man.deinit(); | 621 | defer man.deinit(); |
| 622 | | 622 | |
| | 623 | if (run.env_map) |env_map| { |
| | 624 | const KV = struct { []const u8, []const u8 }; |
| | 625 | var kv_pairs = try std.ArrayList(KV).initCapacity(arena, env_map.count()); |
| | 626 | var iter = env_map.iterator(); |
| | 627 | while (iter.next()) |entry| { |
| | 628 | kv_pairs.appendAssumeCapacity(.{ entry.key_ptr.*, entry.value_ptr.* }); |
| | 629 | } |
| | 630 | |
| | 631 | std.mem.sortUnstable(KV, kv_pairs.items, {}, struct { |
| | 632 | fn lessThan(_: void, kv1: KV, kv2: KV) bool { |
| | 633 | const k1 = kv1[0]; |
| | 634 | const k2 = kv2[0]; |
| | 635 | |
| | 636 | if (k1.len != k2.len) return k1.len < k2.len; |
| | 637 | |
| | 638 | for (k1, k2) |c1, c2| { |
| | 639 | if (c1 == c2) continue; |
| | 640 | return c1 < c2; |
| | 641 | } |
| | 642 | unreachable; // two keys cannot be equal |
| | 643 | } |
| | 644 | }.lessThan); |
| | 645 | |
| | 646 | for (kv_pairs.items) |kv| { |
| | 647 | man.hash.addBytes(kv[0]); |
| | 648 | man.hash.addBytes(kv[1]); |
| | 649 | } |
| | 650 | } |
| | 651 | |
| 623 | for (run.argv.items) |arg| { | 652 | for (run.argv.items) |arg| { |
| 624 | switch (arg) { | 653 | switch (arg) { |
| 625 | .bytes => |bytes| { | 654 | .bytes => |bytes| { |