1{
2 lib,
3 stdenv,
4 fetchurl,
5 autoreconfHook,
6 ncurses,
7 libxcrypt,
8 pam ? null,
9}:
10
11stdenv.mkDerivation rec {
12 pname = "screen";
13 version = "5.0.1";
14
15 src = fetchurl {
16 url = "mirror://gnu/screen/screen-${version}.tar.gz";
17 hash = "sha256-La429Ns3n/zRS2kVlrpuwYrDqeIrxHrCOXiatYQJhp0=";
18 };
19
20 configureFlags = [
21 "--enable-telnet"
22 "--enable-pam"
23 ];
24
25 # We need _GNU_SOURCE so that mallocmock_reset() is defined: https://savannah.gnu.org/bugs/?66416
26 NIX_CFLAGS_COMPILE = "-D_GNU_SOURCE=1 -Wno-int-conversion -Wno-incompatible-pointer-types";
27
28 nativeBuildInputs = [
29 autoreconfHook
30 ];
31 buildInputs = [
32 ncurses
33 libxcrypt
34 pam
35 ];
36
37 # The test suite seems to have some glibc malloc hooks that don't exist/link on macOS
38 # With pkgsLLVM: tests/test-winmsgcond.c:53: assertion 'wmc_end(&wmc, pos + 1, &chg) == pos' failed
39 doCheck = !stdenv.hostPlatform.isDarwin && !stdenv.hostPlatform.useLLVM;
40
41 meta = with lib; {
42 homepage = "https://www.gnu.org/software/screen/";
43 description = "Window manager that multiplexes a physical terminal";
44 license = licenses.gpl3Plus;
45
46 longDescription = ''
47 GNU Screen is a full-screen window manager that multiplexes a physical
48 terminal between several processes, typically interactive shells.
49 Each virtual terminal provides the functions of the DEC VT100
50 terminal and, in addition, several control functions from the ANSI
51 X3.64 (ISO 6429) and ISO 2022 standards (e.g., insert/delete line
52 and support for multiple character sets). There is a scrollback
53 history buffer for each virtual terminal and a copy-and-paste
54 mechanism that allows the user to move text regions between windows.
55 When screen is called, it creates a single window with a shell in it
56 (or the specified command) and then gets out of your way so that you
57 can use the program as you normally would. Then, at any time, you
58 can create new (full-screen) windows with other programs in them
59 (including more shells), kill the current window, view a list of the
60 active windows, turn output logging on and off, copy text between
61 windows, view the scrollback history, switch between windows, etc.
62 All windows run their programs completely independent of each other.
63 Programs continue to run when their window is currently not visible
64 and even when the whole screen session is detached from the users
65 terminal.
66 '';
67
68 platforms = platforms.unix;
69 maintainers = [ ];
70 };
71}