summaryrefslogtreecommitdiff
path: root/user/php7/APKBUILD
blob: daa11c58661bbb2dc9889ff7efeaa730619f422d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
# Contributor: Valery Kartel <valery.kartel@gmail.com>
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Maintainer: Max Rees <maxcrees@me.com>

# Bundled libraries
#
# Name      | License | Location               | State
# ----------+---------+------------------------+---------
# bcmath    | LGPL2   | ext/bcmath/libbcmath   | used
# date      | MIT     | ext/date/lib           | used
# gd        | BSD     | ext/gd/libgd           | used
# file      | BSD     | ext/fileinfo/libmagic  | used
# libmbfl   | LGPLv2  | ext/mbstring/libmbfl   | used
# oniguruma | BSD     | ext/mbstring/oniguruma | used
# pcre      | BSD     | ext/pcre/pcrelib       | not used
# sqlite3   | Public  | ext/sqlite3/libsqlite  | not used
# libzip    | BSD     | ext/zip/lib            | not used
# libXMLRPC | BSD     | ext/xmlrpc/libxmlrpc   | used

# Static extensions
#
# Name      | Reason
# ----------+--------------------------------------------
# zlib      | https://bugs.alpinelinux.org/issues/8299

# secfixes:
#   7.2.16-r0:
#     - CVE-2016-10166
#     - CVE-2018-20783
#     - CVE-2019-6977
#     - CVE-2019-9020
#     - CVE-2019-9021
#     - CVE-2019-9022
#     - CVE-2019-9023
#     - CVE-2019-9024
#   7.2.19-r0:
#     - CVE-2019-11036
#     - CVE-2019-11038
#     - CVE-2019-11039
#     - CVE-2019-11040

pkgname=php7
_pkgname=php
pkgver=7.2.19
pkgrel=0
_apiver=20170718
pkgdesc="The PHP7 language runtime engine"
url="https://php.net/"
arch="all"
license="PHP-3.01 AND Zend-2.0 AND Custom:TSRM AND LGPL-2.1+ AND MIT AND Beerware AND Public-Domain AND BSD-3-Clause AND Apache-1.0 AND PostgreSQL AND BSD-2-Clause AND Zlib AND BSD-4-Clause"
depends=""
depends_dev="$pkgname=$pkgver-r$pkgrel autoconf icu-dev libedit-dev libxml2-dev
	pcre-dev zlib-dev"
makedepends="autoconf
	apache-httpd-dev
	aspell-dev
	bison
	bzip2-dev
	curl-dev
	db-dev
	enchant-dev
	freetds-dev
	freetype-dev
	gdbm-dev
	gettext-tiny
	gmp-dev
	icu-dev
	krb5-dev
	libedit-dev
	libical-dev
	libjpeg-turbo-dev
	libpng-dev
	openssl-dev
	libwebp-dev
	libxml2-dev
	libxpm-dev
	libxslt-dev
	libzip-dev
	net-snmp-dev
	openldap-dev
	pcre-dev
	postgresql-dev
	re2c
	sqlite-dev
	unixodbc-dev
	zlib-dev"
subpackages="$pkgname-dev $pkgname-doc $pkgname-apache $pkgname-phpdbg
	$pkgname-embed $pkgname-litespeed $pkgname-cgi $pkgname-fpm
	$pkgname-pear::noarch $pkgname-dbg"
source="https://www.php.net/distributions/$_pkgname-$pkgver.tar.bz2
	$_pkgname-fpm.initd
	$_pkgname-fpm.logrotate
	$_pkgname-module.conf
	disabled-tests.list
	install-pear.patch
	fpm-paths.patch
	allow-build-recode-and-imap-together.patch
	fix-tests-devserver.patch
	pwbuflen.patch
	enchant-2.patch"
builddir="$srcdir/$_pkgname-$pkgver"
_libdir="/usr/lib/$_pkgname"
_extension_dir="$_libdir/modules"
_extension_confd="/etc/$_pkgname/conf.d"

