123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435 |
- dnl
- dnl $Id$
- dnl
- dnl This file contains Zend specific autoconf functions.
- dnl
- AC_DEFUN([LIBZEND_CHECK_INT_TYPE],[
- AC_MSG_CHECKING(for $1)
- AC_TRY_COMPILE([
- #if HAVE_SYS_TYPES_H
- #include <sys/types.h>
- #endif
- #if HAVE_INTTYPES_H
- #include <inttypes.h>
- #elif HAVE_STDINT_H
- #include <stdint.h>
- #endif],
- [if (($1 *) 0)
- return 0;
- if (sizeof ($1))
- return 0;
- ],[
- AC_DEFINE_UNQUOTED([HAVE_]translit($1,a-z_-,A-Z__), 1,[Define if $1 type is present. ])
- AC_MSG_RESULT(yes)
- ], AC_MSG_RESULT(no)
- )dnl
- ])
- AC_DEFUN([LIBZEND_BASIC_CHECKS],[
- AC_REQUIRE([AC_PROG_YACC])
- AC_REQUIRE([AC_PROG_CC])
- AC_REQUIRE([AC_PROG_CC_C_O])
- AC_REQUIRE([AC_HEADER_STDC])
- LIBZEND_BISON_CHECK
- dnl Ugly hack to get around a problem with gcc on AIX.
- if test "$CC" = "gcc" -a "$ac_cv_prog_cc_g" = "yes" -a \
- "`uname -sv`" = "AIX 4"; then
- CFLAGS=`echo $CFLAGS | sed -e 's/-g//'`
- fi
- dnl Hack to work around a Mac OS X cpp problem
- dnl Known versions needing this workaround are 5.3 and 5.4
- if test "$ac_cv_prog_gcc" = "yes" -a "`uname -s`" = "Rhapsody"; then
- CPPFLAGS="$CPPFLAGS -traditional-cpp"
- fi
- AC_CHECK_HEADERS(
- inttypes.h \
- stdint.h \
- limits.h \
- malloc.h \
- string.h \
- unistd.h \
- stdarg.h \
- sys/types.h \
- sys/time.h \
- signal.h \
- unix.h \
- stdlib.h \
- dlfcn.h)
- AC_TYPE_SIZE_T
- AC_TYPE_SIGNAL
- AC_DEFUN([LIBZEND_LIBDL_CHECKS],[
- AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"])
- AC_CHECK_FUNC(dlopen,[AC_DEFINE(HAVE_LIBDL, 1,[ ])])
- ])
- AC_DEFUN([LIBZEND_DLSYM_CHECK],[
- dnl
- dnl Ugly hack to check if dlsym() requires a leading underscore in symbol name.
- dnl
- AC_MSG_CHECKING([whether dlsym() requires a leading underscore in symbol names])
- _LT_AC_TRY_DLOPEN_SELF([
- AC_MSG_RESULT(no)
- ], [
- AC_MSG_RESULT(yes)
- AC_DEFINE(DLSYM_NEEDS_UNDERSCORE, 1, [Define if dlsym() requires a leading underscore in symbol names. ])
- ], [
- AC_MSG_RESULT(no)
- ], [])
- ])
- dnl This is required for QNX and may be some BSD derived systems
- AC_CHECK_TYPE( uint, unsigned int )
- AC_CHECK_TYPE( ulong, unsigned long )
- dnl Check if int32_t and uint32_t are defined
- LIBZEND_CHECK_INT_TYPE(int32_t)
- LIBZEND_CHECK_INT_TYPE(uint32_t)
- dnl Checks for library functions.
- AC_FUNC_VPRINTF
- AC_FUNC_MEMCMP
- AC_FUNC_ALLOCA
- AC_CHECK_FUNCS(memcpy strdup getpid kill strtod strtol finite fpclass sigsetjmp)
- AC_ZEND_BROKEN_SPRINTF
- AC_CHECK_FUNCS(finite isfinite isinf isnan)
- ZEND_FP_EXCEPT
- ZEND_CHECK_FLOAT_PRECISION
- dnl test whether double cast to long preserves least significant bits
- AC_MSG_CHECKING(whether double cast to long preserves least significant bits)
- AC_TRY_RUN([
- #include <limits.h>
- int main()
- {
- if (sizeof(long) == 4) {
- double d = (double) LONG_MIN * LONG_MIN + 2e9;
- if ((long) d == 2e9 && (long) -d == -2e9) {
- exit(0);
- }
- } else if (sizeof(long) == 8) {
- double correct = 18e18 - ((double) LONG_MIN * -2); /* Subtract ULONG_MAX + 1 */
- if ((long) 18e18 == correct) { /* On 64-bit, only check between LONG_MAX and ULONG_MAX */
- exit(0);
- }
- }
- exit(1);
- }
- ], [
- AC_DEFINE([ZEND_DVAL_TO_LVAL_CAST_OK], 1, [Define if double cast to long preserves least significant bits])
- AC_MSG_RESULT(yes)
- ], [
- AC_MSG_RESULT(no)
- ], [
- AC_MSG_RESULT(no)
- ])
-
- ])
- AC_DEFUN([LIBZEND_ENABLE_DEBUG],[
- AC_ARG_ENABLE(debug,
- [ --enable-debug Compile with debugging symbols],[
- ZEND_DEBUG=$enableval
- ],[
- ZEND_DEBUG=no
- ])
- ])
- AC_DEFUN([LIBZEND_OTHER_CHECKS],[
- AC_ARG_WITH(zend-vm,
- [ --with-zend-vm=TYPE Set virtual machine dispatch method. Type is
- one of "CALL", "SWITCH" or "GOTO" [TYPE=CALL]],[
- PHP_ZEND_VM=$withval
- ],[
- PHP_ZEND_VM=CALL
- ])
- AC_ARG_ENABLE(maintainer-zts,
- [ --enable-maintainer-zts Enable thread safety - for code maintainers only!!],[
- ZEND_MAINTAINER_ZTS=$enableval
- ],[
- ZEND_MAINTAINER_ZTS=no
- ])
- AC_ARG_ENABLE(inline-optimization,
- [ --disable-inline-optimization
- If building zend_execute.lo fails, try this switch],[
- ZEND_INLINE_OPTIMIZATION=$enableval
- ],[
- ZEND_INLINE_OPTIMIZATION=yes
- ])
- AC_MSG_CHECKING([virtual machine dispatch method])
- AC_MSG_RESULT($PHP_ZEND_VM)
- AC_MSG_CHECKING(whether to enable thread-safety)
- AC_MSG_RESULT($ZEND_MAINTAINER_ZTS)
- AC_MSG_CHECKING(whether to enable inline optimization for GCC)
- AC_MSG_RESULT($ZEND_INLINE_OPTIMIZATION)
- AC_MSG_CHECKING(whether to enable Zend debugging)
- AC_MSG_RESULT($ZEND_DEBUG)
- case $PHP_ZEND_VM in
- SWITCH)
- AC_DEFINE(ZEND_VM_KIND,ZEND_VM_KIND_SWITCH,[virtual machine dispatch method])
- ;;
- GOTO)
- AC_DEFINE(ZEND_VM_KIND,ZEND_VM_KIND_GOTO,[virtual machine dispatch method])
- ;;
- *)
- PHP_ZEND_VM=CALL
- AC_DEFINE(ZEND_VM_KIND,ZEND_VM_KIND_CALL,[virtual machine dispatch method])
- ;;
- esac
- if test "$ZEND_DEBUG" = "yes"; then
- AC_DEFINE(ZEND_DEBUG,1,[ ])
- echo " $CFLAGS" | grep ' -g' >/dev/null || DEBUG_CFLAGS="-g"
- if test "$CFLAGS" = "-g -O2"; then
- CFLAGS=-g
- fi
- test -n "$GCC" && DEBUG_CFLAGS="$DEBUG_CFLAGS -Wall"
- test -n "$GCC" && test "$USE_MAINTAINER_MODE" = "yes" && \
- DEBUG_CFLAGS="$DEBUG_CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations"
- else
- AC_DEFINE(ZEND_DEBUG,0,[ ])
- fi
- test -n "$DEBUG_CFLAGS" && CFLAGS="$CFLAGS $DEBUG_CFLAGS"
- if test "$ZEND_MAINTAINER_ZTS" = "yes"; then
- AC_DEFINE(ZTS,1,[ ])
- CFLAGS="$CFLAGS -DZTS"
- LIBZEND_CPLUSPLUS_CHECKS
- fi
- changequote({,})
- if test -n "$GCC" && test "$ZEND_INLINE_OPTIMIZATION" != "yes"; then
- INLINE_CFLAGS=`echo $ac_n "$CFLAGS $ac_c" | sed s/-O[0-9s]*//`
- else
- INLINE_CFLAGS="$CFLAGS"
- fi
- changequote([,])
- AC_C_INLINE
- AC_SUBST(INLINE_CFLAGS)
- AC_MSG_CHECKING(target system is Darwin)
- if echo "$target" | grep "darwin" > /dev/null; then
- AC_DEFINE([DARWIN], 1, [Define if the target system is darwin])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
- dnl test and set the alignment define for ZEND_MM
- dnl this also does the logarithmic test for ZEND_MM.
- AC_MSG_CHECKING(for MM alignment and log values)
- AC_TRY_RUN([
- #include <stdio.h>
- typedef union _mm_align_test {
- void *ptr;
- double dbl;
- long lng;
- } mm_align_test;
- #if (defined (__GNUC__) && __GNUC__ >= 2)
- #define ZEND_MM_ALIGNMENT (__alignof__ (mm_align_test))
- #else
- #define ZEND_MM_ALIGNMENT (sizeof(mm_align_test))
- #endif
- int main()
- {
- int i = ZEND_MM_ALIGNMENT;
- int zeros = 0;
- FILE *fp;
- while (i & ~0x1) {
- zeros++;
- i = i >> 1;
- }
- fp = fopen("conftest.zend", "w");
- fprintf(fp, "%d %d\n", ZEND_MM_ALIGNMENT, zeros);
- fclose(fp);
- exit(0);
- }
- ], [
- LIBZEND_MM_ALIGN=`cat conftest.zend | cut -d ' ' -f 1`
- LIBZEND_MM_ALIGN_LOG2=`cat conftest.zend | cut -d ' ' -f 2`
- AC_DEFINE_UNQUOTED(ZEND_MM_ALIGNMENT, $LIBZEND_MM_ALIGN, [ ])
- AC_DEFINE_UNQUOTED(ZEND_MM_ALIGNMENT_LOG2, $LIBZEND_MM_ALIGN_LOG2, [ ])
- ], [], [
- dnl cross-compile needs something here
- LIBZEND_MM_ALIGN=8
- ])
- AC_MSG_RESULT(done)
- dnl test for memory allocation using mmap(MAP_ANON)
- AC_MSG_CHECKING(for memory allocation using mmap(MAP_ANON))
- AC_TRY_RUN([
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <sys/mman.h>
- #include <stdlib.h>
- #include <stdio.h>
- #ifndef MAP_ANON
- # ifdef MAP_ANONYMOUS
- # define MAP_ANON MAP_ANONYMOUS
- # endif
- #endif
- #ifndef MREMAP_MAYMOVE
- # define MREMAP_MAYMOVE 0
- #endif
- #ifndef MAP_FAILED
- # define MAP_FAILED ((void*)-1)
- #endif
- #define SEG_SIZE (256*1024)
- int main()
- {
- void *seg = mmap(NULL, SEG_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
- if (seg == MAP_FAILED) {
- return 1;
- }
- if (munmap(seg, SEG_SIZE) != 0) {
- return 2;
- }
- return 0;
- }
- ], [
- AC_DEFINE([HAVE_MEM_MMAP_ANON], 1, [Define if the target system has support for memory allocation using mmap(MAP_ANON)])
- AC_MSG_RESULT(yes)
- ], [
- AC_MSG_RESULT(no)
- ], [
- dnl cross-compile needs something here
- AC_MSG_RESULT(no)
- ])
- dnl test for memory allocation using mmap("/dev/zero")
- AC_MSG_CHECKING(for memory allocation using mmap("/dev/zero"))
- AC_TRY_RUN([
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <sys/mman.h>
- #include <stdlib.h>
- #include <stdio.h>
- #ifndef MAP_ANON
- # ifdef MAP_ANONYMOUS
- # define MAP_ANON MAP_ANONYMOUS
- # endif
- #endif
- #ifndef MREMAP_MAYMOVE
- # define MREMAP_MAYMOVE 0
- #endif
- #ifndef MAP_FAILED
- # define MAP_FAILED ((void*)-1)
- #endif
- #define SEG_SIZE (256*1024)
- int main()
- {
- int fd;
- void *seg;
- fd = open("/dev/zero", O_RDWR, S_IRUSR | S_IWUSR);
- if (fd < 0) {
- return 1;
- }
- seg = mmap(NULL, SEG_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
- if (seg == MAP_FAILED) {
- return 2;
- }
- if (munmap(seg, SEG_SIZE) != 0) {
- return 3;
- }
- if (close(fd) != 0) {
- return 4;
- }
- return 0;
- }
- ], [
- AC_DEFINE([HAVE_MEM_MMAP_ZERO], 1, [Define if the target system has support for memory allocation using mmap("/dev/zero")])
- AC_MSG_RESULT(yes)
- ], [
- AC_MSG_RESULT(no)
- ], [
- dnl cross-compile needs something here
- AC_MSG_RESULT(no)
- ])
- AC_CHECK_FUNCS(mremap)
- AC_ARG_ENABLE(zend-signals,
- [ --enable-zend-signals Use zend signal handling],[
- ZEND_SIGNALS=$enableval
- ],[
- ZEND_SIGNALS=no
- ])
- AC_CHECK_FUNC(sigaction, [
- AC_DEFINE(HAVE_SIGACTION, 1, [Whether sigaction() is available])
- ], [
- ZEND_SIGNALS=no
- ])
- if test "$ZEND_SIGNALS" = "yes"; then
- AC_DEFINE(ZEND_SIGNALS, 1, [Use zend signal handling])
- CFLAGS="$CFLAGS -DZEND_SIGNALS"
- fi
- AC_MSG_CHECKING(whether to enable zend signal handling)
- AC_MSG_RESULT($ZEND_SIGNALS)
- ])
- AC_DEFUN([LIBZEND_CPLUSPLUS_CHECKS],[
- ])
- AC_MSG_CHECKING(whether /dev/urandom exists)
- if test -r "/dev/urandom" && test -c "/dev/urandom"; then
- AC_DEFINE([HAVE_DEV_URANDOM], 1, [Define if the target system has /dev/urandom device])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- AC_MSG_CHECKING(whether /dev/arandom exists)
- if test -r "/dev/arandom" && test -c "/dev/arandom"; then
- AC_DEFINE([HAVE_DEV_ARANDOM], 1, [Define if the target system has /dev/arandom device])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
- fi
|