2013-02-13 20:26:47 +08:00
|
|
|
dnl
|
|
|
|
dnl $Id$
|
|
|
|
dnl
|
|
|
|
|
2013-03-19 14:32:24 +08:00
|
|
|
PHP_ARG_ENABLE(opcache, whether to enable Zend OPcache support,
|
2015-02-05 17:07:30 +08:00
|
|
|
[ --disable-opcache Disable Zend OPcache support], yes)
|
2013-02-13 20:26:47 +08:00
|
|
|
|
2015-09-15 06:58:32 +08:00
|
|
|
PHP_ARG_ENABLE(opcache-file, whether to enable file based caching,
|
2016-04-09 20:57:57 +08:00
|
|
|
[ --disable-opcache-file Disable file based caching], yes, no)
|
2015-05-07 04:46:49 +08:00
|
|
|
|
2015-09-15 07:04:09 +08:00
|
|
|
PHP_ARG_ENABLE(huge-code-pages, whether to enable copying PHP CODE pages into HUGE PAGES,
|
|
|
|
[ --disable-huge-code-pages
|
2016-04-09 20:57:57 +08:00
|
|
|
Disable copying PHP CODE pages into HUGE PAGES], yes, no)
|
2015-09-14 18:34:17 +08:00
|
|
|
|
2013-03-15 20:21:07 +08:00
|
|
|
if test "$PHP_OPCACHE" != "no"; then
|
2013-02-13 20:26:47 +08:00
|
|
|
|
2016-01-29 05:54:24 +08:00
|
|
|
if test "$PHP_OPCACHE_FILE" = "yes"; then
|
2015-05-07 04:46:49 +08:00
|
|
|
AC_DEFINE(HAVE_OPCACHE_FILE_CACHE, 1, [Define to enable file based caching (experimental)])
|
|
|
|
fi
|
|
|
|
|
2016-01-29 05:54:24 +08:00
|
|
|
if test "$PHP_HUGE_CODE_PAGES" = "yes"; then
|
2015-09-14 18:34:17 +08:00
|
|
|
AC_DEFINE(HAVE_HUGE_CODE_PAGES, 1, [Define to enable copying PHP CODE pages into HUGE PAGES (experimental)])
|
|
|
|
fi
|
|
|
|
|
2013-02-13 20:26:47 +08:00
|
|
|
AC_CHECK_FUNC(mprotect,[
|
|
|
|
AC_DEFINE(HAVE_MPROTECT, 1, [Define if you have mprotect() function])
|
|
|
|
])
|
|
|
|
|
2015-12-01 10:35:32 +08:00
|
|
|
AC_CHECK_HEADERS([unistd.h sys/uio.h])
|
|
|
|
|
2013-02-13 20:26:47 +08:00
|
|
|
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_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_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([
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/wait.h>
|
|
|
|
#include <sys/mman.h>
|
|
|
|
#include <sys/stat.h>
|
|
|
|
#include <fcntl.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#ifndef MAP_FAILED
|
|
|
|
# define MAP_FAILED ((void*)-1)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
pid_t pid;
|
|
|
|
int status;
|
|
|
|
int fd;
|
|
|
|
char *shm;
|
|
|
|
|
|
|
|
fd = open("/dev/zero", O_RDWR, S_IRUSR | S_IWUSR);
|
|
|
|
if (fd == -1) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
shm = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
|
|
|
|
if (shm == MAP_FAILED) {
|
|
|
|
return 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
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_DEFINE(HAVE_SHM_MMAP_ZERO, 1, [Define if you have mmap("/dev/zero") SHM support])
|
|
|
|
msg=yes,msg=no,msg=no)
|
|
|
|
AC_MSG_RESULT([$msg])
|
|
|
|
|
|
|
|
AC_MSG_CHECKING(for mmap() using shm_open() shared memory support)
|
|
|
|
AC_TRY_RUN([
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/wait.h>
|
|
|
|
#include <sys/mman.h>
|
|
|
|
#include <sys/stat.h>
|
|
|
|
#include <fcntl.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
#ifndef MAP_FAILED
|
|
|
|
# define MAP_FAILED ((void*)-1)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
pid_t pid;
|
|
|
|
int status;
|
|
|
|
int fd;
|
|
|
|
char *shm;
|
|
|
|
char tmpname[4096];
|
|
|
|
|
|
|
|
sprintf(tmpname,"test.shm.%dXXXXXX", getpid());
|
|
|
|
if (mktemp(tmpname) == NULL) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
fd = shm_open(tmpname, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
|
|
|
|
if (fd == -1) {
|
|
|
|
return 2;
|
|
|
|
}
|
|
|
|
if (ftruncate(fd, 4096) < 0) {
|
|
|
|
close(fd);
|
|
|
|
shm_unlink(tmpname);
|
|
|
|
return 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
shm = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
|
|
|
|
if (shm == MAP_FAILED) {
|
|
|
|
return 4;
|
|
|
|
}
|
|
|
|
shm_unlink(tmpname);
|
|
|
|
close(fd);
|
|
|
|
|
|
|
|
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_DEFINE(HAVE_SHM_MMAP_POSIX, 1, [Define if you have POSIX mmap() SHM support])
|
|
|
|
msg=yes,msg=no,msg=no)
|
|
|
|
AC_MSG_RESULT([$msg])
|
|
|
|
|
|
|
|
AC_MSG_CHECKING(for mmap() using regular file shared memory support)
|
|
|
|
AC_TRY_RUN([
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/wait.h>
|
|
|
|
#include <sys/mman.h>
|
|
|
|
#include <sys/stat.h>
|
|
|
|
#include <fcntl.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
#ifndef MAP_FAILED
|
|
|
|
# define MAP_FAILED ((void*)-1)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
pid_t pid;
|
|
|
|
int status;
|
|
|
|
int fd;
|
|
|
|
char *shm;
|
|
|
|
char tmpname[4096];
|
|
|
|
|
|
|
|
sprintf(tmpname,"test.shm.%dXXXXXX", getpid());
|
|
|
|
if (mktemp(tmpname) == NULL) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
fd = open(tmpname, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
|
|
|
|
if (fd == -1) {
|
|
|
|
return 2;
|
|
|
|
}
|
|
|
|
if (ftruncate(fd, 4096) < 0) {
|
|
|
|
close(fd);
|
|
|
|
unlink(tmpname);
|
|
|
|
return 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
shm = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
|
|
|
|
if (shm == MAP_FAILED) {
|
|
|
|
return 4;
|
|
|
|
}
|
|
|
|
unlink(tmpname);
|
|
|
|
close(fd);
|
|
|
|
|
|
|
|
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_DEFINE(HAVE_SHM_MMAP_FILE, 1, [Define if you have mmap() SHM support])
|
|
|
|
msg=yes,msg=no,msg=no)
|
|
|
|
AC_MSG_RESULT([$msg])
|
2013-03-25 11:11:28 +08:00
|
|
|
|
2013-09-27 17:43:25 +08:00
|
|
|
flock_type=unknown
|
|
|
|
AC_MSG_CHECKING("whether flock struct is linux ordered")
|
|
|
|
AC_TRY_RUN([
|
|
|
|
#include <fcntl.h>
|
|
|
|
struct flock lock = { 1, 2, 3, 4, 5 };
|
|
|
|
int main() {
|
|
|
|
if(lock.l_type == 1 && lock.l_whence == 2 && lock.l_start == 3 && lock.l_len == 4) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
], [
|
|
|
|
flock_type=linux
|
|
|
|
AC_DEFINE([HAVE_FLOCK_LINUX], [], [Struct flock is Linux-type])
|
|
|
|
AC_MSG_RESULT("yes")
|
|
|
|
], AC_MSG_RESULT("no") )
|
|
|
|
|
|
|
|
AC_MSG_CHECKING("whether flock struct is BSD ordered")
|
|
|
|
AC_TRY_RUN([
|
|
|
|
#include <fcntl.h>
|
|
|
|
struct flock lock = { 1, 2, 3, 4, 5 };
|
|
|
|
int main() {
|
|
|
|
if(lock.l_start == 1 && lock.l_len == 2 && lock.l_type == 4 && lock.l_whence == 5) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
], [
|
|
|
|
flock_type=bsd
|
|
|
|
AC_DEFINE([HAVE_FLOCK_BSD], [], [Struct flock is BSD-type])
|
|
|
|
AC_MSG_RESULT("yes")
|
|
|
|
], AC_MSG_RESULT("no") )
|
|
|
|
|
2016-04-09 03:38:07 +08:00
|
|
|
if test "$flock_type" = "unknown"; then
|
2013-09-27 17:43:25 +08:00
|
|
|
AC_MSG_ERROR([Don't know how to define struct flock on this system[,] set --enable-opcache=no])
|
|
|
|
fi
|
2014-01-13 19:34:25 +08:00
|
|
|
|
2013-03-15 20:21:07 +08:00
|
|
|
PHP_NEW_EXTENSION(opcache,
|
2013-02-13 20:26:47 +08:00
|
|
|
ZendAccelerator.c \
|
|
|
|
zend_accelerator_blacklist.c \
|
|
|
|
zend_accelerator_debug.c \
|
|
|
|
zend_accelerator_hash.c \
|
|
|
|
zend_accelerator_module.c \
|
|
|
|
zend_persist.c \
|
|
|
|
zend_persist_calc.c \
|
2015-05-07 04:46:49 +08:00
|
|
|
zend_file_cache.c \
|
2013-02-13 20:26:47 +08:00
|
|
|
zend_shared_alloc.c \
|
|
|
|
zend_accelerator_util_funcs.c \
|
|
|
|
shared_alloc_shm.c \
|
|
|
|
shared_alloc_mmap.c \
|
|
|
|
shared_alloc_posix.c \
|
2014-08-28 21:23:12 +08:00
|
|
|
Optimizer/zend_optimizer.c \
|
|
|
|
Optimizer/pass1_5.c \
|
|
|
|
Optimizer/pass2.c \
|
|
|
|
Optimizer/pass3.c \
|
|
|
|
Optimizer/optimize_func_calls.c \
|
|
|
|
Optimizer/block_pass.c \
|
|
|
|
Optimizer/optimize_temp_vars_5.c \
|
|
|
|
Optimizer/nop_removal.c \
|
2015-11-21 03:06:36 +08:00
|
|
|
Optimizer/compact_literals.c \
|
|
|
|
Optimizer/zend_cfg.c \
|
2015-12-11 22:24:55 +08:00
|
|
|
Optimizer/zend_dfg.c \
|
|
|
|
Optimizer/dfa_pass.c \
|
|
|
|
Optimizer/zend_ssa.c \
|
2015-12-16 05:49:44 +08:00
|
|
|
Optimizer/zend_inference.c \
|
|
|
|
Optimizer/zend_func_info.c \
|
|
|
|
Optimizer/zend_call_graph.c \
|
2015-11-21 03:06:36 +08:00
|
|
|
Optimizer/zend_dump.c,
|
2014-10-17 21:51:21 +08:00
|
|
|
shared,,-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1,,yes)
|
2013-02-25 14:04:03 +08:00
|
|
|
|
|
|
|
PHP_ADD_BUILD_DIR([$ext_builddir/Optimizer], 1)
|
2015-03-05 08:27:36 +08:00
|
|
|
PHP_ADD_EXTENSION_DEP(opcache, pcre)
|
2013-02-13 20:26:47 +08:00
|
|
|
fi
|