# Usage: add_ext [with|enable] name [extension dependencies...] [configure options...]
add_ext() {
	local ext="$1"
	shift
	# add_ext [with|enable] name -> --[with|enable]-name=shared
	if [ "$ext" = "with" ] || [ "$ext" = "enable" ]; then
		_configure_ext_opts="$_configure_ext_opts --$ext-$1=shared"
		ext="$1"
		shift
	fi

	case "$ext" in
		phar) subpackages="$subpackages $pkgname-$ext:$ext";;
		*) subpackages="$subpackages $pkgname-$ext:_extension";;
	esac
	_extensions="$_extensions $ext"

	local opt
	local prev
	for opt in $@; do
		case "$opt" in
		-*)
			# Add more configure options
			_configure_ext_opts="$_configure_ext_opts $opt"
			;;
		license:*)
			# Add custom license
			opt="$(printf '%s' "${opt#license:}" | sed 's/:/ AND /g')"
			eval "_licenses_$ext='$opt'"
			;;
		*)
			# Add dependencies
			prev="$(eval echo \$_deps_$ext)"
			eval "_deps_$ext='$prev $opt'"
			;;
	esac
	done
}
enable_ext() { add_ext enable $@; }
with_ext() { add_ext with $@; }

enable_ext 'bcmath' \
	license:LGPL-2.0+:PHP-3.01
with_ext 'bz2'
enable_ext 'calendar'
enable_ext 'ctype'
with_ext 'curl'
enable_ext 'dba' \
	--with-db4 \
	--with-dbmaker=shared \
	--with-gdbm
enable_ext 'dom'
with_ext 'enchant'
enable_ext 'exif' mbstring
enable_ext 'fileinfo' \
	license:PHP-3.0:BSD-2-Clause:BSD-3-Clause:Public-Domain
enable_ext 'ftp'
with_ext 'gd' \
	--with-freetype-dir=/usr \
	--disable-gd-jis-conv \
	--with-jpeg-dir=/usr \
	--with-png-dir=/usr \
	--with-webp-dir=/usr \
	--with-xpm-dir=/usr
with_ext 'gettext'
with_ext 'gmp'
with_ext 'iconv'
# Needs makedepeneds=imap-dev
#with_ext 'imap' \
#	--with-imap-ssl
enable_ext 'intl'
enable_ext 'json'
with_ext 'ldap' \
	--with-ldap-sasl
enable_ext 'mbstring' \
	license:PHP-3.01:OLDAP-2.8:BSD-2-Clause:Public-Domain:LGPL-2.0-only:LGPL-2.1-only
add_ext 'mysqli' mysqlnd openssl \
	--with-mysqli=shared,mysqlnd \
	--with-mysql-sock=/run/mysqld/mysqld.sock
enable_ext 'mysqlnd' openssl
add_ext 'odbc' \
	--with-unixODBC=shared,/usr
enable_ext 'opcache'
with_ext 'openssl' \
	--with-system-ciphers \
	--with-kerberos
enable_ext 'pcntl'
enable_ext 'pdo'
add_ext 'pdo_dblib' pdo \
	--with-pdo-dblib=shared
add_ext 'pdo_mysql' pdo mysqlnd \
	--with-pdo-mysql=shared,mysqlnd
add_ext 'pdo_odbc' pdo \
	license:PHP-3.0 \
	--with-pdo-odbc=shared,unixODBC,/usr
add_ext 'pdo_pgsql' pdo \
	--with-pdo-pgsql=shared
add_ext 'pdo_sqlite' pdo \
	--with-pdo-sqlite=shared,/usr
with_ext 'pgsql'
enable_ext 'phar'
enable_ext 'posix'
with_ext 'pspell'
# Needs makedepends=recode-dev
#with_ext 'recode'
enable_ext 'session'
enable_ext 'shmop'
enable_ext 'simplexml'
with_ext 'snmp'
enable_ext 'soap' \
	license:PHP-3.01:PHP-2.02
# Needs makedepends=libsodium-dev
#with_ext 'sodium'
enable_ext 'sockets'
add_ext 'sqlite3' \
	--with-sqlite3=shared,/usr
enable_ext 'sysvmsg'
enable_ext 'sysvsem'
enable_ext 'sysvshm'
# Needs makedepends=tidyhtml-dev
#with_ext 'tidy'
enable_ext 'tokenizer'
enable_ext 'wddx' xml
enable_ext 'xml'
enable_ext 'xmlreader' dom
with_ext 'xmlrpc' xml
enable_ext 'xmlwriter'
with_ext 'xsl' dom
enable_ext 'zip' \
	--with-libzip=/usr

