Blame m4/std-gnu11.m4

Packit Service 4684c1
# Prefer GNU C11 and C++11 to earlier versions.  -*- coding: utf-8 -*-
Packit Service 4684c1
Packit Service 4684c1
# This implementation is taken from GNU Autoconf lib/autoconf/c.m4
Packit Service 4684c1
# commit 017d5ddd82854911f0119691d91ea8a1438824d6
Packit Service 4684c1
# dated Sun Apr 3 13:57:17 2016 -0700
Packit Service 4684c1
# This implementation will be obsolete once we can assume Autoconf 2.70
Packit Service 4684c1
# or later is installed everywhere a Gnulib program might be developed.
Packit Service 4684c1
Packit Service 4684c1
Packit Service 4684c1
# Copyright (C) 2001-2020 Free Software Foundation, Inc.
Packit Service 4684c1
Packit Service 4684c1
# This program is free software; you can redistribute it and/or modify
Packit Service 4684c1
# it under the terms of the GNU General Public License as published by
Packit Service 4684c1
# the Free Software Foundation, either version 3 of the License, or
Packit Service 4684c1
# (at your option) any later version.
Packit Service 4684c1
#
Packit Service 4684c1
# This program is distributed in the hope that it will be useful,
Packit Service 4684c1
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 4684c1
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 4684c1
# GNU General Public License for more details.
Packit Service 4684c1
#
Packit Service 4684c1
# You should have received a copy of the GNU General Public License
Packit Service 4684c1
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
Packit Service 4684c1
Packit Service 4684c1
# Written by David MacKenzie, with help from
Packit Service 4684c1
# Akim Demaille, Paul Eggert,
Packit Service 4684c1
# François Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
Packit Service 4684c1
# Roland McGrath, Noah Friedman, david d zuhn, and many others.
Packit Service 4684c1
Packit Service 4684c1
Packit Service 4684c1
# AC_PROG_CC([COMPILER ...])
Packit Service 4684c1
# --------------------------
Packit Service 4684c1
# COMPILER ... is a space separated list of C compilers to search for.
Packit Service 4684c1
# This just gives the user an opportunity to specify an alternative
Packit Service 4684c1
# search list for the C compiler.
Packit Service 4684c1
AC_DEFUN_ONCE([AC_PROG_CC],
Packit Service 4684c1
[AC_LANG_PUSH(C)dnl
Packit Service 4684c1
AC_ARG_VAR([CC],     [C compiler command])dnl
Packit Service 4684c1
AC_ARG_VAR([CFLAGS], [C compiler flags])dnl
Packit Service 4684c1
_AC_ARG_VAR_LDFLAGS()dnl
Packit Service 4684c1
_AC_ARG_VAR_LIBS()dnl
Packit Service 4684c1
_AC_ARG_VAR_CPPFLAGS()dnl
Packit Service 4684c1
m4_ifval([$1],
Packit Service 4684c1
      [AC_CHECK_TOOLS(CC, [$1])],
Packit Service 4684c1
[AC_CHECK_TOOL(CC, gcc)
Packit Service 4684c1
if test -z "$CC"; then
Packit Service 4684c1
  dnl Here we want:
Packit Service 4684c1
  dnl	AC_CHECK_TOOL(CC, cc)
Packit Service 4684c1
  dnl but without the check for a tool without the prefix.
Packit Service 4684c1
  dnl Until the check is removed from there, copy the code:
Packit Service 4684c1
  if test -n "$ac_tool_prefix"; then
Packit Service 4684c1
    AC_CHECK_PROG(CC, [${ac_tool_prefix}cc], [${ac_tool_prefix}cc])
Packit Service 4684c1
  fi
Packit Service 4684c1
fi
Packit Service 4684c1
if test -z "$CC"; then
Packit Service 4684c1
  AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
Packit Service 4684c1
fi
Packit Service 4684c1
if test -z "$CC"; then
Packit Service 4684c1
  AC_CHECK_TOOLS(CC, cl.exe)
Packit Service 4684c1
fi
Packit Service 4684c1
if test -z "$CC"; then
Packit Service 4684c1
  AC_CHECK_TOOL(CC, clang)
Packit Service 4684c1
fi
Packit Service 4684c1
])
Packit Service 4684c1
Packit Service 4684c1
test -z "$CC" && AC_MSG_FAILURE([no acceptable C compiler found in \$PATH])
Packit Service 4684c1
Packit Service 4684c1
# Provide some information about the compiler.
Packit Service 4684c1
_AS_ECHO_LOG([checking for _AC_LANG compiler version])
Packit Service 4684c1
set X $ac_compile
Packit Service 4684c1
ac_compiler=$[2]
Packit Service 4684c1
for ac_option in --version -v -V -qversion -version; do
Packit Service 4684c1
  m4_ifdef([_AC_DO_LIMIT],[_AC_DO_LIMIT],[_AC_DO])([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD])
Packit Service 4684c1
done
Packit Service 4684c1
Packit Service 4684c1
m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
Packit Service 4684c1
m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
Packit Service 4684c1
_AC_LANG_COMPILER_GNU
Packit Service 4684c1
if test $ac_compiler_gnu = yes; then
Packit Service 4684c1
  GCC=yes
Packit Service 4684c1
else
Packit Service 4684c1
  GCC=
Packit Service 4684c1
fi
Packit Service 4684c1
_AC_PROG_CC_G
Packit Service 4684c1
dnl
Packit Service 4684c1
dnl Set ac_prog_cc_stdc to the supported C version.
Packit Service 4684c1
dnl Also set the documented variable ac_cv_prog_cc_stdc;
Packit Service 4684c1
dnl its name was chosen when it was cached, but it is no longer cached.
Packit Service 4684c1
_AC_PROG_CC_C11([ac_prog_cc_stdc=c11
Packit Service 4684c1
		 ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11],
Packit Service 4684c1
  [_AC_PROG_CC_C99([ac_prog_cc_stdc=c99
Packit Service 4684c1
		    ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99],
Packit Service 4684c1
     [_AC_PROG_CC_C89([ac_prog_cc_stdc=c89
Packit Service 4684c1
		       ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89],
Packit Service 4684c1
		      [ac_prog_cc_stdc=no
Packit Service 4684c1
		       ac_cv_prog_cc_stdc=no])])])
Packit Service 4684c1
dnl
Packit Service 4684c1
AC_LANG_POP(C)dnl
Packit Service 4684c1
])# AC_PROG_CC
Packit Service 4684c1
Packit Service 4684c1
Packit Service 4684c1
Packit Service 4684c1
# AC_PROG_CXX([LIST-OF-COMPILERS])
Packit Service 4684c1
# --------------------------------
Packit Service 4684c1
# LIST-OF-COMPILERS is a space separated list of C++ compilers to search
Packit Service 4684c1
# for (if not specified, a default list is used).  This just gives the
Packit Service 4684c1
# user an opportunity to specify an alternative search list for the C++
Packit Service 4684c1
# compiler.
Packit Service 4684c1
# aCC	HP-UX C++ compiler much better than `CC', so test before.
Packit Service 4684c1
# FCC   Fujitsu C++ compiler
Packit Service 4684c1
# KCC	KAI C++ compiler
Packit Service 4684c1
# RCC	Rational C++
Packit Service 4684c1
# xlC_r	AIX C Set++ (with support for reentrant code)
Packit Service 4684c1
# xlC	AIX C Set++
Packit Service 4684c1
AC_DEFUN([AC_PROG_CXX],
Packit Service 4684c1
[AC_LANG_PUSH(C++)dnl
Packit Service 4684c1
AC_ARG_VAR([CXX],      [C++ compiler command])dnl
Packit Service 4684c1
AC_ARG_VAR([CXXFLAGS], [C++ compiler flags])dnl
Packit Service 4684c1
_AC_ARG_VAR_LDFLAGS()dnl
Packit Service 4684c1
_AC_ARG_VAR_LIBS()dnl
Packit Service 4684c1
_AC_ARG_VAR_CPPFLAGS()dnl
Packit Service 4684c1
_AC_ARG_VAR_PRECIOUS([CCC])dnl
Packit Service 4684c1
if test -z "$CXX"; then
Packit Service 4684c1
  if test -n "$CCC"; then
Packit Service 4684c1
    CXX=$CCC
Packit Service 4684c1
  else
Packit Service 4684c1
    AC_CHECK_TOOLS(CXX,
Packit Service 4684c1
		   [m4_default([$1],
Packit Service 4684c1
			       [g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++])],
Packit Service 4684c1
		   g++)
Packit Service 4684c1
  fi
Packit Service 4684c1
fi
Packit Service 4684c1
# Provide some information about the compiler.
Packit Service 4684c1
_AS_ECHO_LOG([checking for _AC_LANG compiler version])
Packit Service 4684c1
set X $ac_compile
Packit Service 4684c1
ac_compiler=$[2]
Packit Service 4684c1
for ac_option in --version -v -V -qversion; do
Packit Service 4684c1
  m4_ifdef([_AC_DO_LIMIT],[_AC_DO_LIMIT],[_AC_DO])([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD])
Packit Service 4684c1
done
Packit Service 4684c1
Packit Service 4684c1
m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
Packit Service 4684c1
m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
Packit Service 4684c1
_AC_LANG_COMPILER_GNU
Packit Service 4684c1
if test $ac_compiler_gnu = yes; then
Packit Service 4684c1
  GXX=yes
Packit Service 4684c1
else
Packit Service 4684c1
  GXX=
Packit Service 4684c1
fi
Packit Service 4684c1
_AC_PROG_CXX_G
Packit Service 4684c1
_AC_PROG_CXX_CXX11([ac_prog_cxx_stdcxx=cxx11
Packit Service 4684c1
		    ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11
Packit Service 4684c1
		    ac_cv_prog_cxx_cxx98=$ac_cv_prog_cxx_cxx11],
Packit Service 4684c1
   [_AC_PROG_CXX_CXX98([ac_prog_cxx_stdcxx=cxx98
Packit Service 4684c1
		        ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98],
Packit Service 4684c1
		       [ac_prog_cxx_stdcxx=no
Packit Service 4684c1
		        ac_cv_prog_cxx_stdcxx=no])])
Packit Service 4684c1
AC_LANG_POP(C++)dnl
Packit Service 4684c1
])# AC_PROG_CXX
Packit Service 4684c1
Packit Service 4684c1
Packit Service 4684c1
# _AC_C_STD_TRY(STANDARD, TEST-PROLOGUE, TEST-BODY, OPTION-LIST,
Packit Service 4684c1
#		ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE)
Packit Service 4684c1
# --------------------------------------------------------------
Packit Service 4684c1
# Check whether the C compiler accepts features of STANDARD (e.g `c89', `c99')
Packit Service 4684c1
# by trying to compile a program of TEST-PROLOGUE and TEST-BODY.  If this fails,
Packit Service 4684c1
# try again with each compiler option in the space-separated OPTION-LIST; if one
Packit Service 4684c1
# helps, append it to CC.  If eventually successful, run ACTION-IF-AVAILABLE,
Packit Service 4684c1
# else ACTION-IF-UNAVAILABLE.
Packit Service 4684c1
AC_DEFUN([_AC_C_STD_TRY],
Packit Service 4684c1
[AC_MSG_CHECKING([for $CC option to enable ]m4_translit($1, [c], [C])[ features])
Packit Service 4684c1
AC_CACHE_VAL(ac_cv_prog_cc_$1,
Packit Service 4684c1
[ac_cv_prog_cc_$1=no
Packit Service 4684c1
ac_save_CC=$CC
Packit Service 4684c1
AC_LANG_CONFTEST([AC_LANG_PROGRAM([$2], [$3])])
Packit Service 4684c1
for ac_arg in '' $4
Packit Service 4684c1
do
Packit Service 4684c1
  CC="$ac_save_CC $ac_arg"
Packit Service 4684c1
  _AC_COMPILE_IFELSE([], [ac_cv_prog_cc_$1=$ac_arg])
Packit Service 4684c1
  test "x$ac_cv_prog_cc_$1" != "xno" && break
Packit Service 4684c1
done
Packit Service 4684c1
rm -f conftest.$ac_ext
Packit Service 4684c1
CC=$ac_save_CC
Packit Service 4684c1
])# AC_CACHE_VAL
Packit Service 4684c1
ac_prog_cc_stdc_options=
Packit Service 4684c1
case "x$ac_cv_prog_cc_$1" in
Packit Service 4684c1
  x)
Packit Service 4684c1
    AC_MSG_RESULT([none needed]) ;;
Packit Service 4684c1
  xno)
