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 },