📄 aclocal.m4
字号:
msg="enabled"],[msg="disabled"])dnlAC_MSG_CHECKING(for compilation optimization mode)AC_MSG_RESULT([$msg])])dnl ##dnl ## Check for a pre-processor define in a headerdnl ##dnl ## configure.ac:dnl ## AC_CHECK_DEFINE(<define>, <header>)dnl ## acconfig.h:dnl ## #undef HAVE_<define>dnl ##AC_DEFUN(AC_CHECK_DEFINE,[dnlAC_MSG_CHECKING(for define $1 in $2)AC_CACHE_VAL(ac_cv_define_$1,[AC_EGREP_CPP([YES_IS_DEFINED], [#include <$2>#ifdef $1YES_IS_DEFINED#endif], ac_cv_define_$1=yes, ac_cv_define_$1=no)])dnlAC_MSG_RESULT($ac_cv_define_$1)if test $ac_cv_define_$1 = yes; then AC_DEFINE(HAVE_[]translit($1, [a-z], [A-Z]), 1, [define if pre-processor define $1 exists in header $2])fi])dnl ##dnl ## Check for an ANSI C typedef in a headerdnl ##dnl ## configure.ac:dnl ## AC_CHECK_TYPEDEF(<typedef>, <header>)dnl ## acconfig.h:dnl ## #undef HAVE_<typedef>dnl ##AC_DEFUN(AC_CHECK_TYPEDEF,[dnlAC_REQUIRE([AC_HEADER_STDC])dnlAC_MSG_CHECKING(for typedef $1)AC_CACHE_VAL(ac_cv_typedef_$1,[AC_EGREP_CPP(dnlchangequote(<<,>>)dnl<<(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]>>dnlchangequote([,]), [#include <$2>], ac_cv_typedef_$1=yes, ac_cv_typedef_$1=no)])dnlAC_MSG_RESULT($ac_cv_typedef_$1)if test $ac_cv_typedef_$1 = yes; then AC_DEFINE(HAVE_[]translit($1, [a-z], [A-Z]), 1, [define if typedef $1 exists in header $2])fi])dnl ##dnl ## Check for an ANSI C struct attribute in a structure defined in a headerdnl ##dnl ## configure.ac:dnl ## AC_CHECK_STRUCTATTR(<attr>, <struct>, <header>)dnl ## acconfig.h:dnl ## #undef HAVE_<attr>dnl ##AC_DEFUN(AC_CHECK_STRUCTATTR,[dnlAC_REQUIRE([AC_HEADER_STDC])dnlAC_MSG_CHECKING(for attribute $1 in struct $2 from $3)AC_CACHE_VAL(ac_cv_structattr_$1,[dnlAC_TRY_LINK([#include <sys/types.h>#include <$3>],[struct $2 *sp1;struct $2 *sp2;sp1->$1 = sp2->$1;], ac_cv_structattr_$1=yes, ac_cv_structattr_$1=no)])dnlAC_MSG_RESULT($ac_cv_structattr_$1)if test $ac_cv_structattr_$1 = yes; then AC_DEFINE(HAVE_[]translit($1, [a-z], [A-Z]), 1, [define if attribute $1 exists in struct $2 from header $3])fi])dnl ##dnl ## Check for argument type of a functiondnl ##dnl ## configure.ac:dnl ## AC_CHECK_ARGTYPE(<header> [...], <func>, <arg-number>,dnl ## <max-arg-number>, <action-with-${ac_type}>)dnl ##AC_DEFUN(AC_CHECK_ARGTYPE,[dnlAC_REQUIRE_CPP()dnlAC_MSG_CHECKING([for type of argument $3 for $2()])AC_CACHE_VAL([ac_cv_argtype_$2$3],[cat >conftest.$ac_ext <<EOF[#]line __oline__ "configure"#include "confdefs.h"EOFfor ifile in $1; do echo "#include <$ifile>" >>conftest.$ac_extdonegpat=''spat=''i=1changequote(, )dnlwhile test $i -le $4; do gpat="$gpat[^,]*" if test $i -eq $3; then spat="$spat\\([^,]*\\)" else spat="$spat[^,]*" fi if test $i -lt $4; then gpat="$gpat," spat="$spat," fi i=`expr $i + 1`donechangequote([, ])dnl(eval "$ac_cpp conftest.$ac_ext") 2>&AC_FD_CC |\changequote(, )dnlsed -e ':join' \ -e '/,[ ]*$/N' \ -e 's/,[ ]*\n[ ]*/, /' \ -e 'tjoin' |\egrep "[^a-zA-Z0-9_]$2[ ]*\\($gpat\\)" | head -1 |\sed -e "s/.*[^a-zA-Z0-9_]$2[ ]*($spat).*/\\1/" \ -e 's/(\*[a-zA-Z_][a-zA-Z_0-9]*)/(*)/' \ -e 's/^[ ]*//' -e 's/[ ]*$//' \ -e 's/^/arg:/' \ -e 's/^arg:\([^ ]*\)$/type:\1/' \ -e 's/^arg:\(.*_t\)*$/type:\1/' \ -e 's/^arg:\(.*\*\)$/type:\1/' \ -e 's/^arg:\(.*[ ]\*\)[_a-zA-Z][_a-zA-Z0-9]*$/type:\1/' \ -e 's/^arg:\(.*[ ]char\)$/type:\1/' \ -e 's/^arg:\(.*[ ]short\)$/type:\1/' \ -e 's/^arg:\(.*[ ]int\)$/type:\1/' \ -e 's/^arg:\(.*[ ]long\)$/type:\1/' \ -e 's/^arg:\(.*[ ]float\)$/type:\1/' \ -e 's/^arg:\(.*[ ]double\)$/type:\1/' \ -e 's/^arg:\(.*[ ]unsigned\)$/type:\1/' \ -e 's/^arg:\(.*[ ]signed\)$/type:\1/' \ -e 's/^arg:\(.*struct[ ][_a-zA-Z][_a-zA-Z0-9]*\)$/type:\1/' \ -e 's/^arg:\(.*\)[ ]_[_a-zA-Z0-9]*$/type:\1/' \ -e 's/^arg:\(.*\)[ ]\([^ ]*\)$/type:\1/' \ -e 's/^type://' >conftest.outputac_cv_argtype_$2$3=`cat conftest.output`changequote([, ])dnlrm -f conftest*])AC_MSG_RESULT([$ac_cv_argtype_$2$3])ac_type="$ac_cv_argtype_$2$3"[$5]])dnl ##dnl ## Decision Hierachydnl ##m4_define(AC_IFALLYES,[dnlac_rc=yesfor ac_spec in $1; do ac_type=`echo "$ac_spec" | sed -e 's/:.*$//'` ac_item=`echo "$ac_spec" | sed -e 's/^.*://'` case $ac_type in header [)] ac_item=`echo "$ac_item" | sed 'y%./+-%__p_%'` ac_var="ac_cv_header_$ac_item" ;; file [)] ac_item=`echo "$ac_item" | sed 'y%./+-%__p_%'` ac_var="ac_cv_file_$ac_item" ;; func [)] ac_var="ac_cv_func_$ac_item" ;; lib [)] ac_var="ac_cv_lib_$ac_item" ;; define [)] ac_var="ac_cv_define_$ac_item" ;; typedef [)] ac_var="ac_cv_typedef_$ac_item" ;; custom [)] ac_var="$ac_item" ;; esac eval "ac_val=\$$ac_var" if test ".$ac_val" != .yes; then ac_rc=no break fidoneif test ".$ac_rc" = .yes; then : $2else : $3fi])m4_define(AC_BEGIN_DECISION,[dnlac_decision_item='$1'ac_decision_msg='FAILED'ac_decision=''])m4_define(AC_DECIDE,[dnlac_decision='$1'ac_decision_msg='$2'ac_decision_$1=yesac_decision_$1_msg='$2'])m4_define(AC_DECISION_OVERRIDE,[dnl ac_decision='' for ac_item in $1; do eval "ac_decision_this=\$ac_decision_${ac_item}" if test ".$ac_decision_this" = .yes; then ac_decision=$ac_item eval "ac_decision_msg=\$ac_decision_${ac_item}_msg" fi done])m4_define(AC_DECISION_FORCE,[dnlac_decision="$1"eval "ac_decision_msg=\"\$ac_decision_${ac_decision}_msg\""])m4_define(AC_END_DECISION,[dnlif test ".$ac_decision" = .; then echo "[$]0:Error: decision on $ac_decision_item failed." 1>&2 echo "[$]0:Hint: see config.log for more details!" 1>&2 exit 1else if test ".$ac_decision_msg" = .; then ac_decision_msg="$ac_decision" fi AC_MSG_RESULT([decision on $ac_decision_item... ${TB}$ac_decision_msg${TN}])fi])dnl ##dnl ## Check for existance of a filednl ##dnl ## configure.ac:dnl ## AC_TEST_FILE(<file>, <success-action>, <failure-action>)dnl ##AC_DEFUN(AC_TEST_FILE, [ac_safe=`echo "$1" | sed 'y%./+-%__p_%'`AC_MSG_CHECKING([for $1])AC_CACHE_VAL(ac_cv_file_$ac_safe, [if test -r $1; then eval "ac_cv_file_$ac_safe=yes"else eval "ac_cv_file_$ac_safe=no"fi])dnlif eval "test \"`echo '$ac_cv_file_'$ac_safe`\" = yes"; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2])else AC_MSG_RESULT(no) ifelse([$3], , :, [$3])fi])dnl ##dnl ## Check for socket/network size typednl ##dnl ## configure.ac:dnl ## AC_CHECK_SOCKLENTYPE(<action-with-${ac_type}>)dnl ##dnl # Background:dnl # this exists because of shortsightedness on the POSIX committee.dnl # BSD systems used "int *" as the parameter to accept(2),dnl # getsockname(2), getpeername(2) et al. Consequently many Unixdnl # flavors took an "int *" for that parameter. The POSIX committeednl # decided that "int" was just too generic and had to be replaceddnl # with "size_t" almost everywhere. There's no problem with thatdnl # when you're passing by value. But when you're passing bydnl # reference (as it is the case for accept(2) and friends) thisdnl # creates a gross source incompatibility with existing programs.dnl # On 32-bit architectures it creates only a warning. On 64-bitdnl # architectures it creates broken code -- because "int *" is adnl # pointer to a 64-bit quantity and "size_t *" is usually a pointerdnl # to a 32-bit quantity. Some Unix flavors adopted "size_t *" fordnl # the sake of POSIX compliance. Others ignored it because it wasdnl # such a broken interface. Chaos ensued. POSIX finally woke updnl # and decided that it was wrong and created a new type socklen_t.dnl # The only useful value for socklen_t is "int", and that's howdnl # everyone who has a clue implements it. It is almost always thednl # case that this type should be defined to be an "int", unless thednl # system being compiled for was created in the window of POSIXdnl # madness.AC_DEFUN(AC_CHECK_SOCKLENTYPE,[dnlAC_CHECK_TYPEDEF(socklen_t, sys/socket.h)AC_CHECK_ARGTYPE(sys/types.h sys/socket.h, accept, 3, 3, [:])AC_MSG_CHECKING(for fallback socklen_t)AC_CACHE_VAL(ac_cv_check_socklentype, [if test ".$ac_cv_typedef_socklen_t" = .yes; then ac_cv_check_socklentype='socklen_t'elif test ".$ac_type" != .; then ac_cv_check_socklentype=`echo "$ac_type" | sed -e 's/[ ]*\*$//'`else ac_cv_check_socklentype='int'fi])AC_MSG_RESULT([$ac_cv_check_socklentype])ac_type="$ac_cv_check_socklentype"ifelse([$1], , :, [$1])])dnl ##dnl ## Check for filedescriptor number typednl ##dnl ## configure.ac:dnl ## AC_CHECK_NFDSTYPE(<action-with-${ac_type}>)dnl ##AC_DEFUN(AC_CHECK_NFDSTYPE,[dnlAC_CHECK_TYPEDEF(nfds_t, poll.h)AC_CHECK_ARGTYPE(sys/types.h poll.h, poll, 2, 3, [:])AC_MSG_CHECKING(for fallback nfds_t)AC_CACHE_VAL(ac_cv_check_nfdstype, [if test ".$ac_cv_typedef_nfds_t" = .yes; then ac_cv_check_nfdstype='nfds_t'elif test ".$ac_type" != .; then ac_cv_check_nfdstype=`echo "$ac_type" | sed -e 's/[ ]*\*$//'`else ac_cv_check_nfdstype='unsigned int'fi])AC_MSG_RESULT([$ac_cv_check_nfdstype])ac_type="$ac_cv_check_nfdstype"ifelse([$1], , :, [$1])])dnl ##dnl ## Check for direction of stack growthdnl ##dnl ## configure.ac:dnl ## AC_CHECK_STACKGROWTH(<define>)dnl ## acconfig.h:dnl ## #undef <define>dnl ## source.c:dnl ## #include "config.h"dnl ## #if <define> < 0dnl ## ...stack grow down...dnl ## #elsednl ## ...stack grow up...dnl ## #endifdnl ##AC_DEFUN(AC_CHECK_STACKGROWTH,[dnlAC_MSG_CHECKING(for direction of stack growth)AC_CACHE_VAL(ac_cv_check_stackgrowth, [cross_compiling=noAC_TRY_RUN(changequote(<<, >>)dnl<<#include <stdio.h>#include <stdlib.h>static int iterate = 10;static int growsdown(int *x){ auto int y; y = (x > &y); if (--iterate > 0) y = growsdown(&y); if (y != (x > &y)) exit(1); return y;}int main(int argc, char *argv[]){ FILE *f; auto int x; if ((f = fopen("conftestval", "w")) == NULL) exit(1); fprintf(f, "%s\n", growsdown(&x) ? "down" : "up");; fclose(f); exit(0);}>>changequote([, ])dnl,ac_cv_check_stackgrowth=`cat conftestval`,ac_cv_check_stackgrowth=down,ac_cv_check_stackgrowth=down)dnl])dnlAC_MSG_RESULT([$ac_cv_check_stackgrowth])if test ".$ac_cv_check_stackgrowth" = ".down"; then val="-1"else val="+1"fiAC_DEFINE_UNQUOTED($1, $val, [define for stack growth])])dnl ##dnl ## Check whether and how a POSIX compliant sigsetjmp(3) can be achieveddnl ##dnl ## configure.ac:dnl ## AC_CHECK_SJLJ(<success-action>, <failure-action>, <type-var>)dnl ##AC_DEFUN(AC_CHECK_SJLJ,[dnlAC_MSG_CHECKING(for signal-mask aware setjmp(3)/longjmp(3))AC_CACHE_VAL(ac_cv_check_sjlj, [AC_IFALLYES(func:setjmp func:longjmp, ac_cv_check_sjlj=sjlje, ac_cv_check_sjlj=none)cross_compiling=nofor testtype in ssjlj sjlj usjlj; doOCFLAGS="$CFLAGS"CFLAGS="$CFLAGS -DTEST_${testtype}"AC_TRY_RUN(changequote(<<, >>)dnl<<#if defined(TEST_ssjlj)#define __JMP_BUF sigjmp_buf#define __SETJMP(buf) sigsetjmp(buf,1)#define __LONGJMP(buf,val) siglongjmp(buf,val)#elif defined(TEST_sjlj)#define __JMP_BUF jmp_buf#define __SETJMP(buf) setjmp(buf)#define __LONGJMP(buf,val) longjmp(buf,val)#elif defined(TEST_usjlj)#define __JMP_BUF jmp_buf#define __SETJMP(buf) _setjmp(buf)#define __LONGJMP(buf,val) _longjmp(buf,val)#endif#include <stdio.h>#include <sys/types.h>#include <signal.h>#include <setjmp.h>#include <unistd.h>static __JMP_BUF jb;static void sighandler(int sig){ sigset_t sigs; /* get signal mask */ sigprocmask(SIG_SETMASK, NULL, &sigs); /* make sure USR1 is still blocked */ if (!sigismember(&sigs, SIGUSR1)) exit(1); /* block USR2 for us */ sigaddset(&sigs, SIGUSR2); sigprocmask(SIG_SETMASK, &sigs, NULL); /* jump back to main */ __LONGJMP(jb, 1); exit(1);}int main(int argc, char *argv[]){ FILE *fp; sigset_t sigs; struct sigaction sa; /* the default is that it fails */ if ((fp = fopen("conftestval", "w")) == NULL) exit(1); fprintf(fp, "failed\n"); fclose(fp); /* block USR1 and unblock USR2 signal */ sigprocmask(SIG_SETMASK, NULL, &sigs); sigaddset(&sigs, SIGUSR1); sigdelset(&sigs, SIGUSR2); sigprocmask(SIG_SETMASK, &sigs, NULL); /* set jump buffer */ if (__SETJMP(jb) == 0) { /* install signal handler for USR1 */ memset((void *)&sa, 0, sizeof(struct sigaction)); sigemptyset(&sa.sa_mask); sa.sa_handler = sighandler; sa.sa_flags = 0; sigaction(SIGUSR1, &sa, NULL); /* send USR1 signal (which is still blocked) */ kill(getpid(), SIGUSR1); /* unblock USR1 and wait for it */ sigprocmask(SIG_SETMASK, NULL, &sigs); sigdelset(&sigs, SIGUSR1); sigsuspend(&sigs); exit(1); } /* get signal mask again */ sigprocmask(SIG_SETMASK, NULL, &sigs); /* make sure USR2 is again unblocked */ if (sigismember(&sigs, SIGUSR2)) exit(1); /* Fine... */ if ((fp = fopen("conftestval", "w")) == NULL) exit(1); fprintf(fp, "ok\n"); fclose(fp); exit(0);}>>changequote([, ]),rc=`cat conftestval`,rc=failed,rc=failed)CFLAGS="$OCFLAGS"if test ".$rc" = .ok; then ac_cv_check_sjlj=$testtype breakfidonecase $PLATFORM in *-*-linux* ) braindead=no case "x`uname -r`" inchangequote(, )dnl x2.[23456789]* ) ;;changequote([, ]) * ) braindead=yes ;; esac case `grep __GLIBC_MINOR /usr/include/features.h | grep '#define' |\ awk '{ printf("%s", [$]3 >= 1 ? "yes" : "no"); }'` in yes ) ;; * ) braindead=yes ;; esac case $braindead in yes ) ac_cv_check_sjlj=sjljlx ;; no ) ac_cv_check_sjlj=ssjlj ;;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -