diff options
Diffstat (limited to 'genprotsym.txr')
-rw-r--r-- | genprotsym.txr | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/genprotsym.txr b/genprotsym.txr index 3ba70b3a..b3ac769b 100644 --- a/genprotsym.txr +++ b/genprotsym.txr @@ -11,10 +11,12 @@ OBJS-$(@sym) += @file.o @ (end) @ (do (set [pp-sym-of-file `@file.c`] ppsym)) @(end) -@(next :list (glob "*.c")) +@(next (open-command "git ls-files ':(glob)*.c'")) @(bind pp-stack nil) @(collect) @file +@ (require (nequal file "protsym.c")) +@ (set pp-stack nil) @ (next file) @ (do (whenlet ((pp [pp-sym-of-file file])) (set pp-stack (list pp)))) @@ -23,9 +25,20 @@ OBJS-$(@sym) += @file.o val @(coll)@{sym /[A-Za-z0-9_]+_[sk]/}@/[,;]/@\ @(do (set [pp-syms-of-sym sym] pp-stack))@(end) @ (or) +#if @ppsym1 || @ppsym2 +@ (do (push `(@ppsym1 || @ppsym2)` pp-stack)) +@ (or) #if @ppsym @ (do (push ppsym pp-stack)) @ (or) +#elif @ppsym1 || @ppsym2 +@ (do (pop pp-stack) + (push `(@ppsym1 || @ppsym2)` pp-stack)) +@ (or) +#elif @ppsym +@ (do (pop pp-stack) + (push ppsym pp-stack)) +@ (or) #endif @ (do (pop pp-stack)) @ (end) @@ -53,20 +66,18 @@ val @(coll)@{sym /[A-Za-z0-9_]+_[sk]/}@/[,;]/@\ #include "lib.h" @ (repeat :vars (gpp)) +@ (if gpp `#if @{gpp " && "}`) @ (repeat) extern val @(rep)@gsym, @(last)@gsym;@(end) -@ (first) -@(if gpp `#if @{gpp " && "}\n`)extern val @(rep)@gsym, @(last)@gsym;@(end) @ (end) @ (if gpp "#endif") @ (end) val *protected_sym[] = { @ (repeat :vars (gpp)) +@ (if gpp `#if @{gpp " && "}`) @ (repeat) @(rep)&@gsym, @(last)&@gsym,@(end) -@ (first) -@(if gpp `#if @{gpp " && "}\n`) @(rep)&@gsym, @(last)&@gsym,@(end) @ (end) @ (if gpp "#endif") @ (end) |