mirror of
https://github.com/php/php-src.git
synced 2024-11-25 02:44:58 +08:00
2524 lines
63 KiB
Plaintext
2524 lines
63 KiB
Plaintext
dnl
|
|
dnl $Id$
|
|
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/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)
|
|
$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,cli,PHP_CLI_OBJS,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_TARGET_RDYNAMIC
|
|
dnl
|
|
dnl Checks whether -rdynamic is supported by the compiler. This
|
|
dnl is necessary for some targets to populate the global symbol
|
|
dnl table. Otherwise, dynamic modules would not be able to resolve
|
|
dnl PHP-related symbols.
|
|
dnl
|
|
dnl If successful, adds -rdynamic to PHP_LDFLAGS.
|
|
dnl
|
|
AC_DEFUN([PHP_TARGET_RDYNAMIC],[
|
|
if test -n "$GCC"; then
|
|
dnl we should use a PHP-specific macro here
|
|
PHP_CHECK_GCC_ARG(-rdynamic, gcc_rdynamic=yes)
|
|
if test "$gcc_rdynamic" = "yes"; then
|
|
PHP_LDFLAGS="$PHP_LDFLAGS -rdynamic"
|
|
fi
|
|
fi
|
|
])
|
|
|
|
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_TRY_LINK([], [], 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_TRY_LINK([], [], 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
|
|
])
|
|
|
|
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="$ld_runpath_switch$ai_p -L$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_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)
|
|
|
|
if test "$PHP_ENABLE_ALL" && test "$6" = "yes"; then
|
|
$5=$PHP_ENABLE_ALL
|
|
fi
|
|
])
|
|
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_REAL_ARG_ENABLE([$1],[$2],[$3],[$4],PHP_[]translit($1,a-z-,A-Z_),[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)
|
|
|
|
if test "$PHP_ENABLE_ALL" && test "$6" = "yes"; then
|
|
$5=$PHP_ENABLE_ALL
|
|
fi
|
|
])
|
|
PHP_ARG_ANALYZE($5,[$2],$6)
|
|
])
|
|
|
|
dnl -------------------------------------------------------------------------
|
|
dnl Build macros
|
|
dnl -------------------------------------------------------------------------
|
|
|
|
dnl
|
|
dnl PHP_SET_SYM_FILE(path)
|
|
dnl
|
|
dnl set the path of the file which contains the symbol export list
|
|
dnl
|
|
AC_DEFUN([PHP_SET_SYM_FILE],
|
|
[
|
|
PHP_SYM_FILE=$1
|
|
])
|
|
|
|
dnl
|
|
dnl PHP_BUILD_THREAD_SAFE
|
|
dnl
|
|
AC_DEFUN([PHP_BUILD_THREAD_SAFE],[
|
|
enable_maintainer_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_cxx_done=yes
|
|
fi
|
|
])
|
|
|
|
dnl
|
|
dnl PHP_BUILD_SHARED
|
|
dnl
|
|
AC_DEFUN([PHP_BUILD_SHARED],[
|
|
PHP_BUILD_PROGRAM
|
|
OVERALL_TARGET=libphp5.la
|
|
php_build_target=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=libphp5.la
|
|
php_build_target=static
|
|
])
|
|
|
|
dnl
|
|
dnl PHP_BUILD_BUNDLE
|
|
dnl
|
|
AC_DEFUN([PHP_BUILD_BUNDLE],[
|
|
PHP_BUILD_PROGRAM
|
|
OVERALL_TARGET=libs/libphp5.bundle
|
|
php_build_target=static
|
|
])
|
|
|
|
dnl
|
|
dnl PHP_BUILD_PROGRAM
|
|
dnl
|
|
AC_DEFUN([PHP_BUILD_PROGRAM],[
|
|
OVERALL_TARGET=[]ifelse($1,,php,$1)
|
|
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
|
|
|
|
php_build_target=program
|
|
])
|
|
|
|
dnl
|
|
dnl PHP_SHARED_MODULE(module-name, object-var, build-dir, cxx)
|
|
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"
|
|
|
|
case $host_alias in
|
|
*aix*[)]
|
|
suffix=so
|
|
link_cmd='$(LIBTOOL) --mode=link ifelse($4,,[$(CC)],[$(CXX)]) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -Wl,-G -o '$3'/$1.la -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $($2) $(translit($1,a-z_-,A-Z__)_SHARED_LIBADD) && mv -f '$3'/.libs/$1.so '$3'/$1.so'
|
|
;;
|
|
*netware*[)]
|
|
suffix=nlm
|
|
link_cmd='$(LIBTOOL) --mode=link ifelse($4,,[$(CC)],[$(CXX)]) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -o [$]@ -shared -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $($2) ifelse($1, php5lib, , -L$(top_builddir)/netware -lphp5lib) $(translit(ifelse($1, php5lib, $1, m4_substr($1, 3)),a-z_-,A-Z__)_SHARED_LIBADD)'
|
|
;;
|
|
*[)]
|
|
suffix=la
|
|
link_cmd='$(LIBTOOL) --mode=link ifelse($4,,[$(CC)],[$(CXX)]) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -o [$]@ -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $($2) $(translit($1,a-z_-,A-Z__)_SHARED_LIBADD)'
|
|
;;
|
|
esac
|
|
|
|
PHP_MODULES="$PHP_MODULES \$(phplibdir)/$1.$suffix"
|
|
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)
|
|
$link_cmd
|
|
|
|
EOF
|
|
])
|
|
|
|
dnl
|
|
dnl PHP_SELECT_SAPI(name, type[, sources [, extra-cflags [, build-target]]])
|
|
dnl
|
|
dnl Selects the SAPI name and type (static, shared, programm)
|
|
dnl and optionally also the source-files for the SAPI-specific
|
|
dnl objects.
|
|
dnl
|
|
AC_DEFUN([PHP_SELECT_SAPI],[
|
|
PHP_SAPI=$1
|
|
|
|
case "$2" in
|
|
static[)] PHP_BUILD_STATIC;;
|
|
shared[)] PHP_BUILD_SHARED;;
|
|
bundle[)] PHP_BUILD_BUNDLE;;
|
|
program[)] PHP_BUILD_PROGRAM($5);;
|
|
esac
|
|
|
|
ifelse($3,,,[PHP_ADD_SOURCES([sapi/$1],[$3],[$4],[sapi])])
|
|
])
|
|
|
|
dnl deprecated
|
|
AC_DEFUN([PHP_EXTENSION],[
|
|
sources=`$AWK -f $abs_srcdir/build/scan_makefile_in.awk < []PHP_EXT_SRCDIR($1)[]/Makefile.in`
|
|
|
|
PHP_NEW_EXTENSION($1, $sources, $2, $3)
|
|
|
|
if test -r "$ext_srcdir/Makefile.frag"; then
|
|
PHP_ADD_MAKEFILE_FRAGMENT
|
|
fi
|
|
])
|
|
|
|
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]]]])
|
|
dnl
|
|
dnl Includes an extension in the build.
|
|
dnl
|
|
dnl "extname" is the name of the ext/ subdir where the extension resides.
|
|
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.
|
|
AC_DEFUN([PHP_NEW_EXTENSION],[
|
|
ext_builddir=[]PHP_EXT_BUILDDIR($1)
|
|
ext_srcdir=[]PHP_EXT_SRCDIR($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_ADD_SOURCES(PHP_EXT_DIR($1),$2,$ac_extra,)
|
|
EXT_STATIC="$EXT_STATIC $1"
|
|
if test "$3" != "nocli"; then
|
|
EXT_CLI_STATIC="$EXT_CLI_STATIC $1"
|
|
fi
|
|
else
|
|
if test "$3" = "shared" || test "$3" = "yes"; then
|
|
dnl ---------------------------------------------- Shared module
|
|
PHP_ADD_SOURCES_X(PHP_EXT_DIR($1),$2,$ac_extra,shared_objects_$1,yes)
|
|
case $host_alias in
|
|
*netware*[)]
|
|
PHP_SHARED_MODULE(php$1,shared_objects_$1, $ext_builddir, $6)
|
|
;;
|
|
*[)]
|
|
PHP_SHARED_MODULE($1,shared_objects_$1, $ext_builddir, $6)
|
|
;;
|
|
esac
|
|
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
|
|
if test "$PHP_SAPI" = "cgi"; then
|
|
PHP_ADD_SOURCES(PHP_EXT_DIR($1),$2,$ac_extra,)
|
|
EXT_STATIC="$EXT_STATIC $1"
|
|
else
|
|
PHP_ADD_SOURCES(PHP_EXT_DIR($1),$2,$ac_extra,cli)
|
|
fi
|
|
EXT_CLI_STATIC="$EXT_CLI_STATIC $1"
|
|
fi
|
|
PHP_ADD_BUILD_DIR($ext_builddir)
|
|
])
|
|
|
|
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 currently a placeholder in the config.m4 file
|
|
dnl it 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 See ADD_EXTENSION_DEP in win32 build
|
|
dnl
|
|
AC_DEFUN([PHP_ADD_EXTENSION_DEP], [])
|
|
|
|
dnl -------------------------------------------------------------------------
|
|
dnl Checks for structures, typedefs, broken functions, etc.
|
|
dnl -------------------------------------------------------------------------
|
|
|
|
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>
|
|
#if STDC_HEADERS
|
|
#include <stdlib.h>
|
|
#include <stddef.h>
|
|
#endif
|
|
#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_TRY_RUN([
|
|
#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_TRY_RUN([
|
|
#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_TRY_RUN([
|
|
#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_TRY_RUN([
|
|
#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_TRY_COMPILE([#include <time.h>],[struct tm *(*func)() = localtime_r],[
|
|
:
|
|
],[
|
|
AC_DEFINE(MISSING_LOCALTIME_R_DECL,1,[Whether localtime_r is declared])
|
|
])
|
|
AC_TRY_COMPILE([#include <time.h>],[struct tm *(*func)() = gmtime_r],[
|
|
:
|
|
],[
|
|
AC_DEFINE(MISSING_GMTIME_R_DECL,1,[Whether gmtime_r is declared])
|
|
])
|
|
AC_TRY_COMPILE([#include <time.h>],[char *(*func)() = asctime_r],[
|
|
:
|
|
],[
|
|
AC_DEFINE(MISSING_ASCTIME_R_DECL,1,[Whether asctime_r is declared])
|
|
])
|
|
AC_TRY_COMPILE([#include <time.h>],[char *(*func)() = ctime_r],[
|
|
:
|
|
],[
|
|
AC_DEFINE(MISSING_CTIME_R_DECL,1,[Whether ctime_r is declared])
|
|
])
|
|
AC_TRY_COMPILE([#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_READDIR_R_TYPE
|
|
dnl
|
|
AC_DEFUN([PHP_READDIR_R_TYPE],[
|
|
dnl HAVE_READDIR_R is also defined by libmysql
|
|
AC_CHECK_FUNC(readdir_r,ac_cv_func_readdir_r=yes,ac_cv_func_readdir=no)
|
|
if test "$ac_cv_func_readdir_r" = "yes"; then
|
|
AC_CACHE_CHECK(for type of readdir_r, ac_cv_what_readdir_r,[
|
|
AC_TRY_RUN([
|
|
#define _REENTRANT
|
|
#include <sys/types.h>
|
|
#include <dirent.h>
|
|
|
|
#ifndef PATH_MAX
|
|
#define PATH_MAX 1024
|
|
#endif
|
|
|
|
main() {
|
|
DIR *dir;
|
|
char entry[sizeof(struct dirent)+PATH_MAX];
|
|
struct dirent *pentry = (struct dirent *) &entry;
|
|
|
|
dir = opendir("/");
|
|
if (!dir)
|
|
exit(1);
|
|
if (readdir_r(dir, (struct dirent *) entry, &pentry) == 0)
|
|
exit(0);
|
|
exit(1);
|
|
}
|
|
],[
|
|
ac_cv_what_readdir_r=POSIX
|
|
],[
|
|
AC_TRY_CPP([
|
|
#define _REENTRANT
|
|
#include <sys/types.h>
|
|
#include <dirent.h>
|
|
int readdir_r(DIR *, struct dirent *);
|
|
],[
|
|
ac_cv_what_readdir_r=old-style
|
|
],[
|
|
ac_cv_what_readdir_r=none
|
|
])
|
|
],[
|
|
ac_cv_what_readdir_r=none
|
|
])
|
|
])
|
|
case $ac_cv_what_readdir_r in
|
|
POSIX)
|
|
AC_DEFINE(HAVE_POSIX_READDIR_R,1,[whether you have POSIX readdir_r]);;
|
|
old-style)
|
|
AC_DEFINE(HAVE_OLD_READDIR_R,1,[whether you have old-style readdir_r]);;
|
|
esac
|
|
fi
|
|
])
|
|
|
|
dnl
|
|
dnl PHP_TM_GMTOFF
|
|
dnl
|
|
AC_DEFUN([PHP_TM_GMTOFF],[
|
|
AC_CACHE_CHECK([for tm_gmtoff in struct tm], ac_cv_struct_tm_gmtoff,
|
|
[AC_TRY_COMPILE([#include <sys/types.h>
|
|
#include <$ac_cv_struct_tm>], [struct tm tm; tm.tm_gmtoff;],
|
|
ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no)])
|
|
|
|
if test "$ac_cv_struct_tm_gmtoff" = yes; then
|
|
AC_DEFINE(HAVE_TM_GMTOFF,1,[whether you have tm_gmtoff in struct tm])
|
|
fi
|
|
])
|
|
|
|
dnl
|
|
dnl PHP_STRUCT_FLOCK
|
|
dnl
|
|
AC_DEFUN([PHP_STRUCT_FLOCK],[
|
|
AC_CACHE_CHECK(for struct flock,ac_cv_struct_flock,
|
|
AC_TRY_COMPILE([
|
|
#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_TRY_COMPILE([
|
|
#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_TRY_COMPILE([#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_AC_BROKEN_SPRINTF
|
|
dnl
|
|
dnl Check for broken sprintf(), C99 conformance
|
|
dnl
|
|
AC_DEFUN([PHP_AC_BROKEN_SPRINTF],[
|
|
AC_CACHE_CHECK(whether sprintf is broken, ac_cv_broken_sprintf,[
|
|
AC_TRY_RUN([main() {char buf[20];exit(sprintf(buf,"testing 123")!=11); }],[
|
|
ac_cv_broken_sprintf=no
|
|
],[
|
|
ac_cv_broken_sprintf=yes
|
|
],[
|
|
ac_cv_broken_sprintf=no
|
|
])
|
|
])
|
|
if test "$ac_cv_broken_sprintf" = "yes"; then
|
|
AC_DEFINE(PHP_BROKEN_SPRINTF, 1, [Whether sprintf is C99 conform])
|
|
else
|
|
AC_DEFINE(PHP_BROKEN_SPRINTF, 0, [Whether sprintf is C99 conform])
|
|
fi
|
|
])
|
|
|
|
dnl
|
|
dnl PHP_AC_BROKEN_SNPRINTF
|
|
dnl
|
|
dnl Check for broken snprintf(), C99 conformance
|
|
dnl
|
|
AC_DEFUN([PHP_AC_BROKEN_SNPRINTF],[
|
|
AC_CACHE_CHECK(whether snprintf is broken, ac_cv_broken_snprintf,[
|
|
AC_TRY_RUN([
|
|
#define NULL (0L)
|
|
main() {
|
|
char buf[20];
|
|
int res = 0;
|
|
res = res || (snprintf(buf, 2, "marcus") != 6);
|
|
res = res || (buf[1] != '\0');
|
|
/* Implementations may consider this as an encoding error */
|
|
snprintf(buf, 0, "boerger");
|
|
/* However, they MUST ignore the pointer */
|
|
res = res || (buf[0] != 'm');
|
|
res = res || (snprintf(NULL, 0, "boerger") != 7);
|
|
res = res || (snprintf(buf, sizeof(buf), "%f", 0.12345678) != 8);
|
|
exit(res);
|
|
}
|
|
],[
|
|
ac_cv_broken_snprintf=no
|
|
],[
|
|
ac_cv_broken_snprintf=yes
|
|
],[
|
|
ac_cv_broken_snprintf=no
|
|
])
|
|
])
|
|
if test "$ac_cv_broken_snprintf" = "yes"; then
|
|
AC_DEFINE(PHP_BROKEN_SNPRINTF, 1, [Whether snprintf is C99 conform])
|
|
else
|
|
AC_DEFINE(PHP_BROKEN_SNPRINTF, 0, [Whether snprintf is C99 conform])
|
|
fi
|
|
])
|
|
|
|
dnl
|
|
dnl PHP_SOLARIS_PIC_WEIRDNESS
|
|
dnl
|
|
dnl Solaris requires main code to be position independent in order
|
|
dnl to let shared objects find symbols. Weird. Ugly.
|
|
dnl
|
|
dnl Must be run after all --with-NN options that let the user
|
|
dnl choose dynamic extensions, and after the gcc test.
|
|
dnl
|
|
AC_DEFUN([PHP_SOLARIS_PIC_WEIRDNESS],[
|
|
AC_MSG_CHECKING([whether -fPIC is required])
|
|
if test -n "$EXT_SHARED"; then
|
|
os=`uname -sr 2>/dev/null`
|
|
case $os in
|
|
"SunOS 5.6"|"SunOS 5.7"[)]
|
|
case $CC in
|
|
gcc*|egcs*)
|
|
CFLAGS="$CFLAGS -fPIC";;
|
|
*[)]
|
|
CFLAGS="$CFLAGS -fpic";;
|
|
esac
|
|
AC_MSG_RESULT([yes]);;
|
|
*[)]
|
|
AC_MSG_RESULT([no]);;
|
|
esac
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
])
|
|
|
|
dnl
|
|
dnl PHP_SYS_LFS
|
|
dnl
|
|
dnl The problem is that the default compilation flags in Solaris 2.6 won't
|
|
dnl let programs access large files; you need to tell the compiler that
|
|
dnl you actually want your programs to work on large files. For more
|
|
dnl details about this brain damage please see:
|
|
dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
|
|
dnl
|
|
dnl Written by Paul Eggert <eggert@twinsun.com>.
|
|
dnl
|
|
AC_DEFUN([PHP_SYS_LFS],
|
|
[dnl
|
|
# If available, prefer support for large files unless the user specified
|
|
# one of the CPPFLAGS, LDFLAGS, or LIBS variables.
|
|
AC_MSG_CHECKING([whether large file support needs explicit enabling])
|
|
ac_getconfs=''
|
|
ac_result=yes
|
|
ac_set=''
|
|
ac_shellvars='CPPFLAGS LDFLAGS LIBS'
|
|
for ac_shellvar in $ac_shellvars; do
|
|
case $ac_shellvar in
|
|
CPPFLAGS[)] ac_lfsvar=LFS_CFLAGS ;;
|
|
*[)] ac_lfsvar=LFS_$ac_shellvar ;;
|
|
esac
|
|
eval test '"${'$ac_shellvar'+set}"' = set && ac_set=$ac_shellvar
|
|
(getconf $ac_lfsvar) >/dev/null 2>&1 || { ac_result=no; break; }
|
|
ac_getconf=`getconf $ac_lfsvar`
|
|
ac_getconfs=$ac_getconfs$ac_getconf
|
|
eval ac_test_$ac_shellvar=\$ac_getconf
|
|
done
|
|
case "$ac_result$ac_getconfs" in
|
|
yes[)] ac_result=no ;;
|
|
esac
|
|
case "$ac_result$ac_set" in
|
|
yes?*[)] ac_result="yes, but $ac_set is already set, so use its settings"
|
|
esac
|
|
AC_MSG_RESULT([$ac_result])
|
|
case $ac_result in
|
|
yes[)]
|
|
for ac_shellvar in $ac_shellvars; do
|
|
eval $ac_shellvar=\$ac_test_$ac_shellvar
|
|
done ;;
|
|
esac
|
|
])
|
|
|
|
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_TRY_COMPILE([#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_TRY_COMPILE([#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_DECLARED_TIMEZONE
|
|
dnl
|
|
AC_DEFUN([PHP_DECLARED_TIMEZONE],[
|
|
AC_CACHE_CHECK(for declared timezone, ac_cv_declared_timezone,[
|
|
AC_TRY_COMPILE([
|
|
#include <sys/types.h>
|
|
#include <time.h>
|
|
#ifdef HAVE_SYS_TIME_H
|
|
#include <sys/time.h>
|
|
#endif
|
|
],[
|
|
time_t foo = (time_t) timezone;
|
|
],[
|
|
ac_cv_declared_timezone=yes
|
|
],[
|
|
ac_cv_declared_timezone=no
|
|
])])
|
|
if test "$ac_cv_declared_timezone" = "yes"; then
|
|
AC_DEFINE(HAVE_DECLARED_TIMEZONE, 1, [Whether system headers declare timezone])
|
|
fi
|
|
])
|
|
|
|
dnl
|
|
dnl PHP_EBCDIC
|
|
dnl
|
|
AC_DEFUN([PHP_EBCDIC], [
|
|
AC_CACHE_CHECK([whether system uses EBCDIC],ac_cv_ebcdic,[
|
|
AC_TRY_RUN( [
|
|
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_GLIBC_FOPEN_APPEND
|
|
dnl
|
|
AC_DEFUN([PHP_BROKEN_GLIBC_FOPEN_APPEND], [
|
|
AC_MSG_CHECKING([for broken libc stdio])
|
|
AC_CACHE_VAL(have_broken_glibc_fopen_append,[
|
|
AC_TRY_RUN([
|
|
#include <stdio.h>
|
|
int main(int argc, char *argv[])
|
|
{
|
|
FILE *fp;
|
|
long position;
|
|
char *filename = "/tmp/phpglibccheck";
|
|
|
|
fp = fopen(filename, "w");
|
|
if (fp == NULL) {
|
|
perror("fopen");
|
|
exit(2);
|
|
}
|
|
fputs("foobar", fp);
|
|
fclose(fp);
|
|
|
|
fp = fopen(filename, "a+");
|
|
position = ftell(fp);
|
|
fclose(fp);
|
|
unlink(filename);
|
|
if (position == 0)
|
|
return 1;
|
|
return 0;
|
|
}
|
|
],
|
|
[have_broken_glibc_fopen_append=no],
|
|
[have_broken_glibc_fopen_append=yes ],
|
|
AC_TRY_COMPILE([
|
|
#include <features.h>
|
|
],[
|
|
#if !__GLIBC_PREREQ(2,2)
|
|
choke me
|
|
#endif
|
|
],
|
|
[have_broken_glibc_fopen_append=yes],
|
|
[have_broken_glibc_fopen_append=no ])
|
|
)])
|
|
|
|
if test "$have_broken_glibc_fopen_append" = "yes"; then
|
|
AC_MSG_RESULT(yes)
|
|
AC_DEFINE(HAVE_BROKEN_GLIBC_FOPEN_APPEND,1, [Define if your glibc borks on fopen with mode a+])
|
|
else
|
|
AC_MSG_RESULT(no)
|
|
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_TRY_COMPILE([
|
|
#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_TRY_RUN([
|
|
#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_TRY_COMPILE([
|
|
#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 existance 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_TRY_RUN([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_TRY_RUN([
|
|
$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_NAME
|
|
dnl
|
|
dnl Determines shared library suffix
|
|
dnl suffix can be: .so, .sl or .dylib
|
|
dnl
|
|
AC_DEFUN([PHP_SHLIB_SUFFIX_NAME],[
|
|
AC_REQUIRE([PHP_CANONICAL_HOST_TARGET])dnl
|
|
PHP_SUBST(SHLIB_SUFFIX_NAME)
|
|
SHLIB_SUFFIX_NAME=so
|
|
case $host_alias in
|
|
*hpux*[)]
|
|
SHLIB_SUFFIX_NAME=sl
|
|
;;
|
|
*darwin*[)]
|
|
SHLIB_SUFFIX_NAME=dylib
|
|
;;
|
|
esac
|
|
])
|
|
|
|
dnl
|
|
dnl PHP_CHECK_64BIT([do if 32], [do if 64])
|
|
dnl
|
|
dnl This macro is used to detect if we're at 64-bit platform or not.
|
|
dnl It could be useful for those external libs, that have different precompiled
|
|
dnl versions in different directories.
|
|
dnl
|
|
AC_DEFUN([PHP_CHECK_64BIT],[
|
|
AC_CHECK_SIZEOF(long int, 4)
|
|
AC_MSG_CHECKING([checking if we're at 64-bit platform])
|
|
if test "$ac_cv_sizeof_long_int" = "4" ; then
|
|
AC_MSG_RESULT([no])
|
|
$1
|
|
else
|
|
AC_MSG_RESULT([yes])
|
|
$2
|
|
fi
|
|
])
|
|
|
|
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_TRY_RUN(
|
|
[
|
|
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)
|
|
if test -n "$PROG_SENDMAIL"; then
|
|
AC_DEFINE(HAVE_SENDMAIL,1,[whether you have sendmail])
|
|
fi
|
|
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
|
|
dnl
|
|
dnl Search for bison and check it's version
|
|
dnl
|
|
AC_DEFUN([PHP_PROG_BISON], [
|
|
AC_PROG_YACC
|
|
LIBZEND_BISON_CHECK
|
|
PHP_SUBST(YACC)
|
|
])
|
|
|
|
dnl
|
|
dnl PHP_PROG_LEX
|
|
dnl
|
|
dnl Search for (f)lex and check it's version
|
|
dnl
|
|
AC_DEFUN([PHP_PROG_LEX], [
|
|
# we only support certain flex versions
|
|
flex_version_list="2.5.4"
|
|
|
|
AC_PROG_LEX
|
|
if test -n "$LEX"; then
|
|
AC_DECL_YYTEXT
|
|
:
|
|
fi
|
|
dnl ## Make flex scanners use const if they can, even if __STDC__ is not
|
|
dnl ## true, for compilers like Sun's that only set __STDC__ true in
|
|
dnl ## "limit-to-ANSI-standard" mode, not in "ANSI-compatible" mode
|
|
AC_C_CONST
|
|
if test "$ac_cv_c_const" = "yes" ; then
|
|
LEX_CFLAGS="-DYY_USE_CONST"
|
|
fi
|
|
|
|
if test "$LEX"; then
|
|
AC_CACHE_CHECK([for flex version], php_cv_flex_version, [
|
|
flex_version=`$LEX -V -v --version 2>/dev/null | $SED -e 's/^.* //'`
|
|
php_cv_flex_version=invalid
|
|
for flex_check_version in $flex_version_list; do
|
|
if test "$flex_version" = "$flex_check_version"; then
|
|
php_cv_flex_version="$flex_check_version (ok)"
|
|
fi
|
|
done
|
|
])
|
|
else
|
|
flex_version=none
|
|
fi
|
|
|
|
case $php_cv_flex_version in
|
|
""|invalid[)]
|
|
flex_msg="flex versions supported for regeneration of the Zend/PHP parsers: $flex_version_list (found: $flex_version)."
|
|
AC_MSG_WARN([$flex_msg])
|
|
LEX="exit 0;"
|
|
;;
|
|
esac
|
|
PHP_SUBST(LEX)
|
|
])
|
|
|
|
dnl
|
|
dnl PHP_PROG_RE2C
|
|
dnl
|
|
dnl Search for the re2c binary and check the version
|
|
dnl
|
|
AC_DEFUN([PHP_PROG_RE2C],[
|
|
AC_CHECK_PROG(RE2C, re2c, re2c)
|
|
if test -n "$RE2C"; then
|
|
AC_CACHE_CHECK([for re2c version], php_cv_re2c_version, [
|
|
re2c_vernum=`echo "" | re2c --vernum 2>/dev/null`
|
|
if test -z "$re2c_vernum" || test "$re2c_vernum" -lt "908"; then
|
|
php_cv_re2c_version=invalid
|
|
else
|
|
php_cv_re2c_version="`echo "" | re2c --version | cut -d ' ' -f 2 2>/dev/null` (ok)"
|
|
fi
|
|
])
|
|
fi
|
|
case $php_cv_re2c_version in
|
|
""|invalid[)]
|
|
AC_MSG_WARN([You will need re2c 0.98 or later if you want to regenerate PHP parsers.])
|
|
RE2C="exit 0;"
|
|
;;
|
|
esac
|
|
PHP_SUBST(RE2C)
|
|
])
|
|
|
|
dnl -------------------------------------------------------------------------
|
|
dnl Common setup macros: PHP_SETUP_<what>
|
|
dnl -------------------------------------------------------------------------
|
|
|
|
dnl
|
|
dnl PHP_SETUP_KERBEROS(shared-add [, action-found [, action-not-found]])
|
|
dnl
|
|
dnl Common setup macro for kerberos
|
|
dnl
|
|
AC_DEFUN([PHP_SETUP_KERBEROS],[
|
|
found_kerberos=no
|
|
unset KERBEROS_CFLAGS
|
|
unset KERBEROS_LIBS
|
|
|
|
dnl First try to find krb5-config
|
|
if test -z "$KRB5_CONFIG"; then
|
|
AC_PATH_PROG(KRB5_CONFIG, krb5-config, no, [$PATH:/usr/kerberos/bin:/usr/local/bin])
|
|
fi
|
|
|
|
dnl If krb5-config is found try using it
|
|
if test "$PHP_KERBEROS" = "yes" && test -x "$KRB5_CONFIG"; then
|
|
KERBEROS_LIBS=`$KRB5_CONFIG --libs gssapi`
|
|
KERBEROS_CFLAGS=`$KRB5_CONFIG --cflags gssapi`
|
|
|
|
if test -n "$KERBEROS_LIBS" && test -n "$KERBEROS_CFLAGS"; then
|
|
found_kerberos=yes
|
|
PHP_EVAL_LIBLINE($KERBEROS_LIBS, $1)
|
|
PHP_EVAL_INCLINE($KERBEROS_CFLAGS)
|
|
fi
|
|
fi
|
|
|
|
dnl If still not found use old skool method
|
|
if test "$found_kerberos" = "no"; then
|
|
|
|
if test "$PHP_KERBEROS" = "yes"; then
|
|
PHP_KERBEROS="/usr/kerberos /usr/local /usr"
|
|
fi
|
|
|
|
for i in $PHP_KERBEROS; do
|
|
if test -f $i/$PHP_LIBDIR/libkrb5.a || test -f $i/$PHP_LIBDIR/libkrb5.$SHLIB_SUFFIX_NAME; then
|
|
PHP_KERBEROS_DIR=$i
|
|
break
|
|
fi
|
|
done
|
|
|
|
if test "$PHP_KERBEROS_DIR"; then
|
|
found_kerberos=yes
|
|
PHP_ADD_LIBPATH($PHP_KERBEROS_DIR/$PHP_LIBDIR, $1)
|
|
PHP_ADD_LIBRARY(gssapi_krb5, 1, $1)
|
|
PHP_ADD_LIBRARY(krb5, 1, $1)
|
|
PHP_ADD_LIBRARY(k5crypto, 1, $1)
|
|
PHP_ADD_LIBRARY(com_err, 1, $1)
|
|
PHP_ADD_INCLUDE($PHP_KERBEROS_DIR/include)
|
|
fi
|
|
fi
|
|
|
|
if test "$found_kerberos" = "yes"; then
|
|
ifelse([$2],[],:,[$2])
|
|
ifelse([$3],[],,[else $3])
|
|
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
|
|
unset OPENSSL_INCDIR
|
|
unset OPENSSL_LIBDIR
|
|
|
|
dnl Empty variable means 'no'
|
|
test -z "$PHP_OPENSSL" && PHP_OPENSSL=no
|
|
test -z "$PHP_IMAP_SSL" && PHP_IMAP_SSL=no
|
|
|
|
dnl Fallbacks for different configure options
|
|
if test "$PHP_OPENSSL" != "no"; then
|
|
PHP_OPENSSL_DIR=$PHP_OPENSSL
|
|
elif test "$PHP_IMAP_SSL" != "no"; then
|
|
PHP_OPENSSL_DIR=$PHP_IMAP_SSL
|
|
fi
|
|
|
|
dnl First try to find pkg-config
|
|
if test -z "$PKG_CONFIG"; then
|
|
AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
|
|
fi
|
|
|
|
dnl If pkg-config is found try using it
|
|
if test "$PHP_OPENSSL_DIR" = "yes" && test -x "$PKG_CONFIG" && $PKG_CONFIG --exists openssl; then
|
|
if $PKG_CONFIG --atleast-version=0.9.6 openssl; then
|
|
found_openssl=yes
|
|
OPENSSL_LIBS=`$PKG_CONFIG --libs openssl`
|
|
OPENSSL_INCS=`$PKG_CONFIG --cflags-only-I openssl`
|
|
OPENSSL_INCDIR=`$PKG_CONFIG --variable=includedir openssl`
|
|
else
|
|
AC_MSG_ERROR([OpenSSL version 0.9.6 or greater required.])
|
|
fi
|
|
|
|
if test -n "$OPENSSL_LIBS" && test -n "$OPENSSL_INCS"; then
|
|
PHP_EVAL_LIBLINE($OPENSSL_LIBS, $1)
|
|
PHP_EVAL_INCLINE($OPENSSL_INCS)
|
|
fi
|
|
fi
|
|
|
|
dnl If pkg-config fails for some reason, revert to the old method
|
|
if test "$found_openssl" = "no"; then
|
|
|
|
if test "$PHP_OPENSSL_DIR" = "yes"; then
|
|
PHP_OPENSSL_DIR="/usr/local/ssl /usr/local /usr /usr/local/openssl"
|
|
fi
|
|
|
|
for i in $PHP_OPENSSL_DIR; do
|
|
if test -r $i/include/openssl/evp.h; then
|
|
OPENSSL_INCDIR=$i/include
|
|
fi
|
|
if test -r $i/$PHP_LIBDIR/libssl.a -o -r $i/$PHP_LIBDIR/libssl.$SHLIB_SUFFIX_NAME; then
|
|
OPENSSL_LIBDIR=$i/$PHP_LIBDIR
|
|
fi
|
|
test -n "$OPENSSL_INCDIR" && test -n "$OPENSSL_LIBDIR" && break
|
|
done
|
|
|
|
if test -z "$OPENSSL_INCDIR"; then
|
|
AC_MSG_ERROR([Cannot find OpenSSL's <evp.h>])
|
|
fi
|
|
|
|
if test -z "$OPENSSL_LIBDIR"; then
|
|
AC_MSG_ERROR([Cannot find OpenSSL's libraries])
|
|
fi
|
|
|
|
old_CPPFLAGS=$CPPFLAGS
|
|
CPPFLAGS=-I$OPENSSL_INCDIR
|
|
AC_MSG_CHECKING([for OpenSSL version])
|
|
AC_EGREP_CPP(yes,[
|
|
#include <openssl/opensslv.h>
|
|
#if OPENSSL_VERSION_NUMBER >= 0x0090600fL
|
|
yes
|
|
#endif
|
|
],[
|
|
AC_MSG_RESULT([>= 0.9.6])
|
|
],[
|
|
AC_MSG_ERROR([OpenSSL version 0.9.6 or greater required.])
|
|
])
|
|
CPPFLAGS=$old_CPPFLAGS
|
|
|
|
PHP_ADD_INCLUDE($OPENSSL_INCDIR)
|
|
|
|
PHP_CHECK_LIBRARY(crypto, CRYPTO_free, [
|
|
PHP_ADD_LIBRARY(crypto,,$1)
|
|
],[
|
|
AC_MSG_ERROR([libcrypto not found!])
|
|
],[
|
|
-L$OPENSSL_LIBDIR
|
|
])
|
|
|
|
old_LIBS=$LIBS
|
|
LIBS="$LIBS -lcrypto"
|
|
PHP_CHECK_LIBRARY(ssl, SSL_CTX_set_ssl_version, [
|
|
found_openssl=yes
|
|
],[
|
|
AC_MSG_ERROR([libssl not found!])
|
|
],[
|
|
-L$OPENSSL_LIBDIR
|
|
])
|
|
LIBS=$old_LIBS
|
|
PHP_ADD_LIBRARY(ssl,,$1)
|
|
|
|
PHP_ADD_LIBPATH($OPENSSL_LIBDIR, $1)
|
|
fi
|
|
|
|
if test "$found_openssl" = "yes"; then
|
|
dnl For apache 1.3.x static build
|
|
OPENSSL_INCDIR_OPT=-I$OPENSSL_INCDIR
|
|
AC_SUBST(OPENSSL_INCDIR_OPT)
|
|
|
|
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_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_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
|
|
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
|
|
])
|
|
])
|
|
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
|
|
then
|
|
PHP_CHECK_LIBRARY($iconv_lib_name, libiconv, [
|
|
found_iconv=yes
|
|
PHP_DEFINE(HAVE_LIBICONV,1,[ext/iconv])
|
|
AC_DEFINE(HAVE_LIBICONV,1,[ ])
|
|
], [
|
|
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], [
|
|
AC_CACHE_CHECK([for xml2-config path], ac_cv_php_xml2_config_path,
|
|
[
|
|
for i in $PHP_LIBXML_DIR /usr/local /usr; do
|
|
if test -x "$i/bin/xml2-config"; then
|
|
ac_cv_php_xml2_config_path="$i/bin/xml2-config"
|
|
break
|
|
fi
|
|
done
|
|
])
|
|
|
|
if test -x "$ac_cv_php_xml2_config_path"; then
|
|
XML2_CONFIG="$ac_cv_php_xml2_config_path"
|
|
libxml_full_version=`$XML2_CONFIG --version`
|
|
ac_IFS=$IFS
|
|
IFS="."
|
|
set $libxml_full_version
|
|
IFS=$ac_IFS
|
|
LIBXML_VERSION=`expr [$]1 \* 1000000 + [$]2 \* 1000 + [$]3`
|
|
if test "$LIBXML_VERSION" -ge "2006008"; then
|
|
LIBXML_LIBS=`$XML2_CONFIG --libs`
|
|
LIBXML_INCS=`$XML2_CONFIG --cflags`
|
|
PHP_EVAL_LIBLINE($LIBXML_LIBS, $1)
|
|
PHP_EVAL_INCLINE($LIBXML_INCS)
|
|
|
|
dnl Check that build works with given libs
|
|
AC_CACHE_CHECK(whether libxml build works, php_cv_libxml_build_works, [
|
|
PHP_TEST_BUILD(xmlInitParser,
|
|
[
|
|
php_cv_libxml_build_works=yes
|
|
], [
|
|
AC_MSG_RESULT(no)
|
|
AC_MSG_ERROR([build test failed. Please check the config.log for details.])
|
|
], [
|
|
[$]$1
|
|
])
|
|
])
|
|
if test "$php_cv_libxml_build_works" = "yes"; then
|
|
AC_DEFINE(HAVE_LIBXML, 1, [ ])
|
|
fi
|
|
$2
|
|
else
|
|
AC_MSG_ERROR([libxml2 version 2.6.8 or greater required.])
|
|
fi
|
|
ifelse([$3],[],,[else $3])
|
|
fi
|
|
])
|
|
|
|
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_EXT_HEADERS="$INSTALL_EXT_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_EXT_HEADERS="$INSTALL_EXT_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`
|
|
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([LT_AC_PROG_SED])
|
|
PHP_SUBST(EGREP)
|
|
PHP_SUBST(SED)
|
|
test -f $1 && mv $1 $1.old
|
|
rm -f $1.old
|
|
cat >$1<<EOF
|
|
#! /bin/sh
|
|
#
|
|
# Created by configure
|
|
|
|
EOF
|
|
|
|
for var in CFLAGS CXXFLAGS CPPFLAGS LDFLAGS LIBS CC CXX; do
|
|
eval val=\$$var
|
|
if test -n "$val"; then
|
|
echo "$var='$val' \\" >> $1
|
|
fi
|
|
done
|
|
|
|
for arg in [$]0 "[$]@"; do
|
|
echo "'[$]arg' \\" >> $1
|
|
CONFIGURE_COMMAND="$CONFIGURE_COMMAND '[$]arg'"
|
|
done
|
|
echo '"[$]@"' >> $1
|
|
chmod +x $1
|
|
PHP_SUBST_OLD(CONFIGURE_COMMAND)
|
|
])
|
|
|
|
dnl
|
|
dnl PHP_REGEX
|
|
dnl
|
|
AC_DEFUN([PHP_REGEX],[
|
|
if test "$REGEX_TYPE" = "php"; then
|
|
AC_DEFINE(HAVE_REGEX_T_RE_MAGIC, 1, [ ])
|
|
AC_DEFINE(HSREGEX,1,[ ])
|
|
AC_DEFINE(REGEX,1,[ ])
|
|
PHP_ADD_SOURCES(regex, regcomp.c regexec.c regerror.c regfree.c)
|
|
elif test "$REGEX_TYPE" = "system"; then
|
|
AC_DEFINE(REGEX,0,[ ])
|
|
dnl Check if field re_magic exists in struct regex_t
|
|
AC_CACHE_CHECK([whether field re_magic exists in struct regex_t], ac_cv_regex_t_re_magic, [
|
|
AC_TRY_COMPILE([#include <sys/types.h>
|
|
#include <regex.h>], [regex_t rt; rt.re_magic;],
|
|
[ac_cv_regex_t_re_magic=yes], [ac_cv_regex_t_re_magic=no])
|
|
])
|
|
if test "$ac_cv_regex_t_re_magic" = "yes"; then
|
|
AC_DEFINE([HAVE_REGEX_T_RE_MAGIC], [ ], 1)
|
|
fi
|
|
fi
|
|
AC_MSG_CHECKING([which regex library to use])
|
|
AC_MSG_RESULT([$REGEX_TYPE])
|
|
])
|
|
|
|
dnl
|
|
dnl PHP_CHECK_PDO_INCLUDES([found [, not-found]])
|
|
dnl
|
|
AC_DEFUN([PHP_CHECK_PDO_INCLUDES],[
|
|
AC_CACHE_CHECK([for PDO includes], pdo_inc_path, [
|
|
AC_MSG_CHECKING([for PDO includes])
|
|
if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
|
|
pdo_inc_path=$abs_srcdir/ext
|
|
elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
|
|
pdo_inc_path=$abs_srcdir/ext
|
|
elif test -f $prefix/include/php/ext/pdo/php_pdo_driver.h; then
|
|
pdo_inc_path=$prefix/include/php/ext
|
|
fi
|
|
])
|
|
if test -n "$pdo_inc_path"; then
|
|
ifelse([$1],[],:,[$1])
|
|
else
|
|
ifelse([$2],[],[AC_MSG_ERROR([Cannot find php_pdo_driver.h.])],[$2])
|
|
fi
|
|
])
|