Patch 8.0.1736
Problem: Check for C99 features is incomplete.
Solution: Use AC_PROG_CC_C99 and when C99 isn't fully supported check the
features we need. (James McCoy, closes #2820)
Files: src/configure.ac, src/auto/configure
*** ../vim-8.0.1735/src/configure.ac 2018-04-18 23:01:07.192520517 +0200
--- src/configure.ac 2018-04-19 20:36:42.004917160 +0200
***************
*** 11,17 ****
AC_PROG_MAKE_SET
dnl Checks for programs.
! AC_PROG_CC_C89 dnl required by almost everything
AC_PROG_CPP dnl required by header file checks
AC_PROGRAM_EGREP dnl required by AC_EGREP_CPP
AC_PROG_FGREP dnl finds working grep -F
--- 11,17 ----
AC_PROG_MAKE_SET
dnl Checks for programs.
! AC_PROG_CC_C99 dnl required by almost everything
AC_PROG_CPP dnl required by header file checks
AC_PROGRAM_EGREP dnl required by AC_EGREP_CPP
AC_PROG_FGREP dnl finds working grep -F
***************
*** 30,52 ****
AC_HEADER_SYS_WAIT
dnl Check that the C99 features that Vim uses are supported:
! dnl - // commands
! dnl - comma after last enum item
! dnl - "long long int" and "long long unsigned"
! dnl - flexible array member
! AC_MSG_CHECKING(if the compiler can handle Vim code)
! AC_TRY_COMPILE([#include <stdio.h>], [
! enum {
! one, // one comment
! two, // two comments
! three, // three comments
! };
! long long int a = 1;
! long long unsigned b = 2;
! printf("a %lld and a %llu", a, b);
! ],
! AC_MSG_RESULT(yes),
! AC_MSG_ERROR([compiler does not work properly - see auto/config.log]))
dnl Check for the flag that fails if stuff are missing.
--- 30,66 ----
AC_HEADER_SYS_WAIT
dnl Check that the C99 features that Vim uses are supported:
! if test x"$ac_cv_prog_cc_c99" != xno; then
! dnl If the compiler doesn't explicitly support C99, then check
! dnl for the specific features Vim uses
!
! AC_TYPE_LONG_LONG_INT
! if test "$ac_cv_type_long_long_int" = no; then
! AC_MSG_FAILURE([Compiler does not support long long int])
! fi
!
! AC_MSG_CHECKING([if the compiler supports trailing commas])
! trailing_commas=no
! AC_TRY_COMPILE([], [
! enum {
! one,
! };],
! [AC_MSG_RESULT(yes); trailing_commas=yes],
! [AC_MSG_RESULT(no)])
! if test "$trailing_commas" = no; then
! AC_MSG_FAILURE([Compiler does not support trailing comma in enum])
! fi
!
! AC_MSG_CHECKING([if the compiler supports C++ comments])
! slash_comments=no
! AC_TRY_COMPILE([],
! [// C++ comments?],
! [AC_MSG_RESULT(yes); slash_comments=yes],
! [AC_MSG_RESULT(no)])
! if test "$slash_comments" = no; then
! AC_MSG_FAILURE([Compiler does not support C++ comments])
! fi
! fi
dnl Check for the flag that fails if stuff are missing.
*** ../vim-8.0.1735/src/auto/configure 2018-04-18 23:01:07.196520488 +0200
--- src/auto/configure 2018-04-19 20:36:44.740898328 +0200
***************
*** 3454,3534 ****
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS
conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept
ISO C89" >&5
! $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
! if ${ac_cv_prog_cc_c89+:} false; then :
$as_echo_n "(cached) " >&6
else
! ac_cv_prog_cc_c89=no
ac_save_CC=$CC
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdarg.h>
#include <stdio.h>
! struct stat;
! /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
! struct buf { int x; };
! FILE * (*rcsopen) (struct buf *, struct stat *, int);
! static char *e (p, i)
! char **p;
! int i;
! {
! return p[i];
! }
! static char *f (char * (*g) (char **, int), char **p, ...)
! {
! char *s;
! va_list v;
! va_start (v,p);
! s = g (p, va_arg (v,int));
! va_end (v);
! return s;
! }
!
! /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
! function prototypes and stuff, but not '\xHH' hex character constants.
! These don't provoke an error unfortunately, instead are silently treated
! as 'x'. The following induces an error, until -std is added to get
! proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
! array size at least. It's necessary to write '\x00'==0 to get something
! that's true only with -std. */
! int osf4_cc_array ['\x00' == 0 ? 1 : -1];
!
! /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
! inside strings and character constants. */
! #define FOO(x) 'x'
! int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
!
! int test (int i, double x);
! struct s1 {int (*f) (int a);};
! struct s2 {int (*f) (double a);};
! int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int),
int, int);
! int argc;
! char **argv;
int
main ()
{
! return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
;
return 0;
}
_ACEOF
! for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
! -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
do
CC="$ac_save_CC $ac_arg"
if ac_fn_c_try_compile "$LINENO"; then :
! ac_cv_prog_cc_c89=$ac_arg
fi
rm -f core conftest.err conftest.$ac_objext
! test "x$ac_cv_prog_cc_c89" != "xno" && break
done
rm -f conftest.$ac_ext
CC=$ac_save_CC
fi
# AC_CACHE_VAL
! case "x$ac_cv_prog_cc_c89" in
x)
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
$as_echo "none needed" >&6; } ;;
--- 3454,3620 ----
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS
conftest.$ac_ext $LIBS >&5'
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; } ;;
***************
*** 3536,3546 ****
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
$as_echo "unsupported" >&6; } ;;
*)
! CC="$CC $ac_cv_prog_cc_c89"
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
! $as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
esac
! if test "x$ac_cv_prog_cc_c89" != xno; then :
fi
--- 3622,3632 ----
{ $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
***************
*** 4179,4213 ****
fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler can handle
Vim code" >&5
! $as_echo_n "checking if the compiler can handle Vim code... " >&6; }
! cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
! #include <stdio.h>
int
main ()
{
! enum {
! one, // one comment
! two, // two comments
! three, // three comments
! };
! long long int a = 1;
! long long unsigned b = 2;
! printf("a %lld and a %llu", a, b);
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
! $as_echo "yes" >&6; }
else
! as_fn_error $? "compiler does not work properly - see auto/config.log"
"$LINENO" 5
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-fail-if-missing
argument" >&5
--- 4265,4457 ----
fi
! if test x"$ac_cv_prog_cc_c99" != xno; then
!
!
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long
int" >&5
! $as_echo_n "checking for unsigned long long int... " >&6; }
! if ${ac_cv_type_unsigned_long_long_int+:} false; then :
! $as_echo_n "(cached) " >&6
! else
! ac_cv_type_unsigned_long_long_int=yes
! if test "x${ac_cv_prog_cc_c99-no}" = xno; then
! cat confdefs.h - <<_ACEOF >conftest.$ac_ext
! /* end confdefs.h. */
!
! /* For now, do not test the preprocessor; as of 2007 there are too many
! implementations with broken preprocessors. Perhaps this can
! be revisited in 2012. In the meantime, code should not expect
! #if to work with literals wider than 32 bits. */
! /* Test literals. */
! long long int ll = 9223372036854775807ll;
! long long int nll = -9223372036854775807LL;
! unsigned long long int ull = 18446744073709551615ULL;
! /* Test constant expressions. */
! typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
! ? 1 : -1)];
! typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
! ? 1 : -1)];
! int i = 63;
! int
! main ()
! {
! /* Test availability of runtime routines for shift and division. */
! long long int llmax = 9223372036854775807ll;
! unsigned long long int ullmax = 18446744073709551615ull;
! return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
! | (llmax / ll) | (llmax % ll)
! | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
! | (ullmax / ull) | (ullmax % ull));
! ;
! return 0;
! }
!
! _ACEOF
! if ac_fn_c_try_link "$LINENO"; then :
!
! else
! ac_cv_type_unsigned_long_long_int=no
! fi
! rm -f core conftest.err conftest.$ac_objext \
! conftest$ac_exeext conftest.$ac_ext
! fi
! fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: result:
$ac_cv_type_unsigned_long_long_int" >&5
! $as_echo "$ac_cv_type_unsigned_long_long_int" >&6; }
! if test $ac_cv_type_unsigned_long_long_int = yes; then
!
! $as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
!
! fi
!
!
!
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5
! $as_echo_n "checking for long long int... " >&6; }
! if ${ac_cv_type_long_long_int+:} false; then :
! $as_echo_n "(cached) " >&6
! else
! ac_cv_type_long_long_int=yes
! if test "x${ac_cv_prog_cc_c99-no}" = xno; then
! ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
! if test $ac_cv_type_long_long_int = yes; then
! if test "$cross_compiling" = yes; then :
! :
! else
! cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
! #include <limits.h>
! #ifndef LLONG_MAX
! # define HALF \
! (1LL << (sizeof (long long int) * CHAR_BIT - 2))
! # define LLONG_MAX (HALF - 1 + HALF)
! #endif
int
main ()
{
+ long long int n = 1;
+ int i;
+ for (i = 0; ; i++)
+ {
+ long long int m = n << i;
+ if (m >> i != n)
+ return 1;
+ if (LLONG_MAX / 2 < m)
+ break;
+ }
+ return 0;
+ ;
+ return 0;
+ }
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
! else
! ac_cv_type_long_long_int=no
! fi
! rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
! conftest.$ac_objext conftest.beam conftest.$ac_ext
! fi
!
! fi
! fi
! fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int"
>&5
! $as_echo "$ac_cv_type_long_long_int" >&6; }
! if test $ac_cv_type_long_long_int = yes; then
!
! $as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
!
! fi
!
! if test "$ac_cv_type_long_long_int" = no; then
! { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
! $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
! as_fn_error $? "Compiler does not support long long int
! See \`config.log' for more details" "$LINENO" 5; }
! fi
!
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler supports
trailing commas" >&5
! $as_echo_n "checking if the compiler supports trailing commas... " >&6; }
! trailing_commas=no
! cat confdefs.h - <<_ACEOF >conftest.$ac_ext
! /* end confdefs.h. */
!
! int
! main ()
! {
+ enum {
+ one,
+ };
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
! $as_echo "yes" >&6; }; trailing_commas=yes
else
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "$trailing_commas" = no; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ as_fn_error $? "Compiler does not support trailing comma in enum
+ See \`config.log' for more details" "$LINENO" 5; }
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler supports
C++ comments" >&5
+ $as_echo_n "checking if the compiler supports C++ comments... " >&6; }
+ slash_comments=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+ int
+ main ()
+ {
+ // C++ comments?
+ ;
+ return 0;
+ }
+ _ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }; slash_comments=yes
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "$slash_comments" = no; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ as_fn_error $? "Compiler does not support C++ comments
+ See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-fail-if-missing
argument" >&5
*** ../vim-8.0.1735/src/version.c 2018-04-18 23:01:07.200520459 +0200
--- src/version.c 2018-04-19 20:27:43.108598455 +0200
***************
*** 764,765 ****
--- 764,767 ----
{ /* Add new patch number below this line */
+ /**/
+ 1736,
/**/
--
hundred-and-one symptoms of being an internet addict:
229. You spend so much time thinking what to add on this list.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.