1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- # Generate posix-conf-vars-def.h with definitions for CONF_DEF{CONF} for each
- # configuration variable that getconf or sysconf may use. Currently it is
- # equipped only to generate such macros for specification macros and for
- # SYSCONF macros in the _POSIX namespace.
- BEGIN {
- prefix = ""
- }
- $1 ~ /^#/ || $0 ~ /^\s*$/ {
- next
- }
- # Begin a new prefix.
- $NF == "{" {
- type = $1
- prefix = $2
- if (NF == 4)
- sc_prefix = $3
- else
- sc_prefix = "_SC"
- next
- }
- $1 == "}" {
- prefix = ""
- type = ""
- sc_prefix = ""
- next
- }
- {
- if (prefix == "" && type == "" && sc_prefix == "") {
- printf ("Syntax error at %s:%d\n", FILENAME, FNR) > "/dev/stderr"
- exit 1
- }
- # The prefix and variable names are indices and the value indicates what type
- # of variable it is. The possible options are:
- # CONFSTR: A configuration string
- # SYSCONF: A numeric value
- # SPEC: A specification
- c = prefix "_" $1
- sc_prefixes[c] = sc_prefix
- prefix_conf[c] = type
- conf[c] = $1
- }
- END {
- print "/* AUTOGENERATED by gen-posix-conf-vars.awk. DO NOT EDIT. */\n"
- # Generate macros that specify if a sysconf macro is defined and/or set.
- for (c in prefix_conf) {
- printf "#ifndef _%s\n", c
- printf "# define CONF_DEF_%s CONF_DEF_UNDEFINED\n", c
- # CONFSTR have string values and they are not set or unset.
- if (prefix_conf[c] != "CONFSTR") {
- printf "#else\n"
- printf "# if _%s > 0\n", c
- printf "# define CONF_DEF_%s CONF_DEF_DEFINED_SET\n", c
- printf "# else\n"
- printf "# define CONF_DEF_%s CONF_DEF_DEFINED_UNSET\n", c
- printf "# endif\n"
- }
- printf "#endif\n\n"
- # Build a name -> sysconf number associative array to print a C array at
- # the end.
- if (prefix_conf[c] == "SPEC")
- spec[c] = sc_prefixes[c] "_" conf[c]
- }
- # Print the specification array. Define the macro NEED_SPEC_ARRAY before
- # including posix-conf-vars.h to make it available in the compilation unit.
- print "#if NEED_SPEC_ARRAY"
- print "static const struct { const char *name; int num; } specs[] ="
- print " {"
- for (s in spec) {
- printf " { \"%s\", %s },\n", s, spec[s]
- }
- print " };"
- print "static const size_t nspecs = sizeof (specs) / sizeof (specs[0]);"
- print "#endif"
- }
|