ref: bccf793446bc1afadce825b98000c3664544d114
dir: /myrbuild/myrbuild.c/
#include <stdlib.h> #include <stdio.h> #include <stdint.h> #include <ctype.h> #include <string.h> #include <assert.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <sys/types.h> #include <regex.h> #include "parse.h" /* make libparse happy */ Node *file; char *libname; char *binname; char **incpaths; size_t nincpaths; regex_t usepat; static void usage(char *prog) { printf("%s [-h] [-I path] [-l lib] [-b bin] inputs...\n", prog); printf("\t-h\tprint this help\n"); printf("\t-b bin\tBuild a binary called 'bin'\n"); printf("\t-l lib\tBuild a library called 'name'\n"); printf("\t-I path\tAdd 'path' to use search path\n"); } void getdeps(char *file) { char buf[2048]; /* if you hit this limit, shoot yourself */ regmatch_t m[2]; char *usepath; FILE *f; f = fopen(file, "r"); if (!f) die("Could not open file %s\n", file); while (fgets(buf, sizeof buf, f)) { if (regexec(&usepat, buf, 2, m, 0) == REG_NOMATCH) continue; usepath = strdupn(&buf[m[1].rm_so], m[1].rm_eo - m[1].rm_so); printf("use = %s\n", usepath); } } void compile() { } int main(int argc, char **argv) { int opt; int i; while ((opt = getopt(argc, argv, "hb:l:I:")) != -1) { switch (opt) { case 'b': binname = optarg; break; case 'l': libname = optarg; break; case 'I': lappend(&incpaths, &nincpaths, optarg); break; case 'h': usage(argv[0]); exit(0); break; default: usage(argv[0]); exit(0); break; } } if (libname && binname) die("Can't specify both library and binary names"); switch (regcomp(&usepat, "^[[:space:]]*use[[:space:]]+([^[:space:]]+)", REG_EXTENDED)) { case REG_BADBR: die("case REG_BADBR:"); break; case REG_BADPAT: die("case REG_BADPAT:"); break; case REG_BADRPT: die("case REG_BADRPT:"); break; case REG_EBRACE: die("case REG_EBRACE:"); break; case REG_EBRACK: die("case REG_EBRACK:"); break; case REG_ECOLLATE: die("case REG_ECOLLATE:"); break; case REG_EEND: die("case REG_EEND:"); break; case REG_EESCAPE: die("case REG_EESCAPE:"); break; case REG_EPAREN: die("case REG_EPAREN:"); break; case REG_ERANGE: die("case REG_ERANGE:"); break; case REG_ESIZE: die("case REG_ESIZE:"); break; case REG_ESPACE: die("case REG_ESPACE:"); break; case REG_ESUBREG: die("case REG_ESUBREG:"); break; } for (i = optind; i < argc; i++) getdeps(argv[i]); return 0; }