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:
parent
44cd55752a
commit
7ae4e75af5
34 changed files with 1116 additions and 796 deletions
|
@ -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
|
||||||
|
|
|
@ -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" \
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
|
@ -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
3
lib/binary-io.c
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include <config.h>
|
||||||
|
#define BINARY_IO_INLINE _GL_EXTERN_INLINE
|
||||||
|
#include "binary-io.h"
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
3
lib/stat-time.c
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include <config.h>
|
||||||
|
#define _GL_STAT_TIME_INLINE _GL_EXTERN_INLINE
|
||||||
|
#include "stat-time.h"
|
|
@ -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
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
3
lib/xsize.c
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include <config.h>
|
||||||
|
#define XSIZE_INLINE _GL_EXTERN_INLINE
|
||||||
|
#include "xsize.h"
|
17
lib/xsize.h
17
lib/xsize.h
|
@ -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 */
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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],
|
||||||
|
|
|
@ -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
57
m4/extern-inline.m4
Normal 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])
|
||||||
|
])
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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])
|
||||||
|
|
|
@ -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
|
||||||
|
|
56
m4/lib-ld.m4
56
m4/lib-ld.m4
|
@ -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])
|
||||||
|
|
|
@ -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], [],
|
||||||
|
|
|
@ -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])
|
||||||
|
|
|
@ -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
231
maint.mk
|
@ -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 \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue