blob: ef0e35962ceefc0291bb56ecfb8aa948d8ee54a8 (
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
#! /bin/sh
# Copyright (C) 2010-2013 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/>.
# Make sure we allow the use to whitelist false positives in our
# detection of variable typos. Inspired by the GNU coreutils (8.17)
# build system.
required=cc
. test-init.sh
edit ()
{
file=$1; shift
"$@" <$file >t && mv -f t $file || fatal_ "editing $file"
}
cat >> configure.ac << 'END'
AC_PROG_CC
AM_PROG_AR
AC_PROG_RANLIB
AC_SUBST([LIBSELINUX], ["$l_selinux"])
AC_OUTPUT
END
l_selinux=; export l_selinux=
cat > Makefile.am <<'END'
bin_PROGRAMS = cp mv rm
noinst_LIBRARIES = libremove.a libcopy.a
remove_LDADD = libremove.a
copy_LDADD = libcopy.a
copy_LDADD += @LIBSELINUX@
cp_LDADD = $(copy_LDADD)
rm_LDADD = $(remove_LDADD)
mv_LDADD = $(copy_LDADD) $(remove_LDADD)
AM_VARTYPOS_WHITELIST = copy_LDADD remove_LDADD
EXTRA_DIST = libcopy.h libremove.h
END
echo 'extern void cu_copy (void);' > libcopy.h
echo 'extern void cu_remove (void);' > libremove.h
cat > libcopy.c << 'END'
#include "libcopy.h"
void cu_copy (void) { return; }
END
cat > libremove.c << 'END'
#include "libremove.h"
void cu_remove (void) { return; }
END
cat > cp.c <<'END'
#include "libcopy.h"
int main (void)
{
cu_copy ();
return 0;
}
END
cat > rm.c <<'END'
#include "libremove.h"
int main (void)
{
cu_remove ();
return 0;
}
END
cat > mv.c <<'END'
#include "libremove.h"
#include "libcopy.h"
int main (void)
{
cu_copy ();
cu_remove ();
return 0;
}
END
$ACLOCAL
$AUTOCONF
$AUTOMAKE -a
./configure
$MAKE
# Sanity check the distribution.
$MAKE distcheck
# If we remove the whitelisting, failure ensues.
sed '/^AM_VARTYPOS_WHITELIST *=/d' <Makefile.am >t && mv -f t Makefile.am \
|| fatal_ "editing Makefile.am"
$MAKE 2>stderr && { cat stderr; exit 1; }
cat stderr >&2
grep "'copy_LDADD' is defined but no program" stderr
grep "'remove_LDADD' is defined but no program" stderr
$MAKE AM_VARTYPOS_WHITELIST=remove_LDADD AM_FORCE_SANITY_CHECK=yes \
2>stderr && { cat stderr; exit 1; }
cat stderr >&2
grep "'copy_LDADD' is defined but no program" stderr
grep "remove_LDADD" stderr && exit 1
:
|