projects/guix·blob mpd-fix-groups · refs

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