From 59c8937146ef911bfc08850a4783a2cc7da9305e Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Sun, 14 Feb 2021 17:57:09 -0800 Subject: [PATCH] add generation script --- generate.sh | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100755 generate.sh diff --git a/generate.sh b/generate.sh new file mode 100755 index 0000000000000000000000000000000000000000..e97139ff224d7b14eb4a828b67a150aa35817d23 --- /dev/null +++ b/generate.sh @@ -0,0 +1,91 @@ +#!/usr/bin/env bash + +set -e + +data_url="https://raw.githubusercontent.com/spdx/license-list-data/master/json/licenses.json" +out_path="src/lib.zig" +file=$(curl -s $data_url) + +do_print() { + echo $@ >> $out_path +} +print_tab() { + printf " " >> $out_path +} +do_filter() { + echo $file | jq --raw-output --compact-output "$1" +} +sub_filter() { + echo "$1" | jq --raw-output --compact-output "$2" +} + +echo "// SPDX License Data generated from $data_url" > $out_path +do_print "//" +do_print "//" "Last generated from version" $(do_filter '.licenseListVersion') +do_print + +do_print +do_print "pub const License = struct {" +print_tab; do_print "isOsiApproved: bool," +print_tab; do_print "isFsfLibre: bool," +print_tab; do_print "url: []const u8," +do_print "};" + +# +# +echo "spdx:" +do_print +do_print "pub const spdx = struct {" +list=$(do_filter '.licenses[] | { licenseId, isOsiApproved, isFsfLibre, url:.seeAlso[0] }') +for lic in $list +do + lic_id=$(sub_filter $lic '.licenseId') + + lic_obj=$(sub_filter $lic '{ isOsiApproved, isFsfLibre, url }') + lic_obj=${lic_obj//\":/ = } + lic_obj=${lic_obj//,\"/, .} + lic_obj=${lic_obj//\{\"/\{\.} + lic_obj=${lic_obj//null/false} + + printf " " >> $out_path + do_print "pub const @\"$lic_id\" = License$lic_obj;" + printf "|" +done +do_print "};" +echo + +# +# +echo "osi:" +do_print +do_print "pub const osi = &[_][]const u8{" +for lic in $list +do + lic_id=$(sub_filter $lic '.licenseId') + valid=$(sub_filter $lic '.isOsiApproved') + if [[ $valid == "true" ]] + then + print_tab; do_print "\"$lic_id\"," + fi + printf "|" +done +do_print "};" +echo + +# +# +echo "fsf:" +do_print +do_print "pub const fsf = &[_][]const u8{" +for lic in $list +do + lic_id=$(sub_filter $lic '.licenseId') + valid=$(sub_filter $lic '.isFsfLibre') + if [[ $valid == "true" ]] + then + print_tab; do_print "\"$lic_id\"," + fi + printf "|" +done +do_print "};" +echo -- 2.54.0