turbovnc: init at 2.2.5

I started out by copying the `tigervnc` derivation, which
does things like re-using `xorg.xorgserver.buildInputs`
(given that these VNC servers are all forks of Xorg),
but then removed that and all the dependencies that did not
appear to be needed or checked for in the CMake output.
This commit is contained in:
Niklas Hambüchen 2021-02-18 19:04:34 +01:00
parent d45cdb2f3e
commit c834c60ff9
2 changed files with 116 additions and 0 deletions

View file

@ -0,0 +1,111 @@
{ lib
, stdenv
, fetchFromGitHub
# Dependencies
, cmake
, libjpeg_turbo
, makeWrapper
, mesa # for built-in 3D software rendering using swrast
, openjdk # for the client with Java GUI
, openjdk_headless # for the server
, openssh
, openssl
, pam
, perl
, which
, xkbcomp
, xkeyboard_config
, xorg
}:
stdenv.mkDerivation rec {
pname = "turbovnc";
version = "2.2.5";
src = fetchFromGitHub {
owner = "TurboVNC";
repo = "turbovnc";
rev = version;
sha256 = "0r2lk5lza7a9h02g4z5j59d8qj0x1q1my665d1x1plny4g46vam0";
};
# TODO:
# * Build outputs that are unclear:
# * `-- FONT_ENCODINGS_DIRECTORY = /var/empty/share/X11/fonts/encodings`
# Maybe relevant what the tigervnc and tightvnc derivations
# do with their `fontDirectories`?
# * `SERVER_MISC_CONFIG_PATH = /var/empty/lib64/xorg`
# * The thing about xorg `protocol.txt`
# * Does SSH support require `openssh` on PATH?
# * Add `enableClient ? true` flag that disables the client GUI
# so that the server can be built without openjdk dependency.
# * Perhaps allow to build the client on non-Linux platforms.
nativeBuildInputs = [
cmake
makeWrapper
openjdk_headless
];
buildInputs = [
libjpeg_turbo
openssl
pam
perl
] ++ (with xorg; [
libSM
libX11
libXext
libXi
xorgproto
]);
cmakeFlags = [
# For the 3D software rendering built into TurboVNC, pass the path
# to the swrast dri driver in Mesa.
# Can also be given at runtime to its `Xvnc` as:
# -dridir /nix/store/...-mesa-20.1.10-drivers/lib/dri/
"-DDRI_DRIVER_PATH=${mesa.drivers}/lib/dri"
# The build system doesn't find these files automatically.
"-DTJPEG_JAR=${libjpeg_turbo.out}/share/java/turbojpeg.jar"
"-DTJPEG_JNILIBRARY=${libjpeg_turbo.out}/lib/libturbojpeg.so"
"-DXKB_BASE_DIRECTORY=${xkeyboard_config}/share/X11/xkb"
"-DXKB_BIN_DIRECTORY=${xkbcomp}/bin"
];
postInstall = ''
# turbovnc dlopen()s libssl.so depending on the requested encryption.
wrapProgram $out/bin/Xvnc \
--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ openssl ]}
# `twm` is the default window manager that `vncserver` tries to start,
# and it has minimal dependencies (no non-Xorg).
# (This default is written by `vncserver` to `~/.vnc/xstartup.turbovnc`,
# see https://github.com/TurboVNC/turbovnc/blob/ffdb57d9/unix/vncserver.in#L201.)
# It checks for it using `which twm`.
wrapProgram $out/bin/vncserver \
--prefix PATH : ${lib.makeBinPath [ which xorg.twm ]}
# Patch /usr/bin/perl
patchShebangs $out/bin/vncserver
# vncserver needs `xauth`
wrapProgram $out/bin/vncserver \
--prefix PATH : ${lib.makeBinPath (with xorg; [ xauth ])}
# The viewer is in Java and requires `JAVA_HOME`.
# For SSH support, `ssh` is required on `PATH`.
wrapProgram $out/bin/vncviewer \
--prefix JAVA_HOME : "${lib.makeLibraryPath [ openjdk ]}/openjdk" \
--prefix PATH : ${lib.makeBinPath [ openssh ]}
'';
meta = {
homepage = "https://turbovnc.org/";
license = lib.licenses.gpl2Plus;
description = "High-speed version of VNC derived from TightVNC";
maintainers = with lib.maintainers; [ nh2 ];
platforms = with lib.platforms; linux;
};
}

View file

@ -8934,6 +8934,11 @@ in
ttwatch = callPackage ../tools/misc/ttwatch { };
turbovnc = callPackage ../tools/admin/turbovnc {
# fontDirectories = [ xorg.fontadobe75dpi xorg.fontmiscmisc xorg.fontcursormisc xorg.fontbhlucidatypewriter75dpi ];
libjpeg_turbo = libjpeg_turbo.override { enableJava = true; };
};
udunits = callPackage ../development/libraries/udunits { };
uftp = callPackage ../servers/uftp {};