gnu: Add rust-sharded-slab-0.1.
[jackhill/guix/guix.git] / gnu / packages / gl.scm
CommitLineData
daca8666 1;;; GNU Guix --- Functional package management for GNU
187731a5 2;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
822efdff 3;;; Copyright © 2013 Joshua Grant <tadni@riseup.net>
432360d7 4;;; Copyright © 2014, 2016 David Thompson <davet@gnu.org>
d0d0f8d1 5;;; Copyright © 2014, 2015, 2016, 2017 Mark H Weaver <mhw@netris.org>
3c986a7d 6;;; Copyright © 2016 Nikita <nikita@n0.is>
ad1edd03 7;;; Copyright © 2016, 2017, 2018, 2020 Ricardo Wurmus <rekado@elephly.net>
b4c8c413 8;;; Copyright © 2016 David Thompson <davet@gnu.org>
ba4c0d69 9;;; Copyright © 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
725d8d2c 10;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
e6a668ec 11;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
6018d1ee 12;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
5c154738 13;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
8ae17933 14;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
7bb0ba81 15;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
906fc911 16;;; Copyright © 2020 Kei Kebreau <kkebreau@posteo.net>
daca8666
JG
17;;;
18;;; This file is part of GNU Guix.
19;;;
20;;; GNU Guix is free software; you can redistribute it and/or modify it
21;;; under the terms of the GNU General Public License as published by
22;;; the Free Software Foundation; either version 3 of the License, or (at
23;;; your option) any later version.
24;;;
25;;; GNU Guix is distributed in the hope that it will be useful, but
26;;; WITHOUT ANY WARRANTY; without even the implied warranty of
27;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28;;; GNU General Public License for more details.
29;;;
30;;; You should have received a copy of the GNU General Public License
31;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
32
33(define-module (gnu packages gl)
c4a667bf 34 #:use-module (gnu packages)
b021a2ad 35 #:use-module (gnu packages autotools)
200726ed 36 #:use-module (gnu packages bison)
725d8d2c 37 #:use-module (gnu packages compression)
432360d7 38 #:use-module (gnu packages documentation)
653569e8 39 #:use-module (gnu packages elf)
200726ed 40 #:use-module (gnu packages flex)
3a92a5b3
DC
41 #:use-module (gnu packages fontutils)
42 #:use-module (gnu packages freedesktop)
ce4d7abf 43 #:use-module (gnu packages gettext)
3a92a5b3 44 #:use-module (gnu packages guile)
725d8d2c 45 #:use-module (gnu packages image)
ce4d7abf 46 #:use-module (gnu packages linux)
093c6f8b 47 #:use-module (gnu packages llvm)
bea58fa1 48 #:use-module (gnu packages mono)
3a92a5b3 49 #:use-module (gnu packages pkg-config)
200726ed 50 #:use-module (gnu packages python)
44d10b1f 51 #:use-module (gnu packages python-xyz)
d64f3439 52 #:use-module (gnu packages tls)
7e31978b 53 #:use-module (gnu packages video)
301b2e74 54 #:use-module (gnu packages vulkan)
2b226af1 55 #:use-module (gnu packages xdisorg)
3a92a5b3
DC
56 #:use-module (gnu packages xml)
57 #:use-module (gnu packages xorg)
3a92a5b3 58 #:use-module (guix download)
872ea4eb 59 #:use-module (guix git-download)
5c154738 60 #:use-module (guix hg-download)
3a92a5b3
DC
61 #:use-module (guix build-system gnu)
62 #:use-module (guix build-system cmake)
54d860cc 63 #:use-module (guix build-system meson)
906fc911 64 #:use-module (guix build-system waf)
3a92a5b3
DC
65 #:use-module ((guix licenses) #:prefix license:)
66 #:use-module (guix packages)
67 #:use-module (guix utils)
3ee7b4cc 68 #:use-module (ice-9 match)
af403cf0 69 #:use-module ((srfi srfi-1) #:hide (zip)))
daca8666
JG
70
71(define-public glu
72 (package
73 (name "glu")
1dff73ac 74 (version "9.0.1")
daca8666 75 (source (origin
a124bbd2
SB
76 (method url-fetch)
77 (uri (string-append "ftp://ftp.freedesktop.org/pub/mesa/glu/glu-"
78 version ".tar.gz"))
79 (sha256
80 (base32
1dff73ac 81 "1xqhk9bn10nbvffw3r4p4rjslwz1l7gaycc0x2pqkr2irp7q9x7n"))))
daca8666 82 (build-system gnu-build-system)
187731a5 83 (propagated-inputs
a124bbd2 84 `(("mesa" ,mesa))) ; according to glu.pc
daca8666
JG
85 (home-page "http://www.opengl.org/archives/resources/faq/technical/glu.htm")
86 (synopsis "Mesa OpenGL Utility library")
87 (description
88 "GLU, or OpenGL Utility Library provides some higher-level functionality
35b9e423 89not provided by just OpenGL itself. Some of GLU's Features
daca8666
JG
90include: Scaling of 2D images and creation of mipmap pyramids,
91Transformation of object coordinates into device coordinates and
92vice versa, Support for NURBS surfaces, Support for tessellation
93of concave or bow tie polygonal primitives, Specialty transformation
94matrices for creating perspective and orthographic projections,
95positioning a camera, and selection/picking, Rendering of disk,
96cylinder, and sphere primitives, Interpreting OpenGL error values
97as ASCII text.")
584f2e1b 98 (license (license:x11-style "http://directory.fsf.org/wiki/License:SGIFreeBv2"))))
daca8666
JG
99
100(define-public freeglut
101 (package
102 (name "freeglut")
64136870 103 (version "3.2.1")
daca8666 104 (source (origin
a124bbd2
SB
105 (method url-fetch)
106 (uri (string-append
0f971a04 107 "mirror://sourceforge/freeglut/freeglut/"
a124bbd2
SB
108 version "/freeglut-" version ".tar.gz"))
109 (sha256
110 (base32
64136870 111 "0s6sk49q8ijgbsrrryb7dzqx2fa744jhx1wck5cz5jia2010w06l"))))
8ce36e81 112 (build-system cmake-build-system)
5f613047
MB
113 (arguments
114 '(#:tests? #f ;no test target
115 #:configure-flags '("-DFREEGLUT_BUILD_STATIC_LIBS=OFF")))
64136870 116 (inputs `(("libx11" ,libx11)
a124bbd2
SB
117 ("libxi" ,libxi)
118 ("libxrandr" ,libxrandr)
64136870 119 ("libxxf86vm" ,libxxf86vm)))
9b5db9be
TUBK
120 (propagated-inputs
121 ;; Headers from Mesa and GLU are needed.
122 `(("glu" ,glu)
123 ("mesa" ,mesa)))
daca8666
JG
124 (home-page "http://freeglut.sourceforge.net/")
125 (synopsis "Alternative to the OpenGL Utility Toolkit (GLUT)")
126 (description
127 "Freeglut is a completely Free/OpenSourced alternative to
35b9e423 128the OpenGL Utility Toolkit (GLUT) library. GLUT was originally
daca8666 129written by Mark Kilgard to support the sample programs in the
36a4366d 130second edition OpenGL @code{RedBook}. Since then, GLUT has been used
daca8666
JG
131in a wide variety of practical applications because it is simple,
132widely available and highly portable.
133
134GLUT (and hence freeglut) allows the user to create and manage windows
135containing OpenGL contexts on a wide range of platforms and also read
35b9e423 136the mouse, keyboard and joystick functions. Freeglut is released under
daca8666 137the X-Consortium license.")
584f2e1b 138 (license license:x11)))
daca8666 139
0da0f434
RW
140;; Needed for "kiki".
141(define-public freeglut-2.8
142 (package (inherit freeglut)
143 (name "freeglut")
144 (version "2.8.1")
145 (source (origin
146 (method url-fetch)
147 (uri (string-append
148 "mirror://sourceforge/freeglut/freeglut/"
149 version "/freeglut-" version ".tar.gz"))
150 (sha256
151 (base32
152 "16lrxxxd9ps9l69y3zsw6iy0drwjsp6m26d1937xj71alqk6dr6x"))))
80921d29
MB
153 (build-system gnu-build-system)
154 (arguments
155 '(#:configure-flags '("--disable-static")))))
0da0f434 156
daca8666
JG
157(define-public ftgl
158 (package
159 (name "ftgl")
c7e31cde
MB
160 (version "2.4.0")
161 (home-page "https://github.com/frankheckenbach/ftgl")
daca8666 162 (source (origin
c7e31cde
MB
163 (method git-fetch)
164 (uri (git-reference (url home-page)
165 (commit (string-append "v" version))))
166 (file-name (git-file-name name version))
a124bbd2
SB
167 (sha256
168 (base32
c7e31cde 169 "0zjs1h9w30gajq9lndzvjsa26rsmr1081lb1fbpbj10yhcdcsc79"))))
daca8666 170 (build-system gnu-build-system)
2e652add
MB
171 (arguments
172 `(#:configure-flags '("--disable-static")))
9e850534
RW
173 ;; The pkg-config file lists "freetype2" as Requires.private.
174 (propagated-inputs `(("freetype" ,freetype)))
175 (inputs `(("libx11" ,libx11)
a124bbd2
SB
176 ("mesa" ,mesa)
177 ("glu" ,glu)))
a53a5b71 178 (native-inputs
c7e31cde
MB
179 `(("pkg-config" ,pkg-config)
180 ("autoconf" ,autoconf)
181 ("automake" ,automake)
182 ("libtool" ,libtool)))
daca8666
JG
183 (synopsis "Font rendering library for OpenGL applications")
184 (description
35b9e423 185 "FTGL is a font rendering library for OpenGL applications. Supported
daca8666 186rendering modes are: Bitmaps, Anti-aliased pixmaps, Texture maps, Outlines,
e881752c 187Polygon meshes, and Extruded polygon meshes.")
584f2e1b 188 (license license:x11)))
200726ed 189
b021a2ad
TUBK
190(define-public s2tc
191 (package
192 (name "s2tc")
193 (version "1.0")
194 (source
195 (origin
872ea4eb
RW
196 (method git-fetch)
197 (uri (git-reference
b0e7b699 198 (url "https://github.com/divVerent/s2tc")
872ea4eb
RW
199 (commit (string-append "v" version))))
200 (file-name (git-file-name name version))
b021a2ad 201 (sha256
872ea4eb 202 (base32 "1fg323fk7wlv2xh6lw66wswgcv6qi8aaadk7c28h2f2lj1s7njnf"))))
b021a2ad
TUBK
203 (build-system gnu-build-system)
204 (native-inputs
205 `(("autoconf" ,autoconf)
206 ("automake" ,automake)
207 ("libtool" ,libtool)))
208 (inputs
209 `(("mesa-headers" ,mesa-headers)))
b021a2ad
TUBK
210 (home-page "https://github.com/divVerent/s2tc")
211 (synopsis "S3 Texture Compression implementation")
212 (description
213 "S2TC is a patent-free implementation of S3 Texture Compression (S3TC,
214also known as DXTn or DXTC) for Mesa.")
584f2e1b 215 (license license:expat)))
b021a2ad 216
7e31978b
TUBK
217;;; Mesa needs LibVA headers to build its Gallium-based VA API implementation;
218;;; LibVA itself depends on Mesa. We use the following to solve the circular
219;;; dependency.
220(define libva-without-mesa
221 ;; Delay to work around circular import problem.
222 (delay
223 (package
224 (inherit libva)
225 (name "libva-without-mesa")
3ee7b4cc
EF
226 (inputs `(,@(fold alist-delete (package-inputs libva)
227 '("mesa" "wayland"))))
7e31978b
TUBK
228 (arguments
229 (strip-keyword-arguments
230 '(#:make-flags)
231 (substitute-keyword-arguments (package-arguments libva)
232 ((#:configure-flags flags)
233 '(list "--disable-glx" "--disable-egl"))))))))
234
200726ed
JD
235(define-public mesa
236 (package
237 (name "mesa")
b7c0b0ad 238 (version "20.1.9")
200726ed
JD
239 (source
240 (origin
241 (method url-fetch)
57cdc1fa
MB
242 (uri (list (string-append "https://mesa.freedesktop.org/archive/"
243 "mesa-" version ".tar.xz")
244 (string-append "ftp://ftp.freedesktop.org/pub/mesa/"
0315b20a
MB
245 "mesa-" version ".tar.xz")
246 (string-append "ftp://ftp.freedesktop.org/pub/mesa/"
247 version "/mesa-" version ".tar.xz")))
200726ed 248 (sha256
ce4d7abf 249 (base32
b7c0b0ad 250 "10kk8a8k7f4ip8yaiqdyrx162nbw8pw4h3b4hs4ha8mpd43wlldj"))
17f2b485 251 (patches
91304b79 252 (search-patches "mesa-skip-disk-cache-test.patch"))))
f6dadee4 253 (build-system meson-build-system)
200726ed 254 (propagated-inputs
70b02a6a 255 `(;; The following are in the Requires.private field of gl.pc.
ce4d7abf 256 ("libdrm" ,libdrm)
4ea1ad91 257 ("libvdpau" ,libvdpau)
8bb1699b 258 ("libx11" ,libx11)
200726ed 259 ("libxdamage" ,libxdamage)
45191970
TUBK
260 ("libxfixes" ,libxfixes)
261 ("libxshmfence" ,libxshmfence)
70b02a6a
MB
262 ("libxxf86vm" ,libxxf86vm)
263 ("xorgproto" ,xorgproto)))
200726ed 264 (inputs
e0b744f1 265 `(("expat" ,expat)
9b3b4c05 266 ("libelf" ,elfutils) ;required for r600 when using llvm
7e31978b 267 ("libva" ,(force libva-without-mesa))
200726ed 268 ("libxml2" ,libxml2)
ce4d7abf 269 ;; TODO: Add 'libxml2-python' for OpenGL ES 1.1 and 2.0 support
aea3ec0f 270 ("libxrandr" ,libxrandr)
0272ee49 271 ("libxvmc" ,libxvmc)
c5e91014
EF
272 ,@(match (%current-system)
273 ((or "x86_64-linux" "i686-linux")
f5eb13b2 274 ;; Note: update the 'clang' input of mesa-opencl when bumping this.
e634d959 275 `(("llvm" ,llvm-10)))
c5e91014
EF
276 (_
277 `()))
cb639269
MB
278 ("wayland" ,wayland)
279 ("wayland-protocols" ,wayland-protocols)))
200726ed 280 (native-inputs
f6dadee4
RH
281 `(("bison" ,bison)
282 ("flex" ,flex)
283 ("gettext" ,gettext-minimal)
301b2e74
RH
284 ,@(match (%current-system)
285 ((or "x86_64-linux" "i686-linux")
47406a92 286 `(("glslang" ,glslang)))
301b2e74
RH
287 (_
288 `()))
f6dadee4 289 ("pkg-config" ,pkg-config)
178611c8 290 ("python" ,python-wrapper)
17c3e0d8 291 ("python-mako" ,python-mako)
653569e8 292 ("which" ,(@ (gnu packages base) which))))
0df5bdf8 293 (outputs '("out" "bin"))
200726ed 294 (arguments
ce4d7abf 295 `(#:configure-flags
2a8b89c2 296 '(,@(match (%current-system)
cd9f99f1 297 ((or "armhf-linux" "aarch64-linux")
31c70cce 298 ;; TODO: Fix svga driver for aarch64 and armhf.
ee401ed9 299 '("-Dgallium-drivers=etnaviv,freedreno,kmsro,lima,nouveau,panfrost,r300,r600,swrast,tegra,v3d,vc4,virgl"))
2a8b89c2 300 (_
688d8f22 301 '("-Dgallium-drivers=iris,nouveau,r300,r600,radeonsi,svga,swrast,virgl")))
3e2570d8
TUBK
302 ;; Enable various optional features. TODO: opencl requires libclc,
303 ;; omx requires libomxil-bellagio
f6dadee4
RH
304 "-Dplatforms=x11,drm,surfaceless,wayland"
305 "-Dglx=dri" ;Thread Local Storage, improves performance
306 ;; "-Dopencl=true"
307 ;; "-Domx=true"
308 "-Dosmesa=gallium"
309 "-Dgallium-xa=true"
310
8ea75f27 311 ;; features required by wayland
f6dadee4
RH
312 "-Dgles2=true"
313 "-Dgbm=true"
314 "-Dshared-glapi=true"
0315b20a 315
abdb97f8 316 ;; Enable Vulkan on i686-linux and x86-64-linux.
6713e9cb 317 ,@(match (%current-system)
3f14c913 318 ((or "i686-linux" "x86_64-linux")
f6dadee4 319 '("-Dvulkan-drivers=intel,amd"))
6713e9cb 320 (_
7d1494d9 321 '("-Dvulkan-drivers=auto")))
6713e9cb 322
301b2e74
RH
323 ;; Enable the Vulkan overlay layer on i686-linux and x86-64-linux.
324 ,@(match (%current-system)
325 ((or "x86_64-linux" "i686-linux")
326 '("-Dvulkan-overlay-layer=true"))
327 (_
93ef8ca6 328 '()))
301b2e74 329
044006f3 330 ;; Also enable the tests.
f6dadee4 331 "-Dbuild-tests=true"
0f481f06
MW
332
333 ;; on non-intel systems, drop i915 and i965
334 ;; from the default dri drivers
335 ,@(match (%current-system)
336 ((or "x86_64-linux" "i686-linux")
f6dadee4
RH
337 '("-Ddri-drivers=i915,i965,nouveau,r200,r100"
338 "-Dllvm=true")) ; default is x86/x86_64 only
0f481f06 339 (_
f6dadee4 340 '("-Ddri-drivers=nouveau,r200,r100"))))
6fe808f4
MB
341
342 ;; XXX: 'debugoptimized' causes LTO link failures on some drivers. The
343 ;; documentation recommends using 'release' for performance anyway.
344 #:build-type "release"
345
dcc00f54
LC
346 #:modules ((ice-9 match)
347 (srfi srfi-1)
348 (guix build utils)
f6dadee4 349 (guix build meson-build-system))
e8a7a180
EF
350 #:phases
351 (modify-phases %standard-phases
ccbc1c5e
PN
352 ,@(if (string-prefix? "i686" (or (%current-target-system)
353 (%current-system)))
4bed3b10
MB
354 ;; Disable new test from Mesa 19 that fails on i686. Upstream
355 ;; report: <https://bugs.freedesktop.org/show_bug.cgi?id=110612>.
356 `((add-after 'unpack 'disable-failing-test
357 (lambda _
2d271359 358 (substitute* "src/util/tests/format/meson.build"
4bed3b10
MB
359 (("'u_format_test',") ""))
360 #t)))
361 '())
5a746104 362 (add-before 'configure 'fix-dlopen-libnames
e8a7a180 363 (lambda* (#:key inputs outputs #:allow-other-keys)
db481977 364 (let ((out (assoc-ref outputs "out")))
e8a7a180
EF
365 ;; Remain agnostic to .so.X.Y.Z versions while doing
366 ;; the substitutions so we're future-safe.
5a746104
MB
367 (substitute* "src/glx/meson.build"
368 (("-DGL_LIB_NAME=\"lib@0@\\.so\\.@1@\"")
369 (string-append "-DGL_LIB_NAME=\"" out
370 "/lib/lib@0@.so.@1@\"")))
371 (substitute* "src/gbm/backends/dri/gbm_dri.c"
e8a7a180
EF
372 (("\"libglapi\\.so")
373 (string-append "\"" out "/lib/libglapi.so")))
374 (substitute* "src/gbm/main/backend.c"
375 ;; No need to patch the gbm_gallium_drm.so reference;
376 ;; it's never installed since Mesa removed its
377 ;; egl_gallium support.
378 (("\"gbm_dri\\.so")
0315b20a 379 (string-append "\"" out "/lib/dri/gbm_dri.so")))
dcc00f54 380 #t)))
0df5bdf8
MB
381 (add-after 'install 'split-outputs
382 (lambda* (#:key outputs #:allow-other-keys)
383 (let ((out (assoc-ref outputs "out"))
384 (bin (assoc-ref outputs "bin")))
385 ,@(match (%current-system)
386 ((or "i686-linux" "x86_64-linux")
387 ;; Install the Vulkan overlay control script to a separate
388 ;; output to prevent a reference on Python, saving ~70 MiB
389 ;; on the closure size.
390 '((copy-recursively (string-append out "/bin")
391 (string-append bin "/bin"))
392 (delete-file-recursively (string-append out "/bin"))))
393 (_
394 ;; XXX: On architectures without the Vulkan overlay layer
395 ;; just create an empty file because outputs can not be
396 ;; added conditionally.
397 '((mkdir-p (string-append bin "/bin"))
398 (call-with-output-file (string-append bin "/bin/.empty")
399 (const #t)))))
400 #t)))
dcc00f54
LC
401 (add-after 'install 'symlinks-instead-of-hard-links
402 (lambda* (#:key outputs #:allow-other-keys)
403 ;; All the drivers and gallium targets create hard links upon
404 ;; installation (search for "hardlink each megadriver instance"
405 ;; in the makefiles). This is no good for us since we'd produce
406 ;; nars that contain several copies of these files. Thus, turn
407 ;; them into symlinks, which saves ~124 MiB.
408 (let* ((out (assoc-ref outputs "out"))
409 (lib (string-append out "/lib"))
410 (files (find-files lib
411 (lambda (file stat)
412 (and (string-contains file ".so")
413 (eq? 'regular
414 (stat:type stat))))))
415 (inodes (map (compose stat:ino stat) files)))
416 (for-each (lambda (inode)
417 (match (filter-map (match-lambda
418 ((file ino)
419 (and (= ino inode) file)))
420 (zip files inodes))
421 ((_)
422 #f)
423 ((reference others ..1)
424 (format #t "creating ~a symlinks to '~a'~%"
425 (length others) reference)
426 (for-each delete-file others)
427 (for-each (lambda (file)
428 (if (string=? (dirname file)
429 (dirname reference))
430 (symlink (basename reference)
431 file)
432 (symlink reference file)))
433 others))))
434 (delete-duplicates inodes))
0315b20a
MB
435 #t))))))
436 (home-page "https://mesa3d.org/")
6713e9cb
RH
437 (synopsis "OpenGL and Vulkan implementations")
438 (description "Mesa is a free implementation of the OpenGL and Vulkan
439specifications - systems for rendering interactive 3D graphics. A variety of
440device drivers allows Mesa to be used in many different environments ranging
441from software emulation to complete hardware acceleration for modern GPUs.")
584f2e1b 442 (license license:x11)))
7025a035 443
fae42942 444(define-public mesa-opencl
8ea91d05 445 (package/inherit mesa
fae42942
RW
446 (name "mesa-opencl")
447 (arguments
448 (substitute-keyword-arguments (package-arguments mesa)
449 ((#:configure-flags flags)
450 `(cons "-Dgallium-opencl=standalone" ,flags))))
451 (inputs
452 `(("libclc" ,libclc)
453 ,@(package-inputs mesa)))
454 (native-inputs
e634d959 455 `(("clang" ,clang-10)
fae42942
RW
456 ,@(package-native-inputs mesa)))))
457
37cb4e5b 458(define-public mesa-opencl-icd
8ea91d05 459 (package/inherit mesa-opencl
37cb4e5b
RW
460 (name "mesa-opencl-icd")
461 (arguments
462 (substitute-keyword-arguments (package-arguments mesa)
463 ((#:configure-flags flags)
464 `(cons "-Dgallium-opencl=icd"
465 ,(delete "-Dgallium-opencl=standalone" flags)))))))
466
b021a2ad 467(define-public mesa-headers
8ea91d05 468 (package/inherit mesa
b021a2ad
TUBK
469 (name "mesa-headers")
470 (propagated-inputs '())
471 (inputs '())
472 (native-inputs '())
cb475eaa 473 (outputs '("out"))
b021a2ad
TUBK
474 (arguments
475 '(#:phases
476 (modify-phases %standard-phases
f8503e2b
LC
477 (delete 'configure)
478 (delete 'build)
479 (delete 'check)
480 (replace 'install
51b491b0
MW
481 (lambda* (#:key outputs #:allow-other-keys)
482 (copy-recursively "include" (string-append
483 (assoc-ref outputs "out")
484 "/include"))
485 #t)))))))
b021a2ad 486
c90a50eb
TUBK
487;;; The mesa-demos distribution contains non-free files, many files with no
488;;; clear license information, and many demos that aren't useful for most
489;;; people, so we just use this for the mesa-utils package below, and possibly
490;;; other packages in the future. This is modeled after Debian's solution.
491(define (mesa-demos-source version)
492 (origin
493 (method url-fetch)
18cbba26 494 (uri (string-append "ftp://ftp.freedesktop.org/pub/mesa/demos"
c90a50eb 495 "/mesa-demos-" version ".tar.bz2"))
18cbba26 496 (sha256 (base32 "0zgzbz55a14hz83gbmm0n9gpjnf5zadzi2kjjvkn6khql2a9rs81"))))
c90a50eb
TUBK
497
498(define-public mesa-utils
499 (package
500 (name "mesa-utils")
18cbba26 501 (version "8.4.0")
c90a50eb
TUBK
502 (source (mesa-demos-source version))
503 (build-system gnu-build-system)
504 (inputs
505 `(("mesa" ,mesa)
506 ("glut" ,freeglut)
507 ("glew" ,glew)))
508 (native-inputs
509 `(("pkg-config" ,pkg-config)))
510 (arguments
7fe3f8cf 511 '(#:phases
c90a50eb
TUBK
512 (modify-phases %standard-phases
513 (replace
f8503e2b 514 'install
c90a50eb
TUBK
515 (lambda* (#:key outputs #:allow-other-keys)
516 (let ((out (assoc-ref outputs "out")))
517 (mkdir-p (string-append out "/bin"))
518 (for-each
519 (lambda (file)
520 (copy-file file (string-append out "/bin/" (basename file))))
521 '("src/xdemos/glxdemo" "src/xdemos/glxgears"
feb08043
MW
522 "src/xdemos/glxinfo" "src/xdemos/glxheads"))
523 #t))))))
7c22aa63 524 (home-page "https://mesa3d.org/")
c90a50eb
TUBK
525 (synopsis "Utility tools for Mesa")
526 (description
527 "The mesa-utils package contains several utility tools for Mesa: glxdemo,
528glxgears, glxheads, and glxinfo.")
529 ;; glxdemo is public domain; others expat.
584f2e1b 530 (license (list license:expat license:public-domain))))
c90a50eb 531
524f4bec
LC
532(define-public glew
533 (package
534 (name "glew")
bbc94a08 535 (version "2.1.0")
524f4bec
LC
536 (source (origin
537 (method url-fetch)
de67e922
LF
538 (uri (string-append "mirror://sourceforge/glew/glew/" version
539 "/glew-" version ".tgz"))
524f4bec
LC
540 (sha256
541 (base32
bbc94a08 542 "159wk5dc0ykjbxvag5i1m2mhp23zkk6ra04l26y3jc3nwvkr3ph4"))
524f4bec
LC
543 (modules '((guix build utils)))
544 (snippet
6cbee49d
MW
545 '(begin
546 (substitute* "config/Makefile.linux"
547 (("= cc") "= gcc")
548 (("/lib64") "/lib"))
549 #t))))
524f4bec
LC
550 (build-system gnu-build-system)
551 (arguments
dc1d3cde 552 '(#:phases (modify-phases %standard-phases (delete 'configure))
524f4bec
LC
553 #:make-flags (list (string-append "GLEW_PREFIX="
554 (assoc-ref %outputs "out"))
555 (string-append "GLEW_DEST="
556 (assoc-ref %outputs "out")))
557 #:tests? #f)) ;no 'check' target
558 (inputs
559 `(("libxi" ,libxi)
560 ("libxmu" ,libxmu)
561 ("libx11" ,libx11)
562 ("mesa" ,mesa)))
563
564 ;; <GL/glew.h> includes <GL/glu.h>.
565 (propagated-inputs `(("glu" ,glu)))
566
567 (home-page "http://glew.sourceforge.net/")
568 (synopsis "OpenGL extension loading library for C and C++")
569 (description
570 "The OpenGL Extension Wrangler Library (GLEW) is a C/C++ extension
571loading library. GLEW provides efficient run-time mechanisms for determining
572which OpenGL extensions are supported on the target platform. OpenGL core and
573extension functionality is exposed in a single header file.")
584f2e1b 574 (license license:bsd-3)))
524f4bec 575
7025a035
DT
576(define-public guile-opengl
577 (package
578 (name "guile-opengl")
579 (version "0.1.0")
580 (source (origin
581 (method url-fetch)
582 (uri (string-append "mirror://gnu/guile-opengl/guile-opengl-"
583 version ".tar.gz"))
584 (sha256
585 (base32
586 "13qfx4xh8baryxqrv986l848ygd0piqwm6s2s90pxk9c0m9vklim"))))
587 (build-system gnu-build-system)
588 (native-inputs `(("pkg-config" ,pkg-config)))
42994090 589 (inputs `(("guile" ,guile-2.2)
7025a035 590 ("mesa" ,mesa)
4becc792 591 ("glu" ,glu)
7025a035
DT
592 ("freeglut" ,freeglut)))
593 (arguments
0e215f49
DT
594 '(#:phases (modify-phases %standard-phases
595 (add-after 'configure 'patch-makefile
596 (lambda _
597 ;; Install compiled Guile files in the expected place.
598 (substitute* '("Makefile")
599 (("^godir = .*$")
600 "godir = $(moddir)\n"))))
601 (add-before 'build 'patch-dynamic-link
602 (lambda* (#:key inputs outputs #:allow-other-keys)
603 (define (dynamic-link-substitute file lib input)
604 (substitute* file
605 (("dynamic-link \"lib([a-zA-Z]+)\"" _ lib)
606 (string-append "dynamic-link \""
607 (assoc-ref inputs input)
608 "/lib/lib" lib "\""))))
609 ;; Replace dynamic-link calls for libGL, libGLU, and
610 ;; libglut with absolute paths to the store.
611 (dynamic-link-substitute "glx/runtime.scm" "GL" "mesa")
612 (dynamic-link-substitute "glu/runtime.scm" "GLU" "glu")
613 (dynamic-link-substitute "glut/runtime.scm" "glut"
614 "freeglut"))))))
cc7a5c71 615 (home-page "https://gnu.org/s/guile-opengl")
66672a45 616 (synopsis "Guile binding for the OpenGL graphics API")
7025a035 617 (description
66672a45
LC
618 "Guile-OpenGL is a library for Guile that provides bindings to the
619OpenGL graphics API.")
584f2e1b 620 (license license:lgpl3+)))
131ddf99 621
ad1edd03
RW
622(define-public guile3.0-opengl
623 (package
624 (inherit guile-opengl)
625 (name "guile3.0-opengl")
626 (arguments
627 (substitute-keyword-arguments (package-arguments guile-opengl)
628 ((#:phases phases)
629 `(modify-phases ,phases
630 (add-after 'unpack 'build-with-guile-3.0
631 (lambda _
632 (substitute* "configure"
633 (("_guile_versions_to_search=\"")
634 "_guile_versions_to_search=\"3.0 "))
635 #t))))))
636 (inputs
637 `(("guile" ,guile-3.0)
638 ("mesa" ,mesa)
639 ("glu" ,glu)
640 ("freeglut" ,freeglut)))))
641
131ddf99
AW
642(define-public libepoxy
643 (package
644 (name "libepoxy")
8d9d6adb 645 (version "1.5.4")
131ddf99
AW
646 (source (origin
647 (method url-fetch)
648 (uri (string-append
3d3d4014
EF
649 "https://github.com/anholt/libepoxy/releases/download/"
650 version "/libepoxy-" version ".tar.xz"))
131ddf99
AW
651 (sha256
652 (base32
8d9d6adb 653 "1ll9fach4v30dsyd47s5ial4gaiwihzr2afb77vxxzzy3mlcrlhb"))))
131ddf99 654 (arguments
9bbd52e5 655 `(#:phases
5f8dd6dc 656 (modify-phases %standard-phases
54d860cc 657 (delete 'bootstrap)
5f8dd6dc
EF
658 (add-before
659 'configure 'patch-paths
660 (lambda* (#:key inputs #:allow-other-keys)
661 (let ((python (assoc-ref inputs "python"))
662 (mesa (assoc-ref inputs "mesa")))
663 (substitute* "src/gen_dispatch.py"
664 (("/usr/bin/env python") python))
665 (substitute* (find-files "." "\\.[ch]$")
666 (("libGL.so.1") (string-append mesa "/lib/libGL.so.1"))
667 (("libEGL.so.1") (string-append mesa "/lib/libEGL.so.1")))
5f8dd6dc 668 #t))))))
54d860cc 669 (build-system meson-build-system)
131ddf99 670 (native-inputs
827dc629 671 `(("pkg-config" ,pkg-config)
131ddf99
AW
672 ("python" ,python)))
673 (inputs
674 `(("mesa" ,mesa)))
3d3d4014 675 (home-page "https://github.com/anholt/libepoxy/")
131ddf99
AW
676 (synopsis "A library for handling OpenGL function pointer management")
677 (description
678 "A library for handling OpenGL function pointer management.")
584f2e1b 679 (license license:x11)))
2b226af1 680
e7b2ac1c
MB
681(define-public libglvnd
682 (package
683 (name "libglvnd")
6018d1ee 684 (version "1.3.2")
e7b2ac1c
MB
685 (home-page "https://gitlab.freedesktop.org/glvnd/libglvnd")
686 (source (origin
687 (method git-fetch)
688 (uri (git-reference
689 (url home-page)
690 (commit (string-append "v" version))))
691 (file-name (git-file-name name version))
692 (sha256
693 (base32
6018d1ee 694 "10x7fgb114r4gikdg6flszl3kwzcb9y5qa7sj9936mk0zxhjaylz"))))
e7b2ac1c
MB
695 (build-system meson-build-system)
696 (arguments
697 '(#:configure-flags '("-Dx11=enabled")
698 #:phases (modify-phases %standard-phases
699 (add-after 'unpack 'disable-glx-tests
700 (lambda _
701 ;; This package is meant to be used alongside Mesa.
702 ;; To avoid a circular dependency, disable tests that
703 ;; require a running Xorg server.
704 (substitute* "tests/meson.build"
705 (("if with_glx")
706 "if false"))
707 #t)))))
708 (native-inputs
709 `(("pkg-config" ,pkg-config)))
710 (inputs
711 `(("libx11" ,libx11)
712 ("libxext" ,libxext)
713 ("xorgproto" ,xorgproto)))
714 (synopsis "Vendor-neutral OpenGL dispatch library")
715 (description
716 "libglvnd is a vendor-neutral dispatch layer for arbitrating OpenGL
717API calls between multiple vendors. It allows multiple drivers from
718different vendors to coexist on the same filesystem, and determines which
719vendor to dispatch each API call to at runtime.
720
721Both GLX and EGL are supported, in any combination with OpenGL and OpenGL ES.")
722 ;; libglvnd is available under a custom X11-style license, and incorporates
723 ;; code with various other licenses. See README.md for details.
724 (license (list (license:x11-style "file://README.md")
725 license:x11
726 license:expat))))
727
2b226af1
DT
728(define-public soil
729 (package
730 (name "soil")
731 (version "1.0.7")
732 (source (origin
733 (method url-fetch)
734 ;; No versioned archive available.
735 (uri "http://www.lonesock.net/files/soil.zip")
736 (sha256
737 (base32
738 "00gpwp9dldzhsdhksjvmbhsd2ialraqbv6v6dpikdmpncj6mnc52"))))
739 (build-system gnu-build-system)
740 (arguments
741 '(#:tests? #f ; no tests
742 #:phases (modify-phases %standard-phases
743 (delete 'configure)
744 (add-before 'build 'init-build
745 (lambda* (#:key outputs #:allow-other-keys)
746 (let ((out (assoc-ref outputs "out")))
747 (setenv "CFLAGS" "-fPIC") ; needed for shared library
748 ;; Use alternate Makefile
749 (copy-file "projects/makefile/alternate Makefile.txt"
750 "src/Makefile")
751 (chdir "src")
752 (substitute* '("Makefile")
753 (("INCLUDEDIR = /usr/include/SOIL")
754 (string-append "INCLUDEDIR = " out "/include/SOIL"))
755 (("LIBDIR = /usr/lib")
756 (string-append "LIBDIR = " out "/lib"))
757 ;; Remove these flags from 'install' commands.
758 (("-o root -g root") ""))))))))
759 (native-inputs
760 `(("unzip" ,unzip)))
761 (inputs
762 `(("mesa" ,mesa)))
c0f6eebb 763 (home-page "https://www.lonesock.net/soil.html")
2b226af1
DT
764 (synopsis "OpenGL texture loading library")
765 (description
766 "SOIL is a tiny C library used primarily for uploading textures into
767OpenGL.")
584f2e1b 768 (license license:public-domain)))
432360d7
DT
769
770(define-public glfw
771 (package
772 (name "glfw")
773 (version "3.2.1")
774 (source (origin
775 (method url-fetch)
776 (uri (string-append "https://github.com/glfw/glfw"
777 "/releases/download/" version
778 "/glfw-" version ".zip"))
779 (sha256
780 (base32
781 "09kk5yc1zhss9add8ryqrngrr16hdmc94rszgng135bhw09mxmdp"))))
782 (build-system cmake-build-system)
783 (arguments
784 '(#:tests? #f ; no test target
785 #:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
786 (native-inputs
787 `(("doxygen" ,doxygen)
788 ("unzip" ,unzip)))
a966281f
LC
789 (propagated-inputs
790 `(("mesa" ,mesa) ;included in public headers
791
792 ;; These are in 'Requires.private' of 'glfw3.pc'.
432360d7
DT
793 ("libx11" ,libx11)
794 ("libxrandr" ,libxrandr)
795 ("libxinerama" ,libxinerama)
a966281f
LC
796 ("libxcursor" ,libxcursor)
797 ("libxxf86vm" ,libxxf86vm)))
c9938fa8 798 (home-page "https://www.glfw.org")
432360d7
DT
799 (synopsis "OpenGL application development library")
800 (description
801 "GLFW is a library for OpenGL, OpenGL ES and Vulkan development for
802desktop computers. It provides a simple API for creating windows, contexts
803and surfaces, receiving input and events.")
804 (license license:zlib)))
78acbcb5
RW
805
806(define-public nanovg-for-extempore
7bb0ba81
GL
807 (let ((version "0.7.1")
808 (revision "0")
809 (commit "3c60175fcc2e5fe305b04355cdce35d499c80310"))
810 (package
811 (name "nanovg-for-extempore")
812 (version (git-version version revision commit))
813 (source (origin
814 (method git-fetch)
815 (uri (git-reference
b0e7b699 816 (url "https://github.com/extemporelang/nanovg")
7bb0ba81
GL
817 (commit commit)))
818 (file-name (git-file-name name version))
819 (sha256
820 (base32
821 "0ddn3d3mxqn8hj9967v3pss7lz1wn08pcdnqzc118g7yjkq7hxzy"))))
822 (build-system cmake-build-system)
823 (arguments `(#:tests? #f)) ; no tests included
824 (inputs
825 `(("mesa" ,mesa)))
826 ;; Extempore refuses to build on architectures other than x86_64
827 (supported-systems '("x86_64-linux"))
828 (home-page "https://github.com/extemporelang/nanovg")
829 (synopsis "2D vector drawing library on top of OpenGL")
830 (description "NanoVG is small antialiased vector graphics rendering
78acbcb5
RW
831library for OpenGL. It has lean API modeled after HTML5 canvas API. It is
832aimed to be a practical and fun toolset for building scalable user interfaces
833and visualizations.")
7bb0ba81 834 (license license:zlib))))
725d8d2c
AI
835
836(define-public gl2ps
837 (package
838 (name "gl2ps")
52c463a9 839 (version "1.4.2")
725d8d2c
AI
840 (source
841 (origin
842 (method url-fetch)
843 (uri (string-append
844 "http://geuz.org/gl2ps/src/gl2ps-"
845 version ".tgz"))
846 (sha256
52c463a9 847 (base32 "1sgzv547h7hrskb9qd0x5yp45kmhvibjwj2mfswv95lg070h074d"))))
725d8d2c
AI
848 (build-system cmake-build-system)
849 (inputs
850 `(("libpng" ,libpng)
851 ("mesa" ,mesa)
852 ("zlib" ,zlib)))
853 (arguments
52c463a9 854 `(#:tests? #f)) ; no tests
725d8d2c
AI
855 (home-page "http://www.geuz.org/gl2ps/")
856 (synopsis "OpenGL to PostScript printing library")
857 (description "GL2PS is a C library providing high quality vector
858output for any OpenGL application. GL2PS uses sorting algorithms
859capable of handling intersecting and stretched polygons, as well as
860non-manifold objects. GL2PS provides many features including advanced
861smooth shading and text rendering, culling of invisible primitives and
862mixed vector/bitmap output.")
905d15e1 863 ;; GL2PS is dual-licenced and can be used under the terms of either.
725d8d2c
AI
864 (license (list license:lgpl2.0+
865 (license:fsf-free "http://www.geuz.org/gl2ps/COPYING.GL2PS"
866 "GPL-incompatible copyleft license")))))
d64f3439
RH
867
868(define-public virtualgl
869 (package
870 (name "virtualgl")
0cece1b5 871 (version "2.6.2")
d64f3439
RH
872 (source
873 (origin
bd7daf9c
RW
874 (method git-fetch)
875 (uri (git-reference
b0e7b699 876 (url "https://github.com/VirtualGL/virtualgl")
bd7daf9c
RW
877 (commit version)))
878 (file-name (git-file-name name version))
d64f3439 879 (sha256
0cece1b5 880 (base32 "0yyc553xsb5n0rx7jp9p4wdbd7md07b3qrkf3ssyjavqqg908qg9"))))
d64f3439 881 (arguments
c30fd002 882 `(#:tests? #f ; no tests are available
07b8ea84 883 #:configure-flags (list
c30fd002
TGR
884 (string-append "-DCMAKE_INSTALL_LIBDIR="
885 (assoc-ref %outputs "out") "/lib")
886 "-DVGL_USESSL=1"))) ; use OpenSSL
d64f3439
RH
887 (build-system cmake-build-system)
888 (inputs `(("glu" ,glu)
889 ("libjpeg-turbo" ,libjpeg-turbo)
c30fd002 890 ("libxtst" ,libxtst)
d64f3439
RH
891 ("mesa" ,mesa)
892 ("openssl" ,openssl)))
c695fb76 893 (native-inputs `(("pkg-config" ,pkg-config)))
d64f3439
RH
894 (home-page "https://www.virtualgl.org")
895 (synopsis "Redirects 3D commands from an OpenGL application onto a 3D
896graphics card")
897 (description "VirtualGL redirects the 3D rendering commands from OpenGL
898applications to 3D accelerator hardware in a dedicated server and displays the
899rendered output interactively to a thin client located elsewhere on the
900network.")
901 (license license:wxwindows3.1+)))
5c154738
PN
902
903(define-public mojoshader
904 (let ((changeset "5887634ea695"))
905 (package
906 (name "mojoshader")
3429f5d9 907 (version (string-append "20190825" "-" changeset))
5c154738
PN
908 (source
909 (origin
910 (method hg-fetch)
911 (uri (hg-reference
912 (url "https://hg.icculus.org/icculus/mojoshader/")
913 (changeset changeset)))
914 (file-name (git-file-name name version))
915 (sha256
916 (base32 "0ibl4z1696jiifv9j5drir7jm0b5px0vwkwckbi7cfd46p7p6wcy"))))
917 (arguments
918 ;; Tests only for COMPILER_SUPPORT=ON.
919 `(#:tests? #f
3429f5d9
PN
920 #:configure-flags '("-DBUILD_SHARED=ON"
921 "-DFLIP_VIEWPORT=ON"
922 "-DDEPTH_CLIPPING=ON")
5c154738
PN
923 #:phases
924 (modify-phases %standard-phases
925 (replace 'install
926 (lambda* (#:key outputs #:allow-other-keys)
927 (let* ((out (assoc-ref outputs "out"))
928 (lib (string-append out "/lib"))
929 (header (string-append out "/include")))
930 (install-file "libmojoshader.so" lib)
931 (for-each (lambda (f)
932 (install-file f header))
933 (find-files "../source" "mojoshader.*\\.h$"))
934 (let ((profiles-header (string-append header "/profiles")))
935 (mkdir-p profiles-header)
936 (rename-file (string-append header "/mojoshader_profile.h")
937 (string-append profiles-header "/mojoshader_profile.h"))))
938 #t)))))
939 (build-system cmake-build-system)
940 (home-page "https://www.icculus.org/mojoshader/")
941 (synopsis "Work with Direct3D shaders on alternate 3D APIs")
942 (description "MojoShader is a library to work with Direct3D shaders on
943alternate 3D APIs and non-Windows platforms. The primary motivation is moving
944shaders to OpenGL languages on the fly. The developer deals with \"profiles\"
945that represent various target languages, such as GLSL or ARB_*_program.
946
947This allows a developer to manage one set of shaders, presumably written in
948Direct3D HLSL, and use them across multiple rendering backends. This also
949means that the developer only has to worry about one (offline) compiler to
950manage program complexity, while MojoShader itself deals with the reduced
951complexity of the bytecode at runtime.
952
953MojoShader provides both a simple API to convert bytecode to various profiles,
954and (optionally) basic glue to rendering APIs to abstract the management of
955the shaders at runtime.")
956 (license license:zlib))))
b150e83b
PN
957
958(define-public mojoshader-with-viewport-flip
959 ;; Changeset c586d4590241 replaced glProgramViewportFlip with
960 ;; glProgramViewportInfo.
961 ;; https://hg.icculus.org/icculus/mojoshader/rev/c586d4590241
962 (let ((changeset "2e37299b13d8"))
963 (package
964 (inherit mojoshader)
965 (name "mojoshader-with-viewport-flip")
966 (version (string-append "20190725" "-" changeset))
967 (source
968 (origin
969 (method hg-fetch)
970 (uri (hg-reference
971 (url "https://hg.icculus.org/icculus/mojoshader/")
972 (changeset changeset)))
973 (file-name (git-file-name name version))
974 (sha256
975 (base32 "0ffws7cqbskxwc3hjsnnzq4r2bbf008kdr3b11pa3kr7dsi50y6i"))))
976 (synopsis "Work with Direct3D shaders on alternate 3D APIs (with viewport flip)")
977 (description "This is the last version of the mojoshader library with
978the glProgramViewportFlip before it was replaced with glProgramViewportInfo.")
979 (license license:zlib))))
bea58fa1
PN
980
981(define-public mojoshader-cs
982 (let ((commit "10d0dba21ff1cfe332eb7de328a2adce01286bd7"))
983 (package
984 (name "mojoshader-cs")
985 (version (git-version "20191205" "1" commit))
986 (source (origin
987 (method git-fetch)
988 (uri (git-reference
989 (url "https://github.com/FNA-XNA/MojoShader")
990 (commit commit)))
991 (file-name (git-file-name name version))
992 (sha256
993 (base32
994 "11mdhf3fmb9rsn2iv753gmb596j4dh5j2iipgw078vg0lj23rml7"))))
995 (build-system gnu-build-system)
996 (arguments
997 '(#:tests? #f ; No tests.
998 #:phases
999 (modify-phases %standard-phases
1000 (delete 'configure)
1001 (replace 'build
1002 (lambda _
1003 (invoke "make" "-C" "csharp")))
1004 (replace 'install
1005 (lambda* (#:key outputs #:allow-other-keys)
1006 (let ((out (assoc-ref outputs "out")))
1007 (install-file "csharp/bin/MojoShader-CS.dll" (string-append out "/lib"))
1008 #t))))))
1009 (native-inputs
1010 `(("mono" ,mono)))
1011 (home-page "https://github.com/FNA-XNA/MojoShader")
1012 (synopsis "C# wrapper for MojoShader")
1013 (description
1014 "Mojoshader-CS provides C# bindings for the Mojoshader library.
1015The C# wrapper was written to be used for FNA's platform support. However, this
1016is written in a way that can be used for any general C# application.")
1017 (license license:zlib))))
906fc911
KK
1018
1019(define-public glmark2
1020 (package
1021 (name "glmark2")
1022 (version "2020.04")
1023 (source (origin
1024 (method git-fetch)
1025 (uri (git-reference
1026 (url "https://github.com/glmark2/glmark2")
1027 (commit version)))
1028 (file-name (git-file-name name version))
1029 (sha256
1030 (base32
1031 "0ywpzp0imi3f8iyp7d1739576zx2nsr3db5hp2as4yhflfyq1as2"))
1032 (modules '((guix build utils)))
1033 ;; Fix Python 3 incompatibility.
1034 (snippet
1035 '(begin
1036 (substitute* "wscript"
1037 (("(sorted\\()FLAVORS\\.keys\\(\\)(.*)" _ beginning end)
1038 (string-append beginning "list(FLAVORS)" end)))
1039 #t))))
1040 (build-system waf-build-system)
1041 (arguments
1042 '(#:tests? #f ; no check target
1043 #:configure-flags
1044 (list (string-append "--with-flavors="
1045 (string-join '("x11-gl" "x11-glesv2"
1046 "drm-gl" "drm-glesv2"
1047 "wayland-gl" "wayland-glesv2")
1048 ",")))
1049 #:phases
1050 (modify-phases %standard-phases
1051 (add-after 'unpack 'patch-paths
1052 (lambda* (#:key inputs #:allow-other-keys)
1053 (let ((mesa (assoc-ref inputs "mesa")))
1054 (substitute* (find-files "src" "gl-state-.*\\.cpp$")
1055 (("libGL.so") (string-append mesa "/lib/libGL.so"))
1056 (("libEGL.so") (string-append mesa "/lib/libEGL.so"))
1057 (("libGLESv2.so") (string-append mesa "/lib/libGLESv2.so")))
1058 #t))))))
1059 (native-inputs
1060 `(("pkg-config" ,pkg-config)))
1061 (inputs
1062 `(("eudev" ,eudev)
1063 ("libdrm" ,libdrm)
1064 ("libjpeg-turbo" ,libjpeg-turbo)
1065 ("libpng" ,libpng)
1066 ("libx11" ,libx11)
1067 ("libxcb" ,libxcb)
1068 ("mesa" ,mesa)
1069 ("wayland" ,wayland)
1070 ("wayland-protocols" ,wayland-protocols)))
1071 (home-page "https://github.com/glmark2/glmark2")
1072 (synopsis "OpenGL 2.0 and OpenGL ES 2.0 benchmark")
1073 (description
1074 "glmark2 is an OpenGL 2.0 and OpenGL ES 2.0 benchmark based on the
1075original glmark benchmark by Ben Smith.")
1076 (license license:gpl3+)))