#!/usr/bin/perl # Extract parameter definitions from the sample-mumble.cf files in # order to build the postconf raw data file from which everything # will be regenerated. $POSTCONF="postconf"; # Suck in the parameter definition text. Skip non-parameter blocks. # Strip all but the body text (i.e. strip off the non-comment line # that shows the default, since we will use postconf output to supply # the actual values). while(<>) { if (/^[^#]/) { if ($param_name && $saved_text) { $saved_text =~ s/^(\n|#|\s)+//; $saved_text =~ s/(\n|#|\s)+$//; $saved_text =~ s/^# ?/\n/; $saved_text =~ s/\n# ?/\n/g; $definition{$param_name} = $saved_text; $param_name = $saved_text = ""; } next; } if (/^#/ && $param_name) { $saved_text .= $_; next; } if (/^# The (\S+) (configuration )?parameter/) { $param_name = $1; $saved_text = $_; } } # Read all the default parameter values. This also provides us with # a list of all the parameters that postconf knows about. open(POSTCONF, "$POSTCONF -d|") || die "cannot run $POSTCONF: !$\n"; while() { chop; if (($name, $value) = split(/\s+=\s+/, $_, 2)) { $defaults{$name} = $value; } else { warn "unexpected $POSTCONF output: $_\n"; } } close(POSTCONF) || die "$POSTCONF failed: $!\n"; # Print all parameter definition text that we found, and warn about # missing definition text. for $param_name (sort keys %defaults) { if (defined($definition{$param_name})) { print "#DEFINE $param_name\n\n"; print $definition{$param_name}; print "\n\n"; } else { warn "No definition found for $param_name\n"; } }