| ... | ... | @@ -620,6 +620,35 @@ fn make(step: *Step, options: Step.MakeOptions) !void { |
| 620 | 620 | var man = b.graph.cache.obtain(); |
| 621 | 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 | 652 | for (run.argv.items) |arg| { |
| 624 | 653 | switch (arg) { |
| 625 | 654 | .bytes => |bytes| { |