📄 configure.in
字号:
APR_CHECK_PTHREADS_H([ threads="1" pthreadh="1" pthreadser="1" AC_DEFINE(USE_THREADS, 1, [Define if APR supports threads]) ], [ threads="0" pthreadh="0" pthreadser="0" APR_PTHREADS_CHECK_RESTORE ] ) elif test "$enable_threads" = "system_threads"; then threads="1" pthreadh="0" pthreadser="0" else# We basically specified that we wanted threads, but not how to implement# them. In this case, just look for pthreads. In the future, we can check# for other threading libraries as well. APR_PTHREADS_CHECK_SAVE APR_PTHREADS_CHECK APR_CHECK_PTHREADS_H([ threads="1" pthreadh="1" pthreadser="1" AC_DEFINE(USE_THREADS) ], [ threads="0" pthreadser="0" pthreadh="0" APR_PTHREADS_CHECK_RESTORE ] ) fi if test "$pthreadh" = "1"; then APR_CHECK_PTHREAD_GETSPECIFIC_TWO_ARGS APR_CHECK_PTHREAD_ATTR_GETDETACHSTATE_ONE_ARG AC_CHECK_FUNCS(pthread_key_delete pthread_rwlock_init) if test "$ac_cv_func_pthread_rwlock_init" = "yes"; then dnl ----------------------------- Checking for pthread_rwlock_t dnl Linux is silly as it has pthread_rwlock_init defined dnl but keeps the pthread_rwlock_t structure hidden unless dnl special things are defined. AC_CACHE_CHECK([for pthread_rwlock_t], [apr_cv_type_rwlock_t], AC_TRY_COMPILE([#include <sys/types.h>#include <pthread.h>], [pthread_rwlock_t rwlock=PTHREAD_RWLOCK_INITIALIZER;], [apr_cv_type_rwlock_t=yes], [AC_TRY_COMPILE([#define _XOPEN_SOURCE 500#define _BSD_SOURCE#define _SVID_SOURCE#include <sys/types.h>#include <pthread.h>], [pthread_rwlock_t rwlock=PTHREAD_RWLOCK_INITIALIZER;], [apr_cv_type_rwlock_t=yes-with-XOPEN_SOURCE], [apr_cv_type_rwlock_t=no])], [apr_cv_type_rwlock_t=no])) case $apr_cv_type_rwlock_t in yes*) AC_DEFINE(HAVE_PTHREAD_RWLOCKS, 1, [Define if pthread rwlocks are available]) ;; esac if test "$apr_cv_type_rwlock_t" = "yes-with-XOPEN_SOURCE"; then APR_ADDTO(CPPFLAGS, [-D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_SVID_SOURCE]) fi fi # this might also require -DXOPEN_SOURCE=500, so leave after the # rwlock check. APR_CHECK_PTHREAD_RECURSIVE_MUTEX fifiac_cv_define_READDIR_IS_THREAD_SAFE=noac_cv_define_GETHOSTBYNAME_IS_THREAD_SAFE=noac_cv_define_GETHOSTBYADDR_IS_THREAD_SAFE=noif test "$threads" = "1"; then echo "APR will use threads" AC_CHECK_LIB(c_r, readdir, AC_DEFINE(READDIR_IS_THREAD_SAFE, 1, [Define if readdir is thread safe])) if test "x$apr_gethostbyname_is_thread_safe" = "x"; then AC_CHECK_LIB(c_r, gethostbyname, apr_gethostbyname_is_thread_safe=yes) fi if test "$apr_gethostbyname_is_thread_safe" = "yes"; then AC_DEFINE(GETHOSTBYNAME_IS_THREAD_SAFE, 1, [Define if gethostbyname is thread safe]) fi if test "x$apr_gethostbyaddr_is_thread_safe" = "x"; then AC_CHECK_LIB(c_r, gethostbyaddr, apr_gethostbyaddr_is_thread_safe=yes) fi if test "$apr_gethostbyaddr_is_thread_safe" = "yes"; then AC_DEFINE(GETHOSTBYADDR_IS_THREAD_SAFE, 1, [Define if gethostbyaddr is thread safe]) fi AC_CHECK_FUNCS(gethostbyname_r gethostbyaddr_r)else echo "APR will be non-threaded"fiAC_CHECK_FUNCS(sigsuspend, [ have_sigsuspend="1" ], [ have_sigsuspend="0" ])AC_CHECK_FUNCS(sigwait, [ have_sigwait="1" ], [ have_sigwait="0" ]) dnl AC_CHECK_FUNCS doesn't work for this on Tru64 since the functiondnl is renamed in signal.h. Todo: Autodetectcase $host in *alpha*-dec-osf* ) have_sigwait="1" ;;esacAC_SUBST(threads)AC_SUBST(have_sigsuspend)AC_SUBST(have_sigwait)AC_CHECK_FUNCS(poll)dnl ----------------------------- Checking for missing POSIX thread functionsAC_CHECK_FUNCS([getpwnam_r getpwuid_r getgrnam_r getgrgid_r])dnl ----------------------------- Checking for Shared Memory Support echo "${nl}Checking for Shared Memory Support..."# The real-time POSIX extensions (e.g. shm_*, sem_*) may only# be available if linking against librt.AC_SEARCH_LIBS(shm_open, rt)case $host in *-sysv*) ac_includes_default="$ac_includes_default#if HAVE_SYS_MUTEX_H /* needed to define lock_t for sys/shm.h */# include <sys/mutex.h>#endif";;esacAC_CHECK_HEADERS([sys/mman.h sys/ipc.h sys/mutex.h sys/shm.h sys/file.h kernel/OS.h os2.h])AC_CHECK_FUNCS([mmap munmap shm_open shm_unlink shmget shmat shmdt shmctl \ create_area])APR_CHECK_DEFINE(MAP_ANON, sys/mman.h)APR_CHECK_FILE(/dev/zero)# Not all systems can mmap /dev/zero (such as HP-UX). Check for that.if test "$ac_cv_func_mmap" = "yes" && test "$ac_cv_file__dev_zero" = "yes"; then AC_MSG_CHECKING(for mmap that can map /dev/zero) AC_TRY_RUN([#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#ifdef HAVE_SYS_MMAN_H#include <sys/mman.h>#endif int main() { int fd; void *m; fd = open("/dev/zero", O_RDWR); if (fd < 0) { return 1; } m = mmap(0, sizeof(void*), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); if (m == (void *)-1) { /* aka MAP_FAILED */ return 2; } if (munmap(m, sizeof(void*)) < 0) { return 3; } return 0; }], [], [ac_cv_file__dev_zero=no], [ac_cv_file__dev_zero=no]) AC_MSG_RESULT($ac_cv_file__dev_zero)fi# Now we determine which one is our anonymous shmem preference.haveshmgetanon="0"havemmapzero="0"havemmapanon="0"APR_BEGIN_DECISION([anonymous shared memory allocation method])APR_IFALLYES(header:sys/ipc.h header:sys/shm.h header:sys/file.h dnl func:shmget func:shmat func:shmdt func:shmctl, [haveshmgetanon="1" APR_DECIDE(USE_SHMEM_SHMGET_ANON, [SysV IPC shmget()])])APR_IFALLYES(header:sys/mman.h func:mmap func:munmap file:/dev/zero, [havemmapzero="1" APR_DECIDE(USE_SHMEM_MMAP_ZERO, [SVR4-style mmap() on /dev/zero])])APR_IFALLYES(header:sys/mman.h func:mmap func:munmap define:MAP_ANON, [havemmapanon="1" APR_DECIDE(USE_SHMEM_MMAP_ANON, [4.4BSD-style mmap() via MAP_ANON])])APR_IFALLYES(header:os2.h, [haveos2shm="1" APR_DECIDE(USE_SHMEM_OS2_ANON, [OS/2 DosAllocSharedMem()])])APR_IFALLYES(header:kernel/OS.h func:create_area, [havebeosshm="1" APR_DECIDE(USE_SHMEM_BEOS_ANON, [BeOS areas])])case $host in *linux* ) # Linux has problems with MM_SHMT_MMANON even though it reports # that it has it. # FIXME - find exact 2.3 version that MMANON was fixed in. It is # confirmed fixed in 2.4 series. if test $os_version -le "240"; then APR_DECISION_OVERRIDE(USE_SHMEM_MMAP_ZERO USE_SHMEM_SHMGET_ANON) fi ;; *hpux11* ) APR_DECISION_OVERRIDE(USE_SHMEM_SHMGET_ANON) ;;esacAPR_END_DECISIONAC_DEFINE_UNQUOTED($ac_decision)useshmgetanon="0"usemmapzero="0"usemmapanon="0"case $ac_decision in USE_SHMEM_SHMGET_ANON ) useshmgetanon="1" ;; USE_SHMEM_MMAP_ZERO ) usemmapzero="1" ;; USE_SHMEM_MMAP_ANON ) usemmapanon="1" ;;esacAC_SUBST(useshmgetanon)AC_SUBST(usemmapzero)AC_SUBST(usemmapanon)AC_SUBST(haveshmgetanon)AC_SUBST(havemmapzero)AC_SUBST(havemmapanon)# Now we determine which one is our name-based shmem preference.havemmaptmp="0"havemmapshm="0"haveshmget="0"havebeosarea="0"haveos2shm="0"APR_BEGIN_DECISION([namebased memory allocation method])APR_IFALLYES(header:sys/mman.h func:mmap func:munmap, [havemmaptmp="1" APR_DECIDE(USE_SHMEM_MMAP_TMP, [Classical mmap() on temporary file])])APR_IFALLYES(header:sys/mman.h func:mmap func:munmap func:shm_open dnl func:shm_unlink, [havemmapshm="1" APR_DECIDE(USE_SHMEM_MMAP_SHM, [mmap() via POSIX.1 shm_open() on temporary file])])APR_IFALLYES(header:sys/ipc.h header:sys/shm.h header:sys/file.h dnl func:shmget func:shmat func:shmdt func:shmctl, [haveshmget="1" APR_DECIDE(USE_SHMEM_SHMGET, [SysV IPC shmget()])])APR_IFALLYES(header:kernel/OS.h func:create_area, [havebeosshm="1" APR_DECIDE(USE_SHMEM_BEOS, [BeOS areas])])APR_IFALLYES(header:os2.h, [haveos2shm="1" APR_DECIDE(USE_SHMEM_OS2, [OS/2 DosAllocSharedMem()])])case $host in *linux* ) # Linux has problems with MM_SHMT_MMANON even though it reports # that it has it. # FIXME - find exact 2.3 version that MMANON was fixed in. It is # confirmed fixed in 2.4 series. if test $os_version -le "240"; then APR_DECISION_OVERRIDE(USE_SHMEM_MMAP_TMP USE_SHMEM_MMAP_SHM dnl USE_SHMEM_SHMGET) fi ;;esacAPR_END_DECISIONAC_DEFINE_UNQUOTED($ac_decision)usemmaptmp="0"usemmapshm="0"useshmget="0"usebeosarea="0"useos2shm="0"case $ac_decision in USE_SHMEM_MMAP_TMP ) usemmaptmp="1" ;; USE_SHMEM_MMAP_SHM ) usemmapshm="1" ;; USE_SHMEM_SHMGET ) useshmget="1" ;; USE_SHMEM_BEOS ) usebeosarea="1" ;; USE_SHMEM_OS2 ) useos2shm="1" ;;esac# Do we have any shared memory support?if test "$usemmaptmp$usemmapshm$usemmapzero$useshmget$usemmapanon$usebeosarea$useos2shm" = "0000000"; then sharedmem="0"else sharedmem="1"fiAC_SUBST(usemmaptmp)AC_SUBST(usemmapshm)AC_SUBST(useshmget)AC_SUBST(usebeosarea)AC_SUBST(useos2shm)AC_SUBST(havemmaptmp)AC_SUBST(havemmapshm)AC_SUBST(haveshmget)AC_SUBST(havebeosarea)AC_SUBST(haveos2shm)AC_SUBST(sharedmem)dnl ----------------------------- Checks for Any required Functionsdnl Checks for library functions. (N.B. poll is further down)AC_CHECK_FUNCS(alloca calloc strcasecmp stricmp setsid isinf isnan)AC_CHECK_FUNCS(getenv putenv setenv unsetenv)AC_CHECK_FUNCS(setrlimit, [ have_setrlimit="1" ], [ have_setrlimit="0" ]) AC_CHECK_FUNCS(getrlimit, [ have_getrlimit="1" ], [ have_getrlimit="0" ]) AC_CHECK_FUNCS(writev)sendfile="0"AC_CHECK_LIB(sendfile, sendfilev)AC_CHECK_FUNCS(sendfile send_file sendfilev, [ sendfile="1" ])AC_CHECK_FUNCS(utime utimes)dnl THIS MUST COME AFTER THE THREAD TESTS - FreeBSD doesn't always have adnl threaded poll() and we don't want to use sendfile on early FreeBSD dnl systems if we are also using threads.AC_ARG_WITH(sendfile, [ --with-sendfile Override decision to use sendfile], [ if test "$withval" = "yes"; then sendfile="1" else sendfile="0" fi ], [ orig_sendfile=$sendfile case $host in *freebsd*) if test $os_version -le "410"; then if test "$threads" = "1"; then sendfile="0" fi fi ;; *alpha*-dec-osf* ) sendfile="0" ;; s390-*-linux-gnu) # disable sendfile support for 2.2 on S/390 if test $os_version -lt 240; then sendfile="0" fi ;; *aix*) # compiler-independent check for 64-bit build AC_CHECK_SIZEOF(void*, 4) if test "x$ac_cv_sizeof_voidp" = "x8"; then # sendfile not working for 64-bit build sendfile="0" fi ;; esac if test "$orig_sendfile" != "$sendfile"; then echo "sendfile support disabled to avoid system problem" fi ] )AC_SUBST(sendfile)AC_CHECK_FUNCS(sigaction, [ have_sigaction="1" ], [ have_sigaction="0" ]) AC_DECL_SYS_SIGLISTAC_CHECK_FUNCS(fork, [ fork="1" ], [ fork="0" ])APR_CHECK_INET_ADDRAPR_CHECK_INET_NETWORKAC_SUBST(apr_inaddr_none)AC_CHECK_FUNC(_getch)AC_CHECK_FUNCS(strerror_r, [ strerror_r="1" ], [ strerror_r="0" ])if test "$strerror_r" = "1"; then APR_CHECK_STRERROR_R_RCfiAC_CHECK_FUNCS(crypt_r, [ crypt_r="1" ], [ crypt_r="0" ])if test "$crypt_r" = "1"; then APR_CHECK_CRYPT_R_STYLEfiAC_CHECK_FUNCS(mmap, [ mmap="1" ], [ mmap="0" ])if test "$native_mmap_emul" = "1"; then mmap="1"fiAC_CHECK_FUNCS(memmove, [ have_memmove="1" ], [have_memmove="0" ])AC_CHECK_FUNCS([getpass getpassphrase gmtime_r localtime_r hstrerror mkstemp])AC_SUBST(fork)AC_SUBST(have_inet_addr)AC_SUBST(tcp_nodelay_inherited)AC_SUBST(o_nonblock_inherited)AC_SUBST(have_inet_network)AC_SUBST(have_sigaction)AC_SUBST(have_setrlimit)AC_SUBST(have_getrlimit)AC_SUBST(mmap)AC_SUBST(have_memmove)APR_CHECK_SIGWAIT_ONE_ARGAPR_CHECK_DIRENT_INODEAPR_CHECK_DIRENT_TYPEdnl ----------------------------- Checks for Any required HeadersAC_HEADER_STDCAPR_FLAG_HEADERS( alloca.h \ ByteOrder.h \ conio.h \ crypt.h \ ctype.h \ dir.h \ dirent.h \ dl.h \ dlfcn.h \ errno.h \ fcntl.h \ grp.h \ io.h \ limits.h \ mach-o/dyld.h \ malloc.h \ memory.h \ netdb.h \ osreldate.h \ poll.h \ process.h \ pwd.h \ semaphore.h \ signal.h \ stdarg.h \ stddef.h \ stdio.h \ stdlib.h \ string.h \ strings.h \ sysapi.h \ sysgtime.h \ termios.h \ time.h \ tpfeq.h \ tpfio.h \ unistd.h \ unix.h \ arpa/inet.h \ kernel/OS.h \ net/errno.h \ netinet/in.h \ netinet/sctp.h \ netinet/sctp_uio.h \ sys/file.h \ sys/ioctl.h \ sys/mman.h \ sys/poll.h \ sys/resource.h \ sys/select.h \ sys/sem.h \ sys/sendfile.h \ sys/signal.h \ sys/socket.h \ sys/sockio.h \ sys/stat.h \ sys/sysctl.h \ sys/syslimits.h \ sys/time.h \ sys/types.h \ sys/uio.h \ sys/un.h \ sys/wait.h)# IRIX 6.5 has a problem in <netinet/tcp.h> which prevents it from# being included by itself. Check for <netinet/tcp.h> manually,# including another header file first.AC_CACHE_CHECK([for netinet/tcp.h], [apr_cv_hdr_netinet_tcp_h],[AC_TRY_CPP([#ifdef HAVE_NETINET_IN_H#include <netinet/in.h>#endif#include <netinet/tcp.h>], [apr_cv_hdr_netinet_tcp_h=yes], [apr_cv_hdr_netinet_tcp_h=no])])if test "$apr_cv_hdr_netinet_tcp_h" = "yes"; then netinet_tcph=1 AC_DEFINE([HAVE_NETINET_TCP_H], 1, [Defined if netinet/tcp.h is present])else netinet_tcph=0fiAC_SUBST(arpa_ineth)AC_SUBST(conioh)AC_SUBST(ctypeh)AC_SUBST(crypth)AC_SUBST(errnoh)AC_SUBST(direnth)AC_SUBST(fcntlh)AC_SUBST(ioh)AC_SUBST(limitsh)AC_SUBST(netdbh)AC_SUBST(sys_syslimitsh)AC_SUBST(netinet_inh)AC_SUBST(netinet_sctph)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -