diff options
author | Stefano Lattarini <stefano.lattarini@gmail.com> | 2013-02-08 09:17:10 +0100 |
---|---|---|
committer | Stefano Lattarini <stefano.lattarini@gmail.com> | 2013-02-14 13:40:40 +0100 |
commit | f6edf9d31204204907b67f167516bd5082b78d0c (patch) | |
tree | 94ecfb1e4ef78145d340ea2e31c8c96763a29d81 /t/preproc-demo.sh | |
parent | ba25a9f1c295d7799575afa39c4c9854a85ad8e3 (diff) | |
download | automake-f6edf9d31204204907b67f167516bd5082b78d0c.tar.gz |
preproc: enhance and extend testsexperimental/preproc
* t/preproc-demo.sh: New test, a "demo" of how the new pre-processing
feature could be used in a real-world package.
* t/preproc-errmsg.sh: New test, check that error messages remain
useful when the new pre-processing features are involved.
* t/preproc-reldir.sh: Split up ...
* t/preproc-basics.sh, t/preproc-c-compile.sh: ... into these two
tests, with some refactorings, clean-up and enhancements.
* t/list-of-tests.mk: Adjust.
Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
Diffstat (limited to 't/preproc-demo.sh')
-rwxr-xr-x | t/preproc-demo.sh | 230 |
1 files changed, 230 insertions, 0 deletions
diff --git a/t/preproc-demo.sh b/t/preproc-demo.sh new file mode 100755 index 000000000..4c1b2d9dd --- /dev/null +++ b/t/preproc-demo.sh @@ -0,0 +1,230 @@ +#! /bin/sh +# Copyright (C) 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/>. + +# Demo of a package using pre-processing substitutions '%reldir%' and +# '%canon_reldir%', and their respective shorthands '%D%' and '%C%'. + +am_create_testdir=empty +required=cc +. test-init.sh + +if cross_compiling; then + WE_ARE_CROSS_COMPILING=yes +else + WE_ARE_CROSS_COMPILING=no +fi +export WE_ARE_CROSS_COMPILING + +SAFE_PRINT_FAIL=; unset SAFE_PRINT_FAIL + +cat > configure.ac << 'END' +AC_INIT([GNU Demo], [0.7], [bug-automake@gnu.org]) +AC_CONFIG_AUX_DIR([build-aux]) +AM_INIT_AUTOMAKE([1.12.6 foreign subdir-objects -Wall]) +AM_CONDITIONAL([NATIVE_BUILD], [test $WE_ARE_CROSS_COMPILING != yes]) +AC_CONFIG_FILES([Makefile]) +AC_PROG_CC +AM_PROG_CC_C_O +AM_PROG_AR +AC_PROG_RANLIB +AC_OUTPUT +END + +mkdir build-aux lib lib/tests src tests + +## Top level. + +cat > Makefile.am << 'END' +bin_PROGRAMS = +check_PROGRAMS = +noinst_LIBRARIES = +AM_CPPFLAGS = +AM_TESTS_ENVIRONMENT = +CLEANFILES = +EXTRA_DIST = +LDADD = +TESTS = + +include $(srcdir)/src/progs.am +include $(srcdir)/lib/gnulib.am +include $(srcdir)/tests/check.am +END + +## Src subdir. + +cat > src/progs.am <<'END' +bin_PROGRAMS += %reldir%/hello + +bin_PROGRAMS += %D%/goodbye +%canon_reldir%_goodbye_SOURCES = %D%/hello.c +%C%_goodbye_CPPFLAGS = $(AM_CPPFLAGS) -DGREETINGS='"Goodbye"' + +# The testsuite should have access to our built programs. +AM_TESTS_ENVIRONMENT += \ + PROGDIR='$(top_builddir)/%reldir%'; \ + export PROGDIR; \ + PATH='$(abs_builddir)/%reldir%'$(PATH_SEPARATOR)$$PATH; \ + export PATH; +END + +cat > src/hello.c <<'END' +#include "safe-print.h" +#include <stdlib.h> +#include <stdio.h> + +#ifndef GREETINGS +# define GREETINGS "Hello" +#endif + +int +main (void) +{ + safe_print (stdout, GREETINGS ", World!\n"); + exit (EXIT_SUCCESS); +} +END + +## Lib subdir. + +cat > lib/gnulib.am << 'END' +noinst_LIBRARIES += %D%/libgnu.a + +AM_CPPFLAGS += -I%D% -I$(top_srcdir)/%D% +LDADD += $(noinst_LIBRARIES) + +%C%_libgnu_a_SOURCES = \ + %D%/safe-print.c \ + %D%/safe-print.h + +if NATIVE_BUILD +include %D%/tests/gnulib-check.am +endif +END + +cat > lib/safe-print.c <<'END' +#include "safe-print.h" +#include <string.h> +#include <stdlib.h> + +void +safe_print (FILE *fp, const char * str) +{ + if (fprintf (fp, "%s", str) != strlen (str) + || fflush (fp) != 0 || ferror (fp)) + { + fprintf (stderr, "I/O error\n"); + exit (EXIT_FAILURE); + } +} + +END + +cat > lib/safe-print.h <<'END' +#include <stdio.h> +void safe_print (FILE *, const char *); +END + +## Lib/Tests (sub)subdir. + +cat > lib/tests/gnulib-check.am <<'END' +check_PROGRAMS += %D%/safe-print-test +TESTS += $(check_PROGRAMS) +AM_TESTS_ENVIRONMENT += EXEEXT='$(EXEEXT)'; export EXEEXT; +END + +cat > lib/tests/safe-print-test.c <<'END' +#include "safe-print.h" +int +main (void) +{ + safe_print (stdout, "dummy\n"); + return 0; +} +END + +## Tests subdir. + +cat > tests/check.am <<'END' +TEST_EXTENSIONS = .sh +SH_LOG_COMPILER = $(SHELL) + +handwritten_TESTS = \ + %D%/hello.sh \ + %D%/built.sh +TESTS += $(handwritten_TESTS) +EXTRA_DIST += $(handwritten_TESTS) + +TESTS += %D%/goodbye.sh +CLEANFILES += %D%/goodbye.sh +%D%/goodbye.sh: %D%/hello.sh + $(MKDIR_P) %D% + rm -f $@ $@-t + sed -e 's/hello/goodbye/' \ + -e 's/Hello/Goodbye/' \ + < $(srcdir)/%D%/hello.sh >$@-t + chmod a-w,a+x $@-t && mv -f $@-t $@ +END + +cat > tests/hello.sh <<'END' +#!/bin/sh +set -x -e +if test "$WE_ARE_CROSS_COMPILING" = yes; then + echo Skipping: cannot run in cross-compilation mode + exit 77 +else + hello || exit 1 + test "`hello`" = 'Hello, World!' || exit 1 +fi +END + +cat > tests/built.sh <<'END' +#!/bin/sh +set -x +test -n "$PROGDIR" || exit 99 +test -f "$PROGDIR/hello$EXEEXT" || exit 1 +test -x "$PROGDIR/hello$EXEEXT" || exit 1 +test -f "$PROGDIR/goodbye$EXEEXT" || exit 1 +test -x "$PROGDIR/goodbye$EXEEXT" || exit 1 +END + + +## Go. + +$ACLOCAL +$AUTOCONF +$AUTOMAKE --add-missing --copy +test ! -e compile +test -f build-aux/compile + +./configure + +$MAKE + +VERBOSE=x $MAKE check >stdout || { cat stdout; exit 1; } +cat stdout +cat tests/built.log +cat tests/hello.log +cat tests/goodbye.log +if cross_compiling; then + test ! -e lib/tests/safe-print-test.log + count_test_results total=3 pass=1 fail=0 xpass=0 xfail=0 skip=2 error=0 +else + count_test_results total=4 pass=4 fail=0 xpass=0 xfail=0 skip=0 error=0 +fi + +$MAKE distcheck + +: |