On Solaris 11.4, I see a compilation error:
In file included from /usr/include/sys/time.h:447:0,
from ../gllib/sys/time.h:39,
from /usr/include/sys/select.h:27,
from ../gllib/sys/select.h:36,
from /usr/include/sys/types.h:665,
from ../gllib/sys/types.h:39,
from ../gllib/utmp.h:26,
from ../../gltests/test-utmp-c++.cc:22:
../gllib/utmp.h: In member function 'gnulib::_gl_login_tty_wrapper::operator
gnulib::_gl_login_tty_wrapper::type() const':
../gllib/utmp.h:544:1: error: '::login_tty' has not been declared
_GL_CXXALIAS_SYS (login_tty, int, (int fd));
^
gmake[4]: *** [Makefile:24119: test-utmp-c++.o] Error 1
The cause is that Solaris 11.4 acquired the 'login_tty' function. But
where do they declare it? Not in <util.h>, not in <libutil.h>, but in
<sys/termios.h>.
This patch fixes the issue, by including <termios.h> (which in turn includes
<sys/termios.h>).
2023-04-08 Bruno Haible <[email protected]>
login_tty: Fix compilation error in C++ mode on Solaris 11.4.
* m4/login_tty.m4 (gl_FUNC_LOGIN_TTY): Test whether <termios.h> exists.
Consider it when testing whether login_tty is declared.
* lib/utmp.in.h: If none of <util.h> and <libutil.h> exists, include
<termios.h> instead.
* doc/glibc-functions/login_tty.texi: Document the Solaris 11.4 problem.
diff --git a/doc/glibc-functions/login_tty.texi
b/doc/glibc-functions/login_tty.texi
index 3e743b1527..42e7068d91 100644
--- a/doc/glibc-functions/login_tty.texi
+++ b/doc/glibc-functions/login_tty.texi
@@ -25,7 +25,8 @@ Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3,
Android 5.1.
@item
This function is declared in @code{<utmp.h>} on glibc, Cygwin, Android,
in @code{<util.h>} on macOS 11.1, NetBSD 5.0, OpenBSD 3.8,
-and in @code{<libutil.h>} on FreeBSD 13.0, Haiku.
+in @code{<libutil.h>} on FreeBSD 13.0, Haiku,
+and in @code{<termios.h>} on Solaris 11.4.
@c Also note that @code{<sys/types.h>} is
@c a prerequisite of @code{<utmp.h>} on FreeBSD 8.0, OpenBSD 4.6 and
@c of @code{<libutil.h>} on FreeBSD 8.0.
diff --git a/lib/utmp.in.h b/lib/utmp.in.h
index c33b3d2469..2c8c79d129 100644
--- a/lib/utmp.in.h
+++ b/lib/utmp.in.h
@@ -33,13 +33,16 @@
#define _@GUARD_PREFIX@_UTMP_H
/* FreeBSD, NetBSD, OpenBSD, macOS, Minix, Haiku declare login_tty in
- <util.h> or <libutil.h>, not in <utmp.h>. */
+ <util.h> or <libutil.h>, not in <utmp.h>. Solaris declares it in
+ <termios.h>, not in <utmp.h>. */
/* But in any case avoid namespace pollution on glibc systems. */
#if (@GNULIB_LOGIN_TTY@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__
# if HAVE_UTIL_H /* macOS, NetBSD, OpenBSD, Minix */
# include <util.h>
# elif HAVE_LIBUTIL_H /* FreeBSD, Haiku */
# include <libutil.h>
+# elif HAVE_TERMIOS_H /* Solaris */
+# include <termios.h>
# endif
#endif
diff --git a/m4/login_tty.m4 b/m4/login_tty.m4
index ca15e6aabb..734e64c4f8 100644
--- a/m4/login_tty.m4
+++ b/m4/login_tty.m4
@@ -1,4 +1,4 @@
-# login_tty.m4 serial 2
+# login_tty.m4 serial 3
dnl Copyright (C) 2010-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -8,7 +8,7 @@ AC_DEFUN([gl_FUNC_LOGIN_TTY],
[
AC_REQUIRE([gl_PTY_LIB])
- AC_CHECK_HEADERS_ONCE([utmp.h util.h libutil.h])
+ AC_CHECK_HEADERS_ONCE([utmp.h util.h libutil.h termios.h])
gl_saved_libs="$LIBS"
LIBS="$LIBS $PTY_LIB"
gl_CHECK_FUNCS_ANDROID([login_tty], [[
@@ -20,6 +20,8 @@ AC_DEFUN([gl_FUNC_LOGIN_TTY],
# include <util.h>
#elif HAVE_LIBUTIL_H
# include <libutil.h>
+ #elif HAVE_TERMIOS_H
+ # include <termios.h>
#endif
]])
LIBS="$gl_saved_LIBS"