]> pd.if.org Git - zpackage/commitdiff
add zpm-parse program
authorNathan Wagner <nw@hydaspes.if.org>
Sat, 15 Sep 2018 09:03:00 +0000 (09:03 +0000)
committerNathan Wagner <nw@hydaspes.if.org>
Mon, 17 Sep 2018 12:16:13 +0000 (12:16 +0000)
Makefile
zpm-parse.c [new file with mode: 0644]

index 2e29167f354af6b1332bfd39544036d91f5d5b58..51cd85afebb63a8bf6a7dbe8b5d93421a6bfc4ea 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -95,7 +95,7 @@ test: $(ZPKGBIN) t/ctap/prove
        PATH=$(curdir)/t:$(curdir):$(PATH) t/ctap/prove t/*.t
 
 programs: elftype zpm-soname zpm-soneed zpm-addfile zpm-extract zpm-init \
-       zpm-vercmp zpm-findpkg zpm-merge
+       zpm-vercmp zpm-findpkg zpm-merge zpm-quote zpm-parse
 
 uncompress: uncompress.o 
        $(CC) $(CFLAGS) -o $@ $+ -llzma
@@ -129,6 +129,9 @@ zpm-foreach-path: zpm-foreach-path.o libzpm.a sqlite/sqlite3.h
 zpm-findpkg: zpm-findpkg.o libzpm.a
        $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< -lzpm -lelf
 
+zpm-parse: zpm-parse.o libzpm.a
+       $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< -lzpm -lelf
+
 zpm-quote: zpm-quote.o libzpm.a
        $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< -lzpm -lelf
 
diff --git a/zpm-parse.c b/zpm-parse.c
new file mode 100644 (file)
index 0000000..ec05356
--- /dev/null
@@ -0,0 +1,75 @@
+#define _POSIX_C_SOURCE 2
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include "zpm.h"
+
+int main(int ac, char **av) {
+       int rel;
+       char name[256];
+       char ver[256];
+       int i;
+       int found;
+       int pname = 0;
+       int pver = 0;
+       int prel = 0;
+       int printed = 0;
+       int opt;
+       int pdefault = 1;
+       int eval = 0;
+
+       while ((opt = getopt(ac, av, "nvrE")) != -1) {
+               switch (opt) {
+                       case 'n': pdefault = 0; pname = 1; break;
+                       case 'v': pdefault = 0; pver = 1; break;
+                       case 'r': pdefault = 0; prel = 1; break;
+                       case 'E': eval = 1; break;
+                       default:
+                                 fprintf(stderr, "zpm parse [-nvrE] ...\n");
+                                 exit(EXIT_FAILURE);
+                                 break;
+               }
+       }
+
+       pname = pname || pdefault;
+       pver = pver || pdefault;
+       prel = prel || pdefault;
+
+       /* TODO need to quote single quotes for eval'able output */
+       for (i=optind; i<ac; i++) {
+               printed = 0;
+               found = zpm_parse_package(av[i], name, ver, &rel);
+               if (found >= 1 && pname) {
+                       if (eval) {
+                               printf("name='%s'\n", name);
+                       } else {
+                               printf("%s", name);
+                               printed++;
+                       }
+               }
+               if (found >= 2 && pver) {
+                       if (eval) {
+                               printf("version='%s'\n", ver);
+                       } else {
+                               printf("%s%s", printed ? " " : "", ver);
+                               printed++;
+                       }
+               }
+               if (found >= 3 && prel) {
+                       if (eval) {
+                               printf("release='%d'\n", rel);
+                       } else {
+                               printf("%s%d", printed ? " " : "", rel);
+                               printed++;
+                       }
+               }
+               if (printed) {
+                       putchar('\n');
+               }
+               if (!found) {
+                       exit(EXIT_FAILURE);
+               }
+       }
+       return 0;
+}