| OLD | NEW |
| (Empty) |
| 1 # AC_GNU_SOURCE | |
| 2 # -------------- | |
| 3 AC_DEFUN([AC_GNU_SOURCE], | |
| 4 [AH_VERBATIM([_GNU_SOURCE], | |
| 5 [/* Enable GNU extensions on systems that have them. */ | |
| 6 #ifndef _GNU_SOURCE | |
| 7 # undef _GNU_SOURCE | |
| 8 #endif])dnl | |
| 9 AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl | |
| 10 AC_BEFORE([$0], [AC_RUN_IFELSE])dnl | |
| 11 AC_DEFINE([_GNU_SOURCE]) | |
| 12 ]) | |
| 13 | |
| 14 # _AC_C_STD_TRY(STANDARD, TEST-PROLOGUE, TEST-BODY, OPTION-LIST, | |
| 15 # ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE) | |
| 16 # -------------------------------------------------------------- | |
| 17 # Check whether the C compiler accepts features of STANDARD (e.g `c89', `c99') | |
| 18 # by trying to compile a program of TEST-PROLOGUE and TEST-BODY. If this fails, | |
| 19 # try again with each compiler option in the space-separated OPTION-LIST; if one | |
| 20 # helps, append it to CC. If eventually successful, run ACTION-IF-AVAILABLE, | |
| 21 # else ACTION-IF-UNAVAILABLE. | |
| 22 AC_DEFUN([_AC_C_STD_TRY], | |
| 23 [AC_MSG_CHECKING([for $CC option to accept ISO ]m4_translit($1, [c], [C])) | |
| 24 AC_CACHE_VAL(ac_cv_prog_cc_$1, | |
| 25 [ac_cv_prog_cc_$1=no | |
| 26 ac_save_CC=$CC | |
| 27 AC_LANG_CONFTEST([AC_LANG_PROGRAM([$2], [$3])]) | |
| 28 for ac_arg in '' $4 | |
| 29 do | |
| 30 CC="$ac_save_CC $ac_arg" | |
| 31 _AC_COMPILE_IFELSE([], [ac_cv_prog_cc_$1=$ac_arg]) | |
| 32 test "x$ac_cv_prog_cc_$1" != "xno" && break | |
| 33 done | |
| 34 rm -f conftest.$ac_ext | |
| 35 CC=$ac_save_CC | |
| 36 ])# AC_CACHE_VAL | |
| 37 case "x$ac_cv_prog_cc_$1" in | |
| 38 x) | |
| 39 AC_MSG_RESULT([none needed]) ;; | |
| 40 xno) | |
| 41 AC_MSG_RESULT([unsupported]) ;; | |
| 42 *) | |
| 43 CC="$CC $ac_cv_prog_cc_$1" | |
| 44 AC_MSG_RESULT([$ac_cv_prog_cc_$1]) ;; | |
| 45 esac | |
| 46 AS_IF([test "x$ac_cv_prog_cc_$1" != xno], [$5], [$6]) | |
| 47 ])# _AC_C_STD_TRY | |
| 48 | |
| 49 # _AC_PROG_CC_C99 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) | |
| 50 # ---------------------------------------------------------------- | |
| 51 # If the C compiler is not in ISO C99 mode by default, try to add an | |
| 52 # option to output variable CC to make it so. This macro tries | |
| 53 # various options that select ISO C99 on some system or another. It | |
| 54 # considers the compiler to be in ISO C99 mode if it handles mixed | |
| 55 # code and declarations, _Bool, inline and restrict. | |
| 56 AC_DEFUN([_AC_PROG_CC_C99], | |
| 57 [_AC_C_STD_TRY([c99], | |
| 58 [[#include <stdarg.h> | |
| 59 #include <stdbool.h> | |
| 60 #include <stdlib.h> | |
| 61 #include <wchar.h> | |
| 62 #include <stdio.h> | |
| 63 | |
| 64 struct incomplete_array | |
| 65 { | |
| 66 int datasize; | |
| 67 double data[]; | |
| 68 }; | |
| 69 | |
| 70 struct named_init { | |
| 71 int number; | |
| 72 const wchar_t *name; | |
| 73 double average; | |
| 74 }; | |
| 75 | |
| 76 typedef const char *ccp; | |
| 77 | |
| 78 static inline int | |
| 79 test_restrict(ccp restrict text) | |
| 80 { | |
| 81 // See if C++-style comments work. | |
| 82 // Iterate through items via the restricted pointer. | |
| 83 // Also check for declarations in for loops. | |
| 84 for (unsigned int i = 0; *(text+i) != '\0'; ++i) | |
| 85 continue; | |
| 86 return 0; | |
| 87 } | |
| 88 | |
| 89 // Check varargs and va_copy work. | |
| 90 static void | |
| 91 test_varargs(const char *format, ...) | |
| 92 { | |
| 93 va_list args; | |
| 94 va_start(args, format); | |
| 95 va_list args_copy; | |
| 96 va_copy(args_copy, args); | |
| 97 | |
| 98 const char *str; | |
| 99 int number; | |
| 100 float fnumber; | |
| 101 | |
| 102 while (*format) | |
| 103 { | |
| 104 switch (*format++) | |
| 105 { | |
| 106 case 's': // string | |
| 107 str = va_arg(args_copy, const char *); | |
| 108 break; | |
| 109 case 'd': // int | |
| 110 number = va_arg(args_copy, int); | |
| 111 break; | |
| 112 case 'f': // float | |
| 113 fnumber = (float) va_arg(args_copy, double); | |
| 114 break; | |
| 115 default: | |
| 116 break; | |
| 117 } | |
| 118 } | |
| 119 va_end(args_copy); | |
| 120 va_end(args); | |
| 121 } | |
| 122 ]], | |
| 123 [[ | |
| 124 // Check bool and long long datatypes. | |
| 125 _Bool success = false; | |
| 126 long long int bignum = -1234567890LL; | |
| 127 unsigned long long int ubignum = 1234567890uLL; | |
| 128 | |
| 129 // Check restrict. | |
| 130 if (test_restrict("String literal") != 0) | |
| 131 success = true; | |
| 132 char *restrict newvar = "Another string"; | |
| 133 | |
| 134 // Check varargs. | |
| 135 test_varargs("s, d' f .", "string", 65, 34.234); | |
| 136 | |
| 137 // Check incomplete arrays work. | |
| 138 struct incomplete_array *ia = | |
| 139 malloc(sizeof(struct incomplete_array) + (sizeof(double) * 10)); | |
| 140 ia->datasize = 10; | |
| 141 for (int i = 0; i < ia->datasize; ++i) | |
| 142 ia->data[i] = (double) i * 1.234; | |
| 143 | |
| 144 // Check named initialisers. | |
| 145 struct named_init ni = { | |
| 146 .number = 34, | |
| 147 .name = L"Test wide string", | |
| 148 .average = 543.34343, | |
| 149 }; | |
| 150 | |
| 151 ni.number = 58; | |
| 152 | |
| 153 int dynamic_array[ni.number]; | |
| 154 dynamic_array[43] = 543; | |
| 155 | |
| 156 // work around unused variable warnings | |
| 157 return bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'; | |
| 158 ]], | |
| 159 dnl Try | |
| 160 dnl GCC -std=gnu99 (unused restrictive modes: -std=c99 -std=iso9899:1999
) | |
| 161 dnl AIX -qlanglvl=extc99 (unused restrictive mode: -qlanglvl=stdc99) | |
| 162 dnl Intel ICC -c99 | |
| 163 dnl IRIX -c99 | |
| 164 dnl Solaris (unused because it causes the compiler to assume C99 semantics f
or | |
| 165 dnl library functions, and this is invalid before Solaris 10: -xc99) | |
| 166 dnl Tru64 -c99 | |
| 167 dnl with extended modes being tried first. | |
| 168 [[-std=gnu99 -c99 -qlanglvl=extc99]], [$1], [$2])[]dnl | |
| 169 ])# _AC_PROG_CC_C99 | |
| 170 | |
| 171 # AC_PROG_CC_C99 | |
| 172 # -------------- | |
| 173 AC_DEFUN([AC_PROG_CC_C99], | |
| 174 [ AC_REQUIRE([AC_PROG_CC])dnl | |
| 175 _AC_PROG_CC_C99 | |
| 176 ]) | |
| 177 | |
| 178 # AC_USE_SYSTEM_EXTENSIONS | |
| 179 # ------------------------ | |
| 180 # Enable extensions on systems that normally disable them, | |
| 181 # typically due to standards-conformance issues. | |
| 182 m4_ifndef([AC_USE_SYSTEM_EXTENSIONS],[ | |
| 183 AC_DEFUN([AC_USE_SYSTEM_EXTENSIONS], | |
| 184 [ | |
| 185 AC_BEFORE([$0], [AC_COMPILE_IFELSE]) | |
| 186 AC_BEFORE([$0], [AC_RUN_IFELSE]) | |
| 187 | |
| 188 AC_REQUIRE([AC_GNU_SOURCE]) | |
| 189 AC_REQUIRE([AC_AIX]) | |
| 190 AC_REQUIRE([AC_MINIX]) | |
| 191 | |
| 192 AH_VERBATIM([__EXTENSIONS__], | |
| 193 [/* Enable extensions on Solaris. */ | |
| 194 #ifndef __EXTENSIONS__ | |
| 195 # undef __EXTENSIONS__ | |
| 196 #endif | |
| 197 #ifndef _POSIX_PTHREAD_SEMANTICS | |
| 198 # undef _POSIX_PTHREAD_SEMANTICS | |
| 199 #endif]) | |
| 200 AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], | |
| 201 [ac_cv_safe_to_define___extensions__], | |
| 202 [AC_COMPILE_IFELSE( | |
| 203 [AC_LANG_PROGRAM([ | |
| 204 # define __EXTENSIONS__ 1 | |
| 205 AC_INCLUDES_DEFAULT])], | |
| 206 [ac_cv_safe_to_define___extensions__=yes], | |
| 207 [ac_cv_safe_to_define___extensions__=no])]) | |
| 208 test $ac_cv_safe_to_define___extensions__ = yes && | |
| 209 AC_DEFINE([__EXTENSIONS__]) | |
| 210 AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) | |
| 211 ]) | |
| 212 ]) | |
| OLD | NEW |