From: Stefano Lattarini Date: Sun, 10 Jun 2012 22:49:18 +0000 (+0200) Subject: tests: add a "demo" test on C support X-Git-Tag: v1.12.2~86 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=af5d52b7862e2e49ae38b8060b6aa778f709d537;p=platform%2Fupstream%2Fautomake.git tests: add a "demo" test on C support Showing and testing non-trivial use of C support, and its interaction with other features. * t/c-demo.sh: New test. * t/list-of-tests.mk: Add it. Signed-off-by: Stefano Lattarini --- diff --git a/t/c-demo.sh b/t/c-demo.sh new file mode 100755 index 0000000..ed2a109 --- /dev/null +++ b/t/c-demo.sh @@ -0,0 +1,179 @@ +#! /bin/sh +# Copyright (C) 2012 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 . + +# Demo on C support, also testing automatic dependency tracking, +# conditional SUBDIRS and convenience libraries. + +required=cc +am_create_testdir=empty +. ./defs || Exit 1 + +cat > configure.ac << 'END' +AC_INIT([GNU C Demo], [22.3.2], [bug-automake@gnu.org]) +AC_CONFIG_SRCDIR([tests/test.test]) +AC_CONFIG_AUX_DIR([build-aux]) +AM_INIT_AUTOMAKE +AC_PROG_CC +AM_PROG_CC_C_O +AM_PROG_AR +AC_PROG_RANLIB +AM_CONDITIONAL([RUN_TESTS], [test x"$run_tests" != x"no"]) +AC_CONFIG_FILES([Makefile src/Makefile lib/Makefile tests/Makefile]) +AC_OUTPUT +END + +if cross_compiling; then + run_tests=no +else + run_tests=yes +fi +export run_tests + +mkdir build-aux lib src tests + +cat > Makefile.am <<'END' +SUBDIRS = lib src + +if RUN_TESTS +SUBDIRS += tests +endif + +.PHONY: test-objs +check-local: test-objs +test-objs: + test -f src/zardoz-main.$(OBJEXT) + test -f lib/foo.$(OBJEXT) + test -f lib/bar.$(OBJEXT) +END + +cat > src/Makefile.am << 'END' +bin_PROGRAMS = zardoz +zardoz_SOURCES = main.c +zardoz_LDADD = $(top_builddir)/lib/lib-convenience.a +zardoz_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib +END + +cat > lib/Makefile.am << 'END' +noinst_LIBRARIES = lib-convenience.a +lib_convenience_a_SOURCES = foo.c +lib_convenience_a_SOURCES += bar.c +dist_lib_convenience_a_SOURCES = bar.h +nodist_lib_convenience_a_SOURCES = foo.h + +# We want this to be auto-generated an removed by "make clean", to +# ensure that cleaning rules work correctly; an older implementation +# of automatic dependency tracking support suffered of weaknesses in +# this situation, see the "historical comments" reported in: +# http://lists.gnu.org/archive/html/automake-patches/2012-06/msg00033.html +foo.h: $(srcdir)/foo.c + sed -n 's/.*foo *(.*/&;/p' "$(srcdir)/foo.c" >$@-t + test 1 -eq `wc -l <$@-t` + chmod a-w $@-t && mv -f $@-t $@ +BUILT_SOURCES = foo.h +CLEANFILES = $(BUILT_SOURCES) + +check-local: + test -f ${top_srcdir}/tests/test.test +END + +cat > tests/Makefile.am << 'END' +AUTOMAKE_OPTIONS = parallel-tests +TEST_LOG_COMPILER = $(SHELL) +TESTS = test.test +EXTRA_DIST = $(TESTS) +END + +cat > tests/test.test << 'END' +#!/bin/sh +set -x; set -e; +../src/zardoz +test "`../src/zardoz`" = 'Foo, Bar!' +END + +$ACLOCAL +$AUTOCONF +$AUTOMAKE --add-missing + +test -f build-aux/depcomp +test -f build-aux/compile # We have per-target flags on C sources. + +# Don't reject slow dependency extractors. +./configure --enable-dependency-tracking + +cat > src/main.c << 'END' +#include "foo.h" +#include "bar.h" +int main (void) +{ + printf ("%s, %s!\n", foo (), bar ()); + return 0; +} +END + +cat > lib/foo.c << 'END' +#include "foo.h" +static char s[4]; +volatile char *foo (void) +{ + s[0] = 'F'; + s[1] = s[2] = 'o'; + s[3] = '\0'; + return s; +} +END + +cat > lib/bar.c << 'END' +#include "bar.h" +const char *bar (void) +{ + return BARBAR; +} +END + +cat > lib/bar.h << 'END' +#define BARBAR "Bar" +const char *bar (void); +END + +$MAKE +ls -l . src lib # For debugging. +$MAKE test-objs + +VERBOSE=x $MAKE check +if cross_compiling; then + test ! -f tests/test-suite.log + test ! -f tests/test.log +else + test -f tests/test-suite.log + grep 'Foo, Bar!' tests/test.log +fi + +$MAKE distcheck + +if ! cross_compiling && ! grep "[ $tab]depmode=none" Makefile; then + # Let's check automatic dependency tracking. + sed 's/^\(#define BARBAR \).*/\1 "Zap"/' lib/bar.h > t + mv -f t lib/bar.h + $MAKE + ./src/zardoz + test "`./src/zardoz`" = 'Foo, Zap!' +fi + +$MAKE clean +test ! -f lib/foo.h +test -f lib/bar.h + +: diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk index 446157c..24172cf 100644 --- a/t/list-of-tests.mk +++ b/t/list-of-tests.mk @@ -329,6 +329,7 @@ t/copy.sh \ t/cscope.tap \ t/cscope2.sh \ t/cscope3.sh \ +t/c-demo.sh \ t/cxx.sh \ t/cxx2.sh \ t/cxxcpp.sh \