diff options
Diffstat (limited to 'build/php.m4')
-rw-r--r-- | build/php.m4 | 2753 |
1 files changed, 2753 insertions, 0 deletions
diff --git a/build/php.m4 b/build/php.m4 new file mode 100644 index 0000000000..dc0f95fefd --- /dev/null +++ b/build/php.m4 @@ -0,0 +1,2753 @@ +dnl +dnl This file contains local autoconf functions. +dnl + +dnl ------------------------------------------------------------------------- +dnl Output stylize macros for configure (help/runtime) +dnl ------------------------------------------------------------------------- + +dnl +dnl PHP_HELP_SEPARATOR(title) +dnl +dnl Adds separator title into the configure --help display. +dnl +AC_DEFUN([PHP_HELP_SEPARATOR],[ +AC_ARG_ENABLE([],[ +$1 +],[]) +]) + +dnl +dnl PHP_CONFIGURE_PART(title) +dnl +dnl Adds separator title configure output (idea borrowed from mm) +dnl +AC_DEFUN([PHP_CONFIGURE_PART],[ + AC_MSG_RESULT() + AC_MSG_RESULT([${T_MD}$1${T_ME}]) +]) + +dnl ------------------------------------------------------------------------- +dnl Build system helper macros +dnl ------------------------------------------------------------------------- + +dnl +dnl PHP_DEF_HAVE(what) +dnl +dnl Generates 'AC_DEFINE(HAVE_WHAT, 1, [ ])' +dnl +AC_DEFUN([PHP_DEF_HAVE],[AC_DEFINE([HAVE_]translit($1,a-z_.-,A-Z___), 1, [ ])]) + +dnl +dnl PHP_RUN_ONCE(namespace, variable, code) +dnl +dnl execute code, if variable is not set in namespace +dnl +AC_DEFUN([PHP_RUN_ONCE],[ + changequote({,}) + unique=`echo $2|$SED 's/[^a-zA-Z0-9]/_/g'` + changequote([,]) + cmd="echo $ac_n \"\$$1$unique$ac_c\"" + if test -n "$unique" && test "`eval $cmd`" = "" ; then + eval "$1$unique=set" + $3 + fi +]) + +dnl +dnl PHP_EXPAND_PATH(path, variable) +dnl +dnl expands path to an absolute path and assigns it to variable +dnl +AC_DEFUN([PHP_EXPAND_PATH],[ + if test -z "$1" || echo "$1" | grep '^/' >/dev/null ; then + $2=$1 + else + changequote({,}) + ep_dir=`echo $1|$SED 's%/*[^/][^/]*/*$%%'` + changequote([,]) + ep_realdir=`(cd "$ep_dir" && pwd)` + $2="$ep_realdir"/`basename "$1"` + fi +]) + +dnl +dnl PHP_DEFINE(WHAT [, value[, directory]]) +dnl +dnl Creates builddir/include/what.h and in there #define WHAT value +dnl +AC_DEFUN([PHP_DEFINE],[ + [echo "#define ]$1[]ifelse([$2],,[ 1],[ $2])[" > ]ifelse([$3],,[include],[$3])[/php_]translit($1,A-Z,a-z)[.h] +]) + +dnl +dnl PHP_SUBST(varname) +dnl +dnl Adds variable with it's value into Makefile, e.g.: +dnl CC = gcc +dnl +AC_DEFUN([PHP_SUBST],[ + PHP_VAR_SUBST="$PHP_VAR_SUBST $1" +]) + +dnl +dnl PHP_SUBST_OLD(varname) +dnl +dnl Same as PHP_SUBST() but also substitutes all @VARNAME@ +dnl instances in every file passed to AC_OUTPUT +dnl +AC_DEFUN([PHP_SUBST_OLD],[ + PHP_SUBST($1) + AC_SUBST($1) +]) + +dnl +dnl PHP_OUTPUT(file) +dnl +dnl Adds "file" to the list of files generated by AC_OUTPUT +dnl This macro can be used several times. +dnl +AC_DEFUN([PHP_OUTPUT],[ + PHP_OUTPUT_FILES="$PHP_OUTPUT_FILES $1" +]) + + +dnl ------------------------------------------------------------------------- +dnl Build system base macros +dnl ------------------------------------------------------------------------- + +dnl +dnl PHP_CANONICAL_HOST_TARGET +dnl +AC_DEFUN([PHP_CANONICAL_HOST_TARGET],[ + AC_REQUIRE([AC_CANONICAL_HOST])dnl + AC_REQUIRE([AC_CANONICAL_TARGET])dnl + dnl Make sure we do not continue if host_alias is empty. + if test -z "$host_alias" && test -n "$host"; then + host_alias=$host + fi + if test -z "$host_alias"; then + AC_MSG_ERROR([host_alias is not set!]) + fi +]) + +dnl +dnl PHP_INIT_BUILD_SYSTEM +dnl +AC_DEFUN([PHP_INIT_BUILD_SYSTEM],[ +AC_REQUIRE([PHP_CANONICAL_HOST_TARGET])dnl +test -d include || $php_shtool mkdir include +> Makefile.objects +> Makefile.fragments +dnl We need to play tricks here to avoid matching the grep line itself +pattern=define +$EGREP $pattern'.*include/php' $srcdir/configure|$SED 's/.*>//'|xargs touch 2>/dev/null +]) + +dnl +dnl PHP_GEN_GLOBAL_MAKEFILE +dnl +dnl Generates the global makefile. +dnl +AC_DEFUN([PHP_GEN_GLOBAL_MAKEFILE],[ + cat >Makefile <<EOF +srcdir = $abs_srcdir +builddir = $abs_builddir +top_srcdir = $abs_srcdir +top_builddir = $abs_builddir +EOF + for i in $PHP_VAR_SUBST; do + eval echo "$i = \$$i" >> Makefile + done + + cat $abs_srcdir/build/Makefile.global Makefile.fragments Makefile.objects >> Makefile +]) + +dnl +dnl PHP_ADD_MAKEFILE_FRAGMENT([srcfile [, ext_srcdir [, ext_builddir]]]) +dnl +dnl Processes a file called Makefile.frag in the source directory +dnl of the most recently added extension. $(srcdir) and $(builddir) +dnl are substituted with the proper paths. Can be used to supply +dnl custom rules and/or additional targets. +dnl +AC_DEFUN([PHP_ADD_MAKEFILE_FRAGMENT],[ + ifelse($1,,src=$ext_srcdir/Makefile.frag,src=$1) + ifelse($2,,ac_srcdir=$ext_srcdir,ac_srcdir=$2) + ifelse($3,,ac_builddir=$ext_builddir,ac_builddir=$3) + test -f "$src" && $SED -e "s#\$(srcdir)#$ac_srcdir#g" -e "s#\$(builddir)#$ac_builddir#g" $src >> Makefile.fragments +]) + +dnl +dnl PHP_ADD_SOURCES(source-path, sources [, special-flags [, type]]) +dnl +dnl Adds sources which are located relative to source-path to the +dnl array of type type. Sources are processed with optional +dnl special-flags which are passed to the compiler. Sources +dnl can be either written in C or C++ (filenames shall end in .c +dnl or .cpp, respectively). +dnl +dnl Note: If source-path begins with a "/", the "/" is removed and +dnl the path is interpreted relative to the top build-directory. +dnl +dnl which array to append to? +AC_DEFUN([PHP_ADD_SOURCES],[ + PHP_ADD_SOURCES_X($1, $2, $3, ifelse($4,sapi,PHP_SAPI_OBJS,PHP_GLOBAL_OBJS)) +]) + +dnl +dnl _PHP_ASSIGN_BUILD_VARS(type) +dnl internal, don't use +AC_DEFUN([_PHP_ASSIGN_BUILD_VARS],[ +ifelse($1,shared,[ + b_c_pre=$shared_c_pre + b_cxx_pre=$shared_cxx_pre + b_c_meta=$shared_c_meta + b_cxx_meta=$shared_cxx_meta + b_c_post=$shared_c_post + b_cxx_post=$shared_cxx_post +],[ + b_c_pre=$php_c_pre + b_cxx_pre=$php_cxx_pre + b_c_meta=$php_c_meta + b_cxx_meta=$php_cxx_meta + b_c_post=$php_c_post + b_cxx_post=$php_cxx_post +])dnl + b_lo=[$]$1_lo +]) + +dnl +dnl PHP_ADD_SOURCES_X(source-path, sources[, special-flags[, target-var[, shared[, special-post-flags]]]]) +dnl +dnl Additional to PHP_ADD_SOURCES (see above), this lets you set the +dnl name of the array target-var directly, as well as whether +dnl shared objects will be built from the sources. +dnl +dnl Should not be used directly. +dnl +AC_DEFUN([PHP_ADD_SOURCES_X],[ +dnl relative to source- or build-directory? +dnl ac_srcdir/ac_bdir include trailing slash + case $1 in + ""[)] ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;; + /*[)] ac_srcdir=`echo "$1"|cut -c 2-`"/"; ac_bdir=$ac_srcdir; ac_inc="-I$ac_bdir -I$abs_srcdir/$ac_bdir" ;; + *[)] ac_srcdir="$abs_srcdir/$1/"; ac_bdir="$1/"; ac_inc="-I$ac_bdir -I$ac_srcdir" ;; + esac + +dnl how to build .. shared or static? + ifelse($5,yes,_PHP_ASSIGN_BUILD_VARS(shared),_PHP_ASSIGN_BUILD_VARS(php)) + +dnl iterate over the sources + old_IFS=[$]IFS + for ac_src in $2; do + +dnl remove the suffix + IFS=. + set $ac_src + ac_obj=[$]1 + IFS=$old_IFS + +dnl append to the array which has been dynamically chosen at m4 time + $4="[$]$4 [$]ac_bdir[$]ac_obj.lo" + +dnl choose the right compiler/flags/etc. for the source-file + case $ac_src in + *.c[)] ac_comp="$b_c_pre $3 $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $6$b_c_post" ;; + *.s[)] ac_comp="$b_c_pre $3 $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $6$b_c_post" ;; + *.S[)] ac_comp="$b_c_pre $3 $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $6$b_c_post" ;; + *.cpp|*.cc|*.cxx[)] ac_comp="$b_cxx_pre $3 $ac_inc $b_cxx_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $6$b_cxx_post" ;; + esac + +dnl create a rule for the object/source combo + cat >>Makefile.objects<<EOF +$ac_bdir[$]ac_obj.lo: $ac_srcdir[$]ac_src + $ac_comp +EOF + done +]) + +dnl ------------------------------------------------------------------------- +dnl Compiler characteristics checks +dnl ------------------------------------------------------------------------- + +dnl +dnl PHP_RUNPATH_SWITCH +dnl +dnl Checks for -R, etc. switch +dnl +AC_DEFUN([PHP_RUNPATH_SWITCH],[ +AC_MSG_CHECKING([if compiler supports -R]) +AC_CACHE_VAL(php_cv_cc_dashr,[ + SAVE_LIBS=$LIBS + LIBS="-R /usr/$PHP_LIBDIR $LIBS" + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],[php_cv_cc_dashr=yes],[php_cv_cc_dashr=no]) + LIBS=$SAVE_LIBS]) +AC_MSG_RESULT([$php_cv_cc_dashr]) +if test $php_cv_cc_dashr = "yes"; then + ld_runpath_switch=-R +else + AC_MSG_CHECKING([if compiler supports -Wl,-rpath,]) + AC_CACHE_VAL(php_cv_cc_rpath,[ + SAVE_LIBS=$LIBS + LIBS="-Wl,-rpath,/usr/$PHP_LIBDIR $LIBS" + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],[php_cv_cc_rpath=yes],[php_cv_cc_rpath=no]) + LIBS=$SAVE_LIBS]) + AC_MSG_RESULT([$php_cv_cc_rpath]) + if test $php_cv_cc_rpath = "yes"; then + ld_runpath_switch=-Wl,-rpath, + else + dnl something innocuous + ld_runpath_switch=-L + fi +fi +if test "$PHP_RPATH" = "no"; then + ld_runpath_switch= +fi +]) + +dnl +dnl PHP_CHECK_GCC_ARG(arg, action-if-found, action-if-not-found) +dnl +AC_DEFUN([PHP_CHECK_GCC_ARG],[ + gcc_arg_name=[ac_cv_gcc_arg]translit($1,A-Z-,a-z_) + AC_CACHE_CHECK([whether $CC supports $1], [ac_cv_gcc_arg]translit($1,A-Z-,a-z_), [ + echo 'void somefunc() { };' > conftest.c + cmd='$CC $1 -c conftest.c' + if eval $cmd 2>&1 | $EGREP -e $1 >/dev/null ; then + ac_result=no + else + ac_result=yes + fi + eval $gcc_arg_name=$ac_result + rm -f conftest.* + ]) + if eval test "\$$gcc_arg_name" = "yes"; then + $2 + else + : + $3 + fi +]) + +dnl +dnl PHP_LIBGCC_LIBPATH(gcc) +dnl +dnl Stores the location of libgcc in libgcc_libpath +dnl +AC_DEFUN([PHP_LIBGCC_LIBPATH],[ + changequote({,}) + libgcc_libpath=`$1 --print-libgcc-file-name|$SED 's%/*[^/][^/]*$%%'` + changequote([,]) +]) + +dnl ------------------------------------------------------------------------- +dnl Macros to modify LIBS, INCLUDES, etc. variables +dnl ------------------------------------------------------------------------- + +dnl +dnl PHP_REMOVE_USR_LIB(NAME) +dnl +dnl Removes all -L/usr/$PHP_LIBDIR entries from variable NAME +dnl +AC_DEFUN([PHP_REMOVE_USR_LIB],[ + unset ac_new_flags + for i in [$]$1; do + case [$]i in + -L/usr/$PHP_LIBDIR|-L/usr/$PHP_LIBDIR/[)] ;; + *[)] ac_new_flags="[$]ac_new_flags [$]i" ;; + esac + done + $1=[$]ac_new_flags +]) + +dnl +dnl PHP_EVAL_LIBLINE(libline, SHARED-LIBADD) +dnl +dnl Use this macro, if you need to add libraries and or library search +dnl paths to the PHP build system which are only given in compiler +dnl notation. +dnl +AC_DEFUN([PHP_EVAL_LIBLINE],[ + for ac_i in $1; do + case $ac_i in + -pthread[)] + if test "$ext_shared" = "yes"; then + $2="[$]$2 -pthread" + else + PHP_RUN_ONCE(EXTRA_LDFLAGS, [$ac_i], [EXTRA_LDFLAGS="$EXTRA_LDFLAGS $ac_i"]) + fi + ;; + -l*[)] + ac_ii=`echo $ac_i|cut -c 3-` + PHP_ADD_LIBRARY($ac_ii,1,$2) + ;; + -L*[)] + ac_ii=`echo $ac_i|cut -c 3-` + PHP_ADD_LIBPATH($ac_ii,$2) + ;; + esac + done +]) + +dnl +dnl PHP_EVAL_INCLINE(headerline) +dnl +dnl Use this macro, if you need to add header search paths to the PHP +dnl build system which are only given in compiler notation. +dnl +AC_DEFUN([PHP_EVAL_INCLINE],[ + for ac_i in $1; do + case $ac_i in + -I*[)] + ac_ii=`echo $ac_i|cut -c 3-` + PHP_ADD_INCLUDE($ac_ii) + ;; + esac + done +]) + +dnl internal, don't use +AC_DEFUN([_PHP_ADD_LIBPATH_GLOBAL],[ + PHP_RUN_ONCE(LIBPATH, $1, [ + test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$1" + LDFLAGS="$LDFLAGS -L$1" + PHP_RPATHS="$PHP_RPATHS $1" + ]) +])dnl +dnl +dnl +dnl PHP_ADD_LIBPATH(path [, SHARED-LIBADD]) +dnl +dnl Adds a path to linkpath/runpath (LDFLAGS) +dnl +AC_DEFUN([PHP_ADD_LIBPATH],[ + if test "$1" != "/usr/$PHP_LIBDIR" && test "$1" != "/usr/lib"; then + PHP_EXPAND_PATH($1, ai_p) + ifelse([$2],,[ + _PHP_ADD_LIBPATH_GLOBAL([$ai_p]) + ],[ + if test "$ext_shared" = "yes"; then + $2="-L$ai_p [$]$2" + test -n "$ld_runpath_switch" && $2="$ld_runpath_switch$ai_p [$]$2" + else + _PHP_ADD_LIBPATH_GLOBAL([$ai_p]) + fi + ]) + fi +]) + +dnl +dnl PHP_UTILIZE_RPATHS() +dnl +dnl builds RPATHS/LDFLAGS from PHP_RPATHS +dnl +AC_DEFUN([PHP_UTILIZE_RPATHS],[ + OLD_RPATHS=$PHP_RPATHS + unset PHP_RPATHS + + for i in $OLD_RPATHS; do +dnl Can be passed to native cc/libtool + PHP_LDFLAGS="$PHP_LDFLAGS -L$i" +dnl Libtool-specific + PHP_RPATHS="$PHP_RPATHS -R $i" +dnl cc-specific + NATIVE_RPATHS="$NATIVE_RPATHS $ld_runpath_switch$i" + done + + if test "$PHP_RPATH" = "no"; then + unset PHP_RPATHS + unset NATIVE_RPATHS + fi +]) + +dnl +dnl PHP_ADD_INCLUDE(path [,before]) +dnl +dnl add an include path. +dnl if before is 1, add in the beginning of INCLUDES. +dnl +AC_DEFUN([PHP_ADD_INCLUDE],[ + if test "$1" != "/usr/include"; then + PHP_EXPAND_PATH($1, ai_p) + PHP_RUN_ONCE(INCLUDEPATH, $ai_p, [ + if test "$2"; then + INCLUDES="-I$ai_p $INCLUDES" + else + INCLUDES="$INCLUDES -I$ai_p" + fi + ]) + fi +]) + +dnl internal, don't use +AC_DEFUN([_PHP_X_ADD_LIBRARY],[dnl + ifelse([$2],,$3="-l$1 [$]$3", $3="[$]$3 -l$1") dnl +])dnl +dnl +dnl internal, don't use +AC_DEFUN([_PHP_ADD_LIBRARY_SKELETON],[ + case $1 in + c|c_r|pthread*[)] ;; + *[)] ifelse($3,,[ + _PHP_X_ADD_LIBRARY($1,$2,$5) + ],[ + if test "$ext_shared" = "yes"; then + _PHP_X_ADD_LIBRARY($1,$2,$3) + else + $4($1,$2) + fi + ]) ;; + esac +])dnl +dnl +dnl +dnl PHP_ADD_LIBRARY(library[, append[, shared-libadd]]) +dnl +dnl add a library to the link line +dnl +AC_DEFUN([PHP_ADD_LIBRARY],[ + _PHP_ADD_LIBRARY_SKELETON([$1],[$2],[$3],[PHP_ADD_LIBRARY],[LIBS]) +]) + +dnl +dnl PHP_ADD_LIBRARY_DEFER(library[, append[, shared-libadd]]) +dnl +dnl add a library to the link line (deferred, not used during configure) +dnl +AC_DEFUN([PHP_ADD_LIBRARY_DEFER],[ + _PHP_ADD_LIBRARY_SKELETON([$1],[$2],[$3],[PHP_ADD_LIBRARY_DEFER],[DLIBS]) +]) + +dnl +dnl PHP_ADD_LIBRARY_WITH_PATH(library, path[, shared-libadd]) +dnl +dnl add a library to the link line and path to linkpath/runpath. +dnl if shared-libadd is not empty and $ext_shared is yes, +dnl shared-libadd will be assigned the library information +dnl +AC_DEFUN([PHP_ADD_LIBRARY_WITH_PATH],[ +ifelse($3,,[ + if test -n "$2"; then + PHP_ADD_LIBPATH($2) + fi + PHP_ADD_LIBRARY($1) +],[ + if test "$ext_shared" = "yes"; then + $3="-l$1 [$]$3" + if test -n "$2"; then + PHP_ADD_LIBPATH($2,$3) + fi + else + PHP_ADD_LIBRARY_WITH_PATH($1,$2) + fi +]) +]) + +dnl +dnl PHP_ADD_LIBRARY_DEFER_WITH_PATH(library, path[, shared-libadd]) +dnl +dnl add a library to the link line (deferred) +dnl and path to linkpath/runpath (not deferred) +dnl if shared-libadd is not empty and $ext_shared is yes, +dnl shared-libadd will be assigned the library information +dnl +AC_DEFUN([PHP_ADD_LIBRARY_DEFER_WITH_PATH],[ +ifelse($3,,[ + if test -n "$2"; then + PHP_ADD_LIBPATH($2) + fi + PHP_ADD_LIBRARY_DEFER($1) +],[ + if test "$ext_shared" = "yes"; then + $3="-l$1 [$]$3" + if test -n "$2"; then + PHP_ADD_LIBPATH($2,$3) + fi + else + PHP_ADD_LIBRARY_DEFER_WITH_PATH($1,$2) + fi +]) +]) + +dnl +dnl PHP_ADD_FRAMEWORK(framework [,before]) +dnl +dnl add a (Darwin / Mac OS X) framework to the link +dnl line. if before is 1, the framework is added +dnl to the beginning of the line. +dnl +AC_DEFUN([PHP_ADD_FRAMEWORK], [ + PHP_RUN_ONCE(FRAMEWORKS, $1, [ + if test "$2"; then + PHP_FRAMEWORKS="-framework $1 $PHP_FRAMEWORKS" + else + PHP_FRAMEWORKS="$PHP_FRAMEWORKS -framework $1" + fi + ]) +]) + +dnl +dnl PHP_ADD_FRAMEWORKPATH(path [,before]) +dnl +dnl add a (Darwin / Mac OS X) framework path to the link +dnl and include lines. default paths include (but are +dnl not limited to) /Local/Library/Frameworks and +dnl /System/Library/Frameworks, so these don't need +dnl to be specifically added. if before is 1, the +dnl framework path is added to the beginning of the +dnl relevant lines. +dnl +AC_DEFUN([PHP_ADD_FRAMEWORKPATH], [ + PHP_EXPAND_PATH($1, ai_p) + PHP_RUN_ONCE(FRAMEWORKPATH, $ai_p, [ + if test "$2"; then + PHP_FRAMEWORKPATH="-F$ai_p $PHP_FRAMEWORKPATH" + else + PHP_FRAMEWORKPATH="$PHP_FRAMEWORKPATH -F$ai_p" + fi + ]) +]) + +dnl +dnl PHP_ADD_FRAMEWORK_WITH_PATH(framework, path) +dnl +dnl Adds a (Darwin / Mac OS X) framework path and the +dnl framework itself to the link and include lines. +dnl +AC_DEFUN([PHP_ADD_FRAMEWORK_WITH_PATH], [ + PHP_ADD_FRAMEWORKPATH($2) + PHP_ADD_FRAMEWORK($1) +]) + +dnl +dnl PHP_SET_LIBTOOL_VARIABLE(var) +dnl +dnl Set libtool variable +dnl +AC_DEFUN([PHP_SET_LIBTOOL_VARIABLE],[ + if test -z "$LIBTOOL"; then + LIBTOOL='$(SHELL) $(top_builddir)/libtool $1' + else + LIBTOOL="$LIBTOOL $1" + fi +]) + +dnl ------------------------------------------------------------------------- +dnl Wrapper macros for AC_ARG_WITH / AC_ARG_ENABLE +dnl ------------------------------------------------------------------------- + +dnl PHP_ARG_ANALYZE_EX +dnl internal +AC_DEFUN([PHP_ARG_ANALYZE_EX],[ +ext_output="yes, shared" +ext_shared=yes +case [$]$1 in +shared,*[)] + $1=`echo "[$]$1"|$SED 's/^shared,//'` + ;; +shared[)] + $1=yes + ;; +no[)] + ext_output=no + ext_shared=no + ;; +*[)] + ext_output=yes + ext_shared=no + ;; +esac + +PHP_ALWAYS_SHARED([$1]) +]) + +dnl PHP_ARG_ANALYZE +dnl internal +AC_DEFUN([PHP_ARG_ANALYZE],[ +ifelse([$3],yes,[PHP_ARG_ANALYZE_EX([$1])],[ext_output=ifelse([$]$1,,no,[$]$1)]) +ifelse([$2],,,[AC_MSG_RESULT([$ext_output])]) +]) + +dnl +dnl PHP_ARG_WITH(arg-name, check message, help text[, default-val[, extension-or-not]]) +dnl Sets PHP_ARG_NAME either to the user value or to the default value. +dnl default-val defaults to no. This will also set the variable ext_shared, +dnl and will overwrite any previous variable of that name. +dnl If extension-or-not is yes (default), then do the ENABLE_ALL check and run +dnl the PHP_ARG_ANALYZE_EX. +dnl +AC_DEFUN([PHP_ARG_WITH],[ +php_with_[]translit($1,A-Z0-9-,a-z0-9_)=ifelse($4,,no,$4) +PHP_REAL_ARG_WITH([$1],[$2],[$3],[$4],PHP_[]translit($1,a-z0-9-,A-Z0-9_),[ifelse($5,,yes,$5)]) +]) + +dnl PHP_REAL_ARG_WITH +dnl internal +AC_DEFUN([PHP_REAL_ARG_WITH],[ +ifelse([$2],,,[AC_MSG_CHECKING([$2])]) +AC_ARG_WITH($1,[$3],$5=[$]withval, +[ + $5=ifelse($4,,no,$4) + ifelse($6,yes,[test "$PHP_ENABLE_ALL" && $5=$PHP_ENABLE_ALL]) +]) +PHP_ARG_ANALYZE($5,[$2],$6) +]) + +dnl +dnl PHP_ARG_ENABLE(arg-name, check message, help text[, default-val[, extension-or-not]]) +dnl Sets PHP_ARG_NAME either to the user value or to the default value. +dnl default-val defaults to no. This will also set the variable ext_shared, +dnl and will overwrite any previous variable of that name. +dnl If extension-or-not is yes (default), then do the ENABLE_ALL check and run +dnl the PHP_ARG_ANALYZE_EX. +dnl +AC_DEFUN([PHP_ARG_ENABLE],[ +php_enable_[]translit($1,A-Z0-9-,a-z0-9_)=ifelse($4,,no,$4) +PHP_REAL_ARG_ENABLE([$1],[$2],[$3],[$4],PHP_[]translit($1,a-z0-9-,A-Z0-9_),[ifelse($5,,yes,$5)]) +]) + +dnl PHP_REAL_ARG_ENABLE +dnl internal +AC_DEFUN([PHP_REAL_ARG_ENABLE],[ +ifelse([$2],,,[AC_MSG_CHECKING([$2])]) +AC_ARG_ENABLE($1,[$3],$5=[$]enableval, +[ + $5=ifelse($4,,no,$4) + ifelse($6,yes,[test "$PHP_ENABLE_ALL" && $5=$PHP_ENABLE_ALL]) +]) +PHP_ARG_ANALYZE($5,[$2],$6) +]) + +dnl ------------------------------------------------------------------------- +dnl Build macros +dnl ------------------------------------------------------------------------- + +dnl +dnl PHP_BUILD_THREAD_SAFE +dnl +AC_DEFUN([PHP_BUILD_THREAD_SAFE],[ + enable_zts=yes + if test "$pthreads_working" != "yes"; then + AC_MSG_ERROR([ZTS currently requires working POSIX threads. We were unable to verify that your system supports Pthreads.]) + fi +]) + +dnl +dnl PHP_REQUIRE_CXX +dnl +AC_DEFUN([PHP_REQUIRE_CXX],[ + if test -z "$php_cxx_done"; then + AC_PROG_CXX + AC_PROG_CXXCPP + PHP_ADD_LIBRARY(stdc++) + php_cxx_done=yes + fi +]) + +dnl +dnl PHP_BUILD_SHARED +dnl +AC_DEFUN([PHP_BUILD_SHARED],[ + PHP_BUILD_PROGRAM + OVERALL_TARGET=libphp[]$PHP_MAJOR_VERSION[.la] + php_sapi_module=shared + + php_c_pre=$shared_c_pre + php_c_meta=$shared_c_meta + php_c_post=$shared_c_post + php_cxx_pre=$shared_cxx_pre + php_cxx_meta=$shared_cxx_meta + php_cxx_post=$shared_cxx_post + php_lo=$shared_lo +]) + +dnl +dnl PHP_BUILD_STATIC +dnl +AC_DEFUN([PHP_BUILD_STATIC],[ + PHP_BUILD_PROGRAM + OVERALL_TARGET=libphp[]$PHP_MAJOR_VERSION[.la] + php_sapi_module=static +]) + +dnl +dnl PHP_BUILD_BUNDLE +dnl +AC_DEFUN([PHP_BUILD_BUNDLE],[ + PHP_BUILD_PROGRAM + OVERALL_TARGET=libs/libphp[]$PHP_MAJOR_VERSION[.bundle] + php_sapi_module=static +]) + +dnl +dnl PHP_BUILD_PROGRAM +dnl +AC_DEFUN([PHP_BUILD_PROGRAM],[ + php_c_pre='$(LIBTOOL) --mode=compile $(CC)' + php_c_meta='$(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS)' + php_c_post= + php_cxx_pre='$(LIBTOOL) --mode=compile $(CXX)' + php_cxx_meta='$(COMMON_FLAGS) $(CXXFLAGS_CLEAN) $(EXTRA_CXXFLAGS)' + php_cxx_post= + php_lo=lo + + case $with_pic in + yes) pic_setting='-prefer-pic';; + no) pic_setting='-prefer-non-pic';; + esac + + shared_c_pre='$(LIBTOOL) --mode=compile $(CC)' + shared_c_meta='$(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) '$pic_setting + shared_c_post= + shared_cxx_pre='$(LIBTOOL) --mode=compile $(CXX)' + shared_cxx_meta='$(COMMON_FLAGS) $(CXXFLAGS_CLEAN) $(EXTRA_CXXFLAGS) '$pic_setting + shared_cxx_post= + shared_lo=lo +]) + +dnl +dnl PHP_SHARED_MODULE(module-name, object-var, build-dir, cxx, zend_ext) +dnl +dnl Basically sets up the link-stage for building module-name +dnl from object_var in build-dir. +dnl +AC_DEFUN([PHP_SHARED_MODULE],[ + install_modules="install-modules" + suffix=la + + case $host_alias in + *aix*[)] + additional_flags="-Wl,-G" + ;; + esac + + if test "x$5" = "xyes"; then + PHP_ZEND_EX="$PHP_ZEND_EX \$(phplibdir)/$1.$suffix" + else + PHP_MODULES="$PHP_MODULES \$(phplibdir)/$1.$suffix" + fi + PHP_SUBST($2) + cat >>Makefile.objects<<EOF +\$(phplibdir)/$1.$suffix: $3/$1.$suffix + \$(LIBTOOL) --mode=install cp $3/$1.$suffix \$(phplibdir) + +$3/$1.$suffix: \$($2) \$(translit($1,a-z_-,A-Z__)_SHARED_DEPENDENCIES) + \$(LIBTOOL) --mode=link ifelse($4,,[\$(CC)],[\$(CXX)]) \$(COMMON_FLAGS) \$(CFLAGS_CLEAN) \$(EXTRA_CFLAGS) \$(LDFLAGS) $additional_flags -o [\$]@ -export-dynamic -avoid-version -prefer-pic -module -rpath \$(phplibdir) \$(EXTRA_LDFLAGS) \$($2) \$(translit($1,a-z_-,A-Z__)_SHARED_LIBADD) + +EOF +]) + +dnl +dnl PHP_SELECT_SAPI(name, type[, sources [, extra-cflags [, build-target]]]) +dnl +dnl Selects the SAPI name and type (static, shared, bundle, program) +dnl and optionally also the source-files for the SAPI-specific +dnl objects. +dnl +AC_DEFUN([PHP_SELECT_SAPI],[ + if test "$2" = "program"; then + PHP_BINARIES="$PHP_BINARIES $1" + elif test "$PHP_SAPI" != "none"; then + AC_MSG_ERROR([ ++--------------------------------------------------------------------+ +| *** ATTENTION *** | +| | +| You've configured multiple SAPIs to be build. You can build only | +| one SAPI module plus CGI, CLI and FPM binaries at the same time. | ++--------------------------------------------------------------------+ +]) + else + PHP_SAPI=$1 + fi + + PHP_ADD_BUILD_DIR([sapi/$1]) + + PHP_INSTALLED_SAPIS="$PHP_INSTALLED_SAPIS $1" + + ifelse($2,program,[ + PHP_BUILD_PROGRAM + install_binaries="install-binaries" + install_binary_targets="$install_binary_targets install-$1" + PHP_SUBST(PHP_[]translit($1,a-z0-9-,A-Z0-9_)[]_OBJS) + ifelse($3,,,[PHP_ADD_SOURCES_X([sapi/$1],[$3],[$4],PHP_[]translit($1,a-z0-9-,A-Z0-9_)[]_OBJS)]) + ],[ + case "$2" in + static[)] PHP_BUILD_STATIC;; + shared[)] PHP_BUILD_SHARED;; + bundle[)] PHP_BUILD_BUNDLE;; + esac + install_sapi="install-sapi" + ifelse($3,,,[PHP_ADD_SOURCES([sapi/$1],[$3],[$4],[sapi])]) + ]) +]) + +AC_DEFUN([PHP_ADD_BUILD_DIR],[ + ifelse($2,,[ + BUILD_DIR="$BUILD_DIR $1" + ], [ + $php_shtool mkdir -p $1 + ]) +]) + +AC_DEFUN([PHP_GEN_BUILD_DIRS],[ + $php_shtool mkdir -p $BUILD_DIR +]) + +dnl +dnl PHP_NEW_EXTENSION(extname, sources [, shared [, sapi_class [, extra-cflags [, cxx [, zend_ext]]]]]) +dnl +dnl Includes an extension in the build. +dnl +dnl "extname" is the name of the extension. +dnl "sources" is a list of files relative to the subdir which are used +dnl to build the extension. +dnl "shared" can be set to "shared" or "yes" to build the extension as +dnl a dynamically loadable library. Optional parameter "sapi_class" can +dnl be set to "cli" to mark extension build only with CLI or CGI sapi's. +dnl "extra-cflags" are passed to the compiler, with +dnl @ext_srcdir@ and @ext_builddir@ being substituted. +dnl "cxx" can be used to indicate that a C++ shared module is desired. +dnl "zend_ext" indicates a zend extension. +AC_DEFUN([PHP_NEW_EXTENSION],[ + ext_builddir=[]PHP_EXT_BUILDDIR($1) + ext_srcdir=[]PHP_EXT_SRCDIR($1) + ext_dir=[]PHP_EXT_DIR($1) + + ifelse($5,,ac_extra=,[ac_extra=`echo "$5"|$SED s#@ext_srcdir@#$ext_srcdir#g|$SED s#@ext_builddir@#$ext_builddir#g`]) + + if test "$3" != "shared" && test "$3" != "yes" && test "$4" != "cli"; then +dnl ---------------------------------------------- Static module + [PHP_]translit($1,a-z_-,A-Z__)[_SHARED]=no + PHP_ADD_SOURCES($ext_dir,$2,$ac_extra,) + EXT_STATIC="$EXT_STATIC $1;$ext_dir" + if test "$3" != "nocli"; then + EXT_CLI_STATIC="$EXT_CLI_STATIC $1;$ext_dir" + fi + else + if test "$3" = "shared" || test "$3" = "yes"; then +dnl ---------------------------------------------- Shared module + [PHP_]translit($1,a-z_-,A-Z__)[_SHARED]=yes + PHP_ADD_SOURCES_X($ext_dir,$2,$ac_extra,shared_objects_$1,yes) + PHP_SHARED_MODULE($1,shared_objects_$1, $ext_builddir, $6, $7) + AC_DEFINE_UNQUOTED([COMPILE_DL_]translit($1,a-z_-,A-Z__), 1, Whether to build $1 as dynamic module) + fi + fi + + if test "$3" != "shared" && test "$3" != "yes" && test "$4" = "cli"; then +dnl ---------------------------------------------- CLI static module + [PHP_]translit($1,a-z_-,A-Z__)[_SHARED]=no + case "$PHP_SAPI" in + cgi|embed|phpdbg[)] + PHP_ADD_SOURCES($ext_dir,$2,$ac_extra,) + EXT_STATIC="$EXT_STATIC $1;$ext_dir" + ;; + *[)] + PHP_ADD_SOURCES($ext_dir,$2,$ac_extra,cli) + ;; + esac + EXT_CLI_STATIC="$EXT_CLI_STATIC $1;$ext_dir" + fi + PHP_ADD_BUILD_DIR($ext_builddir) + +dnl Set for phpize builds only +dnl --------------------------- + if test "$ext_builddir" = "."; then + PHP_PECL_EXTENSION=$1 + PHP_SUBST(PHP_PECL_EXTENSION) + fi +]) + +dnl +dnl PHP_WITH_SHARED +dnl +dnl Checks whether $withval is "shared" or starts with "shared,XXX" +dnl and sets $shared to "yes" or "no", and removes "shared,?" stuff +dnl from $withval. +dnl +AC_DEFUN([PHP_WITH_SHARED],[ + PHP_ARG_ANALYZE_EX(withval) + shared=$ext_shared + unset ext_shared ext_output +]) + +dnl +dnl PHP_ADD_EXTENSION_DEP(extname, depends [, depconf]) +dnl +dnl This macro is scanned by genif.sh when it builds the internal functions +dnl list, so that modules can be init'd in the correct order +dnl $1 = name of extension, $2 = extension upon which it depends +dnl $3 = optional: if true, it's ok for $2 to have not been configured +dnl default is false and should halt the build. +dnl To be effective, this macro must be invoked *after* PHP_NEW_EXTENSION. +dnl The extension on which it depends must also have been configured. +dnl See ADD_EXTENSION_DEP in win32 build +dnl +AC_DEFUN([PHP_ADD_EXTENSION_DEP], [ + am_i_shared=$[PHP_]translit($1,a-z_-,A-Z__)[_SHARED] + is_it_shared=$[PHP_]translit($2,a-z_-,A-Z__)[_SHARED] + is_it_enabled=$[PHP_]translit($2,a-z_-,A-Z__) + if test "$am_i_shared" = "no" && test "$is_it_shared" = "yes" ; then + AC_MSG_ERROR([ +You've configured extension $1 to build statically, but it +depends on extension $2, which you've configured to build shared. +You either need to build $1 shared or build $2 statically for the +build to be successful. +]) + fi + if test "x$is_it_enabled" = "xno" && test "x$3" != "xtrue"; then + AC_MSG_ERROR([ +You've configured extension $1, which depends on extension $2, +but you've either not enabled $2, or have disabled it. +]) + fi + dnl Some systems require that we link $2 to $1 when building +]) + +dnl ------------------------------------------------------------------------- +dnl Checks for structures, typedefs, broken functions, etc. +dnl ------------------------------------------------------------------------- + +dnl Internal helper macros +dnl +dnl _PHP_CHECK_SIZEOF(type, cross-value, extra-headers [, found-action [, not-found-action]]) +dnl +AC_DEFUN([_PHP_CHECK_SIZEOF], [ + php_cache_value=php_cv_sizeof_[]$1 + AC_CACHE_VAL(php_cv_sizeof_[]$1, [ + old_LIBS=$LIBS + LIBS= + old_LDFLAGS=$LDFLAGS + LDFLAGS= + AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdio.h> +#include <stdlib.h> +#include <stddef.h> +#ifdef HAVE_INTTYPES_H +#include <inttypes.h> +#endif +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif +$3 + +int main() +{ + FILE *fp = fopen("conftestval", "w"); + if (!fp) return(1); + fprintf(fp, "%d\n", sizeof($1)); + return(0); +} + ]])], [ + eval $php_cache_value=`cat conftestval` + ], [ + eval $php_cache_value=0 + ], [ + ifelse([$2],,[eval $php_cache_value=0], [eval $php_cache_value=$2]) +]) + LDFLAGS=$old_LDFLAGS + LIBS=$old_LIBS +]) + if eval test "\$$php_cache_value" != "0"; then +ifelse([$4],[],:,[$4]) +ifelse([$5],[],,[else $5]) + fi +]) + +dnl +dnl PHP_CHECK_SIZEOF(type, cross-value, extra-headers) +dnl +AC_DEFUN([PHP_CHECK_SIZEOF], [ + AC_MSG_CHECKING([size of $1]) + _PHP_CHECK_SIZEOF($1, $2, $3, [ + AC_DEFINE_UNQUOTED([SIZEOF_]translit($1,a-z,A-Z_), [$]php_cv_sizeof_[]$1, [Size of $1]) + AC_DEFINE_UNQUOTED([HAVE_]translit($1,a-z,A-Z_), 1, [Whether $1 is available]) + ]) + AC_MSG_RESULT([[$][php_cv_sizeof_]translit($1, ,_)]) +]) + +dnl +dnl PHP_CHECK_IN_ADDR_T +dnl +AC_DEFUN([PHP_CHECK_IN_ADDR_T], [ +dnl AIX keeps in_addr_t in /usr/include/netinet/in.h +AC_MSG_CHECKING([for in_addr_t]) +AC_CACHE_VAL(ac_cv_type_in_addr_t, +[AC_EGREP_CPP(dnl +changequote(<<,>>)dnl +<<in_addr_t[^a-zA-Z_0-9]>>dnl +changequote([,]), [#include <sys/types.h> +#include <stdlib.h> +#include <stddef.h> +#ifdef HAVE_NETINET_IN_H +#include <netinet/in.h> +#endif], ac_cv_type_in_addr_t=yes, ac_cv_type_in_addr_t=no)])dnl +AC_MSG_RESULT([$ac_cv_type_in_addr_t]) +if test $ac_cv_type_in_addr_t = no; then + AC_DEFINE(in_addr_t, u_int, [ ]) +fi +]) + +dnl +dnl PHP_TIME_R_TYPE +dnl +dnl Check type of reentrant time-related functions +dnl Type can be: irix, hpux or POSIX +dnl +AC_DEFUN([PHP_TIME_R_TYPE],[ +AC_CACHE_CHECK(for type of reentrant time-related functions, ac_cv_time_r_type,[ +AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include <time.h> + +main() { +char buf[27]; +struct tm t; +time_t old = 0; +int r, s; + +s = gmtime_r(&old, &t); +r = (int) asctime_r(&t, buf, 26); +if (r == s && s == 0) return (0); +return (1); +} +]])],[ + ac_cv_time_r_type=hpux +],[ + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include <time.h> +main() { + struct tm t, *s; + time_t old = 0; + char buf[27], *p; + + s = gmtime_r(&old, &t); + p = asctime_r(&t, buf, 26); + if (p == buf && s == &t) return (0); + return (1); +} + ]])],[ + ac_cv_time_r_type=irix + ],[ + ac_cv_time_r_type=POSIX + ],[ + ac_cv_time_r_type=POSIX + ]) +],[ + ac_cv_time_r_type=POSIX +]) +]) + case $ac_cv_time_r_type in + hpux[)] AC_DEFINE(PHP_HPUX_TIME_R,1,[Whether you have HP-UX 10.x]) ;; + irix[)] AC_DEFINE(PHP_IRIX_TIME_R,1,[Whether you have IRIX-style functions]) ;; + esac +]) + +dnl +dnl PHP_DOES_PWRITE_WORK +dnl internal +AC_DEFUN([PHP_DOES_PWRITE_WORK],[ + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <unistd.h> +#include <errno.h> +$1 + main() { + int fd = open("conftest_in", O_WRONLY|O_CREAT, 0600); + + if (fd < 0) exit(1); + if (pwrite(fd, "text", 4, 0) != 4) exit(1); + /* Linux glibc breakage until 2.2.5 */ + if (pwrite(fd, "text", 4, -1) != -1 || errno != EINVAL) exit(1); + exit(0); + } + + ]])],[ + ac_cv_pwrite=yes + ],[ + ac_cv_pwrite=no + ],[ + ac_cv_pwrite=no + ]) +]) + +dnl PHP_DOES_PREAD_WORK +dnl internal +AC_DEFUN([PHP_DOES_PREAD_WORK],[ + echo test > conftest_in + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <unistd.h> +#include <errno.h> +$1 + main() { + char buf[3]; + int fd = open("conftest_in", O_RDONLY); + if (fd < 0) exit(1); + if (pread(fd, buf, 2, 0) != 2) exit(1); + /* Linux glibc breakage until 2.2.5 */ + if (pread(fd, buf, 2, -1) != -1 || errno != EINVAL) exit(1); + exit(0); + } + ]])],[ + ac_cv_pread=yes + ],[ + ac_cv_pread=no + ],[ + ac_cv_pread=no + ]) + rm -f conftest_in +]) + +dnl +dnl PHP_PWRITE_TEST +dnl +AC_DEFUN([PHP_PWRITE_TEST],[ + AC_CACHE_CHECK(whether pwrite works,ac_cv_pwrite,[ + PHP_DOES_PWRITE_WORK + if test "$ac_cv_pwrite" = "no"; then + PHP_DOES_PWRITE_WORK([ssize_t pwrite(int, void *, size_t, off64_t);]) + if test "$ac_cv_pwrite" = "yes"; then + ac_cv_pwrite=64 + fi + fi + ]) + + if test "$ac_cv_pwrite" != "no"; then + AC_DEFINE(HAVE_PWRITE, 1, [ ]) + if test "$ac_cv_pwrite" = "64"; then + AC_DEFINE(PHP_PWRITE_64, 1, [whether pwrite64 is default]) + fi + fi +]) + +dnl +dnl PHP_PREAD_TEST +dnl +AC_DEFUN([PHP_PREAD_TEST],[ + AC_CACHE_CHECK(whether pread works,ac_cv_pread,[ + PHP_DOES_PREAD_WORK + if test "$ac_cv_pread" = "no"; then + PHP_DOES_PREAD_WORK([ssize_t pread(int, void *, size_t, off64_t);]) + if test "$ac_cv_pread" = "yes"; then + ac_cv_pread=64 + fi + fi + ]) + + if test "$ac_cv_pread" != "no"; then + AC_DEFINE(HAVE_PREAD, 1, [ ]) + if test "$ac_cv_pread" = "64"; then + AC_DEFINE(PHP_PREAD_64, 1, [whether pread64 is default]) + fi + fi +]) + +dnl +dnl PHP_MISSING_TIME_R_DECL +dnl +AC_DEFUN([PHP_MISSING_TIME_R_DECL],[ + AC_MSG_CHECKING([for missing declarations of reentrant functions]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[struct tm *(*func)() = localtime_r]])],[ + : + ],[ + AC_DEFINE(MISSING_LOCALTIME_R_DECL,1,[Whether localtime_r is declared]) + ]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[struct tm *(*func)() = gmtime_r]])],[ + : + ],[ + AC_DEFINE(MISSING_GMTIME_R_DECL,1,[Whether gmtime_r is declared]) + ]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[char *(*func)() = asctime_r]])],[ + : + ],[ + AC_DEFINE(MISSING_ASCTIME_R_DECL,1,[Whether asctime_r is declared]) + ]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[char *(*func)() = ctime_r]])],[ + : + ],[ + AC_DEFINE(MISSING_CTIME_R_DECL,1,[Whether ctime_r is declared]) + ]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <string.h>]], [[char *(*func)() = strtok_r]])],[ + : + ],[ + AC_DEFINE(MISSING_STRTOK_R_DECL,1,[Whether strtok_r is declared]) + ]) + AC_MSG_RESULT([done]) +]) + +dnl +dnl PHP_STRUCT_FLOCK +dnl +AC_DEFUN([PHP_STRUCT_FLOCK],[ +AC_CACHE_CHECK(for struct flock,ac_cv_struct_flock, + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include <unistd.h> +#include <fcntl.h> + ]], [[struct flock x;]])],[ + ac_cv_struct_flock=yes + ],[ + ac_cv_struct_flock=no + ]) +) +if test "$ac_cv_struct_flock" = "yes" ; then + AC_DEFINE(HAVE_STRUCT_FLOCK, 1,[whether you have struct flock]) +fi +]) + +dnl +dnl PHP_SOCKLEN_T +dnl +AC_DEFUN([PHP_SOCKLEN_T],[ +AC_CACHE_CHECK(for socklen_t,ac_cv_socklen_t, + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include <sys/types.h> +#include <sys/socket.h> +]],[[ +socklen_t x; +]])],[ + ac_cv_socklen_t=yes +],[ + ac_cv_socklen_t=no +])) +if test "$ac_cv_socklen_t" = "yes"; then + AC_DEFINE(HAVE_SOCKLEN_T, 1, [Whether you have socklen_t]) +fi +]) + +dnl +dnl PHP_MISSING_FCLOSE_DECL +dnl +dnl See if we have broken header files like SunOS has. +dnl +AC_DEFUN([PHP_MISSING_FCLOSE_DECL],[ + AC_MSG_CHECKING([for fclose declaration]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]], [[int (*func)() = fclose]])],[ + AC_DEFINE(MISSING_FCLOSE_DECL,0,[ ]) + AC_MSG_RESULT([ok]) + ],[ + AC_DEFINE(MISSING_FCLOSE_DECL,1,[ ]) + AC_MSG_RESULT([missing]) + ]) +]) + +dnl +dnl PHP_SOCKADDR_CHECKS +dnl +AC_DEFUN([PHP_SOCKADDR_CHECKS], [ + dnl Check for struct sockaddr_storage exists + AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_sockaddr_storage, + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> +#include <sys/socket.h>]], + [[struct sockaddr_storage s; s]])], + [ac_cv_sockaddr_storage=yes], [ac_cv_sockaddr_storage=no]) + ]) + if test "$ac_cv_sockaddr_storage" = "yes"; then + AC_DEFINE(HAVE_SOCKADDR_STORAGE, 1, [Whether you have struct sockaddr_storage]) + fi + dnl Check if field sa_len exists in struct sockaddr + AC_CACHE_CHECK([for field sa_len in struct sockaddr],ac_cv_sockaddr_sa_len,[ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> +#include <sys/socket.h>]], [[static struct sockaddr sa; int n = (int) sa.sa_len; return n;]])], + [ac_cv_sockaddr_sa_len=yes], [ac_cv_sockaddr_sa_len=no]) + ]) + if test "$ac_cv_sockaddr_sa_len" = "yes"; then + AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1, [Whether struct sockaddr has field sa_len]) + fi +]) + +dnl +dnl PHP_EBCDIC +dnl +AC_DEFUN([PHP_EBCDIC], [ + AC_CACHE_CHECK([whether system uses EBCDIC],ac_cv_ebcdic,[ + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +int main(void) { + return (unsigned char)'A' != (unsigned char)0xC1; +} +]])],[ + ac_cv_ebcdic=yes +],[ + ac_cv_ebcdic=no +],[ + ac_cv_ebcdic=no +])]) + if test "$ac_cv_ebcdic" = "yes"; then + AC_DEFINE(CHARSET_EBCDIC,1, [Define if system uses EBCDIC]) + fi +]) + +dnl +dnl PHP_BROKEN_GETCWD +dnl +dnl Some systems, notably Solaris, cause getcwd() or realpath to fail if a +dnl component of the path has execute but not read permissions +dnl +AC_DEFUN([PHP_BROKEN_GETCWD],[ + AC_MSG_CHECKING([for broken getcwd]) + os=`uname -sr 2>/dev/null` + case $os in + SunOS*[)] + AC_DEFINE(HAVE_BROKEN_GETCWD,1, [Define if system has broken getcwd]) + AC_MSG_RESULT([yes]);; + *[)] + AC_MSG_RESULT([no]);; + esac +]) + +dnl +dnl PHP_BROKEN_GCC_STRLEN_OPT +dnl +dnl Early releases of GCC 8 shipped with a strlen() optimization bug, so they +dnl didn't properly handle the `char val[1]` struct hack. See bug #76510. +dnl +AC_DEFUN([PHP_BROKEN_GCC_STRLEN_OPT], [ + AC_CACHE_CHECK([for broken gcc optimize-strlen],ac_cv_have_broken_gcc_strlen_opt,[ + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include <stdlib.h> +#include <string.h> +#include <stdio.h> +struct s +{ + int i; + char c[1]; +}; +int main() +{ + struct s *s = malloc(sizeof(struct s) + 3); + s->i = 3; + strcpy(s->c, "foo"); + return strlen(s->c+1) == 2; +} +]])],[ + ac_cv_have_broken_gcc_strlen_opt=yes +],[ + ac_cv_have_broken_gcc_strlen_opt=no +],[ + ac_cv_have_broken_gcc_strlen_opt=no +])]) + if test "$ac_cv_have_broken_gcc_strlen_opt" = "yes"; then + CFLAGS="$CFLAGS -fno-optimize-strlen" + fi +]) + +dnl +dnl PHP_FOPENCOOKIE +dnl +AC_DEFUN([PHP_FOPENCOOKIE], [ + AC_CHECK_FUNC(fopencookie, [have_glibc_fopencookie=yes]) + + if test "$have_glibc_fopencookie" = "yes"; then +dnl this comes in two flavors: +dnl newer glibcs (since 2.1.2 ? ) +dnl have a type called cookie_io_functions_t +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#define _GNU_SOURCE +#include <stdio.h> +]], [[cookie_io_functions_t cookie;]])],[have_cookie_io_functions_t=yes],[]) + + if test "$have_cookie_io_functions_t" = "yes"; then + cookie_io_functions_t=cookie_io_functions_t + have_fopen_cookie=yes + +dnl even newer glibcs have a different seeker definition... +AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#define _GNU_SOURCE +#include <stdio.h> + +struct cookiedata { + __off64_t pos; +}; + +__ssize_t reader(void *cookie, char *buffer, size_t size) +{ return size; } +__ssize_t writer(void *cookie, const char *buffer, size_t size) +{ return size; } +int closer(void *cookie) +{ return 0; } +int seeker(void *cookie, __off64_t *position, int whence) +{ ((struct cookiedata*)cookie)->pos = *position; return 0; } + +cookie_io_functions_t funcs = {reader, writer, seeker, closer}; + +main() { + struct cookiedata g = { 0 }; + FILE *fp = fopencookie(&g, "r", funcs); + + if (fp && fseek(fp, 8192, SEEK_SET) == 0 && g.pos == 8192) + exit(0); + exit(1); +} + +]])], [ + cookie_io_functions_use_off64_t=yes +], [ + cookie_io_functions_use_off64_t=no +], [ + cookie_io_functions_use_off64_t=no +]) + + else + +dnl older glibc versions (up to 2.1.2 ?) +dnl call it _IO_cookie_io_functions_t +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#define _GNU_SOURCE +#include <stdio.h> +]], [[_IO_cookie_io_functions_t cookie;]])], [have_IO_cookie_io_functions_t=yes], []) + if test "$have_cookie_io_functions_t" = "yes" ; then + cookie_io_functions_t=_IO_cookie_io_functions_t + have_fopen_cookie=yes + fi + fi + + if test "$have_fopen_cookie" = "yes" ; then + AC_DEFINE(HAVE_FOPENCOOKIE, 1, [ ]) + AC_DEFINE_UNQUOTED(COOKIE_IO_FUNCTIONS_T, $cookie_io_functions_t, [ ]) + if test "$cookie_io_functions_use_off64_t" = "yes" ; then + AC_DEFINE(COOKIE_SEEKER_USES_OFF64_T, 1, [ ]) + fi + fi + fi +]) + +dnl ------------------------------------------------------------------------- +dnl Library/function existence and build sanity checks +dnl ------------------------------------------------------------------------- + +dnl +dnl PHP_CHECK_LIBRARY(library, function [, action-found [, action-not-found [, extra-libs]]]) +dnl +dnl Wrapper for AC_CHECK_LIB +dnl +AC_DEFUN([PHP_CHECK_LIBRARY], [ + save_old_LDFLAGS=$LDFLAGS + ac_stuff="$5" + + save_ext_shared=$ext_shared + ext_shared=yes + PHP_EVAL_LIBLINE([$]ac_stuff, LDFLAGS) + AC_CHECK_LIB([$1],[$2],[ + LDFLAGS=$save_old_LDFLAGS + ext_shared=$save_ext_shared + $3 + ],[ + LDFLAGS=$save_old_LDFLAGS + ext_shared=$save_ext_shared + unset ac_cv_lib_$1[]_$2 + $4 + ])dnl +]) + +dnl +dnl PHP_CHECK_FRAMEWORK(framework, function [, action-found [, action-not-found ]]) +dnl +dnl El cheapo wrapper for AC_CHECK_LIB +dnl +AC_DEFUN([PHP_CHECK_FRAMEWORK], [ + save_old_LDFLAGS=$LDFLAGS + LDFLAGS="-framework $1 $LDFLAGS" + dnl supplying "c" to AC_CHECK_LIB is technically cheating, but + dnl rewriting AC_CHECK_LIB is overkill and this only affects + dnl the "checking.." output anyway. + AC_CHECK_LIB(c,[$2],[ + LDFLAGS=$save_old_LDFLAGS + $3 + ],[ + LDFLAGS=$save_old_LDFLAGS + $4 + ]) +]) + +dnl +dnl PHP_CHECK_FUNC_LIB(func, libs) +dnl +dnl This macro checks whether 'func' or '__func' exists +dnl in the specified library. +dnl Defines HAVE_func and HAVE_library if found and adds the library to LIBS. +dnl This should be called in the ACTION-IF-NOT-FOUND part of PHP_CHECK_FUNC +dnl +dnl +dnl autoconf undefines the builtin "shift" :-( +dnl If possible, we use the builtin shift anyway, otherwise we use +dnl the ubercool definition I have tested so far with FreeBSD/GNU m4 +ifdef([builtin],[builtin(define, phpshift, [builtin(shift, $@)])],[ +define([phpshift],[ifelse(index([$@],[,]),-1,,[substr([$@],incr(index([$@],[,])))])]) +]) +dnl +AC_DEFUN([PHP_CHECK_FUNC_LIB],[ + ifelse($2,,:,[ + unset ac_cv_lib_$2[]_$1 + unset ac_cv_lib_$2[]___$1 + unset found + AC_CHECK_LIB($2, $1, [found=yes], [ + AC_CHECK_LIB($2, __$1, [found=yes], [found=no]) + ]) + + if test "$found" = "yes"; then + ac_libs=$LIBS + LIBS="$LIBS -l$2" + AC_RUN_IFELSE([AC_LANG_SOURCE([[main() { return (0); }]])],[found=yes],[found=no],[found=no]) + LIBS=$ac_libs + fi + + if test "$found" = "yes"; then + PHP_ADD_LIBRARY($2) + PHP_DEF_HAVE($1) + PHP_DEF_HAVE(lib$2) + ac_cv_func_$1=yes + else + PHP_CHECK_FUNC_LIB($1,phpshift(phpshift($@))) + fi + ]) +]) + +dnl +dnl PHP_CHECK_FUNC(func, ...) +dnl +dnl This macro checks whether 'func' or '__func' exists +dnl in the default libraries and as a fall back in the specified library. +dnl Defines HAVE_func and HAVE_library if found and adds the library to LIBS. +dnl +AC_DEFUN([PHP_CHECK_FUNC],[ + unset ac_cv_func_$1 + unset ac_cv_func___$1 + unset found + + AC_CHECK_FUNC($1, [found=yes],[ AC_CHECK_FUNC(__$1,[found=yes],[found=no]) ]) + + case $found in + yes[)] + PHP_DEF_HAVE($1) + ac_cv_func_$1=yes + ;; + ifelse($#,1,,[ + *[)] PHP_CHECK_FUNC_LIB($@) ;; + ]) + esac +]) + +dnl +dnl PHP_TEST_BUILD(function, action-if-ok, action-if-not-ok [, extra-libs [, extra-source]]) +dnl +dnl This macro checks whether build works and given function exists. +dnl +AC_DEFUN([PHP_TEST_BUILD], [ + old_LIBS=$LIBS + LIBS="$4 $LIBS" + AC_RUN_IFELSE([AC_LANG_SOURCE([[ + $5 + char $1(); + int main() { + $1(); + return 0; + } + ]])],[ + LIBS=$old_LIBS + $2 + ],[ + LIBS=$old_LIBS + $3 + ],[ + LIBS=$old_LIBS + ]) +]) + +dnl ------------------------------------------------------------------------- +dnl Platform characteristics checks +dnl ------------------------------------------------------------------------- + +dnl +dnl PHP_SHLIB_SUFFIX_NAMES +dnl +dnl Determines link library suffix SHLIB_SUFFIX_NAME +dnl which can be: .so, .sl or .dylib +dnl +dnl Determines shared library suffix SHLIB_DL_SUFFIX_NAME +dnl suffix can be: .so or .sl +dnl +AC_DEFUN([PHP_SHLIB_SUFFIX_NAMES],[ + AC_REQUIRE([PHP_CANONICAL_HOST_TARGET])dnl + PHP_SUBST_OLD(SHLIB_SUFFIX_NAME) + PHP_SUBST_OLD(SHLIB_DL_SUFFIX_NAME) + SHLIB_SUFFIX_NAME=so + SHLIB_DL_SUFFIX_NAME=$SHLIB_SUFFIX_NAME + case $host_alias in + *hpux*[)] + SHLIB_SUFFIX_NAME=sl + SHLIB_DL_SUFFIX_NAME=sl + ;; + *darwin*[)] + SHLIB_SUFFIX_NAME=dylib + SHLIB_DL_SUFFIX_NAME=so + ;; + esac +]) + +dnl +dnl PHP_C_BIGENDIAN +dnl +dnl Replacement macro for AC_C_BIGENDIAN +dnl +AC_DEFUN([PHP_C_BIGENDIAN], +[AC_CACHE_CHECK([whether byte ordering is bigendian], ac_cv_c_bigendian_php, + [ + ac_cv_c_bigendian_php=unknown + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +int main(void) +{ + short one = 1; + char *cp = (char *)&one; + + if (*cp == 0) { + return(0); + } else { + return(1); + } +} + ]])], [ac_cv_c_bigendian_php=yes], [ac_cv_c_bigendian_php=no], [ac_cv_c_bigendian_php=unknown]) + ]) + if test $ac_cv_c_bigendian_php = yes; then + AC_DEFINE(WORDS_BIGENDIAN, [], [Define if processor uses big-endian word]) + fi +]) + +dnl ------------------------------------------------------------------------- +dnl Checks for programs: PHP_PROG_<program> +dnl ------------------------------------------------------------------------- + +dnl +dnl PHP_PROG_SENDMAIL +dnl +dnl Search for the sendmail binary +dnl +AC_DEFUN([PHP_PROG_SENDMAIL], [ + PHP_ALT_PATH=/usr/bin:/usr/sbin:/usr/etc:/etc:/usr/ucblib:/usr/lib + AC_PATH_PROG(PROG_SENDMAIL, sendmail,[], $PATH:$PHP_ALT_PATH) + PHP_SUBST(PROG_SENDMAIL) +]) + +dnl +dnl PHP_PROG_AWK +dnl +dnl Some vendors force mawk before gawk; mawk is broken so we don't like that +dnl +AC_DEFUN([PHP_PROG_AWK], [ + AC_CHECK_PROGS(AWK, gawk nawk awk mawk, bork, /usr/xpg4/bin/:$PATH) + case "$AWK" in + *mawk) + AC_MSG_WARN([mawk is known to have problems on some systems. You should install GNU awk]) + ;; + *gawk) + ;; + bork) + AC_MSG_ERROR([Could not find awk; Install GNU awk]) + ;; + *) + AC_MSG_CHECKING([if $AWK is broken]) + if ! $AWK 'function foo() {}' >/dev/null 2>&1 ; then + AC_MSG_RESULT([yes]) + AC_MSG_ERROR([You should install GNU awk]) + else + AC_MSG_RESULT([no]) + fi + ;; + esac + PHP_SUBST(AWK) +]) + +dnl +dnl PHP_PROG_BISON([MIN-VERSION], [EXCLUDED-VERSION...]) +dnl +dnl Search for bison and optionally check if version is at least the minimum +dnl required version MIN-VERSION and doesn't match any of the blank separated +dnl list of excluded versions EXCLUDED-VERSION (for example "3.0 3.2"). +dnl +AC_DEFUN([PHP_PROG_BISON], [ + AC_CHECK_PROG(YACC, bison, bison) + + ifelse($1,,php_bison_required_version='',php_bison_required_version="$1") + ifelse($2,,php_bison_excluded_versions='none',php_bison_excluded_versions="$2") + + if test -n "$YACC"; then + AC_MSG_CHECKING([for bison version]) + + php_bison_version=$($YACC --version 2> /dev/null | grep 'GNU Bison' | cut -d ' ' -f 4 | tr -d a-z) + ac_IFS=$IFS; IFS="." + set $php_bison_version + IFS=$ac_IFS + php_bison_num=`expr [$]{1:-0} \* 10000 + [$]{2:-0} \* 100 + [$]{3:-0}` + php_bison_branch="[$]1.[$]2" + php_bison_check=ok + + if test -z "$php_bison_required_version" && test -z "$php_bison_num"; then + php_bison_check=invalid + elif test -n "$php_bison_required_version"; then + ac_IFS=$IFS; IFS="." + set $php_bison_required_version + IFS=$ac_IFS + php_bison_required_num=`expr [$]{1:-0} \* 10000 + [$]{2:-0} \* 100 + [$]{3:-0}` + php_bison_required_version="$php_bison_required_version or later" + + if test -z "$php_bison_num" || test "$php_bison_num" -lt "$php_bison_required_num"; then + php_bison_check=invalid + fi + fi + + for php_bison_check_version in $php_bison_excluded_versions; do + if test "$php_bison_version" = "$php_bison_check_version" || test "$php_bison_branch" = "$php_bison_check_version"; then + php_bison_check=invalid + break + fi + done + + if test "$php_bison_check" != "invalid"; then + AC_MSG_RESULT([$php_bison_version (ok)]) + else + AC_MSG_RESULT([$php_bison_version]) + fi + fi + + case $php_bison_check in + ""|invalid[)] + if test -f "$abs_srcdir/Zend/zend_language_parser.h" && test -f "$abs_srcdir/Zend/zend_language_parser.c"; then + AC_MSG_WARN([bison $php_bison_required_version is required if you want to regenerate PHP parsers (excluded versions: $php_bison_excluded_versions)]) + else + AC_MSG_ERROR([bison $php_bison_required_version is required to generate PHP parsers (excluded versions: $php_bison_excluded_versions).]) + fi + + YACC="exit 0;" + ;; + esac + + PHP_SUBST(YACC) +]) + +dnl +dnl PHP_PROG_RE2C([MIN-VERSION]) +dnl +dnl Search for the re2c and optionally check if version is at least the minimum +dnl required version MIN-VERSION. +dnl +AC_DEFUN([PHP_PROG_RE2C],[ + AC_CHECK_PROG(RE2C, re2c, re2c) + + ifelse($1,,php_re2c_required_version='',php_re2c_required_version="$1") + + if test -n "$RE2C"; then + AC_MSG_CHECKING([for re2c version]) + + php_re2c_version=$($RE2C --version | cut -d ' ' -f 2 2>/dev/null) + ac_IFS=$IFS; IFS="." + set $php_re2c_version + IFS=$ac_IFS + php_re2c_num=`expr [$]{1:-0} \* 10000 + [$]{2:-0} \* 100 + [$]{3:-0}` + php_re2c_check=ok + + if test -z "$php_re2c_required_version" && test -z "$php_re2c_num"; then + php_re2c_check=invalid + elif test -n "$php_re2c_required_version"; then + ac_IFS=$IFS; IFS="." + set $php_re2c_required_version + IFS=$ac_IFS + php_re2c_required_num=`expr [$]{1:-0} \* 10000 + [$]{2:-0} \* 100 + [$]{3:-0}` + php_re2c_required_version="$php_re2c_required_version or later" + + if test -z "$php_re2c_num" || test "$php_re2c_num" -lt "$php_re2c_required_num"; then + php_re2c_check=invalid + fi + fi + + if test "$php_re2c_check" != "invalid"; then + AC_MSG_RESULT([$php_re2c_version (ok)]) + else + AC_MSG_RESULT([$php_re2c_version]) + fi + fi + + case $php_re2c_check in + ""|invalid[)] + if test -f "$abs_srcdir/Zend/zend_language_scanner.c"; then + AC_MSG_WARN([re2c $php_re2c_required_version is required if you want to regenerate PHP lexers.]) + else + AC_MSG_ERROR([re2c $php_re2c_required_version is required to generate PHP lexers.]) + fi + + RE2C="exit 0;" + ;; + esac + + PHP_SUBST(RE2C) +]) + +dnl ------------------------------------------------------------------------- +dnl Common setup macros: PHP_SETUP_<what> +dnl ------------------------------------------------------------------------- + +dnl +dnl PHP_SETUP_ICU([shared-add]) +dnl +dnl Common setup macro for ICU +dnl +AC_DEFUN([PHP_SETUP_ICU],[ + PKG_CHECK_MODULES([ICU], [icu-uc >= 50.1 icu-io icu-i18n]) + + PHP_EVAL_INCLINE($ICU_CFLAGS) + PHP_EVAL_LIBLINE($ICU_LIBS, $1) + + ICU_CFLAGS="$ICU_CFLAGS -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1" + ICU_CXXFLAGS="$ICU_CXXFLAGS -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit" + + if test "$PKG_CONFIG icu-io --atleast-version=60"; then + ICU_CFLAGS="$ICU_CFLAGS -DU_HIDE_OBSOLETE_UTF_OLD_H=1" + fi +]) + +dnl +dnl PHP_SETUP_OPENSSL(shared-add [, action-found [, action-not-found]]) +dnl +dnl Common setup macro for openssl +dnl +AC_DEFUN([PHP_SETUP_OPENSSL],[ + found_openssl=no + + dnl Empty variable means 'no' + test -z "$PHP_OPENSSL" && PHP_OPENSSL=no + test -z "$PHP_IMAP_SSL" && PHP_IMAP_SSL=no + + if test "$PHP_OPENSSL" != "no"; then + PKG_CHECK_MODULES([OPENSSL], [openssl >= 1.0.1], [found_openssl=yes]) + fi + + if test "$found_openssl" = "yes"; then + PHP_EVAL_LIBLINE($OPENSSL_LIBS, $1) + PHP_EVAL_INCLINE($OPENSSL_CFLAGS) +ifelse([$2],[],:,[$2]) +ifelse([$3],[],,[else $3]) + fi +]) + +dnl +dnl PHP_SETUP_ICONV(shared-add [, action-found [, action-not-found]]) +dnl +dnl Common setup macro for iconv +dnl +AC_DEFUN([PHP_SETUP_ICONV], [ + found_iconv=no + unset ICONV_DIR + + # Create the directories for a VPATH build: + $php_shtool mkdir -p ext/iconv + + echo > ext/iconv/php_have_bsd_iconv.h + echo > ext/iconv/php_have_ibm_iconv.h + echo > ext/iconv/php_have_glibc_iconv.h + echo > ext/iconv/php_have_libiconv.h + echo > ext/iconv/php_have_iconv.h + echo > ext/iconv/php_php_iconv_impl.h + echo > ext/iconv/php_iconv_aliased_libiconv.h + echo > ext/iconv/php_php_iconv_h_path.h + echo > ext/iconv/php_iconv_supports_errno.h + + dnl + dnl Check libc first if no path is provided in --with-iconv + dnl + + if test "$PHP_ICONV" = "yes"; then + dnl Reset LIBS temporarily as it may have already been included + dnl -liconv in. + LIBS_save="$LIBS" + LIBS= + AC_CHECK_FUNC(iconv, [ + found_iconv=yes + ],[ + AC_CHECK_FUNC(libiconv,[ + PHP_DEFINE(HAVE_LIBICONV,1,[ext/iconv]) + AC_DEFINE(HAVE_LIBICONV, 1, [ ]) + found_iconv=yes + ]) + ]) + LIBS="$LIBS_save" + fi + + dnl + dnl Check external libs for iconv funcs + dnl + if test "$found_iconv" = "no"; then + + for i in $PHP_ICONV /usr/local /usr; do + if test -r $i/include/giconv.h; then + AC_DEFINE(HAVE_GICONV_H, 1, [ ]) + ICONV_DIR=$i + iconv_lib_name=giconv + break + elif test -r $i/include/iconv.h; then + ICONV_DIR=$i + iconv_lib_name=iconv + break + fi + done + + if test -z "$ICONV_DIR"; then + AC_MSG_ERROR([Please specify the install prefix of iconv with --with-iconv=<DIR>]) + fi + + if test -f $ICONV_DIR/$PHP_LIBDIR/lib$iconv_lib_name.a || + test -f $ICONV_DIR/$PHP_LIBDIR/lib$iconv_lib_name.$SHLIB_SUFFIX_NAME || + test -f $ICONV_DIR/$PHP_LIBDIR/lib$iconv_lib_name.tbd + then + PHP_CHECK_LIBRARY($iconv_lib_name, libiconv, [ + found_iconv=yes + PHP_DEFINE(HAVE_LIBICONV,1,[ext/iconv]) + AC_DEFINE(HAVE_LIBICONV,1,[ ]) + PHP_DEFINE([ICONV_ALIASED_LIBICONV],1,[ext/iconv]) + AC_DEFINE([ICONV_ALIASED_LIBICONV],1,[iconv() is aliased to libiconv() in -liconv]) + ], [ + PHP_CHECK_LIBRARY($iconv_lib_name, iconv, [ + found_iconv=yes + ], [], [ + -L$ICONV_DIR/$PHP_LIBDIR + ]) + ], [ + -L$ICONV_DIR/$PHP_LIBDIR + ]) + fi + fi + + if test "$found_iconv" = "yes"; then + PHP_DEFINE(HAVE_ICONV,1,[ext/iconv]) + AC_DEFINE(HAVE_ICONV,1,[ ]) + if test -n "$ICONV_DIR"; then + PHP_ADD_LIBRARY_WITH_PATH($iconv_lib_name, $ICONV_DIR/$PHP_LIBDIR, $1) + PHP_ADD_INCLUDE($ICONV_DIR/include) + fi + $2 +ifelse([$3],[],,[else $3]) + fi +]) + +dnl +dnl PHP_SETUP_LIBXML(shared-add [, action-found [, action-not-found]]) +dnl +dnl Common setup macro for libxml +dnl +AC_DEFUN([PHP_SETUP_LIBXML], [ + PKG_CHECK_MODULES([LIBXML], [libxml-2.0 >= 2.7.6]) + + PHP_EVAL_INCLINE($LIBXML_CFLAGS) + PHP_EVAL_LIBLINE($LIBXML_LIBS, $1) + + AC_DEFINE(HAVE_LIBXML, 1, [ ]) + + $2 +]) + +dnl ------------------------------------------------------------------------- +dnl Misc. macros +dnl ------------------------------------------------------------------------- + +dnl +dnl PHP_INSTALL_HEADERS(path [, file ...]) +dnl +dnl PHP header files to be installed +dnl +AC_DEFUN([PHP_INSTALL_HEADERS],[ + ifelse([$2],[],[ + for header_file in $1; do + PHP_RUN_ONCE(INSTALLHEADERS, $header_file, [ + INSTALL_HEADERS="$INSTALL_HEADERS $header_file" + ]) + done + ], [ + header_path=$1 + for header_file in $2; do + hp_hf="$header_path/$header_file" + PHP_RUN_ONCE(INSTALLHEADERS, $hp_hf, [ + INSTALL_HEADERS="$INSTALL_HEADERS $hp_hf" + ]) + done + ]) +]) + +dnl +dnl PHP_AP_EXTRACT_VERSION(/path/httpd) +dnl +dnl This macro is used to get a comparable +dnl version for apache1/2. +dnl +AC_DEFUN([PHP_AP_EXTRACT_VERSION],[ + ac_output=`$1 -v 2>&1 | grep version | $SED -e 's/Oracle-HTTP-//'` + ac_IFS=$IFS +IFS="- /. +" + set $ac_output + IFS=$ac_IFS + + APACHE_VERSION=`expr [$]4 \* 1000000 + [$]5 \* 1000 + [$]6` +]) + +dnl +dnl PHP_DEBUG_MACRO(filename) +dnl +AC_DEFUN([PHP_DEBUG_MACRO],[ + DEBUG_LOG=$1 + cat >$1 <<X +CONFIGURE: $CONFIGURE_COMMAND +CC: $CC +CFLAGS: $CFLAGS +CPPFLAGS: $CPPFLAGS +CXX: $CXX +CXXFLAGS: $CXXFLAGS +INCLUDES: $INCLUDES +LDFLAGS: $LDFLAGS +LIBS: $LIBS +DLIBS: $DLIBS +SAPI: $PHP_SAPI +PHP_RPATHS: $PHP_RPATHS +uname -a: `uname -a` + +X + cat >conftest.$ac_ext <<X +main() +{ + exit(0); +} +X + (eval echo \"$ac_link\"; eval $ac_link && ./conftest) >>$1 2>&1 + rm -fr conftest* +]) + +dnl +dnl PHP_CONFIG_NICE(filename) +dnl +dnl Generates the config.nice file +dnl +AC_DEFUN([PHP_CONFIG_NICE],[ + AC_REQUIRE([AC_PROG_EGREP]) + AC_REQUIRE([AC_PROG_SED]) + PHP_SUBST_OLD(EGREP) + PHP_SUBST_OLD(SED) + test -f $1 && mv $1 $1.old + rm -f $1.old + cat >$1<<EOF +#! /bin/sh +# +# Created by configure + +EOF + + clean_configure_args=$ac_configure_args + for var in CFLAGS CXXFLAGS CPPFLAGS LDFLAGS EXTRA_LDFLAGS_PROGRAM LIBS CC CXX; do + eval val=\$$var + if test -n "$val"; then + echo "$var='$val' \\" >> $1 + if test `expr "X$ac_configure_args" : ".*${var}.*"` != 0; then + clean_configure_args=$(echo $clean_configure_args | sed -e "s#'$var=$val'##") + fi + fi + done + + echo "'[$]0' \\" >> $1 + if test `expr " [$]0" : " '.*"` = 0; then + CONFIGURE_COMMAND="$CONFIGURE_COMMAND '[$]0'" + else + CONFIGURE_COMMAND="$CONFIGURE_COMMAND [$]0" + fi + CONFIGURE_ARGS="$clean_configure_args" + while test "X$CONFIGURE_ARGS" != "X"; + do + if CURRENT_ARG=`expr "X$CONFIGURE_ARGS" : "X *\('[[^']]*'\)"` + then + CONFIGURE_ARGS=`expr "X$CONFIGURE_ARGS" : "X *'[[^']]*' \(.*\)"` + elif CURRENT_ARG=`expr "X$CONFIGURE_ARGS" : "X *\([[^ ]]*\)"` + then + CONFIGURE_ARGS=`expr "X$CONFIGURE_ARGS" : "X *[[^ ]]* \(.*\)"` + CURRENT_ARG="'$CURRENT_ARG'" + else + break + fi + $as_echo "$CURRENT_ARG \\" >>$1 + CONFIGURE_OPTIONS="$CONFIGURE_OPTIONS $CURRENT_ARG" + done + echo '"[$]@"' >> $1 + chmod +x $1 + CONFIGURE_COMMAND="$CONFIGURE_COMMAND $CONFIGURE_OPTIONS" + PHP_SUBST_OLD(CONFIGURE_COMMAND) + PHP_SUBST_OLD(CONFIGURE_OPTIONS) +]) + +dnl +dnl PHP_CHECK_CONFIGURE_OPTIONS +dnl +AC_DEFUN([PHP_CHECK_CONFIGURE_OPTIONS],[ + for arg in $ac_configure_args; do + case $arg in + --with-*[)] + arg_name="`echo [$]arg | $SED -e 's/--with-/with-/g' -e 's/=.*//g'`" + ;; + --without-*[)] + arg_name="`echo [$]arg | $SED -e 's/--without-/with-/g' -e 's/=.*//g'`" + ;; + --enable-*[)] + arg_name="`echo [$]arg | $SED -e 's/--enable-/enable-/g' -e 's/=.*//g'`" + ;; + --disable-*[)] + arg_name="`echo [$]arg | $SED -e 's/--disable-/enable-/g' -e 's/=.*//g'`" + ;; + *[)] + continue + ;; + esac + case $arg_name in + # Allow --disable-all / --enable-all + enable-all[)];; + + # Allow certain libtool options + enable-libtool-lock | with-pic | with-tags | enable-shared | enable-static | enable-fast-install | with-gnu-ld[)];; + + # Allow certain TSRM options + with-tsrm-pth | with-tsrm-st | with-tsrm-pthreads [)];; + + # Allow certain Zend options + with-zend-vm | enable-zts | enable-inline-optimization[)];; + + # All the rest must be set using the PHP_ARG_* macros + # PHP_ARG_* macros set php_enable_<arg_name> or php_with_<arg_name> + *[)] + # Options that exist before PHP 6 + if test "$PHP_MAJOR_VERSION" -lt "6"; then + case $arg_name in + enable-zend-multibyte[)] continue;; + esac + fi + + is_arg_set=php_[]`echo [$]arg_name | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ-' 'abcdefghijklmnopqrstuvwxyz_'` + if eval test "x\$$is_arg_set" = "x"; then + PHP_UNKNOWN_CONFIGURE_OPTIONS="$PHP_UNKNOWN_CONFIGURE_OPTIONS +[$]arg" + fi + ;; + esac + done +]) + +dnl +dnl PHP_CHECK_PDO_INCLUDES([found [, not-found]]) +dnl +AC_DEFUN([PHP_CHECK_PDO_INCLUDES],[ + AC_CACHE_CHECK([for PDO includes], pdo_cv_inc_path, [ + AC_MSG_CHECKING([for PDO includes]) + if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then + pdo_cv_inc_path=$abs_srcdir/ext + elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then + pdo_cv_inc_path=$abs_srcdir/ext + elif test -f $phpincludedir/ext/pdo/php_pdo_driver.h; then + pdo_cv_inc_path=$phpincludedir/ext + fi + ]) + if test -n "$pdo_cv_inc_path"; then +ifelse([$1],[],:,[$1]) + else +ifelse([$2],[],[AC_MSG_ERROR([Cannot find php_pdo_driver.h.])],[$2]) + fi +]) + +dnl +dnl PHP_DETECT_ICC +dnl Detect Intel C++ Compiler and unset $GCC if ICC found +AC_DEFUN([PHP_DETECT_ICC], +[ + ICC="no" + AC_MSG_CHECKING([for icc]) + AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER], + ICC="no" + AC_MSG_RESULT([no]), + ICC="yes" + GCC="no" + AC_MSG_RESULT([yes]) + ) +]) + +dnl PHP_DETECT_SUNCC +dnl Detect if the systems default compiler is suncc. +dnl We also set some useful CFLAGS if the user didn't set any +AC_DEFUN([PHP_DETECT_SUNCC],[ + SUNCC="no" + AC_MSG_CHECKING([for suncc]) + AC_EGREP_CPP([^__SUNPRO_C], [__SUNPRO_C], + SUNCC="no" + AC_MSG_RESULT([no]), + SUNCC="yes" + GCC="no" + test -n "$auto_cflags" && CFLAGS="-O -xs -xstrconst -zlazyload" + GCC="" + AC_MSG_RESULT([yes]) + ) +]) + +dnl +dnl PHP_CRYPT_R_STYLE +dnl detect the style of crypt_r() is any is available +dnl see APR_CHECK_CRYPT_R_STYLE() for original version +dnl +AC_DEFUN([PHP_CRYPT_R_STYLE], +[ + AC_CACHE_CHECK([which data struct is used by crypt_r], php_cv_crypt_r_style,[ + php_cv_crypt_r_style=none + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#define _REENTRANT 1 +#include <crypt.h> +]], [[ +CRYPTD buffer; +crypt_r("passwd", "hash", &buffer); +]])],[php_cv_crypt_r_style=cryptd],[]) + + if test "$php_cv_crypt_r_style" = "none"; then + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#define _REENTRANT 1 +#include <crypt.h> +]],[[ +struct crypt_data buffer; +crypt_r("passwd", "hash", &buffer); +]])],[php_cv_crypt_r_style=struct_crypt_data],[]) + fi + + if test "$php_cv_crypt_r_style" = "none"; then + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#define _REENTRANT 1 +#define _GNU_SOURCE +#include <crypt.h> +]],[[ +struct crypt_data buffer; +crypt_r("passwd", "hash", &buffer); +]])],[php_cv_crypt_r_style=struct_crypt_data_gnu_source],[]) + fi + ]) + + if test "$php_cv_crypt_r_style" = "cryptd"; then + AC_DEFINE(CRYPT_R_CRYPTD, 1, [Define if crypt_r has uses CRYPTD]) + fi + if test "$php_cv_crypt_r_style" = "struct_crypt_data" -o "$php_cv_crypt_r_style" = "struct_crypt_data_gnu_source"; then + AC_DEFINE(CRYPT_R_STRUCT_CRYPT_DATA, 1, [Define if crypt_r uses struct crypt_data]) + fi + if test "$php_cv_crypt_r_style" = "struct_crypt_data_gnu_source"; then + AC_DEFINE(CRYPT_R_GNU_SOURCE, 1, [Define if struct crypt_data requires _GNU_SOURCE]) + fi + if test "$php_cv_crypt_r_style" = "none"; then + AC_MSG_ERROR([Unable to detect data struct used by crypt_r]) + fi +]) + +dnl +dnl PHP_TEST_WRITE_STDOUT +dnl +AC_DEFUN([PHP_TEST_WRITE_STDOUT],[ + AC_CACHE_CHECK(whether writing to stdout works,ac_cv_write_stdout,[ + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif + +#define TEXT "This is the test message -- " + +main() +{ + int n; + + n = write(1, TEXT, sizeof(TEXT)-1); + return (!(n == sizeof(TEXT)-1)); +} + ]])],[ + ac_cv_write_stdout=yes + ],[ + ac_cv_write_stdout=no + ],[ + ac_cv_write_stdout=no + ]) + ]) + if test "$ac_cv_write_stdout" = "yes"; then + AC_DEFINE(PHP_WRITE_STDOUT, 1, [whether write(2) works]) + fi +]) + +dnl +dnl PHP_INIT_DTRACE(providerdesc, header-file, sources [, module]) +dnl +AC_DEFUN([PHP_INIT_DTRACE],[ +dnl Set paths properly when called from extension + case "$4" in + ""[)] ac_srcdir="$abs_srcdir/"; unset ac_bdir;; + /*[)] ac_srcdir=`echo "$4"|cut -c 2-`"/"; ac_bdir=$ac_srcdir;; + *[)] ac_srcdir="$abs_srcdir/$1/"; ac_bdir="$4/";; + esac + +dnl providerdesc + ac_provsrc=$1 + old_IFS=[$]IFS + IFS=. + set $ac_provsrc + ac_provobj=[$]1 + IFS=$old_IFS + +dnl header-file + ac_hdrobj=$2 + +dnl Add providerdesc.o or .lo into global objects when needed + case $host_alias in + *freebsd*) + PHP_GLOBAL_OBJS="[$]PHP_GLOBAL_OBJS [$]ac_bdir[$]ac_provsrc.o" + PHP_LDFLAGS="$PHP_LDFLAGS -lelf" + ;; + *solaris*) + PHP_GLOBAL_OBJS="[$]PHP_GLOBAL_OBJS [$]ac_bdir[$]ac_provsrc.lo" + ;; + *linux*) + PHP_GLOBAL_OBJS="[$]PHP_GLOBAL_OBJS [$]ac_bdir[$]ac_provsrc.lo" + ;; + esac + +dnl DTrace objects + old_IFS=[$]IFS + for ac_src in $3; do + IFS=. + set $ac_src + ac_obj=[$]1 + IFS=$old_IFS + + PHP_DTRACE_OBJS="[$]PHP_DTRACE_OBJS [$]ac_bdir[$]ac_obj.lo" + done; + + case [$]php_sapi_module in + shared[)] + for ac_lo in $PHP_DTRACE_OBJS; do + dtrace_objs="[$]dtrace_objs `echo $ac_lo | $SED -e 's,\.lo$,.o,' -e 's#\(.*\)\/#\1\/.libs\/#'`" + done; + ;; + *[)] + dtrace_objs='$(PHP_DTRACE_OBJS:.lo=.o)' + ;; + esac + +dnl Generate Makefile.objects entries +dnl The empty $ac_provsrc command stops an implicit circular dependency +dnl in GNU Make which causes the .d file to be overwritten (Bug 61268) + cat>>Makefile.objects<<EOF + +$abs_srcdir/$ac_provsrc:; + +$ac_bdir[$]ac_hdrobj: $abs_srcdir/$ac_provsrc + CFLAGS="\$(CFLAGS_CLEAN)" dtrace -h -C -s $ac_srcdir[$]ac_provsrc -o \$[]@.bak && \$(SED) -e 's,PHP_,DTRACE_,g' \$[]@.bak > \$[]@ + +\$(PHP_DTRACE_OBJS): $ac_bdir[$]ac_hdrobj + +EOF + + case $host_alias in + *solaris*|*linux*) + dtrace_prov_name="`echo $ac_provsrc | $SED -e 's#\(.*\)\/##'`.o" + dtrace_lib_dir="`echo $ac_bdir[$]ac_provsrc | $SED -e 's#\(.*\)/[^/]*#\1#'`/.libs" + dtrace_d_obj="`echo $ac_bdir[$]ac_provsrc | $SED -e 's#\(.*\)/\([^/]*\)#\1/.libs/\2#'`.o" + dtrace_nolib_objs='$(PHP_DTRACE_OBJS:.lo=.o)' + for ac_lo in $PHP_DTRACE_OBJS; do + dtrace_lib_objs="[$]dtrace_lib_objs `echo $ac_lo | $SED -e 's,\.lo$,.o,' -e 's#\(.*\)\/#\1\/.libs\/#'`" + done; +dnl Always attempt to create both PIC and non-PIC DTrace objects (Bug 63692) + cat>>Makefile.objects<<EOF +$ac_bdir[$]ac_provsrc.lo: \$(PHP_DTRACE_OBJS) + echo "[#] Generated by Makefile for libtool" > \$[]@ + @test -d "$dtrace_lib_dir" || mkdir $dtrace_lib_dir + if CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $dtrace_d_obj -s $abs_srcdir/$ac_provsrc $dtrace_lib_objs 2> /dev/null && test -f "$dtrace_d_obj"; then [\\] + echo "pic_object=['].libs/$dtrace_prov_name[']" >> \$[]@ [;\\] + else [\\] + echo "pic_object='none'" >> \$[]@ [;\\] + fi + if CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $ac_bdir[$]ac_provsrc.o -s $abs_srcdir/$ac_provsrc $dtrace_nolib_objs 2> /dev/null && test -f "$ac_bdir[$]ac_provsrc.o"; then [\\] + echo "non_pic_object=[']$dtrace_prov_name[']" >> \$[]@ [;\\] + else [\\] + echo "non_pic_object='none'" >> \$[]@ [;\\] + fi + +EOF + + ;; + *) +cat>>Makefile.objects<<EOF +$ac_bdir[$]ac_provsrc.o: \$(PHP_DTRACE_OBJS) + CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o \$[]@ -s $abs_srcdir/$ac_provsrc $dtrace_objs + +EOF + ;; + esac +]) + +dnl +dnl PHP_CHECK_STDINT_TYPES +dnl +AC_DEFUN([PHP_CHECK_STDINT_TYPES], [ + AC_CHECK_SIZEOF([short]) + AC_CHECK_SIZEOF([int]) + AC_CHECK_SIZEOF([long]) + AC_CHECK_SIZEOF([long long]) + AC_CHECK_SIZEOF([size_t]) + AC_CHECK_TYPES([int8, int16, int32, int64, int8_t, int16_t, int32_t, int64_t, uint8, uint16, uint32, uint64, uint8_t, uint16_t, uint32_t, uint64_t, u_int8_t, u_int16_t, u_int32_t, u_int64_t], [], [], [ +#if HAVE_STDINT_H +# include <stdint.h> +#endif +#if HAVE_SYS_TYPES_H +# include <sys/types.h> +#endif + ]) +]) + +dnl PHP_CHECK_BUILTIN_EXPECT +AC_DEFUN([PHP_CHECK_BUILTIN_EXPECT], [ + AC_MSG_CHECKING([for __builtin_expect]) + + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ + return __builtin_expect(1,1) ? 1 : 0; + ]])], [ + have_builtin_expect=1 + AC_MSG_RESULT([yes]) + ], [ + have_builtin_expect=0 + AC_MSG_RESULT([no]) + ]) + + AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_EXPECT], [$have_builtin_expect], [Whether the compiler supports __builtin_expect]) + +]) + +dnl PHP_CHECK_BUILTIN_CLZ +AC_DEFUN([PHP_CHECK_BUILTIN_CLZ], [ + AC_MSG_CHECKING([for __builtin_clz]) + + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ + return __builtin_clz(1) ? 1 : 0; + ]])], [ + have_builtin_clz=1 + AC_MSG_RESULT([yes]) + ], [ + have_builtin_clz=0 + AC_MSG_RESULT([no]) + ]) + + AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CLZ], [$have_builtin_clz], [Whether the compiler supports __builtin_clz]) + +]) + +dnl PHP_CHECK_BUILTIN_CTZL +AC_DEFUN([PHP_CHECK_BUILTIN_CTZL], [ + AC_MSG_CHECKING([for __builtin_ctzl]) + + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ + return __builtin_ctzl(2L) ? 1 : 0; + ]])], [ + have_builtin_ctzl=1 + AC_MSG_RESULT([yes]) + ], [ + have_builtin_ctzl=0 + AC_MSG_RESULT([no]) + ]) + + AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CTZL], [$have_builtin_ctzl], [Whether the compiler supports __builtin_ctzl]) + +]) + +dnl PHP_CHECK_BUILTIN_CTZLL +AC_DEFUN([PHP_CHECK_BUILTIN_CTZLL], [ + AC_MSG_CHECKING([for __builtin_ctzll]) + + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ + return __builtin_ctzll(2LL) ? 1 : 0; + ]])], [ + have_builtin_ctzll=1 + AC_MSG_RESULT([yes]) + ], [ + have_builtin_ctzll=0 + AC_MSG_RESULT([no]) + ]) + + AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CTZLL], [$have_builtin_ctzll], [Whether the compiler supports __builtin_ctzll]) + +]) + +dnl PHP_CHECK_BUILTIN_SMULL_OVERFLOW +AC_DEFUN([PHP_CHECK_BUILTIN_SMULL_OVERFLOW], [ + AC_MSG_CHECKING([for __builtin_smull_overflow]) + + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ + long tmpvar; + return __builtin_smull_overflow(3, 7, &tmpvar); + ]])], [ + have_builtin_smull_overflow=1 + AC_MSG_RESULT([yes]) + ], [ + have_builtin_smull_overflow=0 + AC_MSG_RESULT([no]) + ]) + + AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SMULL_OVERFLOW], + [$have_builtin_smull_overflow], [Whether the compiler supports __builtin_smull_overflow]) + +]) + +dnl PHP_CHECK_BUILTIN_SMULLL_OVERFLOW +AC_DEFUN([PHP_CHECK_BUILTIN_SMULLL_OVERFLOW], [ + AC_MSG_CHECKING([for __builtin_smulll_overflow]) + + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ + long long tmpvar; + return __builtin_smulll_overflow(3, 7, &tmpvar); + ]])], [ + have_builtin_smulll_overflow=1 + AC_MSG_RESULT([yes]) + ], [ + have_builtin_smulll_overflow=0 + AC_MSG_RESULT([no]) + ]) + + AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SMULLL_OVERFLOW], + [$have_builtin_smulll_overflow], [Whether the compiler supports __builtin_smulll_overflow]) + +]) + +dnl PHP_CHECK_BUILTIN_SADDL_OVERFLOW +AC_DEFUN([PHP_CHECK_BUILTIN_SADDL_OVERFLOW], [ + AC_MSG_CHECKING([for __builtin_saddl_overflow]) + + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ + long tmpvar; + return __builtin_saddl_overflow(3, 7, &tmpvar); + ]])], [ + have_builtin_saddl_overflow=1 + AC_MSG_RESULT([yes]) + ], [ + have_builtin_saddl_overflow=0 + AC_MSG_RESULT([no]) + ]) + + AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SADDL_OVERFLOW], + [$have_builtin_saddl_overflow], [Whether the compiler supports __builtin_saddl_overflow]) + +]) + +dnl PHP_CHECK_BUILTIN_SADDLL_OVERFLOW +AC_DEFUN([PHP_CHECK_BUILTIN_SADDLL_OVERFLOW], [ + AC_MSG_CHECKING([for __builtin_saddll_overflow]) + + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ + long long tmpvar; + return __builtin_saddll_overflow(3, 7, &tmpvar); + ]])], [ + have_builtin_saddll_overflow=1 + AC_MSG_RESULT([yes]) + ], [ + have_builtin_saddll_overflow=0 + AC_MSG_RESULT([no]) + ]) + + AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SADDLL_OVERFLOW], + [$have_builtin_saddll_overflow], [Whether the compiler supports __builtin_saddll_overflow]) + +]) + +dnl PHP_CHECK_BUILTIN_SSUBL_OVERFLOW +AC_DEFUN([PHP_CHECK_BUILTIN_SSUBL_OVERFLOW], [ + AC_MSG_CHECKING([for __builtin_ssubl_overflow]) + + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ + long tmpvar; + return __builtin_ssubl_overflow(3, 7, &tmpvar); + ]])], [ + have_builtin_ssubl_overflow=1 + AC_MSG_RESULT([yes]) + ], [ + have_builtin_ssubl_overflow=0 + AC_MSG_RESULT([no]) + ]) + + AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SSUBL_OVERFLOW], + [$have_builtin_ssubl_overflow], [Whether the compiler supports __builtin_ssubl_overflow]) + +]) + +dnl PHP_CHECK_BUILTIN_SSUBLL_OVERFLOW +AC_DEFUN([PHP_CHECK_BUILTIN_SSUBLL_OVERFLOW], [ + AC_MSG_CHECKING([for __builtin_ssubll_overflow]) + + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ + long long tmpvar; + return __builtin_ssubll_overflow(3, 7, &tmpvar); + ]])], [ + have_builtin_ssubll_overflow=1 + AC_MSG_RESULT([yes]) + ], [ + have_builtin_ssubll_overflow=0 + AC_MSG_RESULT([no]) + ]) + + AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SSUBLL_OVERFLOW], + [$have_builtin_ssubll_overflow], [Whether the compiler supports __builtin_ssubll_overflow]) + +]) + +dnl PHP_CHECK_BUILTIN_CPU_INIT +AC_DEFUN([PHP_CHECK_BUILTIN_CPU_INIT], [ + AC_MSG_CHECKING([for __builtin_cpu_init]) + + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ + return __builtin_cpu_init()? 1 : 0; + ]])], [ + have_builtin_cpu_init=1 + AC_MSG_RESULT([yes]) + ], [ + have_builtin_cpu_init=0 + AC_MSG_RESULT([no]) + ]) + + AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CPU_INIT], + [$have_builtin_cpu_init], [Whether the compiler supports __builtin_cpu_init]) + +]) + +dnl PHP_CHECK_BUILTIN_CPU_SUPPORTS +AC_DEFUN([PHP_CHECK_BUILTIN_CPU_SUPPORTS], [ + AC_MSG_CHECKING([for __builtin_cpu_supports]) + + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ + return __builtin_cpu_supports("sse")? 1 : 0; + ]])], [ + have_builtin_cpu_supports=1 + AC_MSG_RESULT([yes]) + ], [ + have_builtin_cpu_supports=0 + AC_MSG_RESULT([no]) + ]) + + AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CPU_SUPPORTS], + [$have_builtin_cpu_supports], [Whether the compiler supports __builtin_cpu_supports]) +]) + +dnl PHP_CHECK_CPU_SUPPORTS +AC_DEFUN([PHP_CHECK_CPU_SUPPORTS], [ + AC_REQUIRE([PHP_CHECK_BUILTIN_CPU_INIT]) + AC_REQUIRE([PHP_CHECK_BUILTIN_CPU_SUPPORTS]) + have_ext_instructions=0 + if test $have_builtin_cpu_supports = 1; then + AC_MSG_CHECKING([for $1 instructions supports]) + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +int main() { + return __builtin_cpu_supports("$1")? 0 : 1; +} + ]])], [ + have_ext_instructions=1 + AC_MSG_RESULT([yes]) + ], [ + AC_MSG_RESULT([no]) + ], [AC_MSG_RESULT([no])]) + fi + AC_DEFINE_UNQUOTED(AS_TR_CPP([PHP_HAVE_$1_INSTRUCTIONS]), + [$have_ext_instructions], [Whether the compiler supports $1 instructions]) +]) |