191 lines
5.1 KiB
Bash
191 lines
5.1 KiB
Bash
#! /bin/sh
|
|
# Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2, or (at your option)
|
|
# any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
# Checks on the 'install-info' target.
|
|
# Details about the individual checks' purposes and motivations are
|
|
# inlined, below.
|
|
|
|
# FIXME: this test is a good candidate for a conversion to TAP,
|
|
# FIXME: and could be merged with 'txinfo27.sh'.
|
|
|
|
required=makeinfo
|
|
. test-init.sh
|
|
|
|
cwd=$(pwd) || fatal_ "cannot get current working directory"
|
|
|
|
mkdir bin
|
|
saved_PATH=$PATH; export saved_PATH
|
|
PATH=$cwd/bin$PATH_SEPARATOR$PATH; export PATH
|
|
|
|
cat >> configure.ac <<'END'
|
|
AC_OUTPUT
|
|
END
|
|
|
|
cat > Makefile.am << 'END'
|
|
info_TEXINFOS = foo.texi
|
|
END
|
|
|
|
cat > foo.texi << 'END'
|
|
\input texinfo
|
|
@setfilename foo.info
|
|
@c All the following directives might be required to allow older
|
|
@c versions of the 'install-info' program (e.g., version 4.8) to
|
|
@c create the 'dir' index file in ${infodir}. Don't remove them.
|
|
@settitle foo
|
|
@dircategory Dummy utilities
|
|
@direntry
|
|
* Foo: (foo). Does nothing at all, but has a nice name.
|
|
@end direntry
|
|
@node Top
|
|
Hello world!
|
|
@bye
|
|
END
|
|
|
|
$ACLOCAL
|
|
$AUTOMAKE -a
|
|
$AUTOCONF
|
|
|
|
instdir=_inst
|
|
destdir=_dest
|
|
|
|
./configure --prefix="$cwd/$instdir" --infodir="$cwd/$instdir/info"
|
|
|
|
$MAKE info
|
|
test -f foo.info
|
|
|
|
if install-info --version; then
|
|
# Skip some checks even if 'install-info' is the one from dpkg, not
|
|
# the one from GNU info, as the former might try to create files in
|
|
# '/var/backups/', causing spurious failures like this for non-root
|
|
# users.
|
|
if install-info --version | $EGREP -i '(dpkg|debian) install-info'; then
|
|
have_installinfo=no
|
|
else
|
|
have_installinfo=yes
|
|
fi
|
|
else
|
|
have_installinfo=no
|
|
fi
|
|
|
|
# The 'install-info' target updates the '${infodir}/dir' file
|
|
# by default (if the 'install-info' program is available).
|
|
# This should happen in a normal as well as in a DESTDIR installation.
|
|
if test $have_installinfo = yes; then
|
|
|
|
$MAKE install-info
|
|
test -f $instdir/info/foo.info
|
|
cat $instdir/info/dir
|
|
$FGREP 'Does nothing at all, but has a nice name' $instdir/info/dir
|
|
|
|
$MAKE uninstall
|
|
test ! -e $instdir/info/foo.info
|
|
cat $instdir/info/dir
|
|
$FGREP 'but has a nice name' $instdir/info/dir && exit 1
|
|
|
|
dir="$destdir/$cwd/$instdir/info"
|
|
|
|
$MAKE DESTDIR="$cwd/$destdir" install-info
|
|
test -f "$dir"/foo.info
|
|
cat "$dir"/dir
|
|
$FGREP 'Does nothing at all, but has a nice name' "$dir"/dir
|
|
$MAKE DESTDIR="$cwd/$destdir" uninstall
|
|
test ! -e "$dir"/foo.info
|
|
$FGREP 'but has a nice name' "$dir"/dir && exit 1
|
|
|
|
unset dir
|
|
|
|
fi
|
|
|
|
rm -rf $instdir $destdir
|
|
|
|
# The 'install-info' target doesn't fail if the 'install-info'
|
|
# program is not available.
|
|
cat > bin/install-info <<'END'
|
|
#!/bin/sh
|
|
echo error from install-info >&2
|
|
exit 127
|
|
END
|
|
chmod a+x bin/install-info
|
|
run_make -M install-info
|
|
test -f $instdir/info/foo.info
|
|
test ! -e $instdir/info/dir
|
|
grep 'error from install-info' output && exit 1
|
|
|
|
rm -rf $instdir output
|
|
|
|
if test $have_installinfo = yes; then
|
|
# The 'install-info' target doesn't try to guess whether the 'install-info'
|
|
# is the GNU or debian version.
|
|
unindent > bin/install-info <<'END'
|
|
#!/bin/sh
|
|
set -e; set -u;
|
|
for fd in 1 2; do
|
|
for str in dpkg debian Debian; do
|
|
eval "echo This is $str install-info >&$fd"
|
|
done
|
|
done
|
|
PATH=$saved_PATH; export PATH
|
|
exec install-info ${1+"$@"}
|
|
END
|
|
$MAKE install-info
|
|
test -f $instdir/info/foo.info
|
|
cat $instdir/info/dir
|
|
$MAKE uninstall
|
|
test ! -e $instdir/info/foo.info
|
|
cat $instdir/info/dir
|
|
$FGREP 'but has a nice name' $instdir/info/dir && exit 1
|
|
: For shells with busted 'set -e'.
|
|
fi
|
|
|
|
rm -rf $instdir bin/install-info
|
|
|
|
# The 'AM_UPDATE_INFO_DIR' environment variable can be used to
|
|
# prevent the creation or update of the '${infodir}/dir' file,
|
|
# if set to a "no" value.
|
|
for val in no NO n; do
|
|
rm -rf $instdir
|
|
env AM_UPDATE_INFO_DIR="$val" $MAKE install-info
|
|
test -f $instdir/info/foo.info
|
|
test ! -e $instdir/info/dir
|
|
done
|
|
|
|
$MAKE install-info
|
|
if test $have_installinfo != yes; then
|
|
echo 'Does nothing at all, but has a nice name' > $instdir/info/dir
|
|
fi
|
|
|
|
chmod a-w $instdir/info/dir
|
|
for val in no NO n; do
|
|
env AM_UPDATE_INFO_DIR="$val" $MAKE uninstall
|
|
cat $instdir/info/dir
|
|
$FGREP 'Does nothing at all, but has a nice name' $instdir/info/dir
|
|
done
|
|
|
|
if test $have_installinfo = yes; then
|
|
for val in 'yes' 'who cares!'; do
|
|
rm -rf $instdir
|
|
env AM_UPDATE_INFO_DIR="$val" $MAKE install-info
|
|
test -f $instdir/info/foo.info
|
|
cat $instdir/info/dir
|
|
env AM_UPDATE_INFO_DIR="$val" $MAKE uninstall
|
|
test ! -e $instdir/info/foo.info
|
|
$FGREP 'but has a nice name' $instdir/info/dir && exit 1
|
|
: For shells with busted 'set -e'.
|
|
done
|
|
fi
|
|
|
|
:
|