void Var_Dump(void) { Var **t; unsigned int i; const char *banner; bool first = true; t = sort_ohash_by_name(&global_variables); /* somewhat dirty, but does the trick */ #define LOOP(mask, value, do_stuff) \ for (i = 0; t[i] != NULL; i++) \ if ((t[i]->flags & (mask)) == (value)) { \ if (banner) { \ if (first) \ first = false; \ else \ putchar('\n'); \ fputs(banner, stdout); \ banner = NULL; \ } \ do_stuff; \ } banner = "#variables from command line:\n"; LOOP(VAR_FROM_CMD | VAR_DUMMY, VAR_FROM_CMD, print_var(t[i])); banner = "#global variables:\n"; LOOP(VAR_FROM_ENV| VAR_FROM_CMD | VAR_DUMMY, 0, print_var(t[i])); banner = "#variables from env:\n"; LOOP(VAR_FROM_ENV|VAR_DUMMY, VAR_FROM_ENV, print_var(t[i])); banner = "#variable name seen, but not defined:"; LOOP(VAR_DUMMY|POISONS, VAR_DUMMY, printf(" %s", t[i]->name)); #undef LOOP printf("\n\n"); for (i = 0; t[i] != NULL; i++) switch(t[i]->flags & POISONS) { case POISON_NORMAL: printf(".poison %s\n", t[i]->name); break; case POISON_EMPTY: printf(".poison empty(%s)\n", t[i]->name); break; case POISON_NOT_DEFINED: printf(".poison !defined(%s)\n", t[i]->name); break; default: break; } free(t); printf("\n"); }
static void targ_dump(bool full) { GNode **t = sort_ohash_by_name(targets_hash()); unsigned int i; printf("# Input graph:\n"); for (i = 0; t[i] != NULL; i++) TargPrintNode(t[i], full); printf("\n\n"); dump_special(t, ".PHONY", OP_PHONY); dump_special(t, ".PRECIOUS", OP_PRECIOUS); dump_special(t, ".SILENT", OP_SILENT); dump_special(t, ".IGNORE", OP_IGNORE); printf("# Other target names:\n"); for (i = 0; t[i] != NULL; i++) TargPrintOnlySrc(t[i]); printf("\n"); free(t); }