config BR2_PACKAGE_PHP_ARCH_SUPPORTS
	bool
	# see fiber_cpu in configure.ac
	default y if BR2_aarch64 || BR2_aarch64_be
	default y if BR2_arm || BR2_armeb
	default y if BR2_i386 || BR2_x86_64
	default y if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el
	default y if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le
	default y if BR2_RISCV_64
	default y if BR2_s390x
	default y if BR2_TOOLCHAIN_HAS_UCONTEXT
	default y if BR2_PACKAGE_LIBUCONTEXT_ARCH_SUPPORTS

config BR2_PACKAGE_PHP
	bool "php"
	depends on BR2_PACKAGE_PHP_ARCH_SUPPORTS
	# PHP uses -export-dynamic, which breaks with elf2flt with a
	# message like "ld.real: section .junk LMA [...,...] overlaps
	# section .text LMA [...,...]"
	depends on !BR2_BINFMT_FLAT
	depends on BR2_USE_WCHAR
	select BR2_PACKAGE_PHP_SAPI_CGI if \
	       !BR2_PACKAGE_PHP_SAPI_APACHE && \
	       !BR2_PACKAGE_PHP_SAPI_CLI && \
	       !BR2_PACKAGE_PHP_SAPI_FPM &&  \
	       BR2_USE_MMU
	select BR2_PACKAGE_PHP_SAPI_CLI if !BR2_USE_MMU
	select BR2_PACKAGE_PCRE2
	select BR2_PACKAGE_LIBUCONTEXT if \
		BR2_PACKAGE_LIBUCONTEXT_ARCH_SUPPORTS
	help
	  PHP  is a widely-used general-purpose scripting
	  language that is especially suited for Web development
	  and can be embedded into HTML.

	  http://www.php.net

if BR2_PACKAGE_PHP

config BR2_PACKAGE_PHP_SAPI_APACHE
	bool "Apache interface"
	depends on BR2_PACKAGE_APACHE
	help
	  Apache module

config BR2_PACKAGE_PHP_SAPI_CGI
	bool "CGI interface"
	# CGI uses fork()
	depends on BR2_USE_MMU
	help
	  Common Gateway Interface

config BR2_PACKAGE_PHP_SAPI_CLI
	bool "CLI interface"
	help
	  Command Line Interface

config BR2_PACKAGE_PHP_SAPI_FPM
	bool "FPM interface"
	depends on BR2_USE_MMU
	# "Sparc v8 and predecessors are not and will not be supported"
	depends on !BR2_sparc
	help
	  PHP-FPM (FastCGI Process Manager)

source "package/php/Config.ext"

endif

comment "php needs a toolchain w/ wchar"
	depends on BR2_PACKAGE_PHP_ARCH_SUPPORTS
	depends on !BR2_BINFMT_FLAT
	depends on !BR2_USE_WCHAR
