summaryrefslogtreecommitdiff
path: root/t/posixsubst-scripts.sh
blob: 9289bc46866e7fac517c0d6584054337f080d678 (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
#! /bin/sh
# Copyright (C) 2010-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 <http://www.gnu.org/licenses/>.

# Test that POSIX variable expansion '$(var:str=rpl)' works when used
# with the SCRIPTS primary.

. test-init.sh

cat >> configure.ac << 'END'
AC_OUTPUT
END

# We have to be careful with 'test -x' commands on MinGW/MSYS, because
# the file system does not actually have execute permission information.
# Instead, that is emulated by looking at the file content, and returning
# 0 if the file starts with, e.g., a COFF header or with '#!'.
# So we need to create actual scripts in the make rules and in the file
# creation below.

cat > Makefile.am << 'END'
t1 = foo1 foo2
t2 = bar1x bar2
t3 = quu-baz

bar1 bar2:
	(echo '#!/bin/sh' && echo 'exit 0') > $@
quux.pl:
	(echo '#!/bin/perl' && echo '1;') > $@
CLEANFILES = bar1 bar2 quux.pl

# Also try an empty match suffix, to ensure that the ':=' in there is
# not confused by the parser with an unportable assignment operator.
dist_sbin_SCRIPTS = $(t1:=.sh)
libexec_SCRIPTS = $(t2:x=)
nodist_bin_SCRIPTS = $(t3:-baz=x.pl)

check-local: test1 test2
.PHONY: test1 test2
test1:
	ls -l
	test -f bar1
	test -f bar2
	test -f quux.pl
test2: distdir
	ls -l $(distdir)
## The scripts foo1.sh and foo2.sh should be distributed.
	test -f $(distdir)/foo1.sh
	test -f $(distdir)/foo2.sh
## The scripts bar1, bar2 and quux.pl shouldn't be distributed.
	test ! -r $(distdir)/bar1
	test ! -r $(distdir)/bar2
	test ! -r $(distdir)/quux.pl

installcheck-local:
	ls -l $(libexecdir) $(bindir) $(sbindir)
	test -f $(sbindir)/foo1.sh
	test -x $(sbindir)/foo1.sh
	test -f $(sbindir)/foo2.sh
	test -x $(sbindir)/foo2.sh
	test -f $(libexecdir)/bar1
	test -x $(libexecdir)/bar1
	test -f $(libexecdir)/bar2
	test -x $(libexecdir)/bar2
	test -f $(bindir)/quux.pl
	test -x $(bindir)/quux.pl
END

cat > foo1.sh <<'END'
#!/bin/sh
exit 0
END
cp foo1.sh foo2.sh

$ACLOCAL
$AUTOCONF
$AUTOMAKE

cwd=$(pwd) || fatal_ "getting current working directory"
./configure --prefix="$cwd/_inst"
$MAKE
$MAKE test1 test2
$MAKE install
$MAKE installcheck
$MAKE distcheck

: