build-sys: improve check for crypt

Check for crypt.h existence, and use it if available over using unistd.h
for which a certain feature level has to be set to export a definition
for crypt.  On Solaris this set causes a standards conflict in the
headers, because at the time of this check C99 mode is already enabled,
which implies certain standards non-compatible with _XOPEN_SOURCE.

 92  #define _XOPEN_SOURCE
 93  #include <unistd.h>

configure:16259: gcc -std=gnu99 -c -g -O2  conftest.c >&5
In file included from /usr/include/unistd.h:18,
                 from conftest.c:93:
/prefix/gentoo/usr/lib/gcc/i386-pc-solaris2.10/4.4.5/include-fixed/sys/feature_tests.h:341:2: error: #error "Compiler or options invalid for pre-UNIX 03 X/Open applications and pre-2001 POSIX applications"

configure.ac: improve crypt check
login-utils/my_crypt.h: replace old GNU_LIBRARY check with autoconf
define for crypt.h

[kzak@redhat.com: - remove my_crypt.h]

Signed-off-by: Fabian Groffen <grobian@gentoo.org>
Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Fabian Groffen 2011-01-12 21:01:07 +01:00 committed by Karel Zak
parent aabe244176
commit 0aeb57aca3
8 changed files with 31 additions and 12 deletions

View File

@ -520,17 +520,28 @@ else
AM_CONDITIONAL(HAVE_UTEMPTER, false)
fi
# on Solaris, you can't mix and match standards, since we use c99
# aparently at this stage, XOPEN_SOURCE will conflict. As workaround,
# check for crypt.h and use that without XOPEN_SOURCE.
AC_CHECK_HEADERS([crypt.h])
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#ifdef HAVE_CRYPT_H
#include <crypt.h>
#else
#define _XOPEN_SOURCE
#include <unistd.h>
#endif
]], [[
char *c = crypt("abc","pw");
]])],[],[
LIBS="$LIBS -lcrypt"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#ifdef HAVE_CRYPT_H
#include <crypt.h>
#else
#define _XOPEN_SOURCE
#include <unistd.h>
#endif
]], [[
char *c = crypt("abc","pw");
]])],[

View File

@ -34,10 +34,9 @@ login_ldadd_common =
chfn_SOURCES = chfn.c $(chfn_chsh_common)
chsh_SOURCES = chsh.c $(chfn_chsh_common)
chfn_chsh_common = islocal.c setpwnam.c islocal.h my_crypt.h setpwnam.h \
chfn_chsh_common = islocal.c setpwnam.c islocal.h setpwnam.h \
$(top_srcdir)/lib/env.c
login_SOURCES = login.c login.h my_crypt.h $(top_srcdir)/lib/setproctitle.c
newgrp_SOURCES = newgrp.c my_crypt.h
login_SOURCES = login.c login.h $(top_srcdir)/lib/setproctitle.c
vipw_SOURCES = vipw.c setpwnam.h
chfn_LDADD = $(login_ldadd_common)

View File

@ -34,7 +34,10 @@
#include <ctype.h>
#include <getopt.h>
#include "my_crypt.h"
#ifdef HAVE_CRYPT_H
#include <crypt.h>
#endif
#include "islocal.h"
#include "setpwnam.h"
#include "strutils.h"

View File

@ -33,8 +33,11 @@
#include <ctype.h>
#include <getopt.h>
#ifdef HAVE_CRYPT_H
#include <crypt.h>
#endif
#include "c.h"
#include "my_crypt.h"
#include "islocal.h"
#include "setpwnam.h"
#include "nls.h"

View File

@ -111,8 +111,11 @@
# include <libaudit.h>
#endif
#ifdef HAVE_CRYPT_H
#include <crypt.h>
#endif
#include "pathnames.h"
#include "my_crypt.h"
#include "login.h"
#include "strutils.h"
#include "nls.h"

View File

@ -1,3 +0,0 @@
#if defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1
#include <crypt.h>
#endif

View File

@ -16,9 +16,12 @@
#include <errno.h>
#include <err.h>
#ifdef HAVE_CRYPT_H
#include <crypt.h>
#endif
#include "c.h"
#include "pathnames.h"
#include "my_crypt.h"
#include "nls.h"
/* try to read password from gshadow */

View File

@ -43,7 +43,7 @@
# include <shadow.h>
#endif
#if defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1
#ifdef HAVE_CRYPT_H
#include <crypt.h>
#endif