| #! /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 <https://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 |
| |
| : |