# secfixes:
#   7.2.5-r0:
#     - CVE-2018-5712
#   7.2.8-r0:
#     - CVE-2015-9253
#     - CVE-2018-12882
#   7.2.11-r2:
#     - CVE-2018-19935

prepare() {
	default_prepare
	update_config_sub

	local vapi="$(sed -n '/#define PHP_API_VERSION/{s/.* //;p}' main/php.h)"
	if [ "$vapi" != "$_apiver" ]; then
		error "Upstreram API version is now $vapi. Expecting $_apiver"
		error "After updating _apiver, all 3rd-party extensions must be rebuilt."
		return 1
	fi

	# https://bugs.php.net/63362 - Not needed but installed headers.
	# Drop some Windows specific headers to avoid installation,
	# before build to ensure they are really not needed.
	rm -f TSRM/tsrm_win32.h \
		TSRM/tsrm_config.w32.h \
		Zend/zend_config.w32.h \
		ext/mysqlnd/config-win.h \
		ext/standard/winver.h \
		main/win32_internal_function_disabled.h \
		main/win95nt.h

	# Fix some bogus permissions.
	find . -name '*.[ch]' -exec chmod 644 {} +

	# XXX: Delete failing tests.
	sed -n '/^[^#]/p' "$srcdir/disabled-tests.list" | while read item; do
		rm $item
	done

	autoconf
}

# Notes:
# * gd-jis-conv breaks any non-latin font rendering (vakartel).
# * libxml cannot be build as shared.
# * Doesn't work with system-provided onigurama, some tests fail (invalid code
#   point); probably because bundled onigurama is version 5.x, but we have 6.x.
_build() {
	EXTENSION_DIR=$_extension_dir ./configure \
		--build=$CBUILD \
		--host=$CHOST \
		--prefix=/usr \
		--libdir=$_libdir \
		--datadir=/usr/share/$_pkgname \
		--sysconfdir=/etc/$_pkgname \
		--localstatedir=/var \
		--enable-debug \
		--with-layout=GNU \
		--with-pic \
		--enable-maintainer-zts \
		--with-pear=/usr/share/$_pkgname \
		--with-config-file-path=/etc/$_pkgname \
		--with-config-file-scan-dir=$_extension_confd \
		--disable-short-tags \
		--with-icu-dir=/usr \
		--with-libedit \
		--without-readline \
		--enable-libxml \
			--with-libxml-dir=/usr \
		--with-pcre-regex=/usr \
		--with-zlib \
			--with-zlib-dir=/usr \
		$_configure_ext_opts \
		$@

	make
}

build() {
	# phpdbg
	_build --enable-phpdbg \
		--enable-phpdbg-webhelper \
		--disable-cgi \
		--disable-cli

	# apache-httpd module
	_build --disable-phpdbg \
		--disable-cgi \
		--disable-cli \
		--with-apxs2
	mv libs/libphp7.so sapi/apache2handler/mod_php.so

	# cgi, cli, fpm, embed, litespeed
	_build --disable-phpdbg \
		--enable-fpm \
		--enable-embed \
		--with-litespeed
}

check() {
	# PHP is so stupid that it's not able to resolve dependencies
	# between extensions and load them in correct order, so we must
	# help it...
	# opcache is Zend extension, it's handled specially in Makefile
	local php_modules="$(_extensions_by_load_order \
		| grep -vx opcache \
		| xargs -n 1 printf "'$builddir/modules/%s.la' ")"
	sed -i "/^PHP_TEST_SHARED_EXTENSIONS/,/extension=/ \
		s|in \$(PHP_MODULES)\"*|in $php_modules|" Makefile

	NO_INTERACTION=1 REPORT_EXIT_STATUS=1 \
		SKIP_SLOW_TESTS=1 SKIP_ONLINE_TESTS=1 TEST_TIMEOUT=10 \
		TZ= LANG= LC_ALL= \
		make test

	echo 'NOTE: We have skipped quite a lot tests, see disabled-tests.list.'
}

package() {
	make -j1 INSTALL_ROOT="$pkgdir" install

	install -Dm644 php.ini-production "$pkgdir"/etc/$_pkgname/php.ini
	find "$pkgdir" -name '.*' | xargs rm -rf
	rmdir "$pkgdir"/var/run
}

