1dnl $Id$ 2dnl 3dnl This file contains local autoconf functions. 4 5AC_DEFUN([LIBZEND_BISON_CHECK],[ 6 # we only support certain bison versions 7 bison_version_list="1.28 1.35 1.75 1.875 2.0 2.1 2.2 2.3 2.4 2.4.1 2.4.2 2.4.3 2.5 2.5.1 2.6 2.6.1 2.6.2 2.6.4" 8 9 # for standalone build of Zend Engine 10 test -z "$SED" && SED=sed 11 12 bison_version=none 13 if test "$YACC"; then 14 AC_CACHE_CHECK([for bison version], php_cv_bison_version, [ 15 bison_version_vars=`$YACC --version 2> /dev/null | grep 'GNU Bison' | cut -d ' ' -f 4 | $SED -e 's/\./ /g' | tr -d a-z` 16 php_cv_bison_version=invalid 17 if test -n "$bison_version_vars"; then 18 set $bison_version_vars 19 bison_version="${1}.${2}" 20 for bison_check_version in $bison_version_list; do 21 if test "$bison_version" = "$bison_check_version"; then 22 php_cv_bison_version="$bison_check_version (ok)" 23 break 24 fi 25 done 26 fi 27 ]) 28 fi 29 case $php_cv_bison_version in 30 ""|invalid[)] 31 bison_msg="bison versions supported for regeneration of the Zend/PHP parsers: $bison_version_list (found: $bison_version)." 32 AC_MSG_WARN([$bison_msg]) 33 YACC="exit 0;" 34 ;; 35 esac 36]) 37 38AC_DEFUN([ZEND_FP_EXCEPT],[ 39 AC_CACHE_CHECK(whether fp_except is defined, ac_cv_type_fp_except,[ 40 AC_TRY_COMPILE([ 41#include <floatingpoint.h> 42],[ 43fp_except x = (fp_except) 0; 44],[ 45 ac_cv_type_fp_except=yes 46],[ 47 ac_cv_type_fp_except=no 48],[ 49 ac_cv_type_fp_except=no 50])]) 51 if test "$ac_cv_type_fp_except" = "yes"; then 52 AC_DEFINE(HAVE_FP_EXCEPT, 1, [whether floatingpoint.h defines fp_except]) 53 fi 54]) 55 56dnl 57dnl Check for broken sprintf() 58dnl 59AC_DEFUN([AC_ZEND_BROKEN_SPRINTF],[ 60 AC_CACHE_CHECK(whether sprintf is broken, ac_cv_broken_sprintf,[ 61 AC_TRY_RUN([main() {char buf[20];exit(sprintf(buf,"testing 123")!=11); }],[ 62 ac_cv_broken_sprintf=no 63 ],[ 64 ac_cv_broken_sprintf=yes 65 ],[ 66 ac_cv_broken_sprintf=no 67 ]) 68 ]) 69 if test "$ac_cv_broken_sprintf" = "yes"; then 70 ac_result=1 71 else 72 ac_result=0 73 fi 74 AC_DEFINE_UNQUOTED(ZEND_BROKEN_SPRINTF, $ac_result, [Whether sprintf is broken]) 75]) 76 77dnl 78dnl AC_ZEND_C_BIGENDIAN 79dnl Replacement macro for AC_C_BIGENDIAN 80dnl 81AC_DEFUN([AC_ZEND_C_BIGENDIAN], 82[AC_CACHE_CHECK([whether byte ordering is bigendian], ac_cv_c_bigendian_php, 83 [ 84 ac_cv_c_bigendian_php=unknown 85 AC_TRY_RUN( 86 [ 87int main(void) 88{ 89 short one = 1; 90 char *cp = (char *)&one; 91 92 if (*cp == 0) { 93 return(0); 94 } else { 95 return(1); 96 } 97} 98 ], [ac_cv_c_bigendian_php=yes], [ac_cv_c_bigendian_php=no], [ac_cv_c_bigendian_php=unknown]) 99 ]) 100 if test $ac_cv_c_bigendian_php = yes; then 101 AC_DEFINE(WORDS_BIGENDIAN, [], [Define if processor uses big-endian word]) 102 fi 103]) 104 105AC_DEFUN([AM_SET_LIBTOOL_VARIABLE],[ 106 LIBTOOL='$(SHELL) $(top_builddir)/libtool $1' 107]) 108 109dnl x87 floating point internal precision control checks 110dnl See: http://wiki.php.net/rfc/rounding 111AC_DEFUN([ZEND_CHECK_FLOAT_PRECISION],[ 112 AC_MSG_CHECKING([for usable _FPU_SETCW]) 113 AC_TRY_LINK([ 114 #include <fpu_control.h> 115 ],[ 116 fpu_control_t fpu_oldcw, fpu_cw; 117 volatile double result; 118 double a = 2877.0; 119 volatile double b = 1000000.0; 120 121 _FPU_GETCW(fpu_oldcw); 122 fpu_cw = (fpu_oldcw & ~_FPU_EXTENDED & ~_FPU_SINGLE) | _FPU_DOUBLE; 123 _FPU_SETCW(fpu_cw); 124 result = a / b; 125 _FPU_SETCW(fpu_oldcw); 126 ], [ac_cfp_have__fpu_setcw=yes], [ac_cfp_have__fpu_setcw=no]) 127 if test "$ac_cfp_have__fpu_setcw" = "yes" ; then 128 AC_DEFINE(HAVE__FPU_SETCW, 1, [whether _FPU_SETCW is present and usable]) 129 AC_MSG_RESULT(yes) 130 else 131 AC_MSG_RESULT(no) 132 fi 133 134 AC_MSG_CHECKING([for usable fpsetprec]) 135 AC_TRY_LINK([ 136 #include <machine/ieeefp.h> 137 ],[ 138 fp_prec_t fpu_oldprec; 139 volatile double result; 140 double a = 2877.0; 141 volatile double b = 1000000.0; 142 143 fpu_oldprec = fpgetprec(); 144 fpsetprec(FP_PD); 145 result = a / b; 146 fpsetprec(fpu_oldprec); 147 ], [ac_cfp_have_fpsetprec=yes], [ac_cfp_have_fpsetprec=no]) 148 if test "$ac_cfp_have_fpsetprec" = "yes" ; then 149 AC_DEFINE(HAVE_FPSETPREC, 1, [whether fpsetprec is present and usable]) 150 AC_MSG_RESULT(yes) 151 else 152 AC_MSG_RESULT(no) 153 fi 154 155 AC_MSG_CHECKING([for usable _controlfp]) 156 AC_TRY_LINK([ 157 #include <float.h> 158 ],[ 159 unsigned int fpu_oldcw; 160 volatile double result; 161 double a = 2877.0; 162 volatile double b = 1000000.0; 163 164 fpu_oldcw = _controlfp(0, 0); 165 _controlfp(_PC_53, _MCW_PC); 166 result = a / b; 167 _controlfp(fpu_oldcw, _MCW_PC); 168 ], [ac_cfp_have__controlfp=yes], [ac_cfp_have__controlfp=no]) 169 if test "$ac_cfp_have__controlfp" = "yes" ; then 170 AC_DEFINE(HAVE__CONTROLFP, 1, [whether _controlfp is present usable]) 171 AC_MSG_RESULT(yes) 172 else 173 AC_MSG_RESULT(no) 174 fi 175 176 AC_MSG_CHECKING([for usable _controlfp_s]) 177 AC_TRY_LINK([ 178 #include <float.h> 179 ],[ 180 unsigned int fpu_oldcw, fpu_cw; 181 volatile double result; 182 double a = 2877.0; 183 volatile double b = 1000000.0; 184 185 _controlfp_s(&fpu_cw, 0, 0); 186 fpu_oldcw = fpu_cw; 187 _controlfp_s(&fpu_cw, _PC_53, _MCW_PC); 188 result = a / b; 189 _controlfp_s(&fpu_cw, fpu_oldcw, _MCW_PC); 190 ], [ac_cfp_have__controlfp_s=yes], [ac_cfp_have__controlfp_s=no]) 191 if test "$ac_cfp_have__controlfp_s" = "yes" ; then 192 AC_DEFINE(HAVE__CONTROLFP_S, 1, [whether _controlfp_s is present and usable]) 193 AC_MSG_RESULT(yes) 194 else 195 AC_MSG_RESULT(no) 196 fi 197 198 AC_MSG_CHECKING([whether FPU control word can be manipulated by inline assembler]) 199 AC_TRY_LINK([ 200 /* nothing */ 201 ],[ 202 unsigned int oldcw, cw; 203 volatile double result; 204 double a = 2877.0; 205 volatile double b = 1000000.0; 206 207 __asm__ __volatile__ ("fnstcw %0" : "=m" (*&oldcw)); 208 cw = (oldcw & ~0x0 & ~0x300) | 0x200; 209 __asm__ __volatile__ ("fldcw %0" : : "m" (*&cw)); 210 211 result = a / b; 212 213 __asm__ __volatile__ ("fldcw %0" : : "m" (*&oldcw)); 214 ], [ac_cfp_have_fpu_inline_asm_x86=yes], [ac_cfp_have_fpu_inline_asm_x86=no]) 215 if test "$ac_cfp_have_fpu_inline_asm_x86" = "yes" ; then 216 AC_DEFINE(HAVE_FPU_INLINE_ASM_X86, 1, [whether FPU control word can be manipulated by inline assembler]) 217 AC_MSG_RESULT(yes) 218 else 219 AC_MSG_RESULT(no) 220 fi 221]) 222