summaryrefslogtreecommitdiff
path: root/man
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2014-09-30 18:22:48 +0400
committerIgor Pashev <pashev.igor@gmail.com>2014-09-30 18:22:48 +0400
commitc18578632fd3c9e513e613a86ba2b7c4ebee6c45 (patch)
tree377f4d4e3f0a6471a5012126078fcd97f4c67242 /man
parent974ab3dd887985e3aa347f3c6521f819296396a0 (diff)
downloadcoreutils-c18578632fd3c9e513e613a86ba2b7c4ebee6c45.tar.gz
Imported Upstream version 8.23upstream/8.23
Diffstat (limited to 'man')
-rw-r--r--man/chgrp.x2
-rw-r--r--man/chmod.x6
-rw-r--r--man/chown.x2
-rw-r--r--man/coreutils.x4
-rw-r--r--man/df.x5
-rw-r--r--man/du.x2
-rwxr-xr-xman/dummy-man1
-rwxr-xr-xman/help2man421
-rw-r--r--man/local.mk162
-rw-r--r--man/rm.x2
-rw-r--r--man/stdbuf.x2
11 files changed, 309 insertions, 300 deletions
diff --git a/man/chgrp.x b/man/chgrp.x
index 1ceeafc3..a61f3089 100644
--- a/man/chgrp.x
+++ b/man/chgrp.x
@@ -2,3 +2,5 @@
chgrp \- change group ownership
[DESCRIPTION]
.\" Add any additional description here
+[SEE ALSO]
+chown(1), chown(2)
diff --git a/man/chmod.x b/man/chmod.x
index d9147a44..f26d7631 100644
--- a/man/chmod.x
+++ b/man/chmod.x
@@ -1,4 +1,4 @@
-'\" Copyright (C) 1998-2013 Free Software Foundation, Inc.
+'\" Copyright (C) 1998-2014 Free Software Foundation, Inc.
'\"
'\" This is free software. You may redistribute copies of it under the terms
'\" of the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
@@ -16,7 +16,7 @@ which can be either a symbolic representation of changes to make, or
an octal number representing the bit pattern for the new mode bits.
.PP
The format of a symbolic mode is [\c
-\fBugoa\fP.\|.\|.][[\fB+-=\fP][\fIperms\fP.\|.\|.].\|.\|.],
+\fBugoa\fP.\|.\|.][[\fB-+=\fP][\fIperms\fP.\|.\|.].\|.\|.],
where
.I "perms"
is either zero or more letters from the set
@@ -28,7 +28,7 @@ A combination of the letters \fBugoa\fP controls which users' access
to the file will be changed: the user who owns it (\fBu\fP), other
users in the file's group (\fBg\fP), other users not in the file's
group (\fBo\fP), or all users (\fBa\fP). If none of these are given,
-the effect is as if \fBa\fP were
+the effect is as if (\fBa\fP) were
given, but bits that are set in the umask are not affected.
.PP
The operator \fB+\fP causes the selected file mode bits to be added to
diff --git a/man/chown.x b/man/chown.x
index 7ad591d4..96b0c237 100644
--- a/man/chown.x
+++ b/man/chown.x
@@ -1,4 +1,4 @@
-'\" Copyright (C) 1998-2013 Free Software Foundation, Inc.
+'\" Copyright (C) 1998-2014 Free Software Foundation, Inc.
'\"
'\" This is free software. You may redistribute copies of it under the terms
'\" of the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
diff --git a/man/coreutils.x b/man/coreutils.x
new file mode 100644
index 00000000..a7a48799
--- /dev/null
+++ b/man/coreutils.x
@@ -0,0 +1,4 @@
+[NAME]
+coreutils \- single binary for coreutils programs
+[DESCRIPTION]
+.\" Add any additional description here
diff --git a/man/df.x b/man/df.x
index 7e908ae0..6fd040ac 100644
--- a/man/df.x
+++ b/man/df.x
@@ -1,4 +1,4 @@
-'\" Copyright (C) 1998-2013 Free Software Foundation, Inc.
+'\" Copyright (C) 1998-2014 Free Software Foundation, Inc.
'\"
'\" This is free software. You may redistribute copies of it under the terms
'\" of the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
@@ -21,8 +21,7 @@ If an argument is the absolute file name of a disk device node containing a
mounted file system,
.B df
shows the space available on that file system rather than on the
-file system containing the device node (which is always the root
-file system). This version of
+file system containing the device node. This version of
.B df
cannot show the space available on unmounted file systems, because on
most kinds of systems doing so requires very nonportable intimate
diff --git a/man/du.x b/man/du.x
index 6e578c0c..7c302718 100644
--- a/man/du.x
+++ b/man/du.x
@@ -1,4 +1,4 @@
-'\" Copyright (C) 1998-2013 Free Software Foundation, Inc.
+'\" Copyright (C) 1998-2014 Free Software Foundation, Inc.
'\"
'\" This is free software. You may redistribute copies of it under the terms
'\" of the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
diff --git a/man/dummy-man b/man/dummy-man
index 30693762..dca2b678 100755
--- a/man/dummy-man
+++ b/man/dummy-man
@@ -30,6 +30,7 @@ while test $# -gt 0; do
# in the makefile.
--include=*);;
--include) shift;;
+ --info-page=*);;
-*) fatal_ "invalid or unrecognized help2man option '$1'";;
--) shift; break;;
*) break;;
diff --git a/man/help2man b/man/help2man
index 8e83f355..bfeb9897 100755
--- a/man/help2man
+++ b/man/help2man
@@ -1,12 +1,13 @@
#!/usr/bin/perl -w
# Generate a short man page from --help and --version output.
-# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2009,
+# 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
-# This program is free software: you can redistribute it and/or modify
+# 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 of the License, or
-# (at your option) any later version.
+# 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
@@ -14,65 +15,51 @@
# 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, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
# Written by Brendan O'Dea <bod@debian.org>
# Available from ftp://ftp.gnu.org/gnu/help2man/
-use 5.005;
+use 5.008;
use strict;
use Getopt::Long;
use Text::Tabs qw(expand);
use POSIX qw(strftime setlocale LC_ALL);
-use locale;
my $this_program = 'help2man';
-my $this_version = '1.35';
+my $this_version = '1.43.3';
-my $have_gettext;
-BEGIN {
- eval {
- require Locale::gettext;
- Locale::gettext->import (qw(gettext textdomain));
- $have_gettext = 1;
- };
-
- unless ($have_gettext)
- {
- *gettext = sub { $_[0] };
- *textdomain = sub {};
- }
+sub _ { $_[0] }
+sub configure_locale
+{
+ my $locale = shift;
+ die "$this_program: no locale support (Locale::gettext required)\n"
+ unless $locale eq 'C';
}
-sub _ { gettext @_ }
+sub dec { $_[0] }
+sub enc { $_[0] }
+sub enc_user { $_[0] }
+sub kark { die +(sprintf shift, @_), "\n" }
sub N_ { $_[0] }
-textdomain $this_program;
-{
- my ($user_locale) = grep defined && length,
- (map $ENV{$_}, qw(LANGUAGE LC_ALL LC_MESSAGES LANG)), 'C';
-
- sub kark # die with message formatted in the invoking user's locale
- {
- setlocale LC_ALL, $user_locale;
- my $fmt = gettext shift;
- die +(sprintf $fmt, @_), "\n";
- }
-}
+sub program_basename;
+sub get_option_value;
+sub convert_option;
-my $version_info = sprintf _(<<'EOT'), $this_program, $this_version;
+my $version_info = enc_user sprintf _(<<'EOT'), $this_program, $this_version;
GNU %s %s
-Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
-Foundation, Inc.
+Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2009, 2010,
+2011, 2012, 2013 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 <bod@debian.org>
EOT
-my $help_info = sprintf _(<<'EOT'), $this_program, $this_program;
-'%s' generates a man page out of '--help' and '--version' output.
+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
@@ -81,19 +68,22 @@ Usage: %s [OPTION]... EXECUTABLE
-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'
+ -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
+ -l, --libtool exclude the `lt-' from the program name
--help print this help, then exit
--version print version number, then exit
-EXECUTABLE should accept '--help' and '--version' options although
-alternatives may be specified using:
+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 <bug-help2man@gnu.org>.
EOT
@@ -101,55 +91,63 @@ EOT
my $section = 1;
my $manual = '';
my $source = '';
-my $locale = 'C';
my $help_option = '--help';
my $version_option = '--version';
-my ($opt_name, @opt_include, $opt_output, $opt_info, $opt_no_info);
+my $discard_stderr = 1;
+my ($opt_name, @opt_include, $opt_output, $opt_info, $opt_no_info, $opt_libtool,
+ $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' => \$locale,
+ '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,
+ 'l|libtool' => \$opt_libtool,
+ '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');
-GetOptions (%opt_def,
- help => sub { print $help_info; exit },
- version => sub { print $version_info; exit },
-) or die $help_info;
-
-die $help_info unless @ARGV == 1;
-
-die "$this_program: no locale support (Locale::gettext required)\n"
- unless $locale eq 'C' or $have_gettext;
-
-# Set localization of date and executable's output.
-delete @ENV{qw(LANGUAGE LC_MESSAGES LANG)};
-setlocale LC_ALL, $ENV{LC_ALL} = $locale;
+die $help_info unless GetOptions %opt_def and @ARGV == 1;
my %include = ();
+my %replace = ();
my %append = ();
+my %append_match = ();
my @include = (); # retain order given in include file
# Process include file (if given). Format is:
#
-# [section name]
-# verbatim text
+# Optional initial text, ignored. May include lines starting with `-'
+# which are processed as options.
+#
+# [section]
+# Verbatim text to be included in the named section. By default at
+# the start, but in the case of `name' and `synopsis' the content
+# will replace the autogenerated contents.
+#
+# [<section]
+# Verbatim text to be inserted at the start of the named section.
#
-# or
+# [=section]
+# Verbatim text to replace the named section.
+#
+# [>section]
+# Verbatim text to be appended to the end of the named section.
#
# /pattern/
-# verbatim text
+# Verbatim text for inclusion below a paragraph matching `pattern'.
#
while (@opt_include)
@@ -157,27 +155,49 @@ 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, $!
+ kark N_("%s: can't open `%s' (%s)"), $this_program, $inc, $!
unless open INC, $inc;
my $key;
- my $hash = \%include;
+ my $hash;
while (<INC>)
{
+ # Convert input to internal Perl format, so that multibyte
+ # sequences are treated as single characters.
+ $_ = dec $_;
+
# [section]
- if (/^\[([^]]+)\]/)
+ if (/^\[([^]]+)\]\s*$/)
{
$key = uc $1;
$key =~ s/^\s+//;
$key =~ s/\s+$//;
$hash = \%include;
- push @include, $key unless $include{$key};
+ # Handle explicit [<section], [=section] and [>section]
+ if ($key =~ s/^([<>=])\s*//)
+ {
+ if ($1 eq '>') { $hash = \%append; }
+ elsif ($1 eq '=') { $hash = \%replace; }
+ }
+ # NAME/SYNOPSIS replace by default
+ elsif ($key eq _('NAME') or $key eq _('SYNOPSIS'))
+ {
+ $hash = \%replace;
+ }
+ else
+ {
+ $hash = \%include;
+ }
+
+ push @include, $key
+ unless $include{$key} or $replace{$key} or $append{$key};
+
next;
}
# /pattern/
- if (m!^/(.*)/([ims]*)!)
+ if (m!^/(.*)/([ims]*)\s*$!)
{
my $pat = $2 ? "(?$2)$1" : $1;
@@ -189,7 +209,7 @@ while (@opt_include)
die "$inc:$.:$@";
}
- $hash = \%append;
+ $hash = \%append_match;
next;
}
@@ -208,31 +228,31 @@ while (@opt_include)
next;
}
- $hash->{$key} ||= '';
$hash->{$key} .= $_;
}
close INC;
- kark N_("%s: no valid information found in '%s'"), $this_program, $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 my $hash (\(%include, %replace, %append, %append_match))
{
for (keys %$hash) { $hash->{$_} =~ s/\n+$/\n/ }
}
# Grab help and version info from executable.
-my ($help_text, $version_text) = map {
- join '', map { s/ +$//; expand $_ } `$ARGV[0] $_ 2>/dev/null`
- or kark N_("%s: can't get '%s' info from %s"), $this_program,
- $_, $ARGV[0]
-} $help_option, $version_option;
-
-my $date = strftime "%B %Y", localtime;
-(my $program = $ARGV[0]) =~ s!.*/!!;
+my $help_text = get_option_value $ARGV[0], $help_option;
+$version_text ||= get_option_value $ARGV[0], $version_option;
+
+# Translators: the following message is a strftime(3) format string, which in
+# the English version expands to the month as a word and the full year. It
+# is used on the footer of the generated manual pages. If in doubt, you may
+# just use %x as the value (which should be the full locale-specific date).
+my $date = enc strftime _("%B %Y"), localtime;
+my $program = program_basename $ARGV[0];
my $package = $program;
my $version;
@@ -256,19 +276,19 @@ if ($opt_output)
#
# and separated from any copyright/author details by a blank line.
-($_, $version_text) = split /\n+/, $version_text, 2;
+($_, $version_text) = ((split /\n+/, $version_text, 2), '');
if (/^(\S+) +\(((?:GNU|Free) +[^)]+)\) +(.*)/ or
/^(\S+) +- *((?:GNU|Free) +\S+) +(.*)/)
{
- $program = $1;
+ $program = program_basename $1;
$package = $2;
$version = $3;
}
elsif (/^((?:GNU|Free) +)?(\S+) +(.*)/)
{
- $program = $2;
- $package = $1 ? "$1$2" : $2;
+ $program = program_basename $2;
+ $package = $1 ? "$1$program" : $program;
$version = $3;
}
else
@@ -276,18 +296,21 @@ else
$version = $_;
}
-$program =~ s!.*/!!;
-
-# No info for 'info' itself.
+# No info for `info' itself.
$opt_no_info = 1 if $program eq 'info';
-for ($include{_('NAME')})
+if ($opt_name)
{
- if ($opt_name) # --name overrides --include contents.
- {
- $_ = "$program \\- $opt_name\n";
- }
- elsif ($_) # Use first name given as $program
+ # --name overrides --include contents.
+ $replace{_('NAME')} = "$program \\- $opt_name\n";
+}
+
+# Translators: "NAME", "SYNOPSIS" and other one or two word strings in all
+# upper case are manual page section headings. The man(1) manual page in your
+# language, if available should provide the conventional translations.
+for ($replace{_('NAME')} || ($include{_('NAME')} ||= ''))
+{
+ if ($_) # Use first name given as $program
{
$program = $1 if /^([^\s,]+)(?:,?\s*[^\s,\\-]+)*\s+\\?-/;
}
@@ -307,19 +330,22 @@ unless ($manual)
{
for ($section)
{
- if (/^(1[Mm]|8)/) { $manual = _('System Administration Utilities') }
- elsif (/^6/) { $manual = _('Games') }
- else { $manual = _('User Commands') }
+ if (/^(1[Mm]|8)/) { $manual = enc _('System Administration Utilities') }
+ elsif (/^6/) { $manual = enc _('Games') }
+ else { $manual = enc _('User Commands') }
}
}
# Extract usage clause(s) [if any] for SYNOPSIS.
+# Translators: "Usage" and "or" here are patterns (regular expressions) which
+# are used to match the usage synopsis in program output. An example from cp
+# (GNU coreutils) which contains both strings:
+# Usage: cp [OPTION]... [-T] SOURCE DEST
+# or: cp [OPTION]... SOURCE... DIRECTORY
+# or: cp [OPTION]... -t DIRECTORY SOURCE...
my $PAT_USAGE = _('Usage');
my $PAT_USAGE_CONT = _('or');
-if ($help_text =~ s/^($PAT_USAGE):
- ([ ]+(\S+))
- (.*)
- ((?:\n(?:[ ]{6}\1|[ ]*($PAT_USAGE_CONT):[ ]+\S).*)*)//omx)
+if ($help_text =~ s/^($PAT_USAGE):( +(\S+))(.*)((?:\n(?: {6}\1| *($PAT_USAGE_CONT): +\S).*)*)//om)
{
my @syn = $3 . $4;
@@ -334,6 +360,7 @@ if ($help_text =~ s/^($PAT_USAGE):
{
$synopsis .= ".br\n" if $synopsis;
s!^\S*/!!;
+ s/^lt-// if $opt_libtool;
s/^(\S+) *//;
$synopsis .= ".B $1\n";
s/\s+$//;
@@ -349,7 +376,7 @@ if ($help_text =~ s/^($PAT_USAGE):
$synopsis .= "$_\n";
}
- $include{_('SYNOPSIS')} ||= $synopsis;
+ $include{_('SYNOPSIS')} .= $synopsis;
}
# Process text, initial section is DESCRIPTION.
@@ -370,17 +397,28 @@ 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');
-my $PAT_INFO = _('For +complete +documentation');
+# Translators: patterns are used to match common program output. In the source
+# these strings are all of the form of "my $PAT_something = _('...');" and are
+# regular expressions. If there is more than one commonly used string, you
+# may separate alternatives with "|". Spaces in these expressions are written
+# as " +" to indicate that more than one space may be matched. The string
+# "(?:[\\w-]+ +)?" in the bug reporting pattern is used to indicate an
+# optional word, so that either "Report bugs" or "Report _program_ bugs" will
+# be matched.
+my $PAT_BUGS = _('Report +(?:[\w-]+ +)?bugs|Email +bug +reports +to');
+my $PAT_AUTHOR = _('Written +by');
+my $PAT_OPTIONS = _('Options');
+my $PAT_ENVIRONMENT = _('Environment');
+my $PAT_FILES = _('Files');
+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;
+s/([^\n])\n($PAT_BUGS|$PAT_AUTHOR) /$1\n\n$2 /og;
-sub convert_option;
+# Convert iso-8859-1 copyright symbol or (c) to nroff
+# character.
+s/^Copyright +(?:\xa9|\([Cc]\))/Copyright \\(co/mg;
while (length)
{
@@ -390,48 +428,30 @@ while (length)
$sect = _('OPTIONS');
next;
}
- elsif (s/^($PAT_EXAMPLES): *\n//o)
+ if (s/^($PAT_ENVIRONMENT): *\n//o)
{
- $sect = _('EXAMPLES');
+ $sect = _('ENVIRONMENT');
next;
}
- # Skip any texinfo reference as that's handled separately
- if (s/($PAT_INFO).*\n//o)
+ if (s/^($PAT_FILES): *\n//o)
+ {
+ $sect = _('FILES');
+ next;
+ }
+ elsif (s/^($PAT_EXAMPLES): *\n//o)
{
+ $sect = _('EXAMPLES');
next;
}
# Copyright section
- if (/^Copyright +[(\xa9]/)
+ if (/^Copyright /)
{
$sect = _('COPYRIGHT');
- $include{$sect} ||= '';
- $include{$sect} .= ".PP\n" if $include{$sect};
-
- my $copy;
- ($copy, $_) = split /\n\n/, $_, 2;
-
- for ($copy)
- {
- # Add back newline
- s/\n*$/\n/;
-
- # Convert iso9959-1 copyright symbol or (c) to nroff
- # character.
- s/^Copyright +(?:\xa9|\([Cc]\))/Copyright \\(co/mg;
-
- # Insert line breaks before additional copyright messages
- # and the disclaimer.
- s/(.)\n(Copyright |$PAT_FREE_SOFTWARE)/$1\n.br\n$2/og;
- }
-
- $include{$sect} .= $copy;
- $_ ||= '';
- next;
}
- # Catch bug report text.
- if (/^($PAT_BUGS) /o)
+ # Bug reporting section.
+ elsif (/^($PAT_BUGS) /o)
{
$sect = _('REPORTING BUGS');
}
@@ -449,7 +469,6 @@ while (length)
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";
@@ -460,12 +479,11 @@ while (length)
}
my $matched = '';
- $include{$sect} ||= '';
# Sub-sections have a trailing colon and the second line indented.
if (s/^(\S.*:) *\n / /)
{
- $matched .= $& if %append;
+ $matched .= $& if %append_match;
$include{$sect} .= qq(.SS "$1"\n);
}
@@ -475,7 +493,7 @@ while (length)
# Option with description.
if (s/^( {1,10}([+-]\S.*?))(?:( +(?!-))|\n( {20,}))(\S.*)\n//)
{
- $matched .= $& if %append;
+ $matched .= $& if %append_match;
$indent = length ($4 || "$1$3");
$content = ".TP\n\x84$2\n\x84$5\n";
unless ($4)
@@ -488,7 +506,7 @@ while (length)
# Option without description.
elsif (s/^ {1,10}([+-]\S.*)\n//)
{
- $matched .= $& if %append;
+ $matched .= $& if %append_match;
$content = ".HP\n\x84$1\n";
$indent = 80; # not continued
}
@@ -496,7 +514,7 @@ while (length)
# Indented paragraph with tag.
elsif (s/^( +(\S.*?) +)(\S.*)\n//)
{
- $matched .= $& if %append;
+ $matched .= $& if %append_match;
$indent = length $1;
$content = ".TP\n\x84$2\n\x84$3\n";
}
@@ -504,7 +522,7 @@ while (length)
# Indented paragraph.
elsif (s/^( +)(\S.*)\n//)
{
- $matched .= $& if %append;
+ $matched .= $& if %append_match;
$indent = length $1;
$content = ".IP\n\x84$2\n";
}
@@ -513,7 +531,7 @@ while (length)
else
{
s/(.*)\n//;
- $matched .= $& if %append;
+ $matched .= $& if %append_match;
$content = ".PP\n" if $include{$sect};
$content .= "$1\n";
}
@@ -521,8 +539,8 @@ while (length)
# Append continuations.
while ($indent ? s/^ {$indent}(\S.*)\n// : s/^(\S.*)\n//)
{
- $matched .= $& if %append;
- $content .= "\x84$1\n"
+ $matched .= $& if %append_match;
+ $content .= "\x84$1\n";
}
# Move to next paragraph.
@@ -535,22 +553,52 @@ while (length)
s/\x84'/\x81/g;
s/\x84//g;
- # Convert options.
- s/(^| |\()(-[][\w=-]+)/$1 . convert_option $2/mge;
+ # Examples should be verbatim.
+ unless ($sect eq _('EXAMPLES'))
+ {
+ # Convert options.
+ s/(^|[ (])(-[][\w=-]+)/$1 . convert_option $2/mge;
+
+ # Italicise filenames: /a/b, $VAR/c/d, ~/e/f
+ s!
+ (^|[ (]) # space/punctuation before
+ (
+ (?:\$\w+|~)? # leading variable, or tilde
+ (?:/\w(?:[\w.-]*\w)?)+ # path components
+ )
+ ($|[ ,;.)]) # space/punctuation after
+ !$1\\fI$2\\fP$3!xmg;
+ }
- # Escape remaining hyphens
+ # 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)
+ if (%append_match)
{
- for my $pat (keys %append)
+ for my $pat (keys %append_match)
{
if ($matched =~ $pat)
{
- $content .= ".PP\n" unless $append{$pat} =~ /^\./;
- $content .= $append{$pat};
+ $content .= ".PP\n" unless $append_match{$pat} =~ /^\./;
+ $content .= $append_match{$pat};
}
}
}
@@ -564,7 +612,6 @@ 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
@@ -575,12 +622,24 @@ and
.B %s
programs are properly installed at your site, the command
.IP
-.B info coreutils \(aq%s invocation\(aq
+.B info %s
.PP
should give you access to the complete manual.
EOT
}
+# Append additional text.
+while (my ($sect, $text) = each %append)
+{
+ $include{$sect} .= $append{$sect};
+}
+
+# Replace sections.
+while (my ($sect, $text) = each %replace)
+{
+ $include{$sect} = $replace{$sect};
+}
+
# Output header.
print <<EOT;
.\\" DO NOT MODIFY THIS FILE! It was generated by $this_program $this_version.
@@ -589,7 +648,7 @@ EOT
# Section ordering.
my @pre = (_('NAME'), _('SYNOPSIS'), _('DESCRIPTION'), _('OPTIONS'),
- _('EXAMPLES'));
+ _('ENVIRONMENT'), _('FILES'), _('EXAMPLES'));
my @post = (_('AUTHOR'), _('REPORTING BUGS'), _('COPYRIGHT'), _('SEE ALSO'));
my $filter = join '|', @pre, @post;
@@ -599,9 +658,8 @@ for my $sect (@pre, (grep ! /^($filter)$/o, @include), @post)
{
if ($include{$sect})
{
- my $lsect = gettext $sect;
- my $quote = $lsect =~ /\W/ ? '"' : '';
- print ".SH $quote$lsect$quote\n";
+ my $quote = $sect =~ /\W/ ? '"' : '';
+ print enc ".SH $quote$sect$quote\n";
for ($include{$sect})
{
@@ -615,10 +673,7 @@ for my $sect (@pre, (grep ! /^($filter)$/o, @include), @post)
# Convert some latin1 chars to troff equivalents
s/\xa0/\\ /g; # non-breaking space
- $sect eq 'REPORTING BUGS'
- and s/\n(.)/\n.br\n$1/g;
-
- print;
+ print enc $_;
}
}
}
@@ -628,6 +683,38 @@ close STDOUT or kark N_("%s: error writing to %s (%s)"), $this_program,
exit;
+# Get program basename, and strip libtool "lt-" prefix if required.
+sub program_basename
+{
+ local $_ = shift;
+ s!.*/!!;
+ s/^lt-// if $opt_libtool;
+ $_;
+}
+
+# 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%s");
+ my $extra = $discard_stderr
+ ? "\n" . N_("Try `--no-discard-stderr' if option outputs to stderr")
+ : '';
+
+ kark $err, $this_program, $opt, $prog, $extra;
+ }
+
+ $value;
+}
+
# Convert option dashes to \- to stop nroff from hyphenating 'em, and
# embolden. Option arguments get italicised.
sub convert_option
diff --git a/man/local.mk b/man/local.mk
index b5e6e21d..f4b213f7 100644
--- a/man/local.mk
+++ b/man/local.mk
@@ -1,7 +1,7 @@
# Make coreutils man pages. -*-Makefile-*-
# This is included by the top-level Makefile.am.
-# Copyright (C) 2002-2013 Free Software Foundation, Inc.
+# Copyright (C) 2002-2014 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
@@ -35,13 +35,6 @@ ALL_MANS = $(man1_MANS) $(EXTRA_MANS)
CLEANFILES += $(ALL_MANS)
-# This is required because we have subtle inter-directory dependencies:
-# in order to generate all man pages, even those for which we don't
-# install a binary, require that all programs be built at distribution
-# time. We can't use 'dist-hook' for this, since it would run too late:
-# the manpages must be generated before the distdir is created and filled.
-$(EXTRA_MANS): $(all_programs)
-
# This is a kludge to remove generated 'man/*.1' from a non-srcdir build.
# Without this, "make distcheck" might fail.
distclean-local:
@@ -59,114 +52,33 @@ mandeps += $(top_srcdir)/src/system.h
$(ALL_MANS): $(mandeps)
-# Most prog.1 man pages depend on src/prog. List the exceptions:
-# Note that dir and vdir are exceptions only if you consider the name
-# of the .c file upon which they depend: ls.c.
-man/arch.1: src/uname
-man/dir.1: src/dir
-man/install.1: src/ginstall
-man/vdir.1: src/vdir
-
-man/base64.1: src/base64
-man/basename.1: src/basename
-man/cat.1: src/cat
-man/chcon.1: src/chcon
-man/chgrp.1: src/chgrp
-man/chmod.1: src/chmod
-man/chown.1: src/chown
-man/chroot.1: src/chroot
-man/cksum.1: src/cksum
-man/comm.1: src/comm
-man/cp.1: src/cp
-man/csplit.1: src/csplit
-man/cut.1: src/cut
-man/date.1: src/date
-man/dd.1: src/dd
-man/df.1: src/df
-man/dircolors.1: src/dircolors
-man/dirname.1: src/dirname
-man/du.1: src/du
-man/echo.1: src/echo
-man/env.1: src/env
-man/expand.1: src/expand
-man/expr.1: src/expr
-man/factor.1: src/factor
-man/false.1: src/false
-man/fmt.1: src/fmt
-man/fold.1: src/fold
-man/groups.1: src/groups
-man/head.1: src/head
-man/hostid.1: src/hostid
-man/hostname.1: src/hostname
-man/id.1: src/id
-man/join.1: src/join
-man/kill.1: src/kill
-man/link.1: src/link
-man/ln.1: src/ln
-man/logname.1: src/logname
-man/ls.1: src/ls
-man/md5sum.1: src/md5sum
-man/mkdir.1: src/mkdir
-man/mkfifo.1: src/mkfifo
-man/mknod.1: src/mknod
-man/mktemp.1: src/mktemp
-man/mv.1: src/mv
-man/nice.1: src/nice
-man/nl.1: src/nl
-man/nohup.1: src/nohup
-man/nproc.1: src/nproc
-man/numfmt.1: src/numfmt
-man/od.1: src/od
-man/paste.1: src/paste
-man/pathchk.1: src/pathchk
-man/pinky.1: src/pinky
-man/pr.1: src/pr
-man/printenv.1: src/printenv
-man/printf.1: src/printf
-man/ptx.1: src/ptx
-man/pwd.1: src/pwd
-man/readlink.1: src/readlink
-man/realpath.1: src/realpath
-man/rm.1: src/rm
-man/rmdir.1: src/rmdir
-man/runcon.1: src/runcon
-man/seq.1: src/seq
-man/sha1sum.1: src/md5sum
-man/sha224sum.1: src/md5sum
-man/sha256sum.1: src/md5sum
-man/sha384sum.1: src/md5sum
-man/sha512sum.1: src/md5sum
-man/shred.1: src/shred
-man/shuf.1: src/shuf
-man/sleep.1: src/sleep
-man/sort.1: src/sort
-man/split.1: src/split
-man/stat.1: src/stat
-man/stdbuf.1: src/stdbuf
-man/stty.1: src/stty
-man/sum.1: src/sum
-man/sync.1: src/sync
-man/tac.1: src/tac
-man/tail.1: src/tail
-man/tee.1: src/tee
-man/test.1: src/test
-man/timeout.1: src/timeout
-man/touch.1: src/touch
-man/tr.1: src/tr
-man/true.1: src/true
-man/truncate.1: src/truncate
-man/tsort.1: src/tsort
-man/tty.1: src/tty
-man/uname.1: src/uname
-man/unexpand.1: src/unexpand
-man/uniq.1: src/uniq
-man/unlink.1: src/unlink
-man/uptime.1: src/uptime
-man/users.1: src/users
-man/wc.1: src/wc
-man/who.1: src/who
-man/whoami.1: src/whoami
-man/yes.1: src/yes
+# Most prog.1 man pages depend on src/$prog, except when they are part of a
+# single binary, in which case they depend on src/coreutils. The exceptions
+# are handled by converting $name to $prog on the following code.
+# $(ALL_MANS) includes the $(EXTRA_MANS) so even the programs that are not
+# being installed will have the right dependency for the manpages.
+DISTCLEANFILES += man/dynamic-deps.mk
+man/dynamic-deps.mk: Makefile
+ $(AM_V_GEN)rm -f $@ $@-t
+ $(AM_V_at)for man in $(ALL_MANS); do \
+ name=`echo "$$man"|sed 's|.*/||; s|\.1$$||'` || exit 1; \
+ case $$name in \
+ arch) prog='uname';; \
+ install) prog='ginstall';; \
+ test) prog='[';; \
+ *) prog=$$name;; \
+ esac; \
+ case " $(single_binary_progs) " in \
+ *" $$prog "*) \
+ echo $$man: src/coreutils$(EXEEXT);; \
+ *) \
+ echo $$man: src/$$prog$(EXEEXT);; \
+ esac \
+ done > $@-t \
+ && mv $@-t $@
+
+# Include the generated man dependencies.
+@AMDEP_TRUE@@am__include@ man/dynamic-deps.mk
.x.1:
$(AM_V_GEN)name=`echo $@ | sed 's|.*/||; s|\.1$$||'` || exit 1; \
@@ -174,9 +86,9 @@ man/yes.1: src/yes
## creating 'install.1'. Similarly, ensure that it uses the 'src/[' binary
## to create 'test.1'.
case $$name in \
- install) prog='ginstall';; \
- test) prog='[';; \
- *) prog=$$name;; \
+ install) prog='ginstall'; argv=$$name;; \
+ test) prog='['; argv='[';; \
+ *) prog=$$name; argv=$$prog;; \
esac; \
## Note the use of $$t/$*, rather than just '$*' as in other packages.
## That is necessary to avoid failures for programs that are also shell
@@ -185,12 +97,16 @@ man/yes.1: src/yes
&& t=$*.td \
&& rm -rf $$t \
&& $(MKDIR_P) $$t \
- && (cd $$t && $(LN_S) '$(abs_top_builddir)/src/'$$prog $$name) \
+ && (cd $$t && $(LN_S) '$(abs_top_builddir)/src/'$$prog $$argv) \
&& $(run_help2man) \
--source='$(PACKAGE_STRING)' \
--include=$(srcdir)/man/$$name.x \
- --output=$$t/$$name.1 $$t/$$name \
- && sed 's|$*\.td/||g' $$t/$$name.1 > $@-t \
+ --output=$$t/$$name.1 $$t/$$argv \
+ --info-page='coreutils \(aq'$$name' invocation\(aq' \
+ && sed \
+ -e 's|$*\.td/||g' \
+ -e '/For complete documentation/d' \
+ $$t/$$name.1 > $@-t \
&& rm -rf $$t \
- && chmod -w $@-t \
+ && chmod a-w $@-t \
&& mv $@-t $@
diff --git a/man/rm.x b/man/rm.x
index 3eeb6c8d..6da82c42 100644
--- a/man/rm.x
+++ b/man/rm.x
@@ -1,4 +1,4 @@
-'\" Copyright (C) 1998-2013 Free Software Foundation, Inc.
+'\" Copyright (C) 1998-2014 Free Software Foundation, Inc.
'\"
'\" This is free software. You may redistribute copies of it under the terms
'\" of the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
diff --git a/man/stdbuf.x b/man/stdbuf.x
index 8a770413..0f50219b 100644
--- a/man/stdbuf.x
+++ b/man/stdbuf.x
@@ -1,4 +1,4 @@
-'\" Copyright (C) 2009-2013 Free Software Foundation, Inc.
+'\" Copyright (C) 2009-2014 Free Software Foundation, Inc.
'\"
'\" This is free software. You may redistribute copies of it under the terms
'\" of the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.