gnu: facter: Update to 4.0.33.
[jackhill/guix/guix.git] / gnu / packages / vnc.scm
CommitLineData
0992cfa1
TK
1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2019 Todor Kondić <tk.code@protonmail.com>
3d4bf400 3;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
a789f654 4;;; Copyright © 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
2195ad6b 5;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
0992cfa1
TK
6;;;
7;;; This file is part of GNU Guix.
8;;;
9;;; GNU Guix is free software; you can redistribute it and/or modify it
10;;; under the terms of the GNU General Public License as published by
11;;; the Free Software Foundation; either version 3 of the License, or (at
12;;; your option) any later version.
13;;;
14;;; GNU Guix is distributed in the hope that it will be useful, but
15;;; WITHOUT ANY WARRANTY; without even the implied warranty of
16;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17;;; GNU General Public License for more details.
18;;;
19;;; You should have received a copy of the GNU General Public License
20;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
21
94c7ef93
HG
22(define-module (gnu packages vnc)
23 #:use-module (guix build-system cmake)
24 #:use-module (guix download)
25 #:use-module (guix git-download)
26 #:use-module ((guix licenses) #:prefix license:)
27 #:use-module (guix packages)
28 #:use-module (guix utils)
a789f654 29 #:use-module (gnu packages)
0992cfa1 30 #:use-module (gnu packages autotools)
94c7ef93
HG
31 #:use-module (gnu packages base)
32 #:use-module (gnu packages cmake)
33 #:use-module (gnu packages commencement)
0992cfa1 34 #:use-module (gnu packages compression)
0992cfa1 35 #:use-module (gnu packages fltk)
94c7ef93 36 #:use-module (gnu packages gettext)
a789f654 37 #:use-module (gnu packages gnupg)
0992cfa1 38 #:use-module (gnu packages image)
94c7ef93 39 #:use-module (gnu packages linux)
0992cfa1 40 #:use-module (gnu packages perl)
a789f654
HG
41 #:use-module (gnu packages pkg-config)
42 #:use-module (gnu packages sdl)
94c7ef93
HG
43 #:use-module (gnu packages tls)
44 #:use-module (gnu packages xorg))
0992cfa1
TK
45
46(define-public tigervnc-client
d58c9574
OP
47 (let ((commit "920d9c4d6562ecabf79497bc901d50522d4bc661"))
48 (package
49 (name "tigervnc-client")
50 (version (git-version "1.10.1" "1" commit))
51 (source (origin
52 (method git-fetch)
53 (uri
54 (git-reference
b0e7b699 55 (url "https://github.com/TigerVNC/tigervnc")
d58c9574
OP
56 (commit commit)))
57 (sha256
58 (base32
59 "1lp6mxl5dqlkrzx0q145jzgpbwvhsni3fj6x9ngf8v5s63x82q1p"))
60 (file-name (git-file-name name version))))
61 (build-system cmake-build-system)
62 (arguments
63 '(#:tests? #f ; Tests that do exists are not automated.
64 #:phases (modify-phases %standard-phases
65 (replace 'install
66 (lambda* (#:key outputs #:allow-other-keys)
67 (with-directory-excursion "vncviewer"
68 (invoke "make" "install")))))))
69 (native-inputs
70 `(("autoconf" ,autoconf)
71 ("gettext-minimal" ,gettext-minimal)
72 ("automake" ,automake)))
73 (inputs
74 `(("zlib" ,zlib)
75 ("gnutls" ,gnutls)
76 ("libjpeg-turbo" ,libjpeg-turbo)
77 ("fltk" ,fltk)
78 ("linux-pam" ,linux-pam)
79 ("libx11" ,libx11)
80 ("libxext" ,libxext)
81 ("libxtst" ,libxtst)
82 ("libxrandr" ,libxrandr)
83 ("libxdamage" ,libxdamage)))
84 (home-page "https://tigervnc.org/")
85 (synopsis "High-performance, platform-neutral
0992cfa1 86implementation of VNC (client)")
d58c9574 87 (description "TigerVNC is a client/server implementation of VNC (Virtual
0992cfa1
TK
88Network Computing). It provides enough performance to run even 3D and video
89applications. It also provides extensions for advanced authentication methods
90and TLS encryption. This package installs only the VNC client, the
91application which is needed to connect to VNC servers.")
d58c9574 92 (license license:gpl2))))
04784d21
TK
93
94;; A VNC server is, in fact, an X server so it seems like a good idea
95;; to build on the work already done for xorg-server package. This is
96;; not entirely compatible with the recommendation in BUILDING.txt
97;; where the client is built first, then the source code of the X
98;; server is copied into a subdir of the build directory, patched with
99;; VNC additions and then build and installed as Xvnc. The procedure
100;; was turned around, where TigerVNC code is downloaded and built
101;; inside the Guix X server build dir. Also, the VNC patching process
102;; for the X server is automated in a straightforward manner.
103(define-public tigervnc-server
104 (package
105 (inherit xorg-server)
106 (name "tigervnc-server")
d58c9574 107 (version (package-version tigervnc-client))
04784d21 108 (native-inputs
d58c9574 109 `(("tigervnc-src" ,(package-source tigervnc-client))
04784d21
TK
110 ("autoconf" ,autoconf)
111 ("automake" ,automake)
112 ("libtool" ,libtool)
113 ("gettext-minimal" ,gettext-minimal)
114 ("font-util" ,font-util)
115 ("cmake" ,cmake)
116 ("gcc-toolchain" ,gcc-toolchain)
117 ("perl" ,perl)
118 ,@(package-native-inputs tigervnc-client)
119 ,@(package-inputs tigervnc-client)
120 ,@(package-native-inputs xorg-server)))
121 (inputs
122 `(("perl" ,perl)
123 ("coreutils" ,coreutils)
124 ("xauth" ,xauth)
125 ,@(package-inputs xorg-server)))
126 (propagated-inputs
127 `(("xauth" ,xauth)
128 ,@(package-propagated-inputs xorg-server)))
129 (arguments
130 (substitute-keyword-arguments
131 (package-arguments xorg-server)
132 ((#:configure-flags flags)
133 `(append '("--with-pic" ; Taken from BUILDING.txt
134 "--without-dtrace"
135 "--disable-static"
136 "--disable-dri2"
137 "--disable-xinerama"
138 "--disable-xvfb"
139 "--disable-xnest"
140 "--disable-xorg"
141 "--disable-dmx"
142 "--disable-xwin"
d8de3856 143 "--disable-xephyr"
04784d21
TK
144 "--disable-kdrive"
145 ;; "--disable-config-dbus" ; This was a warning.
146 "--disable-config-hal"
147 "--disable-config-udev"
148 "--disable-dri2"
149 ;; "--enable-install-libxf86config" ; This, too, was a warning.
150 "--enable-glx")
d8de3856 151 (delete "--enable-xephyr" ,flags)))
04784d21
TK
152 ((#:modules modules)
153 `(append '((ice-9 ftw)
154 (ice-9 match)
155 (guix build utils)
156 (guix build gnu-build-system))
157 modules))
158 ((#:phases phases)
159 `(modify-phases ,phases
160 (delete 'check) ;)
161 (add-after 'unpack 'copy-tvnc-xserver
162 (lambda _
163 (let*
164 ((tvnc-src (assoc-ref %build-inputs "tigervnc-src"))
165 (tvnc-xserver (string-append tvnc-src "/unix/xserver")))
166 (copy-recursively tvnc-xserver ".")
167 #t)))
168 (add-after 'copy-tvnc-xserver 'patch-xserver
169 (lambda _
170 (let*
171 ((tvnc-src (assoc-ref %build-inputs "tigervnc-src"))
172 (xorg-server-version ,(package-version xorg-server))
173 (which-patch (lambda ()
174 (let*
175 ((patch-num (apply string-append
176 (list-head (string-split xorg-server-version
177 #\.)
178 2)))
d58c9574 179 (fn (format #f "~a/unix/xserver~a.patch" tvnc-src patch-num)))
04784d21 180 (when (not (file-exists? fn))
d58c9574 181 (error (format #f "Patch file, ~a,
04784d21
TK
182corresponding to the input xorg-server version, does not exist. Installation
183will fail. " fn)))
184
185 fn))) ; VNC patches for xserver have the
186 ; form xserverXY[Y].patch, where
187 ; X.Y[Y].Z is the Xorg server
188 ; version.
189 (xserver-patch (which-patch)))
190 (invoke "patch" "-p1" "-i" xserver-patch)
191 (invoke "autoreconf" "-fiv"))))
192 (add-before 'build 'build-tigervnc
193 (lambda _
194 (let* ((out (assoc-ref %outputs "out"))
195 (tvnc-src (assoc-ref %build-inputs "tigervnc-src"))
196 (tvnc-build (string-append (getcwd) "/tigervnc-build")))
197 (mkdir-p tvnc-build)
198 (with-directory-excursion tvnc-build
199 (invoke "cmake" "-G" "Unix Makefiles"
200 (string-append "-DCMAKE_INSTALL_PREFIX=" out)
201 tvnc-src)
202 (invoke "make" "-j" (number->string (parallel-job-count)))))))
203 (replace 'build
204 (lambda _
205 (let* ((tvnc-src (assoc-ref %build-inputs "tigervnc-src"))
206 (tvnc-build (string-append (getcwd) "/tigervnc-build"))
207 (srcarg (string-append "TIGERVNC_SRCDIR=" tvnc-src))
208 (buildarg (string-append "TIGERVNC_BUILDDIR=" tvnc-build)))
209 (invoke "make" srcarg buildarg "-j"
210 (number->string (parallel-job-count))))))
211 (add-before 'install 'install-tigervnc-aux
212 (lambda _
213 (let* ((out (assoc-ref %outputs 'out))
214 (tvnc-src (assoc-ref %build-inputs "tigervnc-src"))
215 (tvnc-build (string-append (getcwd) "/tigervnc-build"))
216 (srcarg (string-append "TIGERVNC_SRCDIR=" tvnc-src))
217 (buildarg (string-append "TIGERVNC_BUILDDIR=" tvnc-build)))
218 (with-directory-excursion (string-append tvnc-build "/unix")
219 (invoke "make" srcarg buildarg "install")))))
220 (replace 'install
221 (lambda* _
222 (let* ((tvnc-src (assoc-ref %build-inputs "tigervnc-src"))
223 (tvnc-build (string-append (getcwd) "/tigervnc-build"))
224 (srcarg (string-append "TIGERVNC_SRCDIR=" tvnc-src))
225 (buildarg (string-append "TIGERVNC_BUILDDIR=" tvnc-build)))
226 (invoke "make" "install" srcarg buildarg))))))))
227 (description "TigerVNC is a client/server implementation of VNC (Virtual
228Network Computing). It provides enough performance to run even 3D and video
229applications. It also provides extensions for advanced authentication methods
230and TLS encryption. This package installs the VNC server, a program that will
231enable users with VNC clients to log into a graphical session on the machine
232where the server is installed.")))
a789f654
HG
233
234(define-public libvnc
235 (package
236 (name "libvnc")
2195ad6b 237 (version "0.9.13")
a789f654
HG
238 (source
239 (origin
240 (method git-fetch)
241 (uri (git-reference
b0e7b699 242 (url "https://github.com/LibVNC/libvncserver")
a789f654
HG
243 (commit (string-append "LibVNCServer-" version))))
244 (file-name (git-file-name name version))
245 (sha256
2195ad6b 246 (base32 "0zz0hslw8b1p3crnfy3xnmrljik359h83dpk64s697dqdcrzy141"))))
a789f654 247 (build-system cmake-build-system)
2195ad6b
MB
248 (arguments
249 '(#:phases (modify-phases %standard-phases
250 (add-after 'unpack 'patch-cc-reference
251 (lambda _
252 (substitute* "test/includetest.sh"
253 (("^cc -I")
254 "gcc -I"))
255 #t)))))
a789f654
HG
256 (native-inputs
257 `(("pkg-config" ,pkg-config)))
258 (inputs
259 `(("gnutls" ,gnutls)
260 ("libgcrypt" ,libgcrypt)
12d8adbf 261 ("libjpeg" ,libjpeg-turbo)
a789f654
HG
262 ("libpng" ,libpng)
263 ("lzo" ,lzo)
264 ("sdl2" ,sdl2)))
265 (home-page "https://libvnc.github.io/")
266 (synopsis "Cross-platform C libraries for implementing VNC server or
267client")
268 (description "This package provides @code{LibVNCServer} and
269@code{LibVNCClient}. These are cross-platform C libraries that allow you to
270easily implement VNC server or client functionality in your program.")
271 (license ;; GPL for programs, FDL for documentation
272 (list license:gpl2+ license:fdl1.2+))))