diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2024-03-24 16:26:07 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2024-03-24 16:26:07 -0400 |
| commit | b4a0cbf88bf51210a453568dcf210436a1c7c863 (patch) | |
| tree | f60f4dd892c91f25e0be0548f64e5bbf16173018 | |
| parent | 118517fb0211e84d1c3b9c6c31aeba367c6d6f8d (diff) | |
More flexible handling of command line arguments/environment variables
| -rw-r--r-- | tomo.c | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -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) |
