]> granicus.if.org Git - apache/blobdiff - server/mpm/config.m4
properly merge directory configs in mod_include
[apache] / server / mpm / config.m4
index 664eff057f016bd0ededce709b8116ec1c58a9af..0b263cbc568598758dc7eb66daefeacaf09e4bb7 100644 (file)
-AC_MSG_CHECKING(which MPM to use)
-AC_ARG_WITH(mpm,
-APACHE_HELP_STRING(--with-mpm=MPM,Choose the process model for Apache to use.
-                          MPM={simple|event|worker|prefork|mpmt_os2|winnt}
-                          Specify "shared" instead of an MPM name to load MPMs dynamically.
-),[
-  APACHE_MPM=$withval
-],[
-  if test "x$APACHE_MPM" = "x"; then
-    APACHE_MPM=simple
-  fi
+dnl common platform checks needed by MPMs, methods for MPMs to state
+dnl their support for the platform, functions to query MPM properties
+
+APR_CHECK_APR_DEFINE(APR_HAS_THREADS)
+
+have_threaded_sig_graceful=yes
+case $host in
+    *-linux-*)
+        case `uname -r` in
+          2.0* )
+            dnl Threaded MPM's are not supported on Linux 2.0
+            dnl as on 2.0 the linuxthreads library uses SIGUSR1
+            dnl and SIGUSR2 internally
+            have_threaded_sig_graceful=no
+          ;;
+        esac
+    ;;
+esac
+
+dnl See if APR supports APR_POLLSET_THREADSAFE.
+dnl XXX This hack tests for the underlying functions used by APR when it supports
+dnl XXX APR_POLLSET_THREADSAFE, and duplicates APR's Darwin version check.
+dnl A run-time check for
+dnl     apr_pollset_create(,,APR_POLLSET_THREADSAFE) == APR_SUCCESS
+dnl would be great but an in-tree apr (srclib/apr) hasn't been built yet.
+
+AC_CACHE_CHECK([whether APR supports thread-safe pollsets], [ac_cv_have_threadsafe_pollset], [
+    case $host in
+        *-apple-darwin[[1-9]].*)
+            APR_SETIFNULL(ac_cv_func_kqueue, [no])
+            ;;
+    esac
+    AC_CHECK_FUNCS(kqueue port_create epoll_create)
+    if test "$ac_cv_func_kqueue$ac_cv_func_port_create$ac_cv_func_epoll_create" != "nonono"; then
+        ac_cv_have_threadsafe_pollset=yes
+    else
+        ac_cv_have_threadsafe_pollset=no
+    fi
 ])
-AC_MSG_RESULT($APACHE_MPM)
 
-apache_cv_mpm=$APACHE_MPM
+dnl See if this is a forking platform w.r.t. MPMs
+case $host in
+    *mingw32* | *os2-emx*)
+        forking_mpms_supported=no
+        ;;
+    *)
+        forking_mpms_supported=yes
+        ;;
+esac
 
-dnl Note that a build with an explicitly loaded MPM must support threaded MPMs.
-ap_mpm_is_threaded ()
-{
-    if test "$apache_cv_mpm" = "shared" -o "$apache_cv_mpm" = "worker" -o "$apache_cv_mpm" = "event" -o "$apache_cv_mpm" = "simple" -o "$apache_cv_mpm" = "winnt" ; then
-        return 0
+dnl APACHE_MPM_SUPPORTED(name, supports-shared, is_threaded)
+AC_DEFUN(APACHE_MPM_SUPPORTED,[
+    if test "$2" = "yes"; then
+        eval "ap_supported_mpm_$1=shared"
+        ap_supported_shared_mpms="$ap_supported_shared_mpms $1 "
+    else
+        eval "ap_supported_mpm_$1=static"
+    fi
+    if test "$3" = "yes"; then
+        eval "ap_threaded_mpm_$1=yes"
+    fi
+])dnl
+
+dnl APACHE_MPM_ENABLED(name)
+AC_DEFUN(APACHE_MPM_ENABLED,[
+    if ap_mpm_is_enabled $1; then
+        :
     else
+        eval "ap_enabled_mpm_$1=yes"
+        ap_enabled_mpms="$ap_enabled_mpms $1 "
+    fi
+])dnl
+
+ap_mpm_is_supported ()
+{
+    eval "tmp=\$ap_supported_mpm_$1"
+    if test -z "$tmp"; then
         return 1
+    else
+        return 0
     fi
 }
 
-dnl No such check for a shared MPM.
-ap_mpm_is_experimental ()
+ap_mpm_supports_shared ()
 {
-    if test "$apache_cv_mpm" = "event"; then
+    eval "tmp=\$ap_supported_mpm_$1"
+    if test "$tmp" = "shared"; then
         return 0
     else
         return 1
     fi
 }
 
-if ap_mpm_is_threaded; then
-  APR_CHECK_APR_DEFINE(APR_HAS_THREADS)
-
-  if test "x$ac_cv_define_APR_HAS_THREADS" = "xno"; then
-    AC_MSG_RESULT(The currently selected MPM requires threads which your system seems to lack)
-    AC_MSG_CHECKING(checking for replacement)
-    AC_MSG_RESULT(prefork selected)
-    apache_cv_mpm=prefork
-  else
-    case $host in
-      *-linux-*)
-        case `uname -r` in
-          2.0* )
-            dnl Threaded MPM's are not supported on Linux 2.0
-            dnl as on 2.0 the linuxthreads library uses SIGUSR1
-            dnl and SIGUSR2 internally
-            echo "Threaded MPM's are not supported on this platform"
-            AC_MSG_CHECKING(checking for replacement)
-            AC_MSG_RESULT(prefork selected)
-            apache_cv_mpm=prefork
-          ;;
-        esac
-      ;;
-    esac
-  fi
-fi
-
-APACHE_FAST_OUTPUT(server/mpm/Makefile)
-
-if test "$apache_cv_mpm" = "shared"; then
-  MPM_NAME=""
-  MPM_SUBDIR_NAME=""
-  MPM_LIB=""
-  MPM_DIR=""
-else
-  MPM_NAME=$apache_cv_mpm
-  if ap_mpm_is_experimental; then
-    AC_MSG_WARN(You have selected an EXPERIMENTAL MPM.  Be warned!)
-    MPM_SUBDIR_NAME=experimental/$MPM_NAME
-  else
-    MPM_SUBDIR_NAME=$MPM_NAME
-  fi
-  MPM_DIR=server/mpm/$MPM_SUBDIR_NAME
-  MPM_LIB=$MPM_DIR/lib${MPM_NAME}.la
+ap_mpm_is_threaded ()
+{
+    if test "$mpm_build" = "shared" -a ac_cv_define_APR_HAS_THREADS = "yes"; then
+        return 0
+    fi
 
-  APACHE_SUBST(MPM_NAME)
-  APACHE_SUBST(MPM_SUBDIR_NAME)
-  MODLIST="$MODLIST mpm_${MPM_NAME}"
-fi
+    for mpm in $ap_enabled_mpms; do
+        eval "tmp=\$ap_threaded_mpm_$mpm"
+        if test "$tmp" = "yes"; then
+            return 0
+        fi
+    done
+    return 1
+}
 
-APACHE_SUBST(MPM_NAME)
-APACHE_SUBST(MPM_SUBDIR_NAME)
+ap_mpm_is_enabled ()
+{
+    eval "tmp=\$ap_enabled_mpm_$1"
+    if test "$tmp" = "yes"; then
+        return 0
+    else
+        return 1
+    fi
+}