From 8aaa0c2f86244dde4b80c8463e1847279dbc205c Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Tue, 6 Nov 2012 15:35:37 +0100 Subject: [PATCH] tests: check that C and C++ objects can be linked together. * tests/local.at (AT_SKIP_IF_CANNOT_LINK_C_AND_CXX): New. * tests/headers.at (Several parsers): Use it. --- tests/headers.at | 9 ++++++--- tests/local.at | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/tests/headers.at b/tests/headers.at index 8e70a7e..a60e315 100644 --- a/tests/headers.at +++ b/tests/headers.at @@ -240,9 +240,6 @@ AT_TEST([x7], [%define api.push-pull both]) AT_TEST([x8], [%define api.pure %define api.push-pull both]) #AT_TEST([x5], [%locations %language "c++" %glr-parser]) -AT_COMPILE_CXX([parser], [[x[1-8].o -DCC_IS_CXX=$CC_IS_CXX main.cc]]) -AT_CHECK([./parser], [0], [[expout]]) - # Check that the headers are self-contained, and protected against # multiple inclusions. While at it, check they are sane for C++. for h in *.h *.hh @@ -256,6 +253,12 @@ EOF AT_COMPILE_CXX([$h.o]) done +# Do this late, so that other checks have been performed. +AT_SKIP_IF_CANNOT_LINK_C_AND_CXX + +AT_COMPILE_CXX([parser], [[x[1-8].o -DCC_IS_CXX=$CC_IS_CXX main.cc]]) +AT_CHECK([./parser], [0], [[expout]]) + m4_popdef([AT_TEST]) AT_CLEANUP diff --git a/tests/local.at b/tests/local.at index 73680c7..8882521 100644 --- a/tests/local.at +++ b/tests/local.at @@ -683,6 +683,44 @@ m4_define([AT_FULL_COMPILE], ]) + +# AT_SKIP_IF_CANNOT_LINK_C_AND_CXX +# -------------------------------- +# Check that we can link together C and C++ objects. +m4_define([AT_SKIP_IF_CANNOT_LINK_C_AND_CXX], +[AT_DATA([c-and-cxx.h], +[[#ifdef __cplusplus +extern "C" +{ +#endif + int fortytwo (void); +#ifdef __cplusplus +} +#endif +]]) +AT_DATA([c-only.c], +[[#include "c-and-cxx.h" +int +main (void) +{ + return fortytwo () == 42 ? 0 : 1; +} +]]) +AT_DATA([cxx-only.cc], +[[#include "c-and-cxx.h" +int fortytwo () +{ + return 42; +} +]]) +AT_COMPILE([c-only.o], [c-only.c]) +AT_COMPILE_CXX([cxx-only.o], [cxx-only.cc]) +AT_CHECK([$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS c-only.o cxx-only.o -o c-and-cxx || + exit 77], [ignore], [ignore]) +AT_CHECK([./c-and-cxx]) +]) + + ## ---------------------------- ## ## Running a generated parser. ## ## ---------------------------- ## -- 2.7.4