#!/usr/bin/perl # Usage: xpostdef postconf.proto >postconf.proto.new # Update parameter default values in postconf prototype file. $POSTCONF="postconf"; # 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 -d: !$\n"; while() { chop; if (($name, $defval) = split(/\s+=\s+/, $_, 2)) { $defval =~ s/&/\&/g; $defval =~ s//\>/g; $defval =~ s/\s+$//; $defaults{$name} = $defval; } else { die "unexpected $POSTCONF output: $_\n"; } } close(POSTCONF) || die "$POSTCONF failed: $!\n"; # Censor out default values that are system or version dependent, or # that don't display well. $censored = <) { if (/^%PARAM/) { # Print the updated parameter text. Keep the old default if # postconf doesn't have a suitable one. if ($name) { $defval = $defaults{$name} if (defined($defaults{$name})); print "%PARAM $name $defval\n"; } print $text; # Reset the parameter name, default, and accumulated text. $name = $defval = $text = $line = ""; # Accumulate the parameter name and default value. do { $_ =~ s/\s+$//; $line .= " " . $_; } while(($_ = ) && /^../); ($junk, $class, $name, $defval) = split(/\s+/, $line, 4); } else { # Accumulate the text in the parameter definition. $_ =~ s/\s+$/\n/; $text .= $_; } } # Fix the last parameter. if ($name && $text) { $defval = $defaults{$name} if (defined($defaults{$name})); print "%PARAM $name $defval\n$text"; }