automake-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Automake-commit] [SCM] GNU Automake branch, master, updated. v1.11b-17-


From: Jim Meyering
Subject: [Automake-commit] [SCM] GNU Automake branch, master, updated. v1.11b-17-gda0f9ab
Date: Thu, 12 Apr 2012 18:43:33 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Automake".

http://git.sv.gnu.org/gitweb/?p=automake.git;a=commitdiff;h=da0f9ab4e4b15e9d5ff6f7474ab2c0ea8007f03d

The branch, master has been updated
       via  da0f9ab4e4b15e9d5ff6f7474ab2c0ea8007f03d (commit)
       via  15d4a60bec70bee6c4ddd4020dc74e669f4d3174 (commit)
      from  47962000102e426ff0f77b34cc8eff98283411c4 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit da0f9ab4e4b15e9d5ff6f7474ab2c0ea8007f03d
Author: Jim Meyering <address@hidden>
Date:   Thu Apr 12 15:07:19 2012 +0200

    build: generate doc/*.1 files; include help2man
    
    This change is required to avoid making a distributed file depend
    on a generated (non-distributed) one.  The preceding change
    introduced one such dependency, with the distributed doc/*.1
    depending on the generated aclocal and automake files.  Here,
    we avoid the problem by generating the doc/*.1 files rather than
    distributing them.
    
    * doc/help2man: New file, version 1.37.1.
    * Makefile.am (EXTRA_DIST): Add doc/help2man.
    (man1_MANS): Rename from $(dist_man1_MANS).  Remove $(srcdir) prefix.
    (CLEANFILES): Add these files here, rather than to
    $(MAINTAINERCLEANFILES), since we are no longer distributing them.
    (update_mans): Use doc/help2man, not $(HELP2MAN).
    * configure.ac: Don't test for help2man, now that we bundle it.

commit 15d4a60bec70bee6c4ddd4020dc74e669f4d3174
Author: Jim Meyering <address@hidden>
Date:   Wed Apr 11 21:25:48 2012 +0200

    build: avoid parallel build failures
    
    A parallel build would fail when two concurrent sub-make processes
    tried to build lib/Automake/Config.pm.  The loser would complain that
      grep: lib/Automake/Config.pm-t: No such file or directory
      chmod: cannot access `lib/Automake/Config.pm-t': No such file or\
        directory
      make[1]: *** [lib/Automake/Config.pm] Error 1
    * Makefile.am (update_mans): Don't build lib/Automake/Config.pm here.
    Instead, depend on it from the two rules that use it:
    ($(srcdir)/doc/aclocal-$(APIVERSION).1): Depend on it.
    ($(srcdir)/doc/automake-$(APIVERSION).1): Likewise.
    
    [ Note that technically, the above is incorrect, since it makes those
      distributed doc/*.1 files depend on generated aclocal and automake.
      That problem is addressed by the following commit. ]
    
    However, that was not enough, since even then, a parallel build
    would still fail, now with this:
    
      help2man: can't get `--help' info from automake-1.11a
      Try `--no-discard-stderr' if option outputs to stderr
      make: *** [doc/automake-1.11a.1] Error 1
    
    a subsequent "make -j3" would create the missing file.
    That was because help2man would invoke t/wrap/aclocal.in and
    t/wrap/automake.in, each of which would require aclocal and
    automake, yet those two files weren't guaranteed to be created.
    Add explicit dependencies:
    ($(srcdir)/doc/aclocal-$(APIVERSION).1): Depend on aclocal.
    ($(srcdir)/doc/automake-$(APIVERSION).1): Depend on automake.

-----------------------------------------------------------------------

Summary of changes:
 Makefile.am  |   26 ++-
 configure.ac |    3 -
 doc/help2man |  656 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 670 insertions(+), 15 deletions(-)
 create mode 100755 doc/help2man

diff --git a/Makefile.am b/Makefile.am
index 991de4c..dc8932d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -447,31 +447,33 @@ info_TEXINFOS = doc/automake.texi 
doc/automake-history.texi
 doc_automake_TEXINFOS = doc/fdl.texi
 doc_automake_history_TEXINFOS = doc/fdl.texi
 
-dist_man1_MANS = \
-  $(srcdir)/doc/aclocal.1 \
-  $(srcdir)/doc/automake.1 \
-  $(srcdir)/doc/aclocal-$(APIVERSION).1 \
-  $(srcdir)/doc/automake-$(APIVERSION).1
+man1_MANS = \
+  doc/aclocal.1 \
+  doc/automake.1 \
+  doc/aclocal-$(APIVERSION).1 \
+  doc/automake-$(APIVERSION).1
 
-$(dist_man1_MANS): $(srcdir)/configure.ac
+$(man1_MANS): $(srcdir)/configure.ac
 
-MAINTAINERCLEANFILES += $(dist_man1_MANS)
+CLEANFILES += $(man1_MANS)
+EXTRA_DIST += doc/help2man
 
 update_mans = \
   $(AM_V_GEN): \
-    && $(MAKE) $(AM_MAKEFLAGS) lib/Automake/Config.pm \
+    && $(MKDIR_P) doc \
     && PATH="$(abs_builddir)/t/wrap$(PATH_SEPARATOR)$$PATH" \
     && export PATH \
-    && $(HELP2MAN) --output=$@
+    && $(PERL) $(srcdir)/doc/help2man --output=$@
 
-$(srcdir)/doc/aclocal.1 $(srcdir)/doc/automake.1:
+doc/aclocal.1 doc/automake.1:
        $(AM_V_GEN): \
+         && $(MKDIR_P) doc \
          && f=`echo $@ | sed 's|.*/||; s|\.1$$||; $(transform)'` \
          && echo ".so man1/$$f-$(APIVERSION).1" > $@
 
