#include // strcmp() #include "cpp_dialect.h" int dcc_seen_opt_x = 0; char *dcc_opt_x_ext = NULL; struct assoc_t; struct assoc_t { char *key; char *val; }; typedef struct assoc_t assoc_t; static assoc_t dialect_tbl[] = { { "c", "cpp-output", }, /**/ { "c++", "c++-cpp-output", }, { "objective-c", "objc-cpp-output", }, /**/ { "objective-c++", "objc++-cpp-output", }, /**/ { NULL, NULL } }; static assoc_t ext_tbl[] = { { "c", ".i" }, /**/ { "cpp-output", ".i" }, /**/ { "c++", ".ii" }, { "c++-cpp-output", ".ii" }, { "objective-c", ".mi" }, /**/ { "objc-cpp-output", ".mi" }, /**/ { "objective-c++", ".mii" }, /**/ { "objc++-cpp-output", ".mii" }, /**/ { NULL, NULL } }; static char *tbl_lookup(assoc_t *tbl, char *key) { int i = 0; while (tbl[i].key) { if (!strcmp(tbl[i].key, key)) { return tbl[i].val; } i++; } return NULL; } char *dcc_dialect_lookup(char *key) { return tbl_lookup(dialect_tbl, key); } char *dcc_ext_lookup(char *key) { return tbl_lookup(ext_tbl, key); } void dcc_fix_opt_x(char **argv) { int i; for(i = 0; NULL != argv[i]; i++) { if(!strcmp(argv[i], "-x")) { char *dialect; if(dialect = dcc_dialect_lookup(argv[i + 1])) { argv[i + 1] = dialect; } } } return; }