| author | |
| committer | |
| log | c8f50e0f0659d91a4bb8d6b22f5f8768490e6d65 |
| tree | 073055f5204056d0461ed16da3a883d8bee99918 |
| parent | d95d1b7a27cc74c95fc4933cbe307c107d104c18 |
5 files changed, 106 insertions(+), 1 deletions(-)
build.zig+18| ... | ... | @@ -1,4 +1,5 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | const deps = @import("./deps.zig"); | |
| 2 | 3 | |
| 3 | 4 | pub fn build(b: *std.build.Builder) void { |
| 4 | 5 | // Standard target options allows the person running `zig build` to choose |
| ... | ... | @@ -24,4 +25,21 @@ pub fn build(b: *std.build.Builder) void { |
| 24 | 25 | |
| 25 | 26 | const run_step = b.step("run", "Run the app"); |
| 26 | 27 | run_step.dependOn(&run_cmd.step); |
| 28 | ||
| 29 | // | |
| 30 | ||
| 31 | const exe2 = b.addExecutable("generate", "generate.zig"); | |
| 32 | exe2.setTarget(target); | |
| 33 | exe2.setBuildMode(mode); | |
| 34 | deps.addAllTo(exe2); | |
| 35 | exe2.install(); | |
| 36 | ||
| 37 | const run_cmd2 = exe2.run(); | |
| 38 | run_cmd2.step.dependOn(b.getInstallStep()); | |
| 39 | if (b.args) |args| { | |
| 40 | run_cmd2.addArgs(args); | |
| 41 | } | |
| 42 | ||
| 43 | const run_step2 = b.step("gen", "generate the list"); | |
| 44 | run_step2.dependOn(&run_cmd2.step); | |
| 27 | 45 | } |
generate.zig created+71| ... | ... | @@ -0,0 +1,71 @@ |
| 1 | //! Run this with `zig build gen` | |
| 2 | ||
| 3 | const std = @import("std"); | |
| 4 | const zfetch = @import("zfetch"); | |
| 5 | const json = @import("json"); | |
| 6 | ||
| 7 | pub fn main() !void { | |
| 8 | var gpa = std.heap.GeneralPurposeAllocator(.{}){}; | |
| 9 | const alloc = &gpa.allocator; | |
| 10 | ||
| 11 | const f = try std.fs.cwd().createFile("src/lib.zig", .{}); | |
| 12 | const w = f.writer(); | |
| 13 | ||
| 14 | { | |
| 15 | std.log.info("spdx", .{}); | |
| 16 | const val = try simple_fetch(alloc, "https://raw.githubusercontent.com/spdx/license-list-data/master/json/licenses.json"); | |
| 17 | ||
| 18 | try w.writeAll("// SPDX License Data generated from https://github.com/spdx/license-list-data\n"); | |
| 19 | try w.writeAll("//\n"); | |
| 20 | try w.print("// Last generated from version {s}\n", .{val.get("licenseListVersion").?.String}); | |
| 21 | try w.writeAll("//\n"); | |
| 22 | ||
| 23 | try w.writeAll("\n"); | |
| 24 | try w.writeAll( | |
| 25 | \\pub const License = struct { | |
| 26 | \\ isOsiApproved: bool, | |
| 27 | \\ url: []const u8, | |
| 28 | \\}; | |
| 29 | \\ | |
| 30 | ); | |
| 31 | ||
| 32 | var licenses = val.get("licenses").?.Array; | |
| 33 | std.sort.sort(json.Value, licenses, {}, spdxlicenseLessThan); | |
| 34 | ||
| 35 | try w.writeAll("\n"); | |
| 36 | try w.writeAll("pub const spdx = struct {\n"); | |
| 37 | for (licenses) |lic| { | |
| 38 | try w.print(" pub const @\"{s}\" = License{{.isOsiApproved = {}, .url = \"{s}\"}};\n", .{ | |
| 39 | lic.get("licenseId").?.String, | |
| 40 | lic.get("isOsiApproved").?.Bool, | |
| 41 | lic.get("seeAlso").?.Array[0].String, | |
| 42 | }); | |
| 43 | } | |
| 44 | try w.writeAll("};\n"); | |
| 45 | ||
| 46 | try w.writeAll("\n"); | |
| 47 | try w.writeAll("pub const osi = &[_][]const u8{\n"); | |
| 48 | for (licenses) |lic| { | |
| 49 | if (!lic.get("isOsiApproved").?.Bool) continue; | |
| 50 | try w.print(" \"{s}\",\n", .{lic.get("licenseId").?.String}); | |
| 51 | } | |
| 52 | try w.writeAll("};\n"); | |
| 53 | } | |
| 54 | } | |
| 55 | ||
| 56 | pub fn simple_fetch(alloc: *std.mem.Allocator, url: []const u8) !json.Value { | |
| 57 | const req = try zfetch.Request.init(alloc, url, null); | |
| 58 | defer req.deinit(); | |
| 59 | try req.do(.GET, null, null); | |
| 60 | const r = req.reader(); | |
| 61 | const body_content = try r.readAllAlloc(alloc, std.math.maxInt(usize)); | |
| 62 | const val = try json.parse(alloc, body_content); | |
| 63 | return val; | |
| 64 | } | |
| 65 | ||
| 66 | fn spdxlicenseLessThan(context: void, lhs: json.Value, rhs: json.Value) bool { | |
| 67 | _ = context; | |
| 68 | const l = lhs.get("licenseId").?.String; | |
| 69 | const r = rhs.get("licenseId").?.String; | |
| 70 | return std.mem.lessThan(u8, l, r); | |
| 71 | } |
zig.mod+4-1| ... | ... | @@ -2,4 +2,7 @@ id: 0npcrzfdlrvkf44mzjo8bduj9gmqyefo0j3rstt6b0pm2r6r |
| 2 | 2 | name: licenses |
| 3 | 3 | main: src/lib.zig |
| 4 | 4 | license: MIT |
| 5 | dependencies: | |
| 5 | ||
| 6 | dev_dependencies: | |
| 7 | - src: git https://github.com/truemedian/zfetch | |
| 8 | - src: git https://github.com/nektro/zig-json |
zigmod.lock created+7| ... | ... | @@ -0,0 +1,7 @@ |
| 1 | 2 | |
| 2 | git https://github.com/truemedian/zfetch commit-8bbc7b34cd417794841e1432585334bc969dfe83 | |
| 3 | git https://github.com/truemedian/hzzp commit-2d30bddae3bf1eaecde5144490307604efe76f2a | |
| 4 | git https://github.com/alexnask/iguanaTLS commit-0d39a361639ad5469f8e4dcdaea35446bbe54b48 | |
| 5 | git https://github.com/MasterQ32/zig-network commit-b9c91769d8ebd626c8e45b2abb05cbc28ccc50da | |
| 6 | git https://github.com/MasterQ32/zig-uri commit-52cdd2061bec0579519f0d30280597f3a1db8b75 | |
| 7 | git https://github.com/nektro/zig-json commit-72e555fbc0776f2600aee19b01e5ab1855ebec7a |
zigmod.sum created+6| ... | ... | @@ -0,0 +1,6 @@ |
| 1 | blake3-e3072f7fb47e86d53c9a1879e254ba1af55941153fd5f6752ec659b2f14854c9 git/github.com/truemedian/zfetch | |
| 2 | blake3-98982125d0fbedc62e179e62081d2797a2b8a3623c42f9fd5d72cd56d6350714 git/github.com/truemedian/hzzp | |
| 3 | blake3-e6901bd7432450d5b22b01880cc7fa3fa2433e766a527206f18b29c67c1349bb git/github.com/alexnask/iguanaTLS | |
| 4 | blake3-21f91e48333ac0ca7f4704c96352831c25216e7056d02ce24de95d03fc942246 git/github.com/MasterQ32/zig-network | |
| 5 | blake3-030ebb03f1ed21122e681b06786bea6f2f1b810e8eb9f2029d0eee4f4fb3103f git/github.com/MasterQ32/zig-uri | |
| 6 | blake3-1893709ffc6359c5f9cd2f9409abccf78a94ed37bb2c6dd075c603356d17c94b git/github.com/nektro/zig-json |