123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- #! /bin/sh
- # Copyright (C) 2012-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/>.
- # Demo on C++ support.
- required=c++
- am_create_testdir=empty
- . test-init.sh
- cat > configure.ac << 'END'
- AC_INIT([GNU C++ Demo], [1.3], [bug-automake@gnu.org])
- AC_CONFIG_SRCDIR([play.c++])
- AC_CONFIG_AUX_DIR([build-aux])
- AM_INIT_AUTOMAKE
- # The C compiler shouldn't be required in any way.
- CC=false; AC_SUBST([CC])
- AC_PROG_CXX
- AH_BOTTOM([
- #ifndef GREETINGS
- # define GREETINGS "Howdy"
- #endif])
- AC_DEFINE([OK_AC], [1],
- [Give "good to go" declaration from configure.ac])
- AC_CONFIG_HEADERS([config.hxx])
- AC_CONFIG_FILES([Makefile])
- AC_OUTPUT
- END
- cat > Makefile.am << 'END'
- AUTOMAKE_OPTIONS = subdir-objects
- bin_PROGRAMS = work play
- common_sources = common.hpp foo.cpp sub/bar.cc
- AM_CPPFLAGS = -DOK_AM=1
- play_SOURCES = play.c++ play.hh $(common_sources)
- work_SOURCES = work.cxx work.h++ $(common_sources)
- work_CXXFLAGS = -D'GREETINGS="Good morning"'
- .PHONY: test-objs
- check-local: test-objs
- test-objs:
- test -f play.$(OBJEXT)
- test -f foo.$(OBJEXT)
- test -f sub/bar.$(OBJEXT)
- test -f work-foo.$(OBJEXT)
- test -f sub/work-bar.$(OBJEXT)
- test -f work-work.$(OBJEXT)
- END
- mkdir sub build-aux
- $ACLOCAL
- $AUTOHEADER
- test -f config.hxx.in
- $AUTOCONF
- $AUTOMAKE --add-missing
- test -f build-aux/depcomp
- # Not needed by C++ compilers.
- test ! -e build-aux/compile
- cat > work.h++ << 'END'
- #define ACTION "work"
- class Hello_CXX
- {
- public:
- Hello_CXX() { }
- virtual ~Hello_CXX () { }
- void hello_cxx_class ();
- };
- END
- cat > play.hh << 'END'
- #define ACTION "play"
- void hello_cxx_function (void);
- END
- cat > common.hpp << 'END'
- /* Common header. */
- #include <config.hxx>
- #if !OK_AM
- #error "missing OK from Makefile.am"
- choke me
- #endif
- #if !OK_AC
- #error "missing OK from configure.ac"
- choke me
- #endif
- #include <iostream>
- END
- cat > work.cxx << 'END'
- #include "common.hpp"
- #include "work.h++"
- #include <cstdlib>
- using namespace std;
- int main (void)
- {
- cout << "We are working :-(" << endl;
- Hello_CXX *hello = new Hello_CXX;
- hello->hello_cxx_class ();
- return EXIT_SUCCESS;
- }
- END
- cat > play.c++ << 'END'
- #include "common.hpp"
- #include "play.hh"
- int main (void)
- {
- std::cout << "We are playing :-)" << std::endl;
- hello_cxx_function ();
- return 0;
- }
- END
- cat > foo.cpp <<'END'
- #include <config.hxx>
- #include "work.h++"
- #include <iostream>
- using namespace std;
- void Hello_CXX::hello_cxx_class (void)
- {
- cout << GREETINGS << ", " << ACTION << "." << endl;
- }
- END
- cat > sub/bar.cc << 'END'
- #include <config.hxx>
- #include "play.hh"
- #include <stdio.h>
- void hello_cxx_function (void)
- {
- printf ("%s, %s!\n", GREETINGS, ACTION);
- }
- END
- ./configure
- $MAKE
- $MAKE test-objs
- if ! cross_compiling; then
- unindent > exp.play << 'END'
- We are playing :-)
- Howdy, play!
- END
- unindent > exp.work << 'END'
- We are working :-(
- Good morning, work.
- END
- for p in play work; do
- # The program must run correctly (exit status = 0).
- ./$p
- # And it must have the expected output. Note that we strip extra
- # CR characters (if any), to cater to MinGW programs on MSYS.
- # See automake bug#14493.
- ./$p | tr -d '\015' > got.$p || { cat got.$p; exit 1; }
- cat exp.$p
- cat got.$p
- diff exp.$p got.$p
- done
- fi
- $MAKE distcheck
- :
|