Skip to content

Commit 2511420

Browse files
committed
zend build making sigjmp_buf and api check as mandatory.
all unixes support it since long time, the few which don't do not meet the requirements to build php anyway (minix, dietlibc, ...).
1 parent 520787b commit 2511420

File tree

2 files changed

+38
-14
lines changed

2 files changed

+38
-14
lines changed

Zend/Zend.m4

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -151,11 +151,40 @@ AC_CHECK_FUNCS(m4_normalize([
151151
pthread_stackseg_np
152152
]))
153153
154-
dnl Check for sigsetjmp. If it's defined as a macro, AC_CHECK_FUNCS won't work.
155-
AC_CHECK_FUNCS([sigsetjmp],,
156-
[AC_CHECK_DECL([sigsetjmp],
157-
[AC_DEFINE([HAVE_SIGSETJMP], [1])],,
158-
[#include <setjmp.h>])])
154+
dnl
155+
dnl ZEND_CHECK_SIGSETJMP
156+
dnl
157+
dnl Check for sigsetjmp.
158+
dnl
159+
AC_DEFUN([ZEND_CHECK_SIGSETJMP],
160+
[AC_CACHE_CHECK([sigsetjmp availability whether as function or macro],
161+
[php_cv_have_sigsetjmp],
162+
[AC_RUN_IFELSE([AC_LANG_SOURCE([
163+
#include <setjmp.h>
164+
#include <signal.h>
165+
166+
sigjmp_buf jmp;
167+
168+
void handler(int s)
169+
{
170+
siglongjmp(jmp, 1);
171+
}
172+
173+
int main(void)
174+
{
175+
signal(SIGTERM, handler);
176+
(void)sigsetjmp(jmp, 1);
177+
return 0;
178+
}
179+
])],
180+
[php_cv_have_sigsetjmp=yes],
181+
[php_cv_have_sigsetjmp=no],
182+
[php_cv_have_sigsetjmp=no])])
183+
AS_VAR_IF([php_cv_have_sigsetjmp], [no],
184+
[AC_MSG_ERROR([sigsetjmp check failed. Please, check config.log])],
185+
[])
186+
])
187+
159188
160189
ZEND_CHECK_STACK_DIRECTION
161190
ZEND_CHECK_FLOAT_PRECISION
@@ -197,6 +226,7 @@ if test "$ZEND_ZTS" = "yes"; then
197226
CFLAGS="$CFLAGS -DZTS"
198227
fi
199228
229+
ZEND_CHECK_SIGSETJMP
200230
ZEND_CHECK_ALIGNMENT
201231
ZEND_CHECK_SIGNALS
202232
ZEND_CHECK_MAX_EXECUTION_TIMERS

Zend/zend_portability.h

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -394,15 +394,9 @@ char *alloca();
394394
# define XtOffsetOf(s_type, field) offsetof(s_type, field)
395395
#endif
396396

397-
#ifdef HAVE_SIGSETJMP
398-
# define SETJMP(a) sigsetjmp(a, 0)
399-
# define LONGJMP(a,b) siglongjmp(a, b)
400-
# define JMP_BUF sigjmp_buf
401-
#else
402-
# define SETJMP(a) setjmp(a)
403-
# define LONGJMP(a,b) longjmp(a, b)
404-
# define JMP_BUF jmp_buf
405-
#endif
397+
#define SETJMP(a) sigsetjmp(a, 0)
398+
#define LONGJMP(a,b) siglongjmp(a, b)
399+
#define JMP_BUF sigjmp_buf
406400

407401
#if ZEND_DEBUG
408402
# define ZEND_FILE_LINE_D const char *__zend_filename, const uint32_t __zend_lineno

0 commit comments

Comments
 (0)