diff options
author | Sam James <sam@gentoo.org> | 2022-09-10 02:50:59 +0100 |
---|---|---|
committer | Sam James <sam@gentoo.org> | 2022-09-10 02:57:16 +0100 |
commit | 34e05020127fbb74568a573fdec83a60fba0d7c5 (patch) | |
tree | 95618c7ad928ef4495d7f17c20eca5d44f43e37a /app-misc/screen | |
parent | media-libs/raptor: fix build w/ Clang 15 (diff) | |
download | gentoo-34e05020127fbb74568a573fdec83a60fba0d7c5.tar.gz gentoo-34e05020127fbb74568a573fdec83a60fba0d7c5.tar.bz2 gentoo-34e05020127fbb74568a573fdec83a60fba0d7c5.zip |
app-misc/screen: fix build w/ Clang 15 (fix configure tests)
Closes: https://bugs.gentoo.org/869371
Thanks-to: Nicholas Vinson <nvinson234@gmail.com>
Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'app-misc/screen')
-rw-r--r-- | app-misc/screen/files/screen-4.9.0-configure-implicit-function-decls.patch | 745 | ||||
-rw-r--r-- | app-misc/screen/screen-4.9.0-r1.ebuild | 146 |
2 files changed, 891 insertions, 0 deletions
diff --git a/app-misc/screen/files/screen-4.9.0-configure-implicit-function-decls.patch b/app-misc/screen/files/screen-4.9.0-configure-implicit-function-decls.patch new file mode 100644 index 000000000000..e9db7ba786aa --- /dev/null +++ b/app-misc/screen/files/screen-4.9.0-configure-implicit-function-decls.patch @@ -0,0 +1,745 @@ +https://bugs.gentoo.org/869371 +--- a/configure.ac ++++ b/configure.ac +@@ -157,10 +157,11 @@ if test -n "$ULTRIX"; then + fi + AC_CHECKING(for POSIX.1) + AC_EGREP_CPP(YES_IS_DEFINED, + [#include <sys/types.h> + #include <unistd.h> ++int + main () { + #ifdef _POSIX_VERSION + YES_IS_DEFINED; + #endif + ], AC_NOTE(- you have a POSIX system) AC_DEFINE(POSIX) posix=1) +@@ -231,10 +232,11 @@ dnl + + AC_CHECKING(BSD job jontrol) + AC_TRY_LINK( + [#include <sys/types.h> + #include <sys/ioctl.h> ++#include <unistd.h> + ], [ + #ifdef POSIX + tcsetpgrp(0, 0); + #else + int x = TIOCSPGRP; +@@ -248,48 +250,64 @@ int y = TIOCNOTTY; + + dnl + dnl **** setresuid(), setreuid(), seteuid() **** + dnl + AC_CHECKING(setresuid) +-AC_TRY_LINK(,[ ++AC_TRY_LINK( ++[#include <unistd.h> ++], [ + setresuid(0, 0, 0); + ], AC_DEFINE(HAVE_SETRESUID)) + AC_CHECKING(setreuid) +-AC_TRY_LINK(,[ ++AC_TRY_LINK( ++[#include <unistd.h> ++], [ + setreuid(0, 0); + ], AC_DEFINE(HAVE_SETREUID)) + dnl + dnl seteuid() check: + dnl linux seteuid was broken before V1.1.11 + dnl NeXT, AUX, ISC, and ultrix are still broken (no saved uid support) + dnl Solaris seteuid doesn't change the saved uid, bad for + dnl multiuser screen sessions + AC_CHECKING(seteuid) +-AC_TRY_LINK(,[ ++AC_TRY_LINK( ++[#include <unistd.h> ++],[ + #if defined(linux) || defined(NeXT) || defined(_AUX_SOURCE) || defined(AUX) || defined(ultrix) || (defined(sun) && defined(SVR4)) || defined(ISC) || defined(sony_news) +-seteuid_is_broken(0); ++int seteuid_is_broken(int); seteuid_is_broken(0); + #else + seteuid(0); + #endif + ], AC_DEFINE(HAVE_SETEUID)) + + dnl execvpe + AC_CHECKING(execvpe) +-AC_TRY_LINK(,[ ++AC_TRY_LINK( ++[#include <unistd.h> ++],[ + execvpe(0, 0, 0); + ], AC_DEFINE(HAVE_EXECVPE) + CFLAGS="$CFLAGS -D_GNU_SOURCE") + + dnl + dnl **** select() **** + dnl + + AC_CHECKING(select) +-AC_TRY_LINK(,[select(0, 0, 0, 0, 0);],, ++AC_TRY_LINK( ++[#include <sys/select.h> ++],[ ++ select(0, 0, 0, 0, 0); ++],, + LIBS="$LIBS -lnet -lnsl" + AC_CHECKING(select with $LIBS) +-AC_TRY_LINK(,[select(0, 0, 0, 0, 0);],, ++AC_TRY_LINK( ++[#include <sys/select.h> ++],[ ++ select(0, 0, 0, 0, 0); ++],, + AC_MSG_ERROR(!!! no select - no screen)) + ) + dnl + dnl **** FIFO tests **** + dnl +@@ -314,11 +332,11 @@ AC_TRY_RUN([ + #define S_IFIFO 0010000 + #endif + + char *fin = "/tmp/conftest$$"; + +-main() ++int main() + { + struct stat stb; + fd_set f; + + (void)alarm(5); +@@ -326,40 +344,40 @@ main() + #ifdef POSIX + if (mkfifo(fin, 0777)) + #else + if (mknod(fin, S_IFIFO|0777, 0)) + #endif +- exit(1); ++ return 1; + if (stat(fin, &stb) || (stb.st_mode & S_IFIFO) != S_IFIFO) +- exit(1); ++ return 1; + close(0); + #ifdef __386BSD__ + /* + * The next test fails under 386BSD, but screen works using fifos. + * Fifos in O_RDWR mode are only used for the BROKEN_PIPE case and for + * the select() configuration test. + */ +- exit(0); ++ return 0; + #endif + if (open(fin, O_RDONLY | O_NONBLOCK)) +- exit(1); ++ return 1; + if (fork() == 0) + { + close(0); + if (open(fin, O_WRONLY | O_NONBLOCK)) +- exit(1); ++ return 1; + close(0); + if (open(fin, O_WRONLY | O_NONBLOCK)) +- exit(1); ++ return 1; + if (write(0, "TEST", 4) == -1) +- exit(1); +- exit(0); ++ return 1; ++ return 0; + } + FD_SET(0, &f); + if (select(1, &f, 0, 0, 0) == -1) +- exit(1); +- exit(0); ++ return 1; ++ return 0; + } + ], AC_NOTE(- your fifos are usable) fifo=1, + AC_NOTE(- your fifos are not usable), + AC_NOTE(- skipping check because we are cross compiling; assuming fifos are usable) fifo=1) + rm -f /tmp/conftest* +@@ -385,30 +403,31 @@ AC_TRY_RUN([ + #define S_IFIFO 0010000 + #endif + + char *fin = "/tmp/conftest$$"; + ++int + main() + { + struct timeval tv; + fd_set f; + + #ifdef POSIX + if (mkfifo(fin, 0600)) + #else + if (mknod(fin, S_IFIFO|0600, 0)) + #endif +- exit(1); ++ return 1; + close(0); + if (open(fin, O_RDONLY|O_NONBLOCK)) +- exit(1); ++ return 1; + FD_SET(0, &f); + tv.tv_sec = 1; + tv.tv_usec = 0; + if (select(1, &f, 0, 0, &tv)) +- exit(1); +- exit(0); ++ return 1; ++ return 0; + } + ], AC_NOTE(- your implementation is ok), + AC_NOTE(- you have a broken implementation) AC_DEFINE(BROKEN_PIPE) fifobr=1, + AC_NOTE(- skipping check because we are cross compiling; assuming fifo implementation is ok)) + rm -f /tmp/conftest* +@@ -432,46 +455,48 @@ AC_TRY_RUN([ + + #include <sys/stat.h> + #include <fcntl.h> + #include <sys/socket.h> + #include <sys/un.h> ++#include <signal.h> + + char *son = "/tmp/conftest$$"; + ++int + main() + { + int s1, s2, l; + struct sockaddr_un a; + fd_set f; + + (void)alarm(5); + if ((s1 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) +- exit(1); ++ return 1; + a.sun_family = AF_UNIX; + strcpy(a.sun_path, son); + (void) unlink(son); + if (bind(s1, (struct sockaddr *) &a, strlen(son)+2) == -1) +- exit(1); ++ return 1; + if (listen(s1, 2)) +- exit(1); ++ return 1; + if (fork() == 0) + { + if ((s2 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) + kill(getppid(), 3); + (void)connect(s2, (struct sockaddr *)&a, strlen(son) + 2); + if (write(s2, "HELLO", 5) == -1) + kill(getppid(), 3); +- exit(0); ++ return 0; + } + l = sizeof(a); + close(0); + if (accept(s1, &a, &l)) +- exit(1); ++ return 1; + FD_SET(0, &f); + if (select(1, &f, 0, 0, 0) == -1) +- exit(1); +- exit(0); ++ return 1; ++ return 0; + } + ], AC_NOTE(- your sockets are usable) sock=1, + AC_NOTE(- your sockets are not usable), + AC_NOTE(- skipping check because we are cross compiling; assuming sockets are usable) sock=1) + rm -f /tmp/conftest* +@@ -491,26 +516,27 @@ AC_TRY_RUN([ + #include <sys/socket.h> + #include <sys/un.h> + + char *son = "/tmp/conftest$$"; + ++int + main() + { + int s; + struct stat stb; + struct sockaddr_un a; + if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) +- exit(0); ++ return 0; + a.sun_family = AF_UNIX; + strcpy(a.sun_path, son); + (void) unlink(son); + if (bind(s, (struct sockaddr *) &a, strlen(son)+2) == -1) +- exit(0); ++ return 0; + if (stat(son, &stb)) +- exit(1); ++ return 1; + close(s); +- exit(0); ++ return 0; + } + ],AC_NOTE(- you are normal), + AC_NOTE(- unix domain sockets are not kept in the filesystem) + AC_DEFINE(SOCK_NOT_IN_FS) socknofs=1, + AC_NOTE(- skipping check because we are cross compiling; assuming sockets are normal)) +@@ -545,122 +571,167 @@ char *nam = "/tmp/conftest$$"; + #endif + #ifndef S_IFIFO + #define S_IFIFO 0010000 + #endif + ++int + main() + { + fd_set f; + + #ifdef __FreeBSD__ + /* From Andrew A. Chernov (ache@astral.msk.su): + * opening RDWR fifo fails in BSD 4.4, but select return values are + * right. + */ +- exit(0); ++ return 0; + #endif + (void)alarm(5); + #ifdef POSIX + if (mkfifo(nam, 0777)) + #else + if (mknod(nam, S_IFIFO|0777, 0)) + #endif +- exit(1); ++ return 1; + close(0); + if (open(nam, O_RDWR | O_NONBLOCK)) +- exit(1); ++ return 1; + if (write(0, "TEST", 4) == -1) +- exit(1); ++ return 1; + + #else + + #include <sys/types.h> + #include <sys/socket.h> + #include <sys/un.h> ++#include <signal.h> + ++int + main() + { + int s1, s2, l; + struct sockaddr_un a; + fd_set f; + + (void)alarm(5); + if ((s1 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) +- exit(1); ++ return 1; + a.sun_family = AF_UNIX; + strcpy(a.sun_path, nam); + (void) unlink(nam); + if (bind(s1, (struct sockaddr *) &a, strlen(nam)+2) == -1) +- exit(1); ++ return 1; + if (listen(s1, 2)) +- exit(1); ++ return 1; + if (fork() == 0) + { + if ((s2 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) + kill(getppid(), 3); + (void)connect(s2, (struct sockaddr *)&a, strlen(nam) + 2); + if (write(s2, "HELLO", 5) == -1) + kill(getppid(), 3); +- exit(0); ++ return 0; + } + l = sizeof(a); + close(0); + if (accept(s1, (struct sockaddr *)&a, &l)) +- exit(1); ++ return 1; + #endif + + + FD_SET(0, &f); + if (select(1, &f, 0, 0, 0) == -1) +- exit(1); ++ return 1; + if (select(1, &f, &f, 0, 0) != 2) +- exit(1); +- exit(0); ++ return 1; ++ return 0; + } + ],AC_NOTE(- select is ok), + AC_NOTE(- select can't count) AC_DEFINE(SELECT_BROKEN), + AC_NOTE(- skipping check because we are cross compiling; assuming select is ok)) + + dnl + dnl **** termcap or terminfo **** + dnl + AC_CHECKING(for tgetent) +-AC_TRY_LINK(,tgetent((char *)0, (char *)0);,, ++AC_TRY_LINK([ ++ #include <curses.h> ++ #include <term.h> ++], [ ++ tgetent((char *)0, (char *)0); ++],, + olibs="$LIBS" + LIBS="-lcurses $olibs" + AC_CHECKING(libcurses) +-AC_TRY_LINK(,[ ++AC_TRY_LINK([#include <curses.h> ++ #include <term.h> ++],[ + #ifdef __hpux + __sorry_hpux_libcurses_is_totally_broken_in_10_10(); + #else + tgetent((char *)0, (char *)0); + #endif + ],, + LIBS="-ltermcap $olibs" + AC_CHECKING(libtermcap) +-AC_TRY_LINK(,tgetent((char *)0, (char *)0);,, ++AC_TRY_LINK( ++[#include <curses.h> ++ #include <term.h> ++],[ ++ tgetent((char *)0, (char *)0); ++],, + LIBS="-ltermlib $olibs" + AC_CHECKING(libtermlib) +-AC_TRY_LINK(,tgetent((char *)0, (char *)0);,, ++AC_TRY_LINK( ++[#include <curses.h> ++ #include <term.h> ++],[ ++ tgetent((char *)0, (char *)0); ++],, + LIBS="-lncursesw $olibs" + AC_CHECKING(libncursesw) +-AC_TRY_LINK(,tgetent((char *)0, (char *)0);,, ++AC_TRY_LINK( ++[#include <curses.h> ++ #include <term.h> ++],[ ++ tgetent((char *)0, (char *)0); ++],, + LIBS="-ltinfow $olibs" + AC_CHECKING(libtinfow) +-AC_TRY_LINK(,tgetent((char *)0, (char *)0);,, ++AC_TRY_LINK( ++[#include <curses.h> ++ #include <term.h> ++],[ ++ tgetent((char *)0, (char *)0); ++],, + LIBS="-lncurses $olibs" + AC_CHECKING(libncurses) +-AC_TRY_LINK(,tgetent((char *)0, (char *)0);,, ++AC_TRY_LINK( ++[#include <curses.h> ++ #include <term.h> ++],[ ++ tgetent((char *)0, (char *)0); ++],, + LIBS="-ltinfo $olibs" + AC_CHECKING(libtinfo) +-AC_TRY_LINK(,tgetent((char *)0, (char *)0);,, ++AC_TRY_LINK( ++[#include <curses.h> ++ #include <term.h> ++],[ ++ tgetent((char *)0, (char *)0); ++],, + AC_MSG_ERROR(!!! no tgetent - no screen))))))))) + + AC_TRY_RUN([ ++#include <curses.h> ++#include <string.h> ++#include <term.h> ++ ++int + main() + { +- exit(strcmp(tgoto("%p1%d", 0, 1), "1") ? 0 : 1); ++ return(strcmp(tgoto("%p1%d", 0, 1), "1") ? 0 : 1); + }], AC_NOTE(- you use the termcap database), + AC_NOTE(- you use the terminfo database) AC_DEFINE(TERMINFO), + AC_NOTE(- skipping check because we are cross compiling; assuming terminfo database is used) AC_DEFINE(TERMINFO)) + AC_CHECKING(ospeed) + AC_TRY_LINK(extern short ospeed;,ospeed=5;,,AC_DEFINE(NEED_OSPEED)) +@@ -677,11 +748,15 @@ fi + + if test "$cross_compiling" = no ; then + AC_CHECKING(for SVR4 ptys) + sysvr4ptys= + if test -c /dev/ptmx ; then +-AC_TRY_LINK([],[ptsname(0);grantpt(0);unlockpt(0);],[AC_DEFINE(HAVE_SVR4_PTYS) ++AC_TRY_LINK([ ++ #include <stdlib.h> ++], [ ++ ptsname(0);grantpt(0);unlockpt(0); ++],[AC_DEFINE(HAVE_SVR4_PTYS) + sysvr4ptys=1]) + fi + fi + + AC_CHECK_FUNCS(getpt) +@@ -733,33 +808,36 @@ AC_CHECKING(default tty permissions/group) + rm -f conftest_grp + AC_TRY_RUN([ + #include <sys/types.h> + #include <sys/stat.h> + #include <stdio.h> ++#include <stdlib.h> ++#include <unistd.h> ++int + main() + { + struct stat sb; + char *x,*ttyname(); + int om, m; + FILE *fp; + +- if (!(x = ttyname(0))) exit(1); +- if (stat(x, &sb)) exit(1); ++ if (!(x = ttyname(0))) return 1; ++ if (stat(x, &sb)) return 1; + om = sb.st_mode; +- if (om & 002) exit(0); ++ if (om & 002) return 0; + m = system("mesg y"); +- if (m == -1 || m == 127) exit(1); +- if (stat(x, &sb)) exit(1); ++ if (m == -1 || m == 127) return 1; ++ if (stat(x, &sb)) return 1; + m = sb.st_mode; +- if (chmod(x, om)) exit(1); +- if (m & 002) exit(0); +- if (sb.st_gid == getgid()) exit(1); ++ if (chmod(x, om)) return 1; ++ if (m & 002) return 0; ++ if (sb.st_gid == getgid()) return 1; + if (!(fp=fopen("conftest_grp", "w"))) +- exit(1); ++ return 1; + fprintf(fp, "%d\n", sb.st_gid); + fclose(fp); +- exit(0); ++ return 0; + } + ],[ + if test -f conftest_grp; then + ptygrp=`cat conftest_grp` + AC_NOTE([- pty mode: $ptymode, group: $ptygrp]) +@@ -869,17 +942,25 @@ AC_CHECKING(for libutil(s)) + test -f /usr/lib/libutils.a && LIBS="$LIBS -lutils" + test -f /usr/lib/libutil.a && LIBS="$LIBS -lutil" + fi + + AC_CHECKING(getloadavg) +-AC_TRY_LINK(,[getloadavg((double *)0, 0);], ++AC_TRY_LINK( ++[ ++ #include <stdlib.h> ++],[ ++ getloadavg((double *)0, 0);], + AC_DEFINE(LOADAV_GETLOADAVG) load=1, + if test "$cross_compiling" = no && test -f /usr/lib/libkvm.a ; then + olibs="$LIBS" + LIBS="$LIBS -lkvm" + AC_CHECKING(getloadavg with -lkvm) +-AC_TRY_LINK(,[getloadavg((double *)0, 0);], ++AC_TRY_LINK( ++[ ++ #include <stdlib.h> ++],[ ++ getloadavg((double *)0, 0);], + AC_DEFINE(LOADAV_GETLOADAVG) load=1, LIBS="$olibs") + fi + ) + + if test -z "$load" ; then +@@ -931,10 +1012,11 @@ else + + $nlist64 + + struct nlist nl[2]; + ++int + main() + { + #if !defined(_AUX_SOURCE) && !defined(AUX) + # ifdef NLIST_NAME_UNION + nl[0].n_un.n_name = "$av"; +@@ -944,12 +1026,12 @@ main() + #else + strncpy(nl[0].n_name, "$av", sizeof(nl[0].n_name)); + #endif + nlist(LOADAV_UNIX, nl); + if (nl[0].n_value == 0) +- exit(1); +- exit(0); ++ return 1; ++ return 0; + } + ],avensym=$av;break) + if test "$av" = _Loadavg; then + nlist64='#define nlist nlist64' + fi +@@ -1068,21 +1150,22 @@ void + hand() + { + got++; + } + ++int + main() + { + /* on hpux we use sigvec to get bsd signals */ + #ifdef __hpux + (void)signal(SIGCLD, hand); + kill(getpid(), SIGCLD); + kill(getpid(), SIGCLD); + if (got < 2) +- exit(1); ++ return 1; + #endif +- exit(0); ++ return 0; + } + ],,AC_DEFINE(SYSVSIGS),:) + + fi + +@@ -1107,14 +1190,22 @@ oldlibs="$LIBS" + LIBS="$LIBS -lsun" + AC_CHECKING(IRIX sun library) + AC_TRY_LINK(,,,LIBS="$oldlibs") + + AC_CHECKING(syslog) +-AC_TRY_LINK(,[closelog();], , [oldlibs="$LIBS" ++AC_TRY_LINK( ++[#include <syslog.h> ++], [ ++ closelog(); ++], , [oldlibs="$LIBS" + LIBS="$LIBS -lbsd" + AC_CHECKING(syslog in libbsd.a) +-AC_TRY_LINK(, [closelog();], AC_NOTE(- found.), [LIBS="$oldlibs" ++AC_TRY_LINK( ++[#include <syslog.h> ++], [ ++ closelog(); ++], AC_NOTE(- found.), [LIBS="$oldlibs" + AC_NOTE(- bad news: syslog missing.) AC_DEFINE(NOSYSLOG)])]) + + AC_EGREP_CPP(YES_IS_DEFINED, + [#ifdef M_UNIX + YES_IS_DEFINED; +@@ -1147,66 +1238,87 @@ fi + dnl AC_CHECK_HEADER(shadow.h, AC_DEFINE(SHADOWPW)) + AC_CHECKING(getspnam) + AC_TRY_LINK([#include <shadow.h>], [getspnam("x");],AC_DEFINE(SHADOWPW)) + + AC_CHECKING(getttyent) +-AC_TRY_LINK(,[getttyent();], AC_DEFINE(GETTTYENT)) ++AC_TRY_LINK( ++[ ++ #include <ttyent.h> ++],[ ++ getttyent(); ++], AC_DEFINE(GETTTYENT)) + + AC_CHECKING(fdwalk) + AC_TRY_LINK([#include <stdlib.h>], [fdwalk(NULL, NULL);],AC_DEFINE(HAVE_FDWALK)) + + AC_CHECKING(whether memcpy/memmove/bcopy handles overlapping arguments) + AC_TRY_RUN([ ++#include <string.h> ++ ++int + main() { + char buf[10]; + strcpy(buf, "abcdefghi"); + bcopy(buf, buf + 2, 3); + if (strncmp(buf, "ababcf", 6)) +- exit(1); ++ return 1; + strcpy(buf, "abcdefghi"); + bcopy(buf + 2, buf, 3); + if (strncmp(buf, "cdedef", 6)) +- exit(1); +- exit(0); /* libc version works properly. */ ++ return 1; ++ return 0; /* libc version works properly. */ + }], AC_DEFINE(USEBCOPY),,:) + + AC_TRY_RUN([ ++#include <string.h> ++ + #define bcopy(s,d,l) memmove(d,s,l) ++int + main() { + char buf[10]; + strcpy(buf, "abcdefghi"); + bcopy(buf, buf + 2, 3); + if (strncmp(buf, "ababcf", 6)) +- exit(1); ++ return 1; + strcpy(buf, "abcdefghi"); + bcopy(buf + 2, buf, 3); + if (strncmp(buf, "cdedef", 6)) +- exit(1); +- exit(0); /* libc version works properly. */ ++ return 1; ++ return 0; /* libc version works properly. */ + }], AC_DEFINE(USEMEMMOVE),, + AC_NOTE(- skipping check because we are cross compiling; use memmove) AC_DEFINE(USEMEMMOVE)) + + + AC_TRY_RUN([ ++#include <string.h> ++ + #define bcopy(s,d,l) memcpy(d,s,l) ++int + main() { + char buf[10]; + strcpy(buf, "abcdefghi"); + bcopy(buf, buf + 2, 3); + if (strncmp(buf, "ababcf", 6)) +- exit(1); ++ return 1; + strcpy(buf, "abcdefghi"); + bcopy(buf + 2, buf, 3); + if (strncmp(buf, "cdedef", 6)) +- exit(1); +- exit(0); /* libc version works properly. */ ++ return 1; ++ return 0; /* libc version works properly. */ + }], AC_DEFINE(USEMEMCPY),,:) + + AC_SYS_LONG_FILE_NAMES + + AC_MSG_CHECKING(for vsprintf) +-AC_TRY_LINK([#include <stdarg.h>],[va_list valist; vsprintf(0,0,valist);], AC_MSG_RESULT(yes);AC_DEFINE(USEVARARGS), AC_MSG_RESULT(no)) ++AC_TRY_LINK( ++[ ++ #include <stdarg.h> ++ #include <stdio.h> ++], ++[ ++ va_list valist; vsprintf(0,0,valist); ++], AC_MSG_RESULT(yes);AC_DEFINE(USEVARARGS), AC_MSG_RESULT(no)) + + AC_HEADER_DIRENT + + AC_MSG_CHECKING(for setenv) + if test -z "$ac_setenv_args"; then + diff --git a/app-misc/screen/screen-4.9.0-r1.ebuild b/app-misc/screen/screen-4.9.0-r1.ebuild new file mode 100644 index 000000000000..44eb81d05d0d --- /dev/null +++ b/app-misc/screen/screen-4.9.0-r1.ebuild @@ -0,0 +1,146 @@ +# Copyright 1999-2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit autotools flag-o-matic pam tmpfiles + +DESCRIPTION="screen manager with VT100/ANSI terminal emulation" +HOMEPAGE="https://www.gnu.org/software/screen/" + +if [[ ${PV} != 9999 ]] ; then + SRC_URI="mirror://gnu/${PN}/${P}.tar.gz" + KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris" +else + inherit git-r3 + EGIT_REPO_URI="https://git.savannah.gnu.org/git/screen.git" + EGIT_CHECKOUT_DIR="${WORKDIR}/${P}" # needed for setting S later on + S="${WORKDIR}"/${P}/src +fi + +LICENSE="GPL-2" +SLOT="0" +IUSE="debug nethack pam selinux multiuser" + +DEPEND=">=sys-libs/ncurses-5.2:= + virtual/libcrypt:= + pam? ( sys-libs/pam )" +RDEPEND="${DEPEND} + acct-group/utmp + selinux? ( sec-policy/selinux-screen )" +BDEPEND="sys-apps/texinfo" + +PATCHES=( + # Don't use utempter even if it is found on the system. + "${FILESDIR}"/${PN}-4.3.0-no-utempter.patch + "${FILESDIR}"/${PN}-4.6.2-utmp-exit.patch + "${FILESDIR}"/${PN}-4.9.0-configure-implicit-function-decls.patch +) + +src_prepare() { + default + + # sched.h is a system header and causes problems with some C libraries + mv sched.h _sched.h || die + sed -i '/include/ s:sched.h:_sched.h:' screen.h || die + + # Fix manpage + sed -i \ + -e "s:/usr/local/etc/screenrc:${EPREFIX}/etc/screenrc:g" \ + -e "s:/usr/local/screens:${EPREFIX}/tmp/screen:g" \ + -e "s:/local/etc/screenrc:${EPREFIX}/etc/screenrc:g" \ + -e "s:/etc/utmp:${EPREFIX}/var/run/utmp:g" \ + -e "s:/local/screens/S\\\-:${EPREFIX}/tmp/screen/S\\\-:g" \ + doc/screen.1 || die + + if [[ ${CHOST} == *-darwin* ]] || use elibc_musl; then + sed -i -e '/^#define UTMPOK/s/define/undef/' acconfig.h || die + fi + + # disable musl dummy headers for utmp[x] + use elibc_musl && append-cppflags "-D_UTMP_H -D_UTMPX_H" + + # reconfigure + eautoreconf +} + +src_configure() { + append-cppflags "-DMAXWIN=${MAX_SCREEN_WINDOWS:-100}" + + if [[ ${CHOST} == *-solaris* ]]; then + # enable msg_header by upping the feature standard compatible + # with c99 mode + append-cppflags -D_XOPEN_SOURCE=600 + fi + + use nethack || append-cppflags "-DNONETHACK" + use debug && append-cppflags "-DDEBUG" + + local myeconfargs=( + --with-socket-dir="${EPREFIX}/tmp/${PN}" + --with-sys-screenrc="${EPREFIX}/etc/screenrc" + --with-pty-mode=0620 + --with-pty-group=5 + --enable-rxvt_osc + --enable-telnet + --enable-colors256 + $(use_enable pam) + ) + econf "${myeconfargs[@]}" +} + +src_compile() { + LC_ALL=POSIX emake comm.h term.h + emake osdef.h + + emake -C doc screen.info + default +} + +src_install() { + local DOCS=( + README ChangeLog INSTALL TODO NEWS* patchlevel.h + doc/{FAQ,README.DOTSCREEN,fdpat.ps,window_to_display.ps} + ) + + emake DESTDIR="${D}" SCREEN="${P}" install + + local tmpfiles_perms tmpfiles_group + + if use multiuser || use prefix ; then + fperms 4755 /usr/bin/${P} + tmpfiles_perms="0755" + tmpfiles_group="root" + else + fowners root:utmp /usr/bin/${P} + fperms 2755 /usr/bin/${P} + tmpfiles_perms="0775" + tmpfiles_group="utmp" + fi + + newtmpfiles - screen.conf <<<"d /tmp/screen ${tmpfiles_perms} root ${tmpfiles_group}" + + insinto /usr/share/${PN} + doins terminfo/{screencap,screeninfo.src} + + insinto /etc + doins "${FILESDIR}"/screenrc + + if use pam; then + pamd_mimic_system screen auth + fi + + dodoc "${DOCS[@]}" +} + +pkg_postinst() { + if [[ -z ${REPLACING_VERSIONS} ]]; then + elog "Some dangerous key bindings have been removed or changed to more safe values." + elog "We enable some xterm hacks in our default screenrc, which might break some" + elog "applications. Please check /etc/screenrc for information on these changes." + fi + + tmpfiles_process screen.conf + + ewarn "This revision changes the screen socket location to ${EROOT}/tmp/${PN}" +} |