aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-03-24 16:26:07 -0400
committerBruce Hill <bruce@bruce-hill.com>2024-03-24 16:26:07 -0400
commitb4a0cbf88bf51210a453568dcf210436a1c7c863 (patch)
treef60f4dd892c91f25e0be0548f64e5bbf16173018
parent118517fb0211e84d1c3b9c6c31aeba367c6d6f8d (diff)
More flexible handling of command line arguments/environment variables
-rw-r--r--tomo.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/tomo.c b/tomo.c
index 78b5e4a4..131d3c3e 100644
--- a/tomo.c
+++ b/tomo.c
@@ -1,10 +1,11 @@
// The main program that runs compilation
-#include <stdio.h>
-#include <stdlib.h>
+#include <ctype.h>
#include <gc.h>
#include <gc/cord.h>
#include <libgen.h>
#include <printf.h>
+#include <stdio.h>
+#include <stdlib.h>
#include <sys/stat.h>
#include "ast.h"
@@ -40,6 +41,14 @@ int main(int argc, char *argv[])
mode = MODE_TRANSPILE;
} else if (streq(argv[i], "-c")) {
mode = MODE_COMPILE;
+ } else if (strchr(argv[i], '=')) {
+ while (argv[i][0] == '-')
+ ++argv[i];
+ char *eq = strchr(argv[i], '=');
+ *eq = '\0';
+ for (char *p = argv[i]; *p; p++)
+ *p = toupper(*p);
+ setenv(argv[i], eq + 1, 1);
} else {
filename = argv[i];
break;
@@ -66,7 +75,8 @@ int main(int argc, char *argv[])
cconfig = "-std=c11 -fdollars-in-identifiers -fsanitize=signed-integer-overflow -fno-sanitize-recover -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L -D_DEFAULT_SOURCE";
const char *optimization = getenv("O");
- if (!optimization) optimization = "-O1";
+ if (!optimization || !optimization[0]) optimization = "-O1";
+ else optimization = heap_strf("-O%s", optimization);
cflags = getenv("CFLAGS");
if (!cflags)