dev() {
	default_dev
	cd "$pkgdir"

	_mv usr/bin/phpize "$subpkgdir"/usr/bin/
	_mv ./$_libdir/build "$subpkgdir"/$_libdir/
}

doc() {
	default_doc
	cd "$builddir"

	mkdir -p "$subpkgdir/usr/share/doc/$_pkgname"
	cp CODING_STANDARDS CREDITS EXTENSIONS INSTALL LICENSE NEWS \
		README* UPGRADING* \
		"$subpkgdir/usr/share/doc/$_pkgname/"
}

apache() {
	pkgdesc="PHP7 Module for apache-httpd"
	depends="$pkgname apache-httpd"

	install -D -m 755 "$builddir"/sapi/apache2handler/mod_php.so \
		"$subpkgdir"/usr/libexec/apache2/mod_php.so
	install -D -m 644 "$srcdir"/php-module.conf \
		"$subpkgdir"/etc/apache2/conf.d/php-module.conf
}

phpdbg() {
	pkgdesc="Interactive PHP7 debugger"
	#depends="$pkgname" ?

	install -Dm755 "$builddir"/sapi/phpdbg/phpdbg \
		"$subpkgdir"/usr/bin/phpdbg
}

embed() {
	pkgdesc="PHP7 Embedded Library"
	#depends="$pkgname" ?

	_mv "$pkgdir"/usr/lib/libphp*.so "$subpkgdir"/usr/lib/
}

litespeed() {
	pkgdesc="PHP7 LiteSpeed SAPI"
	#depends="$pkgname" ?

	mkdir -p "$subpkgdir"/usr/bin
	mv "$pkgdir"/usr/bin/lsphp "$subpkgdir"/usr/bin
}

cgi() {
	pkgdesc="PHP7 Common Gateway Interface"
	depends="$pkgname"

	_mv "$pkgdir"/usr/bin/php-cgi "$subpkgdir"/usr/bin/
}

fpm() {
	pkgdesc="PHP7 FastCGI Process Manager"
	depends="$pkgname"
	cd "$pkgdir"

	_mv var "$subpkgdir"/
	_mv usr/share/$_pkgname/fpm "$subpkgdir"/var/lib/$_pkgname/
	_mv usr/sbin "$subpkgdir"/usr/
	_mv etc/$_pkgname/php-fpm* "$subpkgdir"/etc/$_pkgname/

	local file; for file in php-fpm.conf php-fpm.d/www.conf; do
		mv "$subpkgdir"/etc/$_pkgname/$file.default \
			"$subpkgdir"/etc/$_pkgname/$file
	done

	install -D -m 755 "$srcdir"/$_pkgname-fpm.initd \
		"$subpkgdir"/etc/init.d/php-fpm

	install -D -m 644 "$srcdir"/$_pkgname-fpm.logrotate \
		"$subpkgdir"/etc/logrotate.d/php-fpm

	mkdir -p "$subpkgdir"/var/log/$_pkgname
}

pear() {
	pkgdesc="PHP7 Extension and Application Repository"
	depends="$pkgname $pkgname-xml"
	cd "$pkgdir"

	# pecl needs xml extension and since we build it as shared, it must be
	# explicitly declared to be loaded.
	sed -i 's/\$INCARG/& -d extension=xml.so/' usr/bin/pecl

	mkdir -p "$subpkgdir"/usr/bin
	local file; for file in pecl pear peardev; do
		mv usr/bin/$file "$subpkgdir"/usr/bin/$file
	done

	_mv etc/php/pear.conf "$subpkgdir"/etc/php/
	_mv usr/share "$subpkgdir"/usr/
}

phar() {
	_extension
	cd "$pkgdir"

	mkdir -p "$subpkgdir"/usr/bin
	mv usr/bin/phar.phar "$subpkgdir"/usr/bin/phar.phar

	rm usr/bin/phar
	ln -s phar.phar "$subpkgdir"/usr/bin/phar
}

