projects/guix·blob ruby-team · refs

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