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"