commit 40bf5eb
Merge pull request 'improve -C and add -f function' (#4) from oou/shinobi-chld:main into main Reviewed-on: https://codeberg.org/derivelinux/shinobi/pulls/4
1 files changed,
+46,
-10
+46,
-10
1@@ -217,7 +217,6 @@ main(int argc, char **argv)
2 int dump_ast;
3 int dump_dot;
4 int dump_graph;
5- int have_path;
6 int i;
7 struct Ast ast;
8 struct Ast out;
9@@ -227,7 +226,6 @@ main(int argc, char **argv)
10 dump_ast = 0;
11 dump_dot = 0;
12 dump_graph = 0;
13- have_path = 0;
14 for (i = 1; i < argc; i++) {
15 if (strcmp(argv[i], "-a") == 0) {
16 dump_ast = 1;
17@@ -239,28 +237,66 @@ main(int argc, char **argv)
18 usage(stdout, argv[0]);
19 return 0;
20 } else if (strcmp(argv[i], "-C")==0) {
21- chdir(argv[i+1]);
22+ if(i+1 <= argc) {
23+ ++i;
24+ } else {
25+ fprintf(stderr, "specify a directory\n\n");
26+ usage(stderr, argv[0]);
27+ return 1;
28+ }
29+
30+ if (chdir(argv[i+1]) != 0) {
31+ fprintf("failed to chdir to %s", argv[i+1]);
32+ return 1;
33+ }
34+ } else if (strcmp(argv[i], "-f")==0) {
35+ if(i+1 <= argc) {
36+ ++i;
37+ } else {
38+ fprintf(stderr, "specify a file\n\n");
39+ usage(stderr, argv[0]);
40+ return 1;
41+ }
42+
43+ path=argv[i+1];
44 ++i;
45 } else if (argv[i][0] == '-') {
46 usage(stderr, argv[0]);
47 return 1;
48- } else if (have_path) {
49- usage(stderr, argv[0]);
50- return 1;
51 } else {
52- path = argv[i];
53- have_path = 1;
54+ usage(stderr, argv[0]);
55+ return 1;
56 }
57 }
58 src = readfile(path);
59 if (!src) {
60- fprintf(stderr, "could not read %s\n", path);
61- return 1;
62+ /* iterate through possible makefile names */
63+
64+ char* mks[]={
65+ "makefile",
66+ "GNUmakefile",
67+ NULL
68+ };
69+
70+ for(size_t mk=0; mks[mk]!=NULL; ++mk)
71+ {
72+ path=mks[mk];
73+ src=readfile(path);
74+
75+ if(src) break;
76+
77+ if(mks[mk+1]==NULL && !src)
78+ {
79+ fprintf(stderr, "could not find a makefile\n");
80+ return 1;
81+ }
82+ }
83 }
84 if (parse(path, src, &ast) < 0) {
85 fprintf(stderr, "parse error in %s\n", path);
86 free(src);
87 return 1;
88+
89 }
90 if (eval(&ast, &out) < 0) {
91 fprintf(stderr, "eval error in %s\n", path);