aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/gen-posix-conf-vars.awk61
1 files changed, 61 insertions, 0 deletions
diff --git a/scripts/gen-posix-conf-vars.awk b/scripts/gen-posix-conf-vars.awk
new file mode 100644
index 0000000..16e20fc
--- /dev/null
+++ b/scripts/gen-posix-conf-vars.awk
@@ -0,0 +1,61 @@
+# 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
+ next
+}
+
+$1 == "}" {
+ prefix = ""
+ type = ""
+ 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
+ conf[prefix][$1] = type
+}
+
+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 (p in conf) {
+ for (c in conf[p]) {
+ printf "#ifndef _%s_%s\n", p, c
+ printf "# define CONF_DEF_%s_%s CONF_DEF_UNDEFINED\n", p, c
+ # CONFSTR have string values and they are not set or unset.
+ if (conf[p][c] != "CONFSTR") {
+ printf "#else\n"
+ printf "# if _%s_%s > 0\n", p, c
+ printf "# define CONF_DEF_%s_%s CONF_DEF_DEFINED_SET\n", p, c
+ printf "# else\n"
+ printf "# define CONF_DEF_%s_%s CONF_DEF_DEFINED_UNSET\n", p, c
+ printf "# endif\n"
+ }
+ printf "#endif\n\n"
+ }
+ }
+}