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>
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");
]])],[
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)
#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"
#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"
# 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"
+++ /dev/null
-#if defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1
-#include <crypt.h>
-#endif
#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 */
# include <shadow.h>
#endif
-#if defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1
+#ifdef HAVE_CRYPT_H
#include <crypt.h>
#endif