mirror of
https://git.FreeBSD.org/ports.git
synced 2024-11-18 00:10:04 +00:00
sysutils/screen50: Introduce the new screen 5.0.0
Screen 5.0.0 is the next major release of GNU Screen. Unfortunatly while testing sysutils/screen-devel I discovered bugs with its hardstatus implementation. Existing hardstatus failed to work correctly. I had opened a bug with the GNU Screen upstream. They had fixed one of the bugs however the last time I tested screen-devel, some status strings were still unavailable, not to mention that the hardstatus string syntax has changed. Therefore I don't believe screen50 should replace screen49 as our default GNU screen until a) some of the issues are resolved and b) we the FreeBSD community have had a little more experience with it. People who wish to use screen50 will need to uninstall screen (currently a meta port pointing to screen49) and install screen50. Any bugzilla bugs will likely spawn an upstream bug report by myself.
This commit is contained in:
parent
43808d10e2
commit
d2221ef5ff
@ -1362,6 +1362,7 @@
|
||||
SUBDIR += schilyutils
|
||||
SUBDIR += screen
|
||||
SUBDIR += screen49
|
||||
SUBDIR += screen50
|
||||
SUBDIR += screen-devel
|
||||
SUBDIR += screenfetch
|
||||
SUBDIR += screenie
|
||||
|
122
sysutils/screen50/Makefile
Normal file
122
sysutils/screen50/Makefile
Normal file
@ -0,0 +1,122 @@
|
||||
PORTNAME= screen
|
||||
DISTVERSION= 5.0.0
|
||||
CATEGORIES= sysutils
|
||||
MASTER_SITES= GNU \
|
||||
ftp://ftp.gnu.org/gnu/screen/ \
|
||||
ftp://gnu.mirror.iweb.com/screen/ \
|
||||
http://gnu.mirror.iweb.com/screen/ \
|
||||
http://mirror.sdunix.com/gnu/ \
|
||||
ftp://mirrors.kernel.org/gnu/screen/ \
|
||||
http://cschubert.com/distfiles/ \
|
||||
LOCAL/cy
|
||||
.if !defined(MASTERDIR)
|
||||
PKGNAMESUFFIX= 50
|
||||
CONFLICTS= screen-* screen49*
|
||||
.endif
|
||||
|
||||
MAINTAINER= cy@FreeBSD.org
|
||||
COMMENT= Multi-screen window manager
|
||||
WWW= https://www.gnu.org/software/screen/
|
||||
|
||||
CONFLICTS+= screen-devel
|
||||
|
||||
LICENSE= GPLv3
|
||||
|
||||
OPTIONS_DEFINE= INFO NETHACK XTERM_256 SYSTEM_SCREENRC MULTIUSER \
|
||||
NOSOCKETDIR
|
||||
OPTIONS_DEFAULT= INFO NETHACK XTERM_256 SOCKETS SYSTEM_SCREENRC \
|
||||
NCURSES_DEFAULT MULTIUSER
|
||||
OPTIONS_SINGLE= IPC NCURSES
|
||||
OPTIONS_SINGLE_IPC= SOCKETS NAMED_PIPES
|
||||
OPTIONS_SINGLE_NCURSES= NCURSES_DEFAULT NCURSES_BASE NCURSES_PORT
|
||||
NETHACK_DESC= Enable nethack-style messages
|
||||
XTERM_256_DESC= Enable support for 256 colour xterm
|
||||
SOCKETS_DESC= Use new (4.2.1+) sockets for IPC (default)
|
||||
NAMED_PIPES_DESC= Use legacy (4.0.3) named pipes for IPC (override)
|
||||
SYSTEM_SCREENRC_DESC= Install system screenrc with helpful status line
|
||||
MULTIUSER_DESC= Install setuid-root screen to support multiuser
|
||||
MULTIUSER_PLIST_SUB= MULTISUID="@(,,4555) "
|
||||
MULTIUSER_PLIST_SUB_OFF=MULTISUID="@(,,0555) "
|
||||
NCURSES_DEFAULT_DESC= Depend on ncurses (ports if installed, otherwise base)
|
||||
NCURSES_BASE_DESC= Depend on ncurses in base
|
||||
NCURSES_PORT_DESC= Depend on devel/ncurses in ports
|
||||
NOSOCKETDIR_DESC= Use ~/.screen instead of socketdir
|
||||
|
||||
NCURSES_DEFAULT_USES= ncurses
|
||||
NCURSES_BASE_USES= ncurses:base
|
||||
NCURSES_PORT_USES= ncurses:port
|
||||
|
||||
OPTIONS_SUB=
|
||||
|
||||
USES= autoreconf:build gmake cpe
|
||||
MAKE_ARGS+= WITH_MAN=1
|
||||
|
||||
CPE_VENDOR= gnu
|
||||
|
||||
.include <bsd.port.options.mk>
|
||||
|
||||
GNU_CONFIGURE= yes
|
||||
GNU_CONFIGURE_MANPREFIX= ${PREFIX}/share
|
||||
CFLAGS+= -I${NCURSESINC}
|
||||
LDFLAGS+= -L${NCURSESLIB}
|
||||
|
||||
.if ${PORT_OPTIONS:MINFO}
|
||||
INFO= screen
|
||||
MAKE_ARGS+= WITH_INFO=1
|
||||
USES+= makeinfo
|
||||
.endif
|
||||
|
||||
# Enables support for 256 colour xterm. Note that you may need to
|
||||
# set up a custom termcap entry or .screenrc which modifies termcap
|
||||
# to contain the following: Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm
|
||||
#
|
||||
.if ${PORT_OPTIONS:MXTERM_256}
|
||||
CFLAGS+= -DCOLORS256
|
||||
.endif
|
||||
|
||||
.if ! ${PORT_OPTIONS:MNETHACK}
|
||||
CFLAGS+= -DNONETHACK
|
||||
.endif
|
||||
|
||||
.if ${PORT_OPTIONS:MNOSOCKETDIR}
|
||||
CONFIGURE_ARGS+= --disable-socket-dir
|
||||
.endif
|
||||
|
||||
.if defined(SCREEN_SOCKET_DIR)
|
||||
CONFIGURE_ARGS+= --with-socket-dir=${SCREEN_SOCKET_DIR}
|
||||
.endif
|
||||
|
||||
post-patch:
|
||||
@${RM} ${WRKSRC}/doc/screen.info*
|
||||
|
||||
# Bug 191029: Users can choose whether to use sockets or named pipes.
|
||||
# Choose sockets if you don't know what the difference is.
|
||||
# Choose named pipes if your environment is heterogeneous,
|
||||
# using both screen 4.0.3 and 4.2.1.
|
||||
# Bug 191017
|
||||
|
||||
pre-configure:
|
||||
cd ${WRKSRC} && ./autogen.sh
|
||||
|
||||
post-configure-NAMED_PIPES-on:
|
||||
@${ECHO_CMD} '#define NAMEDPIPE 1' >> ${WRKSRC}/config.h
|
||||
@${ECHO_CMD} User selected named pipes override set.
|
||||
|
||||
ETCDIR?= ${PREFIX}/etc
|
||||
|
||||
post-install:
|
||||
@${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
|
||||
${INSTALL_DATA} ${WRKSRC}/etc/etcscreenrc \
|
||||
${STAGEDIR}${EXAMPLESDIR}/screenrc.sample-1
|
||||
${INSTALL_DATA} ${FILESDIR}/screenrc.sample \
|
||||
${STAGEDIR}${EXAMPLESDIR}/screenrc.sample-2
|
||||
@${MKDIR} ${STAGEDIR}${ETCDIR}
|
||||
.if ${PORT_OPTIONS:MSYSTEM_SCREENRC}
|
||||
${INSTALL_DATA} ${FILESDIR}/screenrc.sample \
|
||||
${STAGEDIR}${ETCDIR}/screenrc.sample
|
||||
.else
|
||||
${INSTALL_DATA} ${WRKSRC}/etc/etcscreenrc \
|
||||
${STAGEDIR}${ETCDIR}/screenrc.sample
|
||||
.endif
|
||||
|
||||
.include <bsd.port.mk>
|
3
sysutils/screen50/distinfo
Normal file
3
sysutils/screen50/distinfo
Normal file
@ -0,0 +1,3 @@
|
||||
TIMESTAMP = 1724900361
|
||||
SHA256 (screen-5.0.0.tar.gz) = f04a39d00a0e5c7c86a55338808903082ad5df4d73df1a2fd3425976aed94971
|
||||
SIZE (screen-5.0.0.tar.gz) = 895882
|
34
sysutils/screen50/files/patch-doc__Makefile.in
Normal file
34
sysutils/screen50/files/patch-doc__Makefile.in
Normal file
@ -0,0 +1,34 @@
|
||||
--- doc/Makefile.in.orig 2014-04-29 20:26:42.618832001 -0700
|
||||
+++ doc/Makefile.in 2014-04-29 20:29:26.379384101 -0700
|
||||
@@ -31,7 +31,10 @@
|
||||
$(MAKEINFO) --no-split $(srcdir)/screen.texinfo -o screen.info
|
||||
|
||||
install: installdirs
|
||||
+ifeq (${WITH_MAN},1)
|
||||
$(INSTALL_DATA) $(srcdir)/screen.1 $(DESTDIR)$(mandir)/man1/screen.1
|
||||
+endif
|
||||
+ifeq (${WITH_INFO},1)
|
||||
-$(MAKE) screen.info
|
||||
-if test -f screen.info; then d=.; else d=$(srcdir); fi; \
|
||||
if test -f $$d/screen.info; then \
|
||||
@@ -40,13 +43,19 @@
|
||||
install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/screen.info; \
|
||||
else true; fi; \
|
||||
fi
|
||||
+endif
|
||||
|
||||
uninstall:
|
||||
rm -f $(DESTDIR)$(mandir)/man1/screen.1
|
||||
rm -f $(DESTDIR)$(infodir)/screen.info*
|
||||
|
||||
installdirs:
|
||||
- $(srcdir)/../etc/mkinstalldirs $(DESTDIR)$(mandir)/man1 $(DESTDIR)$(infodir)
|
||||
+ifeq (${WITH_MAN},1)
|
||||
+ $(srcdir)/../etc/mkinstalldirs $(DESTDIR)$(mandir)/man1
|
||||
+endif
|
||||
+ifeq (${WITH_INFO},1)
|
||||
+ $(srcdir)/../etc/mkinstalldirs $(DESTDIR)$(infodir)
|
||||
+endif
|
||||
|
||||
mostlyclean:
|
||||
-rm -f *.cp *.cps *.fn *.fns *.ky *.kys *.pg *.tp *.vr
|
11
sysutils/screen50/files/patch-doc_screen.1
Normal file
11
sysutils/screen50/files/patch-doc_screen.1
Normal file
@ -0,0 +1,11 @@
|
||||
--- doc/screen.1.orig 2023-08-15 11:01:59 UTC
|
||||
+++ doc/screen.1
|
||||
@@ -241,7 +241,7 @@
|
||||
.IR screen ,
|
||||
but prints a list of
|
||||
.I pid.tty.host
|
||||
-strings identifying your
|
||||
+strings and creation timestamps identifying your
|
||||
.I screen
|
||||
sessions.
|
||||
Sessions marked `detached' can be resumed with \*Qscreen \-r\*U. Those marked
|
39
sysutils/screen50/files/patch-misc.c
Normal file
39
sysutils/screen50/files/patch-misc.c
Normal file
@ -0,0 +1,39 @@
|
||||
--- misc.c.orig 2024-03-26 16:41:57.000000000 -0700
|
||||
+++ misc.c 2024-04-03 11:32:35.844473000 -0700
|
||||
@@ -32,8 +32,10 @@
|
||||
|
||||
#include <poll.h>
|
||||
#include <sys/types.h>
|
||||
+#include <sys/user.h>
|
||||
#include <sys/stat.h> /* mkdir() declaration */
|
||||
#include <signal.h>
|
||||
+#include <libutil.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
@@ -225,6 +227,7 @@
|
||||
char *p;
|
||||
|
||||
if (str == NULL) {
|
||||
+
|
||||
*buf = 0;
|
||||
return 0;
|
||||
}
|
||||
@@ -238,3 +241,17 @@
|
||||
*p = 0;
|
||||
return p - buf;
|
||||
}
|
||||
+
|
||||
+time_t
|
||||
+SessionCreationTime(fifo)
|
||||
+const char *fifo;
|
||||
+{
|
||||
+ int pid = atoi(fifo);
|
||||
+ if (pid <= 0) return 0;
|
||||
+
|
||||
+ struct kinfo_proc * kip = kinfo_getproc(pid);
|
||||
+ if (kip == 0) return 0;
|
||||
+ time_t start = kip->ki_start.tv_sec;
|
||||
+ free (kip);
|
||||
+ return start;
|
||||
+}
|
12
sysutils/screen50/files/patch-misc.h
Normal file
12
sysutils/screen50/files/patch-misc.h
Normal file
@ -0,0 +1,12 @@
|
||||
--- misc.h.orig 2024-03-26 16:41:57.000000000 -0700
|
||||
+++ misc.h 2024-04-03 11:30:19.350562000 -0700
|
||||
@@ -28,6 +28,9 @@
|
||||
int AddXChar (char *, int);
|
||||
int AddXChars (char *, int, char *);
|
||||
|
||||
+time_t SessionCreationTime(const char *fifo);
|
||||
+
|
||||
+
|
||||
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
|
||||
|
||||
#endif /* SCREEN_MISC_H */
|
19
sysutils/screen50/files/patch-os.h
Normal file
19
sysutils/screen50/files/patch-os.h
Normal file
@ -0,0 +1,19 @@
|
||||
--- os.h.orig 2024-07-27 07:09:11.000000000 -0700
|
||||
+++ os.h 2024-08-19 08:47:21.152670000 -0700
|
||||
@@ -148,7 +148,7 @@
|
||||
*/
|
||||
|
||||
#ifndef TERMCAP_BUFSIZE
|
||||
-# define TERMCAP_BUFSIZE 1023
|
||||
+# define TERMCAP_BUFSIZE 1024
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -161,6 +161,6 @@
|
||||
/* Changing those you won't be able to attach to your old sessions
|
||||
* when changing those values in official tree don't forget to bump
|
||||
* MSG_VERSION */
|
||||
-#define MAXTERMLEN 32
|
||||
+#define MAXTERMLEN 63
|
||||
#define MAXLOGINLEN 256
|
||||
|
76
sysutils/screen50/files/patch-socket.c
Normal file
76
sysutils/screen50/files/patch-socket.c
Normal file
@ -0,0 +1,76 @@
|
||||
--- socket.c.orig 2024-03-26 16:41:57.000000000 -0700
|
||||
+++ socket.c 2024-04-03 07:52:07.474617000 -0700
|
||||
@@ -122,11 +122,13 @@
|
||||
char *firstn = NULL;
|
||||
int nfound = 0, ngood = 0, ndead = 0, nwipe = 0, npriv = 0;
|
||||
int nperfect = 0;
|
||||
+ char timestr[64];
|
||||
struct sent {
|
||||
struct sent *next;
|
||||
int mode;
|
||||
char *name;
|
||||
- } *slist, **slisttail, *sent, *nsent;
|
||||
+ time_t time_created;
|
||||
+ } *slist, **slisttail, *sent, *nsent, *schosen;
|
||||
|
||||
if (match) {
|
||||
matchlen = strlen(match);
|
||||
@@ -203,8 +205,12 @@
|
||||
sent->next = NULL;
|
||||
sent->name = SaveStr(name);
|
||||
sent->mode = mode;
|
||||
+ sent->time_created = SessionCreationTime(name);
|
||||
+ for (slisttail = &slist; *slisttail; slisttail = &((*slisttail)->next)) {
|
||||
+ if ((*slisttail)->time_created < sent->time_created) break;
|
||||
+ }
|
||||
+ sent->next = *slisttail;
|
||||
*slisttail = sent;
|
||||
- slisttail = &sent->next;
|
||||
nfound++;
|
||||
sockfd = MakeClientSocket(0);
|
||||
/* MakeClientSocket sets ids back to eff */
|
||||
@@ -283,31 +289,36 @@
|
||||
break;
|
||||
}
|
||||
for (sent = slist; sent; sent = sent->next) {
|
||||
+ if (sent->time_created == 0) {
|
||||
+ sprintf(timestr, "??" "?");
|
||||
+ } else {
|
||||
+ strftime(timestr, 64, "%x %X", localtime(&sent->time_created));
|
||||
+ }
|
||||
switch (sent->mode) {
|
||||
case 0700:
|
||||
- printf("\t%s\t(Attached)\n", sent->name);
|
||||
+ printf("\t%s\t(%s)\t(Attached)\n", sent->name, timestr);
|
||||
break;
|
||||
case 0600:
|
||||
- printf("\t%s\t(Detached)\n", sent->name);
|
||||
+ printf("\t%s\t(%s)\t(Detached)\n", sent->name, timestr);
|
||||
break;
|
||||
case 0701:
|
||||
- printf("\t%s\t(Multi, attached)\n", sent->name);
|
||||
+ printf("\t%s\t(%s)\t(Multi, attached)\n", sent->name, timestr);
|
||||
break;
|
||||
case 0601:
|
||||
- printf("\t%s\t(Multi, detached)\n", sent->name);
|
||||
+ printf("\t%s\t(%s)\t(Multi, detached)\n", sent->name, timestr);
|
||||
break;
|
||||
case -1:
|
||||
/* No trigraphs here! */
|
||||
- printf("\t%s\t(Dead ?%c?)\n", sent->name, '?');
|
||||
+ printf("\t%s\t(%s)\t(Dead ?%c?)\n", sent->name, timestr, '?');
|
||||
break;
|
||||
case -2:
|
||||
- printf("\t%s\t(Removed)\n", sent->name);
|
||||
+ printf("\t%s\t(%s)\t(Removed)\n", sent->name, timestr);
|
||||
break;
|
||||
case -3:
|
||||
- printf("\t%s\t(Remote or dead)\n", sent->name);
|
||||
+ printf("\t%s\t(%s)\t(Remote or dead)\n", sent->name, timestr);
|
||||
break;
|
||||
case -4:
|
||||
- printf("\t%s\t(Private)\n", sent->name);
|
||||
+ printf("\t%s\t(%s)\t(Private)\n", sent->name, timestr);
|
||||
break;
|
||||
}
|
||||
}
|
18
sysutils/screen50/files/patch-terminfo__checktc.c
Normal file
18
sysutils/screen50/files/patch-terminfo__checktc.c
Normal file
@ -0,0 +1,18 @@
|
||||
--- terminfo/checktc.c.orig Fri Sep 29 09:13:22 1995
|
||||
+++ terminfo/checktc.c Tue Apr 22 20:37:18 2003
|
||||
@@ -171,6 +171,7 @@
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
+#ifndef __FreeBSD__
|
||||
void CPutStr(s, c)
|
||||
char *s;
|
||||
int c;
|
||||
@@ -178,6 +179,7 @@
|
||||
tputs(tgoto(s, 0, c), 1, putcha);
|
||||
fflush(stdout);
|
||||
}
|
||||
+#endif /* __FreeBSD__ */
|
||||
|
||||
void CCPutStr(s, x, y)
|
||||
char *s;
|
20
sysutils/screen50/files/patch-utmp.c
Normal file
20
sysutils/screen50/files/patch-utmp.c
Normal file
@ -0,0 +1,20 @@
|
||||
--- utmp.c.orig 2024-03-26 16:41:57.000000000 -0700
|
||||
+++ utmp.c 2024-04-03 11:21:49.696125000 -0700
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
#include "utmp.h"
|
||||
|
||||
+#include <sys/param.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
@@ -64,9 +65,7 @@
|
||||
|
||||
static int utmpok;
|
||||
static char UtmpName[] = UTMPXFILE;
|
||||
-#ifndef UTMP_HELPER
|
||||
static int utmpfd = -1;
|
||||
-#endif
|
||||
|
||||
#undef D_loginhost
|
||||
#define D_loginhost D_utmp_logintty.ut_host
|
10
sysutils/screen50/files/screenrc.sample
Normal file
10
sysutils/screen50/files/screenrc.sample
Normal file
@ -0,0 +1,10 @@
|
||||
startup_message off
|
||||
defscrollback 5000
|
||||
termcapinfo xterm ti@:te@
|
||||
termcapinfo xterm-color ti@:te@
|
||||
hardstatus alwayslastline
|
||||
hardstatus string '%{gk}[%{G}%H%{g}][%= %{wk}%?%-Lw%?%{=b kR}(%{W}%n*%f %t%?(%u)%?%{=b kR})%{= kw}%?%+Lw%?%?%= %{g}]%{=b C}[%m/%d/%y %C %A]%{W}'
|
||||
vbell off
|
||||
shell -$SHELL
|
||||
logtstamp on
|
||||
logtstamp after 1
|
7
sysutils/screen50/pkg-descr
Normal file
7
sysutils/screen50/pkg-descr
Normal file
@ -0,0 +1,7 @@
|
||||
Screen is a full-screen window manager that multiplexes a physical terminal
|
||||
between several processes (typically interactive shells).
|
||||
Each virtual terminal provides the functions of a DEC VT100 terminal and, in
|
||||
addition, several control functions from the ANSI X3.64 (ISO 6429) and ISO
|
||||
2022 standards (e.g. insert/delete line and support for multiple character
|
||||
sets). There is a scrollback history buffer for each virtual terminal and a
|
||||
copy-and-paste mechanism that allows moving text regions between windows.
|
11
sysutils/screen50/pkg-message
Normal file
11
sysutils/screen50/pkg-message
Normal file
@ -0,0 +1,11 @@
|
||||
[
|
||||
{ type: install
|
||||
message: <<EOM
|
||||
As of GNU Screen 4.4.0:
|
||||
|
||||
Note that there was fix to screen message structure field
|
||||
responsible for $TERM handling, making it impossible
|
||||
to attach to older versions.
|
||||
EOM
|
||||
}
|
||||
]
|
27
sysutils/screen50/pkg-plist
Normal file
27
sysutils/screen50/pkg-plist
Normal file
@ -0,0 +1,27 @@
|
||||
bin/screen
|
||||
%%MULTISUID%%bin/screen-5.0.0
|
||||
share/man/man1/screen.1.gz
|
||||
%%DATADIR%%/utf8encodings/01
|
||||
%%DATADIR%%/utf8encodings/02
|
||||
%%DATADIR%%/utf8encodings/03
|
||||
%%DATADIR%%/utf8encodings/04
|
||||
%%DATADIR%%/utf8encodings/18
|
||||
%%DATADIR%%/utf8encodings/19
|
||||
%%DATADIR%%/utf8encodings/a1
|
||||
%%DATADIR%%/utf8encodings/a3
|
||||
%%DATADIR%%/utf8encodings/bf
|
||||
%%DATADIR%%/utf8encodings/c2
|
||||
%%DATADIR%%/utf8encodings/c3
|
||||
%%DATADIR%%/utf8encodings/c4
|
||||
%%DATADIR%%/utf8encodings/c6
|
||||
%%DATADIR%%/utf8encodings/c7
|
||||
%%DATADIR%%/utf8encodings/c8
|
||||
%%DATADIR%%/utf8encodings/cc
|
||||
%%DATADIR%%/utf8encodings/cd
|
||||
%%DATADIR%%/utf8encodings/d6
|
||||
@comment We always install the same screenrc it just depends on if we
|
||||
@comment are installing the the one bundled with source, or the one from
|
||||
@comment FILESDIR/screenrc.sample
|
||||
@sample %%ETCDIR%%/screenrc.sample
|
||||
%%EXAMPLESDIR%%/screenrc.sample-1
|
||||
%%EXAMPLESDIR%%/screenrc.sample-2
|
Loading…
Reference in New Issue
Block a user