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  <br...@clisp.org>

        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"




Reply via email to