config BR2_PACKAGE_APACHE
	bool "apache"
	depends on !BR2_STATIC_LIBS
	depends on BR2_TOOLCHAIN_HAS_THREADS
	depends on BR2_USE_MMU # apr
	select BR2_PACKAGE_APR_UTIL
	select BR2_PACKAGE_PCRE
	help
	  The Apache HTTP Server Project is an effort to develop and
	  maintain an open-source HTTP server for modern operating
	  systems including UNIX and Windows NT. The goal of this
	  project is to provide a secure, efficient and extensible
	  server that provides HTTP services in sync with the current
	  HTTP standards.

	  http://httpd.apache.org

if BR2_PACKAGE_APACHE

choice
	prompt "Multi-Processing Module (MPM)"
	default BR2_PACKAGE_APACHE_MPM_WORKER
	help
	  Select the Multi-Processing Module (MPM).

config BR2_PACKAGE_APACHE_MPM_EVENT
	bool "event"
	help
	  A variant of the worker MPM with the goal of consuming threads
	  only for connections with active processing

config BR2_PACKAGE_APACHE_MPM_PREFORK
	bool "prefork"
	help
	  Implements a non-threaded, pre-forking web server

config BR2_PACKAGE_APACHE_MPM_WORKER
	bool "worker"
	help
	  Implements a hybrid multi-threaded multi-process web server

endchoice

endif

comment "apache needs a toolchain w/ dynamic library, threads"
	depends on BR2_USE_MMU
	depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS
