Index: ossp-pkg/sa/aclocal.m4 RCS File: /v/ossp/cvs/ossp-pkg/sa/aclocal.m4,v rcsdiff -q -kk '-r1.11' '-r1.12' -u '/v/ossp/cvs/ossp-pkg/sa/aclocal.m4,v' 2>/dev/null --- aclocal.m4 2004/06/26 11:38:20 1.11 +++ aclocal.m4 2004/06/26 11:59:00 1.12 @@ -237,112 +237,3 @@ AC_MSG_RESULT([$with_$2]) ])dnl -dnl ## -dnl ## Check for C99 va_copy() implementation -dnl ## (and provide fallback implementation if neccessary) -dnl ## -dnl ## configure.in: -dnl ## AC_CHECK_VA_COPY -dnl ## foo.c: -dnl ## #include "config.h" -dnl ## [...] -dnl ## va_copy(d,s) -dnl ## -dnl ## This check is rather complex: first because we really have to -dnl ## try various possible implementations in sequence and second, we -dnl ## cannot define a macro in config.h with parameters directly. -dnl ## - -dnl # test program for va_copy() implementation -changequote(<<,>>) -m4_define(__va_copy_test, <<[ -#include -#include -#include -#define DO_VA_COPY(d, s) $1 -void test(char *str, ...) -{ - va_list ap, ap2; - int i; - va_start(ap, str); - DO_VA_COPY(ap2, ap); - for (i = 1; i <= 9; i++) { - int k = (int)va_arg(ap, int); - if (k != i) - abort(); - } - DO_VA_COPY(ap, ap2); - for (i = 1; i <= 9; i++) { - int k = (int)va_arg(ap, int); - if (k != i) - abort(); - } - va_end(ap); -} -int main(int argc, char *argv[]) -{ - test("test", 1, 2, 3, 4, 5, 6, 7, 8, 9); - exit(0); -} -]>>) -changequote([,]) - -dnl # test driver for va_copy() implementation -m4_define(__va_copy_check, [ - AH_VERBATIM($1, -[/* Predefined possible va_copy() implementation (id: $1) */ -#define __VA_COPY_USE_$1(d, s) $2]) - if test ".$ac_cv_va_copy" = .; then - AC_TRY_RUN(__va_copy_test($2), [ac_cv_va_copy="$1"]) - fi -]) - -dnl # Autoconf check for va_copy() implementation checking -AC_DEFUN(AC_CHECK_VA_COPY,[ - dnl # provide Autoconf display check message - AC_MSG_CHECKING(for va_copy() function) - dnl # check for various implementations in priorized sequence - AC_CACHE_VAL(ac_cv_va_copy, [ - ac_cv_va_copy="" - dnl # 1. check for standardized C99 macro - __va_copy_check(C99, [va_copy((d), (s))]) - dnl # 2. check for alternative/deprecated GCC macro - __va_copy_check(GCM, [VA_COPY((d), (s))]) - dnl # 3. check for internal GCC macro (high-level define) - __va_copy_check(GCH, [__va_copy((d), (s))]) - dnl # 4. check for internal GCC macro (built-in function) - __va_copy_check(GCB, [__builtin_va_copy((d), (s))]) - dnl # 5. check for assignment approach (assuming va_list is a struct) - __va_copy_check(ASS, [do { (d) = (s); } while (0)]) - dnl # 6. check for assignment approach (assuming va_list is a pointer) - __va_copy_check(ASP, [do { *(d) = *(s); } while (0)]) - dnl # 7. check for memory copying approach (assuming va_list is a struct) - __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))]) - dnl # 8. check for memory copying approach (assuming va_list is a pointer) - __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))]) - if test ".$ac_cv_va_copy" = .; then - AC_ERROR([no working implementation found]) - fi - ]) - dnl # optionally activate the fallback implementation - if test ".$ac_cv_va_copy" = ".C99"; then - AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy() macro exists (and no fallback implementation is required)]) - fi - dnl # declare which fallback implementation to actually use - AC_DEFINE_UNQUOTED([__VA_COPY_USE], [__VA_COPY_USE_$ac_cv_va_copy], - [Define to id of used va_copy() implementation]) - dnl # provide activation hook for fallback implementation - AH_VERBATIM([__VA_COPY_ACTIVATION], -[/* Optional va_copy() implementation activation */ -#ifndef HAVE_VA_COPY -#define va_copy(d, s) __VA_COPY_USE(d, s) -#endif -]) - dnl # provide Autoconf display result message - if test ".$ac_cv_va_copy" = ".C99"; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no (using fallback implementation)]) - fi -]) - Index: ossp-pkg/sa/configure.ac RCS File: /v/ossp/cvs/ossp-pkg/sa/configure.ac,v rcsdiff -q -kk '-r1.15' '-r1.16' -u '/v/ossp/cvs/ossp-pkg/sa/configure.ac,v' 2>/dev/null --- configure.ac 2004/06/26 11:38:20 1.15 +++ configure.ac 2004/06/26 11:59:00 1.16 @@ -44,8 +44,6 @@ sinclude(sa.ac) SA_CHECK_ALL -AC_CHECK_VA_COPY - AC_CHECK_EXTLIB([OSSP ex], ex, __ex_ctx, ex.h, [AC_DEFINE(WITH_EX, 1, [Define to 1 if building with OSSP ex])]) Index: ossp-pkg/sa/sa.ac RCS File: /v/ossp/cvs/ossp-pkg/sa/sa.ac,v rcsdiff -q -kk '-r1.16' '-r1.17' -u '/v/ossp/cvs/ossp-pkg/sa/sa.ac,v' 2>/dev/null --- sa.ac 2004/04/02 18:21:07 1.16 +++ sa.ac 2004/06/26 11:59:00 1.17 @@ -95,6 +95,116 @@ ) ])dnl +dnl ## +dnl ## Check for C99 va_copy() implementation +dnl ## (and provide fallback implementation if neccessary) +dnl ## +dnl ## configure.in: +dnl ## SA_CHECK_VA_COPY +dnl ## foo.c: +dnl ## #include "config.h" +dnl ## [...] +dnl ## va_copy(d,s) +dnl ## +dnl ## This check is rather complex: first because we really have to +dnl ## try various possible implementations in sequence and second, we +dnl ## cannot define a macro in config.h with parameters directly. +dnl ## + +dnl # test program for va_copy() implementation +changequote(<<,>>) +m4_define(__va_copy_test, <<[ +#include +#include +#include +#define DO_VA_COPY(d, s) $1 +void test(char *str, ...) +{ + va_list ap, ap2; + int i; + va_start(ap, str); + DO_VA_COPY(ap2, ap); + for (i = 1; i <= 9; i++) { + int k = (int)va_arg(ap, int); + if (k != i) + abort(); + } + DO_VA_COPY(ap, ap2); + for (i = 1; i <= 9; i++) { + int k = (int)va_arg(ap, int); + if (k != i) + abort(); + } + va_end(ap); +} +int main(int argc, char *argv[]) +{ + test("test", 1, 2, 3, 4, 5, 6, 7, 8, 9); + exit(0); +} +]>>) +changequote([,]) + +dnl # test driver for va_copy() implementation +m4_define(__va_copy_check, [ + AH_VERBATIM($1, +[/* Predefined possible va_copy() implementation (id: $1) */ +#define __VA_COPY_USE_$1(d, s) $2]) + if test ".$ac_cv_va_copy" = .; then + AC_TRY_RUN(__va_copy_test($2), [ac_cv_va_copy="$1"]) + fi +]) + +dnl # Autoconf check for va_copy() implementation checking +AC_DEFUN(SA_CHECK_VA_COPY,[ + dnl # provide Autoconf display check message + AC_MSG_CHECKING(for va_copy() function) + dnl # check for various implementations in priorized sequence + AC_CACHE_VAL(ac_cv_va_copy, [ + ac_cv_va_copy="" + dnl # 1. check for standardized C99 macro + __va_copy_check(C99, [va_copy((d), (s))]) + dnl # 2. check for alternative/deprecated GCC macro + __va_copy_check(GCM, [VA_COPY((d), (s))]) + dnl # 3. check for internal GCC macro (high-level define) + __va_copy_check(GCH, [__va_copy((d), (s))]) + dnl # 4. check for internal GCC macro (built-in function) + __va_copy_check(GCB, [__builtin_va_copy((d), (s))]) + dnl # 5. check for assignment approach (assuming va_list is a struct) + __va_copy_check(ASS, [do { (d) = (s); } while (0)]) + dnl # 6. check for assignment approach (assuming va_list is a pointer) + __va_copy_check(ASP, [do { *(d) = *(s); } while (0)]) + dnl # 7. check for memory copying approach (assuming va_list is a struct) + __va_copy_check(CPS, [memcpy((void *)&(d), (void *)&(s)), sizeof((s))]) + dnl # 8. check for memory copying approach (assuming va_list is a pointer) + __va_copy_check(CPP, [memcpy((void *)(d), (void *)(s)), sizeof(*(s))]) + if test ".$ac_cv_va_copy" = .; then + AC_ERROR([no working implementation found]) + fi + ]) + dnl # optionally activate the fallback implementation + if test ".$ac_cv_va_copy" = ".C99"; then + AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy() macro exists (and no fallback implementation is required)]) + fi + dnl # declare which fallback implementation to actually use + AC_DEFINE_UNQUOTED([__VA_COPY_USE], [__VA_COPY_USE_$ac_cv_va_copy], + [Define to id of used va_copy() implementation]) + dnl # provide activation hook for fallback implementation + AH_VERBATIM([__VA_COPY_ACTIVATION], +[/* Optional va_copy() implementation activation */ +#ifndef HAVE_VA_COPY +#define va_copy(d, s) __VA_COPY_USE(d, s) +#endif +]) + dnl # provide Autoconf display result message + if test ".$ac_cv_va_copy" = ".C99"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no (using fallback implementation)]) + fi +]) + + dnl # Check for anything OSSP SA wants to know dnl # configure.in: dnl # SA_CHECK_ALL @@ -121,5 +231,8 @@ SA_CHECK_TYPEDEF(ssize_t, sys/types.h) SA_CHECK_SOCKOPT(SO_RCVTIMEO) SA_CHECK_SOCKOPT(SO_SNDTIMEO) + + dnl # check for va_copy() + SA_CHECK_VA_COPY ])