GNU bug report logs -
#11235
automake build fails: "Can't locate Locale/gettext.pm"
Previous Next
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 11235 in the body.
You can then email your comments to 11235 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-automake <at> gnu.org
:
bug#11235
; Package
automake
.
(Fri, 13 Apr 2012 13:10:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Stefano Lattarini <stefano.lattarini <at> gmail.com>
:
New bug report received and forwarded. Copy sent to
bug-automake <at> gnu.org
.
(Fri, 13 Apr 2012 13:10:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
On a Fedora 16 system (the ppc64 one provided by the GCC compile farm,
"gcc110"), when I try to build automake from a distribution tarball, I
get this error:
GEN doc/aclocal.1
GEN automake
GEN doc/automake.1
GEN aclocal
GEN lib/Automake/Config.pm
GEN doc/aclocal-1.11c.1
Can't locate Locale/gettext.pm in @INC [...] at ./doc/help2man line 29.
BEGIN failed--compilation aborted at ./doc/help2man line 29.
make: *** [doc/aclocal-1.11c.1] Error 2
make: *** Waiting for unfinished jobs....
This is clearly caused by commit 'v1.11b-17-gda0f9ab', "build: generate
doc/*.1 files; include help2man".
Jim, any idea on which is the best way to fix this? Should we downgrade
the bundled help2man further? Or should we patch it? Or what else?
Regards,
Stefano
Information forwarded
to
bug-automake <at> gnu.org
:
bug#11235
; Package
automake
.
(Fri, 13 Apr 2012 16:05:02 GMT)
Full text and
rfc822 format available.
Message #8 received at submit <at> debbugs.gnu.org (full text, mbox):
Stefano Lattarini wrote:
> On a Fedora 16 system (the ppc64 one provided by the GCC compile farm,
> "gcc110"), when I try to build automake from a distribution tarball, I
> get this error:
>
> GEN doc/aclocal.1
> GEN automake
> GEN doc/automake.1
> GEN aclocal
> GEN lib/Automake/Config.pm
> GEN doc/aclocal-1.11c.1
> Can't locate Locale/gettext.pm in @INC [...] at ./doc/help2man line 29.
> BEGIN failed--compilation aborted at ./doc/help2man line 29.
> make: *** [doc/aclocal-1.11c.1] Error 2
> make: *** Waiting for unfinished jobs....
>
> This is clearly caused by commit 'v1.11b-17-gda0f9ab', "build: generate
> doc/*.1 files; include help2man".
>
> Jim, any idea on which is the best way to fix this? Should we downgrade
> the bundled help2man further? Or should we patch it? Or what else?
[somehow I managed to drop the bug-automake Cc; resending]
Hi Stefano,
I'm glad you noticed that. I've attached a proposed fix.
Going back just one release brings us to a script that does
not require that "use" (hard-require) that module.
I've Cc'd the help2man bug-reporting list.
From e93e39c1e07597f8644e9539f8c5daaa47c054e3 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering <at> redhat.com>
Date: Fri, 13 Apr 2012 17:58:04 +0200
Subject: [PATCH] build: use slightly older help2man, for improved portability
* doc/help2man: Downgrade to help2man-1.36.4, so that it does
not require Locale/gettext.pm, which is not available on a
default Fedora 16 installation. Reported by Stefano Lattarini.
---
doc/help2man | 201 +++++++++++++++++++++++++++-------------------------------
1 file changed, 92 insertions(+), 109 deletions(-)
diff --git a/doc/help2man b/doc/help2man
index 96896f6..01e690b 100755
--- a/doc/help2man
+++ b/doc/help2man
@@ -1,12 +1,12 @@
#!/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
+# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
# 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)
+# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
@@ -26,57 +26,54 @@ 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);
+use locale;
my $this_program = 'help2man';
-my $this_version = '1.37.1';
-my $encoding;
+my $this_version = '1.36';
-{
- 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;
+my $have_gettext;
+BEGIN {
+ eval {
+ require Locale::gettext;
+ Locale::gettext->import;
+ $have_gettext = 1;
+ };
- # Set localisation of date and executable's output.
- sub configure_locale
+ unless ($have_gettext)
{
- delete @ENV{qw(LANGUAGE LC_MESSAGES LANG)};
- setlocale LC_ALL, $ENV{LC_ALL} = shift || 'C';
- $encoding = langinfo CODESET;
+ *gettext = sub { $_[0] };
+ *textdomain = sub {};
}
+}
+
+sub _ { gettext @_ }
+sub N_ { $_[0] }
+
+textdomain $this_program;
+{
+ my ($user_locale) = grep defined && length,
+ (map $ENV{$_}, qw(LANGUAGE LC_ALL LC_MESSAGES LANG)), 'C';
- 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";
+ my $fmt = gettext shift;
+ die +(sprintf $fmt, @_), "\n";
}
}
-sub N_ { $_[0] }
-
-my $version_info = enc_user sprintf _(<<'EOT'), $this_program, $this_version;
+my $version_info = 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.
+Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 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 <at> debian.org>
EOT
-my $help_info = enc_user sprintf _(<<'EOT'), $this_program, $this_program;
+my $help_info = sprintf _(<<'EOT'), $this_program, $this_program;
`%s' generates a man page out of `--help' and `--version' output.
Usage: %s [OPTION]... EXECUTABLE
@@ -94,13 +91,11 @@ Usage: %s [OPTION]... EXECUTABLE
--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:
+EXECUTABLE should accept `--help' and `--version' options 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 <at> gnu.org>.
EOT
@@ -108,35 +103,44 @@ EOT
my $section = 1;
my $manual = '';
my $source = '';
+my $locale = 'C';
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_name, @opt_include, $opt_output, $opt_info, $opt_no_info);
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 },
+ 'L|locale=s' => \$locale,
'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;
+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;
-configure_locale unless $encoding;
+die "$this_program: no locale support (Locale::gettext required)\n"
+ unless $locale eq 'C' or $have_gettext;
+
+# Add default territory to locale.
+$locale .= "_\U$locale" if $locale =~ /^[a-z]{2}$/;
+
+# Set localisation of date and executable's ouput.
+delete @ENV{qw(LANGUAGE LC_MESSAGES LANG)};
+setlocale LC_ALL, $ENV{LC_ALL} = $locale;
my %include = ();
my %append = ();
@@ -166,12 +170,8 @@ while (@opt_include)
while (<INC>)
{
- # Convert input to internal Perl format, so that multibyte
- # sequences are treated as single characters.
- $_ = dec $_;
-
# [section]
- if (/^\[([^]]+)\]\s*$/)
+ if (/^\[([^]]+)\]/)
{
$key = uc $1;
$key =~ s/^\s+//;
@@ -182,7 +182,7 @@ while (@opt_include)
}
# /pattern/
- if (m!^/(.*)/([ims]*)\s*$!)
+ if (m!^/(.*)/([ims]*)!)
{
my $pat = $2 ? "(?$2)$1" : $1;
@@ -229,11 +229,12 @@ 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 ($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!.*/!!;
@@ -258,9 +259,9 @@ if ($opt_output)
# <program> ({GNU,Free} <package>) <version>
# <program> - {GNU,Free} <package> <version>
#
-# and separated from any copyright/author details by a blank line.
+# and seperated 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+) +(.*)/)
@@ -371,18 +372,14 @@ s/^\./\x80/mg;
s/^'/\x81/mg;
s/\\/\x82/g;
-my $PAT_BUGS = _('Report +(?:[\w-]* +)?bugs|Email +bug +reports +to');
+my $PAT_BUGS = _('Report +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;
+s/([^\n])\n($PAT_BUGS|$PAT_AUTHOR)/$1\n\n$2/og;
sub convert_option;
@@ -401,13 +398,36 @@ while (length)
}
# Copyright section
- if (/^Copyright /)
+ if (/^Copyright +[(\xa9]/)
{
$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;
}
- # Bug reporting section.
- elsif (/^($PAT_BUGS) /o)
+ # Catch bug report text.
+ if (/^($PAT_BUGS) /o)
{
$sect = _('REPORTING BUGS');
}
@@ -498,7 +518,7 @@ while (length)
while ($indent ? s/^ {$indent}(\S.*)\n// : s/^(\S.*)\n//)
{
$matched .= $& if %append;
- $content .= "\x84$1\n";
+ $content .= "\x84$1\n"
}
# Move to next paragraph.
@@ -516,22 +536,6 @@ while (length)
# 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/.
@@ -574,7 +578,7 @@ EOT
}
# Output header.
-print enc <<EOT;
+print <<EOT;
.\\" DO NOT MODIFY THIS FILE! It was generated by $this_program $this_version.
.TH $PROGRAM "$section" "$date" "$source" "$manual"
EOT
@@ -591,8 +595,9 @@ for my $sect (@pre, (grep ! /^($filter)$/o, @include), @post)
{
if ($include{$sect})
{
- my $quote = $sect =~ /\W/ ? '"' : '';
- print enc ".SH $quote$sect$quote\n";
+ my $lsect = gettext $sect;
+ my $quote = $lsect =~ /\W/ ? '"' : '';
+ print ".SH $quote$lsect$quote\n";
for ($include{$sect})
{
@@ -606,7 +611,7 @@ for my $sect (@pre, (grep ! /^($filter)$/o, @include), @post)
# Convert some latin1 chars to troff equivalents
s/\xa0/\\ /g; # non-breaking space
- print enc $_;
+ print;
}
}
}
@@ -616,28 +621,6 @@ close STDOUT or kark N_("%s: error writing to %s (%s)"), $this_program,
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
--
1.7.10.130.g36e6c
Information forwarded
to
bug-automake <at> gnu.org
:
bug#11235
; Package
automake
.
(Fri, 13 Apr 2012 16:16:02 GMT)
Full text and
rfc822 format available.
Message #11 received at 11235 <at> debbugs.gnu.org (full text, mbox):
Hi Jim, thanks for the quick reply.
On 04/13/2012 06:00 PM, Jim Meyering wrote:
> Stefano Lattarini wrote:
>> On a Fedora 16 system (the ppc64 one provided by the GCC compile farm,
>> "gcc110"), when I try to build automake from a distribution tarball, I
>> get this error:
>>
>> GEN doc/aclocal.1
>> GEN automake
>> GEN doc/automake.1
>> GEN aclocal
>> GEN lib/Automake/Config.pm
>> GEN doc/aclocal-1.11c.1
>> Can't locate Locale/gettext.pm in @INC [...] at ./doc/help2man line 29.
>> BEGIN failed--compilation aborted at ./doc/help2man line 29.
>> make: *** [doc/aclocal-1.11c.1] Error 2
>> make: *** Waiting for unfinished jobs....
>>
>> This is clearly caused by commit 'v1.11b-17-gda0f9ab', "build: generate
>> doc/*.1 files; include help2man".
>>
>> Jim, any idea on which is the best way to fix this? Should we downgrade
>> the bundled help2man further? Or should we patch it? Or what else?
>
> Hi Stefano,
>
> I'm glad you noticed that. I've attached a proposed fix.
> Going back just one release brings us to a script that does
> not require that "use" (hard-require) that module.
>
> I've Cc'd the help2man bug-reporting list.
>
Note that this help2man issue has probably already been solved in
the meantime -- the help2man version 1.40.6 installed on that
Fedora system seems to work without error.
> From e93e39c1e07597f8644e9539f8c5daaa47c054e3 Mon Sep 17 00:00:00 2001
> From: Jim Meyering <meyering <at> redhat.com>
> Date: Fri, 13 Apr 2012 17:58:04 +0200
> Subject: [PATCH] build: use slightly older help2man, for improved portability
>
> * doc/help2man: Downgrade to help2man-1.36.4, so that it does
> not require Locale/gettext.pm, which is not available on a
> default Fedora 16 installation. Reported by Stefano Lattarini.
>
Could you please reference the bug number here as well? As in:
Subject: [PATCH] build: use slightly older help2man, for improved portability
Fixes automake bug#11235
* doc/help2man: Downgrade to help2man-1.36.4, so that it does
not require Locale/gettext.pm, which is not available on a
default Fedora 16 installation.
ACK with that addressed.
Thanks,
Stefano
Information forwarded
to
bug-automake <at> gnu.org
:
bug#11235
; Package
automake
.
(Fri, 13 Apr 2012 16:19:03 GMT)
Full text and
rfc822 format available.
Message #14 received at 11235 <at> debbugs.gnu.org (full text, mbox):
Stefano Lattarini wrote:
...
> Could you please reference the bug number here as well? As in:
>
> Subject: [PATCH] build: use slightly older help2man, for improved portability
>
> Fixes automake bug#11235
>
> * doc/help2man: Downgrade to help2man-1.36.4, so that it does
> not require Locale/gettext.pm, which is not available on a
> default Fedora 16 installation.
>
> ACK with that addressed.
Sure.
Adjusted and pushed.
Information forwarded
to
bug-automake <at> gnu.org
:
bug#11235
; Package
automake
.
(Fri, 13 Apr 2012 20:16:01 GMT)
Full text and
rfc822 format available.
Message #17 received at 11235 <at> debbugs.gnu.org (full text, mbox):
tags 11235 + patch
close 11235
thanks
On 04/13/2012 06:17 PM, Jim Meyering wrote:
> Stefano Lattarini wrote:
> ...
>> Could you please reference the bug number here as well? As in:
>>
>> Subject: [PATCH] build: use slightly older help2man, for improved portability
>>
>> Fixes automake bug#11235
>>
>> * doc/help2man: Downgrade to help2man-1.36.4, so that it does
>> not require Locale/gettext.pm, which is not available on a
>> default Fedora 16 installation.
>>
>> ACK with that addressed.
>
> Sure.
> Adjusted and pushed.
>
Thanks. The resulting tarball works for me now. I'm thus closing this
bug report.
Best regards,
Stefano
Added tag(s) patch.
Request was from
Stefano Lattarini <stefano.lattarini <at> gmail.com>
to
control <at> debbugs.gnu.org
.
(Fri, 13 Apr 2012 20:16:02 GMT)
Full text and
rfc822 format available.
bug closed, send any further explanations to
11235 <at> debbugs.gnu.org and Stefano Lattarini <stefano.lattarini <at> gmail.com>
Request was from
Stefano Lattarini <stefano.lattarini <at> gmail.com>
to
control <at> debbugs.gnu.org
.
(Fri, 13 Apr 2012 20:16:02 GMT)
Full text and
rfc822 format available.
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Sat, 12 May 2012 11:24:03 GMT)
Full text and
rfc822 format available.
This bug report was last modified 13 years and 36 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.