+The values stored in config.sh may be either single-quoted or
+double-quoted. Double-quoted strings are handy for those cases where you
+need to include escape sequences in the strings. To avoid runtime variable
+interpolation, any C<$> and C<@> characters are replaced by C<\$> and
+C<\@>, respectively. This isn't foolproof, of course, so don't embed C<\$>
+or C<\@> in double-quoted strings unless you're willing to deal with the
+consequences. (The slashes will end up escaped and the C<$> or C<@> will
+trigger variable interpolation)
+
+=head1 GLOSSARY
+
+Most C<Config> variables are determined by the C<Configure> script
+on platforms supported by it (which is most UNIX platforms). Some
+platforms have custom-made C<Config> variables, and may thus not have
+some of the variables described below, or may have extraneous variables
+specific to that particular port. See the port specific documentation
+in such cases.
+
+ENDOFTAIL
+
+if ($Opts{glossary}) {
+ open(GLOS, "<$Glossary") or die "Can't open $Glossary: $!";
+}
+%seen = ();
+$text = 0;
+$/ = '';
+
+sub process {
+ if (s/\A(\w*)\s+\(([\w.]+)\):\s*\n(\t?)/=item C<$1>\n\nFrom F<$2>:\n\n/m) {
+ my $c = substr $1, 0, 1;
+ unless ($seen{$c}++) {
+ print CONFIG_POD <<EOF if $text;
+=back
+
+EOF
+ print CONFIG_POD <<EOF;
+=head2 $c
+
+=over 4
+
+EOF
+ $text = 1;
+ }
+ }
+ elsif (!$text || !/\A\t/) {
+ warn "Expected a Configure variable header",
+ ($text ? " or another paragraph of description" : () );
+ }
+ s/n't/n\00t/g; # leave can't, won't etc untouched
+ s/^\t\s+(.*)/\n$1/gm; # Indented lines ===> new paragraph
+ s/^(?<!\n\n)\t(.*)/$1/gm; # Not indented lines ===> text
+ s{([\'\"])(?=[^\'\"\s]*[./][^\'\"\s]*\1)([^\'\"\s]+)\1}(F<$2>)g; # '.o'
+ s{([\'\"])([^\'\"\s]+)\1}(C<$2>)g; # "date" command
+ s{\'([A-Za-z_\- *=/]+)\'}(C<$1>)g; # 'ln -s'
+ s{
+ (?<! [\w./<\'\"] ) # Only standalone file names
+ (?! e \. g \. ) # Not e.g.
+ (?! \. \. \. ) # Not ...
+ (?! \d ) # Not 5.004
+ (?! read/ ) # Not read/write
+ (?! etc\. ) # Not etc.
+ (?! I/O ) # Not I/O
+ (
+ \$ ? # Allow leading $
+ [\w./]* [./] [\w./]* # Require . or / inside
+ )
+ (?<! \. (?= [\s)] ) ) # Do not include trailing dot
+ (?! [\w/] ) # Include all of it
+ }
+ (F<$1>)xg; # /usr/local
+ s/((?<=\s)~\w*)/F<$1>/g; # ~name
+ s/(?<![.<\'\"])\b([A-Z_]{2,})\b(?![\'\"])/C<$1>/g; # UNISTD
+ s/(?<![.<\'\"])\b(?!the\b)(\w+)\s+macro\b/C<$1> macro/g; # FILE_cnt macro
+ s/n[\0]t/n't/g; # undo can't, won't damage
+}
+
+if ($Opts{glossary}) {
+ <GLOS>; # Skip the "DO NOT EDIT"
+ <GLOS>; # Skip the preamble
+ while (<GLOS>) {
+ process;
+ print CONFIG_POD;
+ }
+}
+
+print CONFIG_POD <<'ENDOFTAIL';
+
+=back
+