From d78db4a0363583f7d02b6f70cb234d02a2b6a2d4 Mon Sep 17 00:00:00 2001 From: jb Date: Thu, 24 Feb 2011 14:51:17 +0000 Subject: PR 47802 Test for POSIX getpwuid_r git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@170471 138bc75d-0d04-0410-961f-82ee72b054a4 --- libgfortran/ChangeLog | 9 ++++++++ libgfortran/config.h.in | 3 +++ libgfortran/configure | 50 +++++++++++++++++++++++++++++++++++++++++ libgfortran/configure.ac | 20 +++++++++++++++++ libgfortran/intrinsics/getlog.c | 4 ++-- 5 files changed, 84 insertions(+), 2 deletions(-) diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 1de3474efa8..0b0a27e9c8e 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,12 @@ +2011-02-24 Janne Blomqvist + + PR libfortran/47802 + * configure.ac: Add test for POSIX getpwuid_r. + * intrinsics/getlog.c (getlog): CPP test for + HAVE_POSIX_GETPWUID_R. + * config.h.in: Regenerated. + * configure: Regenerated. + 2011-02-23 Jerry DeLisle PR libgfortran/47567 diff --git a/libgfortran/config.h.in b/libgfortran/config.h.in index fdf502b870c..67fb5f075a7 100644 --- a/libgfortran/config.h.in +++ b/libgfortran/config.h.in @@ -624,6 +624,9 @@ /* Define to 1 if you have the `pipe' function. */ #undef HAVE_PIPE +/* Define to 1 if we have POSIX getpwuid_r which takes 5 arguments. */ +#undef HAVE_POSIX_GETPWUID_R + /* libm includes pow */ #undef HAVE_POW diff --git a/libgfortran/configure b/libgfortran/configure index 9d3c891ca80..834bd8c51be 100755 --- a/libgfortran/configure +++ b/libgfortran/configure @@ -25428,6 +25428,56 @@ FPU_HOST_HEADER=config/${fpu_host}.h IEEE_FLAGS="${ieee_flags}" + +# Check for POSIX getpwuid_r +# +# There are two versions of getpwuid_r, the POSIX one with 5 +# arguments, and another one with 4 arguments used by at least HP-UX +# 10.2. +if test "$ac_cv_func_getpwuid_r" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking POSIX version of getpwuid_r with 5 arguments" >&5 +$as_echo_n "checking POSIX version of getpwuid_r with 5 arguments... " >&6; } +if test "${libgfor_cv_posix_getpwuid_r+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + if test x$gcc_no_link = xyes; then + as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5 +fi +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#include +int +main () +{ + + getpwuid_r(0, NULL, NULL, 0, NULL); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + libgfor_cv_posix_getpwuid_r="yes" +else + libgfor_cv_posix_getpwuid_r="no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgfor_cv_posix_getpwuid_r" >&5 +$as_echo "$libgfor_cv_posix_getpwuid_r" >&6; } +fi +if test "$libgfor_cv_posix_getpwuid_r" = "yes"; then + +$as_echo "#define HAVE_POSIX_GETPWUID_R 1" >>confdefs.h + +fi + + # Check out attribute support. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the target supports hidden visibility" >&5 diff --git a/libgfortran/configure.ac b/libgfortran/configure.ac index 816165988ce..d25a067e127 100644 --- a/libgfortran/configure.ac +++ b/libgfortran/configure.ac @@ -513,6 +513,26 @@ AC_SUBST(FPU_HOST_HEADER) IEEE_FLAGS="${ieee_flags}" AC_SUBST(IEEE_FLAGS) + +# Check for POSIX getpwuid_r +# +# There are two versions of getpwuid_r, the POSIX one with 5 +# arguments, and another one with 4 arguments used by at least HP-UX +# 10.2. +if test "$ac_cv_func_getpwuid_r" = "yes"; then + AC_CACHE_CHECK([POSIX version of getpwuid_r with 5 arguments], libgfor_cv_posix_getpwuid_r, [ + AC_LINK_IFELSE([AC_LANG_PROGRAM([ +#include +#include +#include ], [ + getpwuid_r(0, NULL, NULL, 0, NULL); + ])], [libgfor_cv_posix_getpwuid_r="yes"], [libgfor_cv_posix_getpwuid_r="no"])]) +fi +if test "$libgfor_cv_posix_getpwuid_r" = "yes"; then + AC_DEFINE([HAVE_POSIX_GETPWUID_R], [1], [Define to 1 if we have POSIX getpwuid_r which takes 5 arguments.]) +fi + + # Check out attribute support. LIBGFOR_CHECK_ATTRIBUTE_VISIBILITY LIBGFOR_CHECK_ATTRIBUTE_DLLEXPORT diff --git a/libgfortran/intrinsics/getlog.c b/libgfortran/intrinsics/getlog.c index 299ac5a368d..9e5c8de4677 100644 --- a/libgfortran/intrinsics/getlog.c +++ b/libgfortran/intrinsics/getlog.c @@ -75,7 +75,7 @@ PREFIX(getlog) (char * login, gfc_charlen_type login_len) memset (login, ' ', login_len); /* Blank the string. */ -#if defined(HAVE_GETPWUID_R) && defined(HAVE_GETEUID) +#if defined(HAVE_POSIX_GETPWUID_R) && defined(HAVE_GETEUID) struct passwd pwd; struct passwd *result; char *buf; @@ -113,7 +113,7 @@ PREFIX(getlog) (char * login, gfc_charlen_type login_len) memcpy (login, p, p_len); cleanup: -#ifdef HAVE_GETPWUID_R +#if defined (HAVE_POSIX_GETPWUID_R) && defined(HAVE_GETEUID) free (buf); #else ; -- cgit v1.2.1