summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--genprotsym.txr40
1 files changed, 34 insertions, 6 deletions
diff --git a/genprotsym.txr b/genprotsym.txr
index 7d9f8c2a..b343ce04 100644
--- a/genprotsym.txr
+++ b/genprotsym.txr
@@ -1,6 +1,24 @@
-@(next (open-files (glob "*.c")))
-@(collect :vars (sym))
-val @(coll)@{sym /[A-Za-z0-9_]+_[sk]/}@/[,;]/@(end)
+@(bind prepro-sym @(hash :equal-based))
+@(bind file-of @(hash :equal-based))
+@(next "Makefile")
+@(repeat)
+@ (cases)
+OBJS-$(have_@sym) += @file.o
+@ (bind ppsym @(upcase-str `HAVE_@sym`))
+@ (or)
+OBJS-$(@sym) += @file.o
+@ (bind ppsym @(upcase-str `CONFIG_@sym`))
+@ (end)
+@ (do (set [prepro-sym `@file.c`] ppsym))
+@(end)
+@(next :list (glob "*.c"))
+@(collect)
+@file
+@ (next file)
+@ (collect :vars ((sym nil)))
+val @(coll)@{sym /[A-Za-z0-9_]+_[sk]/}@/[,;]/@(do (set [file-of sym] file))@(end)
+@ (end)
+@ (flatten sym)
@(end)
@(next "lib.c")
@(collect)
@@ -9,7 +27,9 @@ val @(coll)@{sym /[A-Za-z0-9_]+_[sk]/}@/[,;]/@(end)
@(end)
@(flatten sym)
-@(bind gsym @(tuples 5 (sort sym)))
+@(bind pp-groups @[group-by [chain file-of prepro-sym] sym])
+@(bind gsym @[mapcar (opip sort (tuples 5)) (hash-values pp-groups)])
+@(bind gpp @(hash-keys pp-groups))
@(output "protsym.c")
/* This file is generated by genprotsym.txr */
@@ -19,13 +39,21 @@ val @(coll)@{sym /[A-Za-z0-9_]+_[sk]/}@/[,;]/@(end)
#include "config.h"
#include "lib.h"
-@ (repeat)
+@ (repeat :vars (gpp))
+@ (if gpp `#if @gpp`)
+@ (repeat)
extern val @(rep)@gsym, @(last)@gsym;@(end)
+@ (end)
+@ (if gpp "#endif")
@ (end)
val *protected_sym[] = {
-@ (repeat)
+@ (repeat :vars (gpp))
+@ (if gpp `#if @gpp`)
+@ (repeat)
@(rep)&@gsym, @(last)&@gsym,@(end)
+@ (end)
+@ (if gpp "#endif")
@ (end)
convert(val *, 0)
};