Packit Service 4684c1
    AC_MSG_RESULT([unsupported]) ;;
Packit Service 4684c1
  *)
Packit Service 4684c1
    ac_prog_cc_stdc_options=" $ac_cv_prog_cc_$1"
Packit Service 4684c1
    CC=$CC$ac_prog_cc_stdc_options
Packit Service 4684c1
    AC_MSG_RESULT([$ac_cv_prog_cc_$1]) ;;
Packit Service 4684c1
esac
Packit Service 4684c1
AS_IF([test "x$ac_cv_prog_cc_$1" != xno], [$5], [$6])
Packit Service 4684c1
])# _AC_C_STD_TRY
Packit Service 4684c1
Packit Service 4684c1
# _AC_C_C99_TEST_HEADER
Packit Service 4684c1
# ---------------------
Packit Service 4684c1
# A C header suitable for testing for C99.
Packit Service 4684c1
AC_DEFUN([_AC_C_C99_TEST_HEADER],
Packit Service 4684c1
[[#include <stdarg.h>
Packit Service 4684c1
#include <stdbool.h>
Packit Service 4684c1
#include <stddef.h>
Packit Service 4684c1
#include <stdlib.h>
Packit Service 4684c1
#include <wchar.h>
Packit Service 4684c1
#include <stdio.h>
Packit Service 4684c1
Packit Service 4684c1
// Check varargs macros.  These examples are taken from C99 6.10.3.5.
Packit Service 4684c1
#define debug(...) fprintf (stderr, __VA_ARGS__)
Packit Service 4684c1
#define showlist(...) puts (#__VA_ARGS__)
Packit Service 4684c1
#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
Packit Service 4684c1
static void
Packit Service 4684c1
test_varargs_macros (void)
Packit Service 4684c1
{
Packit Service 4684c1
  int x = 1234;
Packit Service 4684c1
  int y = 5678;
Packit Service 4684c1
  debug ("Flag");
Packit Service 4684c1
  debug ("X = %d\n", x);
Packit Service 4684c1
  showlist (The first, second, and third items.);
Packit Service 4684c1
  report (x>y, "x is %d but y is %d", x, y);
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
// Check long long types.
Packit Service 4684c1
#define BIG64 18446744073709551615ull
Packit Service 4684c1
#define BIG32 4294967295ul
Packit Service 4684c1
#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
Packit Service 4684c1
#if !BIG_OK
Packit Service 4684c1
  your preprocessor is broken;
Packit Service 4684c1
#endif
Packit Service 4684c1
#if BIG_OK
Packit Service 4684c1
#else
Packit Service 4684c1
  your preprocessor is broken;
Packit Service 4684c1
#endif
Packit Service 4684c1
static long long int bignum = -9223372036854775807LL;
Packit Service 4684c1
static unsigned long long int ubignum = BIG64;
Packit Service 4684c1
Packit Service 4684c1
struct incomplete_array
Packit Service 4684c1
{
Packit Service 4684c1
  int datasize;
Packit Service 4684c1
  double data[];
Packit Service 4684c1
};
Packit Service 4684c1
Packit Service 4684c1
struct named_init {
Packit Service 4684c1
  int number;
Packit Service 4684c1
  const wchar_t *name;
Packit Service 4684c1
  double average;
Packit Service 4684c1
};
Packit Service 4684c1
Packit Service 4684c1
typedef const char *ccp;
Packit Service 4684c1
Packit Service 4684c1
static inline int
Packit Service 4684c1
test_restrict (ccp restrict text)
Packit Service 4684c1
{
Packit Service 4684c1
  // See if C++-style comments work.
Packit Service 4684c1
  // Iterate through items via the restricted pointer.
Packit Service 4684c1
  // Also check for declarations in for loops.
Packit Service 4684c1
  for (unsigned int i = 0; *(text+i) != '\0'; ++i)
Packit Service 4684c1
    continue;
Packit Service 4684c1
  return 0;
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
// Check varargs and va_copy.
Packit Service 4684c1
static bool
Packit Service 4684c1
test_varargs (const char *format, ...)
Packit Service 4684c1
{
Packit Service 4684c1
  va_list args;
Packit Service 4684c1
  va_start (args, format);
Packit Service 4684c1
  va_list args_copy;
Packit Service 4684c1
  va_copy (args_copy, args);
Packit Service 4684c1
Packit Service 4684c1
  const char *str = "";
Packit Service 4684c1
  int number = 0;
Packit Service 4684c1
  float fnumber = 0;
Packit Service 4684c1
Packit Service 4684c1
  while (*format)
Packit Service 4684c1
    {
Packit Service 4684c1
      switch (*format++)
Packit Service 4684c1
	{
Packit Service 4684c1
	case 's': // string
Packit Service 4684c1
	  str = va_arg (args_copy, const char *);
Packit Service 4684c1
	  break;
Packit Service 4684c1
	case 'd': // int
Packit Service 4684c1
	  number = va_arg (args_copy, int);
Packit Service 4684c1
	  break;
Packit Service 4684c1
	case 'f': // float
Packit Service 4684c1
	  fnumber = va_arg (args_copy, double);
Packit Service 4684c1
	  break;
Packit Service 4684c1
	default:
Packit Service 4684c1
	  break;
Packit Service 4684c1
	}
Packit Service 4684c1
    }
Packit Service 4684c1
  va_end (args_copy);
Packit Service 4684c1
  va_end (args);
Packit Service 4684c1
Packit Service 4684c1
  return *str && number && fnumber;
Packit Service 4684c1
}]])# _AC_C_C99_TEST_HEADER
Packit Service 4684c1
Packit Service 4684c1
# _AC_C_C99_TEST_BODY
Packit Service 4684c1
# -------------------
Packit Service 4684c1
# A C body suitable for testing for C99, assuming the corresponding header.
Packit Service 4684c1
AC_DEFUN([_AC_C_C99_TEST_BODY],
Packit Service 4684c1
[[
Packit Service 4684c1
  // Check bool.
Packit Service 4684c1
  _Bool success = false;
Packit Service 4684c1
Packit Service 4684c1
  // Check restrict.
Packit Service 4684c1
  if (test_restrict ("String literal") == 0)
Packit Service 4684c1
    success = true;
Packit Service 4684c1
  char *restrict newvar = "Another string";
Packit Service 4684c1
Packit Service 4684c1
  // Check varargs.
Packit Service 4684c1
  success &= test_varargs ("s, d' f .", "string", 65, 34.234);
Packit Service 4684c1
  test_varargs_macros ();
Packit Service 4684c1
Packit Service 4684c1
  // Check flexible array members.
Packit Service 4684c1
  struct incomplete_array *ia =
Packit Service 4684c1
    malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
Packit Service 4684c1
  ia->datasize = 10;
Packit Service 4684c1
  for (int i = 0; i < ia->datasize; ++i)
Packit Service 4684c1
    ia->data[i] = i * 1.234;
Packit Service 4684c1
Packit Service 4684c1
  // Check named initializers.
Packit Service 4684c1
  struct named_init ni = {
Packit Service 4684c1
    .number = 34,
Packit Service 4684c1
    .name = L"Test wide string",
Packit Service 4684c1
    .average = 543.34343,
Packit Service 4684c1
  };
Packit Service 4684c1
Packit Service 4684c1
  ni.number = 58;
Packit Service 4684c1
Packit Service 4684c1
  int dynamic_array[ni.number];
Packit Service 4684c1
  dynamic_array[ni.number - 1] = 543;
Packit Service 4684c1
Packit Service 4684c1
  // work around unused variable warnings
Packit Service 4684c1
  return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
Packit Service 4684c1
	  || dynamic_array[ni.number - 1] != 543);
Packit Service 4684c1
]])
Packit Service 4684c1
Packit Service 4684c1
# _AC_PROG_CC_C99 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE])
Packit Service 4684c1
# ----------------------------------------------------------------
Packit Service 4684c1
# If the C compiler is not in ISO C99 mode by default, try to add an
Packit Service 4684c1
# option to output variable CC to make it so.  This macro tries
Packit Service 4684c1
# various options that select ISO C99 on some system or another.  It
Packit Service 4684c1
# considers the compiler to be in ISO C99 mode if it handles _Bool,
Packit Service 4684c1
# // comments, flexible array members, inline, long long int, mixed
Packit Service 4684c1
# code and declarations, named initialization of structs, restrict,
Packit Service 4684c1
# va_copy, varargs macros, variable declarations in for loops and
Packit Service 4684c1
# variable length arrays.
Packit Service 4684c1
AC_DEFUN([_AC_PROG_CC_C99],
Packit Service 4684c1
[_AC_C_STD_TRY([c99],
Packit Service 4684c1
[_AC_C_C99_TEST_HEADER],
Packit Service 4684c1
[_AC_C_C99_TEST_BODY],
Packit Service 4684c1
dnl Try
Packit Service 4684c1
dnl GCC		-std=gnu99 (unused restrictive modes: -std=c99 -std=iso9899:1999)
Packit Service 4684c1
dnl IBM XL C	-qlanglvl=extc1x (V12.1; does not pass C11 test)
Packit Service 4684c1
dnl IBM XL C	-qlanglvl=extc99
Packit Service 4684c1
dnl		(pre-V12.1; unused restrictive mode: -qlanglvl=stdc99)
Packit Service 4684c1
dnl HP cc	-AC99
Packit Service 4684c1
dnl Intel ICC	-std=c99, -c99 (deprecated)
Packit Service 4684c1
dnl IRIX	-c99
Packit Service 4684c1
dnl Solaris	-D_STDC_C99=
Packit Service 4684c1
dnl		cc's -xc99 option uses linker magic to define the external
Packit Service 4684c1
dnl		symbol __xpg4 as if by "int __xpg4 = 1;", which enables C99
Packit Service 4684c1
dnl		behavior for C library functions.  This is not wanted here,
Packit Service 4684c1
dnl		because it means that a single module compiled with -xc99
Packit Service 4684c1
dnl		alters C runtime behavior for the entire program, not for
Packit Service 4684c1
dnl		just the module.  Instead, define the (private) symbol
Packit Service 4684c1
dnl		_STDC_C99, which suppresses a bogus failure in <stdbool.h>.
Packit Service 4684c1
dnl		The resulting compiler passes the test case here, and that's
Packit Service 4684c1
dnl		good enough.  For more, please see the thread starting at:
Packit Service 4684c1
dnl            https://lists.gnu.org/r/autoconf/2010-12/msg00059.html
Packit Service 4684c1
dnl Tru64	-c99
Packit Service 4684c1
dnl with extended modes being tried first.
Packit Service 4684c1
[[-std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc1x -qlanglvl=extc99]], [$1], [$2])[]dnl
Packit Service 4684c1
])# _AC_PROG_CC_C99
Packit Service 4684c1
Packit Service 4684c1
Packit Service 4684c1
# _AC_PROG_CC_C11 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE])
Packit Service 4684c1
# ----------------------------------------------------------------
Packit Service 4684c1
# If the C compiler is not in ISO C11 mode by default, try to add an
Packit Service 4684c1
# option to output variable CC to make it so.  This macro tries
Packit Service 4684c1
# various options that select ISO C11 on some system or another.  It
Packit Service 4684c1
# considers the compiler to be in ISO C11 mode if it handles _Alignas,
Packit Service 4684c1
# _Alignof, _Noreturn, _Static_assert, UTF-8 string literals,
Packit Service 4684c1
# duplicate typedefs, and anonymous structures and unions.
Packit Service 4684c1
AC_DEFUN([_AC_PROG_CC_C11],
Packit Service 4684c1
[_AC_C_STD_TRY([c11],
Packit Service 4684c1
[_AC_C_C99_TEST_HEADER[
Packit Service 4684c1
// Check _Alignas.
Packit Service 4684c1
char _Alignas (double) aligned_as_double;
Packit Service 4684c1
char _Alignas (0) no_special_alignment;
Packit Service 4684c1
extern char aligned_as_int;
Packit Service 4684c1
char _Alignas (0) _Alignas (int) aligned_as_int;
Packit Service 4684c1
Packit Service 4684c1
// Check _Alignof.
Packit Service 4684c1
enum
Packit Service 4684c1
{
Packit Service 4684c1
  int_alignment = _Alignof (int),
Packit Service 4684c1
  int_array_alignment = _Alignof (int[100]),
Packit Service 4684c1
  char_alignment = _Alignof (char)
Packit Service 4684c1
};
Packit Service 4684c1
_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
Packit Service 4684c1
Packit Service 4684c1
// Check _Noreturn.
Packit Service 4684c1
int _Noreturn does_not_return (void) { for (;;) continue; }
Packit Service 4684c1
Packit Service 4684c1
// Check _Static_assert.
Packit Service 4684c1
struct test_static_assert
Packit Service 4684c1
{
Packit Service 4684c1
  int x;
Packit Service 4684c1
  _Static_assert (sizeof (int) <= sizeof (long int),
Packit Service 4684c1
                  "_Static_assert does not work in struct");
Packit Service 4684c1
  long int y;
Packit Service 4684c1
};
Packit Service 4684c1
Packit Service 4684c1
// Check UTF-8 literals.
Packit Service 4684c1
#define u8 syntax error!
Packit Service 4684c1
char const utf8_literal[] = u8"happens to be ASCII" "another string";
Packit Service 4684c1
Packit Service 4684c1
// Check duplicate typedefs.
Packit Service 4684c1
typedef long *long_ptr;
Packit Service 4684c1
typedef long int *long_ptr;
Packit Service 4684c1
typedef long_ptr long_ptr;
Packit Service 4684c1
Packit Service 4684c1
// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
Packit Service 4684c1
struct anonymous
Packit Service 4684c1
{
Packit Service 4684c1
  union {
Packit Service 4684c1
    struct { int i; int j; };
Packit Service 4684c1
    struct { int k; long int l; } w;
Packit Service 4684c1
  };
Packit Service 4684c1
  int m;
Packit Service 4684c1
} v1;
Packit Service 4684c1
]],
Packit Service 4684c1
[_AC_C_C99_TEST_BODY[
Packit Service 4684c1
  v1.i = 2;
Packit Service 4684c1
  v1.w.k = 5;
Packit Service 4684c1
  _Static_assert ((offsetof (struct anonymous, i)
Packit Service 4684c1
		   == offsetof (struct anonymous, w.k)),
Packit Service 4684c1
		  "Anonymous union alignment botch");
Packit Service 4684c1
]],
Packit Service 4684c1
dnl Try
Packit Service 4684c1
dnl GCC		-std=gnu11 (unused restrictive mode: -std=c11)
Packit Service 4684c1
dnl with extended modes being tried first.
Packit Service 4684c1
dnl
Packit Service 4684c1
dnl Do not try -qlanglvl=extc1x, because IBM XL C V12.1 (the latest version as
Packit Service 4684c1
dnl of September 2012) does not pass the C11 test.  For now, try extc1x when
Packit Service 4684c1
dnl compiling the C99 test instead, since it enables _Static_assert and
Packit Service 4684c1
dnl _Noreturn, which is a win.  If -qlanglvl=extc11 or -qlanglvl=extc1x passes
Packit Service 4684c1
dnl the C11 test in some future version of IBM XL C, we'll add it here,
Packit Service 4684c1
dnl preferably extc11.
Packit Service 4684c1
[[-std=gnu11]], [$1], [$2])[]dnl
Packit Service 4684c1
])# _AC_PROG_CC_C11
Packit Service 4684c1
Packit Service 4684c1
Packit Service 4684c1
# AC_PROG_CC_C89
Packit Service 4684c1
# --------------
Packit Service 4684c1
# Do not use AU_ALIAS here and in AC_PROG_CC_C99 and AC_PROG_CC_STDC,
Packit Service 4684c1
# as that'd be incompatible with how Automake redefines AC_PROG_CC.  See
Packit Service 4684c1
# <https://lists.gnu.org/r/autoconf/2012-10/msg00048.html>.
Packit Service 4684c1
AU_DEFUN([AC_PROG_CC_C89],
Packit Service 4684c1
  [AC_REQUIRE([AC_PROG_CC])],
Packit Service 4684c1
  [$0 is obsolete; use AC_PROG_CC]
Packit Service 4684c1
)
Packit Service 4684c1
Packit Service 4684c1
# AC_PROG_CC_C99
Packit Service 4684c1
# --------------
Packit Service 4684c1
AU_DEFUN([AC_PROG_CC_C99],
Packit Service 4684c1
  [AC_REQUIRE([AC_PROG_CC])],
Packit Service 4684c1
  [$0 is obsolete; use AC_PROG_CC]
Packit Service 4684c1
)
Packit Service 4684c1
Packit Service 4684c1
# AC_PROG_CC_STDC
Packit Service 4684c1
# ---------------
Packit Service 4684c1
AU_DEFUN([AC_PROG_CC_STDC],
Packit Service 4684c1
  [AC_REQUIRE([AC_PROG_CC])],
Packit Service 4684c1
  [$0 is obsolete; use AC_PROG_CC]
Packit Service 4684c1
)
Packit Service 4684c1
Packit Service 4684c1
Packit Service 4684c1
# AC_C_PROTOTYPES
Packit Service 4684c1
# ---------------
Packit Service 4684c1
# Check if the C compiler supports prototypes, included if it needs
Packit Service 4684c1
# options.
Packit Service 4684c1
AC_DEFUN([AC_C_PROTOTYPES],
Packit Service 4684c1
[AC_REQUIRE([AC_PROG_CC])dnl
Packit Service 4684c1
if test "$ac_prog_cc_stdc" != no; then
Packit Service 4684c1
  AC_DEFINE(PROTOTYPES, 1,
Packit Service 4684c1
	    [Define to 1 if the C compiler supports function prototypes.])
Packit Service 4684c1
  AC_DEFINE(__PROTOTYPES, 1,
Packit Service 4684c1
	    [Define like PROTOTYPES; this can be used by system headers.])
Packit Service 4684c1
fi
Packit Service 4684c1
])# AC_C_PROTOTYPES
Packit Service 4684c1
Packit Service 4684c1
Packit Service 4684c1
# _AC_CXX_STD_TRY(STANDARD, TEST-PROLOGUE, TEST-BODY, OPTION-LIST,
Packit Service 4684c1
#		  ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE)
Packit Service 4684c1
# ----------------------------------------------------------------
Packit Service 4684c1
# Check whether the C++ compiler accepts features of STANDARD (e.g
Packit Service 4684c1
# `cxx98', `cxx11') by trying to compile a program of TEST-PROLOGUE
Packit Service 4684c1
# and TEST-BODY.  If this fails, try again with each compiler option
Packit Service 4684c1
# in the space-separated OPTION-LIST; if one helps, append it to CXX.
Packit Service 4684c1
# If eventually successful, run ACTION-IF-AVAILABLE, else
Packit Service 4684c1
# ACTION-IF-UNAVAILABLE.
Packit Service 4684c1
AC_DEFUN([_AC_CXX_STD_TRY],
Packit Service 4684c1
[AC_MSG_CHECKING([for $CXX option to enable ]m4_translit(m4_translit($1, [x], [+]), [a-z], [A-Z])[ features])
Packit Service 4684c1
AC_LANG_PUSH(C++)dnl
Packit Service 4684c1
AC_CACHE_VAL(ac_cv_prog_cxx_$1,
Packit Service 4684c1
[ac_cv_prog_cxx_$1=no
Packit Service 4684c1
ac_save_CXX=$CXX
Packit Service 4684c1
AC_LANG_CONFTEST([AC_LANG_PROGRAM([$2], [$3])])
Packit Service 4684c1
for ac_arg in '' $4
Packit Service 4684c1
do
Packit Service 4684c1
  CXX="$ac_save_CXX $ac_arg"
Packit Service 4684c1
  _AC_COMPILE_IFELSE([], [ac_cv_prog_cxx_$1=$ac_arg])
Packit Service 4684c1
  test "x$ac_cv_prog_cxx_$1" != "xno" && break
Packit Service 4684c1
done
Packit Service 4684c1
rm -f conftest.$ac_ext
Packit Service 4684c1
CXX=$ac_save_CXX
Packit Service 4684c1
])# AC_CACHE_VAL
Packit Service 4684c1
ac_prog_cxx_stdcxx_options=
Packit Service 4684c1
case "x$ac_cv_prog_cxx_$1" in
Packit Service 4684c1
  x)
Packit Service 4684c1
    AC_MSG_RESULT([none needed]) ;;
Packit Service 4684c1
  xno)
Packit Service 4684c1
    AC_MSG_RESULT([unsupported]) ;;
Packit Service 4684c1
  *)
