X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=m4%2Fpsi%2Fpsi_decl.m4;h=d699dd80d2db65345115003fd71afe5a8cbc0336;hp=ae44e73e89e85fb4440ea2efecd80302f7af666d;hb=f090ccb51eb2ecc92a6cca8325c77d688cbbb61d;hpb=2f08002ac0b6de75b0ecb6fe57cbbc70cb2424ae diff --git a/m4/psi/psi_decl.m4 b/m4/psi/psi_decl.m4 index ae44e73..d699dd8 100644 --- a/m4/psi/psi_decl.m4 +++ b/m4/psi/psi_decl.m4 @@ -1,38 +1,22 @@ # psi_add_redir(name, symbol) -# Add a function redirection to $PSI_REDIRS. +# Add a function redirection to $PSI_REDIRS_H. psi_add_redir() { - cat >>$PSI_REDIRS <>$PSI_FN_DECLS <>$PSI_VA_DECLS <>$PSI_DECLS <@@:>@+U / {print$[]3; exit}'` - ]) - psi_cv_libc_main=$psi_libc_main - ]) -]) - -dnl PSI_DECL_ARGS(decl args) +dnl PSI_DECL_ARGS(decl func, decl args, options) dnl INTERNAL: build psi_decl_args AC_DEFUN(PSI_DECL_ARGS, [ psi_decl_args= - PSI_DECL_ARG($1) + PSI_DECL_ARG([$1], [$3]) m4_case([$2], [(void)], [], [()], [], [], [], - [m4_map_args_sep([PSI_DECL_ARG(m4_normalize(], [))], [], m4_bregexp([$2], [(\(.*\))], [\1]))]) + [m4_map_args_sep( + [PSI_DECL_ARG(m4_normalize(], + [), [0])], [], m4_bregexp([$2], [(\(.*\))], [\1]))]) ]) -dnl PSI_DECL_ARG(decl arg) +dnl PSI_DECL_ARG(decl arg, options) dnl INTERNAL: build psi_decl_args AC_DEFUN(PSI_DECL_ARG, [ - m4_define([member_name], PSI_VAR_NAME($1)) - m4_define([member_type], PSI_VAR_TYPE($1)) + m4_define([member_name], PSI_VAR_NAME([$1])) + m4_define([member_type], PSI_VAR_TYPE([$1])) PSI_TYPE_INDIRECTION([$1],, pl, as) if test -n "$psi_decl_args"; then psi_decl_args="$psi_decl_args, " fi - psi_decl_args="[$psi_decl_args{]PSI_TYPE_PAIR(member_type)[, \"]member_name[\",] $pl, $as[}]" + psi_decl_args="[$psi_decl_args{]ifelse([$2],,DECL_KIND_STD,[ifelse([$2],0,0,AS_TR_CPP([DECL_KIND_$2]))])[, ]PSI_TYPE_PAIR(member_type)[, \"]member_name[\",] $pl, $as[}]" ]) dnl PSI_DECL(type func, args, flags, libs) dnl Check for a function or macro declaration and a possible asm redirection. -dnl Adds a pre-defined (vararg) decl to $PSI_VA_DECLS/$PSI_DECLS. +dnl Adds a pre-defined (vararg) decl to $PSI_VA_DECLS_H/$PSI_DECLS_H. dnl Calls PSI_MACRO if PSI_FUNC fails. AC_DEFUN(PSI_DECL, [ - AC_REQUIRE([PSI_FUNC_LIBC_MAIN])dnl - - PSI_DECL_ARGS($1, $2) + PSI_DECL_ARGS($1, $2, $3) psi_symbol="PSI_VAR_NAME($1)" AC_CACHE_CHECK(for PSI_VAR_NAME($1), [psi_cv_fn_]PSI_VAR_NAME($1), [ @@ -95,43 +66,48 @@ AC_DEFUN(PSI_DECL, [ decl_save_LIBS=$LIBS LIBS=$lib AC_TRY_LINK(PSI_INCLUDES, [ - void (*fn)(void) = (void (*)(void)) $psi_symbol; (*fn)() + void (*fn)(long, long, long) = (void (*)(long,long,long)) $psi_symbol; + fn(1,2,3); ], [ psi_symbol_redirect=`nm -g conftest$ac_exeext | $AWK -F ' *|@' '/^@<:@@<:@:space:@:>@@:>@+U '$psi_cv_libc_main'/ {next} /^@<:@@<:@:space:@:>@@:>@+U / {print$[]3; exit}'` ]) LIBS=$decl_save_LIBS - + if test -n "$psi_symbol_redirect"; then if test -n "$lib"; then psi_decl_check="$psi_symbol_redirect in $lib" else - psi_decl_check="$psi_symbol_redirect" + psi_decl_check="$psi_symbol_redirect" fi break fi done [psi_cv_fn_]PSI_VAR_NAME($1)=$psi_decl_check ]) - + psi_symbol_redirect=`AS_ECHO("$[psi_cv_fn_]PSI_VAR_NAME($1)") | $AWK -F " in " '{print [$]1}'` psi_symbol_libflag=`AS_ECHO("$[psi_cv_fn_]PSI_VAR_NAME($1)") | $AWK -F " in " '{print [$]2}'` - + if test -n "$psi_symbol_libflag"; then if ! expr "X$LIBS" : "X.*\b$psi_symbol_libflag\b" >/dev/null; then LIBS="$psi_symbol_libflag $LIBS" fi fi - + case "$psi_symbol_redirect" in "$psi_symbol"|"_$psi_symbol") - case "$PHP_DEBUG-$3" in - "1-") + case "$PSI_EXTRA_REDIRS-$3" in + "true-") PSI_MACRO($1, $2, [ psi_add_decl "$psi_decl_args" ]) ;; *) - psi_add_decl "$psi_decl_args" $3 + if test -n "$psi_symbol_libflag" + then + PSI_REDIR($psi_symbol) + fi + psi_add_decl "$psi_decl_args" ;; esac ;; @@ -146,7 +122,7 @@ AC_DEFUN(PSI_DECL, [ ;; *) PSI_REDIR($psi_symbol) - psi_add_decl "$psi_decl_args" $3 + psi_add_decl "$psi_decl_args" ;; esac ])