#! /bin/sh # Copyright (C) 2011-2023 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 . # 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 :