On Friday 14 April 2000, at 13 h 55, the keyboard of Stephane Bortzmeyer <[EMAIL PROTECTED]> wrote: > Does anyone have an already existing macro to check the types of sys_nerr and > sys_errlist? My hand-crafted config.h contains: Thanks to "T.E.Dickey" <[EMAIL PROTECTED]>, maintainer of vile and lynx, here is a working acinclude.m4. I now do in configure.in: CF_SYS_ERRLIST and in my headers: /* These entities should be in errno.h but some systems do not define them. */ #ifdef DECL_SYS_ERRLIST extern char *sys_errlist[]; #endif #ifdef DECL_SYS_NERR extern int sys_nerr; #endif
dnl --------------------------------------------------------------------------- dnl Make an uppercase version of a variable dnl $1=uppercase($2) AC_DEFUN([CF_UPPER], [ changequote(,)dnl $1=`echo $2 | tr '[a-z]' '[A-Z]'` changequote([,])dnl ])dnl dnl --------------------------------------------------------------------------- dnl Check for existence of external data in the current set of libraries. If dnl we can modify it, it's real enough. dnl $1 = the name to check dnl $2 = its type AC_DEFUN([CF_CHECK_EXTERN_DATA], [ AC_MSG_CHECKING(if external $1 exists) AC_CACHE_VAL(cf_cv_have_$1,[ AC_TRY_LINK([ #undef $1 extern $2 $1; ], [$1 = 2], [eval 'cf_cv_have_'$1'=yes'], [eval 'cf_cv_have_'$1'=no'])]) eval 'cf_result=$cf_cv_have_'$1 AC_MSG_RESULT($cf_result) if test "$cf_result" = yes ; then eval 'cf_result=HAVE_'$1 CF_UPPER(cf_result,$cf_result) AC_DEFINE_UNQUOTED($cf_result) fi ])dnl dnl --------------------------------------------------------------------------- dnl Check for data that is usually declared in <stdio.h> or <errno.h>, e.g., dnl the 'errno' variable. Define a DECL_xxx symbol if we must declare it dnl ourselves. dnl dnl (I would use AC_CACHE_CHECK here, but it will not work when called in a dnl loop from CF_SYS_ERRLIST). dnl dnl $1 = the name to check AC_DEFUN([CF_CHECK_ERRNO], [ AC_MSG_CHECKING(if external $1 is declared) AC_CACHE_VAL(cf_cv_dcl_$1,[ AC_TRY_COMPILE([ #ifdef HAVE_STDLIB_H #include <stdlib.h> #endif #include <stdio.h> #include <sys/types.h> #include <errno.h> ], [long x = (long) $1], [eval 'cf_cv_dcl_'$1'=yes'], [eval 'cf_cv_dcl_'$1'=no]') ]) eval 'cf_result=$cf_cv_dcl_'$1 AC_MSG_RESULT($cf_result) if test "$cf_result" = no ; then eval 'cf_result=DECL_'$1 CF_UPPER(cf_result,$cf_result) AC_DEFINE_UNQUOTED($cf_result) fi # It's possible (for near-UNIX clones) that the data doesn't exist CF_CHECK_EXTERN_DATA($1,int) ])dnl dnl --------------------------------------------------------------------------- dnl Check for declaration of sys_nerr and sys_errlist in one of stdio.h and dnl errno.h. Declaration of sys_errlist on BSD4.4 interferes with our dnl declaration. Reported by Keith Bostic. AC_DEFUN([CF_SYS_ERRLIST], [ for cf_name in sys_nerr sys_errlist do CF_CHECK_ERRNO($cf_name) done ])dnl