VirtualBox

source: kBuild/vendor/grep/3.7/dist-check.mk

Last change on this file was 3529, checked in by bird, 3 years ago

Imported grep 3.7 from grep-3.7.tar.gz (sha256: c22b0cf2d4f6bbe599c902387e8058990e1eee99aef333a203829e5fd3dbb342), applying minimal auto-props.

File size: 6.4 KB
Line 
1# Most of this is probably too coreutils-centric to be useful to other packages.
2
3bin=bin-$$$$
4
5write_loser = printf '\#!%s\necho $$0: bad path 1>&2; exit 1\n' '$(SHELL)'
6
7tmpdir = $(abs_top_builddir)/tests/torture
8
9t=$(tmpdir)/$(PACKAGE)/test
10pfx=$(t)/i
11
12built_programs = \
13 $$(echo 'spy:;@echo $$(bin_PROGRAMS)' \
14 | MAKEFLAGS= $(MAKE) -s -f Makefile -f - spy \
15 | fmt -1 | sed 's,$(EXEEXT)$$,,' | sort -u)
16
17# More than once, tainted build and source directory names would
18# have caused at least one "make check" test to apply "chmod 700"
19# to all directories under $HOME. Make sure it doesn't happen again.
20tp = $(tmpdir)/taint
21t_prefix = $(tp)/a
22t_taint = '$(t_prefix) b'
23fake_home = $(tp)/home
24
25# When extracting from a distribution tarball, extract using the fastest
26# method possible. With dist-xz, that means using the *.xz file.
27ifneq ('', $(filter *.xz, $(DIST_ARCHIVES)))
28 tar_decompress_opt_ = J
29 suffix_ = xz
30else
31 ifneq ('', $(filter *.gz, $(DIST_ARCHIVES)))
32 tar_decompress_opt_ = z
33 suffix_ = gz
34 else
35 tar_decompress_opt_ = j
36 suffix_ = bz2
37 endif
38endif
39amtar_extract_ = $(AMTAR) -$(tar_decompress_opt_)xf
40preferred_tarball_ = $(distdir).tar.$(suffix_)
41
42# Ensure that tests run from tainted build and src dir names work,
43# and don't affect anything in $HOME. Create witness files in $HOME,
44# record their attributes, and build/test. Then ensure that the
45# witnesses were not affected.
46# Skip this test when using libtool, since libtool-generated scripts
47# cannot deal with a space-tainted srcdir.
48ALL_RECURSIVE_TARGETS += taint-distcheck
49taint-distcheck: $(DIST_ARCHIVES)
50 grep '^[ ]*LT_INIT' configure.ac >/dev/null && exit 0 || :
51 test -d $(t_taint) && chmod -R 700 $(t_taint) || :
52 -rm -rf $(t_taint) $(fake_home)
53 mkdir -p $(t_prefix) $(t_taint) $(fake_home)
54 $(amtar_extract_) $(preferred_tarball_) -C $(t_taint)
55 mkfifo $(fake_home)/fifo
56 touch $(fake_home)/f
57 mkdir -p $(fake_home)/d/e
58 ls -lR $(fake_home) $(t_prefix) > $(tp)/.ls-before
59 HOME=$(fake_home); export HOME; \
60 cd $(t_taint)/$(distdir) \
61 && ./configure \
62 && $(MAKE) \
63 && $(MAKE) check \
64 && ls -lR $(fake_home) $(t_prefix) > $(tp)/.ls-after \
65 && diff $(tp)/.ls-before $(tp)/.ls-after \
66 && test -d $(t_prefix)
67 rm -rf $(tp)
68
69# Verify that a twisted use of --program-transform-name=PROGRAM works.
70define install-transform-check
71 echo running install-transform-check \
72 && rm -rf $(pfx) \
73 && $(MAKE) program_transform_name='s/.*/zyx/' \
74 prefix=$(pfx) install \
75 && test "$$(echo $(pfx)/bin/*)" = "$(pfx)/bin/zyx" \
76 && test "$$(find $(pfx)/share/man -type f|sed 's,.*/,,;s,\..*,,')" = "zyx"
77endef
78
79# Install, then verify that all binaries and man pages are in place.
80# Note that neither the binary, ginstall, nor the [.1 man page is installed.
81define my-instcheck
82 echo running my-instcheck; \
83 $(MAKE) prefix=$(pfx) install \
84 && test ! -f $(pfx)/bin/ginstall \
85 && { fail=0; \
86 for i in $(built_programs); do \
87 test "$$i" = ginstall && i=install; \
88 for j in "$(pfx)/bin/$$i" \
89 "$(pfx)/share/man/man1/$$i.1"; do \
90 case $$j in *'[.1') continue;; esac; \
91 test -f "$$j" && : \
92 || { echo "$$j not installed"; fail=1; }; \
93 done; \
94 done; \
95 test $$fail = 1 && exit 1 || :; \
96 }
97endef
98
99# The hard-linking for-loop below ensures that there is a bin/ directory
100# full of all of the programs under test (except the ones that are required
101# for basic Makefile rules), all symlinked to the just-built "false" program.
102# This is to ensure that if ever a test neglects to make PATH include
103# the build srcdir, these always-failing programs will run.
104# Otherwise, it is too easy to test the wrong programs.
105# Note that "false" itself is a symlink to true, so it too will malfunction.
106define coreutils-path-check
107 { \
108 echo running coreutils-path-check; \
109 if test -f $(srcdir)/src/true.c; then \
110 fail=1; \
111 mkdir $(bin) \
112 && ($(write_loser)) > $(bin)/loser \
113 && chmod a+x $(bin)/loser \
114 && for i in $(built_programs); do \
115 case $$i in \
116 rm|expr|basename|echo|sort|ls|tr);; \
117 cat|dirname|mv|wc);; \
118 *) ln $(bin)/loser $(bin)/$$i;; \
119 esac; \
120 done \
121 && ln -sf ../src/true $(bin)/false \
122 && PATH=`pwd`/$(bin)$(PATH_SEPARATOR)$$PATH \
123 $(MAKE) -C tests check \
124 && { test -d gnulib-tests \
125 && $(MAKE) -C gnulib-tests check \
126 || :; } \
127 && rm -rf $(bin) \
128 && fail=0; \
129 else \
130 fail=0; \
131 fi; \
132 test $$fail = 1 && exit 1 || :; \
133 }
134endef
135
136# More generic version of the rule above.
137define generic-path-check
138 { \
139 echo running generic-path-check; \
140 if test -f /bin/false; then \
141 fail=1; \
142 mkdir $(bin) \
143 && ($(write_loser)) > $(bin)/loser \
144 && chmod a+x $(bin)/loser \
145 && for i in $(built_programs); do \
146 ln $(bin)/loser $(bin)/$$i; \
147 done \
148 && PATH=`pwd`/$(bin)$(PATH_SEPARATOR)$$PATH \
149 $(MAKE) check \
150 && { test -d gnulib-tests \
151 && $(MAKE) -C gnulib-tests check \
152 || :; } \
153 && rm -rf $(bin) \
154 && fail=0; \
155 else \
156 fail=0; \
157 fi; \
158 test $$fail = 1 && exit 1 || :; \
159 }
160endef
161
162# Use this to make sure we don't run these programs when building
163# from a virgin compressed tarball file, below.
164null_AM_MAKEFLAGS ?= \
165 ACLOCAL=false \
166 AUTOCONF=false \
167 AUTOMAKE=false \
168 AUTOHEADER=false \
169 GPERF=false \
170 MAKEINFO=false
171
172ALL_RECURSIVE_TARGETS += my-distcheck
173my-distcheck: $(DIST_ARCHIVES) $(local-check)
174 $(MAKE) syntax-check
175 $(MAKE) check
176 -rm -rf $(t)
177 mkdir -p $(t)
178 $(amtar_extract_) $(preferred_tarball_) -C $(t)
179 (set -e; cd $(t)/$(distdir); \
180 ./configure --quiet --enable-gcc-warnings --disable-nls; \
181 $(MAKE) AM_MAKEFLAGS='$(null_AM_MAKEFLAGS)'; \
182 $(MAKE) dvi; \
183 $(install-transform-check); \
184 $(my-instcheck); \
185 $(coreutils-path-check); \
186 $(generic-path-check); \
187 $(MAKE) distclean \
188 )
189 (cd $(t) && mv $(distdir) $(distdir).old \
190 && $(amtar_extract_) - ) < $(preferred_tarball_)
191 find $(t)/$(distdir).old $(t)/$(distdir) -name .deps | xargs rmdir
192 diff -ur $(t)/$(distdir).old $(t)/$(distdir)
193 -rm -rf $(t)
194 rmdir $(tmpdir)/$(PACKAGE) $(tmpdir)
195 @echo "========================"; \
196 echo "ready for distribution:"; \
197 for i in $(DIST_ARCHIVES); do echo " $$i"; done; \
198 echo "========================"
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette