]>
Commit | Line | Data |
---|---|---|
4a6aca7b SP |
1 | # Generate posix-conf-vars-def.h with definitions for CONF_DEF{CONF} for each |
2 | # configuration variable that getconf or sysconf may use. Currently it is | |
3 | # equipped only to generate such macros for specification macros and for | |
4 | # SYSCONF macros in the _POSIX namespace. | |
5 | ||
6 | BEGIN { | |
7 | prefix = "" | |
8 | } | |
9 | ||
10 | $1 ~ /^#/ || $0 ~ /^\s*$/ { | |
11 | next | |
12 | } | |
13 | ||
14 | # Begin a new prefix. | |
15 | $NF == "{" { | |
16 | type = $1 | |
17 | prefix = $2 | |
50cbbaa9 SP |
18 | |
19 | if (NF == 4) | |
20 | sc_prefix = $3 | |
21 | else | |
22 | sc_prefix = "_SC" | |
23 | ||
4a6aca7b SP |
24 | next |
25 | } | |
26 | ||
27 | $1 == "}" { | |
28 | prefix = "" | |
29 | type = "" | |
50cbbaa9 | 30 | sc_prefix = "" |
4a6aca7b SP |
31 | next |
32 | } | |
33 | ||
34 | { | |
35 | if (prefix == "" && type == "" && sc_prefix == "") { | |
36 | printf ("Syntax error at %s:%d\n", FILENAME, FNR) > "/dev/stderr" | |
37 | exit 1 | |
38 | } | |
39 | ||
40 | # The prefix and variable names are indices and the value indicates what type | |
41 | # of variable it is. The possible options are: | |
42 | # CONFSTR: A configuration string | |
43 | # SYSCONF: A numeric value | |
44 | # SPEC: A specification | |
195f3afc SP |
45 | c = prefix "_" $1 |
46 | sc_prefixes[c] = sc_prefix | |
47 | prefix_conf[c] = type | |
48 | conf[c] = $1 | |
4a6aca7b SP |
49 | } |
50 | ||
51 | END { | |
52 | print "/* AUTOGENERATED by gen-posix-conf-vars.awk. DO NOT EDIT. */\n" | |
53 | ||
54 | # Generate macros that specify if a sysconf macro is defined and/or set. | |
195f3afc SP |
55 | for (c in prefix_conf) { |
56 | printf "#ifndef _%s\n", c | |
57 | printf "# define CONF_DEF_%s CONF_DEF_UNDEFINED\n", c | |
58 | # CONFSTR have string values and they are not set or unset. | |
59 | if (prefix_conf[c] != "CONFSTR") { | |
60 | printf "#else\n" | |
61 | printf "# if _%s > 0\n", c | |
62 | printf "# define CONF_DEF_%s CONF_DEF_DEFINED_SET\n", c | |
63 | printf "# else\n" | |
64 | printf "# define CONF_DEF_%s CONF_DEF_DEFINED_UNSET\n", c | |
65 | printf "# endif\n" | |
66 | } | |
67 | printf "#endif\n\n" | |
50cbbaa9 | 68 | |
195f3afc SP |
69 | # Build a name -> sysconf number associative array to print a C array at |
70 | # the end. | |
b217c15f SP |
71 | if (prefix_conf[c] == "SPEC") |
72 | spec[c] = sc_prefixes[c] "_" conf[c] | |
4a6aca7b | 73 | } |
50cbbaa9 SP |
74 | |
75 | # Print the specification array. Define the macro NEED_SPEC_ARRAY before | |
76 | # including posix-conf-vars.h to make it available in the compilation unit. | |
77 | print "#if NEED_SPEC_ARRAY" | |
78 | print "static const struct { const char *name; int num; } specs[] =" | |
79 | print " {" | |
80 | for (s in spec) { | |
81 | printf " { \"%s\", %s },\n", s, spec[s] | |
82 | } | |
83 | print " };" | |
7910c2ae | 84 | print "static const size_t nspecs = sizeof (specs) / sizeof (specs[0]);" |
50cbbaa9 | 85 | print "#endif" |
4a6aca7b | 86 | } |