]> granicus.if.org Git - php/commitdiff
Fail in `./configure` when no opcache shm backends exist
authorTyson Andre <tysonandre775@hotmail.com>
Fri, 22 May 2020 21:36:32 +0000 (17:36 -0400)
committerTyson Andre <tysonandre775@hotmail.com>
Sun, 24 May 2020 21:49:52 +0000 (17:49 -0400)
This can be seen when the `./configure` step fails to detect `HAVE_SHM_*`,
e.g. due to missing a necessary dependency to compile the test scripts.
(Run `./configure`, run `yum install libtool-ltdl-devel` for missing dependencies,
then run `make`, and php can end up built with 0 shared memory opcache caches)

Give a clearer error message than `unknown`
Searching for `opcache "Fatal Error Unable to allocate shared memory segment of"
"unknown: No such file or directory"` reveals issues such as
https://github.com/termux/termux-packages/issues/2234

Closes GH-5615

ext/opcache/config.m4

index 205456c73e0b0177b2c08bece42de763d90e1eef..08a39e2f63341a3ff71014657e9c572e3ae9a64d 100644 (file)
@@ -167,8 +167,8 @@ int main() {
 }
 ]])],[dnl
     AC_DEFINE(HAVE_SHM_IPC, 1, [Define if you have SysV IPC SHM support])
-    msg=yes],[msg=no],[msg=no])
-  AC_MSG_RESULT([$msg])
+    have_shm_ipc=yes],[have_shm_ipc=no],[have_shm_ipc=no])
+  AC_MSG_RESULT([$have_shm_ipc])
 
   AC_MSG_CHECKING(for mmap() using MAP_ANON shared memory support)
   AC_RUN_IFELSE([AC_LANG_SOURCE([[
@@ -219,8 +219,8 @@ int main() {
 }
 ]])],[dnl
     AC_DEFINE(HAVE_SHM_MMAP_ANON, 1, [Define if you have mmap(MAP_ANON) SHM support])
-    msg=yes],[msg=no],[msg=no])
-  AC_MSG_RESULT([$msg])
+    have_shm_mmap_anon=yes],[have_shm_mmap_anon=no],[have_shm_mmap_anon=no])
+  AC_MSG_RESULT([$have_shm_mmap_anon=yes])
 
   PHP_CHECK_FUNC_LIB(shm_open, rt)
   AC_MSG_CHECKING(for mmap() using shm_open() shared memory support)
@@ -290,6 +290,7 @@ int main() {
 ]])],[dnl
     AC_DEFINE(HAVE_SHM_MMAP_POSIX, 1, [Define if you have POSIX mmap() SHM support])
     AC_MSG_RESULT([yes])
+    have_shm_mmap_posix=yes
     PHP_CHECK_LIBRARY(rt, shm_unlink, [PHP_ADD_LIBRARY(rt,1,OPCACHE_SHARED_LIBADD)])
   ],[
     AC_MSG_RESULT([no])
@@ -338,6 +339,10 @@ int main() {
   PHP_ADD_BUILD_DIR([$ext_builddir/Optimizer], 1)
   PHP_ADD_EXTENSION_DEP(opcache, pcre)
 
+  if test "$have_shm_ipc" != "yes" && test "$have_shm_mmap_posix" != "yes" && test "$have_shm_mmap_anon" != "yes"; then
+    AC_MSG_ERROR([No supported shared memory caching support was found when configuring opcache. Check config.log for any errors or missing dependencies.])
+  fi
+
   if test "$PHP_OPCACHE_JIT" = "yes"; then
     PHP_ADD_BUILD_DIR([$ext_builddir/jit], 1)
     PHP_ADD_MAKEFILE_FRAGMENT($ext_srcdir/jit/Makefile.frag)