Merge branch 'master' into core-updates-frozen
[jackhill/guix/guix.git] / gnu / packages / arcan.scm
CommitLineData
e3209973
L
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)
38ffa53e 21 #:use-module (guix build-system gnu)
e3209973
L
22 #:use-module (guix git-download)
23 #:use-module ((guix licenses) #:prefix license:)
24 #:use-module (guix packages)
c3644813 25 #:use-module (guix utils)
e3209973
L
26 #:use-module (gnu packages apr)
27 #:use-module (gnu packages audio)
38ffa53e 28 #:use-module (gnu packages autotools)
e3209973
L
29 #:use-module (gnu packages compression)
30 #:use-module (gnu packages databases)
31 #:use-module (gnu packages fontutils)
b9c88c22 32 #:use-module (gnu packages freedesktop)
e3209973
L
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)
b9c88c22 38 #:use-module (gnu packages linux)
e3209973
L
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)
c3644813 44 #:use-module (gnu packages sdl)
e3209973 45 #:use-module (gnu packages sqlite)
38ffa53e 46 #:use-module (gnu packages tls)
e3209973 47 #:use-module (gnu packages video)
c3644813 48 #:use-module (gnu packages xdisorg)
38ffa53e 49 #:use-module (gnu packages xorg)
c3644813 50 #:use-module (srfi srfi-1))
e3209973
L
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
b0e7b699 62 (url "https://github.com/letoram/arcan")
e3209973
L
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")
425ccde6 78 (search-input-directory inputs "include/libdrm")))
e3209973
L
79 (substitute* "src/platform/cmake/modules/FindAPR.cmake"
80 (("/usr/local/apr/include/apr-1")
425ccde6 81 (search-input-directory inputs "include/apr-1")))
e3209973
L
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
b0e7b699 146 (url "https://github.com/letoram/openal")
e3209973
L
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
157anything from user interfaces for specialized embedded applications
158all the way to full-blown desktop environments. At its heart lies a multimedia
159engine 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)))))
c3644813
L
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)")))
38ffa53e
L
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
b0e7b699 196 (url "https://github.com/letoram/xarcan")
38ffa53e
L
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="
778d6b52 217 "/tmp")))) ; FIXME: Copied from xorg
38ffa53e
L
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
243as a window under Arcan.")
244 (license license:expat))))
b9c88c22
L
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
274with an Arcan connection point. It allows Wayland compatible clients
275to connect and render using Arcan.")
276 (license license:bsd-3)))