1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-17 17:20:29 +02:00

Update Gnulib to v0.0-7695-g26c0590.

* gnulib-local/m4/canonicalize.m4.diff: Remove.
* Makefile.am (EXTRA_DIST): Adjust accordingly.
This commit is contained in:
Ludovic Courtès 2012-11-17 16:20:52 +01:00
parent 44cd55752a
commit 7ae4e75af5
34 changed files with 1116 additions and 796 deletions

View file

@ -50,7 +50,6 @@ EXTRA_DIST = LICENSE HACKING GUILE-VERSION \
gnulib-local/lib/localcharset.h.diff \ gnulib-local/lib/localcharset.h.diff \
gnulib-local/lib/localcharset.c.diff \ gnulib-local/lib/localcharset.c.diff \
gnulib-local/m4/clock_time.m4.diff \ gnulib-local/m4/clock_time.m4.diff \
gnulib-local/m4/canonicalize.m4.diff \
gnulib-local/build-aux/git-version-gen.diff gnulib-local/build-aux/git-version-gen.diff
TESTS = check-guile TESTS = check-guile

View file

@ -2,10 +2,10 @@
# gendocs.sh -- generate a GNU manual in many formats. This script is # gendocs.sh -- generate a GNU manual in many formats. This script is
# mentioned in maintain.texi. See the help message below for usage details. # mentioned in maintain.texi. See the help message below for usage details.
scriptversion=2011-04-08.14 scriptversion=2012-10-27.11
# Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
# Foundation, Inc. # 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 # it under the terms of the GNU General Public License as published by
@ -30,6 +30,12 @@ scriptversion=2011-04-08.14
# #
# An up-to-date copy is also maintained in Gnulib (gnu.org/software/gnulib). # An up-to-date copy is also maintained in Gnulib (gnu.org/software/gnulib).
# TODO:
# - image importation was only implemented for HTML generated by
# makeinfo. But it should be simple enough to adjust.
# - images are not imported in the source tarball. All the needed
# formats (PDF, PNG, etc.) should be included.
prog=`basename "$0"` prog=`basename "$0"`
srcdir=`pwd` srcdir=`pwd`
@ -39,35 +45,37 @@ templateurl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/
: ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="} : ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="}
: ${MAKEINFO="makeinfo"} : ${MAKEINFO="makeinfo"}
: ${TEXI2DVI="texi2dvi -t @finalout"} : ${TEXI2DVI="texi2dvi -t @finalout"}
: ${DVIPS="dvips"}
: ${DOCBOOK2HTML="docbook2html"} : ${DOCBOOK2HTML="docbook2html"}
: ${DOCBOOK2PDF="docbook2pdf"} : ${DOCBOOK2PDF="docbook2pdf"}
: ${DOCBOOK2PS="docbook2ps"}
: ${DOCBOOK2TXT="docbook2txt"} : ${DOCBOOK2TXT="docbook2txt"}
: ${GENDOCS_TEMPLATE_DIR="."} : ${GENDOCS_TEMPLATE_DIR="."}
: ${PERL='perl'}
: ${TEXI2HTML="texi2html"} : ${TEXI2HTML="texi2html"}
unset CDPATH unset CDPATH
unset use_texi2html unset use_texi2html
version="gendocs.sh $scriptversion version="gendocs.sh $scriptversion
Copyright 2010 Free Software Foundation, Inc. Copyright 2012 Free Software Foundation, Inc.
There is NO warranty. You may redistribute this software There is NO warranty. You may redistribute this software
under the terms of the GNU General Public License. under the terms of the GNU General Public License.
For more information about these matters, see the files named COPYING." For more information about these matters, see the files named COPYING."
usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE
Generate various output formats from PACKAGE.texinfo (or .texi or .txi) source. Generate output in various formats from PACKAGE.texinfo (or .texi or
See the GNU Maintainers document for a more extensive discussion: .txi) source. See the GNU Maintainers document for a more extensive
discussion:
http://www.gnu.org/prep/maintain_toc.html http://www.gnu.org/prep/maintain_toc.html
Options: Options:
-s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi} -s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi}
-o OUTDIR write files into OUTDIR, instead of manual/. -o OUTDIR write files into OUTDIR, instead of manual/.
-I DIR append DIR to the Texinfo search path.
--email ADR use ADR as contact in generated web pages. --email ADR use ADR as contact in generated web pages.
--docbook convert to DocBook too (xml, txt, html, pdf and ps). --docbook convert through DocBook too (xml, txt, html, pdf).
--html ARG pass indicated ARG to makeinfo or texi2html for HTML targets. --html ARG pass indicated ARG to makeinfo or texi2html for HTML targets.
--info ARG pass indicated ARG to makeinfo for Info, instead of --no-split.
--texi2html use texi2html to generate HTML targets. --texi2html use texi2html to generate HTML targets.
--help display this help and exit successfully. --help display this help and exit successfully.
--version display version information and exit successfully. --version display version information and exit successfully.
@ -80,11 +88,11 @@ Typical sequence:
wget \"$templateurl\" wget \"$templateurl\"
$prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\" $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\"
Output will be in a new subdirectory \"manual\" (by default, use -o OUTDIR Output will be in a new subdirectory \"manual\" (by default;
to override). Move all the new files into your web CVS tree, as use -o OUTDIR to override). Move all the new files into your web CVS
explained in the Web Pages node of maintain.texi. tree, as explained in the Web Pages node of maintain.texi.
Please use the --email ADDRESS option to specify your bug-reporting Please do use the --email ADDRESS option to specify your bug-reporting
address in the generated HTML pages. address in the generated HTML pages.
MANUAL-TITLE is included as part of the HTML <title> of the overall MANUAL-TITLE is included as part of the HTML <title> of the overall
@ -102,11 +110,14 @@ If a manual's Texinfo sources are spread across several directories,
first copy or symlink all Texinfo sources into a single directory. first copy or symlink all Texinfo sources into a single directory.
(Part of the script's work is to make a tar.gz of the sources.) (Part of the script's work is to make a tar.gz of the sources.)
You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML, and As implied above, by default monolithic Info files are generated.
DVIPS to control the programs that get executed, and If you want split Info, or other Info options, use --info to override.
You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML,
and PERL to control the programs that get executed, and
GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is
looked for. With --docbook, the environment variables DOCBOOK2HTML, looked for. With --docbook, the environment variables DOCBOOK2HTML,
DOCBOOK2PDF, DOCBOOK2PS, and DOCBOOK2TXT are also respected. DOCBOOK2PDF, and DOCBOOK2TXT are also respected.
By default, makeinfo and texi2dvi are run in the default (English) By default, makeinfo and texi2dvi are run in the default (English)
locale, since that's the language of most Texinfo manuals. If you locale, since that's the language of most Texinfo manuals. If you
@ -116,16 +127,13 @@ SETLANG setting in the source.
Email bug reports or enhancement requests to bug-texinfo@gnu.org. Email bug reports or enhancement requests to bug-texinfo@gnu.org.
" "
calcsize()
{
size=`ls -ksl $1 | awk '{print $1}'`
echo $size
}
MANUAL_TITLE= MANUAL_TITLE=
PACKAGE= PACKAGE=
EMAIL=webmasters@gnu.org # please override with --email EMAIL=webmasters@gnu.org # please override with --email
commonarg= # Options passed to all the tools (-I dir).
dirs= # -I's directories.
htmlarg= htmlarg=
infoarg=--no-split
outdir=manual outdir=manual
srcfile= srcfile=
@ -136,8 +144,10 @@ while test $# -gt 0; do
--version) echo "$version"; exit 0;; --version) echo "$version"; exit 0;;
-s) shift; srcfile=$1;; -s) shift; srcfile=$1;;
-o) shift; outdir=$1;; -o) shift; outdir=$1;;
-I) shift; commonarg="$commonarg -I '$1'"; dirs="$dirs $1";;
--docbook) docbook=yes;; --docbook) docbook=yes;;
--html) shift; htmlarg=$1;; --html) shift; htmlarg=$1;;
--info) shift; infoarg=$1;;
--texi2html) use_texi2html=1;; --texi2html) use_texi2html=1;;
-*) -*)
echo "$0: Unknown option \`$1'." >&2 echo "$0: Unknown option \`$1'." >&2
@ -183,15 +193,64 @@ if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then
exit 1 exit 1
fi fi
# Function to return size of $1 in something resembling kilobytes.
calcsize()
{
size=`ls -ksl $1 | awk '{print $1}'`
echo $size
}
# copy_images OUTDIR HTML-FILE...
# -------------------------------
# Copy all the images needed by the HTML-FILEs into OUTDIR. Look
# for them in the -I directories.
copy_images()
{
local odir
odir=$1
shift
$PERL -n -e "
BEGIN {
\$me = '$prog';
\$odir = '$odir';
@dirs = qw($dirs);
}
" -e '
/<img src="(.*?)"/g && ++$need{$1};
END {
#print "$me: @{[keys %need]}\n"; # for debugging, show images found.
FILE: for my $f (keys %need) {
for my $d (@dirs) {
if (-f "$d/$f") {
use File::Basename;
my $dest = dirname ("$odir/$f");
#
use File::Path;
-d $dest || mkpath ($dest)
|| die "$me: cannot mkdir $dest: $!\n";
#
use File::Copy;
copy ("$d/$f", $dest)
|| die "$me: cannot copy $d/$f to $dest: $!\n";
next FILE;
}
}
die "$me: $ARGV: cannot find image $f\n";
}
}
' -- "$@" || exit 1
}
case $outdir in case $outdir in
/*) abs_outdir=$outdir;; /*) abs_outdir=$outdir;;
*) abs_outdir=$srcdir/$outdir;; *) abs_outdir=$srcdir/$outdir;;
esac esac
echo Generating output formats for $srcfile echo "Generating output formats for $srcfile"
cmd="$SETLANG $MAKEINFO -o $PACKAGE.info \"$srcfile\"" cmd="$SETLANG $MAKEINFO -o $PACKAGE.info $commonarg $infoarg \"$srcfile\""
echo "Generating info files... ($cmd)" echo "Generating info file(s)... ($cmd)"
eval "$cmd" eval "$cmd"
mkdir -p "$outdir/" mkdir -p "$outdir/"
tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info* tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info*
@ -199,29 +258,23 @@ info_tgz_size=`calcsize "$outdir/$PACKAGE.info.tar.gz"`
# do not mv the info files, there's no point in having them available # do not mv the info files, there's no point in having them available
# separately on the web. # separately on the web.
cmd="$SETLANG ${TEXI2DVI} \"$srcfile\"" cmd="$SETLANG $TEXI2DVI $commonarg \"$srcfile\""
echo "Generating dvi ... ($cmd)" echo "Generating dvi ... ($cmd)"
eval "$cmd" eval "$cmd"
# now, before we compress dvi:
echo Generating postscript...
${DVIPS} $PACKAGE -o
gzip -f -9 $PACKAGE.ps
ps_gz_size=`calcsize $PACKAGE.ps.gz`
mv $PACKAGE.ps.gz "$outdir/"
# compress/finish dvi: # compress/finish dvi:
gzip -f -9 $PACKAGE.dvi gzip -f -9 $PACKAGE.dvi
dvi_gz_size=`calcsize $PACKAGE.dvi.gz` dvi_gz_size=`calcsize $PACKAGE.dvi.gz`
mv $PACKAGE.dvi.gz "$outdir/" mv $PACKAGE.dvi.gz "$outdir/"
cmd="$SETLANG ${TEXI2DVI} --pdf \"$srcfile\"" cmd="$SETLANG $TEXI2DVI --pdf $commonarg \"$srcfile\""
echo "Generating pdf ... ($cmd)" echo "Generating pdf ... ($cmd)"
eval "$cmd" eval "$cmd"
pdf_size=`calcsize $PACKAGE.pdf` pdf_size=`calcsize $PACKAGE.pdf`
mv $PACKAGE.pdf "$outdir/" mv $PACKAGE.pdf "$outdir/"
cmd="$SETLANG $MAKEINFO -o $PACKAGE.txt --no-split --no-headers \"$srcfile\"" opt="-o $PACKAGE.txt --no-split --no-headers $commonarg"
cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
echo "Generating ASCII... ($cmd)" echo "Generating ASCII... ($cmd)"
eval "$cmd" eval "$cmd"
ascii_size=`calcsize $PACKAGE.txt` ascii_size=`calcsize $PACKAGE.txt`
@ -231,7 +284,7 @@ mv $PACKAGE.txt "$outdir/"
html_split() html_split()
{ {
opt="--split=$1 $htmlarg --node-files" opt="--split=$1 $commonarg $htmlarg --node-files"
cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\"" cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\""
echo "Generating html by $1... ($cmd)" echo "Generating html by $1... ($cmd)"
eval "$cmd" eval "$cmd"
@ -249,7 +302,7 @@ html_split()
} }
if test -z "$use_texi2html"; then if test -z "$use_texi2html"; then
opt="--no-split --html -o $PACKAGE.html $htmlarg" opt="--no-split --html -o $PACKAGE.html $commonarg $htmlarg"
cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
echo "Generating monolithic html... ($cmd)" echo "Generating monolithic html... ($cmd)"
rm -rf $PACKAGE.html # in case a directory is left over rm -rf $PACKAGE.html # in case a directory is left over
@ -257,23 +310,25 @@ if test -z "$use_texi2html"; then
html_mono_size=`calcsize $PACKAGE.html` html_mono_size=`calcsize $PACKAGE.html`
gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz" gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz"
html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"` html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"`
copy_images "$outdir/" $PACKAGE.html
mv $PACKAGE.html "$outdir/" mv $PACKAGE.html "$outdir/"
cmd="$SETLANG $MAKEINFO --html -o $PACKAGE.html $htmlarg \"$srcfile\"" opt="--html -o $PACKAGE.html $commonarg $htmlarg"
cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
echo "Generating html by node... ($cmd)" echo "Generating html by node... ($cmd)"
eval "$cmd" eval "$cmd"
split_html_dir=$PACKAGE.html split_html_dir=$PACKAGE.html
copy_images $split_html_dir/ $split_html_dir/*.html
( (
cd ${split_html_dir} || exit 1 cd $split_html_dir || exit 1
tar -czf "$abs_outdir/${PACKAGE}.html_node.tar.gz" -- *.html tar -czf "$abs_outdir/$PACKAGE.html_node.tar.gz" -- *
) )
html_node_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node.tar.gz"` html_node_tgz_size=`calcsize "$outdir/$PACKAGE.html_node.tar.gz"`
rm -f "$outdir"/html_node/*.html rm -rf "$outdir/html_node/"
mkdir -p "$outdir/html_node/" mv $split_html_dir "$outdir/html_node/"
mv ${split_html_dir}/*.html "$outdir/html_node/"
rmdir ${split_html_dir}
else else
cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $htmlarg \"$srcfile\"" opt="--output $PACKAGE.html $commonarg $htmlarg"
cmd="$SETLANG $TEXI2HTML $opt \"$srcfile\""
echo "Generating monolithic html... ($cmd)" echo "Generating monolithic html... ($cmd)"
rm -rf $PACKAGE.html # in case a directory is left over rm -rf $PACKAGE.html # in case a directory is left over
eval "$cmd" eval "$cmd"
@ -297,7 +352,8 @@ d=`dirname $srcfile`
texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"` texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"`
if test -n "$docbook"; then if test -n "$docbook"; then
cmd="$SETLANG $MAKEINFO -o - --docbook \"$srcfile\" > ${srcdir}/$PACKAGE-db.xml" opt="-o - --docbook $commonarg"
cmd="$SETLANG $MAKEINFO $opt \"$srcfile\" >${srcdir}/$PACKAGE-db.xml"
echo "Generating docbook XML... ($cmd)" echo "Generating docbook XML... ($cmd)"
eval "$cmd" eval "$cmd"
docbook_xml_size=`calcsize $PACKAGE-db.xml` docbook_xml_size=`calcsize $PACKAGE-db.xml`
@ -306,7 +362,8 @@ if test -n "$docbook"; then
mv $PACKAGE-db.xml "$outdir/" mv $PACKAGE-db.xml "$outdir/"
split_html_db_dir=html_node_db split_html_db_dir=html_node_db
cmd="${DOCBOOK2HTML} -o $split_html_db_dir \"${outdir}/$PACKAGE-db.xml\"" opt="$commonarg -o $split_html_db_dir"
cmd="$DOCBOOK2HTML $opt \"${outdir}/$PACKAGE-db.xml\""
echo "Generating docbook HTML... ($cmd)" echo "Generating docbook HTML... ($cmd)"
eval "$cmd" eval "$cmd"
( (
@ -319,20 +376,13 @@ if test -n "$docbook"; then
mv ${split_html_db_dir}/*.html "$outdir/html_node_db/" mv ${split_html_db_dir}/*.html "$outdir/html_node_db/"
rmdir ${split_html_db_dir} rmdir ${split_html_db_dir}
cmd="${DOCBOOK2TXT} \"${outdir}/$PACKAGE-db.xml\"" cmd="$DOCBOOK2TXT \"${outdir}/$PACKAGE-db.xml\""
echo "Generating docbook ASCII... ($cmd)" echo "Generating docbook ASCII... ($cmd)"
eval "$cmd" eval "$cmd"
docbook_ascii_size=`calcsize $PACKAGE-db.txt` docbook_ascii_size=`calcsize $PACKAGE-db.txt`
mv $PACKAGE-db.txt "$outdir/" mv $PACKAGE-db.txt "$outdir/"
cmd="${DOCBOOK2PS} \"${outdir}/$PACKAGE-db.xml\"" cmd="$DOCBOOK2PDF \"${outdir}/$PACKAGE-db.xml\""
echo "Generating docbook PS... ($cmd)"
eval "$cmd"
gzip -f -9 -c $PACKAGE-db.ps >"$outdir/$PACKAGE-db.ps.gz"
docbook_ps_gz_size=`calcsize "$outdir/$PACKAGE-db.ps.gz"`
mv $PACKAGE-db.ps "$outdir/"
cmd="${DOCBOOK2PDF} \"${outdir}/$PACKAGE-db.xml\""
echo "Generating docbook PDF... ($cmd)" echo "Generating docbook PDF... ($cmd)"
eval "$cmd" eval "$cmd"
docbook_pdf_size=`calcsize $PACKAGE-db.pdf` docbook_pdf_size=`calcsize $PACKAGE-db.pdf`
@ -346,6 +396,7 @@ if test -z "$use_texi2html"; then
else else
CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d" CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d"
fi fi
curdate=`$SETLANG date '+%B %d, %Y'` curdate=`$SETLANG date '+%B %d, %Y'`
sed \ sed \
-e "s!%%TITLE%%!$MANUAL_TITLE!g" \ -e "s!%%TITLE%%!$MANUAL_TITLE!g" \
@ -360,13 +411,11 @@ sed \
-e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \ -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \
-e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \ -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \
-e "s!%%PDF_SIZE%%!$pdf_size!g" \ -e "s!%%PDF_SIZE%%!$pdf_size!g" \
-e "s!%%PS_GZ_SIZE%%!$ps_gz_size!g" \
-e "s!%%ASCII_SIZE%%!$ascii_size!g" \ -e "s!%%ASCII_SIZE%%!$ascii_size!g" \
-e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \ -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \
-e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \ -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \
-e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \ -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \
-e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \ -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \
-e "s!%%DOCBOOK_PS_GZ_SIZE%%!$docbook_ps_gz_size!g" \
-e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \ -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \
-e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \ -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \
-e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \ -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \

View file

@ -3,7 +3,7 @@ eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
if 0; if 0;
# Convert git log output to ChangeLog format. # Convert git log output to ChangeLog format.
my $VERSION = '2012-05-22 09:40'; # UTC my $VERSION = '2012-07-29 06:11'; # UTC
# The definition above must lie within the first 8 lines in order # The definition above must lie within the first 8 lines in order
# for the Emacs time-stamp write hook (at end) to update it. # for the Emacs time-stamp write hook (at end) to update it.
# If you change this file with Emacs, please let the write hook # If you change this file with Emacs, please let the write hook
@ -68,6 +68,8 @@ OPTIONS:
header; the default is to cluster adjacent commit messages header; the default is to cluster adjacent commit messages
if their headers are the same and neither commit message if their headers are the same and neither commit message
contains multiple paragraphs. contains multiple paragraphs.
--srcdir=DIR the root of the source tree, from which the .git/
directory can be derived.
--since=DATE convert only the logs since DATE; --since=DATE convert only the logs since DATE;
the default is to convert all log entries. the default is to convert all log entries.
--format=FMT set format string for commit subject and body; --format=FMT set format string for commit subject and body;
@ -192,6 +194,30 @@ sub parse_amend_file($)
return $h; return $h;
} }
# git_dir_option $SRCDIR
#
# From $SRCDIR, the --git-dir option to pass to git (none if $SRCDIR
# is undef). Return as a list (0 or 1 element).
sub git_dir_option($)
{
my ($srcdir) = @_;
my @res = ();
if (defined $srcdir)
{
my $qdir = shell_quote $srcdir;
my $cmd = "cd $qdir && git rev-parse --show-toplevel";
my $qcmd = shell_quote $cmd;
my $git_dir = qx($cmd);
defined $git_dir
or die "$ME: cannot run $qcmd: $!\n";
$? == 0
or die "$ME: $qcmd had unexpected exit code or signal ($?)\n";
chomp $git_dir;
push @res, "--git-dir=$git_dir/.git";
}
@res;
}
{ {
my $since_date; my $since_date;
my $format_string = '%s%n%b%n'; my $format_string = '%s%n%b%n';
@ -200,6 +226,7 @@ sub parse_amend_file($)
my $cluster = 1; my $cluster = 1;
my $strip_tab = 0; my $strip_tab = 0;
my $strip_cherry_pick = 0; my $strip_cherry_pick = 0;
my $srcdir;
GetOptions GetOptions
( (
help => sub { usage 0 }, help => sub { usage 0 },
@ -211,9 +238,9 @@ sub parse_amend_file($)
'cluster!' => \$cluster, 'cluster!' => \$cluster,
'strip-tab' => \$strip_tab, 'strip-tab' => \$strip_tab,
'strip-cherry-pick' => \$strip_cherry_pick, 'strip-cherry-pick' => \$strip_cherry_pick,
'srcdir=s' => \$srcdir,
) or usage 1; ) or usage 1;
defined $since_date defined $since_date
and unshift @ARGV, "--since=$since_date"; and unshift @ARGV, "--since=$since_date";
@ -221,7 +248,9 @@ sub parse_amend_file($)
# that makes a correction in the log or attribution of that commit. # that makes a correction in the log or attribution of that commit.
my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {}; my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {};
my @cmd = (qw (git log --log-size), my @cmd = ('git',
git_dir_option $srcdir,
qw(log --log-size),
'--pretty=format:%H:%ct %an <%ae>%n%n'.$format_string, @ARGV); '--pretty=format:%H:%ct %an <%ae>%n%n'.$format_string, @ARGV);
open PIPE, '-|', @cmd open PIPE, '-|', @cmd
or die ("$ME: failed to run '". quoted_cmd (@cmd) ."': $!\n" or die ("$ME: failed to run '". quoted_cmd (@cmd) ."': $!\n"

View file

@ -24,9 +24,6 @@ VERSION=2009-07-21.16; # UTC
# You should have received a copy of the GNU General Public License # 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/>.
# Requirements: everything required to bootstrap your package,
# plus these: git, cvs, cvsu, rsync, mktemp
ME=$(basename "$0") ME=$(basename "$0")
warn() { printf '%s: %s\n' "$ME" "$*" >&2; } warn() { printf '%s: %s\n' "$ME" "$*" >&2; }
die() { warn "$*"; exit 1; } die() { warn "$*"; exit 1; }
@ -36,10 +33,9 @@ help()
cat <<EOF cat <<EOF
Usage: $ME Usage: $ME
Run this script from top_srcdir (no options or arguments) after each Run this script from top_srcdir (no arguments) after each non-alpha
non-alpha release, to update the web documentation at release, to update the web documentation at
http://www.gnu.org/software/\$pkg/manual/ Run it from your project's http://www.gnu.org/software/\$pkg/manual/
the top-level directory.
Options: Options:
-C, --builddir=DIR location of (configured) Makefile (default: .) -C, --builddir=DIR location of (configured) Makefile (default: .)
@ -64,6 +60,51 @@ EOF
exit exit
} }
# find_tool ENVVAR NAMES...
# -------------------------
# Search for a required program. Use the value of ENVVAR, if set,
# otherwise find the first of the NAMES that can be run (i.e.,
# supports --version). If found, set ENVVAR to the program name,
# die otherwise.
#
# FIXME: code duplication, see also bootstrap.
find_tool ()
{
find_tool_envvar=$1
shift
find_tool_names=$@
eval "find_tool_res=\$$find_tool_envvar"
if test x"$find_tool_res" = x; then
for i
do
if ($i --version </dev/null) >/dev/null 2>&1; then
find_tool_res=$i
break
fi
done
else
find_tool_error_prefix="\$$find_tool_envvar: "
fi
test x"$find_tool_res" != x \
|| die "one of these is required: $find_tool_names"
($find_tool_res --version </dev/null) >/dev/null 2>&1 \
|| die "${find_tool_error_prefix}cannot run $find_tool_res --version"
eval "$find_tool_envvar=\$find_tool_res"
eval "export $find_tool_envvar"
}
## ------ ##
## Main. ##
## ------ ##
# Requirements: everything required to bootstrap your package, plus
# these.
find_tool CVS cvs
find_tool CVSU cvsu
find_tool GIT git
find_tool RSYNC rsync
find_tool XARGS gxargs xargs
builddir=. builddir=.
while test $# != 0 while test $# != 0
do do
@ -86,22 +127,22 @@ do
done done
test $# = 0 \ test $# = 0 \
|| die "$ME: too many arguments" || die "too many arguments"
prev=.prev-version prev=.prev-version
version=$(cat $prev) || die "$ME: no $prev file?" version=$(cat $prev) || die "no $prev file?"
pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' $builddir/Makefile) \ pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' $builddir/Makefile) \
|| die "$ME: no Makefile?" || die "no Makefile?"
tmp_branch=web-doc-$version-$$ tmp_branch=web-doc-$version-$$
current_branch=$(git branch | sed -ne '/^\* /{s///;p;q;}') current_branch=$($GIT branch | sed -ne '/^\* /{s///;p;q;}')
cleanup() cleanup()
{ {
__st=$? __st=$?
rm -rf "$tmp" rm -rf "$tmp"
git checkout "$current_branch" $GIT checkout "$current_branch"
git submodule update --recursive $GIT submodule update --recursive
git branch -d $tmp_branch $GIT branch -d $tmp_branch
exit $__st exit $__st
} }
trap cleanup 0 trap cleanup 0
@ -111,8 +152,8 @@ trap 'exit $?' 1 2 13 15
# just-released version number, not some string like 7.6.18-20761. # just-released version number, not some string like 7.6.18-20761.
# That version string propagates into all documentation. # That version string propagates into all documentation.
set -e set -e
git checkout -b $tmp_branch v$version $GIT checkout -b $tmp_branch v$version
git submodule update --recursive $GIT submodule update --recursive
./bootstrap ./bootstrap
srcdir=$(pwd) srcdir=$(pwd)
cd "$builddir" cd "$builddir"
@ -125,16 +166,18 @@ set +e
tmp=$(mktemp -d web-doc-update.XXXXXX) || exit 1 tmp=$(mktemp -d web-doc-update.XXXXXX) || exit 1
( cd $tmp \ ( cd $tmp \
&& cvs -d $USER@cvs.sv.gnu.org:/webcvs/$pkg co $pkg ) && $CVS -d $USER@cvs.sv.gnu.org:/webcvs/$pkg co $pkg )
rsync -avP "$builddir"/doc/manual/ $tmp/$pkg/manual $RSYNC -avP "$builddir"/doc/manual/ $tmp/$pkg/manual
( (
cd $tmp/$pkg/manual cd $tmp/$pkg/manual
# Add any new files: # Add any new files:
cvsu --types='?'|sed s/..// | xargs --no-run-if-empty -- cvs add -ko $CVSU --types='?' \
| sed s/..// \
| $XARGS --no-run-if-empty -- $CVS add -ko
cvs ci -m $version $CVS ci -m $version
) )
# Local variables: # Local variables:

View file

@ -45,8 +45,6 @@
(%%ASCII_GZ_SIZE%%K bytes gzipped)</a>.</li> (%%ASCII_GZ_SIZE%%K bytes gzipped)</a>.</li>
<li><a href="%%PACKAGE%%.dvi.gz">TeX dvi file <li><a href="%%PACKAGE%%.dvi.gz">TeX dvi file
(%%DVI_GZ_SIZE%%K bytes gzipped)</a>.</li> (%%DVI_GZ_SIZE%%K bytes gzipped)</a>.</li>
<li><a href="%%PACKAGE%%.ps.gz">PostScript file
(%%PS_GZ_SIZE%%K bytes gzipped)</a>.</li>
<li><a href="%%PACKAGE%%.pdf">PDF file <li><a href="%%PACKAGE%%.pdf">PDF file
(%%PDF_SIZE%%K bytes)</a>.</li> (%%PDF_SIZE%%K bytes)</a>.</li>
<li><a href="%%PACKAGE%%.texi.tar.gz">Texinfo source <li><a href="%%PACKAGE%%.texi.tar.gz">Texinfo source

View file

@ -1,67 +0,0 @@
Fix `canonicalize_file_name' replacement handling when cross-compiling.
Without this patch, we end up with:
./.libs/libguile-2.0.so: undefined reference to `rpl_canonicalize_file_name'
See <http://hydra.nixos.org/build/2765567> for details.
index 69b3f4c..3c4c5ee 100644
--- a/m4/canonicalize.m4
+++ b/m4/canonicalize.m4
@@ -16,8 +16,11 @@ AC_DEFUN([gl_FUNC_CANONICALIZE_FILENAME_MODE],
AC_REQUIRE([gl_FUNC_REALPATH_WORKS])
if test $ac_cv_func_canonicalize_file_name = no; then
HAVE_CANONICALIZE_FILE_NAME=0
- elif test "$gl_cv_func_realpath_works" != yes; then
- REPLACE_CANONICALIZE_FILE_NAME=1
+ else
+ case "$gl_cv_func_realpath_works" in
+ *yes) ;;
+ *) REPLACE_CANONICALIZE_FILE_NAME=1 ;;
+ esac
fi
])
@@ -30,12 +33,21 @@ AC_DEFUN([gl_CANONICALIZE_LGPL],
HAVE_CANONICALIZE_FILE_NAME=0
if test $ac_cv_func_realpath = no; then
HAVE_REALPATH=0
- elif test "$gl_cv_func_realpath_works" != yes; then
- REPLACE_REALPATH=1
+ else
+ case "$gl_cv_func_realpath_works" in
+ *yes) ;;
+ *) REPLACE_REALPATH=1 ;;
+ esac
fi
- elif test "$gl_cv_func_realpath_works" != yes; then
- REPLACE_CANONICALIZE_FILE_NAME=1
- REPLACE_REALPATH=1
+ else
+ case "$gl_cv_func_realpath_works" in
+ *yes)
+ ;;
+ *)
+ REPLACE_CANONICALIZE_FILE_NAME=1
+ REPLACE_REALPATH=1
+ ;;
+ esac
fi
])
Now, work around a second bug: fix default value when cross-compiling
for GNU/Hurd.
index 69b3f4c..111ddf8 100644
--- a/m4/canonicalize.m4
+++ b/m4/canonicalize.m4
@@ -95,7 +95,7 @@ AC_DEFUN([gl_FUNC_REALPATH_WORKS],
[gl_cv_func_realpath_works=no],
[case "$host_os" in
# Guess yes on glibc systems.
- *-gnu*) gl_cv_func_realpath_works="guessing yes" ;;
+ *gnu*) gl_cv_func_realpath_works="guessing yes" ;;
# If we don't know, assume the worst.
*) gl_cv_func_realpath_works="guessing no" ;;
esac

View file

@ -155,7 +155,7 @@ EXTRA_DIST += arpa_inet.in.h
## begin gnulib module binary-io ## begin gnulib module binary-io
libgnu_la_SOURCES += binary-io.h libgnu_la_SOURCES += binary-io.h binary-io.c
## end gnulib module binary-io ## end gnulib module binary-io
@ -614,7 +614,7 @@ EXTRA_DIST += $(top_srcdir)/build-aux/gnu-web-doc-update
distclean-local: clean-GNUmakefile distclean-local: clean-GNUmakefile
clean-GNUmakefile: clean-GNUmakefile:
test x'$(VPATH)' != x && rm -f $(top_builddir)/GNUmakefile || : test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile
EXTRA_DIST += $(top_srcdir)/GNUmakefile EXTRA_DIST += $(top_srcdir)/GNUmakefile
@ -1795,6 +1795,7 @@ EXTRA_libgnu_la_SOURCES += stat.c
## begin gnulib module stat-time ## begin gnulib module stat-time
libgnu_la_SOURCES += stat-time.c
EXTRA_DIST += stat-time.h EXTRA_DIST += stat-time.h
@ -2133,6 +2134,7 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
-e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \ -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \
-e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \
-e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
-e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \
-e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \
-e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \
-e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \
@ -3008,7 +3010,7 @@ EXTRA_libgnu_la_SOURCES += write.c
## begin gnulib module xsize ## begin gnulib module xsize
libgnu_la_SOURCES += xsize.h libgnu_la_SOURCES += xsize.h xsize.c
## end gnulib module xsize ## end gnulib module xsize

3
lib/binary-io.c Normal file
View file

@ -0,0 +1,3 @@
#include <config.h>
#define BINARY_IO_INLINE _GL_EXTERN_INLINE
#include "binary-io.h"

View file

@ -25,6 +25,11 @@
so we include it here first. */ so we include it here first. */
#include <stdio.h> #include <stdio.h>
_GL_INLINE_HEADER_BEGIN
#ifndef BINARY_IO_INLINE
# define BINARY_IO_INLINE _GL_INLINE
#endif
/* set_binary_mode (fd, mode) /* set_binary_mode (fd, mode)
sets the binary/text I/O mode of file descriptor fd to the given mode sets the binary/text I/O mode of file descriptor fd to the given mode
(must be O_BINARY or O_TEXT) and returns the previous mode. */ (must be O_BINARY or O_TEXT) and returns the previous mode. */
@ -39,9 +44,9 @@
# endif # endif
#else #else
/* On reasonable systems, binary I/O is the only choice. */ /* On reasonable systems, binary I/O is the only choice. */
/* Use an inline function rather than a macro, to avoid gcc warnings /* Use a function rather than a macro, to avoid gcc warnings
"warning: statement with no effect". */ "warning: statement with no effect". */
static inline int BINARY_IO_INLINE int
set_binary_mode (int fd, int mode) set_binary_mode (int fd, int mode)
{ {
(void) fd; (void) fd;
@ -62,4 +67,6 @@ set_binary_mode (int fd, int mode)
# define SET_BINARY(fd) ((void) set_binary_mode (fd, O_BINARY)) # define SET_BINARY(fd) ((void) set_binary_mode (fd, O_BINARY))
#endif #endif
_GL_INLINE_HEADER_END
#endif /* _BINARY_H */ #endif /* _BINARY_H */

View file

@ -270,5 +270,10 @@
# define GNULIB_defined_ENOTRECOVERABLE 1 # define GNULIB_defined_ENOTRECOVERABLE 1
# endif # endif
# ifndef EILSEQ
# define EILSEQ 2015
# define GNULIB_defined_EILSEQ 1
# endif
#endif /* _@GUARD_PREFIX@_ERRNO_H */ #endif /* _@GUARD_PREFIX@_ERRNO_H */
#endif /* _@GUARD_PREFIX@_ERRNO_H */ #endif /* _@GUARD_PREFIX@_ERRNO_H */

View file

@ -216,6 +216,10 @@ _GL_WARN_ON_USE (openat, "openat is not portable - "
# define O_EXEC O_RDONLY /* This is often close enough in older systems. */ # define O_EXEC O_RDONLY /* This is often close enough in older systems. */
#endif #endif
#ifndef O_IGNORE_CTTY
# define O_IGNORE_CTTY 0
#endif
#ifndef O_NDELAY #ifndef O_NDELAY
# define O_NDELAY 0 # define O_NDELAY 0
#endif #endif
@ -249,10 +253,18 @@ _GL_WARN_ON_USE (openat, "openat is not portable - "
# define O_NOFOLLOW 0 # define O_NOFOLLOW 0
#endif #endif
#ifndef O_NOLINK
# define O_NOLINK 0
#endif
#ifndef O_NOLINKS #ifndef O_NOLINKS
# define O_NOLINKS 0 # define O_NOLINKS 0
#endif #endif
#ifndef O_NOTRANS
# define O_NOTRANS 0
#endif
#ifndef O_RSYNC #ifndef O_RSYNC
# define O_RSYNC 0 # define O_RSYNC 0
#endif #endif
@ -269,7 +281,7 @@ _GL_WARN_ON_USE (openat, "openat is not portable - "
# define O_TTY_INIT 0 # define O_TTY_INIT 0
#endif #endif
#if O_ACCMODE != (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) #if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
# undef O_ACCMODE # undef O_ACCMODE
# define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) # define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
#endif #endif

View file

@ -183,9 +183,12 @@ npgettext_aux (const char *domain,
#include <string.h> #include <string.h>
#define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \ #if (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \
(((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \
/* || __STDC_VERSION__ >= 199901L */ ) /* || __STDC_VERSION__ >= 199901L */ )
# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1
#else
# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0
#endif
#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
#include <stdlib.h> #include <stdlib.h>

View file

@ -542,6 +542,13 @@ locale_charset (void)
if (codeset[0] == '\0') if (codeset[0] == '\0')
codeset = "ASCII"; codeset = "ASCII";
#ifdef DARWIN7
/* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8"
(the default codeset) does not work when MB_CUR_MAX is 1. */
if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX <= 1)
codeset = "ASCII";
#endif
return codeset; return codeset;
} }

View file

@ -42,7 +42,7 @@ extern "C" {
and a page size can be as small as 4096 bytes. So we cannot safely and a page size can be as small as 4096 bytes. So we cannot safely
allocate anything larger than 4096 bytes. Also care for the possibility allocate anything larger than 4096 bytes. Also care for the possibility
of a few compiler-allocated temporary stack slots. of a few compiler-allocated temporary stack slots.
This must be a macro, not an inline function. */ This must be a macro, not a function. */
# define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL) # define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL)
#else #else
# define safe_alloca(N) ((void) (N), NULL) # define safe_alloca(N) ((void) (N), NULL)

View file

@ -735,7 +735,7 @@ re_search_internal (const regex_t *preg,
mctx.input.tip_context = (eflags & REG_NOTBOL) ? CONTEXT_BEGBUF mctx.input.tip_context = (eflags & REG_NOTBOL) ? CONTEXT_BEGBUF
: CONTEXT_NEWLINE | CONTEXT_BEGBUF; : CONTEXT_NEWLINE | CONTEXT_BEGBUF;
/* Check incrementally whether of not the input string match. */ /* Check incrementally whether the input string matches. */
incr = (last_start < start) ? -1 : 1; incr = (last_start < start) ? -1 : 1;
left_lim = (last_start < start) ? last_start : start; left_lim = (last_start < start) ? last_start : start;
right_lim = (last_start < start) ? start : last_start; right_lim = (last_start < start) ? start : last_start;

3
lib/stat-time.c Normal file
View file

@ -0,0 +1,3 @@
#include <config.h>
#define _GL_STAT_TIME_INLINE _GL_EXTERN_INLINE
#include "stat-time.h"

View file

@ -23,6 +23,11 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <time.h> #include <time.h>
_GL_INLINE_HEADER_BEGIN
#ifndef _GL_STAT_TIME_INLINE
# define _GL_STAT_TIME_INLINE _GL_INLINE
#endif
/* STAT_TIMESPEC (ST, ST_XTIM) is the ST_XTIM member for *ST of type /* STAT_TIMESPEC (ST, ST_XTIM) is the ST_XTIM member for *ST of type
struct timespec, if available. If not, then STAT_TIMESPEC_NS (ST, struct timespec, if available. If not, then STAT_TIMESPEC_NS (ST,
ST_XTIM) is the nanosecond component of the ST_XTIM member for *ST, ST_XTIM) is the nanosecond component of the ST_XTIM member for *ST,
@ -46,7 +51,7 @@
#endif #endif
/* Return the nanosecond component of *ST's access time. */ /* Return the nanosecond component of *ST's access time. */
static inline long int _GL_STAT_TIME_INLINE long int
get_stat_atime_ns (struct stat const *st) get_stat_atime_ns (struct stat const *st)
{ {
# if defined STAT_TIMESPEC # if defined STAT_TIMESPEC
@ -59,7 +64,7 @@ get_stat_atime_ns (struct stat const *st)
} }
/* Return the nanosecond component of *ST's status change time. */ /* Return the nanosecond component of *ST's status change time. */
static inline long int _GL_STAT_TIME_INLINE long int
get_stat_ctime_ns (struct stat const *st) get_stat_ctime_ns (struct stat const *st)
{ {
# if defined STAT_TIMESPEC # if defined STAT_TIMESPEC
@ -72,7 +77,7 @@ get_stat_ctime_ns (struct stat const *st)
} }
/* Return the nanosecond component of *ST's data modification time. */ /* Return the nanosecond component of *ST's data modification time. */
static inline long int _GL_STAT_TIME_INLINE long int
get_stat_mtime_ns (struct stat const *st) get_stat_mtime_ns (struct stat const *st)
{ {
# if defined STAT_TIMESPEC # if defined STAT_TIMESPEC
@ -85,7 +90,7 @@ get_stat_mtime_ns (struct stat const *st)
} }
/* Return the nanosecond component of *ST's birth time. */ /* Return the nanosecond component of *ST's birth time. */
static inline long int _GL_STAT_TIME_INLINE long int
get_stat_birthtime_ns (struct stat const *st) get_stat_birthtime_ns (struct stat const *st)
{ {
# if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC # if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC
@ -100,7 +105,7 @@ get_stat_birthtime_ns (struct stat const *st)
} }
/* Return *ST's access time. */ /* Return *ST's access time. */
static inline struct timespec _GL_STAT_TIME_INLINE struct timespec
get_stat_atime (struct stat const *st) get_stat_atime (struct stat const *st)
{ {
#ifdef STAT_TIMESPEC #ifdef STAT_TIMESPEC
@ -114,7 +119,7 @@ get_stat_atime (struct stat const *st)
} }
/* Return *ST's status change time. */ /* Return *ST's status change time. */
static inline struct timespec _GL_STAT_TIME_INLINE struct timespec
get_stat_ctime (struct stat const *st) get_stat_ctime (struct stat const *st)
{ {
#ifdef STAT_TIMESPEC #ifdef STAT_TIMESPEC
@ -128,7 +133,7 @@ get_stat_ctime (struct stat const *st)
} }
/* Return *ST's data modification time. */ /* Return *ST's data modification time. */
static inline struct timespec _GL_STAT_TIME_INLINE struct timespec
get_stat_mtime (struct stat const *st) get_stat_mtime (struct stat const *st)
{ {
#ifdef STAT_TIMESPEC #ifdef STAT_TIMESPEC
@ -143,7 +148,7 @@ get_stat_mtime (struct stat const *st)
/* Return *ST's birth time, if available; otherwise return a value /* Return *ST's birth time, if available; otherwise return a value
with tv_sec and tv_nsec both equal to -1. */ with tv_sec and tv_nsec both equal to -1. */
static inline struct timespec _GL_STAT_TIME_INLINE struct timespec
get_stat_birthtime (struct stat const *st) get_stat_birthtime (struct stat const *st)
{ {
struct timespec t; struct timespec t;
@ -186,4 +191,6 @@ get_stat_birthtime (struct stat const *st)
return t; return t;
} }
_GL_INLINE_HEADER_END
#endif #endif

View file

@ -66,16 +66,11 @@
# undef true # undef true
#endif #endif
/* For the sake of symbolic names in gdb, we define true and false as #ifdef __cplusplus
enum constants, not only as macros. # define _Bool bool
It is tempting to write # define bool bool
typedef enum { false = 0, true = 1 } _Bool; #else
so that gdb prints values of type 'bool' symbolically. But if we do # if defined __BEOS__ && !defined __HAIKU__
this, values of type '_Bool' may promote to 'int' or 'unsigned int'
(see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int'
(see ISO C 99 6.3.1.1.(2)). So we add a negative value to the
enum; this ensures that '_Bool' promotes to 'int'. */
#if defined __cplusplus || (defined __BEOS__ && !defined __HAIKU__)
/* A compiler known to have 'bool'. */ /* A compiler known to have 'bool'. */
/* If the compiler already has both 'bool' and '_Bool', we can assume they /* If the compiler already has both 'bool' and '_Bool', we can assume they
are the same types. */ are the same types. */
@ -107,15 +102,31 @@ typedef bool _Bool;
# else # else
/* With this compiler, trust the _Bool type if the compiler has it. */ /* With this compiler, trust the _Bool type if the compiler has it. */
# if !@HAVE__BOOL@ # if !@HAVE__BOOL@
/* For the sake of symbolic names in gdb, define true and false as
enum constants, not only as macros.
It is tempting to write
typedef enum { false = 0, true = 1 } _Bool;
so that gdb prints values of type 'bool' symbolically. But then
values of type '_Bool' might promote to 'int' or 'unsigned int'
(see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int'
(see ISO C 99 6.3.1.1.(2)). So add a negative value to the
enum; this ensures that '_Bool' promotes to 'int'. */
typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool;
# endif # endif
# endif # endif
# endif # endif
# define bool _Bool # define bool _Bool
#endif
/* The other macros must be usable in preprocessor directives. */ /* The other macros must be usable in preprocessor directives. */
#ifdef __cplusplus
# define false false
# define true true
#else
# define false 0 # define false 0
# define true 1 # define true 1
#endif
#define __bool_true_false_are_defined 1 #define __bool_true_false_are_defined 1
#endif /* _GL_STDBOOL_H */ #endif /* _GL_STDBOOL_H */

View file

@ -457,10 +457,19 @@ _GL_WARN_ON_USE (posix_openpt, "posix_openpt is not portable - "
#if @GNULIB_PTSNAME@ #if @GNULIB_PTSNAME@
/* Return the pathname of the pseudo-terminal slave associated with /* Return the pathname of the pseudo-terminal slave associated with
the master FD is open on, or NULL on errors. */ the master FD is open on, or NULL on errors. */
# if @REPLACE_PTSNAME@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef ptsname
# define ptsname rpl_ptsname
# endif
_GL_FUNCDECL_RPL (ptsname, char *, (int fd));
_GL_CXXALIAS_RPL (ptsname, char *, (int fd));
# else
# if !@HAVE_PTSNAME@ # if !@HAVE_PTSNAME@
_GL_FUNCDECL_SYS (ptsname, char *, (int fd)); _GL_FUNCDECL_SYS (ptsname, char *, (int fd));
# endif # endif
_GL_CXXALIAS_SYS (ptsname, char *, (int fd)); _GL_CXXALIAS_SYS (ptsname, char *, (int fd));
# endif
_GL_CXXALIASWARN (ptsname); _GL_CXXALIASWARN (ptsname);
#elif defined GNULIB_POSIXCHECK #elif defined GNULIB_POSIXCHECK
# undef ptsname # undef ptsname

View file

@ -125,7 +125,7 @@
extern int (*dummy (void)) [sizeof (struct {...})]; extern int (*dummy (void)) [sizeof (struct {...})];
* GCC warns about duplicate declarations of the dummy function if * GCC warns about duplicate declarations of the dummy function if
-Wredundant_decls is used. GCC 4.3 and later have a builtin -Wredundant-decls is used. GCC 4.3 and later have a builtin
__COUNTER__ macro that can let us generate unique identifiers for __COUNTER__ macro that can let us generate unique identifiers for
each dummy function, to suppress this warning. each dummy function, to suppress this warning.
@ -133,6 +133,10 @@
which do not support _Static_assert, also do not warn about the which do not support _Static_assert, also do not warn about the
last declaration mentioned above. last declaration mentioned above.
* GCC warns if -Wnested-externs is enabled and verify() is used
within a function body; but inside a function, you can always
arrange to use verify_expr() instead.
* In C++, any struct definition inside sizeof is invalid. * In C++, any struct definition inside sizeof is invalid.
Use a template type to work around the problem. */ Use a template type to work around the problem. */

3
lib/xsize.c Normal file
View file

@ -0,0 +1,3 @@
#include <config.h>
#define XSIZE_INLINE _GL_EXTERN_INLINE
#include "xsize.h"

View file

@ -27,6 +27,11 @@
# include <stdint.h> # include <stdint.h>
#endif #endif
_GL_INLINE_HEADER_BEGIN
#ifndef XSIZE_INLINE
# define XSIZE_INLINE _GL_INLINE
#endif
/* The size of memory objects is often computed through expressions of /* The size of memory objects is often computed through expressions of
type size_t. Example: type size_t. Example:
void* p = malloc (header_size + n * element_size). void* p = malloc (header_size + n * element_size).
@ -48,7 +53,7 @@
((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX) ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX)
/* Sum of two sizes, with overflow check. */ /* Sum of two sizes, with overflow check. */
static inline size_t XSIZE_INLINE size_t
#if __GNUC__ >= 3 #if __GNUC__ >= 3
__attribute__ ((__pure__)) __attribute__ ((__pure__))
#endif #endif
@ -59,7 +64,7 @@ xsum (size_t size1, size_t size2)
} }
/* Sum of three sizes, with overflow check. */ /* Sum of three sizes, with overflow check. */
static inline size_t XSIZE_INLINE size_t
#if __GNUC__ >= 3 #if __GNUC__ >= 3
__attribute__ ((__pure__)) __attribute__ ((__pure__))
#endif #endif
@ -69,7 +74,7 @@ xsum3 (size_t size1, size_t size2, size_t size3)
} }
/* Sum of four sizes, with overflow check. */ /* Sum of four sizes, with overflow check. */
static inline size_t XSIZE_INLINE size_t
#if __GNUC__ >= 3 #if __GNUC__ >= 3
__attribute__ ((__pure__)) __attribute__ ((__pure__))
#endif #endif
@ -79,7 +84,7 @@ xsum4 (size_t size1, size_t size2, size_t size3, size_t size4)
} }
/* Maximum of two sizes, with overflow check. */ /* Maximum of two sizes, with overflow check. */
static inline size_t XSIZE_INLINE size_t
#if __GNUC__ >= 3 #if __GNUC__ >= 3
__attribute__ ((__pure__)) __attribute__ ((__pure__))
#endif #endif
@ -92,7 +97,7 @@ xmax (size_t size1, size_t size2)
/* Multiplication of a count with an element size, with overflow check. /* Multiplication of a count with an element size, with overflow check.
The count must be >= 0 and the element size must be > 0. The count must be >= 0 and the element size must be > 0.
This is a macro, not an inline function, so that it works correctly even This is a macro, not a function, so that it works correctly even
when N is of a wider type and N > SIZE_MAX. */ when N is of a wider type and N > SIZE_MAX. */
#define xtimes(N, ELSIZE) \ #define xtimes(N, ELSIZE) \
((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX) ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX)
@ -104,4 +109,6 @@ xmax (size_t size1, size_t size2)
#define size_in_bounds_p(SIZE) \ #define size_in_bounds_p(SIZE) \
((SIZE) != SIZE_MAX) ((SIZE) != SIZE_MAX)
_GL_INLINE_HEADER_END
#endif /* _XSIZE_H */ #endif /* _XSIZE_H */

View file

@ -1,4 +1,4 @@
# canonicalize.m4 serial 24 # canonicalize.m4 serial 26
dnl Copyright (C) 2003-2007, 2009-2012 Free Software Foundation, Inc. dnl Copyright (C) 2003-2007, 2009-2012 Free Software Foundation, Inc.
@ -107,7 +107,7 @@ AC_DEFUN([gl_FUNC_REALPATH_WORKS],
[gl_cv_func_realpath_works=no], [gl_cv_func_realpath_works=no],
[case "$host_os" in [case "$host_os" in
# Guess yes on glibc systems. # Guess yes on glibc systems.
*gnu*) gl_cv_func_realpath_works="guessing yes" ;; *-gnu* | gnu*) gl_cv_func_realpath_works="guessing yes" ;;
# If we don't know, assume the worst. # If we don't know, assume the worst.
*) gl_cv_func_realpath_works="guessing no" ;; *) gl_cv_func_realpath_works="guessing no" ;;
esac esac

View file

@ -1,4 +1,4 @@
# eealloc.m4 serial 2 # eealloc.m4 serial 3
dnl Copyright (C) 2003, 2009-2012 Free Software Foundation, Inc. dnl Copyright (C) 2003, 2009-2012 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it, dnl gives unlimited permission to copy and/or distribute it,
@ -8,7 +8,6 @@ AC_DEFUN([gl_EEALLOC],
[ [
AC_REQUIRE([gl_EEMALLOC]) AC_REQUIRE([gl_EEMALLOC])
AC_REQUIRE([gl_EEREALLOC]) AC_REQUIRE([gl_EEREALLOC])
AC_REQUIRE([AC_C_INLINE])
]) ])
AC_DEFUN([gl_EEMALLOC], AC_DEFUN([gl_EEMALLOC],

View file

@ -1,4 +1,4 @@
# errno_h.m4 serial 11 # errno_h.m4 serial 12
dnl Copyright (C) 2004, 2006, 2008-2012 Free Software Foundation, Inc. dnl Copyright (C) 2004, 2006, 2008-2012 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it, dnl gives unlimited permission to copy and/or distribute it,
@ -57,6 +57,9 @@ booboo
#endif #endif
#if !defined ENOTRECOVERABLE #if !defined ENOTRECOVERABLE
booboo booboo
#endif
#if !defined EILSEQ
booboo
#endif #endif
], ],
[gl_cv_header_errno_h_complete=no], [gl_cv_header_errno_h_complete=no],

57
m4/extern-inline.m4 Normal file
View file

@ -0,0 +1,57 @@
dnl 'extern inline' a la ISO C99.
dnl Copyright 2012 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_EXTERN_INLINE],
[
AC_REQUIRE([AC_C_INLINE])
AH_VERBATIM([extern_inline],
[/* _GL_INLINE is a portable alternative to ISO C99 plain 'inline'.
_GL_EXTERN_INLINE is a portable alternative to 'extern inline'.
_GL_INLINE_HEADER_BEGIN contains useful stuff to put
in an include file, before uses of _GL_INLINE.
It suppresses GCC's bogus "no previous prototype for 'FOO'" diagnostic,
when FOO is an inline function in the header; see
<http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113>.
_GL_INLINE_HEADER_END contains useful stuff to put
in the same include file, after uses of _GL_INLINE. */
#if (__GNUC__ \
? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
: 199901L <= __STDC_VERSION__)
# define _GL_INLINE inline
# define _GL_EXTERN_INLINE extern inline
#elif 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
# if __GNUC_GNU_INLINE__
/* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */
# define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
# else
# define _GL_INLINE extern inline
# endif
# define _GL_EXTERN_INLINE extern
#else
# define _GL_INLINE static inline
# define _GL_EXTERN_INLINE static inline
#endif
#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
# define _GL_INLINE_HEADER_CONST_PRAGMA
# else
# define _GL_INLINE_HEADER_CONST_PRAGMA \
_Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
# endif
# define _GL_INLINE_HEADER_BEGIN \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
_Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
_GL_INLINE_HEADER_CONST_PRAGMA
# define _GL_INLINE_HEADER_END \
_Pragma ("GCC diagnostic pop")
#else
# define _GL_INLINE_HEADER_BEGIN
# define _GL_INLINE_HEADER_END
#endif])
])

