Home | History | Annotate | Line # | Download | only in tests
      1 ## Make Autoconf tests.
      2 
      3 # Copyright (C) 2000-2012 Free Software Foundation, Inc.
      4 
      5 # This program is free software: you can redistribute it and/or modify
      6 # it under the terms of the GNU General Public License as published by
      7 # the Free Software Foundation, either version 3 of the License, or
      8 # (at your option) any later version.
      9 
     10 # This program is distributed in the hope that it will be useful,
     11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13 # GNU General Public License for more details.
     14 
     15 # You should have received a copy of the GNU General Public License
     16 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
     17 
     18 # We don't actually distribute the built testsuite or package.m4, since one
     19 # only needs m4 to build them, and m4 is required to install Autoconf.
     20 # But if you are borrowing from this file for setting up autotest in your
     21 # project, remember to distribute both testsuite and package.m4.
     22 EXTRA_DIST = $(TESTSUITE_AT) local.at mktests.sh \
     23 	     atlocal.in wrapper.as statesave.m4
     24 
     25 # Running the uninstalled scripts.  Build them upon `all', for the manpages.
     26 noinst_SCRIPTS = $(wrappers)
     27 DISTCLEANFILES = atconfig atlocal $(TESTSUITE)
     28 MAINTAINERCLEANFILES = Makefile.in
     29 
     30 # Import the dependencies on Autotest and M4sh.
     31 include ../lib/freeze.mk
     32 
     33 
     34 ## ------------ ##
     35 ## package.m4.  ##
     36 ## ------------ ##
     37 
     38 # The `:;' works around a redirected compound command bash exit status bug.
     39 package.m4: Makefile
     40 	:;{ \
     41 	  echo '# Signature of the current package.' && \
     42 	  echo 'm4_define([AT_PACKAGE_NAME],      [$(PACKAGE_NAME)])' && \
     43 	  echo 'm4_define([AT_PACKAGE_TARNAME],   [$(PACKAGE_TARNAME)])' && \
     44 	  echo 'm4_define([AT_PACKAGE_VERSION],   [$(PACKAGE_VERSION)])' && \
     45 	  echo 'm4_define([AT_PACKAGE_STRING],    [$(PACKAGE_STRING)])' && \
     46 	  echo 'm4_define([AT_PACKAGE_BUGREPORT], [$(PACKAGE_BUGREPORT)])' && \
     47 	  echo 'm4_define([AT_PACKAGE_URL],       [$(PACKAGE_URL)])'; \
     48 	} > $@-t
     49 	mv $@-t $@
     50 
     51 
     52 
     53 ## ---------- ##
     54 ## Wrappers.  ##
     55 ## ---------- ##
     56 
     57 wrappers = autoconf autoheader autom4te autoreconf autoscan autoupdate ifnames
     58 CLEANFILES = wrapper.in $(wrappers) package.m4
     59 
     60 wrapper.in: $(srcdir)/wrapper.as $(m4sh_m4f_dependencies)
     61 	$(MY_AUTOM4TE) --language=M4sh $(srcdir)/wrapper.as -o $@
     62 
     63 edit = sed \
     64 	-e 's|@wrap_program[@]|$@|g' \
     65 	-e 's|@abs_top_srcdir[@]|@abs_top_srcdir@|g' \
     66 	-e 's|@abs_top_builddir[@]|@abs_top_builddir@|g' \
     67 	-e "s|@configure_input[@]|Generated from $$input.|g"
     68 
     69 $(wrappers): wrapper.in
     70 	rm -f $@ $@.tmp
     71 	input=wrapper.in; \
     72 	$(edit) wrapper.in >$@.tmp
     73 	chmod +x $@.tmp
     74 	chmod a-w $@.tmp
     75 	mv -f $@.tmp $@
     76 
     77 
     78 
     79 ## ------------ ##
     80 ## Test suite.  ##
     81 ## ------------ ##
     82 
     83 TESTSUITE_GENERATED_AT = \
     84 	$(srcdir)/aclang.at \
     85 	$(srcdir)/acc.at \
     86 	$(srcdir)/acfortran.at \
     87 	$(srcdir)/acgo.at \
     88 	$(srcdir)/acgeneral.at \
     89 	$(srcdir)/acstatus.at \
     90 	$(srcdir)/acautoheader.at \
     91 	$(srcdir)/acautoupdate.at \
     92 	$(srcdir)/acspecific.at \
     93 	$(srcdir)/acfunctions.at \
     94 	$(srcdir)/acheaders.at \
     95 	$(srcdir)/actypes.at \
     96 	$(srcdir)/aclibs.at \
     97 	$(srcdir)/acprograms.at
     98 
     99 TESTSUITE_HAND_AT = \
    100 	suite.at \
    101 	m4sugar.at m4sh.at autotest.at \
    102 	base.at tools.at torture.at \
    103 	compile.at c.at erlang.at fortran.at go.at \
    104 	semantics.at \
    105 	autoscan.at \
    106 	foreign.at
    107 
    108 TESTSUITE_AT = $(TESTSUITE_GENERATED_AT) $(TESTSUITE_HAND_AT)
    109 TESTSUITE = ./testsuite
    110 
    111 # Run the non installed autom4te.
    112 # Don't use AUTOM4TE since `make alpha' makes it unavailable although
    113 # we are allowed to use it (since we ship it).
    114 AUTOTEST = $(MY_AUTOM4TE) --language=autotest
    115 $(TESTSUITE): package.m4 \
    116 	      local.at \
    117 	      $(TESTSUITE_AT) \
    118 	      $(autotest_m4f_dependencies)
    119 	cd $(top_builddir)/lib/autotest && $(MAKE) $(AM_MAKEFLAGS) autotest.m4f
    120 	$(AUTOTEST) -I . -I $(srcdir) suite.at -o $@.tmp
    121 	mv $@.tmp $@
    122 
    123 atconfig: $(top_builddir)/config.status
    124 	cd $(top_builddir) && ./config.status tests/$@
    125 
    126 # Avoid a race condition that would make parallel "distclean" fail.
    127 # The rule in clean-local tests for existence of $(TESTSUITE), and
    128 # if found, attempts to run it.  But the distclean-generic rule may
    129 # be running in parallel, and it removes $(DISTCLEANFILES) which
    130 # includes $(TESTSUITE).  This is the Automake rule, plus our
    131 # dependency, and we silence the warning from 'automake -Wall' by
    132 # hiding the dependency behind a variable.
    133 # TODO - fix this if newer automake accommodates the dependency.
    134 distclean_generic = distclean-generic
    135 $(distclean_generic): clean-local
    136 
    137 clean-local:
    138 	test ! -f $(TESTSUITE) || $(SHELL) $(TESTSUITE) --clean
    139 	rm -f *.tmp
    140 	rm -f -r autom4te.cache
    141 
    142 check-local: atconfig atlocal $(TESTSUITE)
    143 	$(SHELL) $(TESTSUITE) $(TESTSUITEFLAGS)
    144 
    145 # Run the test suite on the *installed* tree.
    146 installcheck-local: atconfig atlocal $(TESTSUITE)
    147 	$(SHELL) $(TESTSUITE) AUTOTEST_PATH="$(bindir)" $(TESTSUITEFLAGS)
    148 
    149 
    150 
    151 ## ------------------ ##
    152 ## Maintainer rules.  ##
    153 ## ------------------ ##
    154 
    155 MAINTAINERCLEANFILES += $(TESTSUITE_GENERATED_AT)
    156 
    157 ## Producing the test files.
    158 
    159 # The files which contain macros we check for syntax.  Use $(top_srcdir)
    160 # for the benefit of non-GNU make.  Fix the names in the rule below
    161 # where we `cd' to $srcdir.
    162 autoconfdir = $(top_srcdir)/lib/autoconf
    163 AUTOCONF_FILES = $(autoconfdir)/general.m4 \
    164 		 $(autoconfdir)/status.m4 \
    165 		 $(autoconfdir)/autoheader.m4 \
    166 		 $(autoconfdir)/autoupdate.m4 \
    167 		 $(autoconfdir)/specific.m4 \
    168 		 $(autoconfdir)/functions.m4 \
    169 		 $(autoconfdir)/lang.m4 \
    170 		 $(autoconfdir)/c.m4 \
    171 		 $(autoconfdir)/erlang.m4 \
    172 		 $(autoconfdir)/fortran.m4 \
    173 		 $(autoconfdir)/go.m4 \
    174 		 $(autoconfdir)/headers.m4 \
    175 		 $(autoconfdir)/libs.m4 \
    176 		 $(autoconfdir)/types.m4 \
    177 		 $(autoconfdir)/programs.m4
    178 
    179 $(TESTSUITE_GENERATED_AT): mktests.stamp
    180 ## Recover from the removal of $@
    181 	@if test -f $@; then :; else \
    182 	  rm -f mktests.stamp; \
    183 	  $(MAKE) $(AM_MAKEFLAGS) mktests.stamp; \
    184 	fi
    185 
    186 mktests.stamp : mktests.sh $(AUTOCONF_FILES)
    187 	@rm -f mktests.tmp
    188 	@touch mktests.tmp
    189 	cd $(srcdir) && ./mktests.sh \
    190 	  `echo " "$(AUTOCONF_FILES) | sed 's, [^ ]*/, ../lib/autoconf/,g'`
    191 	@mv -f mktests.tmp $@
    192 
    193 ## Distribute the stamp file, since we distribute the generated files.
    194 EXTRA_DIST += mktests.stamp
    195 CLEANFILES += mktests.tmp
    196 MAINTAINERCLEANFILES += mktests.stamp
    197 
    198 ## maintainer-check ##
    199 
    200 # These cannot be run in parallel.
    201 maintainer-check:
    202 	$(MAKE) $(AM_MAKEFLAGS) maintainer-check-posix
    203 	$(MAKE) $(AM_MAKEFLAGS) maintainer-check-c++
    204 
    205 # The hairy heredoc is more robust than using echo.
    206 CLEANFILES += expr
    207 expr:
    208 	:;{					\
    209 	  echo '#! $(SHELL)';			\
    210 	  echo 'result=`$(EXPR) "$$@"`';	\
    211 	  echo 'estatus=$$?';			\
    212 	  echo 'cat <<EOF';			\
    213 	  echo '$${result:-0}';			\
    214 	  echo 'EOF';				\
    215 	  echo 'exit $$estatus';		\
    216 	} > $@-t
    217 	chmod +x $@-t
    218 	mv $@-t $@
    219 
    220 # Try the test suite with more severe environments.
    221 maintainer-check-posix: expr
    222 	POSIXLY_CORRECT=yes $(MAKE) $(AM_MAKEFLAGS) check
    223 	rm expr
    224 
    225 # Try using G++ as a C compiler.
    226 maintainer-check-c++:
    227 	CC=g++ $(MAKE) $(AM_MAKEFLAGS) check
    228