xref: /OK3568_Linux_fs/buildroot/package/php/php.mk (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1################################################################################
2#
3# php
4#
5################################################################################
6
7PHP_VERSION = 8.0.13
8PHP_SITE = https://www.php.net/distributions
9PHP_SOURCE = php-$(PHP_VERSION).tar.xz
10PHP_INSTALL_STAGING = YES
11PHP_INSTALL_STAGING_OPTS = INSTALL_ROOT=$(STAGING_DIR) install
12PHP_INSTALL_TARGET_OPTS = INSTALL_ROOT=$(TARGET_DIR) install
13PHP_DEPENDENCIES = host-pkgconf pcre2
14PHP_LICENSE = PHP-3.01
15PHP_LICENSE_FILES = LICENSE
16PHP_CPE_ID_VENDOR = php
17PHP_CONF_OPTS = \
18	--mandir=/usr/share/man \
19	--infodir=/usr/share/info \
20	--with-config-file-scan-dir=/etc/php.d \
21	--disable-all \
22	--with-external-pcre \
23	--without-pear \
24	--with-config-file-path=/etc \
25	--disable-phpdbg \
26	--disable-rpath
27PHP_CONF_ENV = \
28	EXTRA_LIBS="$(PHP_EXTRA_LIBS)"
29
30ifeq ($(BR2_STATIC_LIBS),y)
31PHP_CONF_ENV += LIBS="$(PHP_STATIC_LIBS)"
32endif
33
34ifeq ($(BR2_STATIC_LIBS)$(BR2_TOOLCHAIN_HAS_THREADS),yy)
35PHP_STATIC_LIBS += -lpthread
36endif
37
38ifeq ($(call qstrip,$(BR2_TARGET_LOCALTIME)),)
39PHP_LOCALTIME = UTC
40else
41# Not q-stripping this value, as we need quotes in the php.ini file
42PHP_LOCALTIME = $(BR2_TARGET_LOCALTIME)
43endif
44
45# PHP can't be AUTORECONFed the standard way unfortunately
46PHP_DEPENDENCIES += host-autoconf host-automake host-libtool
47define PHP_BUILDCONF
48	cd $(@D) ; $(TARGET_MAKE_ENV) ./buildconf --force
49endef
50PHP_PRE_CONFIGURE_HOOKS += PHP_BUILDCONF
51
52ifeq ($(BR2_ENDIAN),"BIG")
53PHP_CONF_ENV += ac_cv_c_bigendian_php=yes
54else
55PHP_CONF_ENV += ac_cv_c_bigendian_php=no
56endif
57PHP_CONFIG_SCRIPTS = php-config
58
59PHP_CFLAGS = $(TARGET_CFLAGS)
60PHP_CXXFLAGS = $(TARGET_CXXFLAGS)
61
62# The OPcache extension isn't cross-compile friendly
63# Throw some defines here to avoid patching heavily
64ifeq ($(BR2_PACKAGE_PHP_EXT_OPCACHE),y)
65PHP_CONF_OPTS += --enable-opcache --disable-opcache-jit
66PHP_CONF_ENV += ac_cv_func_mprotect=yes
67PHP_CFLAGS += \
68	-DHAVE_SHM_IPC \
69	-DHAVE_SHM_MMAP_ANON \
70	-DHAVE_SHM_MMAP_ZERO \
71	-DHAVE_SHM_MMAP_POSIX \
72	-DHAVE_SHM_MMAP_FILE
73endif
74
75# We need to force dl "detection"
76ifeq ($(BR2_STATIC_LIBS),)
77PHP_CONF_ENV += ac_cv_func_dlopen=yes ac_cv_lib_dl_dlopen=yes
78PHP_EXTRA_LIBS += -ldl
79else
80PHP_CONF_ENV += ac_cv_func_dlopen=no ac_cv_lib_dl_dlopen=no
81endif
82
83PHP_CONF_OPTS += $(if $(BR2_PACKAGE_PHP_SAPI_CLI),--enable-cli,--disable-cli)
84PHP_CONF_OPTS += $(if $(BR2_PACKAGE_PHP_SAPI_CGI),--enable-cgi,--disable-cgi)
85PHP_CONF_OPTS += $(if $(BR2_PACKAGE_PHP_SAPI_FPM),--enable-fpm,--disable-fpm)
86
87ifeq ($(BR2_PACKAGE_PHP_SAPI_APACHE),y)
88PHP_DEPENDENCIES += apache
89PHP_CONF_OPTS += --with-apxs2=$(STAGING_DIR)/usr/bin/apxs
90
91# Enable thread safety option if Apache MPM is event or worker
92ifeq ($(BR2_PACKAGE_APACHE_MPM_EVENT)$(BR2_PACKAGE_APACHE_MPM_WORKER),y)
93PHP_CONF_OPTS += --enable-zts
94endif
95endif
96
97### Extensions
98PHP_CONF_OPTS += \
99	$(if $(BR2_PACKAGE_PHP_EXT_SOCKETS),--enable-sockets) \
100	$(if $(BR2_PACKAGE_PHP_EXT_POSIX),--enable-posix) \
101	$(if $(BR2_PACKAGE_PHP_EXT_SESSION),--enable-session) \
102	$(if $(BR2_PACKAGE_PHP_EXT_DOM),--enable-dom) \
103	$(if $(BR2_PACKAGE_PHP_EXT_SIMPLEXML),--enable-simplexml) \
104	$(if $(BR2_PACKAGE_PHP_EXT_SOAP),--enable-soap) \
105	$(if $(BR2_PACKAGE_PHP_EXT_XML),--enable-xml) \
106	$(if $(BR2_PACKAGE_PHP_EXT_XMLREADER),--enable-xmlreader) \
107	$(if $(BR2_PACKAGE_PHP_EXT_XMLWRITER),--enable-xmlwriter) \
108	$(if $(BR2_PACKAGE_PHP_EXT_EXIF),--enable-exif) \
109	$(if $(BR2_PACKAGE_PHP_EXT_FTP),--enable-ftp) \
110	$(if $(BR2_PACKAGE_PHP_EXT_TOKENIZER),--enable-tokenizer) \
111	$(if $(BR2_PACKAGE_PHP_EXT_PCNTL),--enable-pcntl) \
112	$(if $(BR2_PACKAGE_PHP_EXT_SHMOP),--enable-shmop) \
113	$(if $(BR2_PACKAGE_PHP_EXT_SYSVMSG),--enable-sysvmsg) \
114	$(if $(BR2_PACKAGE_PHP_EXT_SYSVSEM),--enable-sysvsem) \
115	$(if $(BR2_PACKAGE_PHP_EXT_SYSVSHM),--enable-sysvshm) \
116	$(if $(BR2_PACKAGE_PHP_EXT_ZIP),--with-zip) \
117	$(if $(BR2_PACKAGE_PHP_EXT_CTYPE),--enable-ctype) \
118	$(if $(BR2_PACKAGE_PHP_EXT_FILTER),--enable-filter) \
119	$(if $(BR2_PACKAGE_PHP_EXT_CALENDAR),--enable-calendar) \
120	$(if $(BR2_PACKAGE_PHP_EXT_FILEINFO),--enable-fileinfo) \
121	$(if $(BR2_PACKAGE_PHP_EXT_BCMATH),--enable-bcmath) \
122	$(if $(BR2_PACKAGE_PHP_EXT_PHAR),--enable-phar)
123
124ifeq ($(BR2_PACKAGE_PHP_EXT_LIBARGON2),y)
125PHP_CONF_OPTS += --with-password-argon2=$(STAGING_DIR)/usr
126PHP_DEPENDENCIES += libargon2
127endif
128
129ifeq ($(BR2_PACKAGE_PHP_EXT_LIBSODIUM),y)
130PHP_CONF_OPTS += --with-sodium=$(STAGING_DIR)/usr
131PHP_DEPENDENCIES += libsodium
132endif
133
134ifeq ($(BR2_PACKAGE_PHP_EXT_MBSTRING),y)
135PHP_CONF_OPTS += --enable-mbstring
136PHP_DEPENDENCIES += oniguruma
137endif
138
139ifeq ($(BR2_PACKAGE_PHP_EXT_OPENSSL),y)
140PHP_CONF_OPTS += --with-openssl=$(STAGING_DIR)/usr
141PHP_DEPENDENCIES += openssl
142# openssl needs zlib, but the configure script forgets to link against
143# it causing detection failures with static linking
144PHP_STATIC_LIBS += `$(PKG_CONFIG_HOST_BINARY) --libs openssl`
145endif
146
147ifeq ($(BR2_PACKAGE_PHP_EXT_LIBXML2),y)
148PHP_CONF_ENV += php_cv_libxml_build_works=yes
149PHP_CONF_OPTS += --with-libxml
150PHP_DEPENDENCIES += libxml2
151endif
152
153ifeq ($(BR2_PACKAGE_PHP_EXT_WDDX),y)
154PHP_CONF_OPTS += --enable-wddx --with-libexpat-dir=$(STAGING_DIR)/usr
155PHP_DEPENDENCIES += expat
156endif
157
158ifeq ($(BR2_PACKAGE_PHP_EXT_ZIP),y)
159PHP_DEPENDENCIES += libzip
160endif
161
162ifneq ($(BR2_PACKAGE_PHP_EXT_ZLIB)$(BR2_PACKAGE_PHP_EXT_ZIP),)
163PHP_CONF_OPTS += --with-zlib=$(STAGING_DIR)/usr
164PHP_DEPENDENCIES += zlib
165else
166PHP_CONF_OPTS += --disable-mysqlnd_compression_support
167endif
168
169ifeq ($(BR2_PACKAGE_PHP_EXT_GETTEXT),y)
170PHP_CONF_OPTS += --with-gettext=$(STAGING_DIR)/usr
171PHP_DEPENDENCIES += $(TARGET_NLS_DEPENDENCIES)
172endif
173
174ifeq ($(BR2_PACKAGE_PHP_EXT_ICONV),y)
175ifeq ($(BR2_PACKAGE_LIBICONV),y)
176PHP_CONF_OPTS += --with-iconv=$(STAGING_DIR)/usr
177PHP_DEPENDENCIES += libiconv
178else
179PHP_CONF_OPTS += --with-iconv
180endif
181endif
182
183ifeq ($(BR2_PACKAGE_PHP_EXT_INTL),y)
184PHP_CONF_OPTS += --enable-intl --with-icu-dir=$(STAGING_DIR)/usr
185PHP_CXXFLAGS += "`$(STAGING_DIR)/usr/bin/icu-config --cxxflags`"
186PHP_DEPENDENCIES += icu
187# The intl module is implemented in C++, but PHP fails to use
188# g++ as the compiler for the final link. As a workaround,
189# tell it to link libstdc++.
190PHP_EXTRA_LIBS += -lstdc++
191endif
192
193ifeq ($(BR2_PACKAGE_PHP_EXT_GMP),y)
194PHP_CONF_OPTS += --with-gmp=$(STAGING_DIR)/usr
195PHP_DEPENDENCIES += gmp
196endif
197
198ifeq ($(BR2_PACKAGE_PHP_EXT_READLINE),y)
199PHP_CONF_OPTS += --with-readline=$(STAGING_DIR)/usr
200PHP_DEPENDENCIES += readline
201endif
202
203### Native SQL extensions
204ifeq ($(BR2_PACKAGE_PHP_EXT_MYSQLI),y)
205PHP_CONF_OPTS += --with-mysqli
206endif
207
208ifeq ($(BR2_PACKAGE_PHP_EXT_PGSQL),y)
209PHP_CONF_OPTS += --with-pgsql=$(STAGING_DIR)/usr
210PHP_DEPENDENCIES += postgresql
211endif
212
213ifeq ($(BR2_PACKAGE_PHP_EXT_SQLITE),y)
214PHP_CONF_OPTS += --with-sqlite3=$(STAGING_DIR)/usr
215PHP_DEPENDENCIES += sqlite
216PHP_STATIC_LIBS += `$(PKG_CONFIG_HOST_BINARY) --libs sqlite3`
217endif
218
219### PDO
220ifeq ($(BR2_PACKAGE_PHP_EXT_PDO),y)
221PHP_CONF_OPTS += --enable-pdo
222ifeq ($(BR2_PACKAGE_PHP_EXT_PDO_SQLITE),y)
223PHP_CONF_OPTS += --with-pdo-sqlite=$(STAGING_DIR)/usr
224PHP_DEPENDENCIES += sqlite
225PHP_CFLAGS += -DSQLITE_OMIT_LOAD_EXTENSION
226endif
227ifeq ($(BR2_PACKAGE_PHP_EXT_PDO_MYSQL),y)
228PHP_CONF_OPTS += --with-pdo-mysql
229endif
230ifeq ($(BR2_PACKAGE_PHP_EXT_PDO_POSTGRESQL),y)
231PHP_CONF_OPTS += --with-pdo-pgsql=$(STAGING_DIR)/usr
232PHP_DEPENDENCIES += postgresql
233endif
234ifeq ($(BR2_PACKAGE_PHP_EXT_PDO_UNIXODBC),y)
235PHP_CONF_OPTS += --with-pdo-odbc=unixODBC,$(STAGING_DIR)/usr
236PHP_DEPENDENCIES += unixodbc
237endif
238endif
239
240ifneq ($(BR2_PACKAGE_PHP_EXT_MYSQLI)$(BR2_PACKAGE_PHP_EXT_PDO_MYSQL),)
241# Set default MySQL unix socket to what the MySQL server is using by default
242PHP_CONF_OPTS += --with-mysql-sock=$(MYSQL_SOCKET)
243endif
244
245define PHP_DISABLE_VALGRIND
246	$(SED) '/^#define HAVE_VALGRIND/d' $(@D)/main/php_config.h
247endef
248PHP_POST_CONFIGURE_HOOKS += PHP_DISABLE_VALGRIND
249
250ifeq ($(BR2_PACKAGE_PCRE2_JIT),y)
251PHP_CONF_OPTS += --with-pcre-jit=yes
252PHP_CONF_ENV += ac_cv_have_pcre2_jit=yes
253else
254PHP_CONF_OPTS += --with-pcre-jit=no
255PHP_CONF_ENV += ac_cv_have_pcre2_jit=no
256endif
257
258ifeq ($(BR2_PACKAGE_PHP_EXT_CURL),y)
259PHP_CONF_OPTS += --with-curl
260PHP_DEPENDENCIES += libcurl
261endif
262
263ifeq ($(BR2_PACKAGE_PHP_EXT_XSL),y)
264PHP_CONF_OPTS += --with-xsl=$(STAGING_DIR)/usr
265PHP_DEPENDENCIES += libxslt
266endif
267
268ifeq ($(BR2_PACKAGE_PHP_EXT_BZIP2),y)
269PHP_CONF_OPTS += --with-bz2=$(STAGING_DIR)/usr
270PHP_DEPENDENCIES += bzip2
271endif
272
273### DBA
274ifeq ($(BR2_PACKAGE_PHP_EXT_DBA),y)
275PHP_CONF_OPTS += --enable-dba
276ifneq ($(BR2_PACKAGE_PHP_EXT_DBA_CDB),y)
277PHP_CONF_OPTS += --without-cdb
278endif
279ifneq ($(BR2_PACKAGE_PHP_EXT_DBA_FLAT),y)
280PHP_CONF_OPTS += --without-flatfile
281endif
282ifneq ($(BR2_PACKAGE_PHP_EXT_DBA_INI),y)
283PHP_CONF_OPTS += --without-inifile
284endif
285ifeq ($(BR2_PACKAGE_PHP_EXT_DBA_DB4),y)
286PHP_CONF_OPTS += --with-db4=$(STAGING_DIR)/usr
287PHP_DEPENDENCIES += berkeleydb
288endif
289endif
290
291ifeq ($(BR2_PACKAGE_PHP_EXT_SNMP),y)
292PHP_CONF_OPTS += --with-snmp=$(STAGING_DIR)/usr
293PHP_DEPENDENCIES += netsnmp
294endif
295
296ifeq ($(BR2_PACKAGE_PHP_EXT_GD),y)
297PHP_CONF_OPTS += \
298	--enable-gd \
299	--with-jpeg \
300	--with-freetype
301PHP_DEPENDENCIES += jpeg libpng freetype zlib
302endif
303
304ifeq ($(BR2_PACKAGE_PHP_EXT_FFI),y)
305PHP_CONF_OPTS += --with-ffi
306PHP_DEPENDENCIES += libffi
307endif
308
309ifeq ($(BR2_PACKAGE_PHP_SAPI_FPM),y)
310define PHP_INSTALL_INIT_SYSV
311	$(INSTALL) -D -m 0755 $(@D)/sapi/fpm/init.d.php-fpm \
312		$(TARGET_DIR)/etc/init.d/S49php-fpm
313endef
314
315define PHP_INSTALL_INIT_SYSTEMD
316	$(INSTALL) -D -m 0644 $(@D)/sapi/fpm/php-fpm.service \
317		$(TARGET_DIR)/usr/lib/systemd/system/php-fpm.service
318endef
319
320define PHP_INSTALL_FPM_CONF
321	$(INSTALL) -D -m 0644 package/php/php-fpm.conf \
322		$(TARGET_DIR)/etc/php-fpm.conf
323	rm -f $(TARGET_DIR)/etc/php-fpm.d/www.conf.default
324	# remove unused sample status page /usr/php/php/fpm/status.html
325	rm -rf $(TARGET_DIR)/usr/php
326endef
327
328PHP_POST_INSTALL_TARGET_HOOKS += PHP_INSTALL_FPM_CONF
329endif
330
331define PHP_EXTENSIONS_FIXUP
332	$(SED) "/prefix/ s:/usr:$(STAGING_DIR)/usr:" \
333		$(STAGING_DIR)/usr/bin/phpize
334	$(SED) "/extension_dir/ s:/usr:$(TARGET_DIR)/usr:" \
335		$(STAGING_DIR)/usr/bin/php-config
336endef
337
338PHP_POST_INSTALL_TARGET_HOOKS += PHP_EXTENSIONS_FIXUP
339
340define PHP_INSTALL_FIXUP
341	rm -rf $(TARGET_DIR)/usr/lib/php/build
342	rm -f $(TARGET_DIR)/usr/bin/phpize
343	$(INSTALL) -D -m 0755 $(PHP_DIR)/php.ini-production \
344		$(TARGET_DIR)/etc/php.ini
345	$(SED) 's%;date.timezone =.*%date.timezone = $(PHP_LOCALTIME)%' \
346		$(TARGET_DIR)/etc/php.ini
347	$(if $(BR2_PACKAGE_PHP_EXT_OPCACHE),
348		$(SED) '/;extension=php_xsl.dll/azend_extension=opcache.so' \
349		$(TARGET_DIR)/etc/php.ini)
350endef
351
352PHP_POST_INSTALL_TARGET_HOOKS += PHP_INSTALL_FIXUP
353
354PHP_CONF_ENV += CFLAGS="$(PHP_CFLAGS)" CXXFLAGS="$(PHP_CXXFLAGS)"
355
356$(eval $(autotools-package))
357