diff options
-rw-r--r-- | genprotsym.txr | 40 |
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) }; |