X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=main.c;h=b33b9591674f855541f46b60c1483059e244844f;hb=fef9303381a02c424518f4c779c574b2dcd46a12;hp=a73f3f1df3f7e29f6d4c4992e6e94a1598355ca4;hpb=498cbf6fa5318b83b764dbc3a274b5aaec6ff0ef;p=xonotic%2Fgmqcc.git diff --git a/main.c b/main.c index a73f3f1..b33b959 100644 --- a/main.c +++ b/main.c @@ -25,7 +25,6 @@ #include "lexer.h" uint32_t opts_flags[1 + (COUNT_FLAGS / 32)]; -uint32_t opts_warn [1 + (COUNT_WARNINGS / 32)]; uint32_t opts_O = 1; const char *opts_output = "progs.dat"; @@ -34,7 +33,6 @@ bool opts_debug = false; bool opts_memchk = false; bool opts_dumpfin = false; bool opts_dump = false; -bool opts_werror = false; bool opts_forcecrc = false; bool opts_pp_only = false; size_t opts_max_array_size = 1024; @@ -202,10 +200,13 @@ static bool options_parse(int argc, char **argv) { opts_standard = COMPILER_GMQCC; } else if (!strcmp(argarg, "qcc")) { options_set(opts_flags, ADJUST_VECTOR_FIELDS, false); + options_set(opts_flags, ASSIGN_FUNCTION_TYPES, true); opts_standard = COMPILER_QCC; } else if (!strcmp(argarg, "fte") || !strcmp(argarg, "fteqcc")) { options_set(opts_flags, FTEPP, true); + options_set(opts_flags, TRANSLATABLE_STRINGS, true); options_set(opts_flags, ADJUST_VECTOR_FIELDS, false); + options_set(opts_flags, ASSIGN_FUNCTION_TYPES, true); opts_standard = COMPILER_FTEQCC; } else if (!strcmp(argarg, "qccx")) { options_set(opts_flags, ADJUST_VECTOR_FIELDS, false); @@ -230,6 +231,31 @@ static bool options_parse(int argc, char **argv) { continue; } + /* 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; + + memset(buffer, 0, sizeof(buffer)); + util_strtononcmd(opts_flag_list[itr].name, buffer, strlen(opts_flag_list[itr].name) + 1); + + con_out("-f%s ", buffer); + } + for (itr = 0; itr < COUNT_WARNINGS; ++itr) { + if (!OPTS_WARN(itr)) + continue; + + memset(buffer, 0, sizeof(buffer)); + util_strtononcmd(opts_warn_list[itr].name, buffer, strlen(opts_warn_list[itr].name) + 1); + con_out("-W%s ", buffer); + } + con_out("\n"); + exit(0); + } + if (!strcmp(argv[0]+1, "debug")) { opts_debug = true; continue; @@ -265,7 +291,7 @@ static bool options_parse(int argc, char **argv) { /* handle all -fflags */ case 'f': util_strtocmd(argv[0]+2, argv[0]+2, strlen(argv[0]+2)+1); - if (!strcmp(argv[0]+2, "HELP")) { + if (!strcmp(argv[0]+2, "HELP") || *(argv[0]+2) == '?') { con_out("Possible flags:\n"); for (itr = 0; itr < COUNT_FLAGS; ++itr) { util_strtononcmd(opts_flag_list[itr].name, buffer, sizeof(buffer)); @@ -286,7 +312,7 @@ static bool options_parse(int argc, char **argv) { break; case 'W': util_strtocmd(argv[0]+2, argv[0]+2, strlen(argv[0]+2)+1); - if (!strcmp(argv[0]+2, "HELP")) { + if (!strcmp(argv[0]+2, "HELP") || *(argv[0]+2) == '?') { con_out("Possible warnings:\n"); for (itr = 0; itr < COUNT_WARNINGS; ++itr) { util_strtononcmd(opts_warn_list[itr].name, buffer, sizeof(buffer)); @@ -446,6 +472,9 @@ int main(int argc, char **argv) { options_set(opts_warn, WARN_ASSIGN_FUNCTION_TYPES, true); options_set(opts_warn, WARN_PREPROCESSOR, true); options_set(opts_warn, WARN_MULTIFILE_IF, true); + options_set(opts_warn, WARN_DOUBLE_DECLARATION, true); + options_set(opts_warn, WARN_CONST_VAR, true); + options_set(opts_warn, WARN_MULTIBYTE_CHARACTER, true); options_set(opts_flags, ADJUST_VECTOR_FIELDS, true); options_set(opts_flags, FTEPP, false);