📄 configure.in
字号:
file_as_socket="0" ;; esac ;; *os390) OSDIR="os390" OBJECTS_PLATFORM='$(OBJECTS_os390)' eolstr="\\n" ;; *os400) OSDIR="as400" eolstr="\\n" ;; *mingw*) OSDIR="win32" enable_threads="system_threads" eolstr="\\n" proc_mutex_is_global=1 OBJECTS_PLATFORM='$(OBJECTS_win32)' ;; *cygwin*) OSDIR="unix" APR_ADDTO(CPPFLAGS,-DCYGWIN) enable_threads="no" eolstr="\\n" ;; *hpux10* ) enable_threads="no" OSDIR="unix" eolstr="\\n" ;; *) OSDIR="unix" eolstr="\\n" ;;esacAC_SUBST(OBJECTS_PLATFORM)# Check whether LFS has explicitly been disabledAC_ARG_ENABLE(lfs,[ --disable-lfs Disable large file support on 32-bit platforms],[apr_lfs_choice=$enableval], [apr_lfs_choice=yes])if test "$apr_lfs_choice" = "yes"; then # Check whether the transitional LFS API is sufficient AC_CACHE_CHECK([whether to enable -D_LARGEFILE64_SOURCE], [apr_cv_use_lfs64], [ apr_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" AC_TRY_RUN([#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdlib.h>#include <stdio.h>#include <unistd.h>void main(void){ int fd, ret = 0; struct stat64 st; off64_t off = 4242; if (sizeof(off64_t) != 8 || sizeof(off_t) != 4) exit(1); if ((fd = open("conftest.lfs", O_LARGEFILE|O_CREAT|O_WRONLY, 0644)) < 0) exit(2); if (ftruncate64(fd, off) != 0) ret = 3; else if (fstat64(fd, &st) != 0 || st.st_size != off) ret = 4; else if (lseek64(fd, off, SEEK_SET) != off) ret = 5; else if (close(fd) != 0) ret = 6; else if (lstat64("conftest.lfs", &st) != 0 || st.st_size != off) ret = 7; else if (stat64("conftest.lfs", &st) != 0 || st.st_size != off) ret = 8; unlink("conftest.lfs"); exit(ret);}], [apr_cv_use_lfs64=yes], [apr_cv_use_lfs64=no], [apr_cv_use_lfs64=no]) CPPFLAGS=$apr_save_CPPFLAGS]) if test "$apr_cv_use_lfs64" = "yes"; then APR_ADDTO(CPPFLAGS, [-D_LARGEFILE64_SOURCE]) fifiAC_ARG_ENABLE(nonportable-atomics,[ --enable-nonportable-atomics Use optimized atomic code which may produce nonportable binaries],[if test $enableval = yes; then force_generic_atomics=no else force_generic_atomics=yes fi],[case $host_cpu in i[[456]]86) force_generic_atomics=yes ;; *) force_generic_atomics=no ;;esac])if test $force_generic_atomics = yes; then AC_DEFINE([USE_ATOMICS_GENERIC], 1, [Define if use of generic atomics is requested])fiAC_SUBST(proc_mutex_is_global)AC_SUBST(eolstr)AC_SUBST(INSTALL_SUBDIRS)# For some platforms we need a version string which allows easy numeric# comparisons.case $host in *freebsd*) if test -x /sbin/sysctl; then os_version=`/sbin/sysctl -n kern.osreldate` else os_version=000000 fi ;; *linux*) os_version=`uname -r | sed -e 's/\(.\)\.\(.\)\.\(.\).*/\1\2\3/'` ;; *os390) os_version=`uname -r | sed -e 's/\.//g'` ;; *) os_version=OS_VERSION_IS_NOT_SET ;;esacecho "${nl}Checking for libraries..."dnl ----------------------------- Checks for Any required Librariesdnl Note: Autoconf will always append LIBS with an extra " " in AC_CHECK_LIB.dnl It should check for LIBS being empty and set LIBS equal to the new value dnl without the extra " " in that case, but they didn't do that. So, wednl end up LIBS="-lm -lcrypt -lnsl -ldl" which is an annoyance.case $host in *mingw*) dnl APR_ADDTO(LIBS,[-lmsvcrt --lshell32 -ladvapi32 -lws2_32]) AC_CHECK_LIB(msvcrt, getpid) APR_CHECK_DLL_FUNC(kernel32, SetErrorMode@4) APR_CHECK_DLL_FUNC(advapi32, GetSecurityInfo@32) APR_CHECK_DLL_FUNC(ws2_32, gethostbyname@4) APR_CHECK_DLL_FUNC(shell32, CommandLineToArgvW@8) APR_CHECK_DLL_FUNC(kernel32,[CreateFileMappingA@24], [ac_cv_func_CreateFileMapping=$ac_cv_lib_kernel32_CreateFileMappingA]) APR_CHECK_DLL_FUNC(rpcrt4,[UuidCreate@4]) ;; *) AC_SEARCH_LIBS(gethostbyname, nsl) AC_SEARCH_LIBS(gethostname, nsl) AC_SEARCH_LIBS(socket, socket) AC_SEARCH_LIBS(crypt, crypt ufc) AC_CHECK_LIB(truerand, main) AC_SEARCH_LIBS(modf, m) ;;esacdnl ----------------------------- Checking for Threadsecho "${nl}Checking for Threads..."if test -z "$enable_threads"; then AC_ARG_ENABLE(threads, [ --enable-threads Enable threading support in APR.], [ enable_threads=$enableval] , [ APR_CHECK_PTHREADS_H([ enable_threads="pthread" ] , [ enable_threads="no" ] ) ] )fiif test "$enable_threads" = "no"; then threads="0" pthreadh="0" pthreadser="0"else if test "$enable_threads" = "pthread"; then# We have specified pthreads for our threading library, just make sure# that we have everything we need APR_PTHREADS_CHECK_SAVE APR_PTHREADS_CHECK APR_CHECK_PTHREADS_H([ threads="1" pthreadh="1" pthreadser="1" ], [ 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" ], [ 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 APR_CHECK_PTHREAD_RECURSIVE_MUTEX AC_CHECK_FUNCS([pthread_key_delete pthread_rwlock_init \ pthread_attr_setguardsize pthread_yield]) if test "$ac_cv_func_pthread_rwlock_init" = "yes"; then dnl ----------------------------- Checking for pthread_rwlock_t 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;], [apr_cv_type_rwlock_t=yes], [apr_cv_type_rwlock_t=no], [apr_cv_type_rwlock_t=no])) if test "$apr_cv_type_rwlock_t" = "yes"; then AC_DEFINE(HAVE_PTHREAD_RWLOCKS, 1, [Define if pthread rwlocks are available]) fi fi if test "$ac_cv_func_pthread_yield" = "no"; then dnl ----------------------------- Checking for sched_yield AC_CHECK_HEADERS([sched.h]) AC_CHECK_FUNCS([sched_yield]) fi fifiac_cv_define_READDIR_IS_THREAD_SAFE=noac_cv_define_GETHOSTBYNAME_IS_THREAD_SAFE=noac_cv_define_GETHOSTBYADDR_IS_THREAD_SAFE=noac_cv_define_GETSERVBYNAME_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 if test "x$apr_getservbyname_is_thread_safe" = "x"; then AC_CHECK_LIB(c_r, getservbyname, apr_getservbyname_is_thread_safe=yes) fi if test "$apr_getservbyname_is_thread_safe" = "yes"; then AC_DEFINE(GETSERVBYNAME_IS_THREAD_SAFE, 1, [Define if getservbyname is thread safe]) fi AC_CHECK_FUNCS(gethostbyname_r gethostbyaddr_r getservbyname_r)else echo "APR will be non-threaded"fidnl Electric Fence malloc checker.dnl --with-efence specifies the path to Electric Fence.dnl This test should remain after the threads checks since libefencednl may depend on libpthread.AC_ARG_WITH(efence, [ --with-efence[[=DIR]] path to Electric Fence installation], [ apr_efence_dir="$withval" if test "$apr_efence_dir" != "yes"; then APR_ADDTO(LDFLAGS,[-L$apr_efence_dir/lib]) if test "x$apr_platform_runtime_link_flag" != "x"; then APR_ADDTO(LDFLAGS, [$apr_platform_runtime_link_flag$apr_efence_dir/lib]) fi fi AC_CHECK_LIB(efence, malloc, [ APR_ADDTO(LIBS,-lefence) ], [ AC_MSG_ERROR(Electric Fence requested but not detected) ]) ])AC_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 kqueue port_create)# Check for the Linux epoll interface; epoll* may be available in libc# but return ENOSYS on a pre-2.6 kernel, so do a run-time check.AC_CACHE_CHECK([for epoll support], [apr_cv_epoll],[AC_TRY_RUN([#include <sys/epoll.h>#include <unistd.h>int main(){ return epoll_create(5) == -1;}], [apr_cv_epoll=yes], [apr_cv_epoll=no], [apr_cv_epoll=no])])if test "$apr_cv_epoll" = "yes"; then AC_DEFINE([HAVE_EPOLL], 1, [Define if the epoll interface is supported])fidnl ----------------------------- 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/types.h sys/mman.h sys/ipc.h sys/mutex.h sys/shm.h sys/file.h kernel/OS.h os2.h windows.h])AC_CHECK_FUNCS([mmap munmap shm_open shm_unlink shmget shmat shmdt shmctl \ create_area])APR_CHECK_DEFINE(MAP_ANON, sys/mman.h)AC_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])])APR_IFALLYES(header:windows.h func:CreateFileMapping, [havewin32shm="1" APR_DECIDE(USE_SHMEM_WIN32_ANON, [Windows CreateFileMapping()])])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"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -