mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
Currently we face test suite failures in different environments,
because of a conflict between the definitions of isnan by gnulib, and
by the C++ library:
262. headers.at:186: testing Sane headers: %locations %debug c++ ...
./headers.at:186: COLUMNS=1000; export COLUMNS; bison --color=no -fno-caret -d -o input.cc input.y
./headers.at:186: $CXX $CXXFLAGS $CPPFLAGS -c -o input.o input.cc
stderr:
In file included from /usr/include/c++/4.8.2/cmath:44:0,
from /usr/include/c++/4.8.2/random:38,
from /usr/include/c++/4.8.2/bits/stl_algo.h:65,
from /usr/include/c++/4.8.2/algorithm:62,
from location.hh:41,
from input.hh:90,
from input.cc:50:
/u/cs/fac/eggert/src/gnu/bison/lib/math.h: In function 'bool isnan(double)':
/u/cs/fac/eggert/src/gnu/bison/lib/math.h:2849:1: error: new declaration 'bool isnan(double)'
_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan, isnan, bool)
^
In file included from /usr/include/features.h:375:0,
from /usr/include/c++/4.8.2/x86_64-redhat-linux/bits/os_defines.h:39,
from /usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++config.h:2097,
from /usr/include/c++/4.8.2/cstdlib:41,
from input.hh:48,
from input.cc:50:
/usr/include/bits/mathcalls.h:235:1: error: ambiguates old declaration 'int isnan(double)'
__MATHDECL_1 (int,isnan,, (_Mdouble_ __value)) __attribute__ ((__const__));
^
There might be something to do in gnulib about this, but I believe
that gnulib should not be used in the test suite in the first place.
The test suite should work with other compilers than the one used to
compile the package. For a start, Bison sources are more
demanding (C99) than the generated parsers. Last time I tried, tcc
for example, was not able to compile Bison, yet our generated parsers
should compile cleanly with it.
Besides the problem at hand is with the C++ compiler, with is not the
one used to set up gnulib at configuration-time (config.h is mainly
built from probing the C compiler).
We should really not depend on gnulib in tests.
This was introduced in 2001 to check whether including
stdlib.h/string.h is safe thanks to STDC_HEADERS
(2ce1014469). Today, we assume at least
a C90 compiler, it should be safe enough.
* tests/local.at, tests/testsuite.h: Do not include config.h.
* tests/atlocal.in (conftest.cc): Likewise.
(CPPFLAGS): Do not expose lib/, as because of this we might picked up
gnulib replacement headers for system headers.
* tests/input.at: Use int instead of ptrdiff_t, for easier portability
(some machine on the CI did not find ptrdiff_t).
* tests/c++.at: Add missing include for getchar.
147 lines
4.2 KiB
Bash
147 lines
4.2 KiB
Bash
# @configure_input@ -*- shell-script -*-
|
|
# Configurable variable values for Bison test suite.
|
|
|
|
# Copyright (C) 2000-2015, 2018-2019 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 3 of the License, 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/>.
|
|
|
|
# We need 'testsuite.h' (srcdir/test).
|
|
CPPFLAGS="-I$abs_top_srcdir/tests @CPPFLAGS@"
|
|
|
|
# Don't just check if $POSIXLY_CORRECT is set, as Bash, when launched
|
|
# as /bin/sh, sets the shell variable POSIXLY_CORRECT to y, but not
|
|
# the environment variable.
|
|
if env | grep '^POSIXLY_CORRECT=' >/dev/null; then
|
|
POSIXLY_CORRECT_IS_EXPORTED=true
|
|
else
|
|
POSIXLY_CORRECT_IS_EXPORTED=false
|
|
fi
|
|
|
|
## ------------------- ##
|
|
## C/C++ Compilation. ##
|
|
## ------------------- ##
|
|
|
|
: ${CC='@CC@'}
|
|
: ${CXX='@CXX@'}
|
|
|
|
# Is the compiler GCC?
|
|
: ${GCC='@GCC@'}
|
|
|
|
# Sometimes a test group needs to ignore gcc warnings, so it locally
|
|
# sets CFLAGS to this.
|
|
: ${NO_WERROR_CFLAGS='@CFLAGS@ @WARN_CFLAGS@ @WARN_CFLAGS_TEST@'}
|
|
: ${NO_WERROR_CXXFLAGS='@CXXFLAGS@ @WARN_CXXFLAGS@ @WARN_CXXFLAGS_TEST@'}
|
|
: ${WNO_DEPRECATED_CXXFLAGS='@WNO_DEPRECATED_CXXFLAGS@'}
|
|
|
|
# But most of the time, we want -Werror.
|
|
: ${CFLAGS="$NO_WERROR_CFLAGS @WERROR_CFLAGS@"}
|
|
: ${CXXFLAGS="$NO_WERROR_CXXFLAGS @WERROR_CXXFLAGS@"}
|
|
|
|
# If 'exit 77'; skip all C++ tests; otherwise ':'.
|
|
: ${BISON_CXX_WORKS='@BISON_CXX_WORKS@'}
|
|
|
|
# Compiler flags to disable exception support.
|
|
: ${NO_EXCEPTIONS_CXXFLAGS='@NO_EXCEPTIONS_CXXFLAGS@'}
|
|
|
|
# Requiring a specific C++ standard.
|
|
: ${CXX98_CXXFLAGS='@CXX98_CXXFLAGS@'}
|
|
: ${CXX03_CXXFLAGS='@CXX03_CXXFLAGS@'}
|
|
: ${CXX11_CXXFLAGS='@CXX11_CXXFLAGS@'}
|
|
: ${CXX14_CXXFLAGS='@CXX14_CXXFLAGS@'}
|
|
: ${CXX17_CXXFLAGS='@CXX17_CXXFLAGS@'}
|
|
: ${CXX2A_CXXFLAGS='@CXX2A_CXXFLAGS@'}
|
|
|
|
# Be sure that the C++ compiler is not broken because of gnulib. This
|
|
# cannot be checked in configure (gnulib is not parameterized yet),
|
|
# and checking this in every C++ test in AC_COMPILE_CXX is too costly.
|
|
#
|
|
# http://lists.gnu.org/archive/html/bug-bison/2013-06/msg00001.html
|
|
#
|
|
# FIXME: Check (say 2014) whether this is still needed.
|
|
if $BISON_CXX_WORKS; then
|
|
# See AT_DATA_SOURCE_PROLOGUE.
|
|
cat >conftest.cc <<EOF
|
|
#include <testsuite.h>
|
|
#include <iostream>
|
|
|
|
int main ()
|
|
{
|
|
std::cout << "Works\n";
|
|
}
|
|
EOF
|
|
$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS $LIBS -o conftest conftest.cc
|
|
case $? in
|
|
0);;
|
|
*) BISON_CXX_WORKS="as_fn_error 77 cannot-compile-simple-program";;
|
|
esac
|
|
rm -fr conftest*
|
|
fi
|
|
|
|
# Whether the compiler supports POSIXLY_CORRECT defined.
|
|
: ${C_COMPILER_POSIXLY_CORRECT='@C_COMPILER_POSIXLY_CORRECT@'}
|
|
: ${CXX_COMPILER_POSIXLY_CORRECT='@CXX_COMPILER_POSIXLY_CORRECT@'}
|
|
|
|
if $POSIXLY_CORRECT_IS_EXPORTED; then
|
|
$C_COMPILER_POSIXLY_CORRECT || BISON_C_WORKS=false
|
|
$CXX_COMPILER_POSIXLY_CORRECT || BISON_CXX_WORKS=false
|
|
fi
|
|
|
|
# Handle --compile-c-with-cxx here, once CXX and CXXFLAGS are known.
|
|
if "$at_arg_compile_c_with_cxx"; then
|
|
CC_IS_CXX=1
|
|
CC=$CXX
|
|
NO_WERROR_CFLAGS=$NO_WERROR_CXXFLAGS
|
|
CFLAGS="$CXXFLAGS $WNO_DEPRECATED_CXXFLAGS"
|
|
BISON_C_WORKS=$BISON_CXX_WORKS
|
|
else
|
|
CC_IS_CXX=0
|
|
fi
|
|
|
|
|
|
## ------- ##
|
|
## Other. ##
|
|
## ------- ##
|
|
|
|
# Empty if no D compiler was found.
|
|
: ${DC='@DC@'}
|
|
: ${DCFLAGS='@DCFLAGS@'}
|
|
if test x"$DC" = x; then
|
|
BISON_DC_WORKS=false
|
|
else
|
|
BISON_DC_WORKS=true
|
|
fi
|
|
|
|
# Empty if no javac was found
|
|
: ${CONF_JAVAC='@CONF_JAVAC@'}
|
|
|
|
# Empty if no Java VM was found
|
|
: ${CONF_JAVA='@CONF_JAVA@'}
|
|
|
|
# We need egrep and perl.
|
|
: ${EGREP='@EGREP@'}
|
|
: ${PERL='@PERL@'}
|
|
|
|
# Use simple quotes (lib/quote.c).
|
|
LC_CTYPE=C
|
|
export LC_CTYPE
|
|
|
|
# Are special link options needed?
|
|
: ${LDFLAGS='@LDFLAGS@'}
|
|
|
|
# Are special libraries needed?
|
|
: ${LIBS="$abs_top_builddir/lib/libbison.a @LIBS@ @INTLLIBS@"}
|
|
|
|
# Empty if no xsltproc was found
|
|
: ${XSLTPROC='@XSLTPROC@'}
|