forked from openwrt/packages
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
php5: add php5-mod-opcache (fixes openwrt#1010)
This patch adds build infrastructure for PHP's OPcache extension. Compared with the other extension, this is a Zend module and it need a little workaround during cross-compiling. Signed-off-by: Michael Heimpold <mhei@heimpold.de>
- Loading branch information
1 parent
cea6fc2
commit 085215e
Showing
3 changed files
with
182 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
159 changes: 159 additions & 0 deletions
159
lang/php5/patches/200-ext-opcache-fix-detection-of-shm-mmap.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,159 @@ | ||
From dc8bb6a53bfdfe42d9ae81d4e78c6155ad4bfd6e Mon Sep 17 00:00:00 2001 | ||
From: Michael Heimpold <mhei@heimpold.de> | ||
Date: Sun, 17 May 2015 16:50:50 +0200 | ||
Subject: [PATCH] ext/opcache: fix detection of shm/mmap | ||
|
||
The detection of sysvipc and mmap doesn't work well when cross-compiling, | ||
so I decided to only check for the availability of the functions involved. | ||
This is not a clean solution, but works for now(tm) :-) | ||
|
||
It should be discussed with upstream to find a better solution. | ||
|
||
This solves the issue reported at | ||
https://github.com/openwrt/packages/issues/1010 | ||
and makes opcache usable on OpenWrt. | ||
|
||
Signed-off-by: Michael Heimpold <mhei@heimpold.de> | ||
--- | ||
ext/opcache/config.m4 | 122 ++----------------------------------------------- | ||
1 file changed, 4 insertions(+), 118 deletions(-) | ||
|
||
diff --git a/ext/opcache/config.m4 b/ext/opcache/config.m4 | ||
index b7e4835..7b6c0aa 100644 | ||
--- a/ext/opcache/config.m4 | ||
+++ b/ext/opcache/config.m4 | ||
@@ -11,127 +11,13 @@ if test "$PHP_OPCACHE" != "no"; then | ||
AC_DEFINE(HAVE_MPROTECT, 1, [Define if you have mprotect() function]) | ||
]) | ||
|
||
- AC_MSG_CHECKING(for sysvipc shared memory support) | ||
- AC_TRY_RUN([ | ||
-#include <sys/types.h> | ||
-#include <sys/wait.h> | ||
-#include <sys/ipc.h> | ||
-#include <sys/shm.h> | ||
-#include <unistd.h> | ||
-#include <string.h> | ||
- | ||
-int main() { | ||
- pid_t pid; | ||
- int status; | ||
- int ipc_id; | ||
- char *shm; | ||
- struct shmid_ds shmbuf; | ||
- | ||
- ipc_id = shmget(IPC_PRIVATE, 4096, (IPC_CREAT | SHM_R | SHM_W)); | ||
- if (ipc_id == -1) { | ||
- return 1; | ||
- } | ||
- | ||
- shm = shmat(ipc_id, NULL, 0); | ||
- if (shm == (void *)-1) { | ||
- shmctl(ipc_id, IPC_RMID, NULL); | ||
- return 2; | ||
- } | ||
- | ||
- if (shmctl(ipc_id, IPC_STAT, &shmbuf) != 0) { | ||
- shmdt(shm); | ||
- shmctl(ipc_id, IPC_RMID, NULL); | ||
- return 3; | ||
- } | ||
- | ||
- shmbuf.shm_perm.uid = getuid(); | ||
- shmbuf.shm_perm.gid = getgid(); | ||
- shmbuf.shm_perm.mode = 0600; | ||
- | ||
- if (shmctl(ipc_id, IPC_SET, &shmbuf) != 0) { | ||
- shmdt(shm); | ||
- shmctl(ipc_id, IPC_RMID, NULL); | ||
- return 4; | ||
- } | ||
- | ||
- shmctl(ipc_id, IPC_RMID, NULL); | ||
- | ||
- strcpy(shm, "hello"); | ||
- | ||
- pid = fork(); | ||
- if (pid < 0) { | ||
- return 5; | ||
- } else if (pid == 0) { | ||
- strcpy(shm, "bye"); | ||
- return 6; | ||
- } | ||
- if (wait(&status) != pid) { | ||
- return 7; | ||
- } | ||
- if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) { | ||
- return 8; | ||
- } | ||
- if (strcmp(shm, "bye") != 0) { | ||
- return 9; | ||
- } | ||
- return 0; | ||
-} | ||
-],dnl | ||
+ AC_CHECK_FUNC(shmget,[ | ||
AC_DEFINE(HAVE_SHM_IPC, 1, [Define if you have SysV IPC SHM support]) | ||
- msg=yes,msg=no,msg=no) | ||
- AC_MSG_RESULT([$msg]) | ||
- | ||
- AC_MSG_CHECKING(for mmap() using MAP_ANON shared memory support) | ||
- AC_TRY_RUN([ | ||
-#include <sys/types.h> | ||
-#include <sys/wait.h> | ||
-#include <sys/mman.h> | ||
-#include <unistd.h> | ||
-#include <string.h> | ||
- | ||
-#ifndef MAP_ANON | ||
-# ifdef MAP_ANONYMOUS | ||
-# define MAP_ANON MAP_ANONYMOUS | ||
-# endif | ||
-#endif | ||
-#ifndef MAP_FAILED | ||
-# define MAP_FAILED ((void*)-1) | ||
-#endif | ||
- | ||
-int main() { | ||
- pid_t pid; | ||
- int status; | ||
- char *shm; | ||
- | ||
- shm = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0); | ||
- if (shm == MAP_FAILED) { | ||
- return 1; | ||
- } | ||
- | ||
- strcpy(shm, "hello"); | ||
+ ]) | ||
|
||
- pid = fork(); | ||
- if (pid < 0) { | ||
- return 5; | ||
- } else if (pid == 0) { | ||
- strcpy(shm, "bye"); | ||
- return 6; | ||
- } | ||
- if (wait(&status) != pid) { | ||
- return 7; | ||
- } | ||
- if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) { | ||
- return 8; | ||
- } | ||
- if (strcmp(shm, "bye") != 0) { | ||
- return 9; | ||
- } | ||
- return 0; | ||
-} | ||
-],dnl | ||
+ AC_CHECK_FUNC(mmap,[ | ||
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]) | ||
+ ]) | ||
|
||
AC_MSG_CHECKING(for mmap() using /dev/zero shared memory support) | ||
AC_TRY_RUN([ | ||
-- | ||
1.7.10.4 | ||
|