diff options
author | Alain Magloire <alainm@rcsm.ee.mcgill.ca> | 2001-03-04 05:29:16 +0000 |
---|---|---|
committer | Alain Magloire <alainm@rcsm.ee.mcgill.ca> | 2001-03-04 05:29:16 +0000 |
commit | a1d4c778d77635386fcf96264a3d654b7d6beaf6 (patch) | |
tree | e2567c820cae54521298f310b96016a40476daca /m4/strerror_r.m4 | |
parent | 5b1a015f03754cb738c6e993e32df16a90037874 (diff) | |
download | grep-a1d4c778d77635386fcf96264a3d654b7d6beaf6.tar.gz |
Much taking from fetish an gnu tar.
Diffstat (limited to 'm4/strerror_r.m4')
-rw-r--r-- | m4/strerror_r.m4 | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/m4/strerror_r.m4 b/m4/strerror_r.m4 new file mode 100644 index 00000000..60832623 --- /dev/null +++ b/m4/strerror_r.m4 @@ -0,0 +1,69 @@ +#serial 1002, but ported to autoconf 2.13 by eggert +# Experimental replacement for the function in the latest CVS autoconf. +# If the compile-test says strerror_r doesn't work, then resort to a +# `run'-test that works on BeOS and segfaults on DEC Unix. +# Use with the error.c file in ../lib. + +undefine([AC_FUNC_STRERROR_R]) + +# AC_FUNC_STRERROR_R +# ------------------ +AC_DEFUN([AC_FUNC_STRERROR_R], +[jm_CHECK_DECLARATION(strerror_r, [#include <string.h>]) +test $jm_cv_func_decl_strerror_r != yes +AC_DEFINE_UNQUOTED(HAVE_DECL_STRERROR_R, $?, + [Define to 1 if strerror_r is declared.]) +AC_CHECK_FUNCS([strerror_r]) +if test $ac_cv_func_strerror_r = yes; then + AC_CHECK_HEADERS(string.h) + AC_CACHE_CHECK([for working strerror_r], + ac_cv_func_strerror_r_works, + [ + AC_TRY_COMPILE( + [ +# include <stdio.h> +# if HAVE_STRING_H +# include <string.h> +# endif + ], + [ + char buf[100]; + char x = *strerror_r (0, buf, sizeof buf); + ], + ac_cv_func_strerror_r_works=yes, + ac_cv_func_strerror_r_works=no + ) + if test $ac_cv_func_strerror_r_works = no; then + # strerror_r seems not to work, but now we have to choose between + # systems that have relatively inaccessible declarations for the + # function. BeOS and DEC UNIX 4.0 fall in this category, but the + # former has a strerror_r that returns char*, while the latter + # has a strerror_r that returns int. + # This test should segfault on the DEC system. + AC_TRY_RUN( + [ +# include <stdio.h> +# include <string.h> +# include <ctype.h> + + extern char *strerror_r (); + + int + main () + { + char buf[100]; + char x = *strerror_r (0, buf, sizeof buf); + exit (!isalpha (x)); + } + ], + ac_cv_func_strerror_r_works=yes, + ac_cv_func_strerror_r_works=no, + ac_cv_func_strerror_r_works=no) + fi + ]) + if test $ac_cv_func_strerror_r_works = yes; then + AC_DEFINE_UNQUOTED(HAVE_WORKING_STRERROR_R, 1, + [Define to 1 if strerror_r returns a string.]) + fi +fi +])# AC_FUNC_STRERROR_R |