projects/guix·blob java-team · refs

5559 lines · 217.7 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2017 Ethan R. Jones <[email protected]>
3;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <[email protected]>
4;;; Copyright © 2018 Fis Trivial <[email protected]>
5;;; Copyright © 2018, 2021, 2023-2024 Ludovic Courtès <[email protected]>
6;;; Copyright © 2019, 2020, 2022 Mathieu Othacehe <[email protected]>
7;;; Copyright © 2019 Pierre Neidhardt <[email protected]>
8;;; Copyright © 2019 Jan Wielkiewicz <[email protected]>
9;;; Copyright © 2020, 2021 Nicolò Balzarotti <[email protected]>
10;;; Copyright © 2020 Roel Janssen <[email protected]>
11;;; Copyright © 2020, 2021, 2023-2026 Ricardo Wurmus <[email protected]>
12;;; Copyright © 2020 Brice Waegeneire <[email protected]>
13;;; Copyright © 2020, 2021, 2022, 2024, 2025 Vinicius Monego <[email protected]>
14;;; Copyright © 2020, 2022 Marius Bakke <[email protected]>
15;;; Copyright © 2020 Michael Rohleder <[email protected]>
16;;; Copyright © 2020 Alexandros Theodotou <[email protected]>
17;;; Copyright © 2020-2022 Greg Hogan <[email protected]>
18;;; Copyright © 2020 Brett Gilio <[email protected]>
19;;; Copyright © 2020 Milkey Mouse <[email protected]>
20;;; Copyright © 2021 Raghav Gururajan <[email protected]>
21;;; Copyright © 2021 Felix Gruber <[email protected]>
22;;; Copyright © 2021 Nicolò Balzarotti <[email protected]>
23;;; Copyright © 2021 Guillaume Le Vaillant <[email protected]>
24;;; Copyright © 2021 Nikolay Korotkiy <[email protected]>
25;;; Copyright © 2021 jgart <[email protected]>
26;;; Copyright © 2021 Julien Lepiller <[email protected]>
27;;; Copyright © 2021 Disseminate Dissent <[email protected]>
28;;; Copyright © 2022-2024 Efraim Flashner <[email protected]>
29;;; Copyright © 2022 muradm <[email protected]>
30;;; Copyright © 2022 Attila Lendvai <[email protected]>
31;;; Copyright © 2022, 2026 Arun Isaac <[email protected]>
32;;; Copyright © 2022-2025 David Elsing <[email protected]>
33;;; Copyright © 2022-2024 Zheng Junjie <[email protected]>
34;;; Copyright © 2022-2024, 2026 Maxim Cournoyer <[email protected]>
35;;; Copyright © 2022 Antero Mejr <[email protected]>
36;;; Copyright © 2023, 2025 Sughosha <[email protected]>
37;;; Copyright © 2023, 2024, 2025 Artyom V. Poptsov <[email protected]>
38;;; Copyright © 2023 Liliana Marie Prikler <[email protected]>
39;;; Copyright © 2023 Denis 'GNUtoo' Carikli <[email protected]>
40;;; Copyright © 2023 Foundation Devices, Inc. <[email protected]>
41;;; Copyright © 2023-2024 Paul A. Patience <[email protected]>
42;;; Copyright © 2024 dan <[email protected]>
43;;; Copyright © 2024 Peepo Froggings <[email protected]>
44;;; Copyright © 2024 Jakob Kirsch <[email protected]>
45;;; Copyright © 2025 Sharlatan Hellseher <[email protected]>
46;;; Copyright © 2025 Sergio Pastor Pérez <[email protected]>
47;;; Copyright © 2025, 2026 Ashish SHUKLA <[email protected]>
48;;; Copyright © 2025 Nicolas Graves <[email protected]>
49;;; Copyright © 2025 Romain Garbage <[email protected]>
50;;; Copyright © 2024, 2025 Janneke Nieuwenhuizen <[email protected]>
51;;; Copyright © 2025 Andreas Enge <[email protected]>
52;;; Copyright © 2025 Philippe Swartvagher <[email protected]>
53;;; Copyright © 2025 Murilo <[email protected]>
54;;; Copyright © 2026 Justin Veilleux <[email protected]>
55;;; Copyright © 2026 Daniel Littlewood <[email protected]>
56;;; Copyright © 2026 bdunahu <[email protected]>
57;;; Copyright © 2026 Cayetano Santos <[email protected]>
58;;; Copyright © 2026 Emmanouil Fragkiskos Ragkousis <[email protected]>
59;;;
60;;; This file is part of GNU Guix.
61;;;
62;;; GNU Guix is free software; you can redistribute it and/or modify it
63;;; under the terms of the GNU General Public License as published by
64;;; the Free Software Foundation; either version 3 of the License, or (at
65;;; your option) any later version.
66;;;
67;;; GNU Guix is distributed in the hope that it will be useful, but
68;;; WITHOUT ANY WARRANTY; without even the implied warranty of
69;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
70;;; GNU General Public License for more details.
71;;;
72;;; You should have received a copy of the GNU General Public License
73;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
74
75(define-module (gnu packages cpp)
76 #:use-module ((guix licenses) #:prefix license:)
77 #:use-module (guix packages)
78 #:use-module (guix deprecation)
79 #:use-module (guix download)
80 #:use-module (guix utils)
81 #:use-module (guix git-download)
82 #:use-module (guix build-system cmake)
83 #:use-module (guix build-system copy)
84 #:use-module (guix build-system gnu)
85 #:use-module (guix build-system meson)
86 #:use-module (guix build-system pyproject)
87 #:use-module (guix build-system scons)
88 #:use-module (guix modules)
89 #:use-module (guix gexp)
90 #:use-module (gnu packages)
91 #:use-module (gnu packages algebra)
92 #:use-module (gnu packages assembly)
93 #:use-module (gnu packages audio)
94 #:use-module (gnu packages autotools)
95 #:use-module (gnu packages base)
96 #:use-module (gnu packages bdw-gc)
97 #:use-module (gnu packages benchmark)
98 #:use-module (gnu packages boost)
99 #:use-module (gnu packages build-tools)
100 #:use-module (gnu packages c)
101 #:use-module (gnu packages check)
102 #:use-module (gnu packages cmake)
103 #:use-module (gnu packages code)
104 #:use-module (gnu packages compression)
105 #:use-module (gnu packages crypto)
106 #:use-module (gnu packages curl)
107 #:use-module (gnu packages datastructures)
108 #:use-module (gnu packages disk)
109 #:use-module (gnu packages documentation)
110 #:use-module (gnu packages elf)
111 #:use-module (gnu packages fontutils)
112 #:use-module (gnu packages file)
113 #:use-module (gnu packages freedesktop)
114 #:use-module (gnu packages gcc)
115 #:use-module (gnu packages gl)
116 #:use-module (gnu packages glib)
117 #:use-module (gnu packages gnome)
118 #:use-module (gnu packages gtk)
119 #:use-module (gnu packages image)
120 #:use-module (gnu packages libevent)
121 #:use-module (gnu packages libffi)
122 #:use-module (gnu packages libunwind)
123 #:use-module (gnu packages linux)
124 #:use-module (gnu packages llvm)
125 #:use-module (gnu packages logging)
126 #:use-module (gnu packages maths)
127 #:use-module (gnu packages mpi)
128 #:use-module (gnu packages onc-rpc)
129 #:use-module (gnu packages perl)
130 #:use-module (gnu packages python)
131 #:use-module (gnu packages python-build)
132 #:use-module (gnu packages python-check)
133 #:use-module (gnu packages python-xyz)
134 #:use-module (gnu packages pkg-config)
135 #:use-module (gnu packages popt)
136 #:use-module (gnu packages pretty-print)
137 #:use-module (gnu packages pulseaudio)
138 #:use-module (gnu packages samba)
139 #:use-module (gnu packages sdl)
140 #:use-module (gnu packages tls)
141 #:use-module (gnu packages tex)
142 #:use-module (gnu packages texinfo)
143 #:use-module (gnu packages web)
144 #:use-module (gnu packages webkit)
145 #:use-module (gnu packages xdisorg)
146 #:use-module (gnu packages xml)
147 #:use-module (gnu packages xorg)
148 ;; Using autoload to avoid a cycle.
149 ;; Note that (gnu packages serialization) has #:use-module (gnu packages cpp)
150 #:autoload (gnu packages serialization) (cereal jsoncpp)
151 #:use-module (ice-9 match))
152
153(define-public argagg
154 (package
155 (name "argagg")
156 (version "0.4.7")
157 (source (origin
158 (method git-fetch)
159 (uri (git-reference
160 (url "https://github.com/vietjtnguyen/argagg")
161 (commit version)))
162 (file-name (git-file-name name version))
163 (sha256
164 (base32
165 "1pr0xqcc3wpwh02fwll3yf67rbxj39wbr2rqdd6bvjalmahg6hqv"))))
166 (build-system cmake-build-system)
167 (outputs '("out" "doc"))
168 (arguments
169 (list
170 #:configure-flags #~(list
171 (format #f "-DCMAKE_CXX_FLAGS=~a"
172 (string-join
173 (list "-Wno-error=array-bounds="
174 "-Wno-error=sign-conversion"))))
175 #:phases #~(modify-phases %standard-phases
176 (add-after 'install 'move-doc
177 (lambda* (#:key outputs #:allow-other-keys)
178 (let ((name #$(package-name argagg))
179 (doc (assoc-ref outputs "doc")))
180 (mkdir-p (string-append doc "/share/doc"))
181 (rename-file
182 (string-append #$output "/share/doc/" name)
183 (string-append doc "/share/doc/" name))))))))
184 (native-inputs (list doxygen))
185 (home-page "https://github.com/vietjtnguyen/argagg")
186 (synopsis "C++11 command line argument parser")
187 (description
188 "ArgAgg is yet another C++ command line argument/option
189parser. It was written as a simple and idiomatic alternative to other
190frameworks like getopt, Boost program options, TCLAP, and others. The goal is
191to achieve the majority of argument parsing needs in a simple manner with an
192easy to use API.")
193 (license license:expat)))
194
195(define-public argengine
196 (package
197 (name "argengine")
198 (version "1.3.0")
199 (source
200 (origin
201 (method git-fetch)
202 (uri (git-reference
203 (url "https://github.com/juzzlin/Argengine")
204 (commit version)))
205 (file-name (git-file-name name version))
206 (sha256
207 (base32 "0m03lw3hd7a1k2np27r25ii1myhjxl178w1i4gfxdkzx551ynsrz"))))
208 (build-system cmake-build-system)
209 (arguments
210 (list
211 #:configure-flags #~(list "-DBUILD_EXAMPLES=OFF")
212 #:phases
213 #~(modify-phases %standard-phases
214 (add-after 'install 'delete-static-archive
215 (lambda _
216 (delete-file
217 (in-vicinity #$output "lib/libArgengine_static.a")))))))
218 (home-page "https://github.com/juzzlin/Argengine")
219 (synopsis "Simple @acronym{CLI, Command Line Interface} parser")
220 (description "Argengine is a @acronym{CLI, Command Line Interface} parser
221for C++. It is based on lambda callbacks and supports automatic help
222generation.")
223 (license license:expat)))
224
225(define-public argpp
226 ;; No tagged releases; this is the master tip.
227 (let ((commit "b52420a843327361713b6242e47afaa6b6ab2a89")
228 (revision "1"))
229 (package
230 (name "argpp")
231 (version (git-version "0.0.0" revision commit))
232 (source
233 (origin
234 (method git-fetch)
235 (uri (git-reference
236 (url "https://github.com/Grumbel/argpp")
237 (commit commit)))
238 (file-name (git-file-name name version))
239 (sha256
240 (base32 "07kmw7qz8l7qz572axpag7db4s97fl1mprblsrw238wdmvh9lvwc"))))
241 (build-system cmake-build-system)
242 (arguments
243 (list
244 #:configure-flags
245 #~(list "-DBUILD_TESTS=ON")))
246 (native-inputs
247 (list tinycmmc))
248 (home-page "https://github.com/Grumbel/argpp")
249 (synopsis "Argument parser for C++")
250 (description "This package provides a simple argument parser for C++.")
251 (license license:gpl3+))))
252
253(define-public asmjit
254 (let ((commit "0bd5787b54b575ed94bf32ac452153b34385c514")
255 (revision "0"))
256 (package
257 (name "asmjit")
258 ;; asmjit/core/api-config.h defines ASMJIT_LIBRARY_VERSION.
259 (version (git-version "1.21.0" revision commit))
260 (source
261 (origin
262 (method git-fetch)
263 (uri
264 (git-reference
265 (url "https://github.com/asmjit/asmjit")
266 (commit commit)))
267 (file-name (git-file-name name version))
268 (sha256
269 (base32 "083xq06rz0qikkfpyxrgll9hmm00i23li61k9rms8wxn66hyj6cq"))))
270 (build-system cmake-build-system)
271 (arguments
272 (list #:configure-flags #~(list "-DASMJIT_TEST=TRUE")))
273 (home-page "https://asmjit.com/")
274 (synopsis "Machine code generation for C++")
275 (description "AsmJit is a lightweight library for machine code
276generation written in C++ language. It can generate machine code for X86 and
277X86_64 architectures with the support for the whole instruction set from
278legacy MMX to the newest AVX-512 and AMX. It has a type-safe API that allows
279C++ compiler to do semantic checks at compile-time even before the assembled
280code is generated or executed. It also provides an optional register
281allocator that makes it easy to generate complex code without a significant
282development effort.")
283 (license license:zlib))))
284
285(define-public asmjit-1.17
286 (let ((commit "2ff454d41555d16d0759e4d0e95ade3c875b615e")
287 (revision "0"))
288 (package
289 (inherit asmjit)
290 (name "asmjit")
291 ;; src/asmjit/core/api-config.h defines ASMJIT_LIBRARY_VERSION.
292 (version (git-version "1.17.0" revision commit))
293 (source
294 (origin
295 (method git-fetch)
296 (uri
297 (git-reference
298 (url "https://github.com/asmjit/asmjit")
299 (commit commit)))
300 (file-name (git-file-name name version))
301 (sha256
302 (base32 "1n8j1s5xj5mkbrsihxc385pf5c6h3wyv7b16h79jj9sm5zz851g1")))))))
303
304(define-public asyncplusplus
305 (package
306 (name "asyncplusplus")
307 (version "1.2")
308 (source (origin
309 (method git-fetch)
310 (uri (git-reference
311 (url "https://github.com/Amanieu/asyncplusplus")
312 (commit (string-append "v" version))))
313 (file-name (git-file-name name version))
314 (sha256
315 (base32
316 "0iswbh7y46kn412c52af0n8bc4fplm3y94yh10n2lchispzar72j"))
317 (modules '((guix build utils)))
318 (snippet
319 ;; Fix install location of cmake files.
320 '(substitute* "CMakeLists.txt"
321 (("DESTINATION cmake")
322 "DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake")))))
323 (build-system cmake-build-system)
324 (arguments
325 (list #:tests? #f)) ;no tests
326 (home-page "https://github.com/Amanieu/asyncplusplus")
327 (synopsis "Concurrency framework for C++11")
328 (description "Async++ is a concurrency framework for C++11.")
329 (license license:expat)))
330
331(define-public biblesync
332 (package
333 (name "biblesync")
334 (version "2.1.0")
335 (source (origin
336 (method git-fetch)
337 (uri
338 (git-reference
339 (url "https://github.com/karlkleinpaste/biblesync")
340 (commit version)))
341 (file-name (git-file-name name version))
342 (sha256
343 (base32
344 "0prmd12jq2cjdhsph5v89y38j7hhd51dr3r1hivgkhczr3m5hf4s"))))
345 (build-system cmake-build-system)
346 (arguments
347 (list
348 #:tests? #f ;FIXME: Not sure how to run tests, if any
349 #:configure-flags
350 #~(list (string-append "-DBUILD_SHARED_LIBS=TRUE"))))
351 (inputs (list `(,util-linux "lib")))
352 (synopsis "C++ library implementing the BibleSync protocol")
353 (description
354 "BibleSync is a multicast protocol to support Bible software shared
355co-navigation. The premise is that there is a local network over which to
356multicast Bible navigation, and someone, possibly several someones, will
357transmit, and others will receive. The library implementing the protocol is
358a single C++ class providing a complete yet minimal public interface to
359support mode setting, setup for packet reception, transmit on local
360navigation, and handling of incoming packets.")
361 (home-page "https://github.com/karlkleinpaste/biblesync")
362 (license license:public-domain)))
363
364(define-public castxml
365(package
366 (name "castxml")
367 (version "0.7.0")
368 (source (origin
369 (method git-fetch)
370 (uri
371 (git-reference
372 (url "https://github.com/CastXML/CastXML")
373 (commit (string-append "v" version))))
374 (file-name (git-file-name name version))
375 (sha256
376 (base32 "03l9nyd871c5gk5cdp8fbgyszps5989rhw12wap8dgmr6s6jv3rj"))))
377 (build-system cmake-build-system)
378 (arguments
379 (list
380 #:configure-flags
381 #~(list
382 (string-append "-DCLANG_RESOURCE_DIR="
383 #$(this-package-native-input "clang") "/lib/clang/"
384 #$(version-major
385 (package-version (this-package-native-input "clang")))))))
386 (inputs (list libffi))
387 (native-inputs (list clang-21 llvm-21))
388 (home-page "https://github.com/CastXML/CastXML")
389 (synopsis "C-family abstract syntax tree XML output")
390 (description "CastXML is a C-family abstract syntax tree XML output tool.
391This project is maintained by Kitware in support of ITK, the Insight
392Segmentation and Registration Toolkit.")
393 (license license:asl2.0)))
394
395(define-public collada-dom
396 (package
397 (name "collada-dom")
398 (version "2.5.0")
399 (source
400 (origin
401 (method git-fetch)
402 (uri (git-reference
403 (url "https://github.com/rdiankov/collada-dom.git")
404 (commit (string-append "v" version))))
405 (file-name (git-file-name name version))
406 (sha256
407 (base32 "1npz3yynv02g7w70c39zqn5w0g4sb438bmkkw0x7gj8cknjnwv9z"))
408 (patches (search-patches "collada-dom-boost.patch"))))
409 (build-system cmake-build-system)
410 (arguments (list #:tests? #f)) ; No tests present
411 (native-inputs (list pkg-config))
412 (inputs (list boost libxml2 minizip zlib))
413 (home-page "https://github.com/rdiankov/collada-dom")
414 (synopsis "COLLADA DOM C++ library")
415 (description "COLLADA-DOM is a C++ library for loading
416and saving COLLADA documents that can contain 2D, 3D, physics
417and other types of content.")
418 (license license:expat)))
419
420(define-public cpp-utilities
421 (package
422 (name "cpp-utilities")
423 (version "5.27.3")
424 (source
425 (origin
426 (method git-fetch)
427 (uri (git-reference
428 (url "https://github.com/Martchus/cpp-utilities")
429 (commit (string-append "v" version))))
430 (file-name (git-file-name name version))
431 (sha256
432 (base32
433 "1nm6d87j11jc5617qk58a81ajxgrncr7xsf4dkyscrygi2n3dbgz"))))
434 (build-system cmake-build-system)
435 (arguments
436 (list #:tests? #f))
437 (home-page "https://github.com/Martchus/cpp-utilities/")
438 (synopsis "Useful C++ classes and routines")
439 (description
440 "This package provides useful C++ classes and routines such as argument
441parser, IO and conversion utilities.")
442 (license license:gpl2+)))
443
444(define-public cpptrace
445 (package
446 (name "cpptrace")
447 (version "1.0.4")
448 (source
449 (origin
450 (method git-fetch)
451 (uri (git-reference
452 (url "https://github.com/jeremy-rifkin/cpptrace")
453 (commit (string-append "v" version))))
454 (file-name (git-file-name name version))
455 (sha256
456 (base32 "11lnfjgch6849p9ajk2j6pi0xfwnn5a9d0g1jnq34s9m8l80jq1a"))))
457 (build-system cmake-build-system)
458 (arguments
459 (list
460 #:configure-flags
461 #~(list
462 "-DCPPTRACE_USE_EXTERNAL_ZSTD=ON"
463 "-DCPPTRACE_USE_EXTERNAL_LIBDWARF=ON"
464 "-DCPPTRACE_FIND_LIBDWARF_WITH_PKGCONFIG=ON"
465 "-DCPPTRACE_UNWIND_WITH_LIBUNWIND=ON"
466 "-DBUILD_SHARED_LIBS=ON"
467 "-DCPPTRACE_USE_EXTERNAL_GTEST=ON")
468 #:phases
469 #~(modify-phases %standard-phases
470 ;; Fails with "zlib and zstd are missing, cannot decompress section".
471 (add-after 'unpack 'disable-failing-tests
472 (lambda _
473 (substitute* "test/CMakeLists.txt"
474 ((".*stacktrace.*") "")
475 ((".*object_trace.*") "")
476 ((".*from_current.*") "")
477 ((".*try_catch.*") "")
478 ((".*traced_exception.*") "")
479 ((".*rethrow.*") "")))))))
480 (native-inputs
481 (list googletest pkg-config))
482 (inputs
483 (list libdwarf libunwind zlib zstd))
484 (home-page "https://github.com/jeremy-rifkin/cpptrace")
485 (synopsis "Stacktrace library for C++11 and newer")
486 (description "@code{cpptrace} is a simple and portable C++ stacktrace
487library supporting C++11 and greater. In addition to providing access to
488stack traces, @code{cpptrace} also provides a mechanism for getting
489stacktraces from thrown exceptions for debugging and triaging.")
490 (license license:expat)))
491
492(define-public rang
493 (package
494 (name "rang")
495 (version "3.2")
496 (source
497 (origin
498 (method git-fetch)
499 (uri (git-reference
500 (url "https://github.com/agauniyal/rang")
501 (commit (string-append "v" version))))
502 (file-name (git-file-name name version))
503 (sha256
504 (base32 "0x2fp7zjjivgxblvx1j0qphn4ln6jq42x7xr757fywm3k03y7bil"))))
505 (build-system cmake-build-system)
506 (arguments (list #:tests? #f)) ; no tests
507 (home-page "https://agauniyal.github.io/rang/")
508 (synopsis "Header only terminal C++ library")
509 (description
510 "Rang is a minimal, header only C++ library for terminal goodies.")
511 (license license:asl2.0)))
512
513(define-public range-v3
514 (package
515 (name "range-v3")
516 (version "0.12.0")
517 (source
518 (origin
519 (method git-fetch)
520 (uri (git-reference
521 (url "https://github.com/ericniebler/range-v3.git")
522 (commit version)))
523 (file-name (git-file-name name version))
524 (sha256
525 (base32 "0r85s5rmp5ixmik2y5y4w760pa38j1sg9hbr1fss2flibzvrf53d"))))
526 (build-system cmake-build-system)
527 (arguments
528 (list
529 #:configure-flags #~(list "-DRANGES_NATIVE=OFF")))
530 (native-inputs (list doxygen perl))
531 (inputs (list boost))
532 (synopsis "Range library for C++14/17/20")
533 (description
534 "Range-v3 is an extension of the Standard Template Library that
535makes its iterators and algorithms more powerful by making them composable.
536Unlike other range-like solutions which, seek to do away with iterators, in
537range-v3 ranges are an abstraction layer on top of iterators.")
538 (home-page "https://github.com/ericniebler/range-v3/")
539 (license (list
540 ;; Elements of Programming
541 (license:x11-style "file:///LICENSE.txt")
542 ;; SGI STL
543 license:sgifreeb2.0
544 ;; LibC++ (dual-licensed)
545 license:expat
546 license:ncsa
547 ;; Others
548 license:boost1.0))))
549
550(define-public robin-hood-hashing
551 (package
552 (name "robin-hood-hashing")
553 (version "3.11.5")
554 (source (origin
555 (method git-fetch)
556 (uri (git-reference
557 (url "https://github.com/martinus/robin-hood-hashing")
558 (commit version)))
559 (modules '((guix build utils)))
560 (snippet #~(delete-file-recursively "src/test/thirdparty"))
561 (file-name (git-file-name name version))
562 (sha256
563 (base32
564 "1qx6i09sp8c3l89mhyaql144nzh2h26ky9ms3n5l85qplx1vv2r7"))))
565 (build-system cmake-build-system)
566 (arguments
567 (list #:tests? #f ;; Needs bundled libraries for tests.
568 ;; By default this option is set to ON and removes the ability to
569 ;; install the library.
570 #:configure-flags
571 #~(list "-DRH_STANDALONE_PROJECT=OFF")))
572 (home-page "https://github.com/martinus/robin-hood-hashing")
573 (synopsis "Unordered set and map data structures library")
574 (description "This library provides a header-only unordered set and map
575data structures for C++.")
576 (license license:expat)))
577
578(define-public c++-gsl
579 (package
580 (name "c++-gsl")
581 (version "4.2.0")
582 (source
583 (origin
584 (method git-fetch)
585 (uri
586 (git-reference
587 (url "https://github.com/microsoft/GSL.git")
588 (commit
589 (string-append "v" version))))
590 (file-name
591 (git-file-name name version))
592 (sha256
593 (base32 "08w3ppd43wx9vq641ljw5izjd7p5w7drynw13ll9shwy41ydif9n"))))
594 (build-system cmake-build-system)
595 (native-inputs
596 (list googletest-1.13 pkg-config))
597 (synopsis "Guidelines Support Library")
598 (description "c++-gsl contains functions and types that are suggested for
599use by the C++ Core Guidelines maintained by the Standard C++ Foundation.")
600 (home-page "https://github.com/microsoft/GSL/")
601 (license license:expat)))
602
603(define-public c2ffi
604 (package
605 (name "c2ffi")
606 ;; As per the c2ffi README: the first three elements are encoding the
607 ;; required Clang/LLVM version, and the last one is the c2ffi revision.
608 (version "18.1.0.0")
609 (source
610 (origin
611 (method git-fetch)
612 (uri (git-reference
613 (url "https://github.com/rpav/c2ffi")
614 (commit (string-append "v" version))))
615 (file-name (git-file-name name version))
616 (sha256
617 (base32 "03hw650wjrc4jb4ra8bwc4rnprr0fpnf3wlxzacfjysvl25jb0j6"))
618 (modules '((guix build utils)))
619 (snippet
620 '(substitute* "CMakeLists.txt"
621 ;; Guix seems to be packaging LLVM libs separately thus -lLLVM
622 ;; won't work. Instead every library used must be listed.
623 (("c2ffi PUBLIC clang-cpp LLVM")
624 "c2ffi PUBLIC clang-cpp LLVMCore LLVMSupport LLVMMCParser \
625LLVMOption LLVMBitReader LLVMProfileData")))))
626 (build-system cmake-build-system)
627 (arguments
628 '(;; If LLVM was built without RTTI, we need to also be built without
629 ;; it. See: https://stackoverflow.com/q/11904519
630 #:configure-flags '("-DCMAKE_CXX_FLAGS=-fno-rtti")
631 #:phases
632 (modify-phases %standard-phases
633 (replace 'check
634 (lambda* (#:key tests? #:allow-other-keys)
635 (when tests?
636 (invoke "./bin/c2ffi" "--help")))))))
637 (native-inputs
638 (list clang-18)) ; CMakeLists.txt invokes `clang -print-resource-dir`
639 (inputs
640 (list clang-18)) ; Compiled with gcc, but links against libclang-cpp.so
641 (home-page "https://github.com/rpav/c2ffi")
642 (synopsis "Clang-based FFI wrapper generator")
643 (description
644 "@code{c2ffi} is a tool for extracting definitions from C, C++, and
645Objective C headers for use with foreign function call interfaces. It uses
646the @code{Clang/LLVM} infrastructure to extract the data, and emits it in
647various formats, including @code{json}.")
648 (license license:gpl2+)))
649
650(define-public edlib
651 (package
652 (name "edlib")
653 (version "1.2.7")
654 (source
655 (origin
656 (method git-fetch)
657 (uri (git-reference
658 (url "https://github.com/Martinsos/edlib")
659 (commit (string-append "v" version))))
660 (file-name (git-file-name name version))
661 (sha256
662 (base32 "0ibpxs3r8ii2s3g7kdbyr8brg6ha5l0fb21idw8531gx9v2qzh4v"))))
663 (build-system cmake-build-system)
664 (arguments
665 '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
666 (home-page "https://github.com/Martinsos/edlib")
667 (synopsis "Lightweight library for sequence alignment")
668 (description "This package provides a lightweight library for calculating
669the edit distance between two sequences and finding an optimal alignment path
670for transforming one sequence into another.")
671 (license license:expat)))
672
673(define-public expected-lite
674 (package
675 (name "expected-lite")
676 (version "0.9.0")
677 (source (origin
678 (method git-fetch)
679 (uri (git-reference
680 (url "https://github.com/martinmoene/expected-lite")
681 (commit (string-append "v" version))))
682 (file-name (git-file-name name version))
683 (sha256
684 (base32
685 "0j3vwil4qippjmwvyah7c4cjw08ady0vkdkjfnyrlkyhl18z259d"))))
686 (build-system cmake-build-system)
687 (home-page "https://github.com/martinmoene/expected-lite")
688 (synopsis "Expected objects in C++11 and later")
689 (description "@i{expected lite} is a single-file header-only library for
690objects that either represent a valid value or an error that can be passed by
691value. It is intended for use with C++11 and later. The library is based on
692the @code{std::expected} proposal (@url{http://wg21.link/p0323}).")
693 (license license:boost1.0)))
694
695(define-public libzen
696 (package
697 (name "libzen")
698 (version "0.4.41")
699 (source (origin
700 (method url-fetch)
701 ;; Warning: This source has proved unreliable 1 time at least.
702 ;; Consider an alternate source or report upstream if this
703 ;; happens again.
704 (uri (string-append "https://mediaarea.net/download/source/"
705 "libzen/" version "/"
706 "libzen_" version ".tar.bz2"))
707 (sha256
708 (base32
709 "0b8yj3rmmcv2fn3b5bnchfkk82fy4w5446c70sxccvfa7myps8zb"))))
710 (native-inputs
711 (list autoconf automake libtool))
712 (build-system gnu-build-system)
713 (arguments
714 '(#:phases
715 ;; The build scripts are not at the root of the archive.
716 (modify-phases %standard-phases
717 (add-after 'unpack 'pre-configure
718 (lambda _
719 (chdir "Project/GNU/Library"))))))
720 (home-page "https://github.com/MediaArea/ZenLib")
721 (synopsis "C++ utility library")
722 (description "ZenLib is a C++ utility library. It includes classes for handling
723strings, configuration, bit streams, threading, translation, and cross-platform
724operating system functions.")
725 (license license:zlib)))
726
727(define-public lunasvg
728 (package
729 (name "lunasvg")
730 (version "3.5.0")
731 (source
732 (origin
733 (method git-fetch)
734 (uri (git-reference
735 (url "https://github.com/sammycage/lunasvg")
736 (commit (string-append "v" version))))
737 (file-name (git-file-name name version))
738 (sha256
739 (base32 "1scmm1q35j3r87117p401fg3c1bx2nkiyvc2f3svvr2m2y9ihabr"))))
740 (build-system cmake-build-system)
741 (inputs (list plutovg))
742 (arguments
743 '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON -DUSE_SYSTEM_PLUTOVG=ON")
744 #:tests? #f)) ;No tests.
745 (home-page "https://github.com/sammycage/lunasvg")
746 (synopsis "SVG rendering and manipulation library in C++")
747 (description
748 "LunaSVG is an SVG rendering library in C++, designed to be
749lightweight and portable, offering efficient rendering and manipulation of
750Scalable Vector Graphics (SVG) files.")
751 (license license:expat)))
752
753(define-public rttr
754 (package
755 (name "rttr")
756 (version "0.9.6")
757 (source
758 (origin
759 (method git-fetch)
760 (uri (git-reference
761 (url "https://github.com/rttrorg/rttr/")
762 (commit (string-append "v" version))))
763 (sha256
764 (base32 "1yxad8sj40wi75hny8w6imrsx8wjasjmsipnlq559n4b6kl84ijp"))
765 (file-name (git-file-name name version))))
766 (build-system cmake-build-system)
767 (arguments
768 (list
769 ;; No check target. Setting test-target to "unit_test" runs it twice.
770 #:tests? #f
771 #:configure-flags
772 #~(list "-DBUILD_DOCUMENTATION=OFF"
773 "-DBUILD_EXAMPLES=OFF"
774 "-DBUILD_UNIT_TESTS=OFF")
775 #:phases
776 #~(modify-phases %standard-phases
777 ;; library_test fails in chroot.
778 (add-after 'unpack 'skip-library-test
779 (lambda _
780 (substitute* "src/unit_tests/unit_tests.cmake"
781 (("misc/library_test.cpp") "")))))))
782 (native-inputs (list pkg-config))
783 (home-page "https://github.com/rttrorg/rttr/")
784 (synopsis "C++ Reflection Library")
785 (description
786 "RTTR stands for Run Time Type Reflection. It describes the ability of a
787computer program to introspect and modify an object at runtime. It is also
788the name of the library itself, which is written in C++.")
789 (license license:expat)))
790
791(define-public plutovg
792 (package
793 (name "plutovg")
794 (version "1.3.1")
795 (source
796 (origin
797 (method git-fetch)
798 (uri (git-reference
799 (url "https://github.com/sammycage/plutovg")
800 (commit (string-append "v" version))))
801 (file-name (git-file-name name version))
802 (sha256
803 (base32 "1pkil2g9vvnhn7xycha5lwya0kp9h1ndg0lszgh8nkbilnavwig9"))))
804 (build-system cmake-build-system)
805 (arguments
806 '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")
807 #:tests? #f)) ;No tests.
808 (home-page "https://github.com/sammycage/plutovg")
809 (synopsis "Tiny 2D vector graphics library in C")
810 (description "PlutoVG is a standalone 2D vector graphics library in C.")
811 (license license:expat)))
812
813(define-public plutosvg
814 (package
815 (name "plutosvg")
816 (version "0.0.7")
817 (source
818 (origin
819 (method git-fetch)
820 (uri (git-reference
821 (url "https://github.com/sammycage/plutosvg")
822 (commit (string-append "v" version))))
823 (file-name (git-file-name name version))
824 (sha256
825 (base32 "0vj21y4sr98mb337sr2yrgzs8ipgrnhd23qk3c1gykdxwgiy94p0"))))
826 (build-system cmake-build-system)
827 (native-inputs (list plutovg))
828 (arguments
829 '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")
830 #:tests? #f)) ;No tests.
831 (home-page "https://github.com/sammycage/plutovg")
832 (synopsis "Tiny SVG rendering library in C")
833 (description
834 "PlutoSVG is a compact and efficient SVG rendering library written in C.
835It is specifically designed for parsing and rendering SVG documents embedded
836in OpenType fonts, providing an optimal balance between speed and minimal
837memory usage. It is also suitable for rendering scalable icons.")
838 (license license:expat)))
839
840(define-public pystring
841 (package
842 (name "pystring")
843 (version "1.1.4")
844 (source
845 (origin
846 (method git-fetch)
847 (uri (git-reference
848 (url "https://github.com/imageworks/pystring")
849 (commit (string-append "v" version))))
850 (sha256
851 (base32 "0h12x24skrlx4fv0k5vl8wnar8gi6bq091yp93awkwsbnm8qwkzd"))
852 (file-name (git-file-name name version))))
853 (build-system cmake-build-system)
854 (arguments
855 (list #:phases
856 #~(modify-phases %standard-phases
857 ;; The install phase doesn't install the header
858 (add-after 'install 'install-header
859 (lambda _
860 (mkdir-p (string-append #$output "/include"))
861 (copy-file
862 (string-append #$(package-source this-package)
863 "/pystring.h")
864 (string-append #$output
865 "/include/pystring.h")))))))
866 (native-inputs (list pkg-config))
867 (home-page "https://github.com/imageworks/pystring")
868 (synopsis "C++ functions matching the Python string methods")
869 (description
870 "Pystring is a collection of C++ functions which match the interface and
871behavior of Python's string class methods using std::string. Implemented in
872C++, it does not require or make use of a python interpreter. It provides
873convenience and familiarity for common string operations not included in the
874standard C++ library. It's also useful in environments where both C++ and
875Python are used.")
876 (license license:bsd-3)))
877
878(define-public dashel
879 (package
880 (name "dashel")
881 (version "1.3.3")
882 (source
883 (origin
884 (method git-fetch)
885 (uri (git-reference
886 (url "https://github.com/aseba-community/dashel")
887 (commit version)))
888 (sha256
889 (base32 "0anks2l2i2qp0wlzqck1qgpq15a3l6dg8lw2h8s4nsj7f61lffwy"))
890 (file-name (git-file-name name version))))
891 (build-system cmake-build-system)
892 (arguments '(#:tests? #f)) ; no tests
893 (native-inputs (list pkg-config))
894 (home-page "https://github.com/aseba-community/dashel")
895 (synopsis "Data stream helper encapsulation library")
896 (description
897 "Dashel is a data stream helper encapsulation C++ library. It provides a
898unified access to TCP/UDP sockets, serial ports, console, and files streams.
899It also allows a server application to wait for any activity on any
900combination of these streams.")
901 (license license:bsd-3)))
902
903(define-public debug-assert
904 (package
905 (name "debug-assert")
906 (version "1.3.4")
907 (source
908 (origin
909 (method git-fetch)
910 (uri (git-reference
911 (url "https://github.com/foonathan/debug_assert")
912 (commit (string-append "v" version))))
913 (file-name (git-file-name name version))
914 (sha256
915 (base32 "0z9wfh9h83rv6khm6s6bym40vgv2igy4yh665ygsdxwamil254b9"))))
916 (build-system cmake-build-system)
917 (arguments (list #:tests? #f)) ; no tests
918 (home-page "https://github.com/foonathan/debug_assert")
919 (synopsis "Assertion macro for C++")
920 (description
921 "debug_assert is a C++11 header-only library which provides the
922@code{DEBUG_ASSERT()} macro, which among other features can be selectively
923enabled in different parts of your code.")
924 (license license:zlib)))
925
926(define-public docopt-cpp
927 (package
928 (name "docopt-cpp")
929 (version "0.6.3")
930 (source
931 (origin
932 (method git-fetch)
933 (uri (git-reference
934 (url "https://github.com/docopt/docopt.cpp")
935 (commit (string-append "v" version))))
936 (file-name (git-file-name name version))
937 (sha256
938 (base32 "0cz3vv7g5snfbsqcf3q8bmd6kv5qp84gj3avwkn4vl00krw13bl7"))))
939 (build-system cmake-build-system)
940 (arguments (list #:tests? #f)) ; no tests
941 (home-page "http://docopt.org/")
942 (synopsis "Command-line interface description language for C++")
943 (description
944 "This library allows the user to define a command-line interface from a
945program's help message rather than specifying it programmatically with
946command-line parsers like @code{getopt} and @code{argparse}.")
947 (license (list license:expat license:boost1.0))))
948
949(define-public xbyak
950 (package
951 (name "xbyak")
952 (version "7.30")
953 (source (origin
954 (method git-fetch)
955 (uri (git-reference
956 (url "https://github.com/herumi/xbyak")
957 (commit (string-append "v" version))))
958 (file-name (git-file-name name version))
959 (sha256
960 (base32 "0rb0q5i3lj2jfrkmkxcgbczflw05p1x9fdpwrhv7gng7vp2byydw"))))
961 (build-system cmake-build-system)
962 (arguments
963 (list
964 ;; No tests are registered with CTest; the test/ directory contains
965 ;; shell scripts that are not integrated into the CMake build.
966 #:tests? #f))
967 (native-inputs
968 (list pkg-config))
969 (synopsis "JIT assembler for x86(IA-32)/x64(AMD64/x86-64) architecture")
970 (description "Xbyak is a C++ header-only JIT assembler for x86(IA-32),
971x64(AMD64/x86-64) architecture. It supports MASM/NASM-like syntax and
972advanced instruction sets including AVX-512, APX, and AVX10.2.")
973 (home-page "https://github.com/herumi/xbyak")
974 (license license:bsd-3)))
975
976(define-public xdgpp
977 (let ((commit "f01f810714443d0f10c333d4d1d9c0383be41375")
978 (revision "0"))
979 (package
980 (name "xdgpp")
981 (version (git-version "0.0.0" revision commit))
982 (source
983 (origin
984 (method git-fetch)
985 (uri (git-reference
986 (url "https://git.sr.ht/~danyspin97/xdgpp")
987 (commit commit)))
988 (file-name (git-file-name name version))
989 (sha256
990 (base32 "1w8da10whrhc7j82jf90814m3blabkl9s0kg8hv8h2fj5y3ji7hw"))))
991 (build-system gnu-build-system)
992 (native-inputs (list catch2-2))
993 (arguments
994 (list
995 #:test-target "test"
996 #:phases
997 #~(modify-phases %standard-phases
998 (delete 'configure)
999 (replace 'install
1000 (lambda _
1001 (install-file "xdg.hpp"
1002 (string-append #$output "/include")))))))
1003 (home-page "https://git.sr.ht/~danyspin97/xdgpp")
1004 (synopsis "C++17 implementation of the XDG Base Directory Specification")
1005 (description
1006 "This package provides a header-only library to retrieve the file names
1007of XDG base directories, such as XDG_CONFIG_HOME.")
1008 (license license:expat))))
1009
1010(define-public xsimd
1011 (package
1012 (name "xsimd")
1013 (version "13.2.0")
1014 (source
1015 (origin
1016 (method git-fetch)
1017 (uri (git-reference
1018 (url "https://github.com/xtensor-stack/xsimd")
1019 (commit version)))
1020 (sha256
1021 (base32 "1w3hffv5yr1xdl3f46dnnza3kixfgj13450181qf7spq2cknv2rg"))
1022 (file-name (git-file-name name version))))
1023 (build-system cmake-build-system)
1024 (arguments
1025 (list
1026 #:configure-flags #~(list "-DBUILD_TESTS=ON")))
1027 (native-inputs
1028 (list doctest
1029 googletest))
1030 (home-page "https://github.com/xtensor-stack/xsimd")
1031 (synopsis "C++ wrappers for SIMD intrinsics and math implementations")
1032 (description
1033 "xsimd provides a unified means for using @acronym{SIMD, single
1034instruction multiple data} features for library authors. Namely, it enables
1035manipulation of batches of numbers with the same arithmetic operators as for
1036single values. It also provides accelerated implementation of common
1037mathematical functions operating on batches.")
1038 (license license:bsd-3)))
1039
1040(define-public icecream-cpp
1041 (package
1042 (name "icecream-cpp")
1043 (version "1.0.0")
1044 (source
1045 (origin
1046 (method git-fetch)
1047 (uri (git-reference
1048 (url "https://github.com/renatoGarcia/icecream-cpp")
1049 (commit (string-append "v" version))))
1050 (file-name (git-file-name name version))
1051 (sha256
1052 (base32 "1pl3qibxa9m7qkfpxszablwyhlnn9qz0cgms8kr2wwvxdzipr1p0"))))
1053 (build-system cmake-build-system)
1054 (arguments
1055 (list
1056 #:configure-flags #~(list "-DCMAKE_CXX_STANDARD=17")))
1057 (native-inputs (list boost catch2-2))
1058 (home-page "https://github.com/renatoGarcia/icecream-cpp")
1059 (synopsis "C++ library for @code{printf} debugging")
1060 (description
1061 "IceCream-Cpp is a C++ library for @code{printf} debugging. It is
1062inspired by the @url{https://github.com/gruns/icecream, Python library} of the
1063same name.")
1064 (license license:expat)))
1065
1066(define-public tinyformat
1067 (package
1068 (name "tinyformat")
1069 (version "2.3.0")
1070 (source (origin
1071 (method git-fetch)
1072 (uri (git-reference
1073 (url "https://github.com/c42f/tinyformat")
1074 (commit (string-append "v" version))))
1075 (file-name (git-file-name name version))
1076 (sha256
1077 (base32
1078 "0j8bxrg7i4rn98iqpfh03krshgcbwh8hq8nm0p3sfdqpira3vi3y"))))
1079 (build-system cmake-build-system)
1080 (arguments
1081 (list #:phases
1082 #~(modify-phases %standard-phases
1083 (replace 'install
1084 (lambda _
1085 (install-file "../source/tinyformat.h"
1086 (string-append #$output "/include")))))))
1087 (home-page "https://github.com/c42f/tinyformat")
1088 (synopsis "Minimal, type-safe printf replacement library for C++")
1089 (description "@code{tinyformat} is a type-safe @code{printf} replacement
1090library in a single C++ header file. Design goals include:
1091
1092@itemize
1093@item Type-safety and extensibility for user defined types
1094@item C99 @code{printf} compatibility, to the extent possible using
1095@code{std::ostream}
1096@item POSIX extension for positional arguments
1097@item Simplicity and minimalism; a single header file to include and
1098distribute with your projects
1099@item Augment rather than replace the standard stream formatting mechanism
1100@item C++98 support, with optional C++11 niceties
1101@end itemize")
1102 (license license:boost1.0)))
1103
1104(define-public splice
1105 (package
1106 (name "splice")
1107 (version "0.2.0")
1108 (source
1109 (origin
1110 (method git-fetch)
1111 (uri (git-reference
1112 (url "https://github.com/FloofyPlasma/splice")
1113 (commit (string-append "v" version))))
1114 (file-name (git-file-name name version))
1115 (sha256
1116 (base32 "11g3g8zjq612lfxnk8yfyv5rm7s7cvhrjq5prqyix1lsdrfkq5r8"))))
1117 (build-system cmake-build-system)
1118 (arguments
1119 (list
1120 #:configure-flags
1121 #~(list "-DSPLICE_BUILD_TESTS=ON")))
1122 (native-inputs (list catch2 gcc-16))
1123 (home-page "https://github.com/FloofyPlasma/splice")
1124 (synopsis "Header-only C++26 reflection-based hook and mixin library")
1125 (description
1126 "Splice is a header-only C++26 hook and mixin library powered by static
1127reflection. Splice lets you register before, after, and return hooks on
1128annotated class methods at runtime, with zero overhead for unannotated code.")
1129 (license license:expat)))
1130
1131(define-public google-highway
1132 (package
1133 (name "google-highway")
1134 (version "1.3.0")
1135 (source
1136 (origin
1137 (method git-fetch)
1138 (uri (git-reference
1139 (url "https://github.com/google/highway")
1140 (commit version)))
1141 (file-name (git-file-name name version))
1142 (sha256
1143 (base32 "1bl576f3zlygxfmjqs5rrk3sag411hlhx2210lpq461plvvs80zi"))))
1144 (build-system cmake-build-system)
1145 (arguments
1146 `(#:configure-flags (list "-DHWY_SYSTEM_GTEST=on"
1147 "-DBUILD_SHARED_LIBS=ON")
1148 ,@(if (string-prefix? "i686-linux" (or (%current-system)
1149 (%current-target-system)))
1150 '(#:phases
1151 (modify-phases %standard-phases
1152 (add-after 'unpack 'really-skip-precision-tests
1153 (lambda _
1154 (substitute* "hwy/contrib/math/math_test.cc"
1155 (("Skipping math_test due to GCC issue with excess precision.*" m)
1156 (string-append m "return;\n")))))))
1157 '())))
1158 (native-inputs
1159 (list googletest))
1160 (home-page "https://github.com/google/highway")
1161 (synopsis "SIMD library with runtime dispatch")
1162 (description "Highway is a performance-portable, length-agnostic C++
1163library for SIMD (Single Instruction, Multiple Data) with runtime dispatch.")
1164 (license license:asl2.0)))
1165
1166(define-public hyprgraphics
1167 (package
1168 (name "hyprgraphics")
1169 (version "0.5.1")
1170 (source (origin
1171 (method git-fetch)
1172 (uri (git-reference
1173 (url "https://github.com/hyprwm/hyprgraphics")
1174 (commit (string-append "v" version))))
1175 (file-name (git-file-name name version))
1176 (modules '((guix build utils)))
1177 (snippet #~(substitute* "CMakeLists.txt" (("libjxl_cms") "")))
1178 (sha256
1179 (base32
1180 "06nqbz3vw55vd2a57ayigyfqb9g54bcb094rp3gz1w7ijrnyxh73"))))
1181 (build-system cmake-build-system)
1182 (native-inputs (list gcc-15 pkg-config))
1183 (inputs (list cairo
1184 file ;; Provides libmagic.
1185 hyprutils
1186 libdrm
1187 libpng
1188 libjpeg-turbo
1189 libjxl
1190 ;; Note: The current librsvg-2.40 for non-Rust architectures
1191 ;; is too old.
1192 (librsvg-for-system)
1193 libwebp
1194 mesa
1195 pango
1196 pixman
1197 spng))
1198 (home-page "https://wiki.hypr.land/Hypr-Ecosystem/hyprgraphics/")
1199 (synopsis "Hyprland graphics/resource utilities")
1200 (description
1201 "Hyprgraphics is a small C++ library with graphics/resource related
1202utilities used across the hypr* ecosystem.")
1203 (license license:bsd-3)))
1204
1205(define-public hyprlang
1206 (package
1207 (name "hyprlang")
1208 (version "0.6.8")
1209 (source (origin
1210 (method git-fetch)
1211 (uri (git-reference
1212 (url "https://github.com/hyprwm/hyprlang")
1213 (commit (string-append "v" version))))
1214 (file-name (git-file-name name version))
1215 (sha256
1216 (base32
1217 "06wiizy73f0x6zj1ar878gm1w9zam1gmgjw0ybixj3qag0gxqv34"))))
1218 (build-system cmake-build-system)
1219 (native-inputs (list gcc-15 pkg-config))
1220 (inputs (list hyprutils))
1221 (home-page "https://wiki.hypr.land/Hypr-Ecosystem/hyprlang/")
1222 (synopsis "Official implementation library for hypr config language")
1223 (description
1224 "This package provides the official implementation for hypr configuration
1225language used in Hyprland.")
1226 (license license:lgpl3)))
1227
1228(define-public hyprutils
1229 (package
1230 (name "hyprutils")
1231 (version "0.13.1")
1232 (source (origin
1233 (method git-fetch)
1234 (uri (git-reference
1235 (url "https://github.com/hyprwm/hyprutils")
1236 (commit (string-append "v" version))))
1237 (file-name (git-file-name name version))
1238 (sha256
1239 (base32
1240 "1qa5plbfhqdxlxs4ar9fl81642ckfcb5y7yk9zbwfn3h0si2q1wc"))))
1241 (build-system cmake-build-system)
1242 (arguments (list #:tests? #f)) ; No tests in Release build type
1243 (native-inputs (list gcc-15 pkg-config))
1244 (inputs (list pixman))
1245 (home-page "https://github.com/hyprwm/hyprutils")
1246 (synopsis "C++ library for utilities used across Hyprland ecosystem")
1247 (description
1248 "This package provides a C++ library for utilities used across Hyprland
1249ecosystem.")
1250 (license license:bsd-3)))
1251
1252(define-public hyprtoolkit
1253 (package
1254 (name "hyprtoolkit")
1255 (version "0.5.4")
1256 (source (origin
1257 (method git-fetch)
1258 (uri (git-reference
1259 (url "https://github.com/hyprwm/hyprtoolkit")
1260 (commit (string-append "v" version))))
1261 (file-name (git-file-name name version))
1262 (sha256
1263 (base32
1264 "1gihwav0k1jb4f7gq1d15njwr80ylbxa62hh25kyzqfxhf7q3540"))))
1265 (build-system cmake-build-system)
1266 (arguments (list #:tests? #f)) ; No tests in Release build type
1267 (native-inputs (list pkg-config hyprwayland-scanner gcc-15))
1268 (inputs
1269 (list aquamarine
1270 cairo
1271 googletest
1272 hyprgraphics
1273 hyprlang
1274 hyprutils
1275 iniparser
1276 libglvnd
1277 libxkbcommon
1278 mesa
1279 pango
1280 pixman
1281 wayland
1282 wayland-protocols))
1283 (home-page "https://github.com/hyprwm/hyprtoolkit")
1284 (synopsis "Modern C++ Wayland-native GUI toolkit")
1285 (description "This package provides a C++ toolkit for making wayland GUI
1286apps.")
1287 (license license:bsd-3)))
1288
1289(define-public hyprwire
1290 (package
1291 (name "hyprwire")
1292 (version "0.3.1")
1293 (source (origin
1294 (method git-fetch)
1295 (uri (git-reference
1296 (url "https://github.com/hyprwm/hyprwire")
1297 (commit (string-append "v" version))))
1298 (file-name (git-file-name name version))
1299 (sha256
1300 (base32
1301 "1y1aazvv081mn7cfipbs4pn5fjs6gcs5ygqr8hbl9jy3w8lxm8q0"))))
1302 (build-system cmake-build-system)
1303 (arguments (list #:tests? #f)) ; There are no tests
1304 (native-inputs (list pkg-config gcc-15))
1305 (inputs
1306 (list hyprutils
1307 libffi
1308 pugixml))
1309 (home-page "https://github.com/hyprwm/hyprwire")
1310 (synopsis "Fast and consistent wire protocol for IPC")
1311 (description "This package provides a fast and consistent wire protocol,
1312and its implementation. This is essentially a method for processes to talk to
1313each other.")
1314 (license license:bsd-3)))
1315
1316(define-public hyprland-guiutils
1317 (package
1318 (name "hyprland-guiutils")
1319 (version "0.2.1")
1320 (source (origin
1321 (method git-fetch)
1322 (uri (git-reference
1323 (url "https://github.com/hyprwm/hyprland-guiutils")
1324 (commit (string-append "v" version))))
1325 (file-name (git-file-name name version))
1326 (sha256
1327 (base32
1328 "0x5757ch8rvgbph66fkf5cg39r37isvfy450429746xmajsy0qa7"))))
1329 (build-system cmake-build-system)
1330 (arguments (list #:tests? #f)) ; There are no tests
1331 (native-inputs (list pkg-config gcc-15))
1332 (inputs
1333 (list aquamarine
1334 cairo
1335 hyprgraphics
1336 hyprlang
1337 hyprtoolkit
1338 hyprutils
1339 mesa
1340 libxkbcommon
1341 pixman))
1342 (home-page "https://github.com/hyprwm/hyprland-guiutils")
1343 (synopsis "Hyprland GUI utilities")
1344 (description "This package provides GUI utilities for hyprland. It is the
1345successor of hyprland-qtutils.")
1346 (license license:bsd-3)))
1347
1348(define-public xsimd-benchmark
1349 (package
1350 (inherit xsimd)
1351 (name "xsimd-benchmark")
1352 (arguments
1353 `(#:configure-flags (list "-DBUILD_BENCHMARK=ON" "-DBUILD_EXAMPLES=ON")
1354 #:tests? #f
1355 #:phases (modify-phases %standard-phases
1356 (add-after 'unpack 'remove-march=native
1357 (lambda _
1358 (substitute* "benchmark/CMakeLists.txt"
1359 (("-march=native") ""))))
1360 (replace 'install
1361 (lambda* (#:key outputs #:allow-other-keys)
1362 ;; Install nothing but the executables.
1363 (let ((out (assoc-ref outputs "out")))
1364 (install-file "benchmark/benchmark_xsimd"
1365 (string-append out "/bin"))
1366 (install-file "examples/mandelbrot"
1367 (string-append out "/bin"))))))))
1368 (synopsis "Benchmark of the xsimd library")
1369
1370 ;; Mark as tunable to take advantage of SIMD code in xsimd/xtensor.
1371 (properties '((tunable? . #t)))))
1372
1373(define-public chaiscript
1374 (package
1375 (name "chaiscript")
1376 (version "6.1.0")
1377 (source
1378 (origin
1379 (method git-fetch)
1380 (uri (git-reference
1381 (url "https://github.com/ChaiScript/ChaiScript")
1382 (commit (string-append "v" version))))
1383 (file-name (git-file-name name version))
1384 (sha256
1385 (base32 "0i1c88rn1wwz8nf3dpapcdkk4w623m3nksfy5yjai10k9irkzy3c"))
1386 (modules '((guix build utils)))
1387 ;; It's bundled catch2 fails to build.
1388 (snippet '(begin
1389 (delete-file "unittests/catch.hpp")
1390 (substitute* "unittests/compiled_tests.cpp"
1391 (("catch[.]hpp") "catch2/catch.hpp"))
1392 (substitute* "unittests/type_info_test.cpp"
1393 (("catch[.]hpp") "catch2/catch.hpp"))))))
1394 (build-system cmake-build-system)
1395 (inputs (list catch2-2))
1396 (home-page "https://chaiscript.com/")
1397 (synopsis "Embedded scripting language designed for C++")
1398 (description
1399 "ChaiScript is one of the only embedded scripting language designed from
1400the ground up to directly target C++ and take advantage of modern C++
1401development techniques. Being a native C++ application, it has some advantages
1402over existing embedded scripting languages:
1403
1404@enumerate
1405@item Uses a header-only approach, which makes it easy to integrate with
1406existing projects.
1407@item Maintains type safety between your C++ application and the user scripts.
1408@item Supports a variety of C++ techniques including callbacks, overloaded
1409functions, class methods, and stl containers.
1410@end enumerate\n")
1411 (license license:bsd-3)))
1412
1413(define-public fifo-map
1414 (package
1415 (name "fifo-map")
1416 (version "1.0.0")
1417 (home-page "https://github.com/nlohmann/fifo_map")
1418 (source (origin
1419 (method git-fetch)
1420 (uri (git-reference
1421 (url home-page)
1422 (commit (string-append "v" version))))
1423 (sha256
1424 (base32
1425 "0y59fk6ycrgjln9liwcja3l5j1vxpa5i671bynpbsjlyq5f2560q"))
1426 (patches (search-patches "fifo-map-remove-catch.hpp.patch"
1427 "fifo-map-fix-flags-for-gcc.patch"))
1428 (file-name (git-file-name name version))
1429 (modules '((guix build utils)))
1430 (snippet '(delete-file-recursively "./test/thirdparty"))))
1431 (inputs
1432 (list catch2-1))
1433 (build-system cmake-build-system)
1434 (arguments
1435 '(#:phases
1436 (modify-phases %standard-phases
1437 (replace 'check
1438 (lambda* (#:key tests? #:allow-other-keys)
1439 (when tests? (invoke "./unit"))))
1440 (replace 'install
1441 (lambda* (#:key outputs #:allow-other-keys)
1442 (let* ((out (assoc-ref outputs "out"))
1443 (inc (string-append out "/include/fifo_map")))
1444 (with-directory-excursion "../source"
1445 (install-file "src/fifo_map.hpp" inc))))))))
1446 (synopsis "FIFO-ordered associative container for C++")
1447 (description "Fifo_map is a C++ header only library for associative
1448container which uses the order in which keys were inserted to the container
1449as ordering relation.")
1450 (license license:expat)))
1451
1452(define-public frozen
1453 ;; The test suite fails to compile with the latest 1.1.1 release; use a
1454 ;; newer commit (see:
1455 ;; https://github.com/serge-sans-paille/frozen/issues/163).
1456 (let ((commit "dd1f58c5f6c97fbf0832cc4e84676663839b913e")
1457 (revision "0"))
1458 (package
1459 (name "frozen")
1460 (version (git-version "1.1.1" revision commit))
1461 (source (origin
1462 (method git-fetch)
1463 (uri (git-reference
1464 (url "https://github.com/serge-sans-paille/frozen")
1465 (commit commit)))
1466 (file-name (git-file-name name version))
1467 (sha256
1468 (base32
1469 "06i307a7v6alxfy24d47b1sjkz5f4mrqwl2vb4j8zx7wlgnrf08b"))))
1470 (build-system cmake-build-system)
1471 (home-page "https://github.com/serge-sans-paille/frozen")
1472 (synopsis "C++ constexpr alternative header-only library")
1473 (description "@code{frozen} is a header-only library that provides zero
1474cost initialization for immutable containers, fixed-size containers, and
1475various algorithms. It provides features such as:
1476@itemize
1477@item
1478immutable (also known as frozen), @code{constexpr}-compatible versions of
1479{std::set}, {std::unordered_set}, {std::map} and {std::unordered_map}
1480@item
1481fixed-capacity, @code{constinit}-compatible versions of @code{std::map} and
1482@code{std::unordered_map} with immutable, compile-time selected keys mapped to
1483mutable values.
1484@item
1485zero cost initialization version of @code{std::search} for frozen needles
1486using Boyer-Moore or Knuth-Morris-Pratt algorithms.
1487@end itemize
1488The @code{unordered_*} containers are guaranteed perfect (no hash
1489collision) and the extra storage is linear with respect to the number of
1490keys.")
1491 (license license:asl2.0))))
1492
1493(define-public glaze
1494 (package
1495 (name "glaze")
1496 (version "7.0.1")
1497 (source (origin
1498 (method git-fetch)
1499 (uri (git-reference
1500 (url "https://github.com/stephenberry/glaze")
1501 (commit (string-append "v" version))))
1502 (file-name (git-file-name name version))
1503 (sha256
1504 (base32
1505 "1plzxrpk470yqm0pzdw5ghc39jvcafn2xj90hk4gpy7r82wvwfhs"))))
1506 (build-system cmake-build-system)
1507 (arguments
1508 (list #:tests? #f
1509 #:configure-flags
1510 ;; Building tests require fetching external libraries
1511 #~(list "-DBUILD_TESTING=OFF")))
1512 (home-page "https://github.com/stephenberry/glaze")
1513 (synopsis "Fast, in memory, JSON and reflection library for modern C++")
1514 (description "Glaze is an in-memory JSON and reflection library for modern
1515C++. It also provides support for BEVE, CBOR, CSV, MessagePack, TOML, YAML,
1516and EETF.")
1517 (license license:expat)))
1518
1519(define-public json-dto
1520 (package
1521 (name "json-dto")
1522 (version "0.3.1")
1523 (source (origin
1524 (method git-fetch)
1525 (uri (git-reference
1526 (url "https://github.com/Stiffstream/json_dto")
1527 (commit (string-append "v." version))))
1528 (file-name (git-file-name name version))
1529 (sha256
1530 (base32
1531 "0wr1srp08fr2mv4fmnqr626pwiw60svn6wkvy2xg7j080mgwb3ml"))))
1532 (build-system cmake-build-system)
1533 (arguments
1534 (list
1535 #:configure-flags #~(list "-DJSON_DTO_INSTALL_SAMPLES=OFF")
1536 #:phases
1537 #~(modify-phases %standard-phases
1538 (add-after 'unpack 'change-directory
1539 (lambda _
1540 (chdir "dev"))))))
1541 (native-inputs (list catch2-2))
1542 (propagated-inputs (list rapidjson)) ;#include'd
1543 (home-page "https://github.com/Stiffstream/json_dto")
1544 (synopsis "JSON to C++ structures conversion library")
1545 (description "@code{json_dto} library is a small header-only helper for
1546converting data between JSON representation and C++ structs. DTO stands for
1547data transfer object.")
1548 (license license:bsd-3)))
1549
1550(define-public nlohmann-json
1551 (package
1552 (name "nlohmann-json")
1553 ;; XXX: Merge related package `nlohmann-json-no-char8-t' back into here when
1554 ;; updating from 3.12.0, as the unique patch it applies will already be
1555 ;; incorporated in.
1556 (version "3.12.0")
1557 (home-page "https://github.com/nlohmann/json")
1558 (source
1559 (origin
1560 (method git-fetch)
1561 (uri (git-reference (url home-page)
1562 (commit (string-append "v" version))))
1563 (sha256
1564 (base32 "09nqq56ighr3lghhn3fs399lkllghz717j0xyp87x0giw86ayh3h"))
1565 (file-name (git-file-name name version))
1566 (modules '((guix build utils)))
1567 (snippet
1568 #~(begin
1569 ;; Delete bundled software. Preserve doctest_compatibility.h, which
1570 ;; is a wrapper library added by this package.
1571 (install-file "./tests/thirdparty/doctest/doctest_compatibility.h"
1572 "/tmp")
1573 (delete-file-recursively "./tests/thirdparty")
1574 (install-file "/tmp/doctest_compatibility.h"
1575 "./tests/thirdparty/doctest")
1576
1577 ;; Adjust for the unbundled fifo_map and doctest.
1578 (substitute* (find-files "./tests/" "\\.h(pp)?")
1579 (("#include \"doctest\\.h\"") "#include <doctest/doctest.h>")
1580 (("#include <doctest\\.h>") "#include <doctest/doctest.h>"))
1581 (with-directory-excursion "tests/src"
1582 (let ((files (find-files "." "\\.cpp$")))
1583 (substitute* files
1584 (("#include ?\"(fifo_map.hpp)\"" all fifo-map-hpp)
1585 (string-append
1586 "#include <fifo_map/" fifo-map-hpp ">")))))))))
1587 (build-system cmake-build-system)
1588 (arguments
1589 (list
1590 #:configure-flags
1591 #~(list "-DJSON_MultipleHeaders=ON" ; For json_fwd.hpp.
1592 (string-append "-DJSON_TestDataDirectory="
1593 (dirname
1594 (search-input-directory %build-inputs
1595 "json_nlohmann_tests"))))
1596 #:phases
1597 #~(modify-phases %standard-phases
1598 (replace 'check
1599 (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
1600 (if tests?
1601 ;; Some tests need git and a full checkout, skip those.
1602 (invoke "ctest" "-LE" "git_required"
1603 "-j" (if parallel-tests?
1604 (number->string (parallel-job-count))
1605 "1"))
1606 (format #t "test suite not run~%")))))))
1607 (native-inputs
1608 (list amalgamate
1609 (let ((version "3.1.0"))
1610 (origin
1611 (method git-fetch)
1612 (uri (git-reference
1613 (url "https://github.com/nlohmann/json_test_data")
1614 (commit (string-append "v" version))))
1615 (file-name (git-file-name "json_test_data" version))
1616 (sha256
1617 (base32
1618 "0nbirc428qx0lpi940p7y24fzdjbwl6xig3h5rdbihyymmdzhvbc"))))))
1619 (inputs
1620 (list doctest fifo-map))
1621 (synopsis "JSON parser and printer library for C++")
1622 (description "@code{nlohmann::json} is a C++ JSON library that provides
1623intuitive syntax and trivial integration.")
1624 (license license:expat)))
1625
1626(define-public nlohmann-json-no-char8-t
1627 (package
1628 ;; XXX: Version 3.12.0 does not work without char8_t support.
1629 ;; OpenRCT2 compiles with -fno-char8_t, and thus requires this patch.
1630 ;; See https://github.com/nlohmann/json/pull/4736
1631 (inherit nlohmann-json)
1632 (name "nlohmann-json-no-char8-t")
1633 (version "3.12.0")
1634 (source
1635 (origin
1636 (method git-fetch)
1637 (uri (git-reference (url "https://github.com/nlohmann/json")
1638 (commit (string-append "v" version))))
1639 (sha256
1640 (base32 "09nqq56ighr3lghhn3fs399lkllghz717j0xyp87x0giw86ayh3h"))
1641 (file-name (git-file-name name version))
1642 (modules '((guix build utils)))
1643 (snippet
1644 #~(begin
1645 ;; Delete bundled software. Preserve doctest_compatibility.h, which
1646 ;; is a wrapper library added by this package.
1647 (install-file "./tests/thirdparty/doctest/doctest_compatibility.h"
1648 "/tmp")
1649 (delete-file-recursively "./tests/thirdparty")
1650 (install-file "/tmp/doctest_compatibility.h"
1651 "./tests/thirdparty/doctest")
1652
1653 ;; Adjust for the unbundled fifo_map and doctest.
1654 (substitute* (find-files "./tests/" "\\.h(pp)?")
1655 (("#include \"doctest\\.h\"") "#include <doctest/doctest.h>")
1656 (("#include <doctest\\.h>") "#include <doctest/doctest.h>"))
1657 (with-directory-excursion "tests/src"
1658 (let ((files (find-files "." "\\.cpp$")))
1659 (substitute* files
1660 (("#include ?\"(fifo_map.hpp)\"" all fifo-map-hpp)
1661 (string-append
1662 "#include <fifo_map/" fifo-map-hpp ">")))))))
1663 (patches
1664 (search-patches "nlohmann_json_fix_char8_t.patch"))))))
1665
1666(define-public jthread
1667 (let ((commit "0fa8d394254886c555d6faccd0a3de819b7d47f8")
1668 (revision "0"))
1669 (package
1670 (name "jthread")
1671 (version (git-version "0.0.0" revision commit))
1672 (source
1673 (origin
1674 (method git-fetch)
1675 (uri (git-reference
1676 (url "https://github.com/josuttis/jthread")
1677 (commit commit)))
1678 (file-name (git-file-name name version))
1679 (sha256
1680 (base32 "11cq4zh7pv86c62ah5im00gxr4cw6d396dp9117z8s271j4lrp6f"))
1681 (snippet
1682 ;; NOTE: remove precompiled PDFs.
1683 #~(begin
1684 (use-modules (guix build utils))
1685 (for-each (lambda (file)
1686 (delete-file file))
1687 (find-files "." ".pdf"))
1688 (delete-file-recursively "doc")))))
1689 (outputs '("out" "doc"))
1690 (build-system cmake-build-system)
1691 (arguments
1692 (list
1693 #:phases
1694 #~(modify-phases %standard-phases
1695 (delete 'configure)
1696 (delete 'build)
1697 (add-after 'unpack 'cd-and-generate-makefile
1698 (lambda _
1699 (call-with-output-file "source/Makefile.h"
1700 (lambda (port)
1701 ;; GCC 2.95 fails to deal with anonymous unions in glibc's
1702 ;; 'struct_rusage.h', so skip that.
1703 (display "CXX17 := c++ -std=c++17 -pthread\n" port)))))
1704 (replace 'check
1705 (lambda* (#:key tests? #:allow-other-keys)
1706 (when tests?
1707 (invoke "make" "-C" "source"))))
1708 (add-after 'check 'build-docs
1709 (lambda _
1710 (with-directory-excursion "tex"
1711 ;; NOTE: remove strict versioning.
1712 (substitute* "styles.tex"
1713 (("lst@CheckVersion\\{1.6\\}")
1714 "lst@CheckVersion{1.10c}"))
1715 (invoke "pdflatex" "std")
1716 (invoke "pdflatex" "std")))) ;Rerun to update references.
1717 (replace 'install
1718 (lambda _
1719 (for-each (lambda (file)
1720 (install-file file
1721 (string-append #$output "/include")))
1722 '("source/condition_variable_any2.hpp"
1723 "source/stop_token.hpp" "source/jthread.hpp"))))
1724 (add-after 'install 'install-doc
1725 (lambda _
1726 (let ((out (string-append #$output:doc "/share/doc/")))
1727 (mkdir-p out)
1728 (copy-file "tex/std.pdf"
1729 (string-append out
1730 #$name "-"
1731 #$version ".pdf"))))))))
1732 (native-inputs
1733 (list perl
1734 (texlive-local-tree
1735 (list texlive-booktabs
1736 texlive-caption
1737 texlive-enumitem
1738 texlive-etoolbox
1739 texlive-extract
1740 texlive-isodate
1741 texlive-jknapltx
1742 texlive-listings
1743 texlive-memoir
1744 texlive-microtype
1745 texlive-relsize
1746 texlive-rsfs
1747 texlive-substr
1748 texlive-ulem
1749 texlive-underscore
1750 texlive-xcolor
1751 texlive-xkeyval
1752 texlive-xpatch))))
1753 (home-page "https://github.com/josuttis/jthread")
1754 (synopsis "C++ class for a joining and cooperative interruptible thread")
1755 (description
1756 "This package provides a reference implementation of @code{std::jthread},
1757a cooperatively interruptible thread that is joined upon destruction.")
1758 (license license:cc-by4.0))))
1759
1760(define-public toml11
1761 (package
1762 (name "toml11")
1763 (version "4.4.0")
1764 (source
1765 (origin
1766 (method git-fetch)
1767 (uri (git-reference
1768 (url "https://github.com/ToruNiina/toml11")
1769 (commit (string-append "v" version))))
1770 (file-name (git-file-name name version))
1771 (sha256
1772 (base32 "0d15b50cf9jgvh3w99xh6crh03bn2dmv9bdyvzq6knsk2diql1dj"))))
1773 (build-system cmake-build-system)
1774 (arguments (list #:tests? #f))
1775 (home-page "https://github.com/ToruNiina/toml11")
1776 (synopsis "TOML for modern C++")
1777 (description
1778 "@code{toml11} is a C++11 (or later) header-only toml parser/encoder
1779depending only on C++ standard library.
1780
1781@itemize
1782@item It is compatible to the latest version of TOML v1.0.0.
1783@item It is one of the most TOML standard compliant libraries, tested with
1784a language agnostic test suite for TOML parsers.
1785@item It shows highly informative error messages.
1786@item It has configurable container. You can use any random-access containers
1787and key-value maps as backend containers.
1788@item It optionally preserves comments without any overhead.
1789@item It has configurable serializer that supports comments, inline tables,
1790literal strings and multiline strings.
1791@item It supports user-defined type conversion from/into toml values.
1792@item It correctly handles UTF-8 sequences, with or without BOM.
1793@end itemize")
1794 (license license:expat)))
1795
1796(define-public tomlplusplus
1797 (package
1798 (name "tomlplusplus")
1799 (version "3.4.0")
1800 (source (origin
1801 (method git-fetch)
1802 (uri (git-reference
1803 (url "https://github.com/marzer/tomlplusplus")
1804 (commit (string-append "v" version))))
1805 (file-name (git-file-name name version))
1806 (sha256
1807 (base32
1808 "1hvbifzcc97r9jwjzpnq31ynqnj5y93cjz4frmgddnkg8hxmp6w7"))))
1809 (build-system meson-build-system)
1810 (arguments
1811 (list #:configure-flags
1812 #~(list "-Dbuild_tests=true")
1813 #:phases
1814 #~(modify-phases %standard-phases
1815 (add-after 'unpack 'set-test-locales
1816 (lambda _
1817 (substitute* "tests/meson.build"
1818 (("foreach locale : test_locales" all)
1819 (format #f "test_locales = [~{'~a.utf8', ~}]~%~a"
1820 ;; %default-utf8-locales in (gnu packages base).
1821 '("C" "de_DE" "el_GR" "en_US" "fr_FR" "tr_TR")
1822 all))))))))
1823 ;; Tests require locales.
1824 (native-inputs (list cmake-minimal (libc-utf8-locales-for-target)))
1825 (home-page "https://marzer.github.io/tomlplusplus/")
1826 (synopsis "Header-only TOML config file parser and serializer for C++17")
1827 (description
1828 "This package provides header-only TOML config file parser and serializer
1829for C++17.")
1830 (license license:expat)))
1831
1832(define-public xtl
1833 (package
1834 (name "xtl")
1835 (version "0.7.7")
1836 (source
1837 (origin
1838 (method git-fetch)
1839 (uri (git-reference
1840 (url "https://github.com/xtensor-stack/xtl")
1841 (commit version)))
1842 (sha256
1843 (base32 "1b42mjxchinsf2ylbvhyypfysg5sfphxqby53vlg82wvr23rijkz"))
1844 (file-name (git-file-name name version))))
1845 (build-system cmake-build-system)
1846 (arguments
1847 (list
1848 #:configure-flags #~(list "-DBUILD_TESTS=ON")))
1849 (native-inputs
1850 (list doctest
1851 googletest
1852 nlohmann-json))
1853 (home-page "https://github.com/xtensor-stack/xtl")
1854 (synopsis "C++ template library providing some basic tools")
1855 (description "xtl is a C++ header-only template library providing basic
1856tools (containers, algorithms) used by other QuantStack packages.")
1857 (license license:bsd-3)))
1858
1859(define-public ccls
1860 (package
1861 (name "ccls")
1862 (version "0.20250815.1")
1863 (source
1864 (origin
1865 (method git-fetch)
1866 (uri (git-reference
1867 (url "https://github.com/MaskRay/ccls")
1868 (commit version)))
1869 (sha256
1870 (base32 "1jl4jv1z8vxjfmkv2mvii68aqqx2nrcbd6bhzjs5dd65r23bqs6x"))
1871 (file-name (git-file-name name version))))
1872 (build-system cmake-build-system)
1873 (arguments
1874 '(#:tests? #f)) ; no check target
1875 (inputs
1876 (list rapidjson))
1877 (native-inputs
1878 (list clang-21 llvm-21))
1879 (home-page "https://github.com/MaskRay/ccls")
1880 (synopsis "C/C++/Objective-C language server")
1881 (description
1882 "@code{ccls} is a server implementing the Language Server Protocol (LSP)
1883for C, C++ and Objective-C languages. It uses @code{clang} to perform static
1884code analysis and supports cross references, hierarchies, completion and
1885syntax highlighting. @code{ccls} is derived from @code{cquery} which is not
1886maintained anymore.")
1887 (license license:asl2.0)))
1888
1889(define-public concurrentqueue
1890 (package
1891 (name "concurrentqueue")
1892 (version "1.0.3")
1893 (source
1894 (origin
1895 (method git-fetch)
1896 (uri (git-reference
1897 (url "https://github.com/cameron314/concurrentqueue/")
1898 (commit "3747268264d0fa113e981658a99ceeae4dad05b7")))
1899 (file-name (git-file-name name version))
1900 (sha256
1901 (base32 "1n5v7n27llzg7khg1jvi35jrcf9v6adw8gaic9ndxn65dp723ssy"))))
1902 (build-system cmake-build-system)
1903 (arguments '(#:tests? #false)) ;no check target
1904 (home-page "https://github.com/cameron314/concurrentqueue/")
1905 (synopsis "Multi-producer, multi-consumer lock-free concurrent queue for C++11")
1906 (description
1907 "This package provides a fast multi-producer, multi-consumer lock-free
1908concurrent queue for C++11.")
1909 (license license:bsd-2)))
1910
1911(define-public ringbuffer
1912 (package
1913 (name "ringbuffer")
1914 (version "0.9.0")
1915 (source (origin
1916 (method git-fetch)
1917 (uri (git-reference
1918 (url "https://github.com/JohannesLorenz/ringbuffer")
1919 (commit (string-append "v" version))))
1920 (file-name (git-file-name name version))
1921 (sha256
1922 (base32
1923 "1c57hj6zyvcjpcbwrq8c1hj5brk1bnh69ayd88ny1p0gx031sjpk"))))
1924 (build-system cmake-build-system)
1925 (arguments
1926 (list #:configure-flags
1927 #~(list "-DCMAKE_CXX_FLAGS=-Wno-error=array-bounds"
1928 (string-append "-DINSTALL_LIB_DIR=" #$output "/lib"))
1929 #:phases
1930 #~(modify-phases %standard-phases
1931 (add-after 'install 'install-export-header
1932 (lambda _
1933 (install-file "src/lib/ringbuffer_export.h"
1934 (string-append #$output
1935 "/include/ringbuffer")))))))
1936 (home-page "https://github.com/JohannesLorenz/ringbuffer")
1937 (synopsis "Lock-free multi-reader ringbuffer")
1938 (description
1939 "@code{ringbuffer} is a library containing a ringbuffer. It is lock-free
1940(using atomics only), and allows multiple readers, but only one writer.")
1941 (license license:gpl3+)))
1942
1943(define-public spscqueue
1944 (package
1945 (name "spscqueue")
1946 (version "1.1")
1947 (source
1948 (origin
1949 (method git-fetch)
1950 (uri (git-reference
1951 (url "https://github.com/rigtorp/SPSCQueue/")
1952 (commit (string-append "v" version))))
1953 (file-name (git-file-name name version))
1954 (sha256
1955 (base32 "1428cj9x318afvnvnkhg0711iy4czqn86fi7ysgfhw91asa316rc"))))
1956 (build-system cmake-build-system)
1957 (home-page "https://github.com/rigtorp/SPSCQueue/")
1958 (synopsis "Single producer single consumer queue written in C++11")
1959 (description
1960 "This package provides a single producer single consumer wait-free and
1961lock-free fixed size queue written in C++11.")
1962 (license license:expat)))
1963
1964(define-public syscmdline
1965 (let ((commit "0c9f3de8b11bd2f33b03bea5521bf446af4ead69")
1966 (revision "0"))
1967 (package
1968 (name "syscmdline")
1969 ;; The version string is taken from
1970 ;; <https://raw.githubusercontent.com/SineStriker/syscmdline/refs/heads/main/CMakeLists.txt>.
1971 (version (git-version "1.0.0.0" revision commit))
1972 (source (origin
1973 (method git-fetch)
1974 (uri (git-reference
1975 (url "https://github.com/SineStriker/syscmdline")
1976 (commit commit)))
1977 (file-name (git-file-name name version))
1978 (sha256
1979 (base32
1980 "168dij7p2kjl0qs3k5lzrnbzf2s2mbfpm83jimk028whx8cbv4jh"))))
1981 (build-system cmake-build-system)
1982 (arguments
1983 (list #:configure-flags
1984 #~(list "-DSYSCMDLINE_BUILD_STATIC=OFF" ;build a shared library
1985 "-DSYSCMDLINE_BUILD_TESTS=ON")
1986 #:phases #~(modify-phases %standard-phases
1987 (replace 'check
1988 ;; There isn't currently any exposed test target.
1989 (lambda* (#:key tests? #:allow-other-keys)
1990 (when tests?
1991 (invoke "bin/tst_basic")))))))
1992 (home-page "https://github.com/SineStriker/syscmdline")
1993 (synopsis "C++ advanced command line parser")
1994 (description "SysCmdLine is a C++ command line parser that is inspired by
1995@code{QCommandLineParser} from Qt and @code{System.CommandLine} from C#. It
1996has features such as:
1997@itemize
1998@item Support sub-commands
1999@item Support case-insensitive parsing
2000@item Support global options
2001@item Support mutually exclusive options
2002@item Support short options and group flags
2003@item Support help text customization
2004@item Support localization
2005@item Simple tips for typo correction
2006@item Highly configurable
2007@item Friendly interface
2008@end itemize")
2009 (license license:expat))))
2010
2011(define-public gperftools
2012 (package
2013 (name "gperftools")
2014 (version "2.11")
2015 (source
2016 (origin
2017 (method git-fetch)
2018 (uri (git-reference
2019 (url "https://github.com/gperftools/gperftools")
2020 (commit (string-append "gperftools-" version))))
2021 (sha256
2022 (base32 "1mwsa4y696m8zjya0k7xzr9vsgb24dq4aq13m21hb5ygy7nh47id"))
2023 (file-name (git-file-name name version))))
2024 (build-system gnu-build-system)
2025 (arguments
2026 ;; The tests are flaky when run in parallel. For more info:
2027 ;; https://bugs.gnu.org/46562
2028 `(#:parallel-tests? #f
2029 ,@(if (target-riscv64?)
2030 `(#:make-flags (list "LDFLAGS=-latomic"))
2031 '())))
2032 (native-inputs
2033 (list autoconf automake libtool
2034 ;; For tests.
2035 perl))
2036 (home-page "https://github.com/gperftools/gperftools")
2037 (synopsis "Multi-threaded malloc() and performance analysis tools for C++")
2038 (description
2039 "@code{gperftools} is a collection of a high-performance multi-threaded
2040malloc() implementation plus some thread-friendly performance analysis
2041tools:
2042
2043@itemize
2044@item tcmalloc,
2045@item heap profiler,
2046@item heap checker,
2047@item CPU checker.
2048@end itemize\n")
2049 (license license:bsd-3)))
2050
2051(define-public gperftools-for-friction
2052 (let ((commit "b97c293c812c7ec3cdeccd50a89769e746c01377")
2053 (revision "0")
2054 (base-version "0.9.6"))
2055 (package
2056 (inherit gperftools)
2057 (name "gperftools")
2058 (version (git-version base-version revision commit))
2059 (source
2060 (origin
2061 (method git-fetch)
2062 (uri (git-reference
2063 (url "https://github.com/friction2d/gperftools")
2064 (commit (string-append "friction-" base-version))))
2065 (sha256
2066 (base32 "1ffkzlsdpcjjq8md21kr7a1q10bia77xriga6far2608rplmwsk8"))
2067 (file-name (git-file-name name version)))))))
2068
2069(define-public cpp-httplib
2070 ;; this package is not graftable, as everything is implemented in a single
2071 ;; header
2072 (package
2073 (name "cpp-httplib")
2074 (version "0.20.0")
2075 (source
2076 (origin
2077 (method git-fetch)
2078 (uri (git-reference
2079 (url "https://github.com/yhirose/cpp-httplib")
2080 (commit (string-append "v" version))))
2081 (sha256
2082 (base32 "0w5klyfsaws793xb0cbkjxg7lwrdm6f3m4z4v7pzkwl957f9q70m"))
2083 (file-name (git-file-name name version))))
2084 (build-system cmake-build-system)
2085 (arguments
2086 `(#:parallel-tests? #f
2087 #:configure-flags
2088 '("-DBUILD_SHARED_LIBS=ON"
2089 "-DHTTPLIB_TEST=ON"
2090 "-DHTTPLIB_COMPILE=ON"
2091 "-DHTTPLIB_REQUIRE_BROTLI=ON"
2092 "-DHTTPLIB_REQUIRE_OPENSSL=ON"
2093 "-DHTTPLIB_REQUIRE_ZLIB=ON")
2094 #:make-flags
2095 '(,(string-append "CXX=" (cxx-for-target)))
2096 #:phases
2097 (modify-phases %standard-phases
2098 (add-after 'unpack 'disable-network-tests
2099 (lambda _
2100 (for-each
2101 (lambda (test)
2102 (substitute* "test/test.cc"
2103 (((string-append "\\(" test))
2104 (string-append "(DISABLED_" test))))
2105 ;; There are tests requiring network access, disable them
2106 '("AbsoluteRedirectTest" "BaseAuthTest" "CancelTest"
2107 "ConnectionErrorTest"
2108 "ChunkedEncodingTest" "ChunkedEncodingTest"
2109 "ClientDefaultHeadersTest"
2110 "DecodeWithChunkedEncoding" "DefaultHeadersTest"
2111 "DigestAuthTest" "HttpsToHttpRedirectTest"
2112 "HostnameToIPConversionTest"
2113 "RangeTest" "RedirectTest" "RelativeRedirectTest"
2114 "SSLClientTest" "SendAPI"
2115 "SpecifyServerIPAddressTest"
2116 "TooManyRedirectTest" "UrlWithSpace"
2117 "YahooRedirectTest" "YahooRedirectTest")))))))
2118 (native-inputs
2119 (list curl googletest python))
2120 (inputs
2121 (list brotli openssl zlib))
2122 (home-page "https://github.com/yhirose/cpp-httplib")
2123 (synopsis "C++ HTTP/HTTPS server and client library")
2124 (description "cpp-httplib is a C++11 single-file cross platform blocking
2125HTTP/HTTPS library, easy to setup. It can also be used as a single-header
2126library.")
2127 (license license:expat)))
2128
2129(define-public rapidfuzz-cpp
2130 (package
2131 (name "rapidfuzz-cpp")
2132 (version "3.3.3")
2133 (source
2134 (origin
2135 (method git-fetch)
2136 (uri (git-reference
2137 (url "https://github.com/rapidfuzz/rapidfuzz-cpp")
2138 (commit (string-append "v" version))))
2139 (file-name (git-file-name name version))
2140 (sha256
2141 (base32 "1ma2hpp4c53fwjb8yi7rpkgivhsw7bkd8agw3sw5zwdlwsks88xv"))))
2142 (build-system cmake-build-system)
2143 (arguments
2144 (list
2145 #:configure-flags #~(list "-DRAPIDFUZZ_BUILD_TESTING=ON")))
2146 (native-inputs (list catch2-2))
2147 (home-page "https://github.com/rapidfuzz/rapidfuzz-cpp")
2148 (synopsis "Rapid fuzzy string matching using the Levenshtein Distance")
2149 (description
2150 "RapidFuzz is a fast string matching library for Python and C++, which is
2151using the string similarity calculations from FuzzyWuzzy.")
2152 (license license:expat)))
2153
2154(define-public cpplint
2155 (package
2156 (name "cpplint")
2157 (version "2.0.2")
2158 (source
2159 (origin
2160 (method git-fetch)
2161 (uri (git-reference
2162 (url "https://github.com/cpplint/cpplint")
2163 (commit version)))
2164 (sha256
2165 (base32 "0n9v4zayxp2r6lhmsi4xpk5lnjs4x6h6p7isr86xyhm7mjxd7jp1"))
2166 (file-name (git-file-name name version))))
2167 (build-system pyproject-build-system)
2168 (arguments
2169 (list
2170 ;; tests: 222 passed
2171 #:phases
2172 #~(modify-phases %standard-phases
2173 (add-after 'unpack 'fix-pytest-config
2174 (lambda _
2175 (substitute* "pyproject.toml"
2176 (("\"pytest-cov\", ") "")))))))
2177 (native-inputs
2178 (list python-pytest
2179 python-pytest-timeout
2180 python-setuptools
2181 python-testfixtures))
2182 (home-page "https://github.com/cpplint/cpplint")
2183 (synopsis "Static code checker for C++")
2184 (description "@code{cpplint} is a command-line tool to check C/C++ files
2185for style issues following Google’s C++ style guide. While Google maintains
2186its own version of the tool, this is a fork that aims to be more responsive
2187and make @code{cpplint} usable in wider contexts.")
2188 (license license:bsd-3)))
2189
2190(define-public readerwriterqueue
2191 (package
2192 (name "readerwriterqueue")
2193 (version "1.0.7")
2194 (source
2195 (origin
2196 (method git-fetch)
2197 (uri (git-reference
2198 (url "https://github.com/cameron314/readerwriterqueue")
2199 (commit (string-append "v" version))))
2200 (file-name (git-file-name name version))
2201 (sha256
2202 (base32
2203 "0dy77avwfcidxhzj249b1qfg0m86fzz624gi62ddpvm0dmds0h0m"))))
2204 (build-system cmake-build-system)
2205 (arguments
2206 (list
2207 #:tests? #f ;no make instructions
2208 #:phases
2209 #~(modify-phases %standard-phases
2210 (add-after 'unpack 'keep-license-out-of-include-dir
2211 (lambda _
2212 (substitute* "CMakeLists.txt"
2213 (("(readerwritercircularbuffer\\.h )LICENSE.md" _ f) f)))))))
2214 (home-page "https://github.com/cameron314/readerwriterqueue")
2215 (synopsis "Fast single-producer single-consumer lock free queue")
2216 (description "readerwriterqueue provides a lock free queue supporting
2217a two-thread use case (one consuming, one producing). Features include:
2218@itemize
2219@item compatible with C++11 (supports moving objects instead of making copies)
2220@item fully generic (templated container of any type); just like
2221@code{std::queue}, you never need to allocate memory for elements yourself
2222@item allocates memory up front, in contiguous blocks
2223@item provides a @code{try_enqueue} method which is guaranteed never to allocate
2224memory
2225@item provides an enqueue method which can dynamically grow the size of the
2226queue as needed
2227@item Completely wait-free (no compare-and-swap loop). Enqueue and dequeue are
2228always O(1) (not counting memory allocation)
2229@item On x86, the memory barriers compile down to no-ops
2230@end itemize")
2231 (license (list license:bsd-2
2232 license:zlib)))) ;embedded in atomicops.h
2233
2234(define-public reproc
2235 (package
2236 (name "reproc")
2237 (version "14.2.5")
2238 (source
2239 (origin
2240 (method git-fetch)
2241 (uri (git-reference
2242 (url "https://github.com/DaanDeMeyer/reproc")
2243 (commit (string-append "v" version))))
2244 (file-name (git-file-name name version))
2245 (sha256
2246 (base32 "07h11rzhvplgmd420v650h8abyvwcbws4w1xlq8x18nxbp4nnqn1"))))
2247 (build-system cmake-build-system)
2248 (arguments
2249 (list #:tests? #f ; No tests.
2250 #:configure-flags #~(list "-DBUILD_SHARED_LIBS=ON"
2251 "-DREPROC++=ON")))
2252 (native-inputs
2253 (list pkg-config))
2254 (synopsis "Process IO library")
2255 (description "reproc (Redirected Process) is a C/C++ library that
2256simplifies starting, stopping and communicating with external programs. The
2257main use case is executing command line applications directly from C or C++
2258code and retrieving their output.")
2259 (home-page "https://github.com/DaanDeMeyer/reproc")
2260 (license license:expat)))
2261
2262(define-public scn
2263 (package
2264 (name "scn")
2265 (version "4.0.1")
2266 (source (origin
2267 (method git-fetch)
2268 (uri (git-reference
2269 (url "https://github.com/eliaskosunen/scnlib")
2270 (commit (string-append "v" version))))
2271 (file-name (git-file-name name version))
2272 (patches (search-patches "scn-fast-float-compat.patch"))
2273 (sha256
2274 (base32 "0lnb9r004y75n4s4pd3k58cdcjpcylhdgr5phwja713g3dd40im8"))))
2275 (build-system cmake-build-system)
2276 (arguments
2277 (list #:configure-flags #~(list "-DSCN_USE_EXTERNAL_GTEST=yes"
2278 "-DSCN_USE_EXTERNAL_BENCHMARK=yes"
2279 "-DSCN_USE_EXTERNAL_FAST_FLOAT=yes"
2280 "-DBUILD_SHARED_LIBS=yes")))
2281 (propagated-inputs (list fast-float))
2282 (native-inputs (list googletest googlebenchmark))
2283 (home-page "https://scnlib.dev/")
2284 (synopsis "Type-safe text parsing library")
2285 (description "@code{scn} is a text parsing library for C++. It can
2286be used as a safe alternative to @code{scanf} or as a fast alternative to
2287@code{IOStreams}, analogous to @code{fmt}.")
2288 (license license:asl2.0)))
2289
2290(define-public sobjectizer
2291 (package
2292 (name "sobjectizer")
2293 (version "5.8.2")
2294 (source
2295 (origin
2296 (method git-fetch)
2297 (uri (git-reference
2298 (url "https://github.com/Stiffstream/sobjectizer")
2299 (commit (string-append "v." version))))
2300 (sha256
2301 (base32 "0ya5xlgm3arvzvcnsajw03kc3cibbdbap9p7kgpxn00byqbxixr7"))
2302 (file-name (git-file-name name version))))
2303 (build-system cmake-build-system)
2304 (arguments
2305 `(#:tests? #f
2306 #:phases
2307 (modify-phases %standard-phases
2308 (add-after 'unpack 'change-directory
2309 (lambda _
2310 (chdir "dev"))))))
2311 (home-page "https://stiffstream.com/en/products/sobjectizer.html")
2312 (synopsis "Cross-platform actor framework for C++")
2313 (description
2314 "SObjectizer is a cross-platform \"actor frameworks\" for C++.
2315SObjectizer supports not only the Actor Model but also the Publish-Subscribe
2316Model and CSP-like channels. The goal of SObjectizer is to simplify
2317development of concurrent and multithreaded applications in C++.")
2318 (license license:bsd-3)))
2319
2320(define-public taskflow
2321 (package
2322 (name "taskflow")
2323 (version "3.10.0")
2324 (source
2325 (origin
2326 (method git-fetch)
2327 (uri (git-reference
2328 (url "https://github.com/taskflow/taskflow")
2329 (commit (string-append "v" version))))
2330 (file-name (git-file-name name version))
2331 (sha256
2332 (base32 "08z7vif8lk4jri9m77j9gqyyv7nwza5qfgab0bk5gl9akb63qh5k"))))
2333 (build-system cmake-build-system)
2334 (home-page "https://taskflow.github.io/")
2335 (synopsis
2336 "General-purpose parallel and heterogeneous task programming system")
2337 (description
2338 "Taskflow is a C++ library for writing parallel and heterogeneous task
2339programs.")
2340 (license license:expat)))
2341
2342(define-public kokkos
2343 (package
2344 (name "kokkos")
2345 (version "4.6.02")
2346 (source
2347 (origin
2348 (method git-fetch)
2349 (uri (git-reference
2350 (url "https://github.com/kokkos/kokkos")
2351 (commit version)))
2352 (file-name (git-file-name name version))
2353 (sha256
2354 (base32 "0pfrxqjirm8qccb9k1krlw9fh0qlva62q6gyc6j7yz0zvdrdyi59"))
2355 (modules '((guix build utils)))
2356 (snippet
2357 ;; Remove bundled googletest.
2358 #~(delete-file-recursively "tpls/gtest"))))
2359 (build-system cmake-build-system)
2360 (arguments
2361 (list #:configure-flags
2362 ;; deal.II uses only the serial backend, so do not enable the
2363 ;; others yet.
2364 #~(list "-DBUILD_SHARED_LIBS=ON"
2365 "-DKokkos_ENABLE_SERIAL=ON"
2366 "-DKokkos_ENABLE_TESTS=ON"
2367 "-DKokkos_ENABLE_EXAMPLES=ON"
2368 "-DKokkos_ENABLE_HWLOC=ON"
2369 "-DKokkos_ENABLE_MEMKIND=ON")
2370 #:phases
2371 #~(modify-phases %standard-phases
2372 (add-after 'install-license-files 'remove-cruft
2373 (lambda _
2374 (delete-file
2375 (string-append #$output "/share/doc/"
2376 #$name "-" #$version
2377 "/LICENSE_FILE_HEADER")))))))
2378 (native-inputs
2379 (list googletest python))
2380 (inputs
2381 (list `(,hwloc "lib") memkind))
2382 (home-page "https://github.com/kokkos/kokkos")
2383 (synopsis "C++ abstractions for parallel execution and data management")
2384 (description
2385 "Kokkos Core implements a programming model in C++ for writing performance
2386portable applications targeting all major HPC platforms. For that purpose it
2387provides abstractions for both parallel execution of code and data management.
2388Kokkos is designed to target complex node architectures with N-level memory
2389hierarchies and multiple types of execution resources.")
2390
2391 ;; Code exhibits integer size mismatches when compiled on 32-bit systems.
2392 (supported-systems %64bit-supported-systems)
2393
2394 ;; This code can benefit from SIMD optimizations; tuning gives an effect
2395 ;; equivalent to setting the 'KOKKOS_ARCH_NATIVE' CMake flag, except for
2396 ;; the configuration metadata recorded in 'Kokkos_Core.cpp'.
2397 (properties '((tunable? . #t)))
2398
2399 (license license:asl2.0))) ; With LLVM exception
2400
2401(define-public kokkos-kernels
2402 (package
2403 (name "kokkos-kernels")
2404 ;; Synchronize with Kokkos version.
2405 (version (package-version kokkos))
2406 (source
2407 (origin
2408 (method git-fetch)
2409 (uri (git-reference
2410 (url "https://github.com/kokkos/kokkos-kernels")
2411 (commit version)))
2412 (file-name (git-file-name name version))
2413 (sha256
2414 ;; Version 4.6.02.
2415 (base32 "05g4dp1359rsx0y2wrg2yv4zx3aq5anxr8jgb2c5f1ay3nq3639s"))))
2416 (build-system cmake-build-system)
2417 (arguments
2418 (list #:tests? #f
2419 #:configure-flags
2420 #~(list "-DBUILD_SHARED_LIBS=ON")))
2421 (inputs
2422 (list kokkos
2423 openblas))
2424 (properties '((tunable? . #t)))
2425 (home-page "https://kokkos.org")
2426 (synopsis
2427 "Math kernels for Kokkos")
2428 (description "KokkosKernels implements local computational kernels for
2429linear algebra and graph operations, using the Kokkos shared-memory parallel
2430programming model. \"Local\" means not using MPI, or running within a
2431single MPI process without knowing about MPI.")
2432 (license license:asl2.0))) ;with LLVM exception
2433
2434(define-public kokkos-fft
2435 (package
2436 (name "kokkos-fft")
2437 (version "0.3.0")
2438 (source
2439 (origin
2440 (method git-fetch)
2441 (uri (git-reference
2442 (url "https://github.com/kokkos/kokkos-fft")
2443 (commit (string-append "v" version))))
2444 (file-name (git-file-name name version))
2445 (sha256 (base32 "0skajkzkrmlsfzrzkvspzqf6z9wqvs529cmknzhk4mhn917pykh6"))))
2446 (build-system cmake-build-system)
2447 (arguments
2448 (list #:configure-flags
2449 #~(list "-DKokkosFFT_DEPENDENCY_POLICIES=INSTALLED"
2450 "-DKokkosFFT_ENABLE_TESTS=ON")))
2451 (inputs
2452 (list kokkos
2453 fftw
2454 fftwf))
2455 (native-inputs
2456 (list googletest))
2457 (home-page "https://kokkosfft.readthedocs.io/")
2458 (synopsis "Shared-memory FFT for the Kokkos ecosystem")
2459 (description "Kokkos-fft is an experimental FFT interface for the
2460Kokkos C++ environment. It implements local interfaces between Kokkos
2461and FFT libraries such as FFTW, cufft, hipfft (rocfft), and oneMKL.
2462\"Local\" means not using MPI, or running within a single MPI process
2463without knowing about MPI.")
2464 ;; dual licensed, asl2.0 with LLVM exception
2465 (license (list license:expat license:asl2.0))))
2466
2467(define-public tweeny
2468 (package
2469 (name "tweeny")
2470 (version "3")
2471 (source
2472 (origin
2473 (method git-fetch)
2474 (uri (git-reference
2475 (url "https://github.com/mobius3/tweeny")
2476 (commit (string-append "v" version))))
2477 (file-name (git-file-name name version))
2478 (sha256
2479 (base32 "1adm4c17pi7xf3kf6sjyxibz5rdg1ka236p72xsm6js4j9gzlbp4"))))
2480 (arguments
2481 '(#:tests? #f)) ;no check target
2482 (build-system cmake-build-system)
2483 (home-page "https://mobius3.github.io/tweeny/")
2484 (synopsis "Modern C++ tweening library")
2485 (description "@code{Tweeny} is an inbetweening library designed for the
2486creation of complex animations for games and other beautiful interactive
2487software. It leverages features of modern @code{C++} to empower developers with
2488an intuitive API for declaring tweenings of any type of value, as long as they
2489support arithmetic operations. The goal of @code{Tweeny} is to provide means to
2490create fluid interpolations when animating position, scale, rotation, frames or
2491other values of screen objects, by setting their values as the tween starting
2492point and then, after each tween step, plugging back the result.")
2493 (license license:expat)))
2494
2495(define-public abseil-cpp-20220623
2496 (package
2497 (name "abseil-cpp")
2498 (version "20220623.2")
2499 (source (origin
2500 (method git-fetch)
2501 (uri (git-reference
2502 (url "https://github.com/abseil/abseil-cpp")
2503 (commit version)))
2504 (file-name (git-file-name name version))
2505 (sha256
2506 (base32
2507 "1cmchfcqp85yp5hc3i47xv3i14v0f2wd5h2jblvcjjmjyhji1bwr"))
2508 (patches
2509 (search-patches "abseil-cpp-20220623.1-no-kepsilon-i686.patch"))))
2510 (build-system cmake-build-system)
2511 (arguments
2512 (list
2513 #:configure-flags
2514 (if (%current-target-system)
2515 #~'("-DBUILD_SHARED_LIBS=ON")
2516 ;; The following convoluted expression has been crafted to avoid
2517 ;; changing the derivation when removing inheritance from
2518 ;; abseil-cpp-20200923.3.
2519 ;; TODO: Simplify and try to remove CMAKE_EXE_LINKER_FLAGS for
2520 ;; next world-rebuild.
2521 #~(cons*
2522 "-DABSL_BUILD_TESTING=ON"
2523 (delete
2524 "-DABSL_RUN_TESTS=ON"
2525 (list "-DBUILD_SHARED_LIBS=ON"
2526 "-DABSL_RUN_TESTS=ON"
2527 "-DABSL_USE_EXTERNAL_GOOGLETEST=ON"
2528 ;; Needed, else we get errors like:
2529 ;; ld: CMakeFiles/absl_periodic_sampler_test.dir/internal/periodic_sampler_test.cc.o:
2530 ;; undefined reference to symbol '_ZN7testing4Mock16UnregisterLockedEPNS_8internal25UntypedFunctionMockerBaseE'
2531 ;; ld: /gnu/store/...-googletest-1.10.0/lib/libgmock.so:
2532 ;; error adding symbols: DSO missing from command line
2533 ;; collect2: error: ld returned 1 exit status
2534 "-DCMAKE_EXE_LINKER_FLAGS=-lgtest -lpthread -lgmock"))))
2535 #:phases
2536 #~(modify-phases %standard-phases
2537 (add-after 'unpack 'fix-max
2538 (lambda _
2539 (substitute* "absl/debugging/failure_signal_handler.cc"
2540 (("std::max\\(SIGSTKSZ, 65536\\)")
2541 "std::max<size_t>(SIGSTKSZ, 65536)"))))
2542 ;; TODO: Remove phase unconditionally for next world-rebuild.
2543 #$@(if (%current-target-system)
2544 #~()
2545 #~((add-before 'configure 'remove-gtest-check
2546 (lambda _
2547 (substitute* "CMakeLists.txt"
2548 (("check_target\\(gtest\\)") "")
2549 (("check_target\\(gtest_main\\)") "")
2550 (("check_target\\(gmock\\)") "")))))))))
2551 (native-inputs
2552 (list googletest-1.12))
2553 (home-page "https://abseil.io")
2554 (synopsis "Augmented C++ standard library")
2555 (description "Abseil is a collection of C++ library code designed to
2556augment the C++ standard library. The Abseil library code is collected from
2557Google's C++ code base.")
2558 (license license:asl2.0)))
2559
2560(define-public abseil-cpp
2561 (let ((base abseil-cpp-20220623))
2562 (package
2563 (inherit base)
2564 (name "abseil-cpp")
2565 (version "20250814.1")
2566 (source (origin
2567 (method git-fetch)
2568 (uri (git-reference
2569 (url "https://github.com/abseil/abseil-cpp")
2570 (commit version)))
2571 (file-name (git-file-name name version))
2572 (sha256
2573 (base32
2574 "1wm2271hwy2pnfv9b5iy0y9xvbhiwffdf9i6s3dn89k630wh6928"))
2575 (patches
2576 (search-patches "abseil-cpp-20220623.1-no-kepsilon-i686.patch"))))
2577 (arguments
2578 (substitute-keyword-arguments arguments
2579 ((#:configure-flags flags #~'())
2580 (if (target-riscv64?)
2581 #~(cons* "-DCMAKE_SHARED_LINKER_FLAGS=-latomic"
2582 #$flags)
2583 flags))
2584 ((#:phases phases)
2585 #~(modify-phases #$phases
2586 (add-before 'check 'set-env-vars
2587 (lambda* (#:key inputs #:allow-other-keys)
2588 ;; absl_time_test requires this environment variable.
2589 (setenv "TZDIR" (string-append #$(package-source this-package)
2590 "/absl/time/internal/cctz/testdata/zoneinfo"))))
2591 #$@(if (target-riscv64?)
2592 #~((replace 'check
2593 (lambda* (#:key tests? #:allow-other-keys)
2594 (when tests?
2595 (setenv "CTEST_OUTPUT_ON_FAILURE" "1")
2596 (invoke "ctest" "-E"
2597 "absl_symbolize_test|absl_log_format_test")))))
2598 #~())))))
2599 (native-inputs
2600 (modify-inputs native-inputs
2601 (replace "googletest" googletest))))))
2602
2603(define-public abseil-cpp-20250127
2604 (let ((base abseil-cpp))
2605 (package
2606 (inherit base)
2607 (name "abseil-cpp")
2608 (version "20250127.1")
2609 (source (origin
2610 (method git-fetch)
2611 (uri (git-reference
2612 (url "https://github.com/abseil/abseil-cpp")
2613 (commit version)))
2614 (file-name (git-file-name name version))
2615 (sha256
2616 (base32
2617 "0r2j360csym12jlgmcy92rgwdmng63shchxvfmln3j5402lv0g21"))
2618 (patches
2619 (search-patches "abseil-cpp-20220623.1-no-kepsilon-i686.patch")))))))
2620
2621(define (abseil-cpp-for-c++-standard base version)
2622 (hidden-package
2623 (package/inherit base
2624 (arguments
2625 (substitute-keyword-arguments arguments
2626 ((#:configure-flags flags)
2627 #~(cons* #$(string-append "-DCMAKE_CXX_STANDARD="
2628 (number->string version))
2629 #$flags)))))))
2630
2631(define (make-static-abseil-cpp version)
2632 (let ((base abseil-cpp))
2633 (hidden-package
2634 (package/inherit base
2635 (arguments
2636 (substitute-keyword-arguments arguments
2637 ((#:configure-flags flags)
2638 #~(cons* "-DCMAKE_POSITION_INDEPENDENT_CODE=ON"
2639 (delete "-DBUILD_SHARED_LIBS=ON" #$flags)))))))))
2640
2641(define-public abseil-cpp-cxxstd17
2642 (abseil-cpp-for-c++-standard abseil-cpp 17)) ;XXX: the default with GCC 11?
2643
2644(define-public abseil-cpp-cxxstd11
2645 (abseil-cpp-for-c++-standard abseil-cpp-20220623 11)) ;last version on C++11
2646
2647(define-public static-abseil-cpp
2648 (make-static-abseil-cpp abseil-cpp))
2649
2650(define-public miniaudio
2651 (package
2652 (name "miniaudio")
2653 (version "0.11.25")
2654 (source
2655 (origin
2656 (method git-fetch)
2657 (uri (git-reference
2658 (url "https://github.com/mackron/miniaudio")
2659 (commit version)))
2660 (file-name (git-file-name name version))
2661 (sha256
2662 (base32 "0v5pk1kfs7gyfsh4n7ypamyd26vckkyx0dm6dm7q6y7fkzlzhkfs"))
2663 (patches (search-patches "miniaudio-CVE-2026-32837.patch"))))
2664 (build-system gnu-build-system)
2665 (arguments
2666 (list
2667 #:phases
2668 #~(modify-phases %standard-phases
2669 (delete 'build)
2670 (delete 'configure)
2671 (replace 'check
2672 (lambda* (#:key tests? #:allow-other-keys)
2673 (when tests?
2674 (with-directory-excursion "tests/_build"
2675 (let ((tests '("conversion" "filtering" "generation")))
2676 (mkdir "bin")
2677 ;; Compile tests
2678 (for-each (lambda (test)
2679 (invoke "gcc"
2680 (string-append "../" test "/" test
2681 ".c")
2682 "-o"
2683 (string-append "bin/" test)
2684 "-ldl"
2685 "-lm"
2686 "-lpthread"
2687 "-Wall"
2688 "-Wextra"
2689 "-Wpedantic")
2690 (let ((bin (string-append "./bin/" test)))
2691 (if (string= test "filtering")
2692 ;; NOTE: the 'filtering' test
2693 ;; requires an input file.
2694 (invoke bin bin)
2695 (invoke bin))))
2696 tests))))))
2697 (replace 'install
2698 (lambda _
2699 (install-file "miniaudio.h"
2700 (string-append #$output "/include"))
2701 (copy-recursively "extras"
2702 (string-append #$output
2703 "/include/extras/")))))))
2704 (home-page "https://miniaud.io")
2705 (synopsis "Audio playback and capture library for C and C++")
2706 (description
2707 "Miniaudio is an audio playback and capture library for C and C++. It is
2708made up of a single source file and has no external dependencies.")
2709 (properties '((lint-hidden-cve "CVE-2026-32837")))
2710 (license license:expat)))
2711
2712;; Deprecated on 2026-07-08.
2713(define-deprecated/public-alias lexy
2714 (@ (gnu packages compiler-tools) lexy))
2715
2716;; Deprecated on 2026-07-08.
2717(define-deprecated/public-alias pegtl
2718 (@ (gnu packages compiler-tools) pegtl))
2719
2720(define-public psascan
2721 (package
2722 (name "psascan")
2723 (version "0.1.0")
2724 (source (origin
2725 (method url-fetch)
2726 (uri (string-append "https://www.cs.helsinki.fi/group"
2727 "/pads/software/pSAscan"
2728 "/pSAscan-" version ".tar.bz2"))
2729 (sha256
2730 (base32
2731 "1cphk4gf202nzkxz6jdjzls4zy27055gwpm0r8cn99gr6c8548cy"))
2732 (modules '((guix build utils)))
2733 (snippet '(begin (substitute* '("src/Makefile"
2734 "tools/delete-bytes-255/Makefile")
2735 (("-march=native") ""))))))
2736 (build-system gnu-build-system)
2737 (arguments
2738 (list
2739 #:tests? #false ;there are none
2740 #:phases
2741 #~(modify-phases %standard-phases
2742 (add-after 'unpack 'chdir (lambda _ (chdir "src")))
2743 (delete 'configure)
2744 (replace 'install
2745 (lambda _
2746 (install-file "psascan"
2747 (string-append #$output "/bin")))))))
2748 (inputs (list libdivsufsort))
2749 (properties '((tunable? . #t)))
2750 (home-page "https://www.cs.helsinki.fi/group/pads/pSAscan.html")
2751 (synopsis "Parallel external memory suffix array construction")
2752 (description "This package contains an implementation of the parallel
2753external-memory suffix array construction algorithm called pSAscan. The
2754algorithm is based on the sequential external-memory suffix array construction
2755algorithm called SAscan.")
2756 ;; Code exhibits integer size mismatches when compiled on 32-bit systems.
2757 (supported-systems %64bit-supported-systems)
2758 (license license:expat)))
2759
2760(define-public cxxopts
2761 (package
2762 (name "cxxopts")
2763 (version "3.2.1")
2764 (source (origin
2765 (method git-fetch)
2766 (uri (git-reference
2767 (url "https://github.com/jarro2783/cxxopts")
2768 (commit (string-append "v" version))))
2769 (file-name (git-file-name name version))
2770 (sha256
2771 (base32
2772 "0cvpgp4p4nfwnivv0399hnm311xlrkwx0n5jnrw8aj7v1jipgqb8"))))
2773 (build-system cmake-build-system)
2774 (synopsis "Lightweight C++ command line option parser")
2775 (description
2776 "A lightweight header-only C++ option parser library, supporting the
2777standard GNU style syntax for options.")
2778 (home-page "https://github.com/jarro2783/cxxopts/wiki")
2779 (license license:expat)))
2780
2781(define-public folly
2782 (package
2783 (name "folly")
2784 (version "2025.11.10.00")
2785 (source (origin
2786 (method git-fetch)
2787 (uri (git-reference
2788 (url "https://github.com/facebook/folly")
2789 (commit (string-append "v" version))))
2790 (file-name (git-file-name name version))
2791 (sha256
2792 (base32
2793 "11gdrc2jhb9dzjgpq6h3p5453f8gyvv4ngsnrqi4rylfil8a3b3i"))))
2794 (build-system cmake-build-system)
2795 (arguments
2796 (list
2797 ;; Tests must be explicitly enabled
2798 ;;#:configure-flags #~(list "-DBUILD_TESTS=ON")
2799 ;; Leave tests disabled; see https://github.com/facebook/folly/issues/2246
2800 #:tests? #f))
2801 (propagated-inputs
2802 (list boost gflags glog liburing))
2803 (inputs
2804 (list bzip2
2805 double-conversion
2806 fast-float
2807 fmt
2808 libaio
2809 libevent
2810 libiberty
2811 libsodium
2812 libunwind
2813 lz4
2814 openssl
2815 snappy
2816 zlib
2817 `(,zstd "lib")))
2818 (native-inputs
2819 (list googletest))
2820 (synopsis "Collection of C++ components complementing the standard library")
2821 (description
2822 "Folly (acronymed loosely after Facebook Open Source Library) is a library
2823of C++14 components that complements @code{std} and Boost.")
2824 (home-page "https://github.com/facebook/folly/wiki")
2825 ;; 32-bit is not supported: https://github.com/facebook/folly/issues/103
2826 (supported-systems '("aarch64-linux" "x86_64-linux"))
2827 (license license:asl2.0)))
2828
2829(define-public poco
2830 (package
2831 (name "poco")
2832 (version "1.15.0")
2833 (source (origin
2834 (method git-fetch)
2835 (uri (git-reference
2836 (url "https://github.com/pocoproject/poco")
2837 (commit (string-append "poco-" version "-release"))))
2838 (file-name (git-file-name name version))
2839 (sha256
2840 (base32
2841 "0fzf46y7rga233nsg7d1jc6xa83i6qajxil6rak1z2z2bmhk5xa8"))))
2842 (build-system cmake-build-system)
2843 (arguments
2844 (list
2845 #:configure-flags #~(list "-DENABLE_TESTS=ON" "-DENABLE_CRYPTO=ON"
2846 "-DENABLE_NETSSL=ON")
2847 #:phases
2848 #~(modify-phases %standard-phases
2849 (add-before 'check 'check-setenv
2850 (lambda _
2851 (setenv "HOME" "/tmp")
2852 (setenv "TMPDIR" "/tmp")))
2853 (add-after 'unpack 'disable-problematic-tests
2854 (lambda _
2855 (substitute* (list "Foundation/CMakeLists.txt" ; XXX: fails.
2856 ;; Require network access.
2857 "Net/CMakeLists.txt"
2858 "MongoDB/CMakeLists.txt"
2859 "Redis/CMakeLists.txt"
2860 ;; Requires network access and uses certificates
2861 ;; that will expire.
2862 "NetSSL_OpenSSL/CMakeLists.txt")
2863 (("ENABLE_TESTS") "FALSE")))))))
2864 (inputs (list openssl))
2865 (home-page "https://pocoproject.org/")
2866 (synopsis "Portable C++ components")
2867 (description "This package provides a collection of C++ libraries intended
2868to be useful for building network-based applications.")
2869 (license license:boost1.0)))
2870
2871(define-public aws-crt-cpp
2872 (package
2873 (name "aws-crt-cpp")
2874 ;; Update only when updating aws-sdk-cpp, and when updating also update
2875 ;; versions of library dependencies linked from from
2876 ;; https://github.com/awslabs/aws-crt-cpp/tree/{aws-crt-cpp commit}/crt
2877 (version "0.32.3")
2878 (source (origin
2879 (method git-fetch)
2880 (uri (git-reference
2881 (url "https://github.com/awslabs/aws-crt-cpp")
2882 (commit (string-append "v" version))))
2883 (file-name (git-file-name name version))
2884 (sha256
2885 (base32
2886 "0hl62qngg3qcm4dykv89bm2sn5wn8p1ik0vb79d7djq3r1bblzks"))))
2887 (build-system cmake-build-system)
2888 (arguments
2889 '(#:configure-flags
2890 (list "-DBUILD_DEPS=OFF"
2891 "-DBUILD_SHARED_LIBS=ON"
2892 (string-append "-DCMAKE_PREFIX_PATH="
2893 (assoc-ref %build-inputs "aws-c-common"))
2894 "-DENABLE_NET_TESTS=OFF")))
2895 (propagated-inputs
2896 (list aws-c-auth
2897 aws-c-cal
2898 aws-c-event-stream
2899 aws-c-http
2900 aws-c-mqtt
2901 aws-c-s3))
2902 (synopsis "C++ wrapper for Amazon Web Services C libraries")
2903 (description "The AWS Common Runtime (CRT) library provides a C++ wrapper
2904implementation for the following @acronym{AWS,Amazon Web Services} C libraries:
2905aws-c-auth, aws-c-cal, aws-c-common, aws-c-compression, aws-c-event-stream,
2906aws-c-http, aws-c-io, aws-c-mqtt, aws-checksums, and s2n.")
2907 (home-page "https://github.com/awslabs/aws-crt-cpp")
2908 (license license:asl2.0)))
2909
2910(define-public aws-sdk-cpp
2911 (package
2912 (name "aws-sdk-cpp")
2913 ; When updating also check for a tagged update to aws-crt-cpp from
2914 ; https://github.com/aws/aws-sdk-cpp/tree/main/crt
2915 (version "1.11.541")
2916 (source (origin
2917 (method git-fetch)
2918 (uri (git-reference
2919 (url "https://github.com/aws/aws-sdk-cpp")
2920 (commit version)))
2921 (file-name (git-file-name name version))
2922 (sha256
2923 (base32
2924 "0lvsskwpniip1m75w00aqa3ic1337r2c6a6brvgs6ff2qqi27cdg"))))
2925 (build-system cmake-build-system)
2926 (arguments
2927 '(;; Tests are run during the build phase.
2928 #:tests? #f
2929 #:configure-flags
2930 (list "-DBUILD_DEPS=OFF"
2931 "-DBUILD_SHARED_LIBS=ON"
2932 (string-append "-DCMAKE_PREFIX_PATH="
2933 (assoc-ref %build-inputs "aws-c-common")))))
2934 (propagated-inputs
2935 (list aws-crt-cpp))
2936 (inputs
2937 (list curl pulseaudio zlib))
2938 (synopsis "Amazon Web Services SDK for C++")
2939 (description
2940 "The AWS SDK for C++ provides a C++11 interface to the @acronym{AWS,Amazon
2941Web Services} API. AWS provides on-demand computing infrastructure and software
2942services including database, analytic, and machine learning technologies.")
2943 (home-page "https://github.com/aws/aws-sdk-cpp")
2944 (license license:asl2.0)))
2945
2946(define-public libexpected
2947 (package
2948 (name "libexpected")
2949 (version "1.3.1")
2950 (source
2951 (origin
2952 (method git-fetch)
2953 (uri (git-reference
2954 (url "https://github.com/TartanLlama/expected")
2955 (commit (string-append "v" version))
2956 ;; NOTE: Requires TL_CMAKE from custom
2957 ;; repository. Should not affect reproducibility.
2958 (recursive? #t)))
2959 (file-name (git-file-name name version))
2960 (sha256
2961 (base32 "119jhawkw33gb41pmki5di3vk7pki6pj6a1i394r6saqwvxkblzv"))
2962 (patches (search-patches "libexpected-use-provided-catch2.patch"))))
2963 (build-system cmake-build-system)
2964 (native-inputs
2965 (list catch2-2))
2966 (synopsis "C++11/14/17 std::expected with functional-style extensions")
2967 (description "@code{std::expected} is proposed as the preferred way to
2968represent objects which will either have an expected value, or an unexpected
2969value giving information about why something failed. Unfortunately, chaining
2970together many computations which may fail can be verbose, as error-checking
2971code will be mixed in with the actual programming logic. This implementation
2972provides a number of utilities to make coding with expected cleaner.")
2973 (home-page "https://tl.tartanllama.xyz/")
2974 (license license:cc0)))
2975
2976(define-public libfccp
2977 ;; Header-only library without any official release versions available.
2978 (let ((commit "4ade42d5f8c454c6c57b3dce9c51c6dd02182a66")
2979 (revision "0"))
2980 (package
2981 (name "libfccp")
2982 (version (git-version "0.0.0" revision commit))
2983 (source
2984 (origin
2985 (method git-fetch)
2986 (uri (git-reference
2987 (url "https://github.com/ben-strasser/fast-cpp-csv-parser")
2988 (commit commit)))
2989 (file-name (git-file-name name version))
2990 (sha256
2991 (base32 "1y7ads97gkrjg1jc532n8gmjry0qhqxginw1gq7b4lk9s0pyl540"))))
2992 (build-system copy-build-system)
2993 (arguments
2994 (list
2995 #:install-plan
2996 #~`(("csv.h" "include/libfccp/"))))
2997 (synopsis "Fast header-only library for reading CSV files")
2998 (description
2999 "This is a small, easy-to-use and fast header-only library for reading
3000comma separated value (CSV) files.")
3001 (home-page "https://github.com/ben-strasser/fast-cpp-csv-parser")
3002 (license license:bsd-3))))
3003
3004(define-public immer
3005 (package
3006 (name "immer")
3007 (version "0.9.1")
3008 (source (origin
3009 (method git-fetch)
3010 (uri (git-reference
3011 (url "https://github.com/arximboldi/immer")
3012 (commit (string-append "v" version))))
3013 (file-name (git-file-name name version))
3014 (sha256
3015 (base32 "04ckvmi391pspqiglzgi8h57gwr8822xhlrg5qdxf5yg6scgkfj2"))))
3016 (build-system cmake-build-system)
3017 (arguments
3018 (list
3019 #:modules `((guix build cmake-build-system)
3020 ((guix build gnu-build-system) #:prefix gnu:)
3021 (guix build utils))
3022 #:phases
3023 #~(modify-phases %standard-phases
3024 (replace 'check (assoc-ref gnu:%standard-phases 'check)))))
3025 (inputs (list boost libgc c-rrb))
3026 (native-inputs (list catch2-3.5 doctest fmt pkg-config))
3027 (home-page "https://sinusoid.es/immer")
3028 (synopsis "Immutable data structures")
3029 (description "Immer is a library of persistent and immutable data structures
3030written in C++.")
3031 (properties '((lint-hidden-cpe-vendors . ("immer_project"))))
3032 (license license:boost1.0)))
3033
3034(define-public zug
3035 (package
3036 (name "zug")
3037 (version "0.1.2")
3038 (source (origin
3039 (method git-fetch)
3040 (uri (git-reference
3041 (url "https://github.com/arximboldi/zug")
3042 (commit (string-append "v" version))))
3043 (file-name (git-file-name name version))
3044 (sha256
3045 (base32 "1fy6wvvlp1253lzh66zcq5sp656jxvanxf7iq8pi37ymjq5fyynh"))
3046 (modules '((guix build utils)))
3047 (snippet #~(delete-file-recursively "tools"))))
3048 (build-system cmake-build-system)
3049 (arguments
3050 (list
3051 #:modules `((guix build cmake-build-system)
3052 ((guix build gnu-build-system) #:prefix gnu:)
3053 (guix build utils))
3054 #:phases
3055 #~(modify-phases %standard-phases
3056 (replace 'check (assoc-ref gnu:%standard-phases 'check)))))
3057 (native-inputs (list boost catch2-2))
3058 (home-page "https://sinusoid.es/zug")
3059 (synopsis "Higher-order sequence transformers")
3060 (description "Zug is a C++ library providing transducers, that is,
3061composable sequential transformations.")
3062 (license license:boost1.0)))
3063
3064(define-public lager
3065 (package
3066 (name "lager")
3067 (version "0.1.3")
3068 (source (origin
3069 (method git-fetch)
3070 (uri (git-reference
3071 (url "https://github.com/arximboldi/lager")
3072 (commit (string-append "v" version))))
3073 (file-name (git-file-name name version))
3074 (sha256
3075 (base32 "123a75qklhiyic3yaj74h4p8jav2m92x9ssjnfsdiilhycp4p764"))))
3076 (build-system cmake-build-system)
3077 (arguments (list #:configure-flags #~(list "-Dlager_BUILD_EXAMPLES=no")
3078 #:modules `((guix build cmake-build-system)
3079 ((guix build gnu-build-system) #:prefix gnu:)
3080 (guix build utils))
3081 #:phases
3082 #~(modify-phases %standard-phases
3083 (add-after 'unpack 'delete-failing-tests
3084 (lambda _
3085 (delete-file-recursively "test/event_loop")))
3086 (replace 'check (assoc-ref gnu:%standard-phases 'check)))))
3087 (inputs (list boost-1.83 immer zug))
3088 (native-inputs (list catch2-2 cereal))
3089 (home-page "https://sinusoid.es/lager")
3090 (synopsis "Library for value-oriented design")
3091 (description "Lager is a library for value-oriented design implementing
3092the unidirectional data-flow architecture. Apart from a store and various
3093event loops it also provides lenses and cursors.")
3094 (license license:expat)))
3095
3096(define-public atomic-queue
3097 (package
3098 (name "atomic-queue")
3099 (version "1.6.5")
3100 (source (origin
3101 (method git-fetch)
3102 (uri (git-reference
3103 (url "https://github.com/max0x7ba/atomic_queue")
3104 (commit (string-append "v" version))))
3105 (file-name (git-file-name name version))
3106 (sha256
3107 (base32
3108 "1qr9wi017pb62cfga91prxgqjsz4y2jr8fyp4dvfccwr2pynwrnh"))))
3109 (build-system meson-build-system)
3110 (arguments
3111 `(#:configure-flags '("-Dbenchmarks=false")
3112 #:phases
3113 (modify-phases %standard-phases
3114 ,@(if (%current-target-system)
3115 `(;; boost is a test dependency. We don't run tests when
3116 ;; cross-compiling. Disable all targets that depend on it.
3117 (add-after 'unpack 'do-not-check-for-boost
3118 (lambda _
3119 (substitute* "meson.build"
3120 (("unit_test_framework = [^\n]*" all)
3121 "unit_test_framework = disabler()")))))
3122 '())
3123 (replace 'check
3124 (lambda* (#:key tests? #:allow-other-keys)
3125 (when tests?
3126 (invoke "./tests"))))
3127 (replace 'install
3128 (lambda* (#:key outputs #:allow-other-keys)
3129 (copy-recursively "../source/include/atomic_queue"
3130 (string-append (assoc-ref outputs "out")
3131 "/include/atomic_queue")))))))
3132 (native-inputs
3133 (list boost
3134 pkg-config))
3135 (home-page "https://github.com/max0x7ba/atomic_queue")
3136 (synopsis "C++ lockless queue")
3137 (description
3138 "This package contains a C++11 multiple-producer-multiple-consumer lockless
3139queues header library based on circular buffer with @code{std::atomic}.")
3140 (license license:expat)))
3141
3142(define-public magic-enum
3143 (package
3144 (name "magic-enum")
3145 (version "0.9.6")
3146 (home-page "https://github.com/Neargye/magic_enum")
3147 (source (origin
3148 (method git-fetch)
3149 (uri (git-reference
3150 (url home-page)
3151 (commit (string-append "v" version))))
3152 (file-name (git-file-name name version))
3153 (sha256
3154 (base32
3155 "15lxn4sjwygxyq4am3jbwl0m7lb0fw8w39fghgm7a8klcwavv4yn"))))
3156 (build-system cmake-build-system)
3157 (synopsis "C++17 header only library for compile time reflection of enums")
3158 (description "Magic Enum offers static reflection of enums, with
3159conversions to and from strings, iteration and related functionality.")
3160 (license license:expat)))
3161
3162(define-public mcpp
3163 (package
3164 (name "mcpp")
3165 (version "2.7.2")
3166 (source (origin
3167 (method url-fetch)
3168 (uri (string-append "mirror://sourceforge/mcpp/mcpp/"
3169 "V." version "/mcpp-" version ".tar.gz"))
3170 (sha256
3171 (base32
3172 "0r48rfghjm90pkdyr4khxg783g9v98rdx2n69xn8f6c5i0hl96rv"))))
3173 (build-system gnu-build-system)
3174 (arguments
3175 (list #:configure-flags
3176 #~(list "--enable-mcpplib"
3177 "--disable-static"
3178 (string-append "CFLAGS=-g -O2"
3179 " -Wno-error=incompatible-pointer-types"
3180 " -Wno-error=implicit-function-declaration"))))
3181 (home-page "https://mcpp.sourceforge.net/")
3182 (synopsis "C/C++ preprocessor")
3183 (description
3184 "@code{mcpp} is Matsui's CPP implementation precisely conformed to
3185standards.")
3186 (license license:bsd-2)))
3187
3188(define-public merve
3189 (package
3190 (name "merve")
3191 (version "1.2.2")
3192 (source (origin
3193 (method git-fetch)
3194 (uri (git-reference
3195 (url "https://github.com/nodejs/merve")
3196 (commit (string-append "v" version))))
3197 (file-name (git-file-name name version))
3198 (sha256
3199 (base32
3200 "13ck2dd1wykkiskbh4z27mp71jl8v04121cjsxj5yv8l00s51dqa"))))
3201 (build-system cmake-build-system)
3202 (arguments
3203 (list
3204 #:imported-modules (append %cmake-build-system-modules
3205 %pyproject-build-system-modules)
3206 #:modules '((guix build cmake-build-system)
3207 ((guix build pyproject-build-system) #:prefix py:)
3208 (guix build utils))
3209 #:configure-flags
3210 #~(list "-DBUILD_SHARED_LIBS=ON"
3211 "-DGit_FOUND=TRUE" ;<https://github.com/nodejs/merve/issues/58>
3212 "-DMERVE_USE_SIMDUTF=ON")
3213 #:phases
3214 #~(modify-phases %standard-phases
3215 ;; The Zip format does not support timestamps before 1980.
3216 (add-after 'unpack 'ensure-no-mtimes-pre-1980
3217 (assoc-ref py:%standard-phases 'ensure-no-mtimes-pre-1980)))))
3218 (native-inputs (list googletest pkg-config python))
3219 (inputs (list simdutf))
3220 (home-page "https://github.com/nodejs/merve")
3221 (synopsis "Lexer for extracting named exports from CommonJS modules")
3222 (description "Merve is a fast C++ lexer for extracting named exports from
3223CommonJS modules. This library performs static analysis to detect CommonJS
3224export patterns without executing the code.")
3225 (license (list license:asl2.0 license:expat)))) ;dual-licensed
3226
3227(define-public nbytes
3228 (package
3229 (name "nbytes")
3230 (version "0.1.4")
3231 (source (origin
3232 (method git-fetch)
3233 (uri (git-reference
3234 (url "https://github.com/nodejs/nbytes")
3235 (commit (string-append "v" version))))
3236 (file-name (git-file-name name version))
3237 (sha256
3238 (base32
3239 "0022x040hzl98wkwizx7z73xg88gs8g439fjx65x5vm46rd93l3s"))))
3240 (build-system cmake-build-system)
3241 (arguments (list #:configure-flags #~(list "-DBUILD_SHARED_LIBS=ON")))
3242 (native-inputs (list googletest))
3243 (home-page "https://github.com/nodejs/nbytes")
3244 (synopsis "C++ library for manipulating bytes")
3245 (description "The @code{nbytes} library contains various functions for
3246manipulating bytes. It is extracted from the Node.js core.")
3247 (license license:expat)))
3248
3249(define-public cli11
3250 (package
3251 (name "cli11")
3252 (version "2.4.2")
3253 (source
3254 (origin
3255 (method git-fetch)
3256 (uri (git-reference
3257 (url "https://github.com/CLIUtils/CLI11")
3258 (commit (string-append "v" version))))
3259 (file-name (git-file-name name version))
3260 (sha256
3261 (base32 "1kxggvgbdjx73rx9d91dm9imzcacf5jjfnjn2vaq6h6lvwlcdf04"))))
3262 (build-system cmake-build-system)
3263 (arguments
3264 (list #:configure-flags
3265 #~(list "-DCLI11_SINGLE_FILE=OFF"
3266 "-DCLI11_BUILD_EXAMPLES=OFF")))
3267 (native-inputs
3268 (list catch2-2 doxygen googletest))
3269 (synopsis "Command line parser for C++11")
3270 (description
3271 "CLI11 is a command line parser for C++11 and beyond that provides a rich
3272feature set with a simple and intuitive interface.")
3273 (home-page "https://cliutils.github.io/CLI11/book/")
3274 (license license:bsd-3)))
3275
3276(define-public caf
3277 (package
3278 (name "caf")
3279 (version "1.0.2")
3280 (source (origin
3281 (method git-fetch)
3282 (uri (git-reference
3283 (url "https://github.com/actor-framework/actor-framework")
3284 (commit version)))
3285 (file-name (git-file-name name version))
3286 (sha256
3287 (base32
3288 "1za7yja76csa0jnvkyavg2hc5zcc00za46c4x2fq42skh1apqcnl"))))
3289 (build-system cmake-build-system)
3290 (arguments
3291 (list #:configure-flags
3292 #~(list "-DCAF_ENABLE_EXAMPLES=OFF")))
3293 (inputs
3294 (list openssl))
3295 (synopsis "C++ implementation of the actor model")
3296 (description "The C++ Actor Framework (CAF) offers a high-level C++17
3297programming environment using the actor model for concurrent, distributed
3298computation.")
3299 (home-page "https://www.actor-framework.org/")
3300 (license license:bsd-3)))
3301
3302(define-public clipper
3303 (package
3304 (name "clipper")
3305 (version "6.4.2")
3306 (source
3307 (origin
3308 (method url-fetch)
3309 (uri (string-append "mirror://sourceforge/polyclipping"
3310 "/clipper_ver" version ".zip"))
3311 (sha256
3312 (base32 "09q6jc5k7p9y5d75qr2na5d1gm0wly5cjnffh127r04l47c20hx1"))))
3313 (build-system cmake-build-system)
3314 (arguments
3315 `(#:tests? #f ;no check target
3316 #:phases (modify-phases %standard-phases
3317 (replace 'unpack
3318 (lambda* (#:key source #:allow-other-keys)
3319 (and (invoke "unzip" source)
3320 (chdir "cpp")))))))
3321 (native-inputs
3322 `(("unzip" ,unzip)))
3323 (home-page "https://sourceforge.net/projects/polyclipping")
3324 (synopsis "Polygon and line clipping and offsetting library")
3325 (description
3326 "The Clipper library performs line & polygon clipping - intersection,
3327union, difference & exclusive-or, and line & polygon offsetting.
3328The library is based on Vatti's clipping algorithm.")
3329 (license license:boost1.0)))
3330
3331(define-public clipper2
3332 (package
3333 (inherit clipper)
3334 (name "clipper2")
3335 (version "1.5.2")
3336 (source
3337 (origin
3338 (method git-fetch)
3339 (uri (git-reference
3340 (url "https://github.com/AngusJohnson/Clipper2")
3341 (commit (string-append "Clipper2_" version))))
3342 (file-name (git-file-name name version))
3343 (sha256
3344 (base32 "1w8cmx712k45cb8gh9dakmbmybiwdx8c0b45mwpcldywx2lwxi2j"))
3345 (modules '((guix build utils)))
3346 (snippet #~(for-each
3347 delete-file-recursively
3348 '("CSharp" "DLL" "Delphi")))))
3349 (build-system cmake-build-system)
3350 (arguments
3351 (list
3352 #:configure-flags
3353 #~(list "-DUSE_EXTERNAL_GTEST=ON"
3354 "-DCLIPPER2_EXAMPLES=OFF")
3355 #:phases #~(modify-phases %standard-phases
3356 (add-after 'unpack 'chdir
3357 (lambda _
3358 (chdir "CPP"))))))
3359 (native-inputs (list googletest))
3360 (home-page "https://github.com/AngusJohnson/Clipper2")
3361 (description
3362 (string-append (package-description clipper) "\
3363Note: This package is a major update of the original clipper library."))))
3364
3365(define-public pcg-cpp
3366 (let ((commit "428802d1a5634f96bcd0705fab379ff0113bcf13")
3367 (revision "3"))
3368 (package
3369 (name "pcg-cpp")
3370 (version (git-version "0.98.1" revision commit))
3371 (source (origin
3372 (method git-fetch)
3373 (uri (git-reference
3374 (url "https://github.com/imneme/pcg-cpp")
3375 (commit commit)))
3376 (file-name (git-file-name name version))
3377 (sha256
3378 (base32
3379 "0w4xb52b6glldkz1wnjc4r4m750m59yxp8jky71j3l4pvfbbj2m5"))))
3380 (build-system gnu-build-system)
3381 (arguments
3382 `(#:test-target "test"
3383 #:phases
3384 (modify-phases %standard-phases
3385 (delete 'configure))
3386 #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))))
3387 (synopsis "C++11 header only library for random number generation")
3388 (description "The Permuted Congruential Generator (PCG) extends the
3389Linear Congruential Generator (LCG) with a permutation function to increase
3390output randomness while retaining speed, simplicity, and conciseness.")
3391 (home-page "https://www.pcg-random.org")
3392 (license (list license:expat license:asl2.0))))) ; dual licensed
3393
3394(define-public libconfini
3395 (package
3396 (name "libconfini")
3397 (version "1.16.4")
3398 (source (origin
3399 (method git-fetch)
3400 (uri (git-reference
3401 (url "https://github.com/madmurphy/libconfini")
3402 (commit version)))
3403 (file-name (git-file-name name version))
3404 (sha256
3405 (base32
3406 "002lmf1b2phmc6s348k00yx5shrcc7psn3pgqvraxvr6n8g747jx"))))
3407 (build-system gnu-build-system)
3408 (arguments
3409 `(#:configure-flags
3410 (list "--disable-static")
3411 #:phases
3412 (modify-phases %standard-phases
3413 (replace 'bootstrap
3414 (lambda _ (invoke "sh" "bootstrap" "--noconfigure"))))))
3415 (native-inputs
3416 (list autoconf automake libtool))
3417 (home-page "https://madmurphy.github.io/libconfini/html/index.html")
3418 (synopsis "INI file parser")
3419 (description "@code{libconfini} is an INI file parser library written in
3420C. It focuses on standardization and parsing exactness and is at ease with
3421almost every type of file containing key/value pairs.")
3422 (license license:gpl3+)))
3423
3424(define-public libcppgenerate
3425 ;; dbus-cxx requires an unreleased fix.
3426 (let ((commit "930c5503f76c877b72b9ff8546353d6f422bd010")
3427 (revision "0"))
3428 (package
3429 (name "libcppgenerate")
3430 (version (git-version "0.2" revision commit))
3431 (source (origin
3432 (method git-fetch)
3433 (uri (git-reference
3434 (url "https://github.com/rm5248/libcppgenerate")
3435 (commit commit)))
3436 (file-name (git-file-name name version))
3437 (sha256
3438 (base32
3439 "0csdg9b406i85aqgivjmvqjdnqbyiyjh3s0xsfsxppv7wlh7j85r"))))
3440 (build-system cmake-build-system)
3441 (arguments (list #:configure-flags #~'("-DENABLE_TESTS=ON")))
3442 (home-page "https://github.com/rm5248/libcppgenerate")
3443 (synopsis "C++ code generator library for C++")
3444 (description "@code{libcppgenerate} is a library for generating C++ code
3445from C++.")
3446 (license license:asl2.0))))
3447
3448(define-public libcutl
3449 (package
3450 (name "libcutl")
3451 (version "1.10.0")
3452 (source (origin
3453 (method url-fetch)
3454 (uri (string-append
3455 "https://www.codesynthesis.com/download/libcutl/"
3456 (version-major+minor version)
3457 "/libcutl-" version ".tar.bz2"))
3458 (sha256
3459 (base32
3460 "070j2x02m4gm1fn7gnymrkbdxflgzxwl7m96aryv8wp3f3366l8j"))
3461 (modules '((guix build utils)))
3462 (snippet
3463 '(begin
3464 ;; Remove bundled sources.
3465 (with-directory-excursion "cutl/details"
3466 (for-each delete-file-recursively
3467 ;; FIXME: Boost_RegEx isn't being detected.
3468 (list
3469 ;;"boost"
3470 "expat")))))))
3471 (build-system gnu-build-system)
3472 (arguments
3473 `(#:configure-flags (list "--disable-static"
3474 ;;"--with-external-boost"
3475 "--with-external-expat")
3476 #:make-flags (list "CXXFLAGS=-std=c++11 -O2 -g")))
3477 (inputs
3478 (list ;;("boost ,boost)
3479 expat))
3480 (home-page "https://www.codesynthesis.com/projects/libcutl/")
3481 (synopsis "C++ utility library with generic and independent components")
3482 (description "libcutl is a C++ utility library. It contains a collection
3483of generic and independent components such as meta-programming tests, smart
3484pointers, containers, compiler building blocks, etc.")
3485 (license (list license:expat ;everything except...
3486 license:boost1.0)))) ;...the files under cutl/details/boost
3487
3488(define-public libxsd-frontend
3489 (package
3490 (name "libxsd-frontend")
3491 (version "2.0.0")
3492 (source
3493 (origin
3494 (method url-fetch)
3495 (uri (string-append "https://www.codesynthesis.com/download/"
3496 "libxsd-frontend/" (version-major+minor version)
3497 "/libxsd-frontend-" version ".tar.bz2"))
3498 (sha256
3499 (base32 "1nmzchsvwvn66jpmcx18anzyl1a3l309x1ld4zllrg37ijc31fim"))))
3500 (build-system gnu-build-system)
3501 (arguments
3502 `(#:test-target "test"
3503 #:imported-modules ((guix build copy-build-system)
3504 ,@%default-gnu-imported-modules)
3505 #:modules (((guix build copy-build-system) #:prefix copy:)
3506 (guix build gnu-build-system)
3507 (guix build utils))
3508 #:make-flags (list (string-append "--include-dir="
3509 (assoc-ref %build-inputs "build")
3510 "/include/")
3511 "cxx_options=-std=c++11 -O2 -g")
3512 #:phases
3513 (modify-phases %standard-phases
3514 (delete 'configure)
3515 (replace 'install
3516 (lambda args
3517 (apply (assoc-ref copy:%standard-phases 'install)
3518 #:install-plan
3519 '(("xsd-frontend" "include/xsd-frontend"
3520 #:include-regexp ("\\.?xx$"))
3521 ("xsd-frontend" "lib"
3522 #:include-regexp ("\\.so$")))
3523 args))))))
3524 (native-inputs
3525 (list build))
3526 (inputs
3527 (list libcutl xerces-c))
3528 (synopsis "XSD Front-end")
3529 (description "@code{libxsd-frontend} is a compiler frontend for the W3C
3530XML Schema definition language. It includes a parser, semantic graph types
3531and a traversal mechanism.")
3532 (home-page "https://www.codesynthesis.com/projects/libxsd-frontend/")
3533 (license license:gpl2+)))
3534
3535(define-public cli
3536 (package
3537 (name "cli")
3538 (version "1.1.0")
3539 (source
3540 (origin
3541 (method url-fetch)
3542 (uri (string-append "https://www.codesynthesis.com/download/"
3543 "cli/" (version-major+minor version)
3544 "/cli-" version ".tar.bz2"))
3545 (sha256
3546 (base32 "0bg0nsai2q4h3mldpnj0jz4iy4svs0bcfvmq0v0c9cdyknny606g"))))
3547 (build-system gnu-build-system)
3548 (arguments
3549 `(#:test-target "test"
3550 #:make-flags (list (string-append "--include-dir="
3551 (assoc-ref %build-inputs "build")
3552 "/include")
3553 (string-append "install_prefix="
3554 (assoc-ref %outputs "out"))
3555 "cxx_options=-std=c++11 -O2 -g")
3556 #:phases
3557 (modify-phases %standard-phases
3558 (add-after 'unpack 'patch
3559 (lambda _
3560 (substitute* (find-files "." "\\.make$")
3561 (("build-0\\.3")
3562 (string-append (assoc-ref %build-inputs "build")
3563 "/include/build-0.3")))
3564 ;; Add the namespace prefix, to avoid errors such as "error:
3565 ;; ‘iterate_and_dispatch’ was not declared in this scope".
3566 (substitute* (find-files "." "\\.?xx$")
3567 (("add \\(typeid \\(type\\), \\*this\\);" all)
3568 (string-append "traverser_map<B>::" all))
3569 (("iterate_and_dispatch \\(s\\.names_begin.*;" all)
3570 (string-append "edge_dispatcher::" all)))))
3571 (delete 'configure))))
3572 (native-inputs
3573 (list build))
3574 (inputs
3575 (list libcutl))
3576 (synopsis "C++ Command Line Interface (CLI) definition language")
3577 (description "@code{cli} is a domain-specific language (DSL) for defining
3578command line interfaces of C++ programs. It allows you to describe the
3579options that your program supports, their types, default values, and
3580documentation.")
3581 (home-page "https://codesynthesis.com/projects/cli/")
3582 (properties `((lint-hidden-cpe-vendors . ("github" "snyk"))))
3583 (license license:expat)))
3584
3585(define-public xsd
3586 (package
3587 (name "xsd")
3588 (version "4.0.0")
3589 (source
3590 (origin
3591 (method url-fetch)
3592 (uri (string-append "https://www.codesynthesis.com/download/"
3593 "xsd/" (version-major+minor version)
3594 "/xsd-" version ".tar.bz2"))
3595 (sha256
3596 (base32 "1hi9ppxd34np8ydv1h0vgc2qpdmgcd1cdzgk30aidv670xjg91fx"))))
3597 (build-system gnu-build-system)
3598 (outputs '("out" "doc")) ;3.8 MiB of doc and examples
3599 (arguments
3600 `(#:test-target "test"
3601 #:make-flags (list (string-append "--include-dir="
3602 (assoc-ref %build-inputs "build")
3603 "/include/")
3604 (string-append "install_prefix="
3605 (assoc-ref %outputs "out"))
3606 "cxx_options=-std=c++11 -O2 -g")
3607 #:phases (modify-phases %standard-phases
3608 (add-after 'install 'move-doc
3609 (lambda* (#:key outputs #:allow-other-keys)
3610 (let ((out (assoc-ref outputs "out"))
3611 (doc (assoc-ref outputs "doc")))
3612 (mkdir-p (string-append doc "/share/doc"))
3613 (rename-file (string-append out "/share/doc/xsd")
3614 (string-append doc "/share/doc/xsd-"
3615 ,version)))))
3616 (delete 'configure))))
3617 (native-inputs
3618 (list build cli))
3619 (inputs
3620 (list libcutl libnsl libxsd-frontend))
3621 (propagated-inputs
3622 ;; The code XSD generates requires the following library at run time;
3623 ;; propagate it for convenience.
3624 (list xerces-c))
3625 (synopsis "XML Data Binding for C++")
3626 (description "CodeSynthesis XSD (also known as libxsd or xsdcxx) is an XML
3627Schema to C++ data binding compiler. Provided with an XML instance
3628specification (XML Schema), it generates C++ classes that represent the given
3629vocabulary as well as XML parsing and serialization code. The data stored in
3630XML can then be accessed using types and functions that semantically
3631correspond to an application domain rather than dealing with the intricacies
3632of reading and writing XML.")
3633 (home-page "https://codesynthesis.com/projects/xsd/")
3634 ;; Exceptions are made to allow using the generated source files as well
3635 ;; as the libxsd library in free software projects whose license is
3636 ;; incompatible with the GPL v2. Refer to the file named FLOSSE for the
3637 ;; details.
3638 (license license:gpl2+)))
3639
3640(define-public jsonnet
3641 (package
3642 (name "jsonnet")
3643 (version "0.17.0")
3644 (source
3645 (origin
3646 (method git-fetch)
3647 (uri (git-reference
3648 (url "https://github.com/google/jsonnet")
3649 (commit (string-append "v" version))))
3650 (file-name (git-file-name name version))
3651 (sha256
3652 (base32 "1ddz14699v5lqx3dh0mb7hfffr6fk5zhmzn3z8yxkqqvriqnciim"))
3653 (modules '((guix build utils)))
3654 (patches (search-patches "jsonnet-include-cstdint-for-gcc-13-builds.patch"))
3655 (snippet
3656 #~(begin
3657 (rename-file "third_party/md5" ".md5")
3658 (delete-file-recursively "third_party")
3659 (delete-file-recursively "doc/third_party")
3660 (substitute* '("core/vm.cpp")
3661 (("#include \"json.hpp\"") "#include <nlohmann/json.hpp>"))
3662 (mkdir "third_party")
3663 (rename-file ".md5" "third_party/md5")))))
3664 (build-system cmake-build-system)
3665 (arguments
3666 `(#:configure-flags '("-DUSE_SYSTEM_GTEST=ON" "-DUSE_SYSTEM_JSON=ON"
3667 "-DBUILD_STATIC_LIBS=OFF")))
3668 (native-inputs
3669 (list googletest pkg-config))
3670 (inputs
3671 (list nlohmann-json))
3672 (home-page "https://jsonnet.org/")
3673 (synopsis "Data templating language")
3674 (description "Jsonnet is a templating language extending JSON
3675syntax with variables, conditions, functions and more.")
3676 (license license:asl2.0)))
3677
3678(define-public python-jsonnet
3679 (package
3680 (inherit jsonnet)
3681 (name "python-jsonnet")
3682 (build-system pyproject-build-system)
3683 (arguments
3684 (list #:test-flags #~(list "--ignore=case_studies/")))
3685 (native-inputs (modify-inputs native-inputs
3686 (append python-pyyaml python-pytest python-setuptools)))
3687 (synopsis "Python bindings for Jsonnet, the data templating language")
3688 (description "This package provides a Python library named @code{_jsonnet}
3689which can evaluate Jsonnet files and expressions.")))
3690
3691(define-public simdjson
3692 (package
3693 (name "simdjson")
3694 (version "4.6.3")
3695 (source (origin
3696 (method git-fetch)
3697 (uri (git-reference
3698 (url "https://github.com/simdjson/simdjson")
3699 (commit (string-append "v" version))))
3700 (file-name (git-file-name name version))
3701 (sha256
3702 (base32
3703 "0729mxnc2wjb94gr4znwlzfmgw5w2v9kd8glvn3vnjhkdnd87zry"))))
3704 (build-system cmake-build-system)
3705 (arguments
3706 '(#:tests? #f ; tests require downloading dependencies
3707 #:configure-flags
3708 '("-DBUILD_SHARED_LIBS=ON")))
3709 (synopsis "JSON parser for C++ using SIMD instructions")
3710 (description
3711 "The simdjson library uses commonly available SIMD instructions and
3712microparallel algorithms to implement a strict JSON parser with UTF-8
3713validation.")
3714 (home-page "https://github.com/simdjson/simdjson")
3715 (license license:asl2.0)))
3716
3717(define-public simplelogger
3718 (package
3719 (name "simplelogger")
3720 (version "2.1.0")
3721 (source
3722 (origin
3723 (method git-fetch)
3724 (uri (git-reference
3725 (url "https://github.com/juzzlin/SimpleLogger")
3726 (commit version)))
3727 (file-name (git-file-name name version))
3728 (sha256
3729 (base32 "1lw2lci1gwxi1v56zpr4b30lsgi0kw5njm8j3k4bvdciphs5wdd8"))))
3730 (build-system cmake-build-system)
3731 (arguments
3732 (list
3733 #:phases
3734 #~(modify-phases %standard-phases
3735 (add-after 'install 'delete-static-archive
3736 (lambda _
3737 (delete-file
3738 (in-vicinity #$output "lib/libSimpleLogger_static.a")))))))
3739 (home-page "https://github.com/juzzlin/SimpleLogger")
3740 (synopsis "Simple logging library")
3741 (description "SimpleLogger is a thread-safe C++ logging library with
3742configurable log-levels and support for various timestamp formats. It can
3743batch and cache log messages as well as collapse repeated messages.")
3744 (license license:expat)))
3745
3746(define-public bloomberg-bde-tools
3747 (package
3748 (name "bloomberg-bde-tools")
3749 (version "4.27.0.0")
3750 (source (origin
3751 (method git-fetch)
3752 (uri (git-reference
3753 (url "https://github.com/bloomberg/bde-tools")
3754 (commit version)))
3755 (file-name (git-file-name name version))
3756 (sha256
3757 (base32
3758 "0zkf6vdvzp73h6bai6kmd062k0wyqwrrdv2z9m416kgxr6qickl2"))
3759 (patches
3760 (search-patches
3761 "bloomberg-bde-tools-fix-install-path.patch"))))
3762 (build-system copy-build-system)
3763 ;; Unable to be an inline dependency of bloomberg-bde due to patch.
3764 (properties '((hidden? . #t)))
3765 (synopsis "Tools for developing and building libraries modeled on BDE")
3766 (description
3767 "This package provides the cmake imports needed to build bloomberg-bde.")
3768 (home-page "https://github.com/bloomberg/bde-tools")
3769 (license license:asl2.0)))
3770
3771(define-public bloomberg-bde
3772 (package
3773 (name "bloomberg-bde")
3774 (version "4.27.0.0")
3775 (source (origin
3776 (method git-fetch)
3777 (uri (git-reference
3778 (url "https://github.com/bloomberg/bde")
3779 (commit version)))
3780 (file-name (git-file-name name version))
3781 (sha256
3782 (base32
3783 "17315r9j20pvv4ccnd59m85miq96hp07pysfr64glb7r4f4zjkfs"))
3784 ;;(modules '((guix build utils)))
3785 (snippet
3786 `(begin
3787 ;; FIXME: Delete bundled software. The third-party packages
3788 ;; may be patched or modified from upstream sources.
3789 ;;(for-each delete-file-recursively
3790 ;; (list "thirdparty"))
3791 ))))
3792 (build-system cmake-build-system)
3793 (arguments
3794 (list
3795 ;; Set UFID to build shared libraries. Flag descriptions can be found at
3796 ;; https://bloomberg.github.io/bde-tools/bbs/reference/bbs_build_configuration.html#ufid
3797 #:configure-flags #~(list "-DUFID=opt_dbg_exc_mt_64_shr_cpp20")
3798 #:test-exclude (string-join (list "balcl_commandline.t"
3799 "balst_stacktraceprintutil.t"
3800 "bslalg_numericformatterutil.t"
3801 "bslh_hash.t"
3802 "bslstl_deque.0[1345].t"
3803 "bslstl_queue.t"
3804 "bslstl_stack.t"
3805 "bslstl_string_test.t")
3806 "|")
3807 #:modules '((guix build cmake-build-system)
3808 ((guix build gnu-build-system) #:prefix gnu:)
3809 (guix build utils))
3810 #:phases
3811 #~(modify-phases %standard-phases
3812 ;; Explicitly build tests after the main build.
3813 (add-after 'build 'build-tests
3814 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
3815 (apply (assoc-ref gnu:%standard-phases 'build)
3816 (list #:make-flags (list "all.t"))))))))
3817 (native-inputs
3818 (list bloomberg-bde-tools pkg-config python))
3819 (synopsis "Foundational C++ libraries used at Bloomberg")
3820 (description
3821 "The BDE Development Environment libraries provide an enhanced
3822implementation of STL containers, vocabulary types for representing common
3823concepts (like dates and times), and building blocks for developing
3824multi-threaded applications and network applications.")
3825 (home-page "https://github.com/bloomberg/bde")
3826 ;; Out-of-memory on i686-linux, compile errors with non-x86.
3827 (supported-systems '("x86_64-linux"))
3828 (license license:asl2.0)))
3829
3830(define-public gulrak-filesystem
3831 (package
3832 (name "gulrak-filesystem")
3833 (version "1.5.12")
3834 (source (origin
3835 (method git-fetch)
3836 (uri (git-reference
3837 (url "https://github.com/gulrak/filesystem")
3838 (commit (string-append "v" version))))
3839 (file-name (git-file-name name version))
3840 (sha256
3841 (base32
3842 "1qg10akvhp801xirkj4mqcpvcxj90z81ygpyg752xv110zj4914g"))))
3843 (build-system cmake-build-system)
3844 (synopsis "Header only C++ std::filesystem compatible library")
3845 (description "This package provides a header-only single-file
3846std::filesystem compatible helper library, based on the C++17 and C++20 specs,
3847but implemented for C++11, C++14, C++17 or C++20.")
3848 (home-page "https://github.com/gulrak/filesystem")
3849 (license license:expat)))
3850
3851(define-public bitsery
3852 (package
3853 (name "bitsery")
3854 (version "5.2.4")
3855 (source (origin
3856 (method git-fetch)
3857 (uri (git-reference
3858 (url "https://github.com/fraillt/bitsery")
3859 (commit (string-append "v" version))))
3860 (file-name (git-file-name name version))
3861 (sha256
3862 (base32
3863 "0s628p6qayajan4v8arsmbvzsml8zhc56k01zhmnlakbl7v0vwip"))))
3864 (build-system cmake-build-system)
3865 (arguments
3866 (list #:configure-flags
3867 #~(list "-DBITSERY_BUILD_TESTS=ON"
3868 "-DCMAKE_CXX_FLAGS=-Wno-error=maybe-uninitialized")))
3869 (native-inputs (list googletest))
3870 (synopsis "Header only C++ binary serialization library")
3871 (description "This package provides header only C++ binary serialization
3872library. It is designed around the networking requirements for real-time data
3873delivery, especially for games.")
3874 (home-page "https://github.com/fraillt/bitsery")
3875 (license license:expat)))
3876
3877(define-public function2
3878 (package
3879 (name "function2")
3880 (version "4.2.5")
3881 (source (origin
3882 (method git-fetch)
3883 (uri (git-reference
3884 (url "https://github.com/Naios/function2")
3885 (commit version)))
3886 (file-name (git-file-name name version))
3887 (sha256
3888 (base32
3889 "0sn760zk79hfbf21v9qvf67mrrlnmw6a2rhrp5l440b6f4f3xbzr"))
3890 (modules '((guix build utils)))
3891 (snippet
3892 ;; Unbundle googletest.
3893 '(begin
3894 (delete-file-recursively "test")
3895 (substitute* "CMakeLists.txt"
3896 (("add_subdirectory\\(test\\)") ""))))))
3897 (build-system cmake-build-system)
3898 ;; The test size_match_layout fails on i586/i686. For more info:
3899 ;; https://github.com/Naios/function2/issues/57
3900 (arguments
3901 (list #:tests? #f))
3902 (synopsis "Improved implementations of std::function")
3903 (description "This package provides the following implementations of
3904std::function:
3905@itemize
3906@item copyable @code{fu2::function}
3907@item move-only @code{fu2::unique_function} (capable of holding move only
3908 types)
3909@item non-owning @code{fu2::function_view} (capable of referencing callables in
3910 a non owning way)
3911@end itemize")
3912 (home-page "https://naios.github.io/function2/")
3913 (license license:boost1.0)))
3914
3915(define-public cpp-mustache
3916 (package
3917 (name "cpp-mustache")
3918 (version "5.0")
3919 (source (origin
3920 (method git-fetch)
3921 (uri (git-reference
3922 (url "https://github.com/kainjow/Mustache")
3923 (commit "4ed8c0b5a2a43d59394bd6900dc04e738dbf8c02")))
3924 (file-name (git-file-name name version))
3925 (sha256
3926 (base32
3927 "0qwrg35gby851viwd6dgrc346712701a0gll8a0m4xs8invxavrh"))))
3928 (build-system cmake-build-system)
3929 (arguments
3930 (list #:configure-flags
3931 #~(list
3932 (string-append "-DCMAKE_CXX_FLAGS=-I"
3933 #$(this-package-native-input "catch2")
3934 "/include/catch2/"))
3935 #:phases
3936 #~(modify-phases %standard-phases
3937 (replace 'check
3938 (lambda* (#:key tests? #:allow-other-keys)
3939 (when tests?
3940 (invoke "./tests/mustache-unit-tests"))))
3941 (replace 'install
3942 (lambda* (#:key outputs #:allow-other-keys)
3943 (install-file "../source/mustache.hpp"
3944 (string-append (assoc-ref outputs "out")
3945 "/include")))))))
3946 (native-inputs (list catch2-2))
3947 (home-page "https://github.com/kainjow/Mustache")
3948 (synopsis "Mustache text templates for modern C++")
3949 (description "@code{cpp-mustache} is a Mustache implementation for C++ 11
3950and above. It is header only and has zero dependencies. It provides a
3951templated string type for compatibility with any STL-like string (std::string,
3952std::wstring, etc).")
3953 (license license:boost1.0)))
3954
3955(define fast-float-test-files
3956 (let ((name "fast-float-test-files")
3957 (version "1.0.0"))
3958 (origin
3959 (method git-fetch)
3960 (uri (git-reference
3961 (url "https://github.com/fastfloat/supplemental_test_files")
3962 (commit version)))
3963 (file-name (git-file-name name version))
3964 (sha256
3965 (base32
3966 "0z0z7qy3pxv6bhg2apvs8gp3mnixbxk92a9f7vby01p26zq1lnwl")))))
3967
3968(define-public fast-float
3969 (package
3970 (name "fast-float")
3971 (version "8.2.5")
3972 (source (origin
3973 (method git-fetch)
3974 (uri (git-reference
3975 (url "https://github.com/fastfloat/fast_float")
3976 (commit (string-append "v" version))))
3977 (file-name (git-file-name name version))
3978 (sha256
3979 (base32
3980 "1l13nsl4sgq71m7aifrmmmfyl14vp48vqdh7pb50hxqq6f8bq2b5"))))
3981 (build-system cmake-build-system)
3982 (arguments
3983 (list
3984 #:configure-flags #~(list "-DFASTFLOAT_TEST=ON"
3985 "-DSYSTEM_DOCTEST=ON")
3986 #:phases
3987 #~(modify-phases %standard-phases
3988 (add-after 'unpack 'patch-cmake-tests
3989 (lambda* (#:key inputs native-inputs #:allow-other-keys)
3990 (substitute* "tests/CMakeLists.txt"
3991 (("FetchContent_MakeAvailable\\(supplemental_test_files.*")
3992 (string-append
3993 "set(supplemental_test_files_BINARY_DIR "
3994 #$fast-float-test-files ")\n"))))))))
3995 (native-inputs (list doctest fast-float-test-files))
3996 (home-page "https://github.com/fastfloat/fast_float")
3997 (synopsis "Floating point number parser for C++")
3998 (description "@code{fast_float} is a header-only C++ library for parsing
3999floating point numbers from strings. It implements the C++ from_chars
4000functions for the float and double types.")
4001 (license (list license:asl2.0 license:boost1.0 license:expat)))) ; triple licensed
4002
4003(define-public pocketfft-cpp
4004 (let ((commit "daa8bb18327bc5c7d22c69428c25cf5dc64167d3")
4005 (revision "0"))
4006 (package
4007 (name "pocketfft-cpp")
4008 (version (git-version "0" revision commit))
4009 (source (origin
4010 (method git-fetch)
4011 (uri (git-reference
4012 (url "https://github.com/mreineck/pocketfft")
4013 (commit commit)))
4014 (file-name (git-file-name name version))
4015 (sha256
4016 (base32
4017 "1dbkkqkmkxgmz1qjpsqzic5ig3qw1pqndbb3dvjc7xq5f2rdzyq1"))
4018 (patches (search-patches
4019 "pocketfft-cpp-prefer-preprocessor-if.patch"))))
4020 (build-system copy-build-system)
4021 (arguments
4022 (list
4023 #:install-plan #~'(("pocketfft_hdronly.h" "include/"))))
4024 (home-page "https://github.com/mreineck/pocketfft")
4025 (synopsis "C++11 header-only Fast Fourier Transform library")
4026 (description "This package provides a single-header C++11 library for
4027computing Fast Fourier transformations. It supports multidimensional arrays,
4028different floating point sizes and complex transformations.")
4029 (license license:bsd-3))))
4030
4031(define-public libbinio
4032 ;; The latest tagged version does not support CMake build. This commit has
4033 ;; builds with CMake and has updated CMake version support.
4034 (let ((commit "e88dad086265e179ab6aef7f479e19f3917c7a98")
4035 (revision "0"))
4036 (package
4037 (name "libbinio")
4038 (version (git-version "1.5" revision commit))
4039 (source (origin
4040 (method git-fetch)
4041 (uri (git-reference
4042 (url "https://github.com/adplug/libbinio")
4043 (commit commit)))
4044 (file-name (git-file-name name version))
4045 (sha256
4046 (base32
4047 "0rb33jl6gpxb88zymzl996m43b7r6wyw4lq0ib3626kna3baqnha"))))
4048 (native-inputs
4049 (list autoconf automake libtool texinfo))
4050 (build-system cmake-build-system)
4051 (arguments
4052 (list #:tests? #f ;no tests
4053 #:configure-flags
4054 #~(list "-DBUILD_SHARED_LIBS=ON")))
4055 (home-page "http://adplug.github.io/libbinio/")
4056 (synopsis "Binary I/O stream class library")
4057 (description
4058 "This binary I/O stream class library presents a platform-independent
4059way to access binary data streams in C++. The library is hardware independent
4060in the form that it transparently converts between the different forms of
4061machine-internal binary data representation.")
4062 (license license:lgpl2.1+))))
4063
4064(define-public priocpp
4065 ;; Latest release is from 2022-08-14.
4066 (let ((commit "ea15402adcd0d9191dc29ca6f7e4dd0bff67b9b5")
4067 (revision "1"))
4068 (package
4069 (name "priocpp")
4070 (version (git-version "0.0.0" revision commit))
4071 (source
4072 (origin
4073 (method git-fetch)
4074 (uri (git-reference
4075 (url "https://github.com/Grumbel/priocpp")
4076 (commit commit)))
4077 (file-name (git-file-name name version))
4078 (sha256
4079 (base32 "0x4cgivaprj5c74yyyzny5dsg288w9y8sf21h79sl9r303ins867"))))
4080 (build-system cmake-build-system)
4081 (arguments
4082 (list
4083 #:configure-flags
4084 #~(list "-DBUILD_TESTS=ON")))
4085 (inputs (list fmt-10 logmich))
4086 (native-inputs (list googletest pkg-config tinycmmc))
4087 ;; TODO: cmake-built dependents currently require propagation -- why?
4088 (propagated-inputs (list jsoncpp sexp-cpp))
4089 (home-page "https://github.com/Grumbel/priocpp")
4090 (synopsis "Property input/output for C++")
4091 (description
4092 "This package provides simple property input/output utilities for C++.")
4093 (license license:gpl3+))))
4094
4095(define-public sajson
4096 (let ((commit "ec644013e34f9984a3cc9ba568cab97a391db9cd")
4097 (revision "0"))
4098 (package
4099 (name "sajson")
4100 (version (git-version "1.0" revision commit))
4101 (source (origin
4102 (method git-fetch)
4103 (uri (git-reference
4104 (url "https://github.com/chadaustin/sajson")
4105 (commit commit)))
4106 (file-name (git-file-name name version))
4107 (patches
4108 (search-patches "sajson-build-with-gcc10.patch"))
4109 (sha256
4110 (base32
4111 "0fjag27w7gvkc5pdhq3ad7yc09rabpzahndw1sgsg04ipznidmmq"))
4112 (modules '((guix build utils)))
4113 (snippet '(delete-file-recursively "third-party"))))
4114 (build-system scons-build-system)
4115 (arguments
4116 (list
4117 #:phases
4118 #~(modify-phases %standard-phases
4119 (add-after 'unpack 'disable-other-builds
4120 (lambda _
4121 (substitute* "SConstruct"
4122 (("for name, tools in builds:")
4123 "for name, tools in [('opt', [gcc, opt])]:"))))
4124 (add-after 'unpack 'use-external-unittest-cpp
4125 (lambda _
4126 (substitute* "SConscript"
4127 (("unittestpp_env\\.Library") "_dummy = ")
4128 (("test_env = env.Clone\\(tools=\\[unittestpp, sajson\\]\\)")
4129 (string-append
4130 "test_env = env.Clone(tools=[sajson])\n"
4131 "test_env.Append(CPPPATH='"
4132 (search-input-directory %build-inputs "/include/UnitTest++")
4133 "', LIBPATH='"
4134 (string-append #$(this-package-native-input "unittest-cpp")
4135 "/lib")
4136 "', LIBS=['UnitTest++'])")))))
4137 (add-after 'unpack 'fix-example
4138 (lambda _
4139 (substitute* "example/main.cpp"
4140 (("fclose\\(file\\);")
4141 "if (file != nullptr) {fclose(file); file = nullptr;}"))))
4142 (replace 'build
4143 (lambda* (#:key tests? #:allow-other-keys #:rest args)
4144 (when tests?
4145 (apply (assoc-ref %standard-phases 'build)
4146 args))))
4147 (replace 'check
4148 (lambda* (#:key tests? #:allow-other-keys)
4149 (when tests?
4150 (invoke "build/opt/test")
4151 (invoke "build/opt/test_unsorted"))))
4152 (replace 'install
4153 (lambda _
4154 (let ((out (string-append #$output "/include")))
4155 (install-file "include/sajson.h" out)
4156 (install-file "include/sajson_ostream.h" out)))))))
4157 (native-inputs (list unittest-cpp))
4158 (home-page "https://github.com/chadaustin/sajson")
4159 (synopsis "C++11 header-only, in-place JSON parser")
4160 (description "@code{sajson} is an in-place JSON parser with support for
4161parsing with only a single memory allocation.")
4162 (license license:expat))))
4163
4164(define-public sajson-for-gemmi
4165 (package/inherit sajson
4166 (name "sajson-for-gemmi")
4167 (source (origin
4168 (inherit (package-source sajson))
4169 (patches (cons
4170 (search-patch
4171 "sajson-for-gemmi-numbers-as-strings.patch")
4172 (origin-patches (package-source sajson))))))
4173 (arguments
4174 (substitute-keyword-arguments arguments
4175 ;; This is a modified version used in gemmi, in which numbers are kept
4176 ;; as strings. Building the tests fails with the modification.
4177 ((#:tests? _ #f) #f)))
4178 (properties '((hidden? . #t)))))
4179
4180(define-public optional-lite
4181 (package
4182 (name "optional-lite")
4183 (version "3.5.0")
4184 (source (origin
4185 (method git-fetch)
4186 (uri (git-reference
4187 (url "https://github.com/martinmoene/optional-lite")
4188 (commit (string-append "v" version))))
4189 (file-name (git-file-name name version))
4190 (sha256
4191 (base32
4192 "0jpsm94kp1504yk9s2km86zv8xrszz30qanmhz2ljmvsdblz2l47"))))
4193 (build-system cmake-build-system)
4194 (home-page "https://github.com/martinmoene/optional-lite")
4195 (synopsis "Nullable object for C++98, C++11 and later")
4196 (description
4197 "Optional lite is a single-file header-only library to represent optional
4198(nullable) objects and pass them by value. The library aims to provide a
4199C++17-like optional for use with C++98 and later. If available,
4200@code{std::optional} is used.")
4201 (license license:boost1.0)))
4202
4203(define-public optionparser
4204 (package
4205 (name "optionparser")
4206 (version "1.7")
4207 (source (origin
4208 (method url-fetch)
4209 (uri
4210 (string-append "mirror://sourceforge/optionparser/"
4211 "optionparser-" version ".tar.gz"))
4212 (sha256
4213 (base32
4214 "04gfxrdzwacaynb8scsz6rr7nh64n6yk6w9dh2qdhrxw4caqr0dk"))))
4215 (outputs '("out" "doc"))
4216 (build-system gnu-build-system)
4217 (arguments
4218 (list
4219 #:phases
4220 #~(modify-phases %standard-phases
4221 (delete 'configure)
4222 (add-before 'build 'chdir
4223 (lambda _ (chdir "src")))
4224 (replace 'check
4225 (lambda* (#:key tests? #:allow-other-keys)
4226 (when tests?
4227 (begin
4228 (invoke "./example_arg")
4229 (invoke "./testparse")
4230 (invoke "./testprintusage")
4231 (invoke "./testodr")
4232 (invoke "./example")))))
4233 (replace 'install
4234 (lambda _
4235 (install-file "optionparser.h"
4236 (string-append #$output "/include"))))
4237 (add-after 'install 'install-doc
4238 (lambda _
4239 (copy-recursively
4240 "../html"
4241 (string-append #$output:doc "/share/doc/optionparser/html")))))))
4242 (native-inputs (list doxygen))
4243 (home-page "https://optionparser.sourceforge.net/")
4244 (synopsis "Header-only C++ library to parse command line options")
4245 (description "This package provides a header-only C++ library to parse
4246command line options. It supports the short and long option formats of
4247getopt(), getopt_long() and getopt_long_only().")
4248 (license license:expat)))
4249
4250(define-public safeint
4251 (package
4252 (name "safeint")
4253 (version "3.0.28")
4254 (source
4255 (origin
4256 (method git-fetch)
4257 (uri (git-reference
4258 (url "https://github.com/dcleblanc/SafeInt")
4259 (commit version)))
4260 (file-name (git-file-name name version))
4261 (sha256
4262 (base32 "0bgqvyz5zp4mqzkm9545r3564n52bcdnq8bjn6azhxdsmap26g56"))
4263 (patches
4264 (search-patches "safeint-disable-tests.patch"))))
4265 (build-system cmake-build-system)
4266 (arguments
4267 (list
4268 #:phases
4269 #~(modify-phases %standard-phases
4270 (replace 'install
4271 (lambda _
4272 (let ((include-dir (string-append #$output "/include")))
4273 (with-directory-excursion "../source"
4274 (install-file "SafeInt.hpp" include-dir)
4275 (install-file "safe_math.h" include-dir)
4276 (install-file "safe_math_impl.h" include-dir)))))
4277 (add-after 'install 'install-doc
4278 (lambda _
4279 (let ((doc-dir (string-append #$output "/share/doc/safeint")))
4280 (with-directory-excursion "../source"
4281 (install-file "helpfile.md" doc-dir))))))))
4282 (home-page "https://github.com/dcleblanc/SafeInt")
4283 (synopsis "C and C++ library for managing integer overflows")
4284 (description
4285 "SafeInt is a class library for C++ that manages integer overflows. It
4286also includes a C library that checks casting, multiplication, division,
4287addition and subtraction for all combinations of signed and unsigned 32-bit and
428864-bit integers.")
4289 (license license:expat)))
4290
4291(define-public wide-integer
4292 (let ((commit "22b8428746248e682d5276f8e8b7fb52af73ea47")
4293 (revision "1314")) ; commit count
4294 (package
4295 (name "wide-integer")
4296 (version (git-version "0" revision commit))
4297 (source (origin
4298 (method git-fetch)
4299 (uri (git-reference
4300 (url "https://github.com/ckormanyos/wide-integer")
4301 (commit commit)))
4302 (file-name (git-file-name name version))
4303 (sha256
4304 (base32 "0bhjnbdcphv5kddddh8kpwjpjix23m12vmfsz0r6wjc5d27md33z"))
4305 (modules '((guix build utils)))
4306 (snippet #~(substitute* "CMakeLists.txt"
4307 (("WideIntegerTargets") "wide-integer-targets")
4308 (("WideIntegerConfig") "wide-integer-config")
4309 (("WideInteger") "wide-integer")))))
4310 (build-system cmake-build-system)
4311 (native-inputs (list boost))
4312 (home-page "https://github.com/ckormanyos/wide-integer")
4313 (synopsis "C++ template for arbitrary-precision integers")
4314 (description "This package implements a generic template for extended
4315width signed and unsigned integral types. Up to 63 limbs of any built-in
4316integer type are supported, and can be used to build powers of two like
4317int128_t, uint256_t, but also somewhat esoteric types such as int24_t,
4318uint80_t, or uint1536_t. The provided types can be used in much the same
4319way as basic integer types.")
4320 (license license:boost1.0))))
4321
4322(define-public swell
4323 (let ((commit "599228ffee6ad8d02122a171e0e79271b24abbd3")
4324 (revision "1"))
4325 (package
4326 (name "swell")
4327 (version (git-version "0" revision commit)) ;no tags
4328 (source
4329 (origin
4330 (method git-fetch)
4331 (uri (git-reference
4332 (url "https://github.com/justinfrankel/WDL")
4333 (commit commit)))
4334 (file-name (git-file-name "wdl" version))
4335 (sha256
4336 (base32
4337 "0nfnapl520k9ls16km3yh0jrh4jvxg1x06gm4rq8zgcm02pxbbrd"))
4338 (modules '((guix build utils)))
4339 (snippet
4340 '(with-directory-excursion "WDL"
4341 ;; Delete 3rd party libraries and sample projects.
4342 (for-each delete-file-recursively
4343 (list "cmath"
4344 "giflib"
4345 "jpeglib"
4346 "libpng"
4347 "zlib"))
4348 ;; Fix including headers from the system.
4349 (substitute* (find-files "." "\\.(h|cpp)")
4350 (("\\\".*giflib\\/gif_lib\\.h\\\"") "<gif_lib.h>")
4351 (("\\\".*jpeglib\\/jpeglib\\.h\\\"") "<jpeglib.h>")
4352 (("\\\".*jnetlib\\/asyncdns\\.h\\\"") "<jnetlib/asyncdns.h>")
4353 (("\\\".*jnetlib\\/connection\\.h\\\"")
4354 "<jnetlib/connection.h>")
4355 (("\\\".*jnetlib\\/httpget\\.h\\\"") "<jnetlib/httpget.h>")
4356 (("\\\".*jnetlib\\/jnetlib\\.h\\\"") "<jnetlib/jnetlib.h>")
4357 (("\\\".*jnetlib\\/netinc\\.h\\\"") "<jnetlib/netinc.h>")
4358 (("\\\".*libpng\\/png\\.h\\\"") "<png.h>")
4359 (("\\\"\\.\\.\\/plush2\\/plush\\.h\\\"") "<plush2/plush.h>")
4360 (("\\\".*zlib\\.h\\\"") "<zlib.h>"))
4361 ;; Fix building jnetlib.
4362 (substitute* "jnetlib/Makefile"
4363 ;; Link the missing library.
4364 (("-pthread") "-pthread -lstdc++")
4365 ;; Remove the unavailable object.
4366 ((" sercon\\.o") "")
4367 ;; Add webserver.
4368 (("util\\.o") "util.o webserver.o "))
4369 ;; Fix building eel2.
4370 (substitute* "eel2/Makefile"
4371 ;; Do not build swell objects.
4372 ((" \\$\\(SWELL_OBJS\\)") "")
4373 ;; Do not depend again on the dependencies of swell.
4374 (("(-lX11 -lXi|\\$\\(shell pkg-config.*\\))") "")
4375 ;; Link swell.
4376 (("-lGL") "-lGL -lSwell"))))))
4377 (build-system gnu-build-system)
4378 (arguments
4379 (list #:tests? #f ;test object does not exist
4380 #:test-target "test"
4381 #:make-flags #~'("SWELL_SUPPORT_GTK=1")
4382 #:phases
4383 #~(modify-phases %standard-phases
4384 (delete 'configure) ;no configure script
4385 (add-after 'unpack 'change-directory
4386 (lambda _ (chdir "WDL/swell")))
4387 ;; No install rule.
4388 (replace 'install
4389 (lambda _
4390 (install-file "libSwell.so"
4391 (string-append #$output "/lib"))
4392 (for-each
4393 (lambda (file)
4394 (when (not (string-contains file "/sample_project"))
4395 (install-file file
4396 (string-append #$output
4397 "/include/SWELL"))))
4398 (find-files "." "\\.h$")))))))
4399 (native-inputs (list perl pkg-config))
4400 (inputs
4401 (list cairo
4402 fontconfig
4403 freetype
4404 gdk-pixbuf
4405 glib
4406 gtk+
4407 libxi
4408 libx11
4409 mesa
4410 zlib))
4411 (home-page "https://www.cockos.com/wdl/")
4412 (synopsis "Windows emulation layer")
4413 (description
4414 "SWELL is a Windows emulation Layer. It provides a set of common APIs,
4415common controls and win32-style extensions.")
4416 (license license:zlib))))
4417
4418(define-public swell-colortheme
4419 (package
4420 (inherit swell)
4421 (name "swell-colortheme")
4422 (arguments
4423 (substitute-keyword-arguments arguments
4424 ((#:make-flags flags)
4425 #~(append #$flags '("libSwell.colortheme")))
4426 ((#:phases phases)
4427 #~(modify-phases #$phases
4428 (replace 'install
4429 (lambda _
4430 (install-file "libSwell.colortheme"
4431 (string-append #$output
4432 "/share/SWELL"))))))))
4433 (native-inputs
4434 (list pkg-config
4435 gtk+)) ;only for compilation
4436 (inputs '())
4437 (synopsis "SWELL colortheme sample")
4438 (description
4439 "This package provides the default @code{libSwell.colortheme} file for
4440programs that use @code{swell}.")))
4441
4442(define-public jnetlib
4443 (package
4444 (inherit swell)
4445 (name "jnetlib")
4446 (arguments
4447 (substitute-keyword-arguments arguments
4448 ((#:tests? _ #t) #t)
4449 ((#:phases phases)
4450 #~(modify-phases #$phases
4451 (replace 'change-directory
4452 (lambda _ (chdir "WDL/jnetlib")))
4453 (replace 'install
4454 (lambda _
4455 (install-file "jnl.a" (string-append #$output "/lib"))
4456 (for-each (lambda (file)
4457 (install-file file (string-append #$output
4458 "/include"
4459 "/jnetlib")))
4460 (find-files "." "\\.h"))))))))
4461 (native-inputs '())
4462 (inputs '())
4463 (synopsis "C++ asynchronous network abstraction layer")
4464 (description
4465 "JNetLib is a portable C++ asynchronous network abstraction layer. It
4466features:
4467@itemize
4468@item TCP connections support,
4469@item listening sockets support,
4470@item asynchronous DNS support,
4471@item HTTP serving and getting support,
4472@item Completely asynchronous love for single threaded apps.
4473@end itemize")))
4474
4475(define-public eel2
4476 (package
4477 (inherit swell)
4478 (name "eel2")
4479 (arguments
4480 (substitute-keyword-arguments arguments
4481 ((#:tests? _ #t) #f) ;no tests
4482 ;; FIXME: Remove this flag when this issue will be fixed:
4483 ;; https://github.com/justinfrankel/WDL/issues/32.
4484 ((#:make-flags _ '()) #~'("NO_GFX=1"))
4485 ((#:phases phases)
4486 #~(modify-phases #$phases
4487 (replace 'change-directory
4488 (lambda _ (chdir "WDL/eel2")))
4489 (replace 'install
4490 (lambda _
4491 ;; Install executable files.
4492 (for-each (lambda (file)
4493 (install-file file
4494 (string-append #$output "/bin")))
4495 '("eel_pp" "loose_eel"))
4496 ;; Install headers.
4497 (for-each (lambda (file)
4498 (install-file file
4499 (string-append #$output
4500 "/include/EEL2")))
4501 (find-files "." "\\.h$"))
4502 ;; Install scripts.
4503 (copy-recursively "scripts"
4504 (string-append #$output
4505 "/share/EEL2/scripts"))))))))
4506 (native-inputs (list nasm))
4507 (inputs (list jnetlib))
4508 (home-page "https://www.cockos.com/EEL2/")
4509 (synopsis "Expression evaluation library")
4510 (description
4511 "EEL2 is an expression evaluation library and realtime compiler based on
4512@uref{http://1014.org/code/nullsoft/avs/, AVS's EEL}.")))
4513
4514(define-public juce
4515 (package
4516 (name "juce")
4517 (version "8.0.12")
4518 (source (origin
4519 (method git-fetch)
4520 (uri (git-reference
4521 (url "https://github.com/juce-framework/JUCE")
4522 (commit version)))
4523 (file-name (git-file-name name version))
4524 (sha256
4525 (base32
4526 "0m4kbpwg2gblnilly0h2a3rr7f7lb13gsx4fvs2mnvyvy6jfbbls"))))
4527 (build-system cmake-build-system)
4528 (arguments
4529 (list #:tests? #f ;no test suite
4530 #:configure-flags #~(list "-DJUCE_TOOL_INSTALL_DIR=bin")
4531 #:phases
4532 #~(modify-phases %standard-phases
4533 (add-after 'unpack 'patch-paths
4534 (lambda* (#:key inputs #:allow-other-keys)
4535 (substitute*
4536 (find-files "." "juce_Fonts_linux.cpp$")
4537 (("fonts\\.conf\" };")
4538 (string-append
4539 "fonts.conf\",\n\""
4540 (search-input-file inputs "/etc/fonts/fonts.conf")
4541 "\"\n};"))))))))
4542 (native-inputs
4543 (list alsa-lib
4544 curl
4545 jack-2
4546 ladspa
4547 libx11
4548 pkg-config
4549 webkitgtk-for-gtk3))
4550 (inputs (list fontconfig freetype libjpeg-turbo libpng))
4551 (home-page "https://juce.com")
4552 (synopsis "C++ application framework for audio plugins and plugin hosts")
4553 (description
4554 "JUCE is a C++ application framework for creating applications including
4555VST, VST3, AU, AUv3, AAX and LV2 audio plug-ins and plug-in hosts.")
4556 (license
4557 (list license:asl2.0 ;for Oboe and AudioUnitSDK
4558 license:bsd-3 ;for FLAC, Ogg Vorbis and OpenGL Extension Wrangler
4559 license:expat ;for Mesa 3-D graphics and jucer icons
4560 license:gpl3 ;for JUCE and VST3 SDK
4561 license:ijg ;for jpeglib
4562 license:isc ;for LV2 SDK
4563 license:zlib)))) ;for pngLib, zlib and Box2D
4564
4565(define-public ftxui
4566 (package
4567 (name "ftxui")
4568 (version "6.1.9")
4569 (source (origin
4570 (method git-fetch)
4571 (uri (git-reference
4572 (url "https://github.com/ArthurSonzogni/FTXUI")
4573 (commit (string-append "v" version))))
4574 (sha256
4575 (base32
4576 "1sbgp1b5v0z8dcfwmgincd759brc1bz64vifdfp4r1afp1672lm6"))
4577 (file-name (git-file-name name version))))
4578 (build-system cmake-build-system)
4579 (native-inputs (list googletest benchmark))
4580 (arguments
4581 (list #:configure-flags
4582 #~(list (string-append "-DFTXUI_BUILD_TESTS:BOOL="
4583 #$(if (%current-target-system)
4584 "OFF"
4585 "ON"))
4586 "-DFTXUI_BUILD_TESTS_FUZZER:BOOL=OFF"
4587 "-DBUILD_SHARED_LIBS=ON")))
4588 (home-page "https://github.com/ArthurSonzogni/FTXUI")
4589 (synopsis "C++ Functional Terminal User Interface")
4590 (description
4591 "Functional Terminal (X) User interface (FTXUI) is a simple C++ library for
4592terminal based user interfaces.
4593
4594Main features:
4595@itemize
4596@item Functional style.
4597@item Keyboard & mouse navigation.
4598@item Support for UTF8 and fullwidth chars.
4599@item Support for animations.
4600@item Support for drawing.
4601@item No dependencies.
4602@end itemize")
4603 (license license:expat)))
4604
4605(define-public mapbox-variant
4606 (package
4607 (name "mapbox-variant")
4608 (version "1.2.0")
4609 (source (origin
4610 (method git-fetch)
4611 (uri (git-reference
4612 (url "https://github.com/mapbox/variant")
4613 (commit (string-append "v" version))))
4614 (file-name (git-file-name name version))
4615 (sha256
4616 (base32 "03cmxm34ralh8y07bs80gz3v4pql51206dn5h7lcnm7vishkk241"))
4617 (modules '((guix build utils)))
4618 (snippet #~(begin
4619 (delete-file "test/include/catch.hpp")
4620 (substitute* (find-files "test" "\\.[ch]pp")
4621 (("\"catch.hpp\"") "<catch/catch.hpp>"))))))
4622 (build-system gnu-build-system)
4623 (arguments
4624 (list #:test-target "test"
4625 #:phases
4626 #~(modify-phases %standard-phases
4627 (delete 'bootstrap)
4628 (delete 'configure)
4629 (delete 'build)
4630 (replace 'install
4631 (lambda* (#:key outputs #:allow-other-keys)
4632 (copy-recursively "include"
4633 (string-append (assoc-ref outputs "out")
4634 "/include")))))))
4635 (native-inputs (list catch2-1))
4636 (home-page "https://github.com/mapbox/variant")
4637 (synopsis "Implementation of std::variant for C++11/14")
4638 (description "This package provides a header-only implementation of
4639std::variant (formerly boost::variant) for C++11/14.")
4640 (license license:bsd-3)))
4641
4642(define-public mpark-variant
4643 (package
4644 (name "mpark-variant")
4645 (version "1.4.0")
4646 (source (origin
4647 (method git-fetch)
4648 (uri (git-reference
4649 (url "https://github.com/mpark/variant")
4650 (commit (string-append "v" version))))
4651 (sha256
4652 (base32
4653 "0gz8d5qprlfqb42cfyyc4nbwhgarhw027a9nr52h3gbdn560j0j4"))
4654 (file-name (git-file-name name version))))
4655 (build-system cmake-build-system)
4656 (arguments
4657 (list
4658 #:configure-flags #~(list "-DMPARK_VARIANT_INCLUDE_TESTS=mpark")
4659 #:phases
4660 #~(modify-phases %standard-phases
4661 (add-after 'unpack 'find-googletest
4662 (lambda _
4663 (substitute* "test/CMakeLists.txt"
4664 (("add_subdirectory.*3rdparty/googletest.*\n")
4665 "find_package(GTest REQUIRED)\n")
4666 ((".*3rdparty/googletest.*\n") "")
4667 ((".*config_compiler_and_linker.*\n") "")
4668 (("gtest_main") "gtest gtest_main")))))))
4669 (native-inputs (list googletest))
4670 (home-page "https://github.com/mpark/variant")
4671 (synopsis "Implementation of std::variant for C++11/14/17")
4672 (description
4673 "MPark.Variant provides the C++17 std::variant for C++11/14/17. It is
4674based on the implementation of std::variant in libc++.")
4675 (license license:boost1.0)))
4676
4677(define-public nativefiledialog-extended
4678 (package
4679 (name "nativefiledialog-extended")
4680 (version "1.2.1")
4681 (source
4682 (origin
4683 (method git-fetch)
4684 (uri (git-reference
4685 (url "https://github.com/btzy/nativefiledialog-extended")
4686 (commit (string-append "v" version))))
4687 (file-name (git-file-name name version))
4688 (sha256
4689 (base32 "15l0jy3v4p6rgg9dk8zr80lqp51s32ii62cm4s90400ragdgh10v"))))
4690 (build-system cmake-build-system)
4691 (arguments
4692 '(#:tests? #f
4693 #:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
4694 (native-inputs (list pkg-config))
4695 (inputs (list gtk+))
4696 (home-page "https://github.com/btzy/nativefiledialog-extended")
4697 (synopsis "Native file dialog library with C and C++ bindings")
4698 (description
4699 "This package provides a library that portably invokes native file open,
4700folder select and file save dialogs. It allows the specification of a default
4701file name and location, as well as filters with friendly names (such as
4702\"source files\" or \"image files\") where supported.")
4703 (license license:zlib)))
4704
4705(define-public sexp-cpp
4706 ;; XXX: Does not release anymore.
4707 (let ((commit "4d8096c223d2f469ca6e407e793d20980f6aba76")
4708 (revision "0"))
4709 (package
4710 (name "sexp-cpp")
4711 (version (git-version "0.1.0" revision commit))
4712 (source
4713 (origin
4714 (method git-fetch)
4715 (uri (git-reference
4716 (url "https://github.com/lispparser/sexp-cpp")
4717 (commit commit)))
4718 (file-name (git-file-name name version))
4719 (sha256
4720 (base32 "1c79mp0d0b52k7bk0xlh9xmczd60v3f5jv5b240mm8r9z7gyk1vz"))))
4721 (build-system cmake-build-system)
4722 (arguments
4723 (list
4724 #:configure-flags
4725 #~(list "-DBUILD_TESTS=ON")))
4726 (native-inputs (list googletest tinycmmc))
4727 (home-page "https://github.com/lispparser/sexp-cpp")
4728 (synopsis "S-Expression parser for C++")
4729 (description
4730 "This package provides a simple S-Expression parser for C++.")
4731 (license license:gpl3+))))
4732
4733(define-public sfl-library
4734 (package
4735 (name "sfl-library")
4736 (version "2.2.0")
4737 (source
4738 (origin
4739 (method git-fetch)
4740 (uri (git-reference
4741 (url "https://github.com/slavenf/sfl-library")
4742 (commit version)))
4743 (file-name (git-file-name name version))
4744 (sha256
4745 (base32 "1ngy86b9y1b8a4j37c14m1jrg0q5b12jj8b0gdnpl5sjb1r2fljk"))))
4746 (build-system cmake-build-system)
4747 (arguments (list #:tests? #f)) ;no tests
4748 (home-page "https://github.com/slavenf/sfl-library")
4749 (synopsis "Header-only C++11/20 container library")
4750 (description "sfl-library provides many STL-like (Standard Template Library)
4751containers including vectors, associative containers, and unordered containers
4752based on hash tables. These containers are designed for C++11 and C++20
4753constant expression usage.")
4754 (license license:zlib)))
4755
4756(define-public stduuid
4757 (package
4758 (name "stduuid")
4759 (version "1.2.3")
4760 (source
4761 (origin
4762 (method git-fetch)
4763 (uri (git-reference
4764 (url "https://github.com/mariusbancila/stduuid")
4765 (commit (string-append "v" version))))
4766 (file-name (git-file-name name version))
4767 (sha256
4768 (base32 "1y7jgf45dydq0jlac5clnanwcc22la4y8c83d5i0rp87x2zll6ij"))))
4769 (build-system cmake-build-system)
4770 (home-page "https://github.com/mariusbancila/stduuid")
4771 (synopsis
4772 "C++17 implementation of @acronym{UUID, universally unique identifiers}")
4773 (description "This library is a C++17 cross-platform, single-header
4774implementation of UUID, a 128-bit number used to uniquely identify information
4775in computer systems, such as database table keys, COM interfaces, classes and
4776type libraries, and many others.")
4777 (license license:expat)))
4778
4779(define-public string-view-lite
4780 (package
4781 (name "string-view-lite")
4782 (version "1.8.0")
4783 (source
4784 (origin
4785 (method git-fetch)
4786 (uri (git-reference
4787 (url "https://github.com/martinmoene/string-view-lite")
4788 (commit (string-append "v" version))))
4789 (file-name (git-file-name name version))
4790 (sha256
4791 (base32 "1mfp3lmqx7ac0545akxd2v05rrapa3byz8q4gb9rqy94pcqbfyc5"))))
4792 (build-system cmake-build-system)
4793 (home-page "https://github.com/martinmoene/string-view-lite")
4794 (synopsis "C++17 string-view for older C++")
4795 (description "This package provides a compatibility header-only library
4796for C++17 string-view.")
4797 (license license:boost1.0)))
4798
4799(define-public strutcpp
4800 ;; XXX: No releases.
4801 (let ((commit "108ac9bb4993d661187ac7add0863abc7ff2531f")
4802 (revision "0"))
4803 (package
4804 (name "strutcpp")
4805 (version (git-version "0.0.0" revision commit))
4806 (source
4807 (origin
4808 (method git-fetch)
4809 (uri (git-reference
4810 (url "https://github.com/Grumbel/strutcpp")
4811 (commit commit)))
4812 (file-name (git-file-name name version))
4813 (sha256
4814 (base32 "0m344qq3d57balzvc26fjx985nj2xwnfb1a7prkv3njj5lfcf127"))
4815 (patches (search-patches "strutcpp-fix-includes.patch"))))
4816 (build-system cmake-build-system)
4817 (arguments
4818 (list
4819 #:configure-flags
4820 #~(list "-DBUILD_TESTS=ON")))
4821 (native-inputs (list googletest tinycmmc))
4822 (home-page "https://github.com/Grumbel/strutcpp")
4823 (synopsis "Collection of string utilities for C++")
4824 (description "This package provides simple string utilities for C++.")
4825 (license license:gpl3+))))
4826
4827(define-public tfel
4828 (package
4829 (name "tfel")
4830 (version "4.2.2") ;Keep in sync with compatible version of mgis
4831 (source
4832 (origin
4833 (method git-fetch)
4834 (uri (git-reference
4835 (url "https://github.com/thelfer/tfel")
4836 (commit (string-append "TFEL-" version))))
4837 (file-name (git-file-name name version))
4838 (sha256
4839 (base32 "14br7n76qfh651hvmn1i0ma5lr5ayhvj4ay2182isx26m1j15cfz"))))
4840 (build-system cmake-build-system)
4841 (arguments
4842 (list
4843 #:configure-flags
4844 #~(list "-Denable-portable-build=ON")
4845 #:phases
4846 #~(modify-phases %standard-phases
4847 ;; Test targets are not build by default. By building these
4848 ;; additional targets the majority of tests (over 6000) can
4849 ;; be run.
4850 (add-after 'build 'build-test-targets
4851 (lambda* (#:key tests? parallel-build? #:allow-other-keys)
4852 (if tests?
4853 (invoke "make"
4854 "MFrontGenericBehaviours"
4855 "MFrontGenericBehaviours2"
4856 "MFrontGenericBehaviours3"
4857 "-j"
4858 (if parallel-build?
4859 (number->string (parallel-job-count)) "1"))
4860 (format #t "test suite not run~%"))))
4861 (replace 'check
4862 (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
4863 (if tests?
4864 (invoke "ctest"
4865 "-R"
4866 "generic"
4867 "-E"
4868 "brick"
4869 "-j"
4870 (if parallel-tests?
4871 (number->string (parallel-job-count)) "1"))
4872 (format #t "test suite not run~%")))))))
4873 (home-page "https://thelfer.github.io/tfel/web/index.html")
4874 (synopsis "TFEL library and MFront code generator")
4875 (description
4876 "MFront is a code generator which translates a set of closely
4877related domain specific languages into plain C++ on top of the TFEL library.")
4878 ;; TFEL/MFront is released under either the GNU GPL licence with linking
4879 ;; exception or the CECILL-A licence:
4880 (license (list license:gpl3+ license:cecill))))
4881
4882(define-public mgis
4883 (package
4884 (name "mgis")
4885 (version "2.2") ;Keep in sync with compatible version of tfel
4886 (source
4887 (origin
4888 (method git-fetch)
4889 (uri (git-reference
4890 (url "https://github.com/thelfer/MFrontGenericInterfaceSupport")
4891 (commit (string-append "MFrontGenericInterfaceSupport-" version))))
4892 (file-name (git-file-name name version))
4893 (sha256
4894 (base32 "00ij7gaqrzakvc3n6irq5z5b5nd08kik5i87prvnp9604ssa6h8k"))))
4895 (build-system cmake-build-system)
4896 (arguments
4897 (list
4898 #:configure-flags
4899 #~(list "-Denable-doxygen-doc=OFF" "-Denable-portable-build=ON")
4900 #:phases
4901 #~(modify-phases %standard-phases
4902 ;; Test targets are not build by default. By building these
4903 ;; additional targets some tests can be run.
4904 (add-after 'build 'build-test-targets
4905 (lambda* (#:key tests? parallel-build? #:allow-other-keys)
4906 (if tests?
4907 (invoke "make"
4908 "BehaviourTest"
4909 "MFrontGenericBehaviourInterfaceTest"
4910 "MFrontGenericBehaviourInterfaceTest2"
4911 "MFrontGenericBehaviourInterfaceTest3"
4912 "-j"
4913 (if parallel-build?
4914 (number->string (parallel-job-count)) "1"))
4915 (format #t "test suite not run~%"))))
4916 (replace 'check
4917 (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
4918 (if tests?
4919 (invoke "ctest" "-R" "MFrontGenericBehaviourInterfaceTest"
4920 "-j"
4921 (if parallel-tests?
4922 (number->string (parallel-job-count)) "1"))
4923 (format #t "test suite not run~%")))))))
4924 (inputs (list tfel))
4925 (home-page "https://thelfer.github.io/mgis/web/index.html")
4926 (synopsis
4927 "MFrontGenericInterfaceSupport provides tools to handle MFront behaviours")
4928 (description
4929 "Those tools are meant to be used by solver developers to e.g. load
4930MFront behaviours from external shared libraries and retrieve all relevant
4931meta data function.")
4932 ;; MFrontGenericInterfaceSupport is released under either the GNU LGPL license
4933 ;; or the CECILL-C license:
4934 (license (list license:lgpl3 license:cecill-c))))
4935
4936(define-public tcbrindle-span
4937 (let ((commit "836dc6a0efd9849cb194e88e4aa2387436bb079b")
4938 (revision "0"))
4939 (package
4940 (name "tcbrindle-span")
4941 (version (git-version "0" revision commit))
4942 (source
4943 (origin
4944 (method git-fetch)
4945 (uri (git-reference
4946 (url "https://github.com/tcbrindle/span")
4947 (commit commit)))
4948 (file-name (git-file-name name version))
4949 (sha256
4950 (base32 "1v3x1mj4if8jrr7cmrcbhv8n8ygla0liqb0dic6g6ji7px2pr6jf"))
4951 (patches (search-patches "tcbrindle-span-include-exception.patch"))
4952 (modules '((guix build utils)))
4953 ;; Unbundle catch.
4954 (snippet
4955 '(with-directory-excursion "test"
4956 (delete-file "catch.hpp")
4957 (substitute* (find-files "." "\\.cpp$")
4958 (("\"catch\\.hpp\"") "<catch.hpp>"))))))
4959 (build-system cmake-build-system)
4960 (inputs (list catch-framework)) ;in inputs for cross-compilation
4961 (arguments
4962 (list
4963 #:phases
4964 #~(modify-phases %standard-phases
4965 (replace 'install
4966 (lambda _
4967 (mkdir-p (string-append #$output))
4968 (copy-recursively "../source/include"
4969 (string-append #$output "/include")))))))
4970 (home-page "https://github.com/tcbrindle/span")
4971 (synopsis "Implementation of C++20's @code{std::span} for older compilers")
4972 (description
4973 "This package provides a single-header implementation of C++20's
4974@code{std::span}, conforming to the C++20 committee draft. It is compatible
4975with C++11, but will use newer language features if they are available.")
4976 (license license:boost1.0))))
4977
4978;; XXX: Deprecated since 2026-08-31.
4979(define-deprecated-package span
4980 tcbrindle-span)
4981
4982(define-public tsl-hopscotch-map
4983 (package
4984 (name "tsl-hopscotch-map")
4985 (version "2.3.0")
4986 (source (origin
4987 (method git-fetch)
4988 (uri (git-reference
4989 (url "https://github.com/Tessil/hopscotch-map")
4990 (commit (string-append "v" version))))
4991 (file-name (git-file-name name version))
4992 (sha256
4993 (base32
4994 "012pw37w000pdxdvps0wsqrw6597cm6i6kr5rpl303qmiwqicb2p"))))
4995 (build-system cmake-build-system)
4996 (arguments
4997 (list
4998 #:phases
4999 #~(modify-phases %standard-phases
5000 (add-after 'unpack 'patch-cmake-test
5001 (lambda _
5002 (let ((file (open-file "CMakeLists.txt" "a")))
5003 (display "\nenable_testing()\nadd_subdirectory(tests)" file)
5004 (close-port file))
5005 (substitute* "tests/CMakeLists.txt"
5006 (("set\\(Boost_USE_STATIC_LIBS.*") "")
5007 (("add_subdirectory\\(\\.\\..*")
5008 "add_test(tsl_hopscotch_map_tests tsl_hopscotch_map_tests)\n")))))))
5009 (native-inputs (list boost))
5010 (home-page "https://github.com/Tessil/hopscotch-map")
5011 (synopsis "Hash maps and hash sets using hopscotch hashing")
5012 (description "This package provides a C++ implementation of several hash
5013map and a hash set variants using open addressing and hopscotch hashing to
5014resolve collisions. It is intended to be fast and provides additional
5015features, such as heterogeneous lookups and different growth policies.")
5016 (license license:expat)))
5017
5018(define-public tsl-sparse-map
5019 (package
5020 (name "tsl-sparse-map")
5021 (version "0.6.2")
5022 (source (origin
5023 (method git-fetch)
5024 (uri (git-reference
5025 (url "https://github.com/Tessil/sparse-map")
5026 (commit (string-append "v" version))))
5027 (sha256
5028 (base32
5029 "0rb7w0hzsj4qbm0dff1niaf75aag9lj0xqhgb3vg5h9hfic62ic2"))
5030 (file-name (git-file-name name version))))
5031 (build-system cmake-build-system)
5032 (arguments
5033 (list
5034 #:phases
5035 #~(modify-phases %standard-phases
5036 (add-after 'unpack 'patch-cmake-test
5037 (lambda _
5038 (let ((file (open-file "CMakeLists.txt" "a")))
5039 (display "\nenable_testing()\nadd_subdirectory(tests)" file)
5040 (close-port file))
5041 (substitute* "tests/CMakeLists.txt"
5042 (("set\\(Boost_USE_STATIC_LIBS.*") "")
5043 (("add_subdirectory\\(\\.\\..*")
5044 "add_test(tsl_sparse_map_tests tsl_sparse_map_tests)\n")))))))
5045 (native-inputs (list boost))
5046 (home-page "https://github.com/Tessil/sparse-map")
5047 (synopsis "Sparse hash map")
5048 (description "This package provides a C++ implementation of a hash map and
5049a hash set with open addressing and sparse quadratic probing. It is intended
5050to be memory efficient and provides additional features, such as heterogeneous
5051lookups and different growth policies.")
5052 (license license:expat)))
5053
5054(define-public tsl-ordered-map
5055 (package
5056 (name "tsl-ordered-map")
5057 (version "1.1.0")
5058 (source (origin
5059 (method git-fetch)
5060 (uri (git-reference
5061 (url "https://github.com/Tessil/ordered-map")
5062 (commit (string-append "v" version))))
5063 (file-name (git-file-name name version))
5064 (sha256
5065 (base32
5066 "0bz5zgabalb7z0j9scng4zmi95hy7iasry5gz15x6y6dsdz0qf3j"))))
5067 (build-system cmake-build-system)
5068 (arguments
5069 (list
5070 #:phases
5071 #~(modify-phases %standard-phases
5072 (add-after 'unpack 'patch-cmake-test
5073 (lambda _
5074 (let ((file (open-file "CMakeLists.txt" "a")))
5075 (display "\nenable_testing()\nadd_subdirectory(tests)" file)
5076 (close-port file))
5077 (substitute* "tests/CMakeLists.txt"
5078 (("set\\(Boost_USE_STATIC_LIBS.*") "")
5079 (("add_subdirectory\\(\\.\\..*")
5080 "add_test(tsl_ordered_map_tests tsl_ordered_map_tests)\n")))))))
5081 (native-inputs (list boost))
5082 (home-page "https://github.com/Tessil/ordered-map")
5083 (synopsis "Order-preserving hash map and hash set")
5084 (description "This package provides a C++ implementation of a hash map and
5085a hash set which preserve the order of insertion. It is intended for
5086efficient ordered insertions and lookup, while sacrifing performance for
5087ordered erase operations.")
5088 (license license:expat)))
5089
5090(define-public tinygettext
5091 ;; XXX: Does not release anymore.
5092 (let ((commit "ef4164639004d7de5bf8ab28ed0e85ea521b7c5e")
5093 (revision "0"))
5094 (package
5095 (name "tinygettext")
5096 (version (git-version "0.2.0" revision commit))
5097 (source
5098 (origin
5099 (method git-fetch)
5100 (uri (git-reference
5101 (url "https://github.com/tinygettext/tinygettext")
5102 (commit commit)))
5103 (file-name (git-file-name name version))
5104 (sha256
5105 (base32 "0a8l92nba33f3j2hk6ckrn9javmy2xbnsfkks1z740y3bj4sxzw9"))))
5106 (build-system cmake-build-system)
5107 (arguments
5108 (list
5109 #:configure-flags
5110 #~(list "-DBUILD_TESTS=ON")
5111 #:phases
5112 #~(modify-phases %standard-phases
5113 (replace 'check
5114 (lambda _
5115 (substitute* "../source/test/test.sh"
5116 (("^\\.")
5117 (getcwd)))
5118 (with-directory-excursion "../source/test"
5119 (invoke "bash" "test.sh")))))))
5120 (native-inputs (list tinycmmc))
5121 (home-page "https://github.com/tinygettext/tinygettext")
5122 (synopsis "Simple gettext replacement")
5123 (description
5124 "This package provides a simple gettext replacement that works directly
5125on @code{.po} files and doesn't need @code{.mo} files pre-generated.")
5126 (license license:expat))))
5127
5128(define-public tinygettext-with-sdl2
5129 (package/inherit tinygettext
5130 (arguments
5131 (substitute-keyword-arguments arguments
5132 ((#:configure-flags flags)
5133 #~(list "-DTINYGETTEXT_WITH_SDL=ON" "-DBUILD_TESTS=ON"))))
5134 (native-inputs (list pkg-config tinycmmc))
5135 (inputs (list sdl2))))
5136
5137(define-public tl-optional
5138 (package
5139 (name "tl-optional")
5140 (version "1.1.0")
5141 (source (origin
5142 (method git-fetch)
5143 (uri (git-reference
5144 (url "https://github.com/TartanLlama/optional")
5145 (commit (string-append "v" version))))
5146 (file-name (git-file-name name version))
5147 (sha256
5148 (base32
5149 "0qkjplmhilbi1iqxx3pz0grcx5355ymk6wwd4h4309mk156xgx2q"))))
5150 (build-system cmake-build-system)
5151 (arguments
5152 (list
5153 #:phases
5154 #~(modify-phases %standard-phases
5155 (add-after 'unpack 'patch-cmake-test
5156 (lambda _
5157 (substitute* "CMakeLists.txt"
5158 (("FetchContent_Declare.*") "")
5159 ((".*http.*catchorg/Catch2.*") "")
5160 (("FetchContent_MakeAvailable\\(Catch2\\)")
5161 "find_package(Catch2 REQUIRED)")))))))
5162 (native-inputs (list catch2-2))
5163 (home-page "https://github.com/TartanLlama/optional")
5164 (synopsis "Implementation of std::optional with extensions for C++11/14/17")
5165 (description "@code{tl::optional} provides a single-header implementation of
5166the std::optional for C++11/14/17, with support for monadic operations added in
5167C++23.")
5168 (license license:cc0)))
5169
5170(define-public type-safe
5171 (package
5172 (name "type-safe")
5173 (version "0.2.4")
5174 (source
5175 (origin
5176 (method git-fetch)
5177 (uri (git-reference
5178 (url "https://github.com/foonathan/type_safe")
5179 (commit (string-append "v" version))))
5180 (file-name (git-file-name name version))
5181 (sha256
5182 (base32 "0qb4g9x22m8w9d7n9793cbig5a06wlhzqwlr276yxvz5yyzsxjfg"))
5183 (modules '((guix build utils)))
5184 ;; Remove bundled debug_assert.
5185 ;; Keep external/external.cmake because it enables
5186 ;; TYPE_SAFE_HAS_IMPORTED_TARGETS, required for installing the CMake
5187 ;; config files.
5188 (snippet #~(delete-file-recursively "external/debug_assert"))))
5189 (build-system cmake-build-system)
5190 (arguments
5191 (list #:configure-flags
5192 #~(list "-DTYPE_SAFE_BUILD_TEST_EXAMPLE=ON"
5193 "-DTYPE_SAFE_BUILD_DOC=OFF") ; needs standardese
5194 #:phases
5195 #~(modify-phases %standard-phases
5196 (add-after 'unpack 'fix-dependencies
5197 (lambda _
5198 (substitute*
5199 (list "include/type_safe/detail/assert.hpp"
5200 "include/type_safe/detail/force_inline.hpp")
5201 (("#include <debug_assert.hpp>")
5202 (string-append "#include <"
5203 #$(this-package-input "debug-assert")
5204 "/include/debug_assert.hpp>")))
5205 (substitute* "test/CMakeLists.txt"
5206 (("^if\\(NOT EXISTS .*/catch\\.hpp\\)") "if(FALSE)")
5207 (("^(target_include_directories\\(type_safe_test) .*"
5208 all prefix)
5209 (string-append all prefix " PRIVATE \""
5210 #$(this-package-native-input "catch2")
5211 "/include/catch2\")\n")))))
5212 (add-after 'install 'fix-cmake-config
5213 (lambda _
5214 (substitute* (string-append
5215 #$output
5216 "/lib/cmake/type_safe/type_safe-config.cmake")
5217 (("^(find_dependency\\(debug_assert)\\)" _ prefix)
5218 (string-append prefix " PATHS \""
5219 #$(this-package-input "debug-assert")
5220 "/lib/cmake/debug_assert\")"))))))))
5221 (native-inputs (list catch2-2))
5222 (inputs (list debug-assert))
5223 (home-page "https://github.com/foonathan/type_safe")
5224 (synopsis "C++ abstractions for preventing bugs via the type system")
5225 (description "type_safe is a C++ header-only library which provides
5226abstractions for defining more appropriate types, thus allowing C++'s type
5227system to prevent more bugs.")
5228 (license license:expat)))
5229
5230(define-public cpp-ada-url-parser
5231 (package
5232 (name "cpp-ada-url-parser")
5233 (version "4.0.0")
5234 (source
5235 (origin
5236 (method git-fetch)
5237 (uri (git-reference
5238 (url "https://github.com/ada-url/ada")
5239 (commit (string-append "v" version))))
5240 (file-name (git-file-name name version))
5241 (sha256
5242 (base32 "1hlhga3dz4hdaj0n8jdz6cnw3skg9c4wm9ar9chfdnwf88nyiy2f"))))
5243 (build-system cmake-build-system)
5244 (arguments
5245 (list
5246 #:configure-flags
5247 #~(list (string-append "-DADA_TESTING="
5248 #$(if (%current-target-system)
5249 "OFF"
5250 "ON"))
5251 "-DCPM_LOCAL_PACKAGES_ONLY=ON")
5252 #:phases
5253 #~(modify-phases %standard-phases
5254 (add-after 'unpack 'patch-deps
5255 (lambda _
5256 (substitute* "CMakeLists.txt"
5257 (("cmake/CPM.cmake")
5258 (string-append #$(this-package-native-input
5259 "cpm-cmake")
5260 "/lib/cmake/CPM.cmake"))
5261 ;; We force CPM to find system packages rather than using git
5262 ;; to download them.
5263 (("Git_FOUND") "TRUE")
5264 (("(simdjson@)[0-9.]*" _ simdjson)
5265 (string-append simdjson
5266 #$(package-version (this-package-native-input
5267 "simdjson")))))
5268 (substitute* "tools/cli/CMakeLists.txt"
5269 (("(VERSION\\s)[0-9.]*" _ a)
5270 (string-append a
5271 #$(package-version (this-package-native-input
5272 "cxxopts")))))))
5273 (add-after 'patch-deps 'python-zipfile-disable-strict-timestamps
5274 (lambda _
5275 (substitute* "singleheader/amalgamate.py"
5276 (("zipfile.ZIP_DEFLATED")
5277 "zipfile.ZIP_DEFLATED, strict_timestamps=False")))))))
5278 (native-inputs (list cpm-cmake
5279 cxxopts
5280 fmt
5281 googletest
5282 python
5283 simdjson))
5284 (home-page "https://github.com/ada-url/ada")
5285 (synopsis "WHATWG-compliant URL parser")
5286 (description "Ada (not to be confused with the programming language) is a
5287fast and specification-compliant URL parser written in C++. It conforms to
5288the @url{https://url.spec.whatwg.org/#url-parsing, WHATWG specification} and fully
5289supports the relevant @url{https://www.unicode.org/reports/tr46/#ToUnicode,
5290Unicode Technical Standard}.")
5291 (license license:gpl3+)))
5292
5293(define-public tclap
5294 (package
5295 (name "tclap")
5296 (version "1.4.0-rc2")
5297 (source
5298 (origin
5299 (method url-fetch)
5300 (uri (string-append "mirror://sourceforge/" name "/" name "-" version
5301 ".tar.bz2"))
5302 (sha256
5303 (base32 "1xy5q78ff7z22gnia320qlaf0mawv2m02rl6b7dawxy4mmdwwlna"))))
5304 (build-system cmake-build-system)
5305 (arguments
5306 (list
5307 #:phases #~(modify-phases %standard-phases
5308 (replace 'check
5309 (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
5310 (if tests?
5311 (invoke "ctest" "-j"
5312 (if parallel-tests?
5313 (number->string (parallel-job-count))
5314 "1"))
5315 (format #t "test suite not run~%")))))))
5316 (native-inputs (list python))
5317 (home-page "https://sourceforge.net/p/tclap/discussion/")
5318 (synopsis "Templatized Command Line Argument Parser")
5319 (description
5320 "This is a simple C++ library that facilitates parsing command line
5321arguments in a type independent manner.")
5322 (license license:expat)))
5323
5324(define-public aklomp-base64
5325 (package
5326 (name "aklomp-base64")
5327 (version "0.5.2")
5328 (source (origin
5329 (method git-fetch)
5330 (uri (git-reference
5331 (url "https://github.com/aklomp/base64.git")
5332 (commit (string-append "v" version))))
5333 (file-name (git-file-name name version))
5334 (sha256
5335 (base32
5336 "0xc541vhq44d9i1vf5hyrznqd1kyad9qbvsghcfr17pk1xyqv1kl"))))
5337 (build-system cmake-build-system)
5338 (arguments
5339 (list #:tests? #t
5340 #:phases
5341 #~(modify-phases %standard-phases
5342 (replace 'check
5343 (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
5344 (if tests?
5345 (invoke "ctest" "-VV" "--build-config" "Release" "--output-on-failure")
5346 (format #t "test suite not run~%")))))
5347
5348 #:configure-flags
5349 #~(append
5350 (list "-DBASE64_BUILD_TESTS=ON"
5351 "-DCMAKE_BUILD_TYPE=Release")
5352 (let ((system #$(or (%current-target-system)
5353 (%current-system))))
5354 (cond
5355 ;; ARM 64-bit (aarch64)
5356 ((string-prefix? "aarch64-" system)
5357 (list
5358 "-DCMAKE_C_FLAGS=-march=armv8-a"
5359 "-DNEON64_CFLAGS= "
5360 "-DBASE64_WITH_NEON64=ON"
5361 "-DBASE64_WITH_AVX2=OFF"
5362 "-DBASE64_WITH_SSSE3=OFF"
5363 "-DBASE64_WITH_SSE41=OFF"
5364 "-DBASE64_WITH_SSE42=OFF"
5365 "-DBASE64_WITH_AVX=OFF"
5366 "-DBASE64_WITH_AVX512=OFF"))
5367 ;; ARM 32-bit (armhf)
5368 ((string-prefix? "armhf-" system)
5369 (list
5370 "-DCMAKE_C_FLAGS=-march=armv7 -mfpu=neon"
5371 "-DNEON32_CFLAGS=-march=armv7 -mfpu=neon"
5372 "-DBASE64_WITH_NEON32=ON"
5373 "-DBASE64_WITH_AVX2=OFF"
5374 "-DBASE64_WITH_SSSE3=OFF"
5375 "-DBASE64_WITH_SSE41=OFF"
5376 "-DBASE64_WITH_SSE42=OFF"
5377 "-DBASE64_WITH_AVX=OFF"
5378 "-DBASE64_WITH_AVX512=OFF"))
5379 ;; x86_64 (with all extensions except AVX512).
5380 ((string-prefix? "x86_64-" system)
5381 (list
5382 "-DAVX2_CFLAGS=-mavx2"
5383 "-DSSSE3_CFLAGS=-mssse3"
5384 "-DSSE41_CFLAGS=-msse4.1"
5385 "-DSSE42_CFLAGS=-msse4.2"
5386 "-DAVX_CFLAGS=-mavx"
5387 "-DBASE64_WITH_AVX512=OFF"))
5388 ;; i686 (32-bit x86, limited extensions)
5389 ((string-prefix? "i686-" system)
5390 (list
5391 "-DSSE41_CFLAGS=-msse4.1"
5392 "-DSSE42_CFLAGS=-msse4.2"
5393 "-DBASE64_WITH_AVX=OFF"
5394 "-DBASE64_WITH_AVX2=OFF"
5395 "-DBASE64_WITH_AVX512=OFF"))
5396 (else
5397 (list
5398 "-DBASE64_WITH_AVX2=OFF"
5399 "-DBASE64_WITH_SSSE3=OFF"
5400 "-DBASE64_WITH_SSE41=OFF"
5401 "-DBASE64_WITH_SSE42=OFF"
5402 "-DBASE64_WITH_AVX=OFF"
5403 "-DBASE64_WITH_AVX512=OFF"
5404 "-DBASE64_WITH_NEON32=OFF"
5405 "-DBASE64_WITH_NEON64=OFF")))))))
5406 (synopsis "Fast base64 stream encoder/decoder")
5407 (description "This package provides a base64 stream encoder/decoder
5408written in C99.")
5409 (properties `((tunable? . #t)))
5410 (home-page "https://github.com/aklomp/base64")
5411 (license license:bsd-2)))
5412
5413(define-public unordered-dense
5414 (package
5415 (name "unordered-dense")
5416 (version "4.8.1")
5417 (source
5418 (origin
5419 (method git-fetch)
5420 (uri (git-reference
5421 (url "https://github.com/martinus/unordered_dense")
5422 (commit (string-append "v" version))))
5423 (file-name (git-file-name name version))
5424 (sha256
5425 (base32 "02a86p2abrjkjw6kxd2gcxhknn50mcb1shrch8fhg72n534yblr5"))))
5426 ;; This library uses CMake as build system to distribute the package, but
5427 ;; uses Meson to build and launch tests. Hence, the phase 'check is replaced
5428 ;; to mimic what is defined for meson-build-system.
5429 (build-system cmake-build-system)
5430 (arguments
5431 (list
5432 #:phases
5433 #~(modify-phases %standard-phases
5434 (replace 'check
5435 (lambda* (#:key tests? #:allow-other-keys)
5436 (when tests?
5437 (substitute* "../source/test/app/doctest.h"
5438 (("#include <doctest\\.h>")
5439 "#include <doctest/doctest.h>"))
5440 (setenv "FUZZ_CORPUS_BASE_DIR"
5441 (string-append (getcwd) "/../source/data/fuzz/"))
5442 (invoke "meson" "setup" "../source/")
5443 (invoke "ninja" "--verbose" "-j"
5444 (number->string (parallel-job-count)))
5445 (setenv "MESON_TESTTHREADS"
5446 (number->string (parallel-job-count)))
5447 (invoke "meson" "test")))))))
5448 (native-inputs (list meson pkg-config))
5449 (inputs (list doctest fmt boost))
5450 (home-page "https://github.com/martinus/unordered_dense")
5451 (synopsis "C++17 fast and densely stored hashmap and hashset library")
5452 (description
5453 "A fast & densely stored hashmap and hashset based on robin-hood backward
5454shift deletion for C++17 and later.
5455
5456The classes @code{ankerl::unordered_dense::map} and
5457@code{ankerl::unordered_dense::set} are (almost) drop-in replacements of
5458@code{std::unordered_map} and @code{std::unordered_set.} While they don't have
5459as strong iterator / reference stability guarantees, they are typically much
5460faster. Additionally, there are @code{ankerl::unordered_dense::segmented_map}
5461and @code{ankerl::unordered_dense::segmented_set} with lower peak memory usage,
5462and stable references (iterators are NOT stable) on insert.")
5463 (license license:expat)))
5464
5465(define-public zpp-serializer
5466 (package
5467 (name "zpp-serializer")
5468 (version "0.5")
5469 (source (origin
5470 (method git-fetch)
5471 (uri (git-reference
5472 (url "https://github.com/eyalz800/serializer")
5473 (commit (string-append "v" version))))
5474 (file-name (git-file-name name version))
5475 (sha256
5476 (base32
5477 "0cmk3xx9885zgg3g96ka6cdaibi10fbpf1bi7q8lqsli6z07x4zj"))))
5478 (build-system copy-build-system)
5479 (arguments
5480 (list
5481 #:install-plan #~'(("serializer.h" "include/zpp/"))))
5482 (home-page "https://github.com/eyalz800/serializer")
5483 (synopsis "Single header standard C++ serialization framework")
5484 (description "This package provides a single-header C++14 library for
5485saving and loading C++ objects using a binary format.")
5486 (license license:expat)))
5487
5488(define-public libdivide
5489 (package
5490 (name "libdivide")
5491 (version "5.2.0")
5492 (source (origin
5493 (method git-fetch)
5494 (uri (git-reference
5495 (url "https://github.com/ridiculousfish/libdivide")
5496 (commit (string-append "v" version))))
5497 (file-name (git-file-name name version))
5498 (sha256
5499 (base32
5500 "18gpi9z9kimidkijpbrbf9vxg9s2md3nhyx9yh3n17cdj6aabgq2"))))
5501 (build-system cmake-build-system)
5502 (home-page "https://libdivide.com/")
5503 (synopsis "Header-only library for optimized integer division")
5504 (description "This package provides a header-only C and C++ library for
5505calculating integer division by using shift, add and multiply instructions.")
5506 ;; dual licensed
5507 (license (list license:zlib license:boost1.0))))
5508
5509(define-public functionalplus
5510 (package
5511 (name "functionalplus")
5512 (version "0.2.27")
5513 (source (origin
5514 (method git-fetch)
5515 (uri (git-reference
5516 (url "https://github.com/Dobiasd/FunctionalPlus")
5517 (commit (string-append "v" version))))
5518 (file-name (git-file-name name version))
5519 (sha256
5520 (base32
5521 "1my5npxj9fnm1lxpqnx5jpp7s278zjb9l06wdzjbg4f52z7rsm9f"))))
5522 (arguments
5523 (list
5524 #:phases
5525 #~(modify-phases %standard-phases
5526 (add-after 'unpack 'chdir
5527 (lambda _
5528 (chdir "test"))))))
5529 (build-system cmake-build-system)
5530 (native-inputs (list doctest-next))
5531 (home-page "https://github.com/Dobiasd/FunctionalPlus")
5532 (synopsis "Functional Programming Library for C++")
5533 (description "@code{FunctionalPlus} is a header-only library for
5534simplifying functional programming in C++.")
5535 (license license:boost1.0)))
5536
5537(define-public yato
5538 (let ((commit "68ee8e6bf79bd4cd7cadd1579da6549e6d11f450")
5539 (revision "0"))
5540 (package
5541 (name "yato")
5542 (version (git-version "1.1" revision commit))
5543 (source (origin
5544 (method git-fetch)
5545 (uri (git-reference
5546 (url "https://github.com/agruzdev/Yato")
5547 (commit commit)))
5548 (file-name (git-file-name name version))
5549 (sha256
5550 (base32
5551 "14rf4nizzk9mw8vv2g7jq5hk6vhmh68xg0n5qyl3fvkrnnwr57fy"))))
5552 (build-system cmake-build-system)
5553 (native-inputs (list googletest))
5554 (home-page "https://github.com/agruzdev/Yato")
5555 (synopsis "STL-styled and STL-compatible C++ utility library")
5556 (description "This package provides a collection of abstractions for C++
5557development, including containers, ranges, iterators, type traits and other
5558tools.")
5559 (license license:asl2.0))))