config.m4 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  1. dnl config.m4 for extension opcache
  2. PHP_ARG_ENABLE(opcache, whether to enable Zend OPcache support,
  3. [ --disable-opcache Disable Zend OPcache support], yes)
  4. PHP_ARG_ENABLE(opcache-file, whether to enable file based caching,
  5. [ --disable-opcache-file Disable file based caching], yes, no)
  6. PHP_ARG_ENABLE(huge-code-pages, whether to enable copying PHP CODE pages into HUGE PAGES,
  7. [ --disable-huge-code-pages
  8. Disable copying PHP CODE pages into HUGE PAGES], yes, no)
  9. if test "$PHP_OPCACHE" != "no"; then
  10. if test "$PHP_OPCACHE_FILE" = "yes"; then
  11. AC_DEFINE(HAVE_OPCACHE_FILE_CACHE, 1, [Define to enable file based caching (experimental)])
  12. fi
  13. if test "$PHP_HUGE_CODE_PAGES" = "yes"; then
  14. AC_DEFINE(HAVE_HUGE_CODE_PAGES, 1, [Define to enable copying PHP CODE pages into HUGE PAGES (experimental)])
  15. fi
  16. AC_CHECK_FUNC(mprotect,[
  17. AC_DEFINE(HAVE_MPROTECT, 1, [Define if you have mprotect() function])
  18. ])
  19. AC_CHECK_HEADERS([unistd.h sys/uio.h])
  20. AC_MSG_CHECKING(for sysvipc shared memory support)
  21. AC_RUN_IFELSE([AC_LANG_SOURCE([[
  22. #include <sys/types.h>
  23. #include <sys/wait.h>
  24. #include <sys/ipc.h>
  25. #include <sys/shm.h>
  26. #include <unistd.h>
  27. #include <string.h>
  28. int main() {
  29. pid_t pid;
  30. int status;
  31. int ipc_id;
  32. char *shm;
  33. struct shmid_ds shmbuf;
  34. ipc_id = shmget(IPC_PRIVATE, 4096, (IPC_CREAT | SHM_R | SHM_W));
  35. if (ipc_id == -1) {
  36. return 1;
  37. }
  38. shm = shmat(ipc_id, NULL, 0);
  39. if (shm == (void *)-1) {
  40. shmctl(ipc_id, IPC_RMID, NULL);
  41. return 2;
  42. }
  43. if (shmctl(ipc_id, IPC_STAT, &shmbuf) != 0) {
  44. shmdt(shm);
  45. shmctl(ipc_id, IPC_RMID, NULL);
  46. return 3;
  47. }
  48. shmbuf.shm_perm.uid = getuid();
  49. shmbuf.shm_perm.gid = getgid();
  50. shmbuf.shm_perm.mode = 0600;
  51. if (shmctl(ipc_id, IPC_SET, &shmbuf) != 0) {
  52. shmdt(shm);
  53. shmctl(ipc_id, IPC_RMID, NULL);
  54. return 4;
  55. }
  56. shmctl(ipc_id, IPC_RMID, NULL);
  57. strcpy(shm, "hello");
  58. pid = fork();
  59. if (pid < 0) {
  60. return 5;
  61. } else if (pid == 0) {
  62. strcpy(shm, "bye");
  63. return 6;
  64. }
  65. if (wait(&status) != pid) {
  66. return 7;
  67. }
  68. if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) {
  69. return 8;
  70. }
  71. if (strcmp(shm, "bye") != 0) {
  72. return 9;
  73. }
  74. return 0;
  75. }
  76. ]])],[dnl
  77. AC_DEFINE(HAVE_SHM_IPC, 1, [Define if you have SysV IPC SHM support])
  78. msg=yes],[msg=no],[msg=no])
  79. AC_MSG_RESULT([$msg])
  80. AC_MSG_CHECKING(for mmap() using MAP_ANON shared memory support)
  81. AC_RUN_IFELSE([AC_LANG_SOURCE([[
  82. #include <sys/types.h>
  83. #include <sys/wait.h>
  84. #include <sys/mman.h>
  85. #include <unistd.h>
  86. #include <string.h>
  87. #ifndef MAP_ANON
  88. # ifdef MAP_ANONYMOUS
  89. # define MAP_ANON MAP_ANONYMOUS
  90. # endif
  91. #endif
  92. #ifndef MAP_FAILED
  93. # define MAP_FAILED ((void*)-1)
  94. #endif
  95. int main() {
  96. pid_t pid;
  97. int status;
  98. char *shm;
  99. shm = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);
  100. if (shm == MAP_FAILED) {
  101. return 1;
  102. }
  103. strcpy(shm, "hello");
  104. pid = fork();
  105. if (pid < 0) {
  106. return 5;
  107. } else if (pid == 0) {
  108. strcpy(shm, "bye");
  109. return 6;
  110. }
  111. if (wait(&status) != pid) {
  112. return 7;
  113. }
  114. if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) {
  115. return 8;
  116. }
  117. if (strcmp(shm, "bye") != 0) {
  118. return 9;
  119. }
  120. return 0;
  121. }
  122. ]])],[dnl
  123. AC_DEFINE(HAVE_SHM_MMAP_ANON, 1, [Define if you have mmap(MAP_ANON) SHM support])
  124. msg=yes],[msg=no],[msg=no])
  125. AC_MSG_RESULT([$msg])
  126. AC_MSG_CHECKING(for mmap() using /dev/zero shared memory support)
  127. AC_RUN_IFELSE([AC_LANG_SOURCE([[
  128. #include <sys/types.h>
  129. #include <sys/wait.h>
  130. #include <sys/mman.h>
  131. #include <sys/stat.h>
  132. #include <fcntl.h>
  133. #include <unistd.h>
  134. #include <string.h>
  135. #ifndef MAP_FAILED
  136. # define MAP_FAILED ((void*)-1)
  137. #endif
  138. int main() {
  139. pid_t pid;
  140. int status;
  141. int fd;
  142. char *shm;
  143. fd = open("/dev/zero", O_RDWR, S_IRUSR | S_IWUSR);
  144. if (fd == -1) {
  145. return 1;
  146. }
  147. shm = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
  148. if (shm == MAP_FAILED) {
  149. return 2;
  150. }
  151. strcpy(shm, "hello");
  152. pid = fork();
  153. if (pid < 0) {
  154. return 5;
  155. } else if (pid == 0) {
  156. strcpy(shm, "bye");
  157. return 6;
  158. }
  159. if (wait(&status) != pid) {
  160. return 7;
  161. }
  162. if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) {
  163. return 8;
  164. }
  165. if (strcmp(shm, "bye") != 0) {
  166. return 9;
  167. }
  168. return 0;
  169. }
  170. ]])],[dnl
  171. AC_DEFINE(HAVE_SHM_MMAP_ZERO, 1, [Define if you have mmap("/dev/zero") SHM support])
  172. msg=yes],[msg=no],[msg=no])
  173. AC_MSG_RESULT([$msg])
  174. AC_MSG_CHECKING(for mmap() using shm_open() shared memory support)
  175. AC_RUN_IFELSE([AC_LANG_SOURCE([[
  176. #include <sys/types.h>
  177. #include <sys/wait.h>
  178. #include <sys/mman.h>
  179. #include <sys/stat.h>
  180. #include <fcntl.h>
  181. #include <unistd.h>
  182. #include <string.h>
  183. #include <stdlib.h>
  184. #include <stdio.h>
  185. #ifndef MAP_FAILED
  186. # define MAP_FAILED ((void*)-1)
  187. #endif
  188. int main() {
  189. pid_t pid;
  190. int status;
  191. int fd;
  192. char *shm;
  193. char tmpname[4096];
  194. sprintf(tmpname,"test.shm.%dXXXXXX", getpid());
  195. if (mktemp(tmpname) == NULL) {
  196. return 1;
  197. }
  198. fd = shm_open(tmpname, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
  199. if (fd == -1) {
  200. return 2;
  201. }
  202. if (ftruncate(fd, 4096) < 0) {
  203. close(fd);
  204. shm_unlink(tmpname);
  205. return 3;
  206. }
  207. shm = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
  208. if (shm == MAP_FAILED) {
  209. return 4;
  210. }
  211. shm_unlink(tmpname);
  212. close(fd);
  213. strcpy(shm, "hello");
  214. pid = fork();
  215. if (pid < 0) {
  216. return 5;
  217. } else if (pid == 0) {
  218. strcpy(shm, "bye");
  219. return 6;
  220. }
  221. if (wait(&status) != pid) {
  222. return 7;
  223. }
  224. if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) {
  225. return 8;
  226. }
  227. if (strcmp(shm, "bye") != 0) {
  228. return 9;
  229. }
  230. return 0;
  231. }
  232. ]])],[dnl
  233. AC_DEFINE(HAVE_SHM_MMAP_POSIX, 1, [Define if you have POSIX mmap() SHM support])
  234. msg=yes],[msg=no],[msg=no])
  235. AC_MSG_RESULT([$msg])
  236. AC_MSG_CHECKING(for mmap() using regular file shared memory support)
  237. AC_RUN_IFELSE([AC_LANG_SOURCE([[
  238. #include <sys/types.h>
  239. #include <sys/wait.h>
  240. #include <sys/mman.h>
  241. #include <sys/stat.h>
  242. #include <fcntl.h>
  243. #include <unistd.h>
  244. #include <string.h>
  245. #include <stdlib.h>
  246. #include <stdio.h>
  247. #ifndef MAP_FAILED
  248. # define MAP_FAILED ((void*)-1)
  249. #endif
  250. int main() {
  251. pid_t pid;
  252. int status;
  253. int fd;
  254. char *shm;
  255. char tmpname[4096];
  256. sprintf(tmpname,"test.shm.%dXXXXXX", getpid());
  257. if (mktemp(tmpname) == NULL) {
  258. return 1;
  259. }
  260. fd = open(tmpname, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
  261. if (fd == -1) {
  262. return 2;
  263. }
  264. if (ftruncate(fd, 4096) < 0) {
  265. close(fd);
  266. unlink(tmpname);
  267. return 3;
  268. }
  269. shm = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
  270. if (shm == MAP_FAILED) {
  271. return 4;
  272. }
  273. unlink(tmpname);
  274. close(fd);
  275. strcpy(shm, "hello");
  276. pid = fork();
  277. if (pid < 0) {
  278. return 5;
  279. } else if (pid == 0) {
  280. strcpy(shm, "bye");
  281. return 6;
  282. }
  283. if (wait(&status) != pid) {
  284. return 7;
  285. }
  286. if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) {
  287. return 8;
  288. }
  289. if (strcmp(shm, "bye") != 0) {
  290. return 9;
  291. }
  292. return 0;
  293. }
  294. ]])],[dnl
  295. AC_DEFINE(HAVE_SHM_MMAP_FILE, 1, [Define if you have mmap() SHM support])
  296. msg=yes],[msg=no],[msg=no])
  297. AC_MSG_RESULT([$msg])
  298. PHP_NEW_EXTENSION(opcache,
  299. ZendAccelerator.c \
  300. zend_accelerator_blacklist.c \
  301. zend_accelerator_debug.c \
  302. zend_accelerator_hash.c \
  303. zend_accelerator_module.c \
  304. zend_persist.c \
  305. zend_persist_calc.c \
  306. zend_file_cache.c \
  307. zend_shared_alloc.c \
  308. zend_accelerator_util_funcs.c \
  309. shared_alloc_shm.c \
  310. shared_alloc_mmap.c \
  311. shared_alloc_posix.c \
  312. Optimizer/zend_optimizer.c \
  313. Optimizer/pass1_5.c \
  314. Optimizer/pass2.c \
  315. Optimizer/pass3.c \
  316. Optimizer/optimize_func_calls.c \
  317. Optimizer/block_pass.c \
  318. Optimizer/optimize_temp_vars_5.c \
  319. Optimizer/nop_removal.c \
  320. Optimizer/compact_literals.c \
  321. Optimizer/zend_cfg.c \
  322. Optimizer/zend_dfg.c \
  323. Optimizer/dfa_pass.c \
  324. Optimizer/zend_ssa.c \
  325. Optimizer/zend_inference.c \
  326. Optimizer/zend_func_info.c \
  327. Optimizer/zend_call_graph.c \
  328. Optimizer/sccp.c \
  329. Optimizer/scdf.c \
  330. Optimizer/dce.c \
  331. Optimizer/escape_analysis.c \
  332. Optimizer/compact_vars.c \
  333. Optimizer/zend_dump.c,
  334. shared,,-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1,,yes)
  335. PHP_ADD_BUILD_DIR([$ext_builddir/Optimizer], 1)
  336. PHP_ADD_EXTENSION_DEP(opcache, pcre)
  337. fi