Unified · Split
| @@ -0,0 +1,8 @@ | ||
| 1 | +#include <u.h> | |
| 2 | +#include "pkg.h" | |
| 3 | + | |
| 4 | +Dev ftrvxmtrx = { | |
| 5 | + .nick = "sigrid", | |
| 6 | + .name = "Sigrid Solveig Haflínudóttir", | |
| 7 | + .email = "ftrvxmtrx@gmail.com", | |
| 8 | +}; | |
| @@ -0,0 +1 @@ | ||
| 1 | +extern Dev ftrvxmtrx; | |
| @@ -0,0 +1,23 @@ | ||
| 1 | +</$objtype/mkfile | |
| 2 | + | |
| 3 | +TARG=pkg | |
| 4 | +BIN=/$objtype/bin | |
| 5 | +MAN=/sys/man/1 | |
| 6 | + | |
| 7 | +HFILES=\ | |
| 8 | + | |
| 9 | +PKGS=\ | |
| 10 | + p_graphics.$O\ | |
| 11 | + p_music.$O\ | |
| 12 | + p_network.$O\ | |
| 13 | + | |
| 14 | +OFILES=\ | |
| 15 | + devs.$O\ | |
| 16 | + pkg.$O\ | |
| 17 | + $PKGS\ | |
| 18 | + | |
| 19 | +default:V: all | |
| 20 | + | |
| 21 | +</sys/src/cmd/mkone | |
| 22 | + | |
| 23 | +install:V: $MAN/$TARG | |
| @@ -0,0 +1,20 @@ | ||
| 1 | +#include <u.h> | |
| 2 | +#include "pkg.h" | |
| 3 | +#include "devs.h" | |
| 4 | + | |
| 5 | +Pkg fontsel = { | |
| 6 | + .name = "fontsel", | |
| 7 | + .ver = "20200420", | |
| 8 | + .src = { | |
| 9 | + .url = "github://ftrvxmtrx/fontsel", | |
| 10 | + .rev = "1648e4b", | |
| 11 | + .hash = "base58 here", | |
| 12 | + }, | |
| 13 | + .meta = { | |
| 14 | + .descr = "Font selector", | |
| 15 | + .web = "http://ftrv.se/_/9", | |
| 16 | + .license = "public domain", | |
| 17 | + .devs = {&ftrvxmtrx}, | |
| 18 | + .cat = {Cgraphics}, | |
| 19 | + }, | |
| 20 | +}; | |
| @@ -0,0 +1,41 @@ | ||
| 1 | +#include <u.h> | |
| 2 | +#include "pkg.h" | |
| 3 | +#include "devs.h" | |
| 4 | + | |
| 5 | +Pkg libtags = { | |
| 6 | + .name = "libtags", | |
| 7 | + .ver = "20191219", | |
| 8 | + .src = { | |
| 9 | + .url = "github://ftrvxmtrx/libtags", | |
| 10 | + .rev = "63b1d8e", | |
| 11 | + .hash = "base58 here", | |
| 12 | + }, | |
| 13 | + .meta = { | |
| 14 | + .descr = "A cross-platform library for reading tags", | |
| 15 | + .web = "http://ftrv.se/_/9", | |
| 16 | + .license = "MIT", | |
| 17 | + .devs = {&ftrvxmtrx}, | |
| 18 | + .flags = Flib, | |
| 19 | + .cat = {Clib, Caudio}, | |
| 20 | + }, | |
| 21 | +}; | |
| 22 | + | |
| 23 | +Pkg zuke = { | |
| 24 | + .name = "zuke", | |
| 25 | + .ver = "20200328", | |
| 26 | + .src = { | |
| 27 | + .url = "github://ftrvxmtrx/zuke", | |
| 28 | + .rev = "334efc1", | |
| 29 | + .hash = "base58 here", | |
| 30 | + }, | |
| 31 | + .inputs = { | |
| 32 | + .build = {&libtags}, | |
| 33 | + }, | |
| 34 | + .meta = { | |
| 35 | + .descr = "Music player", | |
| 36 | + .web = "http://ftrv.se/_/9", | |
| 37 | + .license = "public domain", | |
| 38 | + .devs = {&ftrvxmtrx}, | |
| 39 | + .cat = {Caudio}, | |
| 40 | + }, | |
| 41 | +}; | |
| @@ -0,0 +1,20 @@ | ||
| 1 | +#include <u.h> | |
| 2 | +#include "pkg.h" | |
| 3 | +#include "devs.h" | |
| 4 | + | |
| 5 | +Pkg xmpp = { | |
| 6 | + .name = "xmpp", | |
| 7 | + .ver = "20200316", | |
| 8 | + .src = { | |
| 9 | + .url = "github://ftrvxmtrx/xmpp", | |
| 10 | + .rev = "cb2c30b", | |
| 11 | + .hash = "base58 here", | |
| 12 | + }, | |
| 13 | + .meta = { | |
| 14 | + .descr = "XMPP client", | |
| 15 | + .web = "http://ftrv.se/_/9", | |
| 16 | + .license = "public domain", | |
| 17 | + .devs = {&ftrvxmtrx}, | |
| 18 | + .cat = {Cnetwork}, | |
| 19 | + }, | |
| 20 | +}; | |
| @@ -0,0 +1,103 @@ | ||
| 1 | +#include <u.h> | |
| 2 | +#include <libc.h> | |
| 3 | +#include <thread.h> | |
| 4 | +#include <libsec.h> | |
| 5 | +#include "pkg.h" | |
| 6 | + | |
| 7 | +#define MAX(a,b) ((a)>=(b)?(a):(b)) | |
| 8 | + | |
| 9 | +static int maxname; | |
| 10 | + | |
| 11 | +Pkg *pkgs[] = { | |
| 12 | + &fontsel, | |
| 13 | + &libtags, | |
| 14 | + &xmpp, | |
| 15 | + &zuke, | |
| 16 | +}; | |
| 17 | + | |
| 18 | +static void | |
| 19 | +usage(void) | |
| 20 | +{ | |
| 21 | + print("usage: %s ...\n", argv0); | |
| 22 | + threadexitsall("usage"); | |
| 23 | +} | |
| 24 | + | |
| 25 | +static int | |
| 26 | +pkgcmp(void *a_, void *b_) | |
| 27 | +{ | |
| 28 | + Pkg **a, **b; | |
| 29 | + | |
| 30 | + a = a_; | |
| 31 | + b = b_; | |
| 32 | + maxname = MAX(maxname, MAX(strlen((*a)->name), strlen((*b)->name))); | |
| 33 | + return strcmp((*a)->name, (*b)->name); | |
| 34 | +} | |
| 35 | + | |
| 36 | +static void | |
| 37 | +pkginfo(Pkg *p, int v) | |
| 38 | +{ | |
| 39 | + int i; | |
| 40 | + | |
| 41 | + if(p == nil) | |
| 42 | + return; | |
| 43 | + | |
| 44 | + if(v){ | |
| 45 | + print("name %s\n", p->name); | |
| 46 | + print("version %s\n", p->ver); | |
| 47 | + print("description %s\n", p->meta.descr); | |
| 48 | + print("web %s\n", p->meta.web); | |
| 49 | + print("license %s\n", p->meta.license); | |
| 50 | + if(p->meta.devs[0] != nil){ | |
| 51 | + print("maintainers "); | |
| 52 | + for(i = 0; i < nelem(p->meta.devs) && p->meta.devs[i] != nil; i++) | |
| 53 | + print(" %s", p->meta.devs[i]->nick); | |
| 54 | + print("\n"); | |
| 55 | + } | |
| 56 | + if(p->inputs.build[0] != nil || p->inputs.runtime[0] != nil){ | |
| 57 | + print("dependencies "); | |
| 58 | + for(i = 0; i < nelem(p->inputs.build) && p->inputs.build[i] != nil; i++) | |
| 59 | + print(" %s", p->inputs.build[i]->name); | |
| 60 | + for(i = 0; i < nelem(p->inputs.build) && p->inputs.runtime[i] != nil; i++) | |
| 61 | + print(" %s", p->inputs.runtime[i]->name); | |
| 62 | + print("\n"); | |
| 63 | + } | |
| 64 | + }else{ | |
| 65 | + print("%-*s\t%s\n", maxname, p->name, p->meta.descr); | |
| 66 | + } | |
| 67 | +} | |
| 68 | + | |
| 69 | +static Pkg * | |
| 70 | +pkgfind(char *name) | |
| 71 | +{ | |
| 72 | + int i; | |
| 73 | + | |
| 74 | + for(i = 0; i < nelem(pkgs); i++) | |
| 75 | + if(strcmp(pkgs[i]->name, name) == 0) | |
| 76 | + return pkgs[i]; | |
| 77 | + | |
| 78 | + return nil; | |
| 79 | +} | |
| 80 | + | |
| 81 | +void | |
| 82 | +threadmain(int argc, char **argv) | |
| 83 | +{ | |
| 84 | + int i; | |
| 85 | + | |
| 86 | + ARGBEGIN{ | |
| 87 | + }ARGEND | |
| 88 | + | |
| 89 | + qsort(pkgs, nelem(pkgs), sizeof(*pkgs), pkgcmp); | |
| 90 | + | |
| 91 | + if(argc < 1){ | |
| 92 | + for(i = 0; i < nelem(pkgs); i++) | |
| 93 | + pkginfo(pkgs[i], 0); | |
| 94 | + goto done; | |
| 95 | + }else if(argc == 2 && strcmp(argv[0], "info") == 0){ | |
| 96 | + pkginfo(pkgfind(argv[1]), 1); | |
| 97 | + }else{ | |
| 98 | + usage(); | |
| 99 | + } | |
| 100 | + | |
| 101 | +done: | |
| 102 | + threadexitsall(nil); | |
| 103 | +} | |
| @@ -0,0 +1,48 @@ | ||
| 1 | +enum { | |
| 2 | + Flib = 1<<0, | |
| 3 | + | |
| 4 | + Clib = 1, | |
| 5 | + Caudio, | |
| 6 | + Cgraphics, | |
| 7 | + Cnetwork, | |
| 8 | + Cnum, | |
| 9 | +}; | |
| 10 | + | |
| 11 | +typedef struct Dev Dev; | |
| 12 | +typedef struct Meta Meta; | |
| 13 | +typedef struct Pkg Pkg; | |
| 14 | + | |
| 15 | +struct Dev { | |
| 16 | + char *nick; | |
| 17 | + char *name; | |
| 18 | + char *email; | |
| 19 | +}; | |
| 20 | + | |
| 21 | +struct Meta { | |
| 22 | + char *descr; | |
| 23 | + char *web; | |
| 24 | + char *license; | |
| 25 | + Dev *devs[4]; | |
| 26 | + int flags; | |
| 27 | + int cat[Cnum]; | |
| 28 | +}; | |
| 29 | + | |
| 30 | +struct Pkg { | |
| 31 | + char *name; | |
| 32 | + char *ver; | |
| 33 | + struct { | |
| 34 | + char *url; | |
| 35 | + char *rev; | |
| 36 | + char *hash; | |
| 37 | + }src; | |
| 38 | + struct { | |
| 39 | + Pkg *build[4]; | |
| 40 | + Pkg *runtime[4]; | |
| 41 | + }inputs; | |
| 42 | + Meta meta; | |
| 43 | +}; | |
| 44 | + | |
| 45 | +extern Pkg fontsel; | |
| 46 | +extern Pkg libtags; | |
| 47 | +extern Pkg xmpp; | |
| 48 | +extern Pkg zuke; | |
Empty file added.