From: Todd C. Miller Date: Fri, 12 Mar 2010 10:26:01 +0000 (-0500) Subject: Change the sys_siglist check to use AC_CHECK_DECLS and also check X-Git-Tag: SUDO_1_8_0~831 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cb8696d67e0355f9438c89960d3384f2beda09c6;p=sudo Change the sys_siglist check to use AC_CHECK_DECLS and also check for _sys_siglist and__sys_siglist --- diff --git a/compat/strsignal.c b/compat/strsignal.c index 5aef0f553..859f6f5aa 100644 --- a/compat/strsignal.c +++ b/compat/strsignal.c @@ -20,15 +20,33 @@ #include #include +#if defined(HAVE_DECL_SYS_SIGLIST) +# define my_sys_siglist sys_siglist +#elif defined(HAVE_DECL__SYS_SIGLIST) +# define my_sys_siglist _sys_siglist +#elif defined(HAVE_DECL___SYS_SIGLIST) +# define my_sys_siglist __sys_siglist +#else +# error one of HAVE_DECL_SYS_SIGLIST, HAVE_DECL__SYS_SIGLIST, HAVE_DECL___SYS_SIGLIST must be defined +#endif + +#if !defined(NSIG) +# if defined(_NSIG) +# define NSIG _NSIG +# elif defined(__NSIG) +# define NSIG __NSIG +# else +# error one of NSIG, _NSIG, or __NSIG must be defined +# endif +#endif + /* * Get signal description string */ char * strsignal(int signo) { - extern const char *const sys_siglist[]; - if (signo > 0 && signo < NSIG) - return((char *)sys_siglist[signo]); + return((char *)my_sys_siglist[signo]); return("Unknown signal"); } diff --git a/config.h.in b/config.h.in index a00b62371..f15909fdf 100644 --- a/config.h.in +++ b/config.h.in @@ -85,6 +85,15 @@ /* Define to 1 if your `DIR' contains dd_fd. */ #undef HAVE_DD_FD +/* Define to 1 if you have the 'sys_siglist' declaration. */ +#undef HAVE_DECL_SYS_SIGLIST + +/* Define to 1 if you have the '_sys_siglist' declaration. */ +#undef HAVE_DECL__SYS_SIGLIST + +/* Define to 1 if you have the '__sys_siglist' declaration. */ +#undef HAVE_DECL___SYS_SIGLIST + /* Define to 1 if you have the `dgettext' function. */ #undef HAVE_DGETTEXT @@ -500,9 +509,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H -/* Define to 1 if you have the 'sys_siglist' symbol in libc. */ -#undef HAVE_SYS_SIGLIST - /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKIO_H diff --git a/configure b/configure index cf866c01f..82524ba66 100755 --- a/configure +++ b/configure @@ -21665,35 +21665,123 @@ _ACEOF else - { echo "$as_me:$LINENO: checking for sys_siglist" >&5 -echo $ECHO_N "checking for sys_siglist... $ECHO_C" >&6; } - if test "${sudo_cv_sys_siglist+set}" = set; then + { echo "$as_me:$LINENO: checking whether sys_siglist is declared" >&5 +echo $ECHO_N "checking whether sys_siglist is declared... $ECHO_C" >&6; } +if test "${ac_cv_have_decl_sys_siglist+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ - cat >conftest.$ac_ext <<_ACEOF +$ac_includes_default +#include + + +int +main () +{ +#ifndef sys_siglist + (void) sys_siglist; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_have_decl_sys_siglist=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_have_decl_sys_siglist=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_sys_siglist" >&5 +echo "${ECHO_T}$ac_cv_have_decl_sys_siglist" >&6; } +if test $ac_cv_have_decl_sys_siglist = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_SYS_SIGLIST 1 +_ACEOF + + + case " $LIBOBJS " in + *" strsignal.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS strsignal.$ac_objext" + ;; +esac + + cat >>confdefs.h <<\_ACEOF +#define HAVE_STRSIGNAL 1 +_ACEOF + + break + +else + cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_SYS_SIGLIST 0 +_ACEOF + + +fi +{ echo "$as_me:$LINENO: checking whether _sys_siglist is declared" >&5 +echo $ECHO_N "checking whether _sys_siglist is declared... $ECHO_C" >&6; } +if test "${ac_cv_have_decl__sys_siglist+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ +$ac_includes_default +#include + + int main () { -extern char *sys_siglist; char *hup = sys_siglist[1]; +#ifndef _sys_siglist + (void) _sys_siglist; +#endif + ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 + (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 @@ -21702,21 +21790,26 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - sudo_cv_sys_siglist=yes + } && test -s conftest.$ac_objext; then + ac_cv_have_decl__sys_siglist=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - sudo_cv_sys_siglist=no + ac_cv_have_decl__sys_siglist=no fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +{ echo "$as_me:$LINENO: result: $ac_cv_have_decl__sys_siglist" >&5 +echo "${ECHO_T}$ac_cv_have_decl__sys_siglist" >&6; } +if test $ac_cv_have_decl__sys_siglist = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL__SYS_SIGLIST 1 +_ACEOF + - if test "$sudo_cv_sys_siglist" = "yes"; then case " $LIBOBJS " in *" strsignal.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strsignal.$ac_objext" @@ -21724,16 +21817,101 @@ fi esac cat >>confdefs.h <<\_ACEOF -#define HAVE_SYS_SIGLIST 1 +#define HAVE_STRSIGNAL 1 +_ACEOF + + break + +else + cat >>confdefs.h <<_ACEOF +#define HAVE_DECL__SYS_SIGLIST 0 +_ACEOF + + +fi +{ echo "$as_me:$LINENO: checking whether __sys_siglist is declared" >&5 +echo $ECHO_N "checking whether __sys_siglist is declared... $ECHO_C" >&6; } +if test "${ac_cv_have_decl___sys_siglist+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ _ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +$ac_includes_default +#include + + +int +main () +{ +#ifndef __sys_siglist + (void) __sys_siglist; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_have_decl___sys_siglist=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_have_decl___sys_siglist=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_have_decl___sys_siglist" >&5 +echo "${ECHO_T}$ac_cv_have_decl___sys_siglist" >&6; } +if test $ac_cv_have_decl___sys_siglist = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL___SYS_SIGLIST 1 +_ACEOF + + + case " $LIBOBJS " in + *" strsignal.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS strsignal.$ac_objext" + ;; +esac cat >>confdefs.h <<\_ACEOF #define HAVE_STRSIGNAL 1 _ACEOF - fi - { echo "$as_me:$LINENO: result: $sudo_cv_sys_siglist" >&5 -echo "${ECHO_T}$sudo_cv_sys_siglist" >&6; } + break + +else + cat >>confdefs.h <<_ACEOF +#define HAVE_DECL___SYS_SIGLIST 0 +_ACEOF + + +fi + fi done diff --git a/configure.in b/configure.in index 27d64988c..7230243d5 100644 --- a/configure.in +++ b/configure.in @@ -2015,16 +2015,14 @@ dnl dnl Check for strsignal() or sys_siglist dnl AC_CHECK_FUNCS(strsignal, [], [ - AC_MSG_CHECKING([for sys_siglist]) - AC_CACHE_VAL(sudo_cv_sys_siglist, [ - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[extern char *sys_siglist; char *hup = sys_siglist[1];]])], [sudo_cv_sys_siglist=yes], [sudo_cv_sys_siglist=no])]) - if test "$sudo_cv_sys_siglist" = "yes"; then + AC_CHECK_DECLS([sys_siglist, _sys_siglist, __sys_siglist], [ AC_LIBOBJ(strsignal) - AC_DEFINE(HAVE_SYS_SIGLIST) AC_DEFINE(HAVE_STRSIGNAL) - fi - AC_MSG_RESULT($sudo_cv_sys_siglist) -]) + break + ], [], [ +AC_INCLUDES_DEFAULT +#include +])]) dnl dnl nsswitch.conf and its equivalents