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 | } | ||