commit 40bf5eb

shrub  ·  2026-04-15 08:39:50 +0000 UTC
parents 2b3b447, 9ba3775
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);