_extension() {
	local ext="${subpkgname#$pkgname-}"
	local extdesc="$(head -n1 "$builddir"/ext/$ext/CREDITS 2>/dev/null ||:)"
	depends="$pkgname"
	local dep; for dep in $(eval echo \$_deps_$ext); do
		depends="$depends $pkgname-$dep"
	done
	pkgdesc="PHP7 extension: ${extdesc:-$ext}"
	if [ -n "$(eval echo \$_licenses_$ext)" ]; then
		license="$(eval echo \$_licenses_$ext)"
	fi

	local load_order=$(_extension_load_order "$ext")

	# extension prefix
	local prefix=
	[ "$ext" = "opcache" ] && prefix="zend_"

	_mv "$pkgdir"/$_extension_dir/$ext.so \
		"$subpkgdir"/$_extension_dir/

	mkdir -p "$subpkgdir"/$_extension_confd
	echo "${prefix}extension=$ext.so" \
		> "$subpkgdir"/$_extension_confd/$(printf %02d $load_order)_$ext.ini
}

# Prints a load order (0-based integer) for the given extension name. Extension
# with lower load order should be loaded before exts with higher load order.
# It's based on number of dependencies of the extension (with exception for
# "imap"), which is flawed, but simple and good enough for now.
_extension_load_order() {
	local ext="$1"
	local deps="$(eval echo \$_deps_$ext)"

	case "$ext" in
		# This must be loaded after recode, even though it does
		# not depend on it.
		imap) echo 1;;
		# depends=$pkgname
		phar) echo 1;;
		*) echo "$deps" | wc -w;;
	esac
}

# Prints $_extensions sorted by load order and name.
_extensions_by_load_order() {
	local deps list ext

	for ext in $_extensions; do
		list="$list $(_extension_load_order $ext);$ext"
	done
	printf '%s\n' $list | sort -t ';' -k 1 | sed -E 's/\d+;//'
}

_mv() {
	local dest; for dest; do true; done  # get last argument
	mkdir -p "$dest"
	mv $@
}

sha512sums="79077e73075f4aaba86699c536d8bad4929d351ad40f89c35b6f9ff0d1237b9e3d528be2918dae16519659bdaf93c5ab16fc81653fe13f667e6251871f05d722  php-7.2.19.tar.bz2
23df4e779c809db3e3b8e5b0353b1aafaad2f3dc56f2d1cd45f9b0e3ad71b32e40700d6ebfe914b3c87e8e0b670d0dc862ded1e5c898adf160e33dea372e044f  php-fpm.initd
01d4ba3ef104ea378eb0e8cbb7bdee3fdf65e4bd6865eb3bc6c0dc4af31c2d52887abdf0150b5ef984b877860285a3b1af84b11ffebb5b8b722ea9faf83edfeb  php-fpm.logrotate
a7f9ba5e11652fd1cb9e756c3269269a95de083ecb5be936a85c7a09c1396db9088e0251c6a643c40235c0e776fce2a471e5c7f5a033b85c7d3b3110c2b39e48  php-module.conf
b1008eabc86fcff88336fe2961e3229c159c930a05d97359136c381c5c1cc572a33110308a3e5ef5e31c60327f76c9ef02b375cd2ea8ff9caa7deeddc216f4ce  disabled-tests.list
f1177cbf6b1f44402f421c3d317aab1a2a40d0b1209c11519c1158df337c8945f3a313d689c939768584f3e4edbe52e8bd6103fb6777462326a9d94e8ab1f505  install-pear.patch
a77dd3bdf9dc7a0f2c06ff3e7c425d062bbaa29902c17402ce98701dc99499be863ad543aa5e6a7d1c249702d6afb193398dd3199ae58e42b32b95d434fb1883  fpm-paths.patch
f8ecae241a90cbc3e98aa4deb3d5d35ef555f51380e29f4e182a8060dffeb84be74f030a14c6b452668471030d78964f52795ca74275db05543ccad20ef1f2cc  allow-build-recode-and-imap-together.patch
f8bb322e56df79dd9f391737fb8737945cc730b14c7dc2ae8688979c565a9b97f5f2a12c9fcd0d8124624a9d09bd10228147d9e999bb94909bbe249f0a50646c  fix-tests-devserver.patch
8e538063d872f6770a57cdb844226a771ccda3d387dd1f199bb08c274b94fbe12ec0ef6df75c32071f308cb8f4ab51b91b520c7c2ed687adf96d0d322788e463  pwbuflen.patch
03de56676449ddc1ba1fc9c4fee2b2ed620cd1a8ce52d288c91b42e081182871ade55c8dbbe1c8286bc4eadcd92d497a62ac7b689ea8d6b1bcb5eb25225595c4  enchant-2.patch"