X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=config.m4;h=83824352122d5c72335f5a37203bd726e9602a94;hb=a6ffb2bfbf83ef3511cc356bd931d460feabe7a2;hp=ee54dac1f5b12d9a809dd7fe0d0771fd0d258ae4;hpb=207ff7bc85e967235f0ad1ffbf47c0f85f375063;p=m6w6%2Fext-psi diff --git a/config.m4 b/config.m4 index ee54dac..8382435 100644 --- a/config.m4 +++ b/config.m4 @@ -92,7 +92,8 @@ if test "$PHP_PSI" != "no"; then ]) psi_type_pair() { # (type, size) - local psi_type_lower=`tr A-Z a-z <<<$1` + local psi_type_name=`tr -cd A-Za-z <<<$1` + local psi_type_lower=`tr A-Z a-z <<<$psi_type_name` case $psi_type_lower in int*|uint*) local psi_type_upper=`tr a-z A-Z <<<$1` @@ -103,7 +104,7 @@ if test "$PHP_PSI" != "no"; then echo "PSI_T_STRUCT, \"$2\"" ;; *) - echo "PSI_T_NAME, \"$1\"" + echo "PSI_T_NAME, \"$psi_type_name\"" ;; esac } @@ -192,33 +193,39 @@ if test "$PHP_PSI" != "no"; then AC_DEFINE_UNQUOTED( AS_TR_CPP(offsetof_$1_$2), $AS_TR_SH([ac_cv_offsetof_$1_$2]), - [The offset of `$1' in `$2', as computed by offsetof.] + [The offset of `$2' in `$1', as computed by offsetof.] ) ]) dnl PSI_STRUCT(name, members, member type cases, includes) PSI_STRUCTS= AC_DEFUN(PSI_STRUCT, [ + AC_CHECK_SIZEOF(struct $1, [], PSI_INCLUDES_DEFAULT($4)) + psi_struct_size=$ac_cv_sizeof_struct_$1 psi_struct_members= m4_foreach(member, [$2], [ AC_CHECK_MEMBER(struct $1.member, [ - case member in - $3 - *) psi_member_type=int ;; - esac + psi_member_name=member AC_CHECK_SIZEOF(struct_$1[_]member, [], PSI_INCLUDES_DEFAULT($4, [#define struct_$1_]member ((struct $1 *)0)->member )) + psi_member_size=$ac_cv_sizeof_struct_$1[]_[]member PSI_CHECK_OFFSETOF(struct $1, member, PSI_INCLUDES_DEFAULT($4)) + psi_member_offset=$ac_cv_offsetof_struct_$1[]_[]member + # type + case member in + $3 + *) psi_member_type=int ;; + esac # pointer level psi_struct_member_pl=`echo $psi_member_type | tr -cd '*' | wc -c` # array size - psi_struct_member_as=`echo $psi_member_type | $AWK -F'\x5b\x5d\x5b\x5d' 'END {print 0} /\\x5b\x5b\x5b:digit:\x5d\x5d+\\x5d/ {print$[]2; exit}'` + psi_struct_member_as=`echo $psi_member_type | $AWK -F'\x5b\x5d\x5b\x5d' 'END {if(!found)print 0} /\\x5b\x5b\x5b:digit:\x5d\x5d+\\x5d/ {found=1; print$[]2}'` if test $psi_struct_member_as -gt 0 then psi_struct_member_pl=`expr $psi_struct_member_pl + 1` fi - psi_struct_member="{`psi_type_pair $psi_member_type $ac_cv_sizeof_struct_$1[]_[]member`, \"[]member[]\", $ac_cv_offsetof_struct_$1[]_[]member, $ac_cv_sizeof_struct_$1[]_[]member, $psi_struct_member_pl, $psi_struct_member_as}" + psi_struct_member="{`psi_type_pair $psi_member_type $psi_member_size`, \"$psi_member_name\", $psi_member_offset, $psi_member_size, $psi_struct_member_pl, $psi_struct_member_as}" if test "$psi_struct_members" then psi_struct_members="$psi_struct_members, $psi_struct_member" @@ -227,7 +234,27 @@ if test "$PHP_PSI" != "no"; then fi ], [], PSI_INCLUDES_DEFAULT($4)) ]) - PSI_STRUCTS="{\"$1\", {$psi_struct_members}}, $PSI_STRUCTS" + PSI_STRUCTS="{\"$1\", $psi_struct_size, {$psi_struct_members}}, $PSI_STRUCTS" + ]) + + AC_PROG_NM + AC_PROG_AWK + PSI_FUNCS= + dnl PSI_FUNC(fn, decl) + AC_DEFUN(PSI_FUNC, [ + AC_CHECK_FUNC($1, [ + AC_MSG_CHECKING(for redirection of function $1) + psi_symbol=$1 + psi_symbol_redirect= + AC_TRY_LINK_FUNC($1, [ + psi_symbol_redirect=`$NM -g conftest$ac_exeext | $AWK -F" *|@" '/_main/ {next} / U / {print$[]3}'` + ]) + AC_MSG_RESULT($psi_symbol_redirect) + if test "$psi_symbol_redirect" && test "$psi_symbol_redirect" != "$psi_symbol" + then + PSI_FUNCS="{\"$psi_symbol\", (void *) $psi_symbol}, $PSI_FUNCS" + fi + ]) ]) AC_TYPE_INT8_T @@ -357,6 +384,22 @@ if test "$PHP_PSI" != "no"; then PSI_CONST(RAND_MAX, int) PSI_CONST(MB_CUR_MAX, int) dnl sys/stat.h + PSI_FUNC(chmod) + PSI_FUNC(fchmod) + PSI_FUNC(fchmodat) + PSI_FUNC(fstat) + PSI_FUNC(fstatat) + PSI_FUNC(futimens) + PSI_FUNC(lstat) + PSI_FUNC(mkdir) + PSI_FUNC(mkdirat) + PSI_FUNC(mkfifo) + PSI_FUNC(mkfifoat) + PSI_FUNC(mknod) + PSI_FUNC(mknodat) + PSI_FUNC(stat) + PSI_FUNC(umask) + PSI_FUNC(utimensat) PSI_STRUCT(stat, [ [st_dev], [st_ino], @@ -374,7 +417,8 @@ if test "$PHP_PSI" != "no"; then [st_blocks], [st_flags], [st_gen]], [ - st_?tim*) psi_member_type="struct timespec" ;; + st_?tim) psi_member_type="struct timespec" ;; + st_*timespec) psi_member_type="struct timespec" ;; ], sys/stat.h) PSI_CONST(S_IFMT, int, sys/stat.h) PSI_CONST(S_IFBLK, int, sys/stat.h) @@ -417,6 +461,14 @@ if test "$PHP_PSI" != "no"; then PSI_CONST(ITIMER_REAL, int, sys/time.h) PSI_CONST(ITIMER_VIRTUAL, int, sys/time.h) PSI_CONST(ITIMER_PROF, int, sys/time.h) + dnl sys/times.h + PSI_FUNC(times) + PSI_STRUCT(tms, [ + [tms_utime], + [tms_stime], + [tms_cutime], + [tms_cstime]], [ + ], sys/times.h) dnl sys/types.h PSI_TYPE(blkcnt_t, int) PSI_TYPE(blksize_t, int) @@ -438,6 +490,17 @@ if test "$PHP_PSI" != "no"; then PSI_TYPE(time_t, int) PSI_TYPE(timer_t, int) PSI_TYPE(uid_t) + dnl sys/utsname.h + PSI_FUNC(uname) + PSI_STRUCT(utsname, [ + [sysname], + [nodename], + [release], + [version], + [machine], + [domainname]], [ + *) psi_member_type="char@<:@$psi_member_size@:>@" ;; + ], sys/utsname.h) dnl time.h PSI_STRUCT(tm, [ [tm_sec], @@ -473,6 +536,7 @@ if test "$PHP_PSI" != "no"; then ]) + AC_DEFINE_UNQUOTED(PHP_PSI_FUNCS, $PSI_FUNCS, Redirected functions) AC_DEFINE_UNQUOTED(PHP_PSI_TYPES, $PSI_TYPES, Predefined types) AC_DEFINE_UNQUOTED(PHP_PSI_CONSTS, $PSI_CONSTS, Predefined constants) AC_DEFINE_UNQUOTED(PHP_PSI_STRUCTS, $PSI_STRUCTS, Predefined structs)