Packit Service 4684c1
    ac_prog_cxx_stdcxx_options=" $ac_cv_prog_cxx_$1"
Packit Service 4684c1
    CXX=$CXX$ac_prog_cxx_stdcxx_options
Packit Service 4684c1
    AC_MSG_RESULT([$ac_cv_prog_cxx_$1]) ;;
Packit Service 4684c1
esac
Packit Service 4684c1
AC_LANG_POP(C++)dnl
Packit Service 4684c1
AS_IF([test "x$ac_cv_prog_cxx_$1" != xno], [$5], [$6])
Packit Service 4684c1
])# _AC_CXX_STD_TRY
Packit Service 4684c1
Packit Service 4684c1
# _AC_CXX_CXX98_TEST_HEADER
Packit Service 4684c1
# -------------------------
Packit Service 4684c1
# A C++ header suitable for testing for CXX98.
Packit Service 4684c1
AC_DEFUN([_AC_CXX_CXX98_TEST_HEADER],
Packit Service 4684c1
[[
Packit Service 4684c1
#include <algorithm>
Packit Service 4684c1
#include <cstdlib>
Packit Service 4684c1
#include <fstream>
Packit Service 4684c1
#include <iomanip>
Packit Service 4684c1
#include <iostream>
Packit Service 4684c1
#include <list>
Packit Service 4684c1
#include <map>
Packit Service 4684c1
#include <set>
Packit Service 4684c1
#include <sstream>
Packit Service 4684c1
#include <stdexcept>
Packit Service 4684c1
#include <string>
Packit Service 4684c1
#include <utility>
Packit Service 4684c1
#include <vector>
Packit Service 4684c1
Packit Service 4684c1
namespace test {
Packit Service 4684c1
  typedef std::vector<std::string> string_vec;
Packit Service 4684c1
  typedef std::pair<int,bool> map_value;
Packit Service 4684c1
  typedef std::map<std::string,map_value> map_type;
Packit Service 4684c1
  typedef std::set<int> set_type;
Packit Service 4684c1
Packit Service 4684c1
  template<typename T>
Packit Service 4684c1
  class printer {
Packit Service 4684c1
  public:
Packit Service 4684c1
    printer(std::ostringstream& os): os(os) {}
Packit Service 4684c1
    void operator() (T elem) { os << elem << std::endl; }
Packit Service 4684c1
  private:
Packit Service 4684c1
    std::ostringstream& os;
Packit Service 4684c1
  };
Packit Service 4684c1
}
Packit Service 4684c1
]])# _AC_CXX_CXX98_TEST_HEADER
Packit Service 4684c1
Packit Service 4684c1
# _AC_CXX_CXX98_TEST_BODY
Packit Service 4684c1
# -----------------------
Packit Service 4684c1
# A C++ body suitable for testing for CXX98, assuming the corresponding header.
Packit Service 4684c1
AC_DEFUN([_AC_CXX_CXX98_TEST_BODY],
Packit Service 4684c1
[[
Packit Service 4684c1
Packit Service 4684c1
try {
Packit Service 4684c1
  // Basic string.
Packit Service 4684c1
  std::string teststr("ASCII text");
Packit Service 4684c1
  teststr += " string";
Packit Service 4684c1
Packit Service 4684c1
  // Simple vector.
Packit Service 4684c1
  test::string_vec testvec;
Packit Service 4684c1
  testvec.push_back(teststr);
Packit Service 4684c1
  testvec.push_back("foo");
Packit Service 4684c1
  testvec.push_back("bar");
Packit Service 4684c1
  if (testvec.size() != 3) {
Packit Service 4684c1
    throw std::runtime_error("vector size is not 1");
Packit Service 4684c1
  }
Packit Service 4684c1
Packit Service 4684c1
  // Dump vector into stringstream and obtain string.
Packit Service 4684c1
  std::ostringstream os;
Packit Service 4684c1
  for (test::string_vec::const_iterator i = testvec.begin();
Packit Service 4684c1
       i != testvec.end(); ++i) {
Packit Service 4684c1
    if (i + 1 != testvec.end()) {
Packit Service 4684c1
      os << teststr << '\n';
Packit Service 4684c1
    }
Packit Service 4684c1
  }
Packit Service 4684c1
  // Check algorithms work.
Packit Service 4684c1
  std::for_each(testvec.begin(), testvec.end(), test::printer<std::string>(os));
Packit Service 4684c1
  std::string os_out = os.str();
Packit Service 4684c1
Packit Service 4684c1
  // Test pair and map.
Packit Service 4684c1
  test::map_type testmap;
Packit Service 4684c1
  testmap.insert(std::make_pair(std::string("key"),
Packit Service 4684c1
                                std::make_pair(53,false)));
Packit Service 4684c1
Packit Service 4684c1
  // Test set.
Packit Service 4684c1
  int values[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
Packit Service 4684c1
  test::set_type testset(values, values + sizeof(values)/sizeof(values[0]));
Packit Service 4684c1
  std::list<int> testlist(testset.begin(), testset.end());
Packit Service 4684c1
  std::copy(testset.begin(), testset.end(), std::back_inserter(testlist));
Packit Service 4684c1
} catch (const std::exception& e) {
Packit Service 4684c1
  std::cerr << "Caught exception: " << e.what() << std::endl;
Packit Service 4684c1
Packit Service 4684c1
  // Test fstream
Packit Service 4684c1
  std::ofstream of("test.txt");
Packit Service 4684c1
  of << "Test ASCII text\n" << std::flush;
Packit Service 4684c1
  of << "N= " << std::hex << std::setw(8) << std::left << 534 << std::endl;
Packit Service 4684c1
  of.close();
Packit Service 4684c1
}
Packit Service 4684c1
std::exit(0);
Packit Service 4684c1
]])
Packit Service 4684c1
Packit Service 4684c1
# _AC_CXX_CXX11_TEST_HEADER
Packit Service 4684c1
# -------------------------
Packit Service 4684c1
# A C++ header suitable for testing for CXX11.
Packit Service 4684c1
AC_DEFUN([_AC_CXX_CXX11_TEST_HEADER],
Packit Service 4684c1
[[
Packit Service 4684c1
#include <deque>
Packit Service 4684c1
#include <functional>
Packit Service 4684c1
#include <memory>
Packit Service 4684c1
#include <tuple>
Packit Service 4684c1
#include <array>
Packit Service 4684c1
#include <regex>
Packit Service 4684c1
#include <iostream>
Packit Service 4684c1
Packit Service 4684c1
namespace cxx11test
Packit Service 4684c1
{
Packit Service 4684c1
  typedef std::shared_ptr<std::string> sptr;
Packit Service 4684c1
  typedef std::weak_ptr<std::string> wptr;
Packit Service 4684c1
Packit Service 4684c1
  typedef std::tuple<std::string,int,double> tp;
Packit Service 4684c1
  typedef std::array<int, 20> int_array;
Packit Service 4684c1
Packit Service 4684c1
  constexpr int get_val() { return 20; }
Packit Service 4684c1
Packit Service 4684c1
  struct testinit
Packit Service 4684c1
  {
Packit Service 4684c1
    int i;
Packit Service 4684c1
    double d;
Packit Service 4684c1
  };
Packit Service 4684c1
Packit Service 4684c1
  class delegate  {
Packit Service 4684c1
  public:
Packit Service 4684c1
    delegate(int n) : n(n) {}
Packit Service 4684c1
    delegate(): delegate(2354) {}
Packit Service 4684c1
Packit Service 4684c1
    virtual int getval() { return this->n; };
Packit Service 4684c1
  protected:
Packit Service 4684c1
    int n;
Packit Service 4684c1
  };
Packit Service 4684c1
Packit Service 4684c1
  class overridden : public delegate {
Packit Service 4684c1
  public:
Packit Service 4684c1
    overridden(int n): delegate(n) {}
Packit Service 4684c1
    virtual int getval() override final { return this->n * 2; }
Packit Service 4684c1
  };
Packit Service 4684c1
Packit Service 4684c1
  class nocopy {
Packit Service 4684c1
  public:
Packit Service 4684c1
    nocopy(int i): i(i) {}
Packit Service 4684c1
    nocopy() = default;
Packit Service 4684c1
    nocopy(const nocopy&) = delete;
Packit Service 4684c1
    nocopy & operator=(const nocopy&) = delete;
Packit Service 4684c1
  private:
Packit Service 4684c1
    int i;
Packit Service 4684c1
  };
Packit Service 4684c1
}
Packit Service 4684c1
]])# _AC_CXX_CXX11_TEST_HEADER
Packit Service 4684c1
Packit Service 4684c1
# _AC_CXX_CXX11_TEST_BODY
Packit Service 4684c1
# -----------------------
Packit Service 4684c1
# A C++ body suitable for testing for CXX11, assuming the corresponding header.
Packit Service 4684c1
AC_DEFUN([_AC_CXX_CXX11_TEST_BODY],
Packit Service 4684c1
[[
Packit Service 4684c1
{
Packit Service 4684c1
  // Test auto and decltype
Packit Service 4684c1
  std::deque<int> d;
Packit Service 4684c1
  d.push_front(43);
Packit Service 4684c1
  d.push_front(484);
Packit Service 4684c1
  d.push_front(3);
Packit Service 4684c1
  d.push_front(844);
Packit Service 4684c1
  int total = 0;
Packit Service 4684c1
  for (auto i = d.begin(); i != d.end(); ++i) { total += *i; }
Packit Service 4684c1
Packit Service 4684c1
  auto a1 = 6538;
Packit Service 4684c1
  auto a2 = 48573953.4;
Packit Service 4684c1
  auto a3 = "String literal";
Packit Service 4684c1
Packit Service 4684c1
  decltype(a2) a4 = 34895.034;
Packit Service 4684c1
}
Packit Service 4684c1
{
Packit Service 4684c1
  // Test constexpr
Packit Service 4684c1
  short sa[cxx11test::get_val()] = { 0 };
Packit Service 4684c1
}
Packit Service 4684c1
{
Packit Service 4684c1
  // Test initializer lists
Packit Service 4684c1
  cxx11test::testinit il = { 4323, 435234.23544 };
Packit Service 4684c1
}
Packit Service 4684c1
{
Packit Service 4684c1
  // Test range-based for and lambda
Packit Service 4684c1
  cxx11test::int_array array = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
Packit Service 4684c1
  for (int &x : array) { x += 23; }
Packit Service 4684c1
  std::for_each(array.begin(), array.end(), [](int v1){ std::cout << v1; });
Packit Service 4684c1
}
Packit Service 4684c1
{
Packit Service 4684c1
  using cxx11test::sptr;
Packit Service 4684c1
  using cxx11test::wptr;
Packit Service 4684c1
Packit Service 4684c1
  sptr sp(new std::string("ASCII string"));
Packit Service 4684c1
  wptr wp(sp);
Packit Service 4684c1
  sptr sp2(wp);
Packit Service 4684c1
}
Packit Service 4684c1
{
Packit Service 4684c1
  cxx11test::tp tuple("test", 54, 45.53434);
Packit Service 4684c1
  double d = std::get<2>(tuple);
Packit Service 4684c1
  std::string s;
Packit Service 4684c1
  int i;
Packit Service 4684c1
  std::tie(s,i,d) = tuple;
Packit Service 4684c1
}
Packit Service 4684c1
{
Packit Service 4684c1
  static std::regex filename_regex("^_?([a-z0-9_.]+-)+[a-z0-9]+$");
Packit Service 4684c1
  std::string testmatch("Test if this string matches");
Packit Service 4684c1
  bool match = std::regex_search(testmatch, filename_regex);
Packit Service 4684c1
}
Packit Service 4684c1
{
Packit Service 4684c1
  cxx11test::int_array array = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
Packit Service 4684c1
  cxx11test::int_array::size_type size = array.size();
Packit Service 4684c1
}
Packit Service 4684c1
{
Packit Service 4684c1
  // Test constructor delegation
Packit Service 4684c1
  cxx11test::delegate d1;
Packit Service 4684c1
  cxx11test::delegate d2();
Packit Service 4684c1
  cxx11test::delegate d3(45);
Packit Service 4684c1
}
Packit Service 4684c1
{
Packit Service 4684c1
  // Test override and final
Packit Service 4684c1
  cxx11test::overridden o1(55464);
Packit Service 4684c1
}
Packit Service 4684c1
{
Packit Service 4684c1
  // Test nullptr
Packit Service 4684c1
  char *c = nullptr;
Packit Service 4684c1
}
Packit Service 4684c1
{
Packit Service 4684c1
  // Test template brackets
Packit Service 4684c1
  std::vector<std::pair<int,char*>> v1;
Packit Service 4684c1
}
Packit Service 4684c1
{
Packit Service 4684c1
  // Unicode literals
Packit Service 4684c1
  char const *utf8 = u8"UTF-8 string \u2500";
Packit Service 4684c1
  char16_t const *utf16 = u"UTF-8 string \u2500";
Packit Service 4684c1
  char32_t const *utf32 = U"UTF-32 string \u2500";
Packit Service 4684c1
}
Packit Service 4684c1
]])
Packit Service 4684c1
Packit Service 4684c1
# _AC_PROG_CXX_CXX98 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE])
Packit Service 4684c1
# -------------------------------------------------------------------
Packit Service 4684c1
Packit Service 4684c1
# If the C++ compiler is not in ISO C++98 mode by default, try to add
Packit Service 4684c1
# an option to output variable CXX to make it so.  This macro tries
Packit Service 4684c1
# various options that select ISO C++98 on some system or another.  It
Packit Service 4684c1
# considers the compiler to be in ISO C++98 mode if it handles basic
Packit Service 4684c1
# features of the std namespace including: string, containers (list,
Packit Service 4684c1
# map, set, vector), streams (fstreams, iostreams, stringstreams,
Packit Service 4684c1
# iomanip), pair, exceptions and algorithms.
Packit Service 4684c1
Packit Service 4684c1
Packit Service 4684c1
AC_DEFUN([_AC_PROG_CXX_CXX98],
Packit Service 4684c1
[_AC_CXX_STD_TRY([cxx98],
Packit Service 4684c1
[_AC_CXX_CXX98_TEST_HEADER],
Packit Service 4684c1
[_AC_CXX_CXX98_TEST_BODY],
Packit Service 4684c1
dnl Try
Packit Service 4684c1
dnl GCC		-std=gnu++98 (unused restrictive mode: -std=c++98)
Packit Service 4684c1
dnl IBM XL C	-qlanglvl=extended
Packit Service 4684c1
dnl HP aC++	-AA
Packit Service 4684c1
dnl Intel ICC	-std=gnu++98
Packit Service 4684c1
dnl Solaris	N/A (default)
Packit Service 4684c1
dnl Tru64	N/A (default, but -std gnu could be used)
Packit Service 4684c1
dnl with extended modes being tried first.
Packit Service 4684c1
[[-std=gnu++98 -std=c++98 -qlanglvl=extended -AA]], [$1], [$2])[]dnl
Packit Service 4684c1
])# _AC_PROG_CXX_CXX98
Packit Service 4684c1
Packit Service 4684c1
# _AC_PROG_CXX_CXX11 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE])
Packit Service 4684c1
# -------------------------------------------------------------------
Packit Service 4684c1
# If the C++ compiler is not in ISO CXX11 mode by default, try to add
Packit Service 4684c1
# an option to output variable CXX to make it so.  This macro tries
Packit Service 4684c1
# various options that select ISO C++11 on some system or another.  It
Packit Service 4684c1
# considers the compiler to be in ISO C++11 mode if it handles all the
Packit Service 4684c1
# tests from the C++98 checks, plus the following: Language features
Packit Service 4684c1
# (auto, constexpr, decltype, default/deleted constructors, delegate
Packit Service 4684c1
# constructors, final, initializer lists, lambda functions, nullptr,
Packit Service 4684c1
# override, range-based for loops, template brackets without spaces,
Packit Service 4684c1
# unicode literals) and library features (array, memory (shared_ptr,
Packit Service 4684c1
# weak_ptr), regex and tuple types).
Packit Service 4684c1
AC_DEFUN([_AC_PROG_CXX_CXX11],
Packit Service 4684c1
[_AC_CXX_STD_TRY([cxx11],
Packit Service 4684c1
[_AC_CXX_CXX11_TEST_HEADER
Packit Service 4684c1
_AC_CXX_CXX98_TEST_HEADER],
Packit Service 4684c1
[_AC_CXX_CXX11_TEST_BODY
Packit Service 4684c1
_AC_CXX_CXX98_TEST_BODY],
Packit Service 4684c1
dnl Try
Packit Service 4684c1
dnl GCC		-std=gnu++11 (unused restrictive mode: -std=c++11) [and 0x variants]
Packit Service 4684c1
dnl IBM XL C	-qlanglvl=extended0x
Packit Service 4684c1
dnl		(pre-V12.1; unused restrictive mode: -qlanglvl=stdcxx11)
Packit Service 4684c1
dnl HP aC++	-AA
Packit Service 4684c1
dnl Intel ICC	-std=c++11 -std=c++0x
Packit Service 4684c1
dnl Solaris	N/A (no support)
Packit Service 4684c1
dnl Tru64	N/A (no support)
Packit Service 4684c1
dnl with extended modes being tried first.
Packit Service 4684c1
[[-std=gnu++11 -std=c++11 -std=gnu++0x -std=c++0x -qlanglvl=extended0x -AA]], [$1], [$2])[]dnl
Packit Service 4684c1
])# _AC_PROG_CXX_CXX11