View file

@ -50,7 +50,18 @@ AC_DEFUN([gl_FCNTL_O_FLAGS],
#if HAVE_SYMLINK #if HAVE_SYMLINK
{ {
static char const sym[] = "conftest.sym"; static char const sym[] = "conftest.sym";
if (symlink (".", sym) != 0) if (symlink ("/dev/null", sym) != 0)
result |= 2;
else
{
int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0);
if (fd >= 0)
{
close (fd);
result |= 4;
}
}
if (unlink (sym) != 0 || symlink (".", sym) != 0)
result |= 2; result |= 2;
else else
{ {

View file

@ -120,5 +120,5 @@ gl_MAKEFILE_NAME([])
gl_LIBTOOL gl_LIBTOOL
gl_MACRO_PREFIX([gl]) gl_MACRO_PREFIX([gl])
gl_PO_DOMAIN([]) gl_PO_DOMAIN([])
gl_WITNESS_C_DOMAIN([]) gl_WITNESS_C_MACRO([])
gl_VC_FILES([false]) gl_VC_FILES([false])

View file

@ -70,6 +70,7 @@ AC_DEFUN([gl_EARLY],
# Code from module errno: # Code from module errno:
# Code from module extensions: # Code from module extensions:
AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
# Code from module extern-inline:
# Code from module fcntl-h: # Code from module fcntl-h:
# Code from module fd-hook: # Code from module fd-hook:
# Code from module float: # Code from module float:
@ -240,7 +241,6 @@ gl_SYS_SOCKET_MODULE_INDICATOR([accept])
gl_FUNC_ALLOCA gl_FUNC_ALLOCA
gl_HEADER_ARPA_INET gl_HEADER_ARPA_INET
AC_PROG_MKDIR_P AC_PROG_MKDIR_P
AC_REQUIRE([AC_C_INLINE])
AC_REQUIRE([gl_HEADER_SYS_SOCKET]) AC_REQUIRE([gl_HEADER_SYS_SOCKET])
if test "$ac_cv_header_winsock2_h" = yes; then if test "$ac_cv_header_winsock2_h" = yes; then
AC_LIBOBJ([bind]) AC_LIBOBJ([bind])
@ -296,6 +296,7 @@ gl_LOCALE_MODULE_INDICATOR([duplocale])
gl_ENVIRON gl_ENVIRON
gl_UNISTD_MODULE_INDICATOR([environ]) gl_UNISTD_MODULE_INDICATOR([environ])
gl_HEADER_ERRNO_H gl_HEADER_ERRNO_H
AC_REQUIRE([gl_EXTERN_INLINE])
gl_FCNTL_H gl_FCNTL_H
gl_FLOAT_H gl_FLOAT_H
if test $REPLACE_FLOAT_LDBL = 1; then if test $REPLACE_FLOAT_LDBL = 1; then
@ -865,6 +866,7 @@ AC_DEFUN([gl_FILE_LIST], [
lib/arpa_inet.in.h lib/arpa_inet.in.h
lib/asnprintf.c lib/asnprintf.c
lib/basename-lgpl.c lib/basename-lgpl.c
lib/binary-io.c
lib/binary-io.h lib/binary-io.h
lib/bind.c lib/bind.c
lib/btowc.c lib/btowc.c
@ -996,6 +998,7 @@ AC_DEFUN([gl_FILE_LIST], [
lib/socket.c lib/socket.c
lib/sockets.c lib/sockets.c
lib/sockets.h lib/sockets.h
lib/stat-time.c
lib/stat-time.h lib/stat-time.h
lib/stat.c lib/stat.c
lib/stdalign.in.h lib/stdalign.in.h
@ -1040,6 +1043,7 @@ AC_DEFUN([gl_FILE_LIST], [
lib/wcrtomb.c lib/wcrtomb.c
lib/wctype.in.h lib/wctype.in.h
lib/write.c lib/write.c
lib/xsize.c
lib/xsize.h lib/xsize.h
m4/00gnulib.m4 m4/00gnulib.m4
m4/absolute-header.m4 m4/absolute-header.m4
@ -1067,6 +1071,7 @@ AC_DEFUN([gl_FILE_LIST], [
m4/exponentf.m4 m4/exponentf.m4
m4/exponentl.m4 m4/exponentl.m4
m4/extensions.m4 m4/extensions.m4
m4/extern-inline.m4
m4/fcntl-o.m4 m4/fcntl-o.m4
m4/fcntl_h.m4 m4/fcntl_h.m4
m4/float_h.m4 m4/float_h.m4

View file

@ -1,33 +1,39 @@
# lib-ld.m4 serial 5 (gettext-0.18.2) # lib-ld.m4 serial 6
dnl Copyright (C) 1996-2003, 2009-2012 Free Software Foundation, Inc. dnl Copyright (C) 1996-2003, 2009-2012 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it, dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved. dnl with or without modifications, as long as this notice is preserved.
dnl Subroutines of libtool.m4, dnl Subroutines of libtool.m4,
dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid
dnl with libtool.m4. dnl collision with libtool.m4.
dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no.
AC_DEFUN([AC_LIB_PROG_LD_GNU], AC_DEFUN([AC_LIB_PROG_LD_GNU],
[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld],
[# I'd rather use --version here, but apparently some GNU ld's only accept -v. [# I'd rather use --version here, but apparently some GNU lds only accept -v.
case `$LD -v 2>&1 </dev/null` in case `$LD -v 2>&1 </dev/null` in
*GNU* | *'with BFD'*) *GNU* | *'with BFD'*)
acl_cv_prog_gnu_ld=yes ;; acl_cv_prog_gnu_ld=yes
;;
*) *)
acl_cv_prog_gnu_ld=no ;; acl_cv_prog_gnu_ld=no
;;
esac]) esac])
with_gnu_ld=$acl_cv_prog_gnu_ld with_gnu_ld=$acl_cv_prog_gnu_ld
]) ])
dnl From libtool-1.4. Sets the variable LD. dnl From libtool-2.4. Sets the variable LD.
AC_DEFUN([AC_LIB_PROG_LD], AC_DEFUN([AC_LIB_PROG_LD],
[AC_ARG_WITH([gnu-ld], [AC_REQUIRE([AC_PROG_CC])dnl
[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_ARG_WITH([gnu-ld],
[AS_HELP_STRING([--with-gnu-ld],
[assume the C compiler uses GNU ld [default=no]])],
[test "$withval" = no || with_gnu_ld=yes],
[with_gnu_ld=no])dnl
# Prepare PATH_SEPARATOR. # Prepare PATH_SEPARATOR.
# The user is always right. # The user is always right.
if test "${PATH_SEPARATOR+set}" != set; then if test "${PATH_SEPARATOR+set}" != set; then
@ -40,10 +46,11 @@ if test "${PATH_SEPARATOR+set}" != set; then
|| PATH_SEPARATOR=';' || PATH_SEPARATOR=';'
} }
fi fi
ac_prog=ld ac_prog=ld
if test "$GCC" = yes; then if test "$GCC" = yes; then
# Check if gcc -print-prog-name=ld gives a path. # Check if gcc -print-prog-name=ld gives a path.
AC_MSG_CHECKING([for ld used by GCC]) AC_MSG_CHECKING([for ld used by $CC])
case $host in case $host in
*-*-mingw*) *-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw # gcc leaves a trailing carriage return which upsets mingw
@ -53,11 +60,11 @@ if test "$GCC" = yes; then
esac esac
case $ac_prog in case $ac_prog in
# Accept absolute paths. # Accept absolute paths.
[[\\/]* | [A-Za-z]:[\\/]*)] [[\\/]]* | ?:[[\\/]]*)
[re_direlt='/[^/][^/]*/\.\./'] re_direlt='/[[^/]][[^/]]*/\.\./'
# Canonicalize the path of ld # Canonicalize the pathname of ld
ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'`
while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do
ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
done done
test -z "$LD" && LD="$ac_prog" test -z "$LD" && LD="$ac_prog"
@ -78,23 +85,26 @@ else
fi fi
AC_CACHE_VAL([acl_cv_path_LD], AC_CACHE_VAL([acl_cv_path_LD],
[if test -z "$LD"; then [if test -z "$LD"; then
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH; do for ac_dir in $PATH; do
IFS="$acl_save_ifs"
test -z "$ac_dir" && ac_dir=. test -z "$ac_dir" && ac_dir=.
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
acl_cv_path_LD="$ac_dir/$ac_prog" acl_cv_path_LD="$ac_dir/$ac_prog"
# Check to see if the program is GNU ld. I'd rather use --version, # Check to see if the program is GNU ld. I'd rather use --version,
# but apparently some GNU ld's only accept -v. # but apparently some variants of GNU ld only accept -v.
# Break only if it was the GNU/non-GNU ld that we prefer. # Break only if it was the GNU/non-GNU ld that we prefer.
case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in
*GNU* | *'with BFD'*) *GNU* | *'with BFD'*)
test "$with_gnu_ld" != no && break ;; test "$with_gnu_ld" != no && break
;;
*) *)
test "$with_gnu_ld" != yes && break ;; test "$with_gnu_ld" != yes && break
;;
esac esac
fi fi
done done
IFS="$ac_save_ifs" IFS="$acl_save_ifs"
else else
acl_cv_path_LD="$LD" # Let the user override the test with a path. acl_cv_path_LD="$LD" # Let the user override the test with a path.
fi]) fi])

View file

@ -19,7 +19,6 @@ dnl From Paul Eggert.
AC_DEFUN([gl_STAT_TIME], AC_DEFUN([gl_STAT_TIME],
[ [
AC_REQUIRE([AC_C_INLINE])
AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
AC_CHECK_HEADERS_ONCE([sys/time.h]) AC_CHECK_HEADERS_ONCE([sys/time.h])
@ -70,7 +69,6 @@ AC_DEFUN([gl_STAT_TIME],
# #
AC_DEFUN([gl_STAT_BIRTHTIME], AC_DEFUN([gl_STAT_BIRTHTIME],
[ [
AC_REQUIRE([AC_C_INLINE])
AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
AC_CHECK_HEADERS_ONCE([sys/time.h]) AC_CHECK_HEADERS_ONCE([sys/time.h])
AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec], [], AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec], [],

View file

@ -102,6 +102,7 @@ AC_DEFUN([gl_STDLIB_H_DEFAULTS],
REPLACE_MALLOC=0; AC_SUBST([REPLACE_MALLOC]) REPLACE_MALLOC=0; AC_SUBST([REPLACE_MALLOC])
REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC]) REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC])
REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP]) REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP])
REPLACE_PTSNAME=0; AC_SUBST([REPLACE_PTSNAME])
REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R]) REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R])
REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV]) REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV])
REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R]) REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R])

