diff options
Diffstat (limited to 't/install-info-dir.sh')
-rw-r--r-- | t/install-info-dir.sh | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/t/install-info-dir.sh b/t/install-info-dir.sh new file mode 100644 index 000000000..f112e4281 --- /dev/null +++ b/t/install-info-dir.sh @@ -0,0 +1,190 @@ +#! /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 <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 + +: |