Showing the changes to pkg.c (1 of 9 files). Show all
Unified · Split
| @@ -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 | +} | |