View file

@ -1,4 +1,4 @@
# xsize.m4 serial 4 # xsize.m4 serial 5
dnl Copyright (C) 2003-2004, 2008-2012 Free Software Foundation, Inc. dnl Copyright (C) 2003-2004, 2008-2012 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it, dnl gives unlimited permission to copy and/or distribute it,
@ -8,6 +8,5 @@ AC_DEFUN([gl_XSIZE],
[ [
dnl Prerequisites of lib/xsize.h. dnl Prerequisites of lib/xsize.h.
AC_REQUIRE([gl_SIZE_MAX]) AC_REQUIRE([gl_SIZE_MAX])
AC_REQUIRE([AC_C_INLINE])
AC_CHECK_HEADERS([stdint.h]) AC_CHECK_HEADERS([stdint.h])
]) ])

231
maint.mk
View file

@ -28,6 +28,28 @@ ifneq ($(build_aux),)
set $$(_build-aux) relative to $$(srcdir) instead of $$(build_aux)") set $$(_build-aux) relative to $$(srcdir) instead of $$(build_aux)")
endif endif
# Helper variables.
_empty =
_sp = $(_empty) $(_empty)
# _equal,S1,S2
# ------------
# If S1 == S2, return S1, otherwise the empty string.
_equal = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1)))
# member-check,VARIABLE,VALID-VALUES
# ----------------------------------
# Check that $(VARIABLE) is in the space-separated list of VALID-VALUES, and
# return it. Die otherwise.
member-check = \
$(strip \
$(if $($(1)), \
$(if $(findstring $(_sp),$($(1))), \
$(error invalid $(1): '$($(1))', expected $(2)), \
$(or $(findstring $(_sp)$($(1))$(_sp),$(_sp)$(2)$(_sp)), \
$(error invalid $(1): '$($(1))', expected $(2)))), \
$(error $(1) undefined)))
# Do not save the original name or timestamp in the .tar.gz file. # Do not save the original name or timestamp in the .tar.gz file.
# Use --rsyncable if available. # Use --rsyncable if available.
gzip_rsyncable := \ gzip_rsyncable := \
@ -61,7 +83,7 @@ endif
# (i.e., with no $(srcdir) prefix), this definition is careful to # (i.e., with no $(srcdir) prefix), this definition is careful to
# remove any $(srcdir) prefix, and to restore what it removes. # remove any $(srcdir) prefix, and to restore what it removes.
_sc_excl = \ _sc_excl = \
$(if $(exclude_file_name_regexp--$@),$(exclude_file_name_regexp--$@),^$$) $(or $(exclude_file_name_regexp--$@),^$$)
VC_LIST_EXCEPT = \ VC_LIST_EXCEPT = \
$(VC_LIST) | sed 's|^$(_dot_escaped_srcdir)/||' \ $(VC_LIST) | sed 's|^$(_dot_escaped_srcdir)/||' \
| if test -f $(srcdir)/.x-$@; then grep -vEf $(srcdir)/.x-$@; \ | if test -f $(srcdir)/.x-$@; then grep -vEf $(srcdir)/.x-$@; \
@ -91,19 +113,28 @@ my_distdir = $(PACKAGE)-$(VERSION)
# Old releases are stored here. # Old releases are stored here.
release_archive_dir ?= ../release release_archive_dir ?= ../release
# If RELEASE_TYPE is undefined, but RELEASE is, use its second word.
# But overwrite VERSION.
ifdef RELEASE
VERSION := $(word 1, $(RELEASE))
RELEASE_TYPE ?= $(word 2, $(RELEASE))
endif
# Validate and return $(RELEASE_TYPE), or die.
RELEASE_TYPES = alpha beta stable
release-type = $(call member-check,RELEASE_TYPE,$(RELEASE_TYPES))
# Override gnu_rel_host and url_dir_list in cfg.mk if these are not right. # Override gnu_rel_host and url_dir_list in cfg.mk if these are not right.
# Use alpha.gnu.org for alpha and beta releases. # Use alpha.gnu.org for alpha and beta releases.
# Use ftp.gnu.org for stable releases. # Use ftp.gnu.org for stable releases.
gnu_ftp_host-alpha = alpha.gnu.org gnu_ftp_host-alpha = alpha.gnu.org
gnu_ftp_host-beta = alpha.gnu.org gnu_ftp_host-beta = alpha.gnu.org
gnu_ftp_host-stable = ftp.gnu.org gnu_ftp_host-stable = ftp.gnu.org
gnu_rel_host ?= $(gnu_ftp_host-$(RELEASE_TYPE)) gnu_rel_host ?= $(gnu_ftp_host-$(release-type))
ifeq ($(gnu_rel_host),ftp.gnu.org) url_dir_list ?= $(if $(call _equal,$(gnu_rel_host),ftp.gnu.org), \
url_dir_list ?= http://ftpmirror.gnu.org/$(PACKAGE) http://ftpmirror.gnu.org/$(PACKAGE), \
else ftp://$(gnu_rel_host)/gnu/$(PACKAGE))
url_dir_list ?= ftp://$(gnu_rel_host)/gnu/$(PACKAGE)
endif
# Override this in cfg.mk if you are using a different format in your # Override this in cfg.mk if you are using a different format in your
# NEWS file. # NEWS file.
@ -187,9 +218,11 @@ syntax-check: $(local-check)
# #
# in_vc_files | in_files # in_vc_files | in_files
# #
# grep-E-style regexp denoting the files to check. If no files # grep-E-style regexp selecting the files to check. For in_vc_files,
# are specified the default are all the files that are under # the regexp is used to select matching files from the list of all
# version control. # version-controlled files; for in_files, it's from the names printed
# by "find $(srcdir)". When neither is specified, use all files that
# are under version control.
# #
# containing | non_containing # containing | non_containing
# #
@ -261,7 +294,7 @@ define _sc_search_regexp
: Filter by file name; \ : Filter by file name; \
if test -n "$$in_files"; then \ if test -n "$$in_files"; then \
files=$$(find $(srcdir) | grep -E "$$in_files" \ files=$$(find $(srcdir) | grep -E "$$in_files" \
| grep -Ev '$(exclude_file_name_regexp--$@)'); \ | grep -Ev '$(_sc_excl)'); \
else \ else \
files=$$($(VC_LIST_EXCEPT)); \ files=$$($(VC_LIST_EXCEPT)); \
if test -n "$$in_vc_files"; then \ if test -n "$$in_vc_files"; then \
@ -328,8 +361,8 @@ sc_prohibit_atoi_atof:
sp_ = strcmp *\(.+\) sp_ = strcmp *\(.+\)
sc_prohibit_strcmp: sc_prohibit_strcmp:
@prohibit='! *strcmp *\(|\<$(sp_) *[!=]=|[!=]= *$(sp_)' \ @prohibit='! *strcmp *\(|\<$(sp_) *[!=]=|[!=]= *$(sp_)' \
exclude=':# *define STRN?EQ\(' \ exclude='# *define STRN?EQ\(' \
halt='$(ME): replace strcmp calls above with STREQ/STRNEQ' \ halt='replace strcmp calls above with STREQ/STRNEQ' \
$(_sc_search_regexp) $(_sc_search_regexp)
# Really. You don't want to use this function. # Really. You don't want to use this function.
@ -351,7 +384,8 @@ sc_prohibit_strncpy:
# | xargs --no-run-if-empty \ # | xargs --no-run-if-empty \
# perl -pi -e 's/(^|[^.])\b(exit ?)\(0\)/$1$2(EXIT_SUCCESS)/' # perl -pi -e 's/(^|[^.])\b(exit ?)\(0\)/$1$2(EXIT_SUCCESS)/'
sc_prohibit_magic_number_exit: sc_prohibit_magic_number_exit:
@prohibit='(^|[^.])\<(usage|exit) ?\([0-9]|\<error ?\([1-9][0-9]*,' \ @prohibit='(^|[^.])\<(usage|exit|error) ?\(-?[0-9]+[,)]' \
exclude='exit \(77\)|error ?\(((0|77),|[^,]*)' \
halt='use EXIT_* values rather than magic number' \ halt='use EXIT_* values rather than magic number' \
$(_sc_search_regexp) $(_sc_search_regexp)
@ -567,8 +601,6 @@ sc_prohibit_c_ctype_without_use:
@h='c-ctype.h' re='\<c_($(ctype_re)) *\(' \ @h='c-ctype.h' re='\<c_($(ctype_re)) *\(' \
$(_sc_header_without_use) $(_sc_header_without_use)
_empty =
_sp = $(_empty) $(_empty)
# The following list was generated by running: # The following list was generated by running:
# man signal.h|col -b|perl -ne '/bsd_signal.*;/.../sigwaitinfo.*;/ and print' \ # man signal.h|col -b|perl -ne '/bsd_signal.*;/.../sigwaitinfo.*;/ and print' \
# | perl -lne '/^\s+(?:int|void).*?(\w+).*/ and print $1' | fmt # | perl -lne '/^\s+(?:int|void).*?(\w+).*/ and print $1' | fmt
@ -721,6 +753,7 @@ sc_require_test_exit_idiom:
sc_trailing_blank: sc_trailing_blank:
@prohibit='[ ]$$' \ @prohibit='[ ]$$' \
halt='found trailing blank(s)' \ halt='found trailing blank(s)' \
exclude='^Binary file .* matches$$' \
$(_sc_search_regexp) $(_sc_search_regexp)
# Match lines like the following, but where there is only one space # Match lines like the following, but where there is only one space
@ -741,7 +774,7 @@ _gl_translatable_diag_func_re ?= error
sc_unmarked_diagnostics: sc_unmarked_diagnostics:
@prohibit='\<$(_gl_translatable_diag_func_re) *\([^"]*"[^"]*[a-z]{3}' \ @prohibit='\<$(_gl_translatable_diag_func_re) *\([^"]*"[^"]*[a-z]{3}' \
exclude='(_|ngettext ?)\(' \ exclude='(_|ngettext ?)\(' \
halt='$(ME): found unmarked diagnostic(s)' \ halt='found unmarked diagnostic(s)' \
$(_sc_search_regexp) $(_sc_search_regexp)
# Avoid useless parentheses like those in this example: # Avoid useless parentheses like those in this example:
@ -775,6 +808,11 @@ sc_prohibit_always_true_header_tests:
' with the corresponding gnulib module, they are always true') \ ' with the corresponding gnulib module, they are always true') \
$(_sc_search_regexp) $(_sc_search_regexp)
sc_prohibit_defined_have_decl_tests:
@prohibit='#[ ]*if(n?def|.*\<defined)\>[ (]+HAVE_DECL_' \
halt='HAVE_DECL macros are always defined' \
$(_sc_search_regexp)
# ================================================================== # ==================================================================
gl_other_headers_ ?= \ gl_other_headers_ ?= \
intprops.h \ intprops.h \
@ -1012,7 +1050,7 @@ sc_redundant_const:
sc_const_long_option: sc_const_long_option:
@prohibit='^ *static.*struct option ' \ @prohibit='^ *static.*struct option ' \
exclude='const struct option|struct option const' \ exclude='const struct option|struct option const' \
halt='$(ME): add "const" to the above declarations' \ halt='add "const" to the above declarations' \
$(_sc_search_regexp) $(_sc_search_regexp)
NEWS_hash = \ NEWS_hash = \
@ -1059,7 +1097,7 @@ sc_makefile_at_at_check:
&& { echo '$(ME): use $$(...), not @...@' 1>&2; exit 1; } || : && { echo '$(ME): use $$(...), not @...@' 1>&2; exit 1; } || :
news-check: NEWS news-check: NEWS
if sed -n $(news-check-lines-spec)p $< \ $(AM_V_GEN)if sed -n $(news-check-lines-spec)p $< \
| grep -E $(news-check-regexp) >/dev/null; then \ | grep -E $(news-check-regexp) >/dev/null; then \
:; \ :; \
else \ else \
@ -1083,9 +1121,11 @@ fix_po_file_diag = \
'you have changed the set of files with translatable diagnostics;\n\ 'you have changed the set of files with translatable diagnostics;\n\
apply the above patch\n' apply the above patch\n'
# Verify that all source files using _() are listed in po/POTFILES.in. # Verify that all source files using _() (more specifically, files that
# match $(_gl_translatable_string_re)) are listed in po/POTFILES.in.
po_file ?= $(srcdir)/po/POTFILES.in po_file ?= $(srcdir)/po/POTFILES.in
generated_files ?= $(srcdir)/lib/*.[ch] generated_files ?= $(srcdir)/lib/*.[ch]
_gl_translatable_string_re ?= \b(N?_|gettext *)\([^)"]*("|$$)
sc_po_check: sc_po_check:
@if test -f $(po_file); then \ @if test -f $(po_file); then \
grep -E -v '^(#|$$)' $(po_file) \ grep -E -v '^(#|$$)' $(po_file) \
@ -1105,7 +1145,7 @@ sc_po_check:
esac; \ esac; \
files="$$files $$file"; \ files="$$files $$file"; \
done; \ done; \
grep -E -l '\b(N?_|gettext *)\([^)"]*("|$$)' $$files \ grep -E -l '$(_gl_translatable_string_re)' $$files \
| sed 's|^$(_dot_escaped_srcdir)/||' | sort -u > $@-2; \ | sed 's|^$(_dot_escaped_srcdir)/||' | sort -u > $@-2; \
diff -u -L $(po_file) -L $(po_file) $@-1 $@-2 \ diff -u -L $(po_file) -L $(po_file) $@-1 $@-2 \
|| { printf '$(ME): '$(fix_po_file_diag) 1>&2; exit 1; }; \ || { printf '$(ME): '$(fix_po_file_diag) 1>&2; exit 1; }; \
@ -1115,7 +1155,7 @@ sc_po_check:
# Sometimes it is useful to change the PATH environment variable # Sometimes it is useful to change the PATH environment variable
# in Makefiles. When doing so, it's better not to use the Unix-centric # in Makefiles. When doing so, it's better not to use the Unix-centric
# path separator of ':', but rather the automake-provided '$(PATH_SEPARATOR)'. # path separator of ':', but rather the automake-provided '$(PATH_SEPARATOR)'.
msg = '$(ME): Do not use ":" above; use $$(PATH_SEPARATOR) instead' msg = 'Do not use ":" above; use $$(PATH_SEPARATOR) instead'
sc_makefile_path_separator_check: sc_makefile_path_separator_check:
@prohibit='PATH[=].*:' \ @prohibit='PATH[=].*:' \
in_vc_files='akefile|\.mk$$' \ in_vc_files='akefile|\.mk$$' \
@ -1126,7 +1166,7 @@ sc_makefile_path_separator_check:
# i.e., when pkg-M.N.tar.xz already exists (either in "." or in ../release) # i.e., when pkg-M.N.tar.xz already exists (either in "." or in ../release)
# and is read-only. # and is read-only.
writable-files: writable-files:
if test -d $(release_archive_dir); then \ $(AM_V_GEN)if test -d $(release_archive_dir); then \
for file in $(DIST_ARCHIVES); do \ for file in $(DIST_ARCHIVES); do \
for p in ./ $(release_archive_dir)/; do \ for p in ./ $(release_archive_dir)/; do \
test -e $$p$$file || continue; \ test -e $$p$$file || continue; \
@ -1208,22 +1248,31 @@ sc_Wundef_boolean:
# not be constant, or might overflow a stack. In general, use PATH_MAX as # not be constant, or might overflow a stack. In general, use PATH_MAX as
# a limit, not an array or alloca size. # a limit, not an array or alloca size.
sc_prohibit_path_max_allocation: sc_prohibit_path_max_allocation:
@prohibit='(\balloca *\([^)]*|\[[^]]*)PATH_MAX' \ @prohibit='(\balloca *\([^)]*|\[[^]]*)\bPATH_MAX' \
halt='Avoid stack allocations of size PATH_MAX' \ halt='Avoid stack allocations of size PATH_MAX' \
$(_sc_search_regexp) $(_sc_search_regexp)
sc_vulnerable_makefile_CVE-2009-4029: sc_vulnerable_makefile_CVE-2009-4029:
@prohibit='perm -777 -exec chmod a\+rwx|chmod 777 \$$\(distdir\)' \ @prohibit='perm -777 -exec chmod a\+rwx|chmod 777 \$$\(distdir\)' \
in_files=$$(find $(srcdir) -name Makefile.in) \ in_files='(^|/)Makefile\.in$$' \
halt=$$(printf '%s\n' \ halt=$$(printf '%s\n' \
'the above files are vulnerable; beware of running' \ 'the above files are vulnerable; beware of running' \
' "make dist*" rules, and upgrade to fixed automake' \ ' "make dist*" rules, and upgrade to fixed automake' \
' see http://bugzilla.redhat.com/542609 for details') \ ' see http://bugzilla.redhat.com/542609 for details') \
$(_sc_search_regexp) $(_sc_search_regexp)
sc_vulnerable_makefile_CVE-2012-3386:
@prohibit='chmod a\+w \$$\(distdir\)' \
in_files='(^|/)Makefile\.in$$' \
halt=$$(printf '%s\n' \
'the above files are vulnerable; beware of running' \
' "make distcheck", and upgrade to fixed automake' \
' see http://bugzilla.redhat.com/CVE-2012-3386 for details') \
$(_sc_search_regexp)
vc-diff-check: vc-diff-check:
(unset CDPATH; cd $(srcdir) && $(VC) diff) > vc-diffs || : $(AM_V_GEN)(unset CDPATH; cd $(srcdir) && $(VC) diff) > vc-diffs || :
if test -s vc-diffs; then \ $(AM_V_at)if test -s vc-diffs; then \
cat vc-diffs; \ cat vc-diffs; \
echo "Some files are locally modified:" 1>&2; \ echo "Some files are locally modified:" 1>&2; \
exit 1; \ exit 1; \
@ -1240,30 +1289,36 @@ bootstrap-tools ?= autoconf,automake,gnulib
# If it's not already specified, derive the GPG key ID from # If it's not already specified, derive the GPG key ID from
# the signed tag we've just applied to mark this release. # the signed tag we've just applied to mark this release.
gpg_key_ID ?= \ gpg_key_ID ?= \
$$(git cat-file tag v$(VERSION) \ $$(cd $(srcdir) \
&& git cat-file tag v$(VERSION) \
| gpgv --status-fd 1 --keyring /dev/null - - 2>/dev/null \ | gpgv --status-fd 1 --keyring /dev/null - - 2>/dev/null \
| awk '/^\[GNUPG:\] ERRSIG / {print $$3; exit}') | awk '/^\[GNUPG:\] ERRSIG / {print $$3; exit}')
translation_project_ ?= coordinator@translationproject.org translation_project_ ?= coordinator@translationproject.org
# Make info-gnu the default only for a stable release. # Make info-gnu the default only for a stable release.
ifeq ($(RELEASE_TYPE),stable) announcement_Cc_stable = $(translation_project_), $(PACKAGE_BUGREPORT)
announcement_Cc_ ?= $(translation_project_), $(PACKAGE_BUGREPORT) announcement_mail_headers_stable = \
announcement_mail_headers_ ?= \
To: info-gnu@gnu.org \ To: info-gnu@gnu.org \
Cc: $(announcement_Cc_) \ Cc: $(announcement_Cc_) \
Mail-Followup-To: $(PACKAGE_BUGREPORT) Mail-Followup-To: $(PACKAGE_BUGREPORT)
else
announcement_Cc_ ?= $(translation_project_) announcement_Cc_alpha = $(translation_project_)
announcement_mail_headers_ ?= \ announcement_mail_headers_alpha = \
To: $(PACKAGE_BUGREPORT) \ To: $(PACKAGE_BUGREPORT) \
Cc: $(announcement_Cc_) Cc: $(announcement_Cc_)
endif
announcement_mail_Cc_beta = $(announcement_mail_Cc_alpha)
announcement_mail_headers_beta = $(announcement_mail_headers_alpha)
announcement_mail_Cc_ ?= $(announcement_mail_Cc_$(release-type))
announcement_mail_headers_ ?= $(announcement_mail_headers_$(release-type))
announcement: NEWS ChangeLog $(rel-files) announcement: NEWS ChangeLog $(rel-files)
@$(srcdir)/$(_build-aux)/announce-gen \ # Not $(AM_V_GEN) since the output of this command serves as
# annoucement message: it would start with " GEN announcement".
$(AM_V_at)$(srcdir)/$(_build-aux)/announce-gen \
--mail-headers='$(announcement_mail_headers_)' \ --mail-headers='$(announcement_mail_headers_)' \
--release-type=$(RELEASE_TYPE) \ --release-type=$(release-type) \
--package=$(PACKAGE) \ --package=$(PACKAGE) \
--prev=$(PREV_VERSION) \ --prev=$(PREV_VERSION) \
--curr=$(VERSION) \ --curr=$(VERSION) \
@ -1276,6 +1331,12 @@ announcement: NEWS ChangeLog $(rel-files)
--no-print-checksums \ --no-print-checksums \
$(addprefix --url-dir=, $(url_dir_list)) $(addprefix --url-dir=, $(url_dir_list))
.PHONY: release-commit
release-commit:
$(AM_V_GEN)cd $(srcdir) \
&& $(_build-aux)/do-release-commit-and-tag \
-C $(abs_builddir) $(RELEASE)
## ---------------- ## ## ---------------- ##
## Updating files. ## ## Updating files. ##
## ---------------- ## ## ---------------- ##
@ -1284,16 +1345,22 @@ ftp-gnu = ftp://ftp.gnu.org/gnu
www-gnu = http://www.gnu.org www-gnu = http://www.gnu.org
upload_dest_dir_ ?= $(PACKAGE) upload_dest_dir_ ?= $(PACKAGE)
upload_command = \
$(srcdir)/$(_build-aux)/gnupload $(GNUPLOADFLAGS) \
--to $(gnu_rel_host):$(upload_dest_dir_) \
$(rel-files)
emit_upload_commands: emit_upload_commands:
@echo ===================================== @echo =====================================
@echo ===================================== @echo =====================================
@echo "$(srcdir)/$(_build-aux)/gnupload $(GNUPLOADFLAGS) \\" @echo '$(upload_command)'
@echo " --to $(gnu_rel_host):$(upload_dest_dir_) \\"
@echo " $(rel-files)"
@echo '# send the ~/announce-$(my_distdir) e-mail' @echo '# send the ~/announce-$(my_distdir) e-mail'
@echo ===================================== @echo =====================================
@echo ===================================== @echo =====================================
.PHONY: upload
upload:
$(AM_V_GEN)$(upload_command)
define emit-commit-log define emit-commit-log
printf '%s\n' 'maint: post-release administrivia' '' \ printf '%s\n' 'maint: post-release administrivia' '' \
'* NEWS: Add header line for next release.' \ '* NEWS: Add header line for next release.' \
@ -1303,7 +1370,7 @@ endef
.PHONY: no-submodule-changes .PHONY: no-submodule-changes
no-submodule-changes: no-submodule-changes:
if test -d $(srcdir)/.git; then \ $(AM_V_GEN)if test -d $(srcdir)/.git; then \
diff=$$(cd $(srcdir) && git submodule -q foreach \ diff=$$(cd $(srcdir) && git submodule -q foreach \
git diff-index --name-only HEAD) \ git diff-index --name-only HEAD) \
|| exit 1; \ || exit 1; \
@ -1339,19 +1406,22 @@ public-submodule-commit:
gl_public_submodule_commit ?= public-submodule-commit gl_public_submodule_commit ?= public-submodule-commit
check: $(gl_public_submodule_commit) check: $(gl_public_submodule_commit)
.PHONY: alpha beta stable .PHONY: alpha beta stable release
ALL_RECURSIVE_TARGETS += alpha beta stable ALL_RECURSIVE_TARGETS += alpha beta stable
alpha beta stable: $(local-check) writable-files $(submodule-checks) alpha beta stable: $(local-check) writable-files $(submodule-checks)
test $@ = stable \ $(AM_V_GEN)test $@ = stable \
&& { echo $(VERSION) | grep -E '^[0-9]+(\.[0-9]+)+$$' \ && { echo $(VERSION) | grep -E '^[0-9]+(\.[0-9]+)+$$' \
|| { echo "invalid version string: $(VERSION)" 1>&2; exit 1;};}\ || { echo "invalid version string: $(VERSION)" 1>&2; exit 1;};}\
|| : || :
$(MAKE) vc-diff-check $(AM_V_at)$(MAKE) vc-diff-check
$(MAKE) news-check $(AM_V_at)$(MAKE) news-check
$(MAKE) distcheck $(AM_V_at)$(MAKE) distcheck
$(MAKE) dist $(AM_V_at)$(MAKE) dist
$(MAKE) $(release-prep-hook) RELEASE_TYPE=$@ $(AM_V_at)$(MAKE) $(release-prep-hook) RELEASE_TYPE=$@
$(MAKE) -s emit_upload_commands RELEASE_TYPE=$@ $(AM_V_at)$(MAKE) -s emit_upload_commands RELEASE_TYPE=$@
release:
$(AM_V_GEN)$(MAKE) $(release-type)
# Override this in cfg.mk if you follow different procedures. # Override this in cfg.mk if you follow different procedures.
release-prep-hook ?= release-prep release-prep-hook ?= release-prep
@ -1359,19 +1429,19 @@ release-prep-hook ?= release-prep
gl_noteworthy_news_ = * Noteworthy changes in release ?.? (????-??-??) [?] gl_noteworthy_news_ = * Noteworthy changes in release ?.? (????-??-??) [?]
.PHONY: release-prep .PHONY: release-prep
release-prep: release-prep:
case $$RELEASE_TYPE in alpha|beta|stable) ;; \ $(AM_V_GEN)$(MAKE) --no-print-directory -s announcement \
*) echo "invalid RELEASE_TYPE: $$RELEASE_TYPE" 1>&2; exit 1;; esac > ~/announce-$(my_distdir)
$(MAKE) --no-print-directory -s announcement > ~/announce-$(my_distdir) $(AM_V_at)if test -d $(release_archive_dir); then \
if test -d $(release_archive_dir); then \
ln $(rel-files) $(release_archive_dir); \ ln $(rel-files) $(release_archive_dir); \
chmod a-w $(rel-files); \ chmod a-w $(rel-files); \
fi fi
echo $(VERSION) > $(prev_version_file) $(AM_V_at)echo $(VERSION) > $(prev_version_file)
$(MAKE) update-NEWS-hash $(AM_V_at)$(MAKE) update-NEWS-hash
perl -pi -e '$$. == 3 and print "$(gl_noteworthy_news_)\n\n\n"' $(srcdir)/NEWS $(AM_V_at)perl -pi \
$(emit-commit-log) > .ci-msg -e '$$. == 3 and print "$(gl_noteworthy_news_)\n\n\n"' \
$(VC) commit -F .ci-msg -a $(srcdir)/NEWS
rm .ci-msg $(AM_V_at)msg=$$($(emit-commit-log)) || exit 1; \
cd $(srcdir) && $(VC) commit -m "$$msg" -a
# Override this with e.g., -s $(srcdir)/some_other_name.texi # Override this with e.g., -s $(srcdir)/some_other_name.texi
# if the default $(PACKAGE)-derived name doesn't apply. # if the default $(PACKAGE)-derived name doesn't apply.
@ -1379,14 +1449,20 @@ gendocs_options_ ?=
.PHONY: web-manual .PHONY: web-manual
web-manual: web-manual:
@test -z "$(manual_title)" \ $(AM_V_GEN)test -z "$(manual_title)" \
&& { echo define manual_title in cfg.mk 1>&2; exit 1; } || : && { echo define manual_title in cfg.mk 1>&2; exit 1; } || :
@cd '$(srcdir)/doc'; \ $(AM_V_at)cd '$(srcdir)/doc'; \
$(SHELL) ../$(_build-aux)/gendocs.sh $(gendocs_options_) \ $(SHELL) ../$(_build-aux)/gendocs.sh $(gendocs_options_) \
-o '$(abs_builddir)/doc/manual' \ -o '$(abs_builddir)/doc/manual' \
--email $(PACKAGE_BUGREPORT) $(PACKAGE) \ --email $(PACKAGE_BUGREPORT) $(PACKAGE) \
"$(PACKAGE_NAME) - $(manual_title)" "$(PACKAGE_NAME) - $(manual_title)"
@echo " *** Upload the doc/manual directory to web-cvs." $(AM_V_at)echo " *** Upload the doc/manual directory to web-cvs."
.PHONY: web-manual-update
web-manual-update:
$(AM_V_GEN)cd $(srcdir) \
&& $(_build-aux)/gnu-web-doc-update -C $(abs_builddir)
# Code Coverage # Code Coverage
@ -1412,6 +1488,31 @@ gen-coverage:
coverage: init-coverage build-coverage gen-coverage coverage: init-coverage build-coverage gen-coverage
# Some projects carry local adjustments for gnulib modules via patches in
# a gnulib patch directory whose default name is gl/ (defined in bootstrap
# via local_gl_dir=gl). Those patches become stale as the originals evolve
# in gnulib. Use this rule to refresh any stale patches. It applies each
# patch to the original in $(gnulib_dir) and uses the temporary result to
# generate a fuzz-free .diff file. If you customize the name of your local
# gnulib patch directory via bootstrap.conf, this rule detects that name.
# Run this from a non-VPATH (i.e., srcdir) build directory.
.PHONY: refresh-gnulib-patches
refresh-gnulib-patches:
gl=gl; \
if test -f bootstrap.conf; then \
t=$$(perl -lne '/^\s*local_gl_dir=(\S+)/ and $$d=$$1;' \
-e 'END{defined $$d and print $$d}' bootstrap.conf); \
test -n "$$t" && gl=$$t; \
fi; \
for diff in $$(cd $$gl; git ls-files | grep '\.diff$$'); do \
b=$$(printf %s "$$diff"|sed 's/\.diff$$//'); \
VERSION_CONTROL=none \
patch "$(gnulib_dir)/$$b" "$$gl/$$diff" || exit 1; \
( cd $(gnulib_dir) || exit 1; \
git diff "$$b" > "../$$gl/$$diff"; \
git checkout $$b ) || exit 1; \
done
# Update gettext files. # Update gettext files.
PACKAGE ?= $(shell basename $(PWD)) PACKAGE ?= $(shell basename $(PWD))
PO_DOMAIN ?= $(PACKAGE) PO_DOMAIN ?= $(PACKAGE)
@ -1445,7 +1546,7 @@ update-copyright-env ?=
# in the file .x-update-copyright. # in the file .x-update-copyright.
.PHONY: update-copyright .PHONY: update-copyright
update-copyright: update-copyright:
grep -l -w Copyright \ $(AM_V_GEN)grep -l -w Copyright \
$$(export VC_LIST_EXCEPT_DEFAULT=COPYING && $(VC_LIST_EXCEPT)) \ $$(export VC_LIST_EXCEPT_DEFAULT=COPYING && $(VC_LIST_EXCEPT)) \
| $(update-copyright-env) xargs $(srcdir)/$(_build-aux)/$@ | $(update-copyright-env) xargs $(srcdir)/$(_build-aux)/$@
@ -1518,6 +1619,7 @@ _gl_TS_obj_files ?= *.$(OBJEXT)
# Files in which to search for the one-line style extern declarations. # Files in which to search for the one-line style extern declarations.
# $(_gl_TS_dir)-relative. # $(_gl_TS_dir)-relative.
_gl_TS_headers ?= $(noinst_HEADERS) _gl_TS_headers ?= $(noinst_HEADERS)
_gl_TS_other_headers ?= *.h
.PHONY: _gl_tight_scope .PHONY: _gl_tight_scope
_gl_tight_scope: $(bin_PROGRAMS) _gl_tight_scope: $(bin_PROGRAMS)
@ -1540,7 +1642,8 @@ _gl_tight_scope: $(bin_PROGRAMS)
&& { echo the above functions should have static scope >&2; \ && { echo the above functions should have static scope >&2; \
exit 1; } || : ; \ exit 1; } || : ; \
( printf '^%s$$\n' '__.*' $(_gl_TS_unmarked_extern_vars); \ ( printf '^%s$$\n' '__.*' $(_gl_TS_unmarked_extern_vars); \
perl -lne '$(_gl_TS_var_match) and print "^$$1\$$"' $$hdr *.h \ perl -lne '$(_gl_TS_var_match) and print "^$$1\$$"' \
$$hdr $(_gl_TS_other_headers) \
) | sort -u > $$t; \ ) | sort -u > $$t; \
nm -e $(_gl_TS_obj_files) | sed -n 's/.* [BCDGRS] //p' \ nm -e $(_gl_TS_obj_files) | sed -n 's/.* [BCDGRS] //p' \
| sort -u | grep -Ev -f $$t \ | sort -u | grep -Ev -f $$t \