Merge branch 'master' into core-updates-frozen
[jackhill/guix/guix.git] / gnu / packages / arcan.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2019 L p R n d n <guix@lprndn.info>
3 ;;;
4 ;;; This file is part of GNU Guix.
5 ;;;
6 ;;; GNU Guix is free software; you can redistribute it and/or modify it
7 ;;; under the terms of the GNU General Public License as published by
8 ;;; the Free Software Foundation; either version 3 of the License, or (at
9 ;;; your option) any later version.
10 ;;;
11 ;;; GNU Guix is distributed in the hope that it will be useful, but
12 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 ;;; GNU General Public License for more details.
15 ;;;
16 ;;; You should have received a copy of the GNU General Public License
17 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
18
19 (define-module (gnu packages arcan)
20 #:use-module (guix build-system cmake)
21 #:use-module (guix build-system gnu)
22 #:use-module (guix git-download)
23 #:use-module ((guix licenses) #:prefix license:)
24 #:use-module (guix packages)
25 #:use-module (guix utils)
26 #:use-module (gnu packages apr)
27 #:use-module (gnu packages audio)
28 #:use-module (gnu packages autotools)
29 #:use-module (gnu packages compression)
30 #:use-module (gnu packages databases)
31 #:use-module (gnu packages fontutils)
32 #:use-module (gnu packages freedesktop)
33 #:use-module (gnu packages gl)
34 #:use-module (gnu packages glib)
35 #:use-module (gnu packages gtk)
36 #:use-module (gnu packages image)
37 #:use-module (gnu packages libusb)
38 #:use-module (gnu packages linux)
39 #:use-module (gnu packages lua)
40 #:use-module (gnu packages ocr)
41 #:use-module (gnu packages pcre)
42 #:use-module (gnu packages pkg-config)
43 #:use-module (gnu packages ruby)
44 #:use-module (gnu packages sdl)
45 #:use-module (gnu packages sqlite)
46 #:use-module (gnu packages tls)
47 #:use-module (gnu packages video)
48 #:use-module (gnu packages xdisorg)
49 #:use-module (gnu packages xorg)
50 #:use-module (srfi srfi-1))
51
52 (define-public arcan
53 (let ((commit "b4dd1fbd1938492ff4b269189d3c8524be7450a9")
54 (revision "1"))
55 (package
56 (name "arcan")
57 (version (git-version "0.5.5.2" revision commit))
58 (source (origin
59 (method git-fetch)
60 (file-name (git-file-name name version))
61 (uri (git-reference
62 (url "https://github.com/letoram/arcan")
63 (commit commit)))
64 (sha256
65 (base32 "1pd0avlzc2rig1hd37zbhc7r2s6fjzdhshfg9l9cfzibl7caclyw"))))
66 (build-system cmake-build-system)
67 (arguments
68 `(#:configure-flags '("-DVIDEO_PLATFORM=egl-dri" "-DBUILTIN_LUA=off"
69 "-DSTATIC_OPENAL=off""-DENABLE_LWA=on"
70 "-DSTATIC_SQLITE3=off" "-DSTATIC_FREETYPE=off"
71 "-DSHMIF_TUI_ACCEL=on")
72 #:phases
73 (modify-phases %standard-phases
74 (add-after 'unpack 'fix-cmake-paths
75 (lambda* (#:key inputs #:allow-other-keys)
76 (substitute* "src/platform/cmake/modules/FindGBMKMS.cmake"
77 (("/usr/local/include/libdrm")
78 (search-input-directory inputs "include/libdrm")))
79 (substitute* "src/platform/cmake/modules/FindAPR.cmake"
80 (("/usr/local/apr/include/apr-1")
81 (search-input-directory inputs "include/apr-1")))
82 #t))
83 ;; Normally, it tries to fetch patched openal with git
84 ;; but copying files manually in the right place seems to work too.
85 (add-after 'unpack 'prepare-static-openal
86 (lambda* (#:key inputs #:allow-other-keys)
87 (let ((arcan-openal (assoc-ref inputs "arcan-openal")))
88 (copy-recursively arcan-openal "external/git/openal"))
89 #t))
90 (add-after 'prepare-static-openal 'generate-man
91 (lambda _
92 (with-directory-excursion "doc"
93 (invoke "ruby" "docgen.rb" "mangen"))
94 #t))
95 (add-before 'configure 'chdir
96 (lambda _
97 (chdir "src")
98 #t))
99 (add-after 'install 'wrap-program
100 (lambda* (#:key outputs #:allow-other-keys)
101 (let ((out (assoc-ref outputs "out")))
102 (wrap-program (string-append out "/bin/arcan")
103 `("ARCAN_RESOURCEPATH" ":" suffix
104 (,(string-append out "/share/arcan/resources")))
105 `("ARCAN_STATEBASEPATH" ":" =
106 ("$HOME/.arcan/resources/savestates"))
107 `("ARCAN_STATEPATH" ":" =
108 ("$HOME/.arcan/resources/savestates"))
109 `("ARCAN_BINPATH" ":" =
110 (,(string-append out "/bin/arcan_frameserver")))))
111 #t)))
112 #:tests? #f))
113 (native-search-paths
114 (list (search-path-specification
115 (variable "ARCAN_APPLBASEPATH")
116 (separator #f)
117 (files '("share/arcan/appl")))
118 (search-path-specification
119 (variable "ARCAN_SCRIPTPATH")
120 (separator #f)
121 (files '("share/arcan/scripts")))))
122 (inputs
123 `(("apr" ,apr)
124 ("ffmpeg" ,ffmpeg)
125 ("freetype" ,freetype)
126 ("glib" ,glib)
127 ("glu" ,glu)
128 ("harfbuzz" ,harfbuzz)
129 ("libdrm" ,libdrm)
130 ("libusb" ,libusb)
131 ("libxkbcommon" ,libxkbcommon)
132 ("lua" ,luajit)
133 ("lzip" ,lzip)
134 ("openal" ,openal)
135 ("pcre" ,pcre)
136 ("sqlite" ,sqlite)
137 ("tesseract-ocr" ,tesseract-ocr)
138 ("leptonica" ,leptonica)
139 ("vlc" ,vlc)
140 ;; To build arcan_lwa, we need a patched version of openal.
141 ;; https://github.com/letoram/arcan/wiki/packaging
142 ("arcan-openal" ,(origin
143 (method git-fetch)
144 (file-name "arcan-openal-0.5.4")
145 (uri (git-reference
146 (url "https://github.com/letoram/openal")
147 (commit "1c7302c580964fee9ee9e1d89ff56d24f934bdef")))
148 (sha256
149 (base32
150 "0dcxcnqjkyyqdr2yk84mprvkncy5g172kfs6vc4zrkklsbkr8yi2"))))))
151 (native-inputs
152 `(("pkg-config" ,pkg-config)
153 ("ruby" ,ruby))) ; For documentation and testing
154 (home-page "https://arcan-fe.com")
155 (synopsis "Display server, multimedia framework and game engine (egl-dri)")
156 (description "Arcan is a development framework for creating virtually
157 anything from user interfaces for specialized embedded applications
158 all the way to full-blown desktop environments. At its heart lies a multimedia
159 engine programmable using Lua.")
160 ;; https://github.com/letoram/arcan/blob/master/COPYING
161 (license (list license:gpl2+
162 license:lgpl2.0
163 license:lgpl2.0+
164 license:public-domain
165 license:bsd-3)))))
166
167 (define-public arcan-sdl
168 (package
169 (inherit arcan)
170 (name "arcan-sdl")
171 (inputs
172 `(("sdl" ,sdl)
173 ,@(fold alist-delete (package-inputs arcan)
174 '("libdrm"))))
175 (arguments
176 `(,@(ensure-keyword-arguments
177 (package-arguments arcan)
178 '(#:configure-flags
179 '("-DVIDEO_PLATFORM=sdl" "-DBUILTIN_LUA=off"
180 "-DSTATIC_OPENAL=off" "-DDISABLE_JIT=off"
181 "-DENABLE_LWA=on" "-DSTATIC_SQLITE3=off"
182 "-DSTATIC_FREETYPE=off" "-DSHMIF_TUI_ACCEL=on")))))
183 (synopsis "Combined display server, multimedia framework and game engine (SDL)")))
184
185 (define-public xarcan
186 (let ((commit "8e6ee029388326cfe5cddeffe482eb3702e9b7f3")
187 (revision "1" ))
188 (package
189 (name "xarcan")
190 (version (git-version "0.5.4" revision commit))
191 (source
192 (origin
193 (method git-fetch)
194 (file-name (git-file-name name version))
195 (uri (git-reference
196 (url "https://github.com/letoram/xarcan")
197 (commit commit)))
198 (sha256
199 (base32 "0zng7cs6733mnf0p6g5wv02981f2sf567n56csax6cmzb8fpamym"))))
200 (build-system gnu-build-system)
201 (arguments
202 `(#:configure-flags
203 `("--enable-kdrive" "--enable-xarcan"
204 "--disable-xorg" "--disable-xwayland"
205 "--disable-xnest" "--disable-xvfb"
206 "--enable-glamor" "--enable-glx"
207 "--disable-int10-module" "--enable-ipv6"
208 "--enable-record" "--without-systemd-daemon"
209 "--enable-xcsecurity" "--disable-static"
210 ,(string-append "--with-xkb-path="
211 (assoc-ref %build-inputs "xkeyboard-config")
212 "/share/X11/xkb")
213 ,(string-append "--with-xkb-bin-directory="
214 (assoc-ref %build-inputs "xkbcomp")
215 "/bin")
216 ,(string-append "--with-xkb-output="
217 "/tmp")))) ; FIXME: Copied from xorg
218 (native-inputs
219 `(("pkg-config" ,pkg-config)
220 ("autoconf" ,autoconf)
221 ("automake" ,automake)
222 ("libtool" ,libtool)
223 ("util-macros" ,util-macros)))
224 (inputs
225 `(("arcan" ,arcan)
226 ("font-util" ,font-util)
227 ("libdrm" ,libdrm)
228 ("libepoxy" ,libepoxy)
229 ("libkbfile" ,libxkbfile)
230 ("libressl" ,libressl)
231 ("libx11" ,libx11)
232 ("libxfont2" ,libxfont2)
233 ("mesa" ,mesa)
234 ("pixman" ,pixman)
235 ("xkeyboard-config" ,xkeyboard-config)
236 ("xkbcomp" ,xkbcomp)
237 ("xorgproto" ,xorgproto)
238 ("xtrans" ,xtrans)))
239 (home-page "https://arcan-fe.com")
240 (synopsis "Patched Xserver that bridges connections to Arcan")
241 (description "Patched Xserver with a KDrive backend that uses the arcan-shmif
242 to map Xlib/Xcb/X clients to a running arcan instance. It allows running an X session
243 as a window under Arcan.")
244 (license license:expat))))
245
246 (define-public arcan-wayland
247 (package
248 (inherit arcan)
249 (name "arcan-wayland")
250 (native-inputs
251 `(("pkg-config" ,pkg-config)))
252 (inputs
253 `(("arcan" ,arcan)
254 ("libseccomp" ,libseccomp)
255 ("libxkbcommon" ,libxkbcommon)
256 ("mesa" ,mesa)
257 ("wayland" ,wayland)
258 ("wayland-protocols" ,wayland-protocols)))
259 (arguments
260 `(#:tests? #f
261 #:phases
262 (modify-phases %standard-phases
263 (add-before 'configure 'chdir
264 (lambda _
265 (chdir "src/tools/waybridge")
266 #t))
267 (add-after 'unpack 'fix-cmake-find-shmif
268 (lambda* (#:key inputs #:allow-other-keys)
269 (substitute* "src/platform/cmake/modules/Findarcan_shmif.cmake"
270 (("/usr/local") (assoc-ref inputs "arcan")))
271 #t)))))
272 (synopsis "Wayland protocol service for Arcan")
273 (description "Arcan-wayland (waybridge) bridges Wayland connections
274 with an Arcan connection point. It allows Wayland compatible clients
275 to connect and render using Arcan.")
276 (license license:bsd-3)))