X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=m4%2Fpsi%2Fpsi.m4;h=d7918f24a0ff7c5800b32ac90b4768573da16d14;hp=5692e71e42ec517367da9c0d9faded023f16dd6b;hb=764f3f36f003401f6334ced63356451fb5c6c642;hpb=008e30ad1d9e27cd0d5ff8c537f0cd6670294613 diff --git a/m4/psi/psi.m4 b/m4/psi/psi.m4 index 5692e71..d7918f2 100644 --- a/m4/psi/psi.m4 +++ b/m4/psi/psi.m4 @@ -7,6 +7,54 @@ AC_DEFUN(PSI_CONFIG_INIT, [ psi_save_LIBS=$LIBS LIBS= + ac_includes_default="AC_INCLUDES_DEFAULT" + + AC_PROG_AWK + AC_PATH_PROG(NM, nm) + AC_CACHE_CHECK(for libc start main symbol, psi_cv_libc_main, [ + psi_libc_main= + AC_TRY_LINK(PSI_INCLUDES, [(void)0;], [ + psi_libc_main=`nm -g conftest$ac_exeext | $AWK -F ' *|@' '/^@<:@@<:@:space:@:>@@:>@+U / {print$[]3; exit}'` + ]) + psi_cv_libc_main=$psi_libc_main + ]) + + AC_MSG_CHECKING(for preprocessor defaults) + psi_cpp_predef=`$CPP -Wp,-dM - &1 >/dev/null \ + | $AWK ' + /include.*search.*start/ { + capture = 1 + next + } + /@<:@Ee@:>@nd.*search/ { + capture = 0 + } + { + if (capture) + print $1 + } + ' \ + ` + psi_cpp_predef_count=`printf %s "$psi_cpp_predef" | wc -l` + psi_cpp_search_count=`printf %s "$psi_cpp_search" | wc -l` + AC_MSG_RESULT([$psi_cpp_predef_count predefined macros, and $psi_cpp_search_count search paths]) + PSI_CPP_PREDEF=`printf "%s\n" "$psi_cpp_predef" | \ + $AWK '{ + gsub(/"/, "\\\\\""); + printf "\"%s\\\n\"\n", $[]0 + }' \ + ` + PSI_CPP_SEARCH=`printf %s "$psi_cpp_search" | \ + $AWK '{ + if (i) printf ":"; + gsub(/^@<:@@<:@:space:@:>@@:>@+/,""); + gsub(/@<:@@<:@:space:@:>@@:>@+$/,""); + printf "%s", $[]0; + ++i + }' \ + ` + if test "$PHP_PSI_MAINTAINER_MODE" = "yes"; then PSI_FAST_CONFIG=true PSI_DEPS=true @@ -36,15 +84,27 @@ AC_DEFUN(PSI_CONFIG_INIT, [ AC_CONFIG_FILES( [$PHP_PSI_BUILDDIR/php_psi_stdinc.h:$PHP_PSI_SRCDIR/php_psi_stdinc.h.in] [$PHP_PSI_BUILDDIR/php_psi_posix.h:$PHP_PSI_SRCDIR/php_psi_posix.h.in] + [$PHP_PSI_BUILDDIR/php_psi_cpp.h:$PHP_PSI_SRCDIR/php_psi_cpp.h.in] ) ]) +dnl PSI_CONFIG_WAIT() +dnl Internal: waits for sub configures in maintainer mode +AC_DEFUN(PSI_CONFIG_WAIT, [ + wait + if test $? -gt 0; then + cat $PSI_CONFIG_TMP/*/stderr.log >&2 + exit 1 + fi +]) + dnl PSI_CONFIG_DONE() dnl Finish the headers with the pre-defined types etc. AC_DEFUN(PSI_CONFIG_DONE, [ + PSI_CONFIG_WAIT + if $PSI_FAST_CONFIG; then - wait for conf_env in $PSI_CONFIG_TMP/*/conf.env; do source $conf_env done @@ -63,6 +123,8 @@ AC_DEFUN(PSI_CONFIG_DONE, [ AC_SUBST([PSI_REDIRS]) AC_SUBST([PSI_MACROS]) AC_SUBST([PSI_DECLS]) + AC_SUBST([PSI_CPP_SEARCH]) + AC_SUBST([PSI_CPP_PREDEF]) ]) dnl PSI_SH_CONFIG_POSIX_ENABLED(section) @@ -78,7 +140,7 @@ AC_DEFUN(PSI_CONFIG_POSIX_ENABLED, [ AS_TR_SH([psi_config_posix_]$1)=true ;; *) - if expr "$PHP_PSI_POSIX" : '\b$1\b' >/dev/null; then + if expr "$PHP_PSI_POSIX" : '.*\b$1\b' >/dev/null; then AS_TR_SH([psi_config_posix_]$1)=true fi ;; @@ -100,35 +162,35 @@ AC_DEFUN(PSI_SH_TEST_POSIX_ENABLED, [ fi ]) -dnl PSI_CONFIG_POSIX(section, headers) +dnl PSI_CONFIG_POSIX(section, headers, dependents) AC_DEFUN(PSI_CONFIG_POSIX, [ PSI_CONFIG_POSIX_ENABLED($1, [ if $PSI_FAST_CONFIG; then - PSI_CONFIG_POSIX_PARALLEL($1, $2) + PSI_CONFIG_POSIX_PARALLEL($1, $2, [$3]) else ifelse([$2],,:,[AC_CHECK_HEADERS($2)]) AS_TR_CPP([PSI_CHECK_$1]) + $3 fi ]) ]) AC_DEFUN([PSI_CONFIG_POSIX_PARALLEL], [ ( - dnl setup + dnl chaway mkdir $PSI_CONFIG_TMP/AS_TR_SH([$1]) - ln -s $(pwd)/confdefs.h $PSI_CONFIG_TMP/AS_TR_SH([$1])/confdefs.h + cd $PSI_CONFIG_TMP/AS_TR_SH([$1]) + + dnl AC_DEFINEs + ln -s $abs_builddir/confdefs.h confdefs.h - dnl restore stdio - exec 66>&AS_MESSAGE_FD - exec AS_MESSAGE_FD>$PSI_CONFIG_TMP/AS_TR_SH([$1])/stdout.log - exec 2>$PSI_CONFIG_TMP/AS_TR_SH([$1])/stderr.log + dnl STDOUT, STDERR + exec {PSI_MESSAGE_FD}>&AS_MESSAGE_FD {PSI_ERROR_FD}>&2 + exec AS_MESSAGE_FD>stdout.log 2>stderr.log dnl check for headers? ifelse([$2],,:,[AC_CHECK_HEADERS($2)]) - dnl chaway - cd $PSI_CONFIG_TMP/AS_TR_SH([$1]) - dnl run checks PSI_TYPES= PSI_CONSTS= @@ -139,21 +201,31 @@ AC_DEFUN([PSI_CONFIG_POSIX_PARALLEL], [ AS_TR_CPP([PSI_CHECK_$1]) dnl save env - cat >$PSI_CONFIG_TMP/AS_TR_SH([$1])/conf.env <conf.env <>$PSI_CONFIG_TMP/AS_TR_SH([$1])/conf.env <>conf.env <>conf.env + dnl restore STDOUT,STDERR + exec AS_MESSAGE_FD>&$PSI_MESSAGE_FD 2>&$PSI_ERROR_FD + dnl done - printf "%s " "$1" >&66 + AS_ECHO_N(["$1 "]) + cd - >/dev/null + + dnl run dependents + $3 + + PSI_CONFIG_WAIT ) & ]) @@ -169,16 +241,15 @@ AC_DEFUN(PSI_PTHREAD, [ dnl PSI_INCLUDES() dnl Expands to a complete list of include statements including -dnl AC_INCLUDES_DEFAULT(). -AC_DEFUN(PSI_INCLUDES, [dnl -#define PSI_INCLUDES +dnl autoconf's defaults. +AC_DEFUN(PSI_INCLUDES, [ #ifndef _GNU_SOURCE # define _GNU_SOURCE #endif #ifndef _REENTRANT # define _REENTRANT #endif -AC_INCLUDES_DEFAULT() +$ac_includes_default #ifdef HAVE_STDBOOL_H # include #else @@ -215,6 +286,9 @@ typedef bool _Bool; #ifdef HAVE_ARPA_NAMESER_H # include #endif +#ifdef HAVE_ARPA_INET_H +# include +#endif #ifdef HAVE_FCNTL_H # include #endif @@ -276,7 +350,13 @@ AC_DEFUN(PSI_LEMON, [ if test -z "$LEMON" then AC_PATH_PROG(LEMON, lemon, $PHP_PSI_BUILDDIR/lemon) + if expr + "$LEMON" : "/" >/dev/null; then + LEMON_PATH= + else + LEMON_PATH=$abs_builddir/ + fi fi + PHP_SUBST(LEMON_PATH) PHP_SUBST(LEMON) ]) @@ -343,7 +423,7 @@ AC_DEFUN(PSI_CHECK_OFFSETOF, [ [offset of $2 in $1], [AS_TR_SH([ac_cv_offsetof_$1_$2])], [(long int) (offsetof ($1, $2))], - [PSI_INCLUDES], + PSI_INCLUDES, [AC_MSG_FAILURE([cannot compute offsetof ($1, $2)])] ) AC_DEFINE_UNQUOTED( @@ -439,6 +519,13 @@ AC_DEFUN(PSI_CHECK_LIBFFI, [ AC_MSG_WARN([Could not find libffi, please provide the base install path]) fi fi + + save_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS $INCLUDES" + AC_CHECK_DECL(FFI_STDCALL,[AC_DEFINE([HAVE_FFI_STDCALL],[1],[ ])],,[#include "ffi.h"]) + AC_CHECK_DECL(FFI_FASTCALL,[AC_DEFINE([HAVE_FFI_FASTCALL],[1],[ ])],,[#include "ffi.h"]) + CFLAGS=$save_CFLAGS + PHP_CHECK_LIBRARY(ffi, ffi_closure_alloc, [ PHP_CHECK_LIBRARY(ffi, ffi_prep_closure_loc, [ AC_DEFINE(PSI_HAVE_FFI_PREP_CLOSURE_LOC, 1, [ ])