* lib/Autom4te/General.pm (&file_name_is_absolute): Remove.

(&verbose): Remove.
(&getopt): Adjust the note and verb channels, depending upon
--verbose.
* bin/autoheader.in, bin/autom4te.in, bin/autoscan.in,
* bin/autoupdate.in: Adjust.
Use &verb, not &verbose.
This commit is contained in:
Akim Demaille 2003-08-21 17:50:11 +00:00
parent cf2308cf7b
commit a5b49f45d6
8 changed files with 132 additions and 324 deletions

View File

@ -1,3 +1,13 @@
2003-08-21 Akim Demaille <akim@epita.fr>
* lib/Autom4te/General.pm (&file_name_is_absolute): Remove.
(&verbose): Remove.
(&getopt): Adjust the note and verb channels, depending upon
--verbose.
* bin/autoheader.in, bin/autom4te.in, bin/autoscan.in,
* bin/autoupdate.in: Adjust.
Use &verb, not &verbose.
2003-08-21 Akim Demaille <akim@epita.fr>
* bin/autoheader.in (&parse_args): Use &parse_warnings and

View File

@ -113,8 +113,6 @@ sub parse_args ()
'B|prepend-include=s' => \@prepend_include,
'W|warnings=s' => \&parse_warnings);
setup_channel 'note', silent => !$verbose;
if (! @ARGV)
{
my $configure_ac = require_configure_ac;
@ -171,7 +169,7 @@ $autoconf .= ' --verbose' if $verbose;
# ----------------------- #
# Source what the traces are trying to tell us.
verbose "$me: running $autoconf to trace from $ARGV[0]";
verb "$me: running $autoconf to trace from $ARGV[0]";
xsystem ("$autoconf"
# If you change this list, update the
# `Autoheader-preselections' section of autom4te.in.

View File

@ -716,7 +716,7 @@ sub handle_output ($$)
{
my ($req, $output) = @_;
verbose "creating $output";
verb "creating $output";
# Load the forbidden/allowed patterns.
handle_traces ($req, "$tmp/patterns",
@ -729,10 +729,10 @@ sub handle_output ($$)
my $forbidden = join ('|', map { /^forbid:([^:]+)/ } @patterns) || "^\$";
my $allowed = join ('|', map { /^allow:([^:]+)/ } @patterns) || "^\$";
verbose "forbidden tokens: $forbidden";
verbose "forbidden token : $_ => $forbidden{$_}"
verb "forbidden tokens: $forbidden";
verb "forbidden token : $_ => $forbidden{$_}"
foreach (sort keys %forbidden);
verbose "allowed tokens: $allowed";
verb "allowed tokens: $allowed";
# Read the (cached) raw M4 output, produce the actual result. We
# have to use the 2nd arg to have Autom4te::XFile honor the third, but then
@ -902,7 +902,7 @@ sub handle_traces ($$%)
{
my ($req, $output, %trace) = @_;
verbose "formatting traces for `$output': ", join (', ', sort keys %trace);
verb "formatting traces for `$output': " . join (', ', sort keys %trace);
# Processing the traces.
my $trace_m4 = new Autom4te::XFile (">$tmp/traces.m4");
@ -1183,7 +1183,7 @@ $req->valid (0)
if $force || ! up_to_date ($req);
# We now know whether we can trust the Request object. Say it.
verbose "$me: the trace request object is:\n" . $req->marshall;
verb "the trace request object is:\n" . $req->marshall;
# We need to run M4 if (i) the users wants it (--force), (ii) $REQ is
# invalid.

View File

@ -308,7 +308,7 @@ sub autoreconf_current_directory ()
if (!$uses_autoconf)
{
verbose "$configure_ac: not using Autoconf";
verb "$configure_ac: not using Autoconf";
return;
}
@ -335,11 +335,11 @@ sub autoreconf_current_directory ()
# scanning configure.ac.
if (!$uses_gettext)
{
verbose "$configure_ac: not using Gettext";
verb "$configure_ac: not using Gettext";
}
elsif (!$install)
{
verbose "$configure_ac: not running autopoint: --install not given";
verb "$configure_ac: not running autopoint: --install not given";
}
else
{
@ -388,7 +388,7 @@ sub autoreconf_current_directory ()
if (!$uses_aclocal)
{
verbose "$configure_ac: not using aclocal";
verb "$configure_ac: not using aclocal";
}
else
{
@ -422,7 +422,7 @@ sub autoreconf_current_directory ()
my $uses_libtool;
my $uses_autoheader;
my @subdir;
verbose "$configure_ac: tracing";
verb "$configure_ac: tracing";
my $traces = new Autom4te::XFile
("$autoconf"
. join (' --trace=', '',
@ -449,12 +449,12 @@ sub autoreconf_current_directory ()
{
if (-d)
{
verbose "$configure_ac: subdirectory $_ to autoreconf";
verb "$configure_ac: subdirectory $_ to autoreconf";
autoreconf ($_);
}
else
{
verbose "$configure_ac: subdirectory $_ not present";
verb "$configure_ac: subdirectory $_ not present";
}
}
@ -471,7 +471,7 @@ sub autoreconf_current_directory ()
if (!$uses_libtool)
{
verbose "$configure_ac: not using Libtool";
verb "$configure_ac: not using Libtool";
}
elsif ($install)
{
@ -480,7 +480,7 @@ sub autoreconf_current_directory ()
}
else
{
verbose "$configure_ac: not running libtoolize: --install not given";
verb "$configure_ac: not running libtoolize: --install not given";
}
@ -495,7 +495,7 @@ sub autoreconf_current_directory ()
{
if (!$uses_aclocal)
{
verbose "$configure_ac: not using aclocal";
verb "$configure_ac: not using aclocal";
}
else
{
@ -532,7 +532,7 @@ sub autoreconf_current_directory ()
# config.h.in when it sees an AC_CONFIG_HEADERS.
if (!$uses_autoheader)
{
verbose "$configure_ac: not using Autoheader";
verb "$configure_ac: not using Autoheader";
}
else
{
@ -547,7 +547,7 @@ sub autoreconf_current_directory ()
# Assumes that there is a Makefile.am in the topmost directory.
if (!-f 'Makefile.am')
{
verbose "$configure_ac: not using Automake";
verb "$configure_ac: not using Automake";
}
else
{
@ -566,7 +566,7 @@ sub autoreconf_current_directory ()
{
if (!-f "config.status")
{
verbose "no config.status: cannot re-make";
verb "no config.status: cannot re-make";
}
else
{
@ -574,7 +574,7 @@ sub autoreconf_current_directory ()
xsystem ("./config.status");
if (!-f "Makefile")
{
verbose "no Makefile: cannot re-make";
verb "no Makefile: cannot re-make";
}
else
{
@ -595,7 +595,7 @@ sub autoreconf ($)
# The format for this message is not free: taken from Emacs, itself
# using GNU Make's format.
verbose "Entering directory `$directory'";
verb "Entering directory `$directory'";
chdir $directory
or error "cannot chdir to $directory: $!";
@ -603,7 +603,7 @@ sub autoreconf ($)
# The format is not free: taken from Emacs, itself using GNU Make's
# format.
verbose "Leaving directory `$directory'";
verb "Leaving directory `$directory'";
chdir $cwd
or error "cannot chdir to $cwd: $!";
}

View File

@ -147,7 +147,7 @@ Try `$me --help' for more information.\n"
my $srcdir = $ARGV[0] || ".";
verbose "srcdir = $srcdir";
verb "srcdir = $srcdir";
chdir $srcdir || error "cannot cd to $srcdir: $!";
}
@ -566,7 +566,7 @@ sub check_configure_ac ($)
join (' --trace=', '',
uniq (sort (map { s/\(.*//; $_ } keys %needed_macros)));
verbose "running: $autoconf $trace_option $configure_ac";
verb "running: $autoconf $trace_option $configure_ac";
my $traces =
new Autom4te::XFile "$autoconf $trace_option $configure_ac|";

View File

@ -105,8 +105,6 @@ sub parse_args ()
'B|prepend-include=s' => \@prepend_include,
'f|force' => \$force);
setup_channel 'note', silent => !$verbose;
if (! @ARGV)
{
my $configure_ac = require_configure_ac;

View File

@ -3,7 +3,7 @@
% Load plain if necessary, i.e., if running under initex.
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
%
\def\texinfoversion{2003-05-04.08}
\def\texinfoversion{2003-07-28.08}
%
% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
@ -887,13 +887,13 @@ where each line of input produces a line of output.}
% @firstparagraphindent WORD
% If WORD is `none', then suppress indentation of the first paragraph
% after a section heading. If WORD is `insert', then do indentat such
% after a section heading. If WORD is `insert', then do indent at such
% paragraphs.
%
% The paragraph indentation is suppressed or not by calling
% \suppressfirstparagraphindent, which the sectioning commands do. We
% switch the definition of this back and forth according to WORD. By
% default, we suppress indentation.
% \suppressfirstparagraphindent, which the sectioning commands do.
% We switch the definition of this back and forth according to WORD.
% By default, we suppress indentation.
%
\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
\newdimen\currentparindent
@ -2524,20 +2524,6 @@ width0pt\relax} \fi
% Prevent errors for section commands.
% Used in @ignore and in failing conditionals.
\def\ignoresections{%
\let\chapter=\relax
\let\unnumbered=\relax
\let\top=\relax
\let\unnumberedsec=\relax
\let\unnumberedsection=\relax
\let\unnumberedsubsec=\relax
\let\unnumberedsubsection=\relax
\let\unnumberedsubsubsec=\relax
\let\unnumberedsubsubsection=\relax
\let\section=\relax
\let\subsec=\relax
\let\subsubsec=\relax
\let\subsection=\relax
\let\subsubsection=\relax
\let\appendix=\relax
\let\appendixsec=\relax
\let\appendixsection=\relax
@ -2545,110 +2531,26 @@ width0pt\relax} \fi
\let\appendixsubsection=\relax
\let\appendixsubsubsec=\relax
\let\appendixsubsubsection=\relax
%\let\begin=\relax
%\let\bye=\relax
\let\centerchap=\relax
\let\chapter=\relax
\let\contents=\relax
\let\section=\relax
\let\smallbook=\relax
\let\subsec=\relax
\let\subsection=\relax
\let\subsubsec=\relax
\let\subsubsection=\relax
\let\titlepage=\relax
}
% Used in nested conditionals, where we have to parse the Texinfo source
% and so want to turn off most commands, in case they are used
% incorrectly.
%
% We use \empty instead of \relax for the @def... commands, so that \end
% doesn't throw an error. For instance:
% @ignore
% @deffn ...
% @end deffn
% @end ignore
%
% The @end deffn is going to get expanded, because we're trying to allow
% nested conditionals. But we don't want to expand the actual @deffn,
% since it might be syntactically correct and intended to be ignored.
% Since \end checks for \relax, using \empty does not cause an error.
%
\def\ignoremorecommands{%
\let\defcodeindex = \relax
\let\defcv = \empty
\let\defcvx = \empty
\let\Edefcv = \empty
\let\deffn = \empty
\let\deffnx = \empty
\let\Edeffn = \empty
\let\defindex = \relax
\let\defivar = \empty
\let\defivarx = \empty
\let\Edefivar = \empty
\let\defmac = \empty
\let\defmacx = \empty
\let\Edefmac = \empty
\let\defmethod = \empty
\let\defmethodx = \empty
\let\Edefmethod = \empty
\let\defop = \empty
\let\defopx = \empty
\let\Edefop = \empty
\let\defopt = \empty
\let\defoptx = \empty
\let\Edefopt = \empty
\let\defspec = \empty
\let\defspecx = \empty
\let\Edefspec = \empty
\let\deftp = \empty
\let\deftpx = \empty
\let\Edeftp = \empty
\let\deftypefn = \empty
\let\deftypefnx = \empty
\let\Edeftypefn = \empty
\let\deftypefun = \empty
\let\deftypefunx = \empty
\let\Edeftypefun = \empty
\let\deftypeivar = \empty
\let\deftypeivarx = \empty
\let\Edeftypeivar = \empty
\let\deftypemethod = \empty
\let\deftypemethodx = \empty
\let\Edeftypemethod = \empty
\let\deftypeop = \empty
\let\deftypeopx = \empty
\let\Edeftypeop = \empty
\let\deftypevar = \empty
\let\deftypevarx = \empty
\let\Edeftypevar = \empty
\let\deftypevr = \empty
\let\deftypevrx = \empty
\let\Edeftypevr = \empty
\let\defun = \empty
\let\defunx = \empty
\let\Edefun = \empty
\let\defvar = \empty
\let\defvarx = \empty
\let\Edefvar = \empty
\let\defvr = \empty
\let\defvrx = \empty
\let\Edefvr = \empty
\let\clear = \relax
\let\down = \relax
\let\evenfooting = \relax
\let\evenheading = \relax
\let\everyfooting = \relax
\let\everyheading = \relax
\let\headings = \relax
\let\include = \relax
\let\item = \relax
\let\lowersections = \relax
\let\oddfooting = \relax
\let\oddheading = \relax
\let\printindex = \relax
\let\pxref = \relax
\let\raisesections = \relax
\let\ref = \relax
\let\set = \relax
\let\setchapternewpage = \relax
\let\setchapterstyle = \relax
\let\settitle = \relax
\let\up = \relax
\let\verbatiminclude = \relax
\let\xref = \relax
\let\top=\relax
\let\unnumbered=\relax
\let\unnumberedsec=\relax
\let\unnumberedsection=\relax
\let\unnumberedsubsec=\relax
\let\unnumberedsubsection=\relax
\let\unnumberedsubsubsec=\relax
\let\unnumberedsubsubsection=\relax
}
% Ignore @ignore, @ifhtml, @ifinfo, and the like.
@ -2670,140 +2572,77 @@ width0pt\relax} \fi
% which this file should belong to. Ignore this in TeX.
\let\dircategory = \comment
% Ignore text until a line `@end #1'.
% Ignore text until a line `@end #1', keeping track of nested conditionals.
%
% A count to remember the depth of nesting.
\newcount\doignorecount \doignorecount = 0
\def\doignore#1{\begingroup
% Don't complain about control sequences we have declared \outer.
\ignoresections
%
% Define a command to swallow text until we reach `@end #1'.
% This @ is a catcode 12 token (that is the normal catcode of @ in
% this texinfo.tex file). We change the catcode of @ below to match.
\long\def\doignoretext##1@end #1{\enddoignore}%
%
% Make sure that spaces turn into tokens that match what \doignoretext wants.
\catcode\spaceChar = 10
%
% Ignore braces, too, so mismatched braces don't cause trouble.
% Ignore braces, so mismatched braces don't cause trouble.
\catcode`\{ = 9
\catcode`\} = 9
%
% We must not have @c interpreted as a control sequence.
\catcode`\@ = 12
% Count number of #1's that we've seen.
\doignorecount = 0
%
\def\ignoreword{#1}%
\ifx\ignoreword\documentdescriptionword
% The c kludge breaks documentdescription, since
% `documentdescription' contains a `c'. Means not everything will
% be ignored inside @documentdescription, but oh well...
\else
% Make the letter c a comment character so that the rest of the line
% will be ignored. This way, the document can have (for example)
% @c @end ifinfo
% and the @end ifinfo will be properly ignored.
% (We've just changed @ to catcode 12.)
\catcode`\c = 14
% Swallow text until we reach the matching `@end #1'.
\expandafter \dodoignore \csname#1\endcsname {#1}%
}
{ \catcode`@=11 % We want to use \ST@P which cannot appear in texinfo source.
\obeylines %
%
\gdef\dodoignore#1#2{%
% #1 contains, e.g., \ifinfo, a.k.a. @ifinfo.
% #2 contains the string `ifinfo'.
%
% Define a command to find the next `@end #2', which must be on a line
% by itself.
\long\def\doignoretext##1^^M\end #2{\doignoretextyyy##1^^M#1\ST@P}%
% And this command to find another #1 command, at the beginning of a
% line. (Otherwise, we would consider a line `@c @ifset', for
% example, to count as an @ifset for nesting.)
\long\def\doignoretextyyy##1^^M#1##2\ST@P{\doignoreyyy{##2}\ST@P}%
%
% And now expand that command.
\obeylines %
\doignoretext ^^M%
}%
}
\def\doignoreyyy#1{%
\def\temp{#1}%
\ifx\temp\empty % Nothing found.
\let\next\doignoretextzzz
\else % Found a nested condition, ...
\advance\doignorecount by 1
\let\next\doignoretextyyy % ..., look for another.
% If we're here, #1 ends with \ifinfo (for example).
\fi
%
% And now expand the command defined above.
\doignoretext
\next #1% the token \ST@P is present just after this macro.
}
% What we do to finish off ignored text.
%
\def\enddoignore{\endgroup\ignorespaces}%
\newif\ifwarnedobs\warnedobsfalse
\def\obstexwarn{%
\ifwarnedobs\relax\else
% We need to warn folks that they may have trouble with TeX 3.0.
% This uses \immediate\write16 rather than \message to get newlines.
\immediate\write16{}
\immediate\write16{WARNING: for users of Unix TeX 3.0!}
\immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
\immediate\write16{If you are running another version of TeX, relax.}
\immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
\immediate\write16{ Then upgrade your TeX installation if you can.}
\immediate\write16{ (See ftp://ftp.gnu.org/non-gnu/TeX.README.)}
\immediate\write16{If you are stuck with version 3.0, run the}
\immediate\write16{ script ``tex3patch'' from the Texinfo distribution}
\immediate\write16{ to use a workaround.}
\immediate\write16{}
\global\warnedobstrue
\fi
% We have to swallow the remaining "\ST@P".
%
\def\doignoretextzzz#1{%
\ifnum\doignorecount = 0 % We have just found the outermost @end.
\let\next\enddoignore
\else % Still inside a nested condition.
\advance\doignorecount by -1
\let\next\doignoretext % Look for the next @end.
\fi
\next
}
% **In TeX 3.0, setting text in \nullfont hangs tex. For a
% workaround (which requires the file ``dummy.tfm'' to be installed),
% uncomment the following line:
%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
% Finish off ignored text.
\def\enddoignore{\endgroup\ignorespaces}
% Ignore text, except that we keep track of conditional commands for
% purposes of nesting, up to an `@end #1' command.
%
\def\nestedignore#1{%
\obstexwarn
% We must actually expand the ignored text to look for the @end
% command, so that nested ignore constructs work. Thus, we put the
% text into a \vbox and then do nothing with the result. To minimize
% the chance of memory overflow, we follow the approach outlined on
% page 401 of the TeXbook.
%
\setbox0 = \vbox\bgroup
% Don't complain about control sequences we have declared \outer.
\ignoresections
%
% Define `@end #1' to end the box, which will in turn undefine the
% @end command again.
\expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
%
% We are going to be parsing Texinfo commands. Most cause no
% trouble when they are used incorrectly, but some commands do
% complicated argument parsing or otherwise get confused, so we
% undefine them.
%
% We can't do anything about stray @-signs, unfortunately;
% they'll produce `undefined control sequence' errors.
\ignoremorecommands
%
% Set the current font to be \nullfont, a TeX primitive, and define
% all the font commands to also use \nullfont. We don't use
% dummy.tfm, as suggested in the TeXbook, because some sites
% might not have that installed. Therefore, math mode will still
% produce output, but that should be an extremely small amount of
% stuff compared to the main input.
%
\nullfont
\let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont
\let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont
\let\tensf=\nullfont
% Similarly for index fonts.
\let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont
\let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont
\let\smallsf=\nullfont
% Similarly for smallexample fonts.
\let\smallerrm=\nullfont \let\smallerit=\nullfont \let\smallersl=\nullfont
\let\smallerbf=\nullfont \let\smallertt=\nullfont \let\smallersc=\nullfont
\let\smallersf=\nullfont
%
% Don't complain when characters are missing from the fonts.
\tracinglostchars = 0
%
% Don't bother to do space factor calculations.
\frenchspacing
%
% Don't report underfull hboxes.
\hbadness = 10000
%
% Do minimal line-breaking.
\pretolerance = 10000
%
% Do not execute instructions in @tex.
\def\tex{\doignore{tex}}%
% Do not execute macro definitions.
% `c' is a comment character, so the word `macro' will get cut off.
\def\macro{\doignore{ma}}%
}
% @set VAR sets the variable VAR to an empty value.
% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
@ -2881,7 +2720,7 @@ width0pt\relax} \fi
\next
}
\def\ifsetsucceed{\conditionalsucceed{ifset}}
\def\ifsetfail{\nestedignore{ifset}}
\def\ifsetfail{\doignore{ifset}}
\defineunmatchedend{ifset}
% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
@ -2897,7 +2736,7 @@ width0pt\relax} \fi
\next
}
\def\ifclearsucceed{\conditionalsucceed{ifclear}}
\def\ifclearfail{\nestedignore{ifclear}}
\def\ifclearfail{\doignore{ifclear}}
\defineunmatchedend{ifclear}
% @iftex, @ifnothtml, @ifnotinfo, @ifnotplaintext always succeed; we
@ -4023,23 +3862,27 @@ width0pt\relax} \fi
% if justification is not attempted. Hence \raggedright.
\def\majorheading{\parsearg\majorheadingzzz}
\def\majorheadingzzz #1{%
\def\majorheading{%
{\advance\chapheadingskip by 10pt \chapbreak }%
{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
\parindent=0pt\raggedright
\rm #1\hfill}}\bigskip \par\penalty 200}
\parsearg\chapheadingzzz
}
\def\chapheading{\parsearg\chapheadingzzz}
\def\chapheadingzzz #1{\chapbreak %
\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
\def\chapheadingzzz #1{%
{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
\parindent=0pt\raggedright
\rm #1\hfill}}\bigskip \par\penalty 200}
\rm #1\hfill}}%
\bigskip \par\penalty 200\relax
\suppressfirstparagraphindent
}
% @heading, @subheading, @subsubheading.
\def\heading{\parsearg\plainsecheading}
\def\subheading{\parsearg\plainsubsecheading}
\def\subsubheading{\parsearg\plainsubsubsecheading}
\def\heading{\parsearg\doheading}
\def\subheading{\parsearg\dosubheading}
\def\subsubheading{\parsearg\dosubsubheading}
\def\doheading#1{\plainsecheading{#1}\suppressfirstparagraphindent}
\def\dosubheading#1{\plainsubsecheading{#1}\suppressfirstparagraphindent}
\def\dosubsubheading#1{\plainsubsubsecheading{#1}\suppressfirstparagraphindent}
% These macros generate a chapter, section, etc. heading only
% (including whitespace, linebreaking, etc. around it),
@ -6177,7 +6020,6 @@ width0pt\relax} \fi
\closein 1
\input \jobname.aux
\global\havexrefstrue
\global\warnedobstrue
\fi
% Open the new aux file. TeX will close it automatically at exit.
\openout\auxfile=\jobname.aux

View File

@ -36,8 +36,8 @@ used in several executables of the Autoconf and Automake packages.
use 5.005_03;
use Exporter;
use Autom4te::ChannelDefs;
use Autom4te::Channels;
use File::Basename;
use File::Spec;
use File::stat;
use IO::File;
use Carp;
@ -54,9 +54,8 @@ my @export_vars =
# Functions we define and export.
my @export_subs =
qw (&debug
&file_name_is_absolute
&getopt &mktmpdir
&uniq &verbose);
&uniq);
# Functions we forward (coming from modules we use).
my @export_forward_subs =
@ -147,12 +146,6 @@ $version = undef;
=cut
## ------------ ##
## Prototypes. ##
## ------------ ##
sub verbose (@);
## ----- ##
## END. ##
@ -247,24 +240,6 @@ sub debug (@)
}
=item C<file_name_is_absolute ($filename)>
Wrapper around C<File::Spec->file_name_is_absolute>. Return true iff
C<$filename> is absolute.
=cut
# $BOOLEAN
# &file_name_is_absolute ($FILE)
# ------------------------------
sub file_name_is_absolute ($)
{
my ($file) = @_;
return File::Spec->file_name_is_absolute ($file);
}
=item C<getopt (%option)>
Wrapper around C<Getopt::Long>. In addition to the user C<option>s,
@ -311,6 +286,9 @@ sub getopt (%)
push @ARGV, '-'
if $stdin;
setup_channel 'note', silent => !$verbose;
setup_channel 'verb', silent => !$verbose;
}
@ -372,24 +350,6 @@ sub uniq (@)
}
=item C<verbose (@message)>
If the verbose mode is enabled (C<$verbose>), report the C<@message>
on C<STDERR>, signed with the name of the program. These messages are
meant for ordinary users, and typically make explicit the steps being
performed.
=cut
# verbose(@MESSAGE)
# -----------------
sub verbose (@)
{
print STDERR "$me: ", @_, "\n"
if $verbose;
}
=item C<handle_exec_errors ($command)>
Display an error message for C<$command>, based on the content of