| # ansi-c++.m4 | |
| # serial 13 | |
| dnl Copyright (C) 2002-2003, 2005, 2010-2026 Free Software Foundation, Inc. | |
| dnl This file is free software; the Free Software Foundation | |
| dnl gives unlimited permission to copy and/or distribute it, | |
| dnl with or without modifications, as long as this notice is preserved. | |
| dnl This file is offered as-is, without any warranty. | |
| dnl From Bruno Haible. | |
| # Sets CXX_CHOICE to 'yes' or 'no', depending on the preferred use of C++. | |
| # The default is 'yes'. If the configure.ac contains a definition of the | |
| # macro gl_CXX_CHOICE_DEFAULT_NO, then the default is 'no'. In both cases, | |
| # the user can change the value by passing the option --disable-cxx or | |
| # --enable-cxx, respectively. | |
| AC_DEFUN([gl_CXX_CHOICE], | |
| [ | |
| AC_MSG_CHECKING([whether to use C++]) | |
| dnl Plus signs are supported in AC_ARG_ENABLE starting with autoconf-2.66. | |
| m4_version_prereq([2.66], | |
| [m4_ifdef([gl_CXX_CHOICE_DEFAULT_NO], | |
| [AC_ARG_ENABLE([c++], | |
| [ --enable-c++ also build C++ sources], | |
| [CXX_CHOICE="$enableval"], | |
| [CXX_CHOICE=no])], | |
| [AC_ARG_ENABLE([c++], | |
| [ --disable-c++ do not build C++ sources], | |
| [CXX_CHOICE="$enableval"], | |
| [CXX_CHOICE=yes])])], | |
| [m4_ifdef([gl_CXX_CHOICE_DEFAULT_NO], | |
| [AC_ARG_ENABLE([cxx], | |
| [ --enable-cxx also build C++ sources], | |
| [CXX_CHOICE="$enableval"], | |
| [CXX_CHOICE=no])], | |
| [AC_ARG_ENABLE([cxx], | |
| [ --disable-cxx do not build C++ sources], | |
| [CXX_CHOICE="$enableval"], | |
| [CXX_CHOICE=yes])])]) | |
| AC_MSG_RESULT([$CXX_CHOICE]) | |
| AC_SUBST([CXX_CHOICE]) | |
| ]) | |
| # gl_PROG_ANSI_CXX([ANSICXX_VARIABLE], [ANSICXX_CONDITIONAL]) | |
| # Sets ANSICXX_VARIABLE to the name of a sufficiently ANSI C++ compliant | |
| # compiler, or to "no" if none is found. | |
| # Defines the Automake condition ANSICXX_CONDITIONAL to true if such a compiler | |
| # was found, or to false if not. | |
| AC_DEFUN([gl_PROG_ANSI_CXX], | |
| [ | |
| AC_REQUIRE([gl_CXX_CHOICE]) | |
| m4_if([$1], [CXX], [], | |
| [gl_saved_CXX="$CXX"]) | |
| if test "$CXX_CHOICE" = no; then | |
| CXX=no | |
| fi | |
| if test -z "$CXX"; then | |
| if test -n "$CCC"; then | |
| CXX="$CCC" | |
| else | |
| AC_CHECK_TOOLS([CXX], | |
| [g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC], | |
| [:]) | |
| fi | |
| fi | |
| if test "$CXX" != no; then | |
| dnl Use a modified version of AC_PROG_CXX_WORKS that does not exit | |
| dnl upon failure. | |
| AC_MSG_CHECKING([whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works]) | |
| AC_LANG_PUSH([C++]) | |
| AC_ARG_VAR([CXX], [C++ compiler command]) | |
| AC_ARG_VAR([CXXFLAGS], [C++ compiler flags]) | |
| echo 'int main () { return 0; }' > conftest.$ac_ext | |
| if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then | |
| gl_cv_prog_ansicxx_works=yes | |
| if (./conftest; exit) 2>/dev/null; then | |
| gl_cv_prog_ansicxx_cross=no | |
| else | |
| gl_cv_prog_ansicxx_cross=yes | |
| fi | |
| else | |
| gl_cv_prog_ansicxx_works=no | |
| fi | |
| rm -fr conftest* | |
| AC_LANG_POP([C++]) | |
| AC_MSG_RESULT([$gl_cv_prog_ansicxx_works]) | |
| if test $gl_cv_prog_ansicxx_works = no; then | |
| CXX=no | |
| else | |
| dnl Test for namespaces. | |
| dnl We don't bother supporting pre-ANSI-C++ compilers. | |
| AC_MSG_CHECKING([whether the C++ compiler supports namespaces]) | |
| AC_LANG_PUSH([C++]) | |
| cat <<EOF > conftest.$ac_ext | |
| #include <iostream> | |
| namespace test { using namespace std; } | |
| std::ostream* ptr; | |
| int main () { return 0; } | |
| EOF | |
| if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then | |
| gl_cv_prog_ansicxx_namespaces=yes | |
| else | |
| gl_cv_prog_ansicxx_namespaces=no | |
| fi | |
| rm -fr conftest* | |
| AC_LANG_POP([C++]) | |
| AC_MSG_RESULT([$gl_cv_prog_ansicxx_namespaces]) | |
| if test $gl_cv_prog_ansicxx_namespaces = no; then | |
| CXX=no | |
| fi | |
| fi | |
| fi | |
| m4_if([$1], [CXX], [], | |
| [$1="$CXX" | |
| CXX="$gl_saved_CXX"]) | |
| AC_SUBST([$1]) | |
| AM_CONDITIONAL([$2], [test "$$1" != no]) | |
| if test "$$1" != no; then | |
| dnl This macro invocation resolves an automake error: | |
| dnl /usr/local/share/automake-1.11/am/depend2.am: am__fastdepCXX does not appear in AM_CONDITIONAL | |
| dnl /usr/local/share/automake-1.11/am/depend2.am: The usual way to define 'am__fastdepCXX' is to add 'AC_PROG_CXX' | |
| dnl /usr/local/share/automake-1.11/am/depend2.am: to 'configure.ac' and run 'aclocal' and 'autoconf' again. | |
| _AM_DEPENDENCIES([CXX]) | |
| dnl Determine a good default for the CXXFLAGS variable. | |
| AC_LANG_PUSH([C++]) | |
| _AC_LANG_COMPILER_GNU | |
| if test $ac_compiler_gnu = yes; then | |
| GXX=yes | |
| else | |
| GXX= | |
| fi | |
| _AC_PROG_CXX_G | |
| AC_LANG_POP([C++]) | |
| else | |
| AM_CONDITIONAL([am__fastdepCXX], [false]) | |
| fi | |
| ]) | |
| # gl_ANSI_CXX | |
| # Sets CXX to the name of a sufficiently ANSI C++ compliant compiler, or to | |
| # "no" if none is found. | |
| # Defines the Automake condition ANSICXX to true if such a compiler was found, | |
| # or to false if not. | |
| AC_DEFUN([gl_ANSI_CXX], | |
| [ | |
| gl_PROG_ANSI_CXX([CXX], [ANSICXX]) | |
| dnl This line is needed in order to avoid trouble with Autoconf. It makes | |
| dnl sure that Autoconf does not insert expansions of AC_PROG_CXX at random | |
| dnl places. See <https://savannah.gnu.org/support/?110294>. | |
| m4_provide([AC_PROG_CXX]) | |
| ]) |