-$(srcdir)/doc/aclocal-$(APIVERSION).1: $(srcdir)/aclocal.in
+doc/aclocal-$(APIVERSION).1: aclocal.in aclocal lib/Automake/Config.pm
        $(update_mans) aclocal-$(APIVERSION)
-$(srcdir)/doc/automake-$(APIVERSION).1: $(srcdir)/automake.in
+doc/automake-$(APIVERSION).1: automake.in automake lib/Automake/Config.pm
        $(update_mans) automake-$(APIVERSION)
 
 
diff --git a/configure.ac b/configure.ac
index 81cb303..f4582d2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -124,9 +124,6 @@ AM_RUN_LOG([$TEX --version </dev/null])
 AC_CHECK_PROGS([YACC], [yacc byacc 'bison -y'], [false])
 AC_CHECK_PROGS([LEX], [lex flex], [false])
 
-# Generate man pages.
-AM_MISSING_PROG([HELP2MAN], [help2man])
-
 # Test for Autoconf.  We run Autoconf in a subdirectory to ease
 # deletion of any files created (such as those added to
 # autom4te.cache).  We used to perform only the last of the three
diff --git a/doc/help2man b/doc/help2man
new file mode 100755
index 0000000..96896f6
--- /dev/null
+++ b/doc/help2man
@@ -0,0 +1,656 @@
+#!/usr/bin/perl -w
+
+# Generate a short man page from --help and --version output.
+# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2009
+# Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Written by Brendan O'Dea <address@hidden>
+# Available from ftp://ftp.gnu.org/gnu/help2man/
+
+use 5.005;
+use strict;
+use Getopt::Long;
+use Text::Tabs qw(expand);
+use POSIX qw(strftime setlocale LC_ALL);
+use Locale::gettext;
+use Encode qw(decode encode);
+use I18N::Langinfo qw(langinfo CODESET);
+
+my $this_program = 'help2man';
+my $this_version = '1.37.1';
+my $encoding;
+
+{
+    my $gettext = Locale::gettext->domain($this_program);
+    sub _ { $gettext->get($_[0]) }
+
+    my ($user_locale) = grep defined && length,
+       (map $ENV{$_}, qw(LANGUAGE LC_ALL LC_MESSAGES LANG)), 'C';
+
+    my $user_encoding = langinfo CODESET;
+
+    # Set localisation of date and executable's output.
+    sub configure_locale
+    {
+       delete @ENV{qw(LANGUAGE LC_MESSAGES LANG)};
+       setlocale LC_ALL, $ENV{LC_ALL} = shift || 'C';
+       $encoding = langinfo CODESET;
+    }
+
+    sub dec { $encoding ? decode $encoding, $_[0] : $_[0] }
+    sub enc { $encoding ? encode $encoding, $_[0] : $_[0] }
+    sub enc_user { encode $user_encoding, $_[0] }
+    sub kark # die with message formatted in the invoking user's locale
+    {
+       setlocale LC_ALL, $user_locale;
+       my $fmt = $gettext->get(shift);
+       my $errmsg = enc_user sprintf $fmt, @_;
+       die $errmsg, "\n";
+    }
+}
+
+sub N_ { $_[0] }
+
+my $version_info = enc_user sprintf _(<<'EOT'), $this_program, $this_version;
+GNU %s %s
+
+Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2009
+Free Software Foundation, Inc.
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+Written by Brendan O'Dea <address@hidden>
+EOT
+
+my $help_info = enc_user sprintf _(<<'EOT'), $this_program, $this_program;
+`%s' generates a man page out of `--help' and `--version' output.
+
+Usage: %s [OPTION]... EXECUTABLE
+
+ -n, --name=STRING       description for the NAME paragraph
+ -s, --section=SECTION   section number for manual page (1, 6, 8)
+ -m, --manual=TEXT       name of manual (User Commands, ...)
+ -S, --source=TEXT       source of program (FSF, Debian, ...)
+ -L, --locale=STRING     select locale (default "C")
+ -i, --include=FILE      include material from `FILE'
+ -I, --opt-include=FILE  include material from `FILE' if it exists
+ -o, --output=FILE       send output to `FILE'
+ -p, --info-page=TEXT    name of Texinfo manual
+ -N, --no-info           suppress pointer to Texinfo manual
+     --help              print this help, then exit
+     --version           print version number, then exit
+
+EXECUTABLE should accept `--help' and `--version' options and produce output on
+stdout although alternatives may be specified using:
+
+ -h, --help-option=STRING     help option string
+ -v, --version-option=STRING  version option string
+ --version-string=STRING      version string
+ --no-discard-stderr          include stderr when parsing option output
+
+Report bugs to <address@hidden>.
+EOT
+
+my $section = 1;
+my $manual = '';
+my $source = '';
+my $help_option = '--help';
+my $version_option = '--version';
+my $discard_stderr = 1;
+my ($opt_name, @opt_include, $opt_output, $opt_info, $opt_no_info, 
$version_text);
+
+my %opt_def = (
+    'n|name=s'          => \$opt_name,
+    's|section=s'       => \$section,
+    'm|manual=s'        => \$manual,
+    'S|source=s'        => \$source,
+    'L|locale=s'        => sub { configure_locale pop },
+    'i|include=s'       => sub { push @opt_include, [ pop, 1 ] },
+    'I|opt-include=s'   => sub { push @opt_include, [ pop, 0 ] },
+    'o|output=s'        => \$opt_output,
+    'p|info-page=s'     => \$opt_info,
+    'N|no-info'                 => \$opt_no_info,
+    'help'              => sub { print $help_info; exit },
+    'version'           => sub { print $version_info; exit },
+    'h|help-option=s'   => \$help_option,
+    'v|version-option=s' => \$version_option,
+    'version-string=s'  => \$version_text,
+    'discard-stderr!'   => \$discard_stderr,
+);
+
+# Parse options.
+Getopt::Long::config('bundling');
+die $help_info unless GetOptions %opt_def and @ARGV == 1;
+
+configure_locale unless $encoding;
+
+my %include = ();
+my %append = ();
+my @include = (); # retain order given in include file
+
+# Process include file (if given).  Format is:
+#
+#   [section name]
+#   verbatim text
+#
+# or
+#
+#   /pattern/
+#   verbatim text
+#
+
+while (@opt_include)
+{
+    my ($inc, $required) = @{shift @opt_include};
+
+    next unless -f $inc or $required;
+    kark N_("%s: can't open `%s' (%s)"), $this_program, $inc, $!
+       unless open INC, $inc;
+
+    my $key;
+    my $hash = \%include;
+
+    while (<INC>)
+    {
+       # Convert input to internal Perl format, so that multibyte
+       # sequences are treated as single characters.
+       $_ = dec $_;
+
+       # [section]
+       if (/^\[([^]]+)\]\s*$/)
+       {
+           $key = uc $1;
+           $key =~ s/^\s+//;
+           $key =~ s/\s+$//;
+           $hash = \%include;
+           push @include, $key unless $include{$key};
+           next;
+       }
+
+       # /pattern/
+       if (m!^/(.*)/([ims]*)\s*$!)
+       {
+           my $pat = $2 ? "(?$2)$1" : $1;
+
+           # Check pattern.
+           eval { $key = qr($pat) };
+           if ($@)
+           {
+               $@ =~ s/ at .*? line \d.*//;
+               die "$inc:$.:$@";
+           }
+
+           $hash = \%append;
+           next;
+       }
+
+       # Check for options before the first section--anything else is
+       # silently ignored, allowing the first for comments and
+       # revision info.
+       unless ($key)
+       {
+           # handle options
+           if (/^-/)
+           {
+               local @ARGV = split;
+               GetOptions %opt_def;
+           }
+
+           next;
+       }
+
+       $hash->{$key} ||= '';
+       $hash->{$key} .= $_;
+    }
+
+    close INC;
+
+    kark N_("%s: no valid information found in `%s'"), $this_program, $inc
+       unless $key;
+}
+
+# Compress trailing blank lines.
+for my $hash (\(%include, %append))
+{
+    for (keys %$hash) { $hash->{$_} =~ s/\n+$/\n/ }
+}
+
+sub get_option_value;
+
+# Grab help and version info from executable.
+my $help_text   = get_option_value $ARGV[0], $help_option;
+$version_text ||= get_option_value $ARGV[0], $version_option;
+
+my $date = strftime "%B %Y", localtime;
+(my $program = $ARGV[0]) =~ s!.*/!!;
+my $package = $program;
+my $version;
+
+if ($opt_output)
+{
+    unlink $opt_output or kark N_("%s: can't unlink %s (%s)"),
+       $this_program, $opt_output, $! if -e $opt_output;
+
+    open STDOUT, ">$opt_output"
+       or kark N_("%s: can't create %s (%s)"), $this_program, $opt_output, $!;
+}
+
+# The first line of the --version information is assumed to be in one
+# of the following formats:
+#
+#   <version>
+#   <program> <version>
+#   {GNU,Free} <program> <version>
+#   <program> ({GNU,Free} <package>) <version>
+#   <program> - {GNU,Free} <package> <version>
+#
+# and separated from any copyright/author details by a blank line.
+
+($_, $version_text) = ((split /\n+/, $version_text, 2), '');
+
+if (/^(\S+) +\(((?:GNU|Free) +[^)]+)\) +(.*)/ or
+    /^(\S+) +- *((?:GNU|Free) +\S+) +(.*)/)
+{
+    $program = $1;
+    $package = $2;
+    $version = $3;
+}
+elsif (/^((?:GNU|Free) +)?(\S+) +(.*)/)
+{
+    $program = $2;
+    $package = $1 ? "$1$2" : $2;
+    $version = $3;
+}
+else
+{
+    $version = $_;
+}
+
+$program =~ s!.*/!!;
+
+# No info for `info' itself.
+$opt_no_info = 1 if $program eq 'info';
+
+for ($include{_('NAME')})
+{
+    if ($opt_name) # --name overrides --include contents.
+    {
+       $_ = "$program \\- $opt_name\n";
+    }
+    elsif ($_) # Use first name given as $program
+    {
+       $program = $1 if /^([^\s,]+)(?:,?\s*[^\s,\\-]+)*\s+\\?-/;
+    }
+    else # Set a default (useless) NAME paragraph.
+    {
+       $_ = sprintf _("%s \\- manual page for %s %s") . "\n", $program,
+           $program, $version;
+    }
+}
+
+# Man pages traditionally have the page title in caps.
+my $PROGRAM = uc $program;
+
+# Set default page head/footers
+$source ||= "$program $version";
+unless ($manual)
+{
+    for ($section)
+    {
+       if (/^(1[Mm]|8)/) { $manual = _('System Administration Utilities') }
+       elsif (/^6/)      { $manual = _('Games') }
+       else              { $manual = _('User Commands') }
+    }
+}
+
+# Extract usage clause(s) [if any] for SYNOPSIS.
+my $PAT_USAGE = _('Usage');
+my $PAT_USAGE_CONT = _('or');
+if ($help_text =~ s/^($PAT_USAGE):( +(\S+))(.*)((?:\n(?: {6}\1| 
*($PAT_USAGE_CONT): +\S).*)*)//om)
+{
+    my @syn = $3 . $4;
+
+    if ($_ = $5)
+    {
+       s/^\n//;
+       for (split /\n/) { s/^ *(($PAT_USAGE_CONT): +)?//o; push @syn, $_ }
+    }
+
+    my $synopsis = '';
+    for (@syn)
+    {
+       $synopsis .= ".br\n" if $synopsis;
+       s!^\S*/!!;
+       s/^(\S+) *//;
+       $synopsis .= ".B $1\n";
+       s/\s+$//;
+       s/(([][]|\.\.+)+)/\\fR$1\\fI/g;
+       s/^/\\fI/ unless s/^\\fR//;
+       $_ .= '\fR';
+       s/(\\fI)( *)/$2$1/g;
+       s/\\fI\\fR//g;
+       s/^\\fR//;
+       s/\\fI$//;
+       s/^\./\\&./;
+
+       $synopsis .= "$_\n";
+    }
+
+    $include{_('SYNOPSIS')} ||= $synopsis;
+}
+
+# Process text, initial section is DESCRIPTION.
+my $sect = _('DESCRIPTION');
+$_ = "$help_text\n\n$version_text";
+
+# Normalise paragraph breaks.
+s/^\n+//;
+s/\n*$/\n/;
+s/\n\n+/\n\n/g;
+
+# Join hyphenated lines.
+s/([A-Za-z])-\n *([A-Za-z])/$1$2/g;
+
+# Temporarily exchange leading dots, apostrophes and backslashes for
+# tokens.
+s/^\./\x80/mg;
+s/^'/\x81/mg;
+s/\\/\x82/g;
+
+my $PAT_BUGS           = _('Report +(?:[\w-]* +)?bugs|Email +bug +reports 
+to');
+my $PAT_AUTHOR         = _('Written +by');
+my $PAT_OPTIONS                = _('Options');
+my $PAT_EXAMPLES       = _('Examples');
+my $PAT_FREE_SOFTWARE  = _('This +is +free +software');
+
+# Start a new paragraph (if required) for these.
+s/([^\n])\n($PAT_BUGS|$PAT_AUTHOR) /$1\n\n$2 /og;
+
+# Convert iso-8859-1 copyright symbol or (c) to nroff
+# character.
+s/^Copyright +(?:\xa9|\([Cc]\))/Copyright \\(co/mg;
+
+sub convert_option;
+
+while (length)
+{
+    # Convert some standard paragraph names.
+    if (s/^($PAT_OPTIONS): *\n//o)
+    {
+       $sect = _('OPTIONS');
+       next;
+    }
+    elsif (s/^($PAT_EXAMPLES): *\n//o)
+    {
+       $sect = _('EXAMPLES');
+       next;
+    }
+
+    # Copyright section
+    if (/^Copyright /)
+    {
+       $sect = _('COPYRIGHT');
+    }
+
+    # Bug reporting section.
+    elsif (/^($PAT_BUGS) /o)
+    {
+       $sect = _('REPORTING BUGS');
+    }
+
+    # Author section.
+    elsif (/^($PAT_AUTHOR)/o)
+    {
+       $sect = _('AUTHOR');
+    }
+
+    # Examples, indicated by an indented leading $, % or > are
+    # rendered in a constant width font.
+    if (/^( +)([\$\%>] )\S/)
+    {
+       my $indent = $1;
+       my $prefix = $2;
+       my $break = '.IP';
+       $include{$sect} ||= '';
+       while (s/^$indent\Q$prefix\E(\S.*)\n*//)
+       {
+           $include{$sect} .= "$break\n\\f(CW$prefix$1\\fR\n";
+           $break = '.br';
+       }
+
+       next;
+    }
+
+    my $matched = '';
+    $include{$sect} ||= '';
+
+    # Sub-sections have a trailing colon and the second line indented.
+    if (s/^(\S.*:) *\n / /)
+    {
+       $matched .= $& if %append;
+       $include{$sect} .= qq(.SS "$1"\n);
+    }
+
+    my $indent = 0;
+    my $content = '';
+
+    # Option with description.
+    if (s/^( {1,10}([+-]\S.*?))(?:(  +(?!-))|\n( {20,}))(\S.*)\n//)
+    {
+       $matched .= $& if %append;
+       $indent = length ($4 || "$1$3");
+       $content = ".TP\n\x84$2\n\x84$5\n";
+       unless ($4)
+       {
+           # Indent may be different on second line.
+           $indent = length $& if /^ {20,}/;
+       }
+    }
+
+    # Option without description.
+    elsif (s/^ {1,10}([+-]\S.*)\n//)
+    {
+       $matched .= $& if %append;
+       $content = ".HP\n\x84$1\n";
+       $indent = 80; # not continued
+    }
+
+    # Indented paragraph with tag.
+    elsif (s/^( +(\S.*?)  +)(\S.*)\n//)
+    {
+       $matched .= $& if %append;
+       $indent = length $1;
+       $content = ".TP\n\x84$2\n\x84$3\n";
+    }
+
+    # Indented paragraph.
+    elsif (s/^( +)(\S.*)\n//)
+    {
+       $matched .= $& if %append;
+       $indent = length $1;
+       $content = ".IP\n\x84$2\n";
+    }
+
+    # Left justified paragraph.
+    else
+    {
+       s/(.*)\n//;
+       $matched .= $& if %append;
+       $content = ".PP\n" if $include{$sect};
+       $content .= "$1\n";
+    }
+
+    # Append continuations.
+    while ($indent ? s/^ {$indent}(\S.*)\n// : s/^(\S.*)\n//)
+    {
+       $matched .= $& if %append;
+       $content .= "\x84$1\n";
+    }
+
+    # Move to next paragraph.
+    s/^\n+//;
+
+    for ($content)
+    {
+       # Leading dot and apostrophe protection.
+       s/\x84\./\x80/g;
+       s/\x84'/\x81/g;
+       s/\x84//g;
+
+       # Convert options.
+       s/(^| |\()(-[][\w=-]+)/$1 . convert_option $2/mge;
+
+       # Escape remaining hyphens
+       s/-/\x83/g;
+
+       if ($sect eq 'COPYRIGHT')
+       {
+           # Insert line breaks before additional copyright messages
+           # and the disclaimer.
+           s/\n(Copyright |$PAT_FREE_SOFTWARE)/\n.br\n$1/og;
+       }
+       elsif ($sect eq 'REPORTING BUGS')
+       {
+           # Handle multi-line bug reporting sections of the form:
+           #
+           #   Report <program> bugs to <addr>
+           #   GNU <package> home page: <url>
+           #   ...
+           s/\n([[:upper:]])/\n.br\n$1/g;
+       }
+    }
+
+    # Check if matched paragraph contains /pat/.
+    if (%append)
+    {
+       for my $pat (keys %append)
+       {
+           if ($matched =~ $pat)
+           {
+               $content .= ".PP\n" unless $append{$pat} =~ /^\./;
+               $content .= $append{$pat};
+           }
+       }
+    }
+
+    $include{$sect} .= $content;
+}
+
+# Refer to the real documentation.
+unless ($opt_no_info)
+{
+    my $info_page = $opt_info || $program;
+
+    $sect = _('SEE ALSO');
+    $include{$sect} ||= '';
+    $include{$sect} .= ".PP\n" if $include{$sect};
+    $include{$sect} .= sprintf _(<<'EOT'), $program, $program, $info_page;
+The full documentation for
+.B %s
+is maintained as a Texinfo manual.  If the
+.B info
+and
+.B %s
+programs are properly installed at your site, the command
+.IP
+.B info %s
+.PP
+should give you access to the complete manual.
+EOT
+}
+
+# Output header.
+print enc <<EOT;
+.\\" DO NOT MODIFY THIS FILE!  It was generated by $this_program $this_version.
+.TH $PROGRAM "$section" "$date" "$source" "$manual"
+EOT
+
+# Section ordering.
+my @pre = (_('NAME'), _('SYNOPSIS'), _('DESCRIPTION'), _('OPTIONS'),
+    _('EXAMPLES'));
+
+my @post = (_('AUTHOR'), _('REPORTING BUGS'), _('COPYRIGHT'), _('SEE ALSO'));
+my $filter = join '|', @pre, @post;
+
+# Output content.
+for my $sect (@pre, (grep ! /^($filter)$/o, @include), @post)
+{
+    if ($include{$sect})
+    {
+       my $quote = $sect =~ /\W/ ? '"' : '';
+       print enc ".SH $quote$sect$quote\n";
+
+       for ($include{$sect})
+       {
+           # Replace leading dot, apostrophe, backslash and hyphen
+           # tokens.
+           s/\x80/\\&./g;
+           s/\x81/\\&'/g;
+           s/\x82/\\e/g;
+           s/\x83/\\-/g;
+
+           # Convert some latin1 chars to troff equivalents
+           s/\xa0/\\ /g; # non-breaking space
+
+           print enc $_;
+       }
+    }
+}
+
+close STDOUT or kark N_("%s: error writing to %s (%s)"), $this_program,
+    $opt_output || 'stdout', $!;
+
+exit;
+
+# Call program with given option and return results.
+sub get_option_value
+{
+    my ($prog, $opt) = @_;
+    my $stderr = $discard_stderr ? '/dev/null' : '&1';
+    my $value = join '',
+       map { s/ +$//; expand $_ }
+       map { dec $_ }
+       `$prog $opt 2>$stderr`;
+
+    unless ($value)
+    {
+       my $err = N_("%s: can't get `%s' info from %s");
+       $err .= N_("\nTry `--no-discard-stderr' if option outputs to stderr")
+           if $discard_stderr;
+
+       kark $err, $this_program, $opt, $prog;
+    }
+
+    return $value;
+}
+
+# Convert option dashes to \- to stop nroff from hyphenating 'em, and
+# embolden.  Option arguments get italicised.
+sub convert_option
+{
+    local $_ = '\fB' . shift;
+
+    s/-/\x83/g;
+    unless (s/\[=(.*)\]$/\\fR[=\\fI$1\\fR]/)
+    {
+       s/=(.)/\\fR=\\fI$1/;
+       s/ (.)/ \\fI$1/;
+       $_ .= '\fR';
+    }
+
+    $_;
+}


hooks/post-receive
-- 
GNU Automake



reply via email to

[Prev in Thread] Current Thread [Next in Thread]