]> git.ipfire.org Git - thirdparty/rsync.git/blame - daemon-parm.awk
More tweaks for Actions.
[thirdparty/rsync.git] / daemon-parm.awk
CommitLineData
7d30490e
WD
1#!/usr/bin/awk -f
2
3# The caller must pass arg: daemon-parm.txt
4# The resulting code is output into daemon-parm.h
5
6BEGIN {
cb383673 7 heading = "/* DO NOT EDIT THIS FILE! It is auto-generated from a list of values in " ARGV[1] "! */\n\n"
7d30490e 8 sect = psect = defines = accessors = prior_ptype = ""
cb383673 9 parms = "\nstatic struct parm_struct parm_table[] = {"
d88db22a 10 comment_fmt = "\n/********** %s **********/\n"
7d30490e
WD
11 tdstruct = "typedef struct {"
12}
13
14/^\s*$/ { next }
15/^#/ { next }
16
17/^Globals:/ {
18 if (defines != "") {
19 print "The Globals section must come first!"
20 defines = ""
21 exit
22 }
23 defines = tdstruct
0add026a 24 values = "\nstatic const all_vars Defaults = {\n { /* Globals: */\n"
d88db22a 25 exps = exp_values = sprintf(comment_fmt, "EXP")
7d30490e
WD
26 sect = "GLOBAL"
27 psect = ", P_GLOBAL, &Vars.g."
28 next
29}
30
31/^Locals:/ {
32 if (sect == "") {
33 print "The Locals section must come after the Globals!"
34 exit
35 }
36 defines = defines exps "} global_vars;\n\n" tdstruct
37 values = values exp_values "\n }, { /* Locals: */\n"
d88db22a 38 exps = exp_values = sprintf(comment_fmt, "EXP")
7d30490e
WD
39 sect = "LOCAL"
40 psect = ", P_LOCAL, &Vars.l."
41 next
42}
43
565cde84 44/^(STRING|CHAR|PATH|INTEGER|ENUM|OCTAL|BOOL|BOOLREV|BOOL3)[ \t]/ {
7d30490e
WD
45 ptype = $1
46 name = $2
47 $1 = $2 = ""
48 sub(/^[ \t]+/, "")
49
50 if (ptype != prior_ptype) {
d88db22a
WD
51 comment = sprintf(comment_fmt, ptype)
52 defines = defines comment
53 values = values comment
cb383673 54 parms = parms "\n"
7d30490e
WD
55 accessors = accessors "\n"
56 prior_ptype = ptype
57 }
58
59 if (ptype == "STRING" || ptype == "PATH") {
60 atype = "STRING"
61 vtype = "char*"
565cde84 62 } else if (ptype ~ /BOOL/) {
7d30490e 63 atype = vtype = "BOOL"
d88db22a
WD
64 } else if (ptype == "CHAR") {
65 atype = "CHAR"
66 vtype = "char"
7d30490e
WD
67 } else {
68 atype = "INTEGER"
69 vtype = "int"
70 }
71
c83a81ca
WD
72 # The name might be var_name|public_name
73 pubname = name
74 sub(/\|.*/, "", name)
75 sub(/.*\|/, "", pubname)
76 gsub(/_/, " ", pubname)
77 gsub(/-/, "", name)
7d30490e
WD
78
79 if (ptype == "ENUM")
80 enum = "enum_" name
81 else
82 enum = "NULL"
83
84 defines = defines "\t" vtype " " name ";\n"
85 values = values "\t" $0 ", /* " name " */\n"
cb383673 86 parms = parms " {\"" pubname "\", P_" ptype psect name ", " enum ", 0},\n"
7d30490e
WD
87 accessors = accessors "FN_" sect "_" atype "(lp_" name ", " name ")\n"
88
89 if (vtype == "char*") {
90 exps = exps "\tBOOL " name "_EXP;\n"
91 exp_values = exp_values "\tFalse, /* " name "_EXP */\n"
92 }
93
94 next
95}
96
97/./ {
98 print "Extraneous line:" $0
99 defines = ""
100 exit
101}
102
103END {
104 if (sect != "" && defines != "") {
105 defines = defines exps "} local_vars;\n\n"
106 defines = defines tdstruct "\n\tglobal_vars g;\n\tlocal_vars l;\n} all_vars;\n"
107 values = values exp_values "\n }\n};\n\nstatic all_vars Vars;\n"
cb383673
WD
108 parms = parms "\n {NULL, P_BOOL, P_NONE, NULL, NULL, 0}\n};\n"
109 print heading defines values parms accessors > "daemon-parm.h"
7d30490e
WD
110 } else {
111 print "Failed to parse the data in " ARGV[1]
112 exit 1
113 }
114}