Added support for GNU Hurd. (Svante Signell)

This commit is contained in:
Dmitry Stogov 2013-09-27 13:43:25 +04:00
parent ea0f832f10
commit f904830012
4 changed files with 67 additions and 38 deletions

1
NEWS
View File

@ -26,6 +26,7 @@ PHP NEWS
imap). (ryotakatsuki at gmail dot com)
- OPcache:
. Added support for GNU Hurd. (Svante Signell)
. Added function opcache_compile_file() to load PHP scripts into cache
without execution. (Julien)
. Fixed bug #65665 (Exception not properly caught when opcache enabled).

View File

@ -80,6 +80,9 @@
# endif
# include <direct.h>
#else
# ifndef MAXPATHLEN
# define MAXPATHLEN 4096
# endif
# include <sys/param.h>
#endif
@ -100,7 +103,7 @@ extern int lock_file;
# elif defined(__svr4__)
# define FLOCK_STRUCTURE(name, type, whence, start, len) \
struct flock name = {type, whence, start, len}
# elif defined(__linux__) || defined(__hpux)
# elif defined(__linux__) || defined(__hpux) || defined(__GNU__)
# define FLOCK_STRUCTURE(name, type, whence, start, len) \
struct flock name = {type, whence, start, len, 0}
# elif defined(_AIX)
@ -111,6 +114,12 @@ extern int lock_file;
# define FLOCK_STRUCTURE(name, type, whence, start, len) \
struct flock name = {type, whence, start, len}
# endif
# elif defined(HAVE_FLOCK_BSD)
# define FLOCK_STRUCTURE(name, type, whence, start, len) \
struct flock name = {start, len, -1, type, whence}
# elif defined(HAVE_FLOCK_LINUX)
# define FLOCK_STRUCTURE(name, type, whence, start, len) \
struct flock name = {type, whence, start, len}
# else
# error "Don't know how to define struct flock"
# endif

View File

@ -326,40 +326,42 @@ int main() {
msg=yes,msg=no,msg=no)
AC_MSG_RESULT([$msg])
AC_MSG_CHECKING(for known struct flock definition)
dnl Copied from ZendAccelerator.h
AC_TRY_RUN([
#include <fcntl.h>
#include <stdlib.h>
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") )
#ifndef ZEND_WIN32
extern int lock_file;
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") )
# if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || (defined(__APPLE__) && defined(__MACH__)/* Darwin */) || defined(__OpenBSD__) || defined(__NetBSD__)
# define FLOCK_STRUCTURE(name, type, whence, start, len) \
struct flock name = {start, len, -1, type, whence}
# elif defined(__svr4__)
# define FLOCK_STRUCTURE(name, type, whence, start, len) \
struct flock name = {type, whence, start, len}
# elif defined(__linux__) || defined(__hpux)
# define FLOCK_STRUCTURE(name, type, whence, start, len) \
struct flock name = {type, whence, start, len, 0}
# elif defined(_AIX)
# if defined(_LARGE_FILES) || defined(__64BIT__)
# define FLOCK_STRUCTURE(name, type, whence, start, len) \
struct flock name = {type, whence, 0, 0, 0, start, len }
# else
# define FLOCK_STRUCTURE(name, type, whence, start, len) \
struct flock name = {type, whence, start, len}
# endif
# else
# error "Don't know how to define struct flock"
# endif
#endif
int main() { return 0; }
],
[AC_MSG_RESULT([done])],
[AC_MSG_ERROR([Don't know how to define struct flock on this system[,] set --enable-opcache=no])], [])
if test "$flock_type" == "unknown"; then
AC_MSG_ERROR([Don't know how to define struct flock on this system[,] set --enable-opcache=no])
fi
PHP_NEW_EXTENSION(opcache,
ZendAccelerator.c \

View File

@ -154,6 +154,7 @@ static const opt_struct OPTIONS[] = {
{'?', 0, "usage"},/* help alias (both '?' and 'usage') */
{'v', 0, "version"},
{'z', 1, "zend-extension"},
{'W', 1, "warmup"},
{'T', 1, "timing"},
{'-', 0, NULL} /* end of args */
};
@ -1754,6 +1755,7 @@ int main(int argc, char *argv[])
int fcgi_fd = 0;
fcgi_request *request = NULL;
int repeats = 1;
int warmup_repeats = 0;
int benchmark = 0;
#if HAVE_GETTIMEOFDAY
struct timeval start, end;
@ -2103,6 +2105,9 @@ consult the installation file that came with this distribution, or visit \n\
time(&start);
#endif
break;
case 'W':
warmup_repeats = atoi(php_optarg);
break;
case 'h':
case '?':
if (request) {
@ -2516,12 +2521,24 @@ fastcgi_request_done:
if (!fastcgi) {
if (benchmark) {
repeats--;
if (repeats > 0) {
script_file = NULL;
php_optind = orig_optind;
php_optarg = orig_optarg;
if (warmup_repeats) {
warmup_repeats--;
if (!warmup_repeats) {
#ifdef HAVE_GETTIMEOFDAY
gettimeofday(&start, NULL);
#else
time(&start);
#endif
}
continue;
} else {
repeats--;
if (repeats > 0) {
script_file = NULL;
php_optind = orig_optind;
php_optarg = orig_optarg;
continue;
}
}
}
break;