blob: 6867daefd7e54c4cc801438d6a80cdd63e948c0f [file] [log] [blame]
#! /bin/sh
# Copyright (C) 2011-2018 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 <https://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
: