ircd: configure: require C99 compiler
This commit is contained in:
parent
b79edd3e79
commit
9258de810b
2 changed files with 188 additions and 178 deletions
359
configure
vendored
359
configure
vendored
|
@ -3517,183 +3517,6 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
|
||||||
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||||
|
|
||||||
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5
|
|
||||||
$as_echo_n "checking for $CC option to accept ISO C99... " >&6; }
|
|
||||||
if ${ac_cv_prog_cc_c99+:} false; then :
|
|
||||||
$as_echo_n "(cached) " >&6
|
|
||||||
else
|
|
||||||
ac_cv_prog_cc_c99=no
|
|
||||||
ac_save_CC=$CC
|
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
/* end confdefs.h. */
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <wchar.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
// Check varargs macros. These examples are taken from C99 6.10.3.5.
|
|
||||||
#define debug(...) fprintf (stderr, __VA_ARGS__)
|
|
||||||
#define showlist(...) puts (#__VA_ARGS__)
|
|
||||||
#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
|
|
||||||
static void
|
|
||||||
test_varargs_macros (void)
|
|
||||||
{
|
|
||||||
int x = 1234;
|
|
||||||
int y = 5678;
|
|
||||||
debug ("Flag");
|
|
||||||
debug ("X = %d\n", x);
|
|
||||||
showlist (The first, second, and third items.);
|
|
||||||
report (x>y, "x is %d but y is %d", x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check long long types.
|
|
||||||
#define BIG64 18446744073709551615ull
|
|
||||||
#define BIG32 4294967295ul
|
|
||||||
#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
|
|
||||||
#if !BIG_OK
|
|
||||||
your preprocessor is broken;
|
|
||||||
#endif
|
|
||||||
#if BIG_OK
|
|
||||||
#else
|
|
||||||
your preprocessor is broken;
|
|
||||||
#endif
|
|
||||||
static long long int bignum = -9223372036854775807LL;
|
|
||||||
static unsigned long long int ubignum = BIG64;
|
|
||||||
|
|
||||||
struct incomplete_array
|
|
||||||
{
|
|
||||||
int datasize;
|
|
||||||
double data[];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct named_init {
|
|
||||||
int number;
|
|
||||||
const wchar_t *name;
|
|
||||||
double average;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef const char *ccp;
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
test_restrict (ccp restrict text)
|
|
||||||
{
|
|
||||||
// See if C++-style comments work.
|
|
||||||
// Iterate through items via the restricted pointer.
|
|
||||||
// Also check for declarations in for loops.
|
|
||||||
for (unsigned int i = 0; *(text+i) != '\0'; ++i)
|
|
||||||
continue;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check varargs and va_copy.
|
|
||||||
static void
|
|
||||||
test_varargs (const char *format, ...)
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
va_start (args, format);
|
|
||||||
va_list args_copy;
|
|
||||||
va_copy (args_copy, args);
|
|
||||||
|
|
||||||
const char *str;
|
|
||||||
int number;
|
|
||||||
float fnumber;
|
|
||||||
|
|
||||||
while (*format)
|
|
||||||
{
|
|
||||||
switch (*format++)
|
|
||||||
{
|
|
||||||
case 's': // string
|
|
||||||
str = va_arg (args_copy, const char *);
|
|
||||||
break;
|
|
||||||
case 'd': // int
|
|
||||||
number = va_arg (args_copy, int);
|
|
||||||
break;
|
|
||||||
case 'f': // float
|
|
||||||
fnumber = va_arg (args_copy, double);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
va_end (args_copy);
|
|
||||||
va_end (args);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main ()
|
|
||||||
{
|
|
||||||
|
|
||||||
// Check bool.
|
|
||||||
_Bool success = false;
|
|
||||||
|
|
||||||
// Check restrict.
|
|
||||||
if (test_restrict ("String literal") == 0)
|
|
||||||
success = true;
|
|
||||||
char *restrict newvar = "Another string";
|
|
||||||
|
|
||||||
// Check varargs.
|
|
||||||
test_varargs ("s, d' f .", "string", 65, 34.234);
|
|
||||||
test_varargs_macros ();
|
|
||||||
|
|
||||||
// Check flexible array members.
|
|
||||||
struct incomplete_array *ia =
|
|
||||||
malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
|
|
||||||
ia->datasize = 10;
|
|
||||||
for (int i = 0; i < ia->datasize; ++i)
|
|
||||||
ia->data[i] = i * 1.234;
|
|
||||||
|
|
||||||
// Check named initializers.
|
|
||||||
struct named_init ni = {
|
|
||||||
.number = 34,
|
|
||||||
.name = L"Test wide string",
|
|
||||||
.average = 543.34343,
|
|
||||||
};
|
|
||||||
|
|
||||||
ni.number = 58;
|
|
||||||
|
|
||||||
int dynamic_array[ni.number];
|
|
||||||
dynamic_array[ni.number - 1] = 543;
|
|
||||||
|
|
||||||
// work around unused variable warnings
|
|
||||||
return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
|
|
||||||
|| dynamic_array[ni.number - 1] != 543);
|
|
||||||
|
|
||||||
;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
_ACEOF
|
|
||||||
for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99
|
|
||||||
do
|
|
||||||
CC="$ac_save_CC $ac_arg"
|
|
||||||
if ac_fn_c_try_compile "$LINENO"; then :
|
|
||||||
ac_cv_prog_cc_c99=$ac_arg
|
|
||||||
fi
|
|
||||||
rm -f core conftest.err conftest.$ac_objext
|
|
||||||
test "x$ac_cv_prog_cc_c99" != "xno" && break
|
|
||||||
done
|
|
||||||
rm -f conftest.$ac_ext
|
|
||||||
CC=$ac_save_CC
|
|
||||||
|
|
||||||
fi
|
|
||||||
# AC_CACHE_VAL
|
|
||||||
case "x$ac_cv_prog_cc_c99" in
|
|
||||||
x)
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
|
|
||||||
$as_echo "none needed" >&6; } ;;
|
|
||||||
xno)
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
|
|
||||||
$as_echo "unsupported" >&6; } ;;
|
|
||||||
*)
|
|
||||||
CC="$CC $ac_cv_prog_cc_c99"
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
|
|
||||||
$as_echo "$ac_cv_prog_cc_c99" >&6; } ;;
|
|
||||||
esac
|
|
||||||
if test "x$ac_cv_prog_cc_c99" != xno; then :
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ac_ext=c
|
ac_ext=c
|
||||||
ac_cpp='$CPP $CPPFLAGS'
|
ac_cpp='$CPP $CPPFLAGS'
|
||||||
|
@ -4155,6 +3978,188 @@ $as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5
|
||||||
|
$as_echo_n "checking for $CC option to accept ISO C99... " >&6; }
|
||||||
|
if ${ac_cv_prog_cc_c99+:} false; then :
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
ac_cv_prog_cc_c99=no
|
||||||
|
ac_save_CC=$CC
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
// Check varargs macros. These examples are taken from C99 6.10.3.5.
|
||||||
|
#define debug(...) fprintf (stderr, __VA_ARGS__)
|
||||||
|
#define showlist(...) puts (#__VA_ARGS__)
|
||||||
|
#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
|
||||||
|
static void
|
||||||
|
test_varargs_macros (void)
|
||||||
|
{
|
||||||
|
int x = 1234;
|
||||||
|
int y = 5678;
|
||||||
|
debug ("Flag");
|
||||||
|
debug ("X = %d\n", x);
|
||||||
|
showlist (The first, second, and third items.);
|
||||||
|
report (x>y, "x is %d but y is %d", x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check long long types.
|
||||||
|
#define BIG64 18446744073709551615ull
|
||||||
|
#define BIG32 4294967295ul
|
||||||
|
#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
|
||||||
|
#if !BIG_OK
|
||||||
|
your preprocessor is broken;
|
||||||
|
#endif
|
||||||
|
#if BIG_OK
|
||||||
|
#else
|
||||||
|
your preprocessor is broken;
|
||||||
|
#endif
|
||||||
|
static long long int bignum = -9223372036854775807LL;
|
||||||
|
static unsigned long long int ubignum = BIG64;
|
||||||
|
|
||||||
|
struct incomplete_array
|
||||||
|
{
|
||||||
|
int datasize;
|
||||||
|
double data[];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct named_init {
|
||||||
|
int number;
|
||||||
|
const wchar_t *name;
|
||||||
|
double average;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef const char *ccp;
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
test_restrict (ccp restrict text)
|
||||||
|
{
|
||||||
|
// See if C++-style comments work.
|
||||||
|
// Iterate through items via the restricted pointer.
|
||||||
|
// Also check for declarations in for loops.
|
||||||
|
for (unsigned int i = 0; *(text+i) != '\0'; ++i)
|
||||||
|
continue;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check varargs and va_copy.
|
||||||
|
static void
|
||||||
|
test_varargs (const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
va_start (args, format);
|
||||||
|
va_list args_copy;
|
||||||
|
va_copy (args_copy, args);
|
||||||
|
|
||||||
|
const char *str;
|
||||||
|
int number;
|
||||||
|
float fnumber;
|
||||||
|
|
||||||
|
while (*format)
|
||||||
|
{
|
||||||
|
switch (*format++)
|
||||||
|
{
|
||||||
|
case 's': // string
|
||||||
|
str = va_arg (args_copy, const char *);
|
||||||
|
break;
|
||||||
|
case 'd': // int
|
||||||
|
number = va_arg (args_copy, int);
|
||||||
|
break;
|
||||||
|
case 'f': // float
|
||||||
|
fnumber = va_arg (args_copy, double);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
va_end (args_copy);
|
||||||
|
va_end (args);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
// Check bool.
|
||||||
|
_Bool success = false;
|
||||||
|
|
||||||
|
// Check restrict.
|
||||||
|
if (test_restrict ("String literal") == 0)
|
||||||
|
success = true;
|
||||||
|
char *restrict newvar = "Another string";
|
||||||
|
|
||||||
|
// Check varargs.
|
||||||
|
test_varargs ("s, d' f .", "string", 65, 34.234);
|
||||||
|
test_varargs_macros ();
|
||||||
|
|
||||||
|
// Check flexible array members.
|
||||||
|
struct incomplete_array *ia =
|
||||||
|
malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
|
||||||
|
ia->datasize = 10;
|
||||||
|
for (int i = 0; i < ia->datasize; ++i)
|
||||||
|
ia->data[i] = i * 1.234;
|
||||||
|
|
||||||
|
// Check named initializers.
|
||||||
|
struct named_init ni = {
|
||||||
|
.number = 34,
|
||||||
|
.name = L"Test wide string",
|
||||||
|
.average = 543.34343,
|
||||||
|
};
|
||||||
|
|
||||||
|
ni.number = 58;
|
||||||
|
|
||||||
|
int dynamic_array[ni.number];
|
||||||
|
dynamic_array[ni.number - 1] = 543;
|
||||||
|
|
||||||
|
// work around unused variable warnings
|
||||||
|
return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
|
||||||
|
|| dynamic_array[ni.number - 1] != 543);
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99
|
||||||
|
do
|
||||||
|
CC="$ac_save_CC $ac_arg"
|
||||||
|
if ac_fn_c_try_compile "$LINENO"; then :
|
||||||
|
ac_cv_prog_cc_c99=$ac_arg
|
||||||
|
fi
|
||||||
|
rm -f core conftest.err conftest.$ac_objext
|
||||||
|
test "x$ac_cv_prog_cc_c99" != "xno" && break
|
||||||
|
done
|
||||||
|
rm -f conftest.$ac_ext
|
||||||
|
CC=$ac_save_CC
|
||||||
|
|
||||||
|
fi
|
||||||
|
# AC_CACHE_VAL
|
||||||
|
case "x$ac_cv_prog_cc_c99" in
|
||||||
|
x)
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
|
||||||
|
$as_echo "none needed" >&6; } ;;
|
||||||
|
xno)
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
|
||||||
|
$as_echo "unsupported" >&6; } ;;
|
||||||
|
*)
|
||||||
|
CC="$CC $ac_cv_prog_cc_c99"
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
|
||||||
|
$as_echo "$ac_cv_prog_cc_c99" >&6; } ;;
|
||||||
|
esac
|
||||||
|
if test "x$ac_cv_prog_cc_c99" != xno; then :
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if test x"$ac_cv_prog_cc_c99" = "xno"; then
|
||||||
|
as_fn_error $? "charybdis requires a C99 capable compiler" "$LINENO" 5
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ac_config_headers="$ac_config_headers include/setup.h"
|
ac_config_headers="$ac_config_headers include/setup.h"
|
||||||
|
|
|
@ -7,10 +7,15 @@ AC_PREREQ(2.60)
|
||||||
AC_INIT([charybdis], [3.6.0-dev])
|
AC_INIT([charybdis], [3.6.0-dev])
|
||||||
|
|
||||||
AC_LANG(C)
|
AC_LANG(C)
|
||||||
AC_PROG_CC_C99
|
|
||||||
AC_USE_SYSTEM_EXTENSIONS
|
AC_USE_SYSTEM_EXTENSIONS
|
||||||
AC_GNU_SOURCE
|
AC_GNU_SOURCE
|
||||||
|
|
||||||
|
AC_PROG_CC_C99
|
||||||
|
|
||||||
|
if test x"$ac_cv_prog_cc_c99" = "xno"; then
|
||||||
|
AC_ERROR([charybdis requires a C99 capable compiler])
|
||||||
|
fi
|
||||||
|
|
||||||
AC_PREFIX_DEFAULT($HOME/ircd)
|
AC_PREFIX_DEFAULT($HOME/ircd)
|
||||||
AC_CONFIG_MACRO_DIR([m4])
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
AC_CONFIG_HEADER(include/setup.h)
|
AC_CONFIG_HEADER(include/setup.h)
|
||||||
|
|
Loading…
Reference in a new issue