Index: driver.c =================================================================== RCS file: /cvsroot/pcc/cc/driver/driver.c,v retrieving revision 1.6 diff -u -p -r1.6 driver.c --- driver.c 27 May 2011 06:15:52 -0000 1.6 +++ driver.c 27 May 2011 07:36:27 -0000 @@ -75,6 +75,7 @@ struct strlist incdirs; struct strlist libdirs; struct strlist progdirs; struct strlist preprocessor_flags; +struct strlist preprocessor_macros; struct strlist compiler_flags; struct strlist assembler_flags; struct strlist early_linker_flags; @@ -102,6 +103,30 @@ int static_mode; int shared_mode; int use_pthread; int verbose_mode; +int undef_mode; + +const char *Warns[] = { + "error", /* NB: no-error is disallowed */ + "truncate", + "strict-prototypes", + "missing-prototypes", + "implicit-int", + "implicit-function-declaration", + "shadow", + "pointer-sign", + "sign-compare", + "unknown-pragmas", + "unreachable-code", + "pointer-arith", + "traditional", + "return-type", + "switch", + "cast-qual", + "write-strings", + "extra", + "unused-parameter", + NULL +}; void error(const char *fmt, ...) @@ -316,6 +341,8 @@ preprocess_input(const char *file, char int retval; strlist_init(&args); + if (undef_mode == 0) + strlist_append_list(&args, &preprocessor_macros); strlist_append_list(&args, &preprocessor_flags); STRLIST_FOREACH(s, &includes) { strlist_append(&args, "-i"); @@ -532,6 +559,7 @@ main(int argc, char **argv) struct string *input; char *argp; int retval; + size_t i; strlist_init(&crtdirs); strlist_init(&user_sysincdirs); @@ -542,6 +570,7 @@ main(int argc, char **argv) strlist_init(&progdirs); strlist_init(&inputs); strlist_init(&preprocessor_flags); + strlist_init(&preprocessor_macros); strlist_init(&compiler_flags); strlist_init(&assembler_flags); strlist_init(&early_linker_flags); @@ -554,7 +583,7 @@ main(int argc, char **argv) strlist_init(&late_dso_csu_files); strlist_init(&temp_outputs); - init_platform_specific("linux", "x86_64"); + init_platform_specific("netbsd", "i386"); while (--argc) { ++argv; @@ -789,6 +818,12 @@ main(int argc, char **argv) strlist_append(&preprocessor_flags, argp); } continue; + case 'u': + if (strcmp(argp, "-undef") == 0) { + undef_mode = 1; + continue; + } + break; case 'v': if (argp[2] == '\0') { verbose_mode = 1; @@ -808,7 +843,26 @@ main(int argc, char **argv) split_and_append(&preprocessor_flags, argp + 4); continue; } - /* XXX warning flags */ + if (strcmp(argp, "-Wall") == 0) { + strlist_append(&compiler_flags, "-Wpointer-sign"); + strlist_append(&compiler_flags, "-Wunknown-pragmas"); + continue; + } + if (strncmp(argp, "-Wno-", 5) == 0) { + for (i = 1; Warns[i] != NULL; i++) { + if (strcmp(Warns[i], argp + 5) == 0) + break; + } + } else { + for (i = 0; Warns[i] != NULL; i++) { + if (strcmp(Warns[i], argp + 2) == 0) + break; + } + } + if (Warns[i] != NULL) { + strlist_append(&compiler_flags, argp); + continue; + } break; case 'x': /* XXX -x c */ Index: driver.h =================================================================== RCS file: /cvsroot/pcc/cc/driver/driver.h,v retrieving revision 1.2 diff -u -p -r1.2 driver.h --- driver.h 26 May 2011 16:48:40 -0000 1.2 +++ driver.h 27 May 2011 07:36:27 -0000 @@ -46,6 +46,7 @@ extern struct strlist sysincdirs; extern struct strlist libdirs; extern struct strlist progdirs; extern struct strlist preprocessor_flags; +extern struct strlist preprocessor_macros; extern struct strlist compiler_flags; extern struct strlist assembler_flags; extern struct strlist early_linker_flags; Index: platform.c =================================================================== RCS file: /cvsroot/pcc/cc/driver/platform.c,v retrieving revision 1.4 diff -u -p -r1.4 platform.c --- platform.c 27 May 2011 06:32:57 -0000 1.4 +++ platform.c 27 May 2011 07:36:27 -0000 @@ -241,7 +241,7 @@ static const struct { { ARRAYPAIR(late_program_csu), &late_program_csu_files }, { ARRAYPAIR(early_dso_csu), &early_dso_csu_files }, { ARRAYPAIR(late_dso_csu), &late_dso_csu_files }, - { ARRAYPAIR(predefined_macros), &preprocessor_flags }, + { ARRAYPAIR(predefined_macros), &preprocessor_macros }, { ARRAYPAIR(early_linker), &early_linker_flags }, { ARRAYPAIR(sysincdir_list), &sysincdirs }, { ARRAYPAIR(crtdir_list), &crtdirs },