summaryrefslogtreecommitdiff
path: root/t/man4.sh
blob: c8fd86d6e9bb60ff89b184421fbfff7a7f340708 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#! /bin/sh
# Copyright (C) 2008-2012 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/>.

# Ensure 'make dist' fails when help2man replacement man pages are created.
#
# The assumption here is the following: if the developer uses help2man to
# generate man pages from --help output, then these man pages may not be
# stored in VCS.  However, they should be distributed, so that the end user
# that receives the tarball doesn't have to install help2man.  If they are
# not distributed, then the developer should make help2man a prerequisite
# to building the package from a tarball, e.g., with a configure check for
# help2man that errors out if it is unavailable.  In both cases it is
# sufficient to check only distributed man pages.
#
# Idea of this whole shenanigan is to allow somebody to check out sources from
# a VCS and build and install them without needing help2man installed.  The
# installed man pages will be bogus in this case.  Typically, this happens
# when developers ask users to try out a fix from VCS; the developers themselves
# will usually have help2man installed (or should install it).

. ./defs || Exit 1

cat > Makefile.am << 'END'
dist_man_MANS = $(srcdir)/foo.1 bar.1
dist_bin_SCRIPTS = foo bar
$(srcdir)/foo.1:
	$(HELP2MAN) --output=$@ $(srcdir)/foo
bar.1:
	$(HELP2MAN) --output=$(srcdir)/bar.1 $(srcdir)/bar
END

cat >>configure.ac <<'END'
AM_MISSING_PROG([HELP2MAN], [help2man])
AC_OUTPUT
END

cat > foo <<'END'
#! /bin/sh
while test $# -gt 0; do
  case $1 in
    -h | --help) echo "usage: $0 [OPTIONS]..."; exit 0;;
    -v | --version) echo "$0 1.0"; exit 0;;
  esac
  shift
done
END
cp foo bar
chmod +x foo bar

mkdir bin
cat > bin/help2man <<'END'
#! /bin/sh
# Fake help2man script that lets 'missing' think it is not installed.
exit 127
END
chmod +x bin/help2man
PATH=$(pwd)/bin$PATH_SEPARATOR$PATH

grep_error_messages()
{
  grep ' man pages contain.*missing help2man.* replacement text' stderr \
   && grep 'install help2man' stderr \
   && grep 'regenerate the man pages' stderr \
   || Exit 1
}

$ACLOCAL
$AUTOMAKE
$AUTOCONF

./configure
$MAKE
$MAKE dist 2>stderr && { cat stderr >&2; Exit 1; }
cat stderr >&2
grep_error_messages
$MAKE distcheck 2>stderr && { cat stderr >&2; Exit 1; }
cat stderr >&2
grep_error_messages
$MAKE distclean

mkdir build
cd build
../configure
$MAKE
$MAKE dist 2>stderr && { cat stderr >&2; Exit 1; }
cat stderr >&2
grep_error_messages
$MAKE distcheck 2>stderr && { cat stderr >&2; Exit 1; }
cat stderr >&2
grep_error_messages

: