X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=main.c;h=558edc339ef25b52393176f8fa780592b503482a;hb=96ddc217da06466ba094bee783ddbdfaac54148b;hp=fca93b2d87b27932258607e2848fbcac491916b2;hpb=52b4c9f0c10267fbba0c81336de56265ed0c6f4d;p=xonotic%2Fgmqcc.git diff --git a/main.c b/main.c index fca93b2..558edc3 100644 --- a/main.c +++ b/main.c @@ -44,8 +44,8 @@ static const char *app_name; static void version() { con_out("GMQCC %d.%d.%d Built %s %s\n", - GMQCC_VERSION_MINOR, GMQCC_VERSION_MAJOR, + GMQCC_VERSION_MINOR, GMQCC_VERSION_PATCH, __DATE__, __TIME__ @@ -71,8 +71,10 @@ static int usage() { " -fhelp list possible flags\n"); con_out(" -W enable a warning\n" " -Wno- disable a warning\n" - " -Wall enable all warnings\n" - " -Werror treat warnings as errors\n"); + " -Wall enable all warnings\n"); + con_out(" -Werror treat warnings as errors\n" + " -Werror- treat a warning as error\n" + " -Wno-error- opposite of the above\n"); con_out(" -Whelp list possible warnings\n"); con_out(" -O optimization level\n" " -O enable specific optimization\n" @@ -204,8 +206,6 @@ static bool options_parse(int argc, char **argv) { /* show defaults (like pathscale) */ if (!strcmp(argv[0]+1, "show-defaults")) { - size_t itr; - char buffer[1024]; for (itr = 0; itr < COUNT_FLAGS; ++itr) { if (!OPTS_FLAG(itr)) continue; @@ -266,6 +266,7 @@ static bool options_parse(int argc, char **argv) { /* debug turns on -flno */ case 'g': opts_setflag("LNO", true); + opts.g = true; break; case 'D': @@ -317,12 +318,18 @@ static bool options_parse(int argc, char **argv) { } exit(0); } - else if (!strcmp(argv[0]+2, "NO_ERROR")) { - opts.werror = false; + else if (!strcmp(argv[0]+2, "NO_ERROR") || + !strcmp(argv[0]+2, "NO_ERROR_ALL")) + { + for (itr = 0; itr < sizeof(opts.werror)/sizeof(opts.werror[0]); ++itr) + opts.werror[itr] = 0; break; } - else if (!strcmp(argv[0]+2, "ERROR")) { - opts.werror = true; + else if (!strcmp(argv[0]+2, "ERROR") || + !strcmp(argv[0]+2, "ERROR_ALL")) + { + for (itr = 0; itr < sizeof(opts.werror)/sizeof(opts.werror[0]); ++itr) + opts.werror[itr] = 0xFFFFFFFFL; break; } else if (!strcmp(argv[0]+2, "NONE")) { @@ -335,7 +342,19 @@ static bool options_parse(int argc, char **argv) { opts.warn[itr] = 0xFFFFFFFFL; break; } - if (!strncmp(argv[0]+2, "NO_", 3)) { + else if (!strncmp(argv[0]+2, "ERROR_", 6)) { + if (!opts_setwerror(argv[0]+8, true)) { + con_out("unknown warning: %s\n", argv[0]+2); + return false; + } + } + else if (!strncmp(argv[0]+2, "NO_ERROR_", 9)) { + if (!opts_setwerror(argv[0]+11, false)) { + con_out("unknown warning: %s\n", argv[0]+2); + return false; + } + } + else if (!strncmp(argv[0]+2, "NO_", 3)) { if (!opts_setwarn(argv[0]+5, false)) { con_out("unknown warning: %s\n", argv[0]+2); return false; @@ -489,6 +508,11 @@ int main(int argc, char **argv) { return usage(); } + if (OPTS_FLAG(TRUE_EMPTY_STRINGS) && OPTS_FLAG(FALSE_EMPTY_STRINGS)) { + con_err("-ftrue-empty-strings and -ffalse-empty-strings are mutually exclusive"); + exit(1); + } + /* the standard decides which set of operators to use */ if (opts.standard == COMPILER_GMQCC) { operators = c_operators; @@ -561,6 +585,9 @@ int main(int argc, char **argv) { } } + if (OPTS_FLAG(TRUE_EMPTY_STRINGS)) + type_not_instr[TYPE_STRING] = INSTR_NOT_F; + util_debug("COM", "starting ...\n"); /* add macros */