📄 c.m4
字号:
{ 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 -std1 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 -std1. */int osf4_cc_array ['\x00' == 0 ? 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;]],[[return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];]])])# Don't try gcc -ansi; that turns off useful extensions and# breaks some systems' header files.# AIX -qlanglvl=ansi# Ultrix and OSF/1 -std1# HP-UX 10.20 and later -Ae# HP-UX older versions -Aa -D_HPUX_SOURCE# SVR4 -Xc -D__EXTENSIONS__for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"do CC="$ac_save_CC $ac_arg" _AC_COMPILE_IFELSE([], [ac_cv_prog_cc_stdc=$ac_argbreak])donerm -f conftest.$ac_ext conftest.$ac_objextCC=$ac_save_CC])case "x$ac_cv_prog_cc_stdc" in x|xno) AC_MSG_RESULT([none needed]) ;; *) AC_MSG_RESULT([$ac_cv_prog_cc_stdc]) CC="$CC $ac_cv_prog_cc_stdc" ;;esac])# _AC_PROG_CC_STDC# AC_PROG_CC_STDC# ---------------# Has been merged into AC_PROG_CC.AU_DEFUN([AC_PROG_CC_STDC], [])# AC_C_BACKSLASH_A# ----------------AC_DEFUN([AC_C_BACKSLASH_A],[ AC_CACHE_CHECK([whether backslash-a works in strings], ac_cv_c_backslash_a, [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[#if '\a' == 'a' syntax error;#endif char buf['\a' == 'a' ? -1 : 1]; buf[0] = '\a'; return buf[0] != "\a"[0]; ]])], [ac_cv_c_backslash_a=yes], [ac_cv_c_backslash_a=no])]) if test $ac_cv_c_backslash_a = yes; then AC_DEFINE(HAVE_C_BACKSLASH_A, 1, [Define if backslash-a works in C strings.]) fi])# AC_C_CROSS# ----------# Has been merged into AC_PROG_CC.AU_DEFUN([AC_C_CROSS], [])# AC_C_CHAR_UNSIGNED# ------------------AC_DEFUN([AC_C_CHAR_UNSIGNED],[AH_VERBATIM([__CHAR_UNSIGNED__],[/* Define to 1 if type `char' is unsigned and you are not using gcc. */#ifndef __CHAR_UNSIGNED__# undef __CHAR_UNSIGNED__#endif])dnlAC_CACHE_CHECK(whether char is unsigned, ac_cv_c_char_unsigned,[AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT([])], [((char) -1) < 0])], ac_cv_c_char_unsigned=no, ac_cv_c_char_unsigned=yes)])if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then AC_DEFINE(__CHAR_UNSIGNED__)fi])# AC_C_CHAR_UNSIGNED# AC_C_LONG_DOUBLE# ----------------AC_DEFUN([AC_C_LONG_DOUBLE],[AC_CACHE_CHECK( [for working long double with more range or precision than double], [ac_cv_c_long_double], [AC_COMPILE_IFELSE( [AC_LANG_BOOL_COMPILE_TRY( [#include <float.h> long double foo = 0.0;], [/* Using '|' rather than '||' catches a GCC 2.95.2 x86 bug. */ (DBL_MAX < LDBL_MAX) | (LDBL_EPSILON < DBL_EPSILON) | (DBL_MAX_EXP < LDBL_MAX_EXP) | (DBL_MANT_DIG < LDBL_MANT_DIG)])], ac_cv_c_long_double=yes, ac_cv_c_long_double=no)])if test $ac_cv_c_long_double = yes; then AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define to 1 if long double works and has more range or precision than double.])fi])# AC_C_LONG_DOUBLE# AC_C_BIGENDIAN ([ACTION-IF-TRUE], [ACTION-IF-FALSE], [ACTION-IF-UNKNOWN])# -------------------------------------------------------------------------AC_DEFUN([AC_C_BIGENDIAN],[AC_CACHE_CHECK(whether byte ordering is bigendian, ac_cv_c_bigendian,[# See if sys/param.h defines the BYTE_ORDER macro.AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/types.h>#include <sys/param.h>],[#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN bogus endian macros#endif])],[# It does; now see whether it defined to BIG_ENDIAN or not.AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/types.h>#include <sys/param.h>], [#if BYTE_ORDER != BIG_ENDIAN not big endian#endif])], [ac_cv_c_bigendian=yes], [ac_cv_c_bigendian=no])],[# It does not; compile a test program.AC_RUN_IFELSE([AC_LANG_SOURCE([[intmain (){ /* Are we little or big endian? From Harbison&Steele. */ union { long l; char c[sizeof (long)]; } u; u.l = 1; exit (u.c[sizeof (long) - 1] == 1);}]])], [ac_cv_c_bigendian=no], [ac_cv_c_bigendian=yes],[# try to guess the endianness by grepping values into an object file ac_cv_c_bigendian=unknown AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }]],[[ _ascii (); _ebcdic (); ]])],[if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then ac_cv_c_bigendian=yesfiif grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fifi])])])])case $ac_cv_c_bigendian in yes) m4_default([$1], [AC_DEFINE([WORDS_BIGENDIAN], 1, [Define to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX).])]) ;; no) $2 ;; *) m4_default([$3], [AC_MSG_ERROR([unknown endiannesspresetting ac_cv_c_bigendian=no (or yes) will help])]) ;;esac])# AC_C_BIGENDIAN# AC_C_INLINE# -----------# Do nothing if the compiler accepts the inline keyword.# Otherwise define inline to __inline__ or __inline if one of those work,# otherwise define inline to be empty.## HP C version B.11.11.04 doesn't allow a typedef as the return value for an# inline function, only builtin types.#AN_IDENTIFIER([inline], [AC_C_INLINE])AC_DEFUN([AC_C_INLINE],[AC_CACHE_CHECK([for inline], ac_cv_c_inline,[ac_cv_c_inline=nofor ac_kw in inline __inline__ __inline; do AC_COMPILE_IFELSE([AC_LANG_SOURCE([#ifndef __cplusplustypedef int foo_t;static $ac_kw foo_t static_foo () {return 0; }$ac_kw foo_t foo () {return 0; }#endif])], [ac_cv_c_inline=$ac_kw; break])done])AH_VERBATIM([inline],[/* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */#ifndef __cplusplus#undef inline#endif])case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF#ifndef __cplusplus#define inline $ac_val#endif_ACEOF ;;esac])# AC_C_INLINE# AC_C_CONST# ----------AN_IDENTIFIER([const], [AC_C_CONST])AC_DEFUN([AC_C_CONST],[AC_CACHE_CHECK([for an ANSI C-conforming const], ac_cv_c_const,[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[[/* FIXME: Include the comments suggested by Paul. */#ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset x; /* SunOS 4.1.1 cc rejects this. */ char const *const *ccp; char **p; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; ccp = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++ccp; p = (char**) ccp; ccp = (char const *const *) p; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; }#endif]])], [ac_cv_c_const=yes], [ac_cv_c_const=no])])if test $ac_cv_c_const = no; then AC_DEFINE(const,, [Define to empty if `const' does not conform to ANSI C.])fi])# AC_C_CONST# AC_C_RESTRICT# -------------# based on acx_restrict.m4, from the GNU Autoconf Macro Archive at:# http://www.gnu.org/software/ac-archive/htmldoc/acx_restrict.html## Determine whether the C/C++ compiler supports the "restrict" keyword# introduced in ANSI C99, or an equivalent. Do nothing if the compiler# accepts it. Otherwise, if the compiler supports an equivalent,# define "restrict" to be that. Here are some variants:# - GCC supports both __restrict and __restrict__# - older DEC Alpha C compilers support only __restrict# - _Restrict is the only spelling accepted by Sun WorkShop 6 update 2 C# Otherwise, define "restrict" to be empty.AN_IDENTIFIER([restrict], [AC_C_RESTRICT])AC_DEFUN([AC_C_RESTRICT],[AC_CACHE_CHECK([for C/C++ restrict keyword], ac_cv_c_restrict, [ac_cv_c_restrict=no # Try the official restrict keyword, then gcc's __restrict, and # the less common variants. for ac_kw in restrict __restrict __restrict__ _Restrict; do AC_COMPILE_IFELSE([AC_LANG_SOURCE( [float * $ac_kw x;])], [ac_cv_c_restrict=$ac_kw; break]) done ]) case $ac_cv_c_restrict in restrict) ;; no) AC_DEFINE(restrict,, [Define to equivalent of C99 restrict keyword, or to nothing if this is not supported. Do not define if restrict is supported directly.]) ;; *) AC_DEFINE_UNQUOTED(restrict, $ac_cv_c_restrict) ;; esac])# AC_C_RESTRICT# AC_C_VOLATILE# -------------# Note that, unlike const, #defining volatile to be the empty string can# actually turn a correct program into an incorrect one, since removing# uses of volatile actually grants the compiler permission to perform# optimizations that could break the user's code. So, do not #define# volatile away unless it is really necessary to allow the user's code# to compile cleanly. Benign compiler failures should be tolerated.AN_IDENTIFIER([volatile], [AC_C_VOLATILE])AC_DEFUN([AC_C_VOLATILE],[AC_CACHE_CHECK([for working volatile], ac_cv_c_volatile,[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [volatile int x;int * volatile y;])], [ac_cv_c_volatile=yes], [ac_cv_c_volatile=no])])if test $ac_cv_c_volatile = no; then AC_DEFINE(volatile,, [Define to empty if the keyword `volatile' does not work. Warning: valid code using `volatile' can become incorrect without. Disable with care.])fi])# AC_C_VOLATILE# AC_C_STRINGIZE# --------------# Checks if `#' can be used to glue strings together at the CPP level.# Defines HAVE_STRINGIZE if positive.AC_DEFUN([AC_C_STRINGIZE],[AC_CACHE_CHECK([for preprocessor stringizing operator], [ac_cv_c_stringize],[AC_EGREP_CPP([@%:@teststring], [@%:@define x(y) #ychar *s = x(teststring);], [ac_cv_c_stringize=no], [ac_cv_c_stringize=yes])])if test $ac_cv_c_stringize = yes; then AC_DEFINE(HAVE_STRINGIZE, 1, [Define to 1 if cpp supports the ANSI @%:@ stringizing operator.])fi])# AC_C_STRINGIZE# AC_C_PROTOTYPES# ---------------# Check if the C compiler supports prototypes, included if it needs# options.AC_DEFUN([AC_C_PROTOTYPES],[AC_REQUIRE([AC_PROG_CC])dnlAC_MSG_CHECKING([for function prototypes])if test "$ac_cv_prog_cc_stdc" != no; then AC_MSG_RESULT([yes]) AC_DEFINE(PROTOTYPES, 1, [Define to 1 if the C compiler supports function prototypes.]) AC_DEFINE(__PROTOTYPES, 1, [Define like PROTOTYPES; this can be used by system headers.])else AC_MSG_RESULT([no])fi])# AC_C_PROTOTYPES
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -