# Contributor: Andy Blyler <andy@blyler.cc>
# Contributor: Ɓukasz Jendrysik <scadu@yandex.com>
# Contributor: Carlo Landmeter <clandmeter@gmail.com>
# Maintainer: Matt Smith <mcs@darkregion.net>
setvar pkgname = 'php5'
setvar pkgver = '5.6.31'
setvar pkgrel = '1'
setvar pkgdesc = ""The PHP language runtime engine""
setvar url = ""http://www.php.net/""
setvar arch = ""all""
setvar license = ""PHP-3""
setvar depends = ""$pkgname-cli""
setvar depends_dev = ""$pkgname-cli pcre-dev""
setvar install = ""$pkgname.post-upgrade""
setvar provides = ""php""
setvar makedepends = ""
	$depends_dev
	apache2-dev
	apr-dev
	apr-util-dev
	aspell-dev
	bzip2-dev
	curl-dev
	db-dev
	enchant-dev
	expat-dev
	freetds-dev
	freetype-dev
	gdbm-dev
	gettext-dev
	gmp-dev
	icu-dev
	imap-dev
	libevent-dev
	libgcrypt-dev
	libjpeg-turbo-dev
	libmcrypt-dev
	libpng-dev
	libtool
	libxml2-dev
	libxslt-dev
	mariadb-dev
	net-snmp-dev
	openldap-dev
	libressl-dev
	postgresql-dev
	readline-dev
	sqlite-dev
	unixodbc-dev
	zlib-dev
	autoconf
	bison
	""
setvar subpackages = ""$pkgname-dbg $pkgname-dev $pkgname-doc $pkgname-common::noarch $pkgname-cgi
	$pkgname-cli $pkgname-fpm $pkgname-apache2 $pkgname-embed
	$pkgname-phpdbg

	$pkgname-pear::noarch
	$pkgname-bcmath
	$pkgname-bz2
	$pkgname-calendar
	$pkgname-ctype
	$pkgname-curl:_curl
	$pkgname-dba
	$pkgname-dom
	$pkgname-enchant
	$pkgname-exif
	$pkgname-ftp
	$pkgname-gd
	$pkgname-gettext
	$pkgname-gmp
	$pkgname-iconv
	$pkgname-imap
	$pkgname-intl
	$pkgname-json
	$pkgname-ldap
	$pkgname-mcrypt
	$pkgname-mysql
	$pkgname-mysqli
	$pkgname-odbc
	$pkgname-openssl
	$pkgname-pcntl
	$pkgname-pdo
	$pkgname-pdo_mysql
	$pkgname-pdo_odbc
	$pkgname-pdo_pgsql
	$pkgname-pdo_sqlite
	$pkgname-pgsql
	$pkgname-phar
	$pkgname-posix
	$pkgname-pspell
	$pkgname-shmop
	$pkgname-snmp
	$pkgname-soap
	$pkgname-sockets
	$pkgname-sqlite3
	$pkgname-sysvmsg
	$pkgname-sysvsem
	$pkgname-sysvshm
	$pkgname-xml
	$pkgname-xmlreader
	$pkgname-xmlrpc
	$pkgname-xsl
	$pkgname-zip
	$pkgname-zlib
	$pkgname-mssql
	$pkgname-pdo_dblib
	$pkgname-wddx
	$pkgname-opcache
	""

setvar source = ""http://php.net/distributions/php-$pkgver.tar.bz2
	php-fpm.initd
	php5-module.conf
	php-install-pear-xml.patch
	gd-iconv.patch
	""

setvar _apiver = ""20131106""
setvar _extdir = ""/usr/lib/$pkgname/modules""
setvar _srcdir = ""$srcdir"/php-$pkgver"
setvar _confdir = "/etc/$pkgname"

# seems like pear hardcode /usr/share/pear directory
setvar _peardir = "/usr/share/pear"

# secfixes:
#   5.6.31-r0:
#     - CVE-2017-9224
#     - CVE-2017-9226
#     - CVE-2017-9227
#     - CVE-2017-9228
#     - CVE-2017-9229

proc prepare {
	cd $_srcdir
	update_config_sub
	for i in $source {
		case (i) {
		*.patch { msg $i; patch -p1 -i "$srcdir"/$i || return 1}
		}
	}

	# safty check for api changes
	local vapi=$(sed -n '/#define PHP_API_VERSION/{s/.* //;p}' main/php.h)
	if test $vapi != $_apiver {
		error "Upstreram API version is now $vapi. Expecting $_vapi"
		return 1
	}
	autoconf
}

proc _do_build {
	local _flavor="$1"
	shift
	local _builddir="$srcdir"/build-$_flavor
	mkdir -p $_builddir
	cd $_builddir
	export EXTENSION_DIR=$_extdir
	export PEAR_INSTALLDIR="$_peardir"
	"$_srcdir"/configure $[join(ARGV)] || return 1
	sed -ri "s/^(EXTRA_LDFLAGS[ ]*\=.*)/\1 -lpthread/" Makefile  # see #183
	make || return 1
}

proc build {
	setvar _phpconfig = ""\
		--build=$CBUILD \
		--host=$CHOST \
		--prefix=/usr \
		--sysconfdir=$_confdir \
		--localstatedir=/var \
		--with-layout=GNU \
		--with-config-file-path=$_confdir \
		--with-config-file-scan-dir=$_confdir/conf.d \
		--enable-inline-optimization \
		--disable-debug \
		--disable-rpath \
		--disable-static \
		--enable-shared \
		--mandir=/usr/share/man \
		--with-pic \
		--program-suffix=5 \
		""

	setvar _phpextensions = "" \
		--enable-bcmath=shared \
		  --with-bz2=shared \
		--enable-calendar=shared \
		  --with-cdb \
		--enable-ctype=shared \
		  --with-curl=shared \
		--enable-dba=shared \
		  --with-db4=shared \
		--enable-dom=shared \
		  --with-enchant=shared \
		--enable-exif=shared \
		  --with-freetype-dir=shared,/usr \
		--enable-ftp=shared \
		  --with-gd=shared \
		--enable-gd-native-ttf \
		  --with-gdbm=shared \
		  --with-gettext=shared \
		  --with-gmp=shared \
		  --with-iconv=shared \
		  --with-icu-dir=/usr \
		  --with-imap=shared \
		  --with-imap-ssl=shared \
		--enable-intl=shared \
		  --with-jpeg-dir=shared,/usr \
		--enable-json=shared \
		  --with-ldap=shared \
		--enable-libxml=shared \
		--enable-mbregex \
		--enable-mbstring=all \
		  --with-mcrypt=shared \
		  --with-mysql=shared,mysqlnd \
		  --with-mysql-sock=/var/run/mysqld/mysqld.sock \
		  --with-mysqli=shared,mysqlnd \
		  --with-openssl=shared \
		  --with-pcre-regex=/usr \
		--enable-pcntl=shared \
		--enable-pdo=shared \
		  --with-pdo-mysql=shared,mysqlnd \
		  --with-pdo-odbc=shared,unixODBC,/usr \
		  --with-pdo-pgsql=shared \
		  --with-pdo-sqlite=shared,/usr \
		  --with-pgsql=shared \
		--enable-phar=shared \
		  --with-png-dir=shared,/usr \
		--enable-posix=shared \
		  --with-pspell=shared \
		  --with-regex=php \
		--enable-session \
		--enable-shmop=shared \
		  --with-snmp=shared \
		--enable-soap=shared \
		--enable-sockets=shared \
		  --with-sqlite3=shared,/usr \
		--enable-sysvmsg=shared \
		--enable-sysvsem=shared \
		--enable-sysvshm=shared \
		  --with-unixODBC=shared,/usr \
		--enable-xml=shared \
		--enable-xmlreader=shared \
		  --with-xmlrpc=shared \
		  --with-xsl=shared \
		--enable-wddx=shared \
		--enable-zip=shared \
		  --with-zlib=shared \
		--without-db1 \
		--without-db2 \
		--without-db3 \
		--without-qdbm \
		--with-mssql=shared \
		--with-pdo-dblib=shared \
		--enable-opcache \
		""

	# cgi, fcgi, cli, pear and extensions
	_do_build cgi \
		${_phpconfig} \
		--disable-cli \
		--enable-cgi \
		--enable-cli \
		--with-pear \
		--with-readline \
		--enable-phpdbg \
		${_phpextensions} \
		|| return 1

	# fpm
	cp -a "$srcdir"/build-cgi "$srcdir"/build-fpm
	_do_build fpm \
		${_phpconfig} \
		--disable-cli \
		--enable-fpm \
		${_phpextensions} \
		|| return 1

	# apache2
	cp -a "$srcdir"/build-cgi "$srcdir"/build-apache2
	_do_build apache2 \
		${_phpconfig} \
		--disable-cli \
		--with-apxs2 \
		${_phpextensions} \
		|| return 1

	# embed
	cp -a "$srcdir"/build-cgi "$srcdir"/build-embed
	_do_build embed \
		${_phpconfig} \
		--disable-cli \
		--enable-embed=shared \
		${_phpextensions} \
		|| return 1
}

proc package {
	cd "$srcdir"/build-cgi
	# install php-cgi, cli, pear and modules
	make -j1 install install-pear INSTALL_ROOT="$pkgdir" || return 1

	# cleanup after pear
	find $pkgdir -name '.*' | xargs rm -rf || return 1

	# install embed
	install -D -m755 "$srcdir"/build-embed/libs/libphp5.so \
		"$pkgdir"/usr/lib/libphp5.so || return 1
	install -D -m644 "$_srcdir"/sapi/embed/php_embed.h \
		"$pkgdir"/usr/include/php/sapi/embed/php_embed.h || return 1
}

proc dev {
	default_dev || return 1

	mkdir -p "$subpkgdir"/usr/lib/php "$subpkgdir"/usr/bin
	mv "$pkgdir"/usr/lib/php/build \
		"$subpkgdir"/usr/lib/php/ || return 1
	mv "$pkgdir"/usr/bin/php-config5 "$subpkgdir"/usr/bin/
}

proc doc {
	# man pages
	default_doc || return 1
	cd "$srcdir"/php-$pkgver

	# doc files
	setvar _docs = ""CODING_STANDARDS CREDITS EXTENSIONS INSTALL LICENSE NEWS \
	UPGRADING UPGRADING.INTERNALS""
	for _doc in $_docs README.* {
		install -Dm644 "$srcdir"/php-$pkgver/$_doc \
			"$subpkgdir"/usr/share/doc/$pkgname/$_doc || return 1
	}
}

proc common {
	setvar pkgdesc = ""PHP Common Files""
	setvar depends = """"

	cd "$srcdir"/php-$pkgver

	install -D -m644 php.ini-production "$subpkgdir"$_confdir/php.ini
	sed -ri -e "s:^; extension_dir = \"./\":extension_dir = \"$_extdir\":" \
		-e 's/;(date.timezone =)/\1 UTC/' \
		-e "s~^([;]*cgi\.rfc2616_headers.*)$~\1\n\n\; If this is enabled, the PHP CGI binary can safely be placed outside of the\n; web tree and people will not be able to circumvent .htaccess security.\ncgi\.discard_path = 1~" \
		"$subpkgdir"$_confdir/php.ini
}

proc cgi {
	setvar pkgdesc = ""PHP Common Gateway Interface (CGI)""
	setvar depends = ""$pkgname-common""
	mkdir -p "$subpkgdir"/usr/bin
	mv "$pkgdir"/usr/bin/php-cgi* "$subpkgdir"/usr/bin/
}

proc cli {
	setvar pkgdesc = ""PHP Command Line Interface (CLI)""
	setvar depends = ""$pkgname-common""
	mkdir -p "$subpkgdir"/usr/bin
	mv "$pkgdir"/usr/bin/php5 "$subpkgdir"/usr/bin/ || return 1
	# provide phpize here instead of -dev due to pecl command
	mv "$pkgdir"/usr/bin/phpize* "$subpkgdir"/usr/bin/ || return 1
}

proc fpm {
	setvar pkgdesc = ""PHP FastCGI Process Manager (FPM)""
	setvar depends = ""$pkgname-common""
	mkdir -p "$subpkgdir"$_confdir/fpm.d
	install -D -m755 "$srcdir"/build-fpm/sapi/fpm/php-fpm \
		"$subpkgdir"/usr/bin/php-fpm5 || return 1
	install -D -m644 "$srcdir"/build-fpm/sapi/fpm/php-fpm.conf \
		"$subpkgdir"$_confdir/php-fpm.conf || return 1
	install -D -m755 "$srcdir"/php-fpm.initd "$subpkgdir"/etc/init.d/php-fpm
	# enable some default options
	sed -ri	-e "s~^;(error_log)(.*)~\1 = /var/log/php-fpm.log~" \
		-e "s~^;(include)(.*)~\1 = $_confdir/fpm.d/*.conf~" \
		-e "s/^;(pm.start_servers)/\1/" \
		-e "s/^;(pm.min_spare_servers)/\1/" \
		-e "s/^;(pm.max_spare_servers)/\1/" \
		"$subpkgdir"$_confdir/php-fpm.conf || return 1
}

proc apache2 {
	setvar pkgdesc = ""PHP Module for Apache2""
	setvar depends = ""$pkgname-common apache2""
	install -D -m755 "$srcdir"/build-apache2/libs/libphp5.so \
		"$subpkgdir"/usr/lib/apache2/libphp5.so || return 1
	install -D -m644 "$srcdir"/php5-module.conf \
		"$subpkgdir"/etc/apache2/conf.d/php5-module.conf || return 1
}

proc embed {
	setvar pkgdesc = ""PHP Embed Library""
	setvar depends = ""$pkgname-common""
	mkdir -p "$subpkgdir"/usr/lib
	mv "$pkgdir"/usr/lib/libphp5.so "$subpkgdir"/usr/lib/
}

proc pear {
	setvar pkgdesc = ""PHP Extension and Application Repository (PEAR)""
	setvar depends = ""$pkgname-cli $pkgname-xml""
	mkdir -p "$subpkgdir"/usr/share "$subpkgdir"$_confdir \
		"$subpkgdir"/usr/bin
	mv "$pkgdir"/usr/bin/pecl \
		"$pkgdir"/usr/bin/pear \
		"$pkgdir"/usr/bin/peardev \
		"$subpkgdir"/usr/bin/ || return 1
	mv "$pkgdir"$_confdir/pear.conf \
		"$subpkgdir"$_confdir/ || return 1
	mv "$pkgdir"${_peardir} \
		"$subpkgdir"/usr/share/ || return 1
}

proc phpdbg {
	setvar pkgdesc = ""Interactive PHP debugger""
	mkdir -p "$subpkgdir"/usr/bin
	mv "$pkgdir"/usr/bin/phpdbg* "$subpkgdir"/usr/bin/
}

proc _mv_ext {
	local ext=$1
	local ini=$ext.ini
	setvar pkgdesc = ""${ext} extension for PHP""

	# extension dependencies
	if test -n ${2-} {
		setvar depends = "${2-}"
	}
	setvar depends = ""${pkgname} ${depends}""

	# work around dependency issue
	# https://bugs.alpinelinux.org/issues/1848
	if test $ext = "wddx" {
		setvar ini = "xml_$ext.ini"
	}

	mkdir -p "$subpkgdir"/$_extdir
	mv "$pkgdir"/$_extdir/${ext}.so "$subpkgdir"/$_extdir/ || return 1
	mkdir -p "$subpkgdir"$_confdir/conf.d
	case (1) {
		opcache {
			echo "zend_extension=${ext}.so" > "$subpkgdir"$_confdir/conf.d/$ini
			}
		* {
			echo "extension=${ext}.so" > "$subpkgdir"$_confdir/conf.d/$ini
			}
	}
}

proc bcmath { _mv_ext bcmath; }
proc bz2 { _mv_ext bz2; }
proc calendar { _mv_ext calendar; }
proc ctype { _mv_ext ctype; }
proc _curl { _mv_ext curl; }
proc dba { _mv_ext dba; }
proc dom { _mv_ext dom; }
proc enchant { _mv_ext enchant; }
proc exif { _mv_ext exif; }
proc ftp { _mv_ext ftp; }
proc gd { _mv_ext gd; }
proc gettext { _mv_ext gettext; }
proc gmp { _mv_ext gmp; }
proc iconv { _mv_ext iconv; }
proc imap { _mv_ext imap; }
proc intl { _mv_ext intl; }
proc json { _mv_ext json; }
proc ldap { _mv_ext ldap; }
proc mcrypt { _mv_ext mcrypt; }
proc mysql { _mv_ext mysql; }
proc mysqli { _mv_ext mysqli; }
proc odbc { _mv_ext odbc unixodbc; }
proc openssl { _mv_ext openssl; }
proc pcntl { _mv_ext pcntl; }
proc pdo { _mv_ext pdo; }
proc pdo_mysql { _mv_ext pdo_mysql $pkgname-pdo; }
proc pdo_odbc { _mv_ext pdo_odbc $pkgname-pdo; }
proc pdo_pgsql { _mv_ext pdo_pgsql $pkgname-pdo; }
proc pdo_sqlite { _mv_ext pdo_sqlite $pkgname-pdo; }
proc pgsql { _mv_ext pgsql; }
proc phar {
			_mv_ext phar
			mkdir -p "$subpkgdir"/usr/bin
			mv "$pkgdir"/usr/bin/phar* "$subpkgdir"/usr/bin/
		}
proc posix { _mv_ext posix; }
proc pspell { _mv_ext pspell; }
proc shmop { _mv_ext shmop; }
proc snmp { _mv_ext snmp; }
proc soap { _mv_ext soap; }
proc sockets { _mv_ext sockets; }
proc sqlite3 { _mv_ext sqlite3; }
proc sysvmsg { _mv_ext sysvmsg; }
proc sysvsem { _mv_ext sysvsem; }
proc sysvshm { _mv_ext sysvshm; }
proc xml { _mv_ext xml; }
proc xmlreader { _mv_ext xmlreader $pkgname-dom; }
proc xmlrpc { _mv_ext xmlrpc $pkgname-xml; }
proc xsl { _mv_ext xsl $pkgname-dom; }
proc zip { _mv_ext zip; }
proc zlib { _mv_ext zlib; }
proc mssql { _mv_ext mssql; }
proc pdo_dblib { _mv_ext pdo_dblib "$pkgname-pdo freetds"; }
proc wddx { _mv_ext wddx; }
proc opcache { _mv_ext opcache; }

setvar sha512sums = ""fe0a0572917287a89910cc4d1bca7a8be17fb09d0459d68fea7b32f4b9fd94efbf36d90f8d7d34baee60efc6b0aeac1414a658fc0b451c5eb2f8e3864e20e3c0  php-5.6.31.tar.bz2
f7d922cab98617ef910b4c14974e768c85e60424cd1b216f688b34b2d823b642a5b896463008c134ce47c150f9407f5c438823b7e7bc89b3fb440cd3e97b9d7e  php-fpm.initd
895e94c791bd82060ad820fef049d366a09c932097faa6b7b9a2c2e9e00a18cb7c0f9b128679c7659b404379266fd0f95dba5c0333f626194cf60f7bf6044102  php5-module.conf
f1177cbf6b1f44402f421c3d317aab1a2a40d0b1209c11519c1158df337c8945f3a313d689c939768584f3e4edbe52e8bd6103fb6777462326a9d94e8ab1f505  php-install-pear-xml.patch
6ecd0be2da1dc5b1d7512e46a2a5cd107a8b2a8c364efc9c624a7d6b2ab081685a329c94c22c970dc14c5c1115f702c512e97ae858da1bc69c6423323dbeeba2  gd-iconv.patch""