aboutsummaryrefslogtreecommitdiff
path: root/src/build/gluegen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/build/gluegen.c')
-rw-r--r--src/build/gluegen.c48
1 files changed, 40 insertions, 8 deletions
diff --git a/src/build/gluegen.c b/src/build/gluegen.c
index 4abfd2b..5087a52 100644
--- a/src/build/gluegen.c
+++ b/src/build/gluegen.c
@@ -602,18 +602,44 @@ static cold noreturn diewrite() { die(100, "couldn't write to file"); }
_("/* This file is autogenerated by src/build/gluegen.c. DO NOT EDIT! */")
#define H() H_() _("")
-static void recursefeatdescs(FILE *out, s16 node) {
+static void recursedbgmodnames(FILE *out, s16 node) {
if (node < 0) {
+ if (!(mod_flags[-node] & HAS_INIT)) return;
+F( " switch (status_%.*s) {",
+ mod_names[-node].len, mod_names[-node].s)
+_( " case FEAT_SKIP: colour = &grey; break;")
+_( " case FEAT_OK: colour = &green; break;")
+_( " default: colour = &red; break;")
+_( " }")
if (mod_featdescs[-node].s) {
+F( " con_colourmsg(colour, featmsgs[status_%.*s], \"%.*s (\" %.*s \")\");",
+ mod_names[-node].len, mod_names[-node].s,
+ mod_names[-node].len, mod_names[-node].s,
+ mod_featdescs[-node].len, mod_featdescs[-node].s)
+ }
+ else {
+F( " con_colourmsg(colour, featmsgs[status_%.*s], \"%.*s\");",
+ mod_names[-node].len, mod_names[-node].s,
+ mod_names[-node].len, mod_names[-node].s)
+ }
+ }
+ else if (node > 0) {
+ for (int i = 0; i < 16; ++i) {
+ recursedbgmodnames(out, radices[node].children[i]);
+ }
+ }
+}
+
+static void recursefeatdescs(FILE *out, s16 node) {
+ if (node < 0) {
F( " if (status_%.*s != FEAT_SKIP) {",
- mod_names[-node].len, mod_names[-node].s)
+ mod_names[-node].len, mod_names[-node].s)
F( " con_colourmsg(status_%.*s == FEAT_OK ? &green : &red,",
- mod_names[-node].len, mod_names[-node].s)
+ mod_names[-node].len, mod_names[-node].s)
F( " featmsgs[status_%.*s], %.*s);",
- mod_names[-node].len, mod_names[-node].s,
- mod_featdescs[-node].len, mod_featdescs[-node].s)
+ mod_names[-node].len, mod_names[-node].s,
+ mod_featdescs[-node].len, mod_featdescs[-node].s)
_( " }")
- }
}
else if (node > 0) {
for (int i = 0; i < 16; ++i) {
@@ -660,7 +686,7 @@ static int evargs_notype(FILE *out, s16 i, const char *suffix) {
return j;
}
-static inline void gencode(FILE *out, s16 featdescs) {
+static inline void gencode(FILE *out, s16 modnames, s16 featdescs) {
for (int i = 1; i < nmods; ++i) {
if (mod_flags[i] & HAS_INIT) {
F( "extern int _feat_init_%.*s();", mod_names[i].len, mod_names[i].s)
@@ -818,7 +844,13 @@ _( " struct rgba white = {255, 255, 255, 255};")
_( " struct rgba green = {128, 255, 128, 255};")
_( " struct rgba red = {255, 128, 128, 255};")
_( " con_colourmsg(&white, \"---- List of plugin features ---\\n\");");
+_( "#ifdef SST_DBG")
+_( " struct rgba grey = {192, 192, 192, 255};")
+_( " struct rgba *colour;")
+ recursedbgmodnames(out, modnames);
+_( "#else")
recursefeatdescs(out, featdescs);
+_( "#endif")
_( "}")
_( "")
_( "static inline void endfeatures() {")
@@ -953,7 +985,7 @@ int OS_MAIN(int argc, os_char *argv[]) {
FILE *out = fopen(".build/include/glue.gen.h", "wb");
if_cold (!out) die(100, "couldn't open .build/include/glue.gen.h");
H()
- gencode(out, featdesclookup);
+ gencode(out, modlookup, featdesclookup);
if_cold (fflush(out)) die(100, "couldn't finish writing output");
return 0;
}