gnu: crc32c: Fix build on x86_64-linux.
[jackhill/guix/guix.git] / gnu / packages / cpp.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2017 Ethan R. Jones <doubleplusgood23@gmail.com>
3 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
4 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
5 ;;; Copyright © 2018, 2021 Ludovic Courtès <ludo@gnu.org>
6 ;;; Copyright © 2019, 2020, 2022 Mathieu Othacehe <m.othacehe@gmail.com>
7 ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
8 ;;; Copyright © 2019 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>
9 ;;; Copyright © 2020, 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
10 ;;; Copyright © 2020 Roel Janssen <roel@gnu.org>
11 ;;; Copyright © 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
12 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
13 ;;; Copyright © 2020, 2021, 2022 Vinicius Monego <monego@posteo.net>
14 ;;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
15 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
16 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
17 ;;; Copyright © 2020-2022 Greg Hogan <code@greghogan.com>
18 ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
19 ;;; Copyright © 2020 Milkey Mouse <milkeymouse@meme.institute>
20 ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
21 ;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
22 ;;; Copyright © 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
23 ;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
24 ;;; Copyright © 2021 Nikolay Korotkiy <sikmir@disroot.org>
25 ;;; Copyright © 2021 jgart <jgart@dismail.de>
26 ;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
27 ;;; Copyright © 2021 Disseminate Dissent <disseminatedissent@protonmail.com>
28 ;;; Copyright © 2022 Efraim Flashner <efraim@flashner.co.il>
29 ;;; Copyright © 2022 muradm <mail@muradm.net>
30 ;;; Copyright © 2022 Attila Lendvai <attila@lendvai.name>
31 ;;; Copyright © 2022 Arun Isaac <arunisaac@systemreboot.net>
32 ;;; Copyright © 2022 David Elsing <david.elsing@posteo.net>
33 ;;; Copyright © 2022 Zheng Junjie <873216071@qq.com>
34 ;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
35 ;;;
36 ;;; This file is part of GNU Guix.
37 ;;;
38 ;;; GNU Guix is free software; you can redistribute it and/or modify it
39 ;;; under the terms of the GNU General Public License as published by
40 ;;; the Free Software Foundation; either version 3 of the License, or (at
41 ;;; your option) any later version.
42 ;;;
43 ;;; GNU Guix is distributed in the hope that it will be useful, but
44 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
45 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
46 ;;; GNU General Public License for more details.
47 ;;;
48 ;;; You should have received a copy of the GNU General Public License
49 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
50
51 (define-module (gnu packages cpp)
52 #:use-module ((guix licenses) #:prefix license:)
53 #:use-module (guix packages)
54 #:use-module (guix download)
55 #:use-module (guix utils)
56 #:use-module (guix git-download)
57 #:use-module (guix build-system cmake)
58 #:use-module (guix build-system copy)
59 #:use-module (guix build-system gnu)
60 #:use-module (guix build-system meson)
61 #:use-module (guix build-system python)
62 #:use-module (guix build-system scons)
63 #:use-module (guix modules)
64 #:use-module (guix gexp)
65 #:use-module (gnu packages)
66 #:use-module (gnu packages autotools)
67 #:use-module (gnu packages boost)
68 #:use-module (gnu packages build-tools)
69 #:use-module (gnu packages c)
70 #:use-module (gnu packages check)
71 #:use-module (gnu packages code)
72 #:use-module (gnu packages compression)
73 #:use-module (gnu packages crypto)
74 #:use-module (gnu packages curl)
75 #:use-module (gnu packages documentation)
76 #:use-module (gnu packages gcc)
77 #:use-module (gnu packages libevent)
78 #:use-module (gnu packages libunwind)
79 #:use-module (gnu packages linux)
80 #:use-module (gnu packages llvm)
81 #:use-module (gnu packages logging)
82 #:use-module (gnu packages maths)
83 #:use-module (gnu packages onc-rpc)
84 #:use-module (gnu packages perl)
85 #:use-module (gnu packages python)
86 #:use-module (gnu packages python-check)
87 #:use-module (gnu packages pkg-config)
88 #:use-module (gnu packages popt)
89 #:use-module (gnu packages pretty-print)
90 #:use-module (gnu packages pulseaudio)
91 #:use-module (gnu packages tls)
92 #:use-module (gnu packages web)
93 #:use-module (gnu packages xml)
94 #:use-module (ice-9 match))
95
96 (define-public argagg
97 (let ((commit "79e4adfa2c6e2bfbe63da05cc668eb9ad5596748") (revision "0"))
98 (package
99 (name "argagg")
100 (version (git-version "0.4.6" revision commit))
101 (source (origin
102 (method git-fetch)
103 (uri (git-reference
104 (url "https://github.com/vietjtnguyen/argagg")
105 (commit commit)))
106 (file-name (git-file-name name version))
107 (sha256
108 (base32
109 "1flkgh524lq3024p7ld5lg743s1v7qnbmgv77578rzmn2rjzr77n"))))
110 (build-system cmake-build-system)
111 (outputs '("out" "doc"))
112 (arguments
113 `(#:phases (modify-phases %standard-phases
114 (add-after 'install 'move-doc
115 (lambda* (#:key outputs #:allow-other-keys)
116 (let* ((name ,(package-name argagg)) (out (assoc-ref
117 outputs
118 "out"))
119 (doc (assoc-ref outputs "doc")))
120 (mkdir-p (string-append doc "/share/doc"))
121 (rename-file
122 (string-append out "/share/doc/" name)
123 (string-append doc "/share/doc/" name))))))))
124 (native-inputs (list doxygen))
125 (home-page "https://github.com/vietjtnguyen/argagg")
126 (synopsis "C++11 command line argument parser")
127 (description
128 "ArgAgg is yet another C++ command line argument/option
129 parser. It was written as a simple and idiomatic alternative to other
130 frameworks like getopt, Boost program options, TCLAP, and others. The goal is
131 to achieve the majority of argument parsing needs in a simple manner with an
132 easy to use API.")
133 (license license:expat))))
134
135 (define-public asmjit
136 (let ((commit "4ec760a3d1f69e32ba460ecd2513f29b8428700b")
137 (revision "0"))
138 (package
139 (name "asmjit")
140 (version (git-version "0.0.0" revision commit))
141 (source
142 (origin
143 (method git-fetch)
144 (uri
145 (git-reference
146 (url "https://github.com/asmjit/asmjit")
147 (commit commit)))
148 (file-name (git-file-name name version))
149 (sha256
150 (base32 "0skgccbpamcbg1byawfq5n6jzxgj64hnc7jznvk35nkskaaz1nlb"))))
151 (build-system cmake-build-system)
152 (arguments
153 (list #:configure-flags #~(list "-DASMJIT_TEST=TRUE")))
154 (home-page "https://asmjit.com/")
155 (synopsis "Machine code generation for C++")
156 (description "AsmJit is a lightweight library for machine code
157 generation written in C++ language. It can generate machine code for X86 and
158 X86_64 architectures with the support for the whole instruction set from
159 legacy MMX to the newest AVX-512 and AMX. It has a type-safe API that allows
160 C++ compiler to do semantic checks at compile-time even before the assembled
161 code is generated or executed. It also provides an optional register
162 allocator that makes it easy to generate complex code without a significant
163 development effort.")
164 (license license:zlib))))
165
166 (define-public range-v3
167 (package
168 (name "range-v3")
169 (version "0.11.0")
170 (source
171 (origin
172 (method git-fetch)
173 (uri
174 (git-reference
175 (url "https://github.com/ericniebler/range-v3.git")
176 (commit version)))
177 (file-name
178 (git-file-name name version))
179 (patches (search-patches "range-v3-build-with-gcc10.patch"))
180 (sha256
181 (base32 "18230bg4rq9pmm5f8f65j444jpq56rld4fhmpham8q3vr1c1bdjh"))))
182 (build-system cmake-build-system)
183 (arguments
184 (list
185 #:configure-flags
186 #~(list "-DRANGES_NATIVE=OFF")))
187 (native-inputs
188 (list doxygen gcc-9 perl))
189 (inputs
190 (list boost))
191 (synopsis "Range library for C++14/17/20")
192 (description "Range-v3 is an extension of the Standard Template Library that
193 makes its iterators and algorithms more powerful by making them composable.
194 Unlike other range-like solutions which, seek to do away with iterators, in
195 range-v3 ranges are an abstraction layer on top of iterators.")
196 (home-page "https://github.com/ericniebler/range-v3/")
197 (license
198 (list
199 ;; Elements of Programming
200 (license:x11-style "file:///LICENSE.txt")
201 ;; SGI STL
202 license:sgifreeb2.0
203 ;;; LibC++ (dual-licensed)
204 license:expat
205 license:ncsa
206 ;; Others
207 license:boost1.0))))
208
209 (define-public c++-gsl
210 (package
211 (name "c++-gsl")
212 (version "3.1.0")
213 (source
214 (origin
215 (method git-fetch)
216 (uri
217 (git-reference
218 (url "https://github.com/microsoft/GSL.git")
219 (commit
220 (string-append "v" version))))
221 (file-name
222 (git-file-name name version))
223 (patches
224 (search-patches
225 "c++-gsl-find-system-gtest.patch"
226 "c++-gsl-move-array-bounds-tests.patch"))
227 (sha256
228 (base32 "0gbvr48f03830g3154bjhw92b8ggmg6wwh5xyb8nppk9v6w752l0"))))
229 (build-system cmake-build-system)
230 (native-inputs
231 (list googletest pkg-config))
232 (synopsis "Guidelines Support Library")
233 (description "c++-gsl contains functions and types that are suggested for
234 use by the C++ Core Guidelines maintained by the Standard C++ Foundation.")
235 (home-page "https://github.com/microsoft/GSL/")
236 (license license:expat)))
237
238 (define-public c2ffi
239 (package
240 (name "c2ffi")
241 ;; As per the c2ffi README: the first three elements are encoding the
242 ;; required Clang/LLVM version, and the last one is the c2ffi revision.
243 (version "12.0.0.0")
244 (source
245 (origin
246 (method git-fetch)
247 (uri (git-reference
248 (url "https://github.com/rpav/c2ffi")
249 (commit (string-append "v" version))))
250 (file-name (git-file-name name version))
251 (sha256
252 (base32 "1qq8dfismd20d9kfxpfvwz07v9mfvd0y7p5r3c92mk2pm4xnmzfy"))
253 (modules '((guix build utils)))
254 (snippet
255 '(substitute* "CMakeLists.txt"
256 ;; Guix seems to be packaging LLVM libs separately thus -lLLVM
257 ;; won't work, every used library must be specified explicitly.
258 (("c2ffi PUBLIC clang-cpp LLVM")
259 "c2ffi PUBLIC clang-cpp LLVMCore LLVMSupport LLVMMCParser \
260 LLVMOption LLVMBitReader LLVMProfileData")))))
261 (build-system cmake-build-system)
262 (arguments
263 '(;; If LLVM was built without RTTI, we need to also be built without
264 ;; it. See: https://stackoverflow.com/q/11904519
265 #:configure-flags '("-DCMAKE_CXX_FLAGS=-fno-rtti")
266 #:phases
267 (modify-phases %standard-phases
268 (replace 'check
269 (lambda* (#:key tests? #:allow-other-keys)
270 (when tests?
271 (invoke "./bin/c2ffi" "--help")))))))
272 (native-inputs
273 (list clang-12)) ; CMakeLists.txt invokes `clang -print-resource-dir`
274 (inputs
275 (list clang-12)) ; Compiled with gcc, but links against libclang-cpp.so
276 (home-page "https://github.com/rpav/c2ffi")
277 (synopsis "Clang-based FFI wrapper generator")
278 (description
279 "@code{c2ffi} is a tool for extracting definitions from C, C++, and
280 Objective C headers for use with foreign function call interfaces. It uses
281 the @code{Clang/LLVM} infrastructure to extract the data, and emits it in
282 various formats, including @code{json}.")
283 (license license:gpl2+)))
284
285 (define-public libzen
286 (package
287 (name "libzen")
288 (version "0.4.39")
289 (source (origin
290 (method url-fetch)
291 ;; Warning: This source has proved unreliable 1 time at least.
292 ;; Consider an alternate source or report upstream if this
293 ;; happens again.
294 (uri (string-append "https://mediaarea.net/download/source/"
295 "libzen/" version "/"
296 "libzen_" version ".tar.bz2"))
297 (sha256
298 (base32
299 "1rwaxmid9iv65n0y6xlcyxxydsvihjni9ldxpg6pbqz43amp49xx"))))
300 (native-inputs
301 (list autoconf automake libtool))
302 (build-system gnu-build-system)
303 (arguments
304 '(#:phases
305 ;; The build scripts are not at the root of the archive.
306 (modify-phases %standard-phases
307 (add-after 'unpack 'pre-configure
308 (lambda _
309 (chdir "Project/GNU/Library"))))))
310 (home-page "https://github.com/MediaArea/ZenLib")
311 (synopsis "C++ utility library")
312 (description "ZenLib is a C++ utility library. It includes classes for handling
313 strings, configuration, bit streams, threading, translation, and cross-platform
314 operating system functions.")
315 (license license:zlib)))
316
317 (define-public rttr
318 (package
319 (name "rttr")
320 (version "0.9.6")
321 (source
322 (origin
323 (method git-fetch)
324 (uri (git-reference
325 (url "https://github.com/rttrorg/rttr/")
326 (commit (string-append "v" version))))
327 (sha256
328 (base32 "1yxad8sj40wi75hny8w6imrsx8wjasjmsipnlq559n4b6kl84ijp"))
329 (file-name (git-file-name name version))))
330 (build-system cmake-build-system)
331 (arguments
332 '(;; No check target. Setting test-target to "unit_test" runs it twice.
333 #:tests? #f
334 #:configure-flags
335 '("-DBUILD_DOCUMENTATION=OFF" "-DBUILD_EXAMPLES=OFF")
336 #:phases
337 (modify-phases %standard-phases
338 ;; library_test fails in chroot.
339 (add-after 'unpack 'skip-library-test
340 (lambda _
341 (substitute* "src/unit_tests/unit_tests.cmake"
342 (("misc/library_test.cpp") ""))
343 #t)))))
344 (native-inputs (list pkg-config))
345 (home-page "https://github.com/rttrorg/rttr/")
346 (synopsis "C++ Reflection Library")
347 (description
348 "RTTR stands for Run Time Type Reflection. It describes the ability of a
349 computer program to introspect and modify an object at runtime. It is also
350 the name of the library itself, which is written in C++.")
351 (license license:expat)))
352
353 (define-public rct
354 (let* ((commit "b3e6f41d9844ef64420e628e0c65ed98278a843a")
355 (revision "2"))
356 (package
357 (name "rct")
358 (version (git-version "0.0.0" revision commit))
359 (source (origin
360 (method git-fetch)
361 (uri (git-reference
362 (url "https://github.com/Andersbakken/rct")
363 (commit commit)))
364 (sha256
365 (base32
366 "1m2931jacka27ghnpgf1z1plkkr64z0pga4r4zdrfpp2d7xnrdvb"))
367 (patches (search-patches "rct-add-missing-headers.patch"))
368 (file-name (git-file-name name version))))
369 (build-system cmake-build-system)
370 (arguments
371 '(#:configure-flags
372 '("-DWITH_TESTS=ON" ; To run the test suite
373 "-DRCT_RTTI_ENABLED=ON")))
374 (native-inputs
375 (list cppunit pkg-config))
376 (inputs
377 (list openssl zlib))
378 (home-page "https://github.com/Andersbakken/rct")
379 (synopsis "C++ library providing Qt-like APIs on top of the STL")
380 (description "Rct is a set of C++ tools that provide nicer (more Qt-like)
381 APIs on top of Standard Template Library (@dfn{STL}) classes.")
382 (license (list license:expat ; cJSON
383 license:bsd-4))))) ; everything else (LICENSE.txt)
384
385 (define-public dashel
386 (package
387 (name "dashel")
388 (version "1.3.3")
389 (source
390 (origin
391 (method git-fetch)
392 (uri (git-reference
393 (url "https://github.com/aseba-community/dashel")
394 (commit version)))
395 (sha256
396 (base32 "0anks2l2i2qp0wlzqck1qgpq15a3l6dg8lw2h8s4nsj7f61lffwy"))
397 (file-name (git-file-name name version))))
398 (build-system cmake-build-system)
399 (arguments '(#:tests? #f)) ; no tests
400 (native-inputs (list pkg-config))
401 (home-page "https://github.com/aseba-community/dashel")
402 (synopsis "Data stream helper encapsulation library")
403 (description
404 "Dashel is a data stream helper encapsulation C++ library. It provides a
405 unified access to TCP/UDP sockets, serial ports, console, and files streams.
406 It also allows a server application to wait for any activity on any
407 combination of these streams.")
408 (license license:bsd-3)))
409
410 (define-public xsimd
411 (package
412 (name "xsimd")
413 (version "9.0.1")
414 (source
415 (origin
416 (method git-fetch)
417 (uri (git-reference
418 (url "https://github.com/QuantStack/xsimd")
419 (commit version)))
420 (sha256
421 (base32 "1fcy0djwpwvls6yqxqa82s4l4gvwkqkr8i8bibbb3dm0lqvhnw52"))
422 (file-name (git-file-name name version))))
423 (build-system cmake-build-system)
424 (arguments
425 `(#:configure-flags (list "-DBUILD_TESTS=ON")
426 #:test-target "xtest"))
427 (native-inputs
428 (list googletest))
429 (home-page "https://github.com/xtensor-stack/xsimd")
430 (synopsis "C++ wrappers for SIMD intrinsics and math implementations")
431 (description
432 "xsimd provides a unified means for using @acronym{SIMD, single instruction
433 multiple data} features for library authors. Namely, it enables manipulation of
434 batches of numbers with the same arithmetic operators as for single values.
435 It also provides accelerated implementation of common mathematical functions
436 operating on batches.")
437 (license license:bsd-3)))
438
439 (define-public google-highway
440 (package
441 (name "google-highway")
442 (version "1.0.2")
443 (source
444 (origin
445 (method git-fetch)
446 (uri (git-reference
447 (url "https://github.com/google/highway")
448 (commit version)))
449 (file-name (git-file-name name version))
450 (sha256
451 (base32 "1dxv61ag0pl5nl6ql4k83k4i95937nhl98img8gz9fx76cpw6z08"))))
452 (build-system cmake-build-system)
453 (arguments
454 `(#:configure-flags (list "-DHWY_SYSTEM_GTEST=on")))
455 (native-inputs
456 (list googletest))
457 (home-page "https://github.com/google/highway")
458 (synopsis "SIMD library with runtime dispatch")
459 (description "Highway is a performance-portable, length-agnostic C++
460 library for SIMD (Single Instruction, Multiple Data) with runtime dispatch.")
461 (license license:asl2.0)))
462
463 (define-public xsimd-benchmark
464 (package
465 (inherit xsimd)
466 (name "xsimd-benchmark")
467 (arguments
468 `(#:configure-flags (list "-DBUILD_BENCHMARK=ON" "-DBUILD_EXAMPLES=ON")
469 #:tests? #f
470 #:phases (modify-phases %standard-phases
471 (add-after 'unpack 'remove-march=native
472 (lambda _
473 (substitute* "benchmark/CMakeLists.txt"
474 (("-march=native") ""))))
475 (replace 'install
476 (lambda* (#:key outputs #:allow-other-keys)
477 ;; Install nothing but the executables.
478 (let ((out (assoc-ref outputs "out")))
479 (install-file "benchmark/benchmark_xsimd"
480 (string-append out "/bin"))
481 (install-file "examples/mandelbrot"
482 (string-append out "/bin"))))))))
483 (synopsis "Benchmark of the xsimd library")
484
485 ;; Mark as tunable to take advantage of SIMD code in xsimd/xtensor.
486 (properties '((tunable? . #t)))))
487
488 (define-public chaiscript
489 (package
490 (name "chaiscript")
491 (version "6.1.0")
492 (source
493 (origin
494 (method git-fetch)
495 (uri (git-reference
496 (url "https://github.com/ChaiScript/ChaiScript")
497 (commit (string-append "v" version))))
498 (file-name (git-file-name name version))
499 (sha256
500 (base32 "0i1c88rn1wwz8nf3dpapcdkk4w623m3nksfy5yjai10k9irkzy3c"))))
501 (build-system cmake-build-system)
502 (home-page "https://chaiscript.com/")
503 (synopsis "Embedded scripting language designed for C++")
504 (description
505 "ChaiScript is one of the only embedded scripting language designed from
506 the ground up to directly target C++ and take advantage of modern C++
507 development techniques. Being a native C++ application, it has some advantages
508 over existing embedded scripting languages:
509
510 @enumerate
511 @item Uses a header-only approach, which makes it easy to integrate with
512 existing projects.
513 @item Maintains type safety between your C++ application and the user scripts.
514 @item Supports a variety of C++ techniques including callbacks, overloaded
515 functions, class methods, and stl containers.
516 @end enumerate\n")
517 (license license:bsd-3)))
518
519 (define-public fifo-map
520 (package
521 (name "fifo-map")
522 (version "1.0.0")
523 (home-page "https://github.com/nlohmann/fifo_map")
524 (source (origin
525 (method git-fetch)
526 (uri (git-reference
527 (url home-page)
528 (commit (string-append "v" version))))
529 (sha256
530 (base32
531 "0y59fk6ycrgjln9liwcja3l5j1vxpa5i671bynpbsjlyq5f2560q"))
532 (patches (search-patches "fifo-map-remove-catch.hpp.patch"
533 "fifo-map-fix-flags-for-gcc.patch"))
534 (file-name (git-file-name name version))
535 (modules '((guix build utils)))
536 (snippet '(delete-file-recursively "./test/thirdparty"))))
537 (inputs
538 (list catch2-1))
539 (build-system cmake-build-system)
540 (arguments
541 '(#:phases
542 (modify-phases %standard-phases
543 (replace 'check
544 (lambda* (#:key tests? #:allow-other-keys)
545 (when tests? (invoke "./unit"))))
546 (replace 'install
547 (lambda* (#:key outputs #:allow-other-keys)
548 (let* ((out (assoc-ref outputs "out"))
549 (inc (string-append out "/include/fifo_map")))
550 (with-directory-excursion "../source"
551 (install-file "src/fifo_map.hpp" inc))))))))
552 (synopsis "FIFO-ordered associative container for C++")
553 (description "Fifo_map is a C++ header only library for associative
554 container which uses the order in which keys were inserted to the container
555 as ordering relation.")
556 (license license:expat)))
557
558 (define-public json-dto
559 (package
560 (name "json-dto")
561 (version "0.3.1")
562 (source (origin
563 (method git-fetch)
564 (uri (git-reference
565 (url "https://github.com/Stiffstream/json_dto")
566 (commit (string-append "v." version))))
567 (file-name (git-file-name name version))
568 (sha256
569 (base32
570 "0wr1srp08fr2mv4fmnqr626pwiw60svn6wkvy2xg7j080mgwb3ml"))))
571 (build-system cmake-build-system)
572 (arguments
573 (list
574 #:configure-flags #~(list "-DJSON_DTO_INSTALL_SAMPLES=OFF")
575 #:phases
576 #~(modify-phases %standard-phases
577 (add-after 'unpack 'change-directory
578 (lambda _
579 (chdir "dev"))))))
580 (native-inputs (list catch2))
581 (propagated-inputs (list rapidjson)) ;#include'd
582 (home-page "https://github.com/Stiffstream/json_dto")
583 (synopsis "JSON to C++ structures conversion library")
584 (description "@code{json_dto} library is a small header-only helper for
585 converting data between JSON representation and C++ structs. DTO stands for
586 data transfer object.")
587 (license license:bsd-3)))
588
589 (define-public json-modern-cxx
590 (package
591 (name "json-modern-cxx")
592 (version "3.10.5")
593 (home-page "https://github.com/nlohmann/json")
594 (source
595 (origin
596 (method git-fetch)
597 (uri (git-reference (url home-page)
598 (commit (string-append "v" version))))
599 (sha256
600 (base32 "1f9mi45ilwjc2w92grjc53sw038840bjpn8yjf6wc6bxs2nijfqd"))
601 (file-name (git-file-name name version))
602 (modules '((guix build utils)))
603 (snippet
604 '(begin
605 ;; Delete bundled software. Preserve doctest_compatibility.h, which
606 ;; is a wrapper library added by this package.
607 (install-file "./test/thirdparty/doctest/doctest_compatibility.h" "/tmp")
608 (for-each delete-file-recursively
609 '("./third_party" "./test/thirdparty"))
610 (install-file "/tmp/doctest_compatibility.h" "./test/thirdparty/doctest")
611
612 ;; Adjust for the unbundled fifo_map and doctest.
613 (substitute* "./test/thirdparty/doctest/doctest_compatibility.h"
614 (("#include \"doctest\\.h\"")
615 "#include <doctest/doctest.h>"))
616 (with-directory-excursion "test/src"
617 (let ((files (find-files "." "\\.cpp$")))
618 (substitute* files
619 (("#include ?\"(fifo_map.hpp)\"" all fifo-map-hpp)
620 (string-append
621 "#include <fifo_map/" fifo-map-hpp ">")))))))))
622 (build-system cmake-build-system)
623 (arguments
624 '(#:configure-flags
625 (list "-DJSON_MultipleHeaders=ON" ; For json_fwd.hpp.
626 (string-append "-DJSON_TestDataDirectory="
627 (dirname
628 (search-input-directory %build-inputs
629 "json_nlohmann_tests"))))
630 #:phases (modify-phases %standard-phases
631 (replace 'check
632 (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
633 (if tests?
634 ;; Some tests need git and a full checkout, skip those.
635 (invoke "ctest" "-LE" "git_required"
636 "-j" (if parallel-tests?
637 (number->string (parallel-job-count))
638 "1"))
639 (format #t "test suite not run~%")))))))
640 (native-inputs
641 (list amalgamate
642 (let ((version "3.0.0"))
643 (origin
644 (method git-fetch)
645 (uri (git-reference
646 (url "https://github.com/nlohmann/json_test_data")
647 (commit (string-append "v" version))))
648 (file-name (git-file-name "json_test_data" version))
649 (sha256
650 (base32
651 "0nzsjzlvk14dazwh7k2jb1dinb0pv9jbx5jsyn264wvva0y7daiv"))))))
652 (inputs
653 (list doctest fifo-map))
654 (synopsis "JSON parser and printer library for C++")
655 (description "JSON for Modern C++ is a C++ JSON library that provides
656 intuitive syntax and trivial integration.")
657 (license license:expat)))
658
659 (define-public xtl
660 (package
661 (name "xtl")
662 (version "0.7.4")
663 (source (origin
664 (method git-fetch)
665 (uri
666 (git-reference
667 (url "https://github.com/QuantStack/xtl")
668 (commit version)))
669 (sha256
670 (base32
671 "134pgvmf9cx5dxs0m0m3qhp3m3r1gl86ic3xax21zc4sdj8sdq46"))
672 (file-name (git-file-name name version))))
673 (native-inputs
674 (list doctest googletest json-modern-cxx))
675 (arguments
676 '(#:configure-flags
677 '("-DBUILD_TESTS=ON")
678 #:phases
679 (modify-phases %standard-phases
680 (replace 'check
681 (lambda* _
682 (with-directory-excursion "test"
683 (invoke "./test_xtl")))))))
684 (home-page "https://github.com/QuantStack/xtl")
685 (build-system cmake-build-system)
686 (synopsis "C++ template library providing some basic tools")
687 (description "xtl is a C++ header-only template library providing basic
688 tools (containers, algorithms) used by other QuantStack packages.")
689 (license license:bsd-3)))
690
691 (define-public ccls
692 (package
693 (name "ccls")
694 (version "0.20220729")
695 (source
696 (origin
697 (method git-fetch)
698 (uri (git-reference
699 (url "https://github.com/MaskRay/ccls")
700 (commit version)))
701 (sha256
702 (base32 "0cp534n7afl0rrr778cc0bnd8w091qmyqdpp5k1jh4wxla9s09br"))
703 (file-name (git-file-name name version))))
704 (build-system cmake-build-system)
705 (arguments
706 '(#:tests? #f)) ; no check target
707 (inputs
708 (list rapidjson))
709 (native-inputs
710 (list clang llvm))
711 (home-page "https://github.com/MaskRay/ccls")
712 (synopsis "C/C++/Objective-C language server")
713 (description
714 "@code{ccls} is a server implementing the Language Server Protocol (LSP)
715 for C, C++ and Objective-C languages. It uses @code{clang} to perform static
716 code analysis and supports cross references, hierarchies, completion and
717 syntax highlighting. @code{ccls} is derived from @code{cquery} which is not
718 maintained anymore.")
719 (license license:asl2.0)))
720
721 (define-public concurrentqueue
722 (package
723 (name "concurrentqueue")
724 (version "1.0.3")
725 (source
726 (origin
727 (method git-fetch)
728 (uri (git-reference
729 (url "https://github.com/cameron314/concurrentqueue/")
730 (commit "3747268264d0fa113e981658a99ceeae4dad05b7")))
731 (file-name (git-file-name name version))
732 (sha256
733 (base32 "1n5v7n27llzg7khg1jvi35jrcf9v6adw8gaic9ndxn65dp723ssy"))))
734 (build-system cmake-build-system)
735 (arguments '(#:tests? #false)) ;no check target
736 (home-page "https://github.com/cameron314/concurrentqueue/")
737 (synopsis "Multi-producer, multi-consumer lock-free concurrent queue for C++11")
738 (description
739 "This package provides a fast multi-producer, multi-consumer lock-free
740 concurrent queue for C++11.")
741 (license license:bsd-2)))
742
743 (define-public spscqueue
744 (package
745 (name "spscqueue")
746 (version "1.1")
747 (source
748 (origin
749 (method git-fetch)
750 (uri (git-reference
751 (url "https://github.com/rigtorp/SPSCQueue/")
752 (commit (string-append "v" version))))
753 (file-name (git-file-name name version))
754 (sha256
755 (base32 "1428cj9x318afvnvnkhg0711iy4czqn86fi7ysgfhw91asa316rc"))))
756 (build-system cmake-build-system)
757 (home-page "https://github.com/rigtorp/SPSCQueue/")
758 (synopsis "Single producer single consumer queue written in C++11")
759 (description
760 "This package provides a single producer single consumer wait-free and
761 lock-free fixed size queue written in C++11.")
762 (license license:expat)))
763
764 (define-public gperftools
765 (package
766 (name "gperftools")
767 (version "2.10")
768 (source
769 (origin
770 (method git-fetch)
771 (uri (git-reference
772 (url "https://github.com/gperftools/gperftools")
773 (commit (string-append "gperftools-" version))))
774 (sha256
775 (base32 "0s9qhx940s8q6glc8sw74k5gs8hdhjfigq20zci92qawgm7zsicm"))
776 (file-name (git-file-name name version))))
777 (build-system gnu-build-system)
778 (arguments
779 ;; The tests are flaky when run in parallel. For more info:
780 ;; https://bugs.gnu.org/46562
781 '(#:parallel-tests? #f))
782 (native-inputs
783 (list autoconf automake libtool
784 ;; For tests.
785 perl))
786 (home-page "https://github.com/gperftools/gperftools")
787 (synopsis "Multi-threaded malloc() and performance analysis tools for C++")
788 (description
789 "@code{gperftools} is a collection of a high-performance multi-threaded
790 malloc() implementation plus some thread-friendly performance analysis
791 tools:
792
793 @itemize
794 @item tcmalloc,
795 @item heap profiler,
796 @item heap checker,
797 @item CPU checker.
798 @end itemize\n")
799 (license license:bsd-3)))
800
801 (define-public cpp-httplib
802 ;; this package is not graftable, as everything is implemented in a single
803 ;; header
804 (package
805 (name "cpp-httplib")
806 (version "0.8.8")
807 (source
808 (origin
809 (method git-fetch)
810 (uri (git-reference
811 (url "https://github.com/yhirose/cpp-httplib")
812 (commit (string-append "v" version))))
813 (sha256
814 (base32 "0c0gyfbvm34bgrqy9fhfxw1f8nb9zhf063j7xq91k892flb7qm1c"))
815 (file-name (git-file-name name version))))
816 (build-system cmake-build-system)
817 (arguments
818 `(#:configure-flags
819 '("-DBUILD_SHARED_LIBS=ON"
820 "-DHTTPLIB_COMPILE=ON"
821 "-DHTTPLIB_REQUIRE_BROTLI=ON"
822 "-DHTTPLIB_REQUIRE_OPENSSL=ON"
823 "-DHTTPLIB_REQUIRE_ZLIB=ON")
824 #:phases
825 (modify-phases %standard-phases
826 (add-after 'unpack 'disable-network-tests
827 (lambda _
828 (for-each
829 (lambda (test)
830 (substitute* "test/test.cc"
831 (((string-append "\\(" test))
832 (string-append "(DISABLED_" test))))
833 ;; There are tests requiring network access, disable them
834 '("AbsoluteRedirectTest" "BaseAuthTest" "CancelTest"
835 "ChunkedEncodingTest" "ChunkedEncodingTest"
836 "DecodeWithChunkedEncoding" "DefaultHeadersTest"
837 "DigestAuthTest" "HttpsToHttpRedirectTest"
838 "RangeTest" "RedirectTest" "RelativeRedirectTest"
839 "SSLClientTest" "SendAPI" "TooManyRedirectTest" "UrlWithSpace"
840 "YahooRedirectTest" "YahooRedirectTest"))))
841 (replace 'check
842 (lambda* (#:key source tests? #:allow-other-keys)
843 ;; openssl genrsa wants to write a file in the git checkout
844 (when tests?
845 (with-directory-excursion "../source/test"
846 (invoke "make"))))))))
847 (native-inputs
848 ;; required to build shared lib
849 (list python))
850 (inputs
851 (list brotli openssl zlib))
852 (home-page "https://github.com/yhirose/cpp-httplib")
853 (synopsis "C++ HTTP/HTTPS server and client library")
854 (description "cpp-httplib is a C++11 single-file cross platform blocking
855 HTTP/HTTPS library, easy to setup. It can also be used as a single-header
856 library.")
857 (license license:expat)))
858
859 (define-public cpplint
860 (package
861 (name "cpplint")
862 (version "1.5.5")
863 (source
864 (origin
865 (method git-fetch)
866 ;; Fetch from github instead of pypi, since the test cases are not in
867 ;; the pypi archive.
868 (uri (git-reference
869 (url "https://github.com/cpplint/cpplint")
870 (commit version)))
871 (sha256
872 (base32 "13l86aq0h1jga949k79k9x3hw2xqchjc162sclg2f99vz98zcz15"))
873 (file-name (git-file-name name version))))
874 (arguments
875 (list #:modules `((srfi srfi-1)
876 (srfi srfi-26)
877 ,@%python-build-system-modules)
878 #:phases
879 #~(modify-phases (@ (guix build python-build-system) %standard-phases)
880 (add-before 'wrap 'reduce-GUIX_PYTHONPATH
881 (lambda _
882 ;; Hide the transitive native inputs from GUIX_PYTHONPATH
883 ;; to prevent them from ending up in the run-time closure.
884 ;; See also <https://bugs.gnu.org/25235>.
885 (let ((transitive-native-inputs
886 '#$(match (package-transitive-native-inputs
887 this-package)
888 (((labels packages) ...) packages))))
889 ;; Save the original PYTHONPATH because we need it for
890 ;; tests later.
891 (setenv "TMP_PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
892 (setenv "GUIX_PYTHONPATH"
893 (string-join
894 (filter (lambda (path)
895 (not (any (cut string-prefix? <> path)
896 transitive-native-inputs)))
897 (search-path-as-string->list
898 (getenv "GUIX_PYTHONPATH")))
899 ":")))))
900 (add-after 'wrap 'reset-GUIX_PYTHONPATH
901 (lambda _
902 (setenv "GUIX_PYTHONPATH"
903 (getenv "TMP_PYTHONPATH"))))
904 (replace 'check
905 (lambda* (#:key tests? #:allow-other-keys)
906 (when tests?
907 (invoke "pytest" "-vv")))))))
908 (build-system python-build-system)
909 (native-inputs
910 (list python-coverage
911 python-pytest
912 python-pytest-cov
913 python-pytest-runner
914 python-testfixtures))
915 (home-page "https://github.com/cpplint/cpplint")
916 (synopsis "Static code checker for C++")
917 (description "@code{cpplint} is a command-line tool to check C/C++ files
918 for style issues following Google’s C++ style guide. While Google maintains
919 its own version of the tool, this is a fork that aims to be more responsive
920 and make @code{cpplint} usable in wider contexts.")
921 (license license:bsd-3)))
922
923 (define-public reproc
924 (package
925 (name "reproc")
926 (version "14.2.4")
927 (source
928 (origin
929 (method git-fetch)
930 (uri (git-reference
931 (url "https://github.com/DaanDeMeyer/reproc")
932 (commit (string-append "v" version))))
933 (file-name (git-file-name name version))
934 (sha256
935 (base32 "09xnf8hmld1fk8j33zwlz1qcxnjdx1ncbg62csic9va4m1wc2v1d"))))
936 (build-system cmake-build-system)
937 (arguments
938 ;; No tests.
939 `(#:tests? #f
940 ;; Build the shared library instead of a static one.
941 #:configure-flags `("-DBUILD_SHARED_LIBS=1")))
942 (native-inputs
943 (list pkg-config))
944 (synopsis "Process IO library")
945 (description "reproc (Redirected Process) is a C/C++ library that
946 simplifies starting, stopping and communicating with external programs. The
947 main use case is executing command line applications directly from C or C++
948 code and retrieving their output.")
949 (home-page "https://github.com/DaanDeMeyer/reproc")
950 (license license:expat)))
951
952 (define-public sobjectizer
953 (package
954 (name "sobjectizer")
955 (version "5.7.2.6")
956 (source
957 (origin
958 (method git-fetch)
959 (uri (git-reference
960 (url "https://github.com/Stiffstream/sobjectizer")
961 (commit (string-append "v." version))))
962 (sha256
963 (base32 "0n6smpjkkkw0xab8wcpy3p0dpw2v9sxgwl6azl3am6abmv4mff12"))
964 (file-name (git-file-name name version))))
965 (build-system cmake-build-system)
966 (arguments
967 `(#:tests? #f
968 #:phases
969 (modify-phases %standard-phases
970 (add-after 'unpack 'change-directory
971 (lambda _
972 (chdir "dev")
973 #t)))))
974 (home-page "https://stiffstream.com/en/products/sobjectizer.html")
975 (synopsis "Cross-platform actor framework for C++")
976 (description
977 "SObjectizer is a cross-platform \"actor frameworks\" for C++.
978 SObjectizer supports not only the Actor Model but also the Publish-Subscribe
979 Model and CSP-like channels. The goal of SObjectizer is to simplify
980 development of concurrent and multithreaded applications in C++.")
981 (license license:bsd-3)))
982
983 (define-public tweeny
984 (package
985 (name "tweeny")
986 (version "3")
987 (source
988 (origin
989 (method git-fetch)
990 (uri (git-reference
991 (url "https://github.com/mobius3/tweeny")
992 (commit (string-append "v" version))))
993 (file-name (git-file-name name version))
994 (sha256
995 (base32 "1adm4c17pi7xf3kf6sjyxibz5rdg1ka236p72xsm6js4j9gzlbp4"))))
996 (arguments
997 '(#:tests? #f)) ;no check target
998 (build-system cmake-build-system)
999 (home-page "https://mobius3.github.io/tweeny/")
1000 (synopsis "Modern C++ tweening library")
1001 (description "@code{Tweeny} is an inbetweening library designed for the
1002 creation of complex animations for games and other beautiful interactive
1003 software. It leverages features of modern @code{C++} to empower developers with
1004 an intuitive API for declaring tweenings of any type of value, as long as they
1005 support arithmetic operations. The goal of @code{Tweeny} is to provide means to
1006 create fluid interpolations when animating position, scale, rotation, frames or
1007 other values of screen objects, by setting their values as the tween starting
1008 point and then, after each tween step, plugging back the result.")
1009 (license license:expat)))
1010
1011 ;;; This older LTS release is kept for tensorflow.
1012 (define-public abseil-cpp-20200923.3
1013 (package
1014 (name "abseil-cpp")
1015 (version "20200923.3")
1016 (source (origin
1017 (method git-fetch)
1018 (uri (git-reference
1019 (url "https://github.com/abseil/abseil-cpp")
1020 (commit version)))
1021 (file-name (git-file-name name version))
1022 (sha256
1023 (base32
1024 "1p4djhm1f011ficbjjxx3n8428p8481p20j4glpaawnpsi362hkl"))
1025 (patches
1026 (search-patches "abseil-cpp-fix-strerror_test.patch"))))
1027 (build-system cmake-build-system)
1028 (arguments
1029 `(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON"
1030 "-DABSL_RUN_TESTS=ON"
1031 "-DABSL_USE_EXTERNAL_GOOGLETEST=ON"
1032 ;; Needed, else we get errors like:
1033 ;;
1034 ;; ld: CMakeFiles/absl_periodic_sampler_test.dir/internal/periodic_sampler_test.cc.o:
1035 ;; undefined reference to symbol '_ZN7testing4Mock16UnregisterLockedEPNS_8internal25UntypedFunctionMockerBaseE'
1036 ;; ld: /gnu/store/...-googletest-1.10.0/lib/libgmock.so:
1037 ;; error adding symbols: DSO missing from command line
1038 ;; collect2: error: ld returned 1 exit status
1039 "-DCMAKE_EXE_LINKER_FLAGS=-lgtest -lpthread -lgmock")
1040 #:phases
1041 (modify-phases %standard-phases
1042 (add-before 'configure 'remove-gtest-check
1043 ;; The CMakeLists fails to find our googletest for some reason, but
1044 ;; it works nonetheless.
1045 (lambda _
1046 (substitute* "CMakeLists.txt"
1047 (("check_target\\(gtest\\)") "")
1048 (("check_target\\(gtest_main\\)") "")
1049 (("check_target\\(gmock\\)") "")))))))
1050 (native-inputs
1051 (list googletest))
1052 (home-page "https://abseil.io")
1053 (synopsis "Augmented C++ standard library")
1054 (description "Abseil is a collection of C++ library code designed to
1055 augment the C++ standard library. The Abseil library code is collected from
1056 Google's C++ code base.")
1057 (license license:asl2.0)))
1058
1059 (define-public abseil-cpp
1060 (let ((base abseil-cpp-20200923.3))
1061 (package
1062 (inherit base)
1063 (name "abseil-cpp")
1064 (version "20220623.1")
1065 (source (origin
1066 (method git-fetch)
1067 (uri (git-reference
1068 (url "https://github.com/abseil/abseil-cpp")
1069 (commit version)))
1070 (file-name (git-file-name name version))
1071 (sha256
1072 (base32
1073 "0vxh2a74g4s45yr8kdjqnzl64k10qdlc0hbnn987a4cnwdj4bp9r"))))
1074 (arguments
1075 (substitute-keyword-arguments (package-arguments base)
1076 ((#:configure-flags flags)
1077 `(cons* "-DBUILD_TESTING=ON"
1078 (delete "-DABSL_RUN_TESTS=ON" ,flags))))))))
1079
1080 (define-public abseil-cpp-cxxstd17
1081 (let ((base abseil-cpp))
1082 (hidden-package
1083 (package/inherit base
1084 (arguments
1085 (substitute-keyword-arguments (package-arguments base)
1086 ((#:configure-flags flags)
1087 #~(cons* "-DCMAKE_CXX_STANDARD=17" #$flags))))))))
1088
1089 (define-public pegtl
1090 (package
1091 (name "pegtl")
1092 (version "3.2.7")
1093 (source (origin
1094 (method git-fetch)
1095 (uri (git-reference
1096 (url "https://github.com/taocpp/PEGTL")
1097 (commit version)))
1098 (file-name (git-file-name name version))
1099 (sha256
1100 (base32
1101 "01adjqqdr9yf4h379jl1x0526kvixfpqk4hdk9mna49qc4s5hpi1"))))
1102 (build-system cmake-build-system)
1103 (home-page "https://github.com/taocpp/PEGTL")
1104 (synopsis "Parsing Expression Grammar template library")
1105 (description "The Parsing Expression Grammar Template Library (PEGTL) is
1106 a zero-dependency C++ header-only parser combinator library for creating
1107 parsers according to a Parsing Expression Grammar (PEG).")
1108 (license license:expat)))
1109
1110 (define-public cxxopts
1111 (package
1112 (name "cxxopts")
1113 (version "3.0.0")
1114 (source (origin
1115 (method git-fetch)
1116 (uri (git-reference
1117 (url "https://github.com/jarro2783/cxxopts")
1118 (commit (string-append "v" version))))
1119 (file-name (git-file-name name version))
1120 (sha256
1121 (base32
1122 "08x7j168l1xwj0r3rv89cgghmfhsx98lpq35r3vkh504m1pd55a6"))))
1123 (build-system cmake-build-system)
1124 (synopsis "Lightweight C++ command line option parser")
1125 (description
1126 "A lightweight header-only C++ option parser library, supporting the
1127 standard GNU style syntax for options.")
1128 (home-page "https://github.com/jarro2783/cxxopts/wiki")
1129 (license license:expat)))
1130
1131 (define-public folly
1132 (package
1133 (name "folly")
1134 (version "2022.10.31.00")
1135 (source (origin
1136 (method git-fetch)
1137 (uri (git-reference
1138 (url "https://github.com/facebook/folly")
1139 (commit (string-append "v" version))))
1140 (file-name (git-file-name name version))
1141 (sha256
1142 (base32
1143 "06r9xnj8ilghc0vv6r17k5apl3w19iwd76nr02svnv96c74bz2aa"))))
1144 (build-system cmake-build-system)
1145 (arguments
1146 '(;; Tests must be explicitly enabled
1147 ;;#:configure-flags '("-DBUILD_TESTS=ON")))
1148 ;; Leave tests disabled; see https://github.com/facebook/folly/issues/1456
1149 #:tests? #f))
1150 (propagated-inputs
1151 (list boost gflags glog liburing))
1152 (inputs
1153 (list bzip2
1154 double-conversion
1155 fmt
1156 libaio
1157 libevent
1158 libiberty
1159 libsodium
1160 libunwind
1161 lz4
1162 openssl
1163 snappy
1164 zlib
1165 `(,zstd "lib")))
1166 (native-inputs
1167 (list googletest))
1168 (synopsis "Collection of C++ components complementing the standard library")
1169 (description
1170 "Folly (acronymed loosely after Facebook Open Source Library) is a library
1171 of C++14 components that complements @code{std} and Boost.")
1172 (home-page "https://github.com/facebook/folly/wiki")
1173 ;; 32-bit is not supported: https://github.com/facebook/folly/issues/103
1174 (supported-systems '("aarch64-linux" "x86_64-linux"))
1175 (license license:asl2.0)))
1176
1177 (define-public poco
1178 (package
1179 (name "poco")
1180 (version "1.11.1")
1181 (source (origin
1182 (method git-fetch)
1183 (uri (git-reference
1184 (url "https://github.com/pocoproject/poco")
1185 (commit (string-append "poco-" version "-release"))))
1186 (file-name (git-file-name name version))
1187 (sha256
1188 (base32
1189 "0qkf8vb4qwds6idk9fkw6wjvcdk5k8h77x3gv47l0i4jfl5hwn8b"))))
1190 (build-system cmake-build-system)
1191 (arguments
1192 (list
1193 #:configure-flags #~(list "-DENABLE_TESTS=ON")
1194 #:phases
1195 #~(modify-phases %standard-phases
1196 (add-after 'unpack 'disable-problematic-tests
1197 (lambda _
1198 (substitute* (list "Foundation/CMakeLists.txt" ; XXX: fails.
1199 ;; Require network access
1200 "Net/CMakeLists.txt"
1201 "MongoDB/CMakeLists.txt"
1202 "Redis/CMakeLists.txt")
1203 (("ENABLE_TESTS") "FALSE")))))))
1204 (home-page "https://pocoproject.org/")
1205 (synopsis "Portable C++ components")
1206 (description "This package provides a collection of C++ libraries intended
1207 to be useful for building network-based applications.")
1208 (license license:boost1.0)))
1209
1210 (define-public aws-crt-cpp
1211 (package
1212 (name "aws-crt-cpp")
1213 ;; Update only when updating aws-sdk-cpp, and when updating also update
1214 ;; versions of library dependencies linked from from
1215 ;; https://github.com/awslabs/aws-crt-cpp/tree/{aws-crt-cpp commit}/crt
1216 (version "0.17.27")
1217 (source (origin
1218 (method git-fetch)
1219 (uri (git-reference
1220 (url "https://github.com/awslabs/aws-crt-cpp")
1221 (commit (string-append "v" version))))
1222 (file-name (git-file-name name version))
1223 (sha256
1224 (base32
1225 "14g8pn7yii1klby7phcw08qnld1qv11vwmbdz8cs3mlpqahxrh4i"))))
1226 (build-system cmake-build-system)
1227 (arguments
1228 '(#:configure-flags
1229 (list "-DBUILD_DEPS=OFF"
1230 "-DBUILD_SHARED_LIBS=ON"
1231 (string-append "-DCMAKE_PREFIX_PATH="
1232 (assoc-ref %build-inputs "aws-c-common"))
1233 "-DENABLE_NET_TESTS=OFF")))
1234 (propagated-inputs
1235 (list aws-c-auth
1236 aws-c-cal
1237 aws-c-event-stream
1238 aws-c-http
1239 aws-c-mqtt
1240 aws-c-s3))
1241 (synopsis "C++ wrapper for Amazon Web Services C libraries")
1242 (description "The AWS Common Runtime (CRT) library provides a C++ wrapper
1243 implementation for the following @acronym{AWS,Amazon Web Services} C libraries:
1244 aws-c-auth, aws-c-cal, aws-c-common, aws-c-compression, aws-c-event-stream,
1245 aws-c-http, aws-c-io, aws-c-mqtt, aws-checksums, and s2n.")
1246 (home-page "https://github.com/awslabs/aws-crt-cpp")
1247 (license license:asl2.0)))
1248
1249 (define-public aws-sdk-cpp
1250 (package
1251 (name "aws-sdk-cpp")
1252 ; When updating also check for a tagged update to aws-crt-cpp from
1253 ; https://github.com/aws/aws-sdk-cpp/tree/main/crt
1254 (version "1.9.236")
1255 (source (origin
1256 (method git-fetch)
1257 (uri (git-reference
1258 (url "https://github.com/aws/aws-sdk-cpp")
1259 (commit version)))
1260 (file-name (git-file-name name version))
1261 (sha256
1262 (base32
1263 "13qhxsbfn81r7lg382wb4d3xfc4a287ikww5i7whddk5yz0j8384"))))
1264 (build-system cmake-build-system)
1265 (arguments
1266 '(;; Tests are run during the build phase.
1267 #:tests? #f
1268 #:configure-flags
1269 (list "-DBUILD_DEPS=OFF"
1270 "-DBUILD_SHARED_LIBS=ON"
1271 (string-append "-DCMAKE_PREFIX_PATH="
1272 (assoc-ref %build-inputs "aws-c-common")))))
1273 (propagated-inputs
1274 (list aws-crt-cpp))
1275 (inputs
1276 (list curl pulseaudio zlib))
1277 (synopsis "Amazon Web Services SDK for C++")
1278 (description
1279 "The AWS SDK for C++ provides a C++11 interface to the @acronym{AWS,Amazon
1280 Web Services} API. AWS provides on-demand computing infrastructure and software
1281 services including database, analytic, and machine learning technologies.")
1282 (home-page "https://github.com/aws/aws-sdk-cpp")
1283 (license license:asl2.0)))
1284
1285 (define-public libexpected
1286 (package
1287 (name "libexpected")
1288 (version "1.0.0")
1289 (source
1290 (origin
1291 (method git-fetch)
1292 (uri (git-reference
1293 (url "https://github.com/TartanLlama/expected")
1294 (commit (string-append "v" version))
1295 ;; NOTE: Requires TL_CMAKE from custom
1296 ;; repository. Should not affect reproducibility.
1297 (recursive? #t)))
1298 (file-name (git-file-name name version))
1299 ;; NOTE: This patch will be unnecessary on subsequent tags.
1300 (patches (search-patches "libexpected-nofetch.patch"))
1301 (sha256
1302 (base32 "1ckzfrljzzdw9wf8hvdfjz4wjx5na57iwxc48mbv9rf5067m21a5"))))
1303 (build-system cmake-build-system)
1304 ;; TODO: Clean up install phase.
1305 (arguments
1306 `(#:phases
1307 (modify-phases %standard-phases
1308 (replace 'check
1309 (lambda _
1310 (invoke "./tests"))))))
1311 (native-inputs
1312 (list catch2))
1313 (synopsis "C++11/14/17 std::expected with functional-style extensions")
1314 (description "@code{std::expected} is proposed as the preferred way to
1315 represent objects which will either have an expected value, or an unexpected
1316 value giving information about why something failed. Unfortunately, chaining
1317 together many computations which may fail can be verbose, as error-checking
1318 code will be mixed in with the actual programming logic. This implementation
1319 provides a number of utilities to make coding with expected cleaner.")
1320 (home-page "https://tl.tartanllama.xyz/")
1321 (license license:cc0)))
1322
1323 (define-public atomic-queue
1324 (package
1325 (name "atomic-queue")
1326 (version "1.0")
1327 (source (origin
1328 (method git-fetch)
1329 (uri (git-reference
1330 (url "https://github.com/max0x7ba/atomic_queue")
1331 (commit (string-append "v" version))))
1332 (file-name (git-file-name name version))
1333 (sha256
1334 (base32
1335 "0ssff73wlvrsk2nma99dmvm0ijyzfr54jk37kxgpb694r7ajc90l"))))
1336 (build-system meson-build-system)
1337 (arguments
1338 `(#:configure-flags '("-Dbenchmarks=false")
1339 #:phases
1340 (modify-phases %standard-phases
1341 ,@(if (%current-target-system)
1342 `(;; boost is a test dependency. We don't run tests when
1343 ;; cross-compiling. Disable all targets that depend on it.
1344 (add-after 'unpack 'do-not-check-for-boost
1345 (lambda _
1346 (substitute* "meson.build"
1347 (("unit_test_framework = [^\n]*" all)
1348 "unit_test_framework = disabler()")))))
1349 '())
1350 (replace 'check
1351 (lambda* (#:key tests? #:allow-other-keys)
1352 (when tests?
1353 (invoke "./tests"))))
1354 (replace 'install
1355 (lambda* (#:key outputs #:allow-other-keys)
1356 (copy-recursively "../source/include/atomic_queue"
1357 (string-append (assoc-ref outputs "out")
1358 "/include/atomic_queue")))))))
1359 (native-inputs
1360 (list boost
1361 pkg-config))
1362 (home-page "https://github.com/max0x7ba/atomic_queue")
1363 (synopsis "C++ lockless queue")
1364 (description
1365 "This package contains a C++11 multiple-producer-multiple-consumer lockless
1366 queues header library based on circular buffer with @code{std::atomic}.")
1367 (license license:expat)))
1368
1369 (define-public magic-enum
1370 (package
1371 (name "magic-enum")
1372 (version "0.7.3")
1373 (home-page "https://github.com/Neargye/magic_enum")
1374 (source (origin
1375 (method git-fetch)
1376 (uri (git-reference
1377 (url home-page)
1378 (commit (string-append "v" version))))
1379 (file-name (git-file-name name version))
1380 (sha256
1381 (base32
1382 "1x47radgsifgz3vn2561mlvf4cq46ii33cpyqf01znm56iirwq89"))))
1383 (build-system cmake-build-system)
1384 (synopsis "C++17 header only library for compile time reflection of enums")
1385 (description "Magic Enum offers static reflection of enums, with
1386 conversions to and from strings, iteration and related functionality.")
1387 (license license:expat)))
1388
1389 (define-public cli11
1390 (package
1391 (name "cli11")
1392 (version "1.9.1")
1393 (source
1394 (origin
1395 (method git-fetch)
1396 (uri (git-reference
1397 (url "https://github.com/CLIUtils/CLI11")
1398 (commit (string-append "v" version))))
1399 (file-name (git-file-name name version))
1400 (sha256
1401 (base32 "0hbch0vk8irgmiaxnfqlqys65v1770rxxdfn3d23m2vqyjh0j9l6"))
1402 (modules '((guix build utils)))
1403 (snippet
1404 '(begin (delete-file-recursively "extern")
1405 #t))))
1406 (build-system cmake-build-system)
1407 (arguments
1408 `(#:configure-flags
1409 '("-DCLI11_SINGLE_FILE=OFF"
1410 "-DCLI11_BUILD_EXAMPLES=OFF")
1411 #:imported-modules ,%cmake-build-system-modules
1412 #:modules ((guix build cmake-build-system)
1413 (guix build utils))
1414 #:phases
1415 (modify-phases %standard-phases
1416 (add-before 'configure 'no-vendor-gtest
1417 (lambda _
1418 (substitute* "tests/CMakeLists.txt"
1419 ;; We provide our own googletest, so this is not really a
1420 ;; problem.
1421 (("message\\(FATAL_ERROR \"You have requested")
1422 "message(TRACE \"You have requested"))
1423 (substitute* "cmake/AddGoogletest.cmake"
1424 (("^add_subdirectory\\(.*googletest.*$") "find_package(GTest REQUIRED)")
1425 (("^set_target_properties\\(gtest gtest_main gmock gmock_main") "")
1426 (("^ PROPERTIES FOLDER \"Extern\"\\)") ""))
1427 #t)))))
1428 (native-inputs
1429 (list doxygen googletest))
1430 (synopsis "Command line parser for C++11")
1431 (description
1432 "CLI11 is a command line parser for C++11 and beyond that provides a rich
1433 feature set with a simple and intuitive interface.")
1434 (home-page "https://cliutils.github.io/CLI11/book/")
1435 (license license:bsd-3)))
1436
1437 (define-public caf
1438 (package
1439 (name "caf")
1440 (version "0.18.6")
1441 (source (origin
1442 (method git-fetch)
1443 (uri (git-reference
1444 (url "https://github.com/actor-framework/actor-framework")
1445 (commit version)))
1446 (file-name (git-file-name name version))
1447 (sha256
1448 (base32
1449 "055y82044djphpwbazaxsvmb66c2xfdi8vyny8pzdxkdgxfh0vq1"))))
1450 (build-system cmake-build-system)
1451 (arguments
1452 '(#:configure-flags
1453 '("-DCAF_ENABLE_EXAMPLES=OFF")))
1454 (inputs
1455 (list openssl))
1456 (synopsis "C++ implementation of the actor model")
1457 (description "The C++ Actor Framework (CAF) offers a high-level C++17
1458 programming environment using the actor model for concurrent, distributed
1459 computation.")
1460 (home-page "https://www.actor-framework.org/")
1461 (license license:bsd-3)))
1462
1463 (define-public clipper
1464 (package
1465 (name "clipper")
1466 (version "6.4.2")
1467 (source
1468 (origin
1469 (method url-fetch)
1470 (uri (string-append "mirror://sourceforge/polyclipping"
1471 "/clipper_ver" version ".zip"))
1472 (sha256
1473 (base32 "09q6jc5k7p9y5d75qr2na5d1gm0wly5cjnffh127r04l47c20hx1"))))
1474 (build-system cmake-build-system)
1475 (arguments
1476 `(#:tests? #f ;no check target
1477 #:phases (modify-phases %standard-phases
1478 (replace 'unpack
1479 (lambda* (#:key source #:allow-other-keys)
1480 (and (invoke "unzip" source)
1481 (chdir "cpp")))))))
1482 (native-inputs
1483 `(("unzip" ,unzip)))
1484 (home-page "https://sourceforge.net/projects/polyclipping")
1485 (synopsis "Polygon and line clipping and offsetting library")
1486 (description
1487 "The Clipper library performs line & polygon clipping - intersection,
1488 union, difference & exclusive-or, and line & polygon offsetting.
1489 The library is based on Vatti's clipping algorithm.")
1490 (license license:boost1.0)))
1491
1492 (define-public pcg-cpp
1493 (let ((commit "ffd522e7188bef30a00c74dc7eb9de5faff90092")
1494 (revision "2"))
1495 (package
1496 (name "pcg-cpp")
1497 (version (git-version "0.98.1" revision commit))
1498 (source (origin
1499 (method git-fetch)
1500 (uri (git-reference
1501 (url "https://github.com/imneme/pcg-cpp")
1502 (commit commit)))
1503 (file-name (git-file-name name version))
1504 (sha256
1505 (base32
1506 "0yxyqaphcc38zilpwpmssrl8ly1v6dimscqk2f4rcv1h22dinnqx"))))
1507 (build-system gnu-build-system)
1508 (arguments
1509 `(#:test-target "test"
1510 #:phases
1511 (modify-phases %standard-phases
1512 (delete 'configure))
1513 #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))))
1514 (synopsis "C++11 header only library for random number generation")
1515 (description "The Permuted Congruential Generator (PCG) extends the
1516 Linear Congruential Generator (LCG) with a permutation function to increase
1517 output randomness while retaining speed, simplicity, and conciseness.")
1518 (home-page "https://www.pcg-random.org")
1519 (license (list license:expat license:asl2.0))))) ; dual licensed
1520
1521 (define-public libconfini
1522 (package
1523 (name "libconfini")
1524 (version "1.16.4")
1525 (source (origin
1526 (method git-fetch)
1527 (uri (git-reference
1528 (url "https://github.com/madmurphy/libconfini")
1529 (commit version)))
1530 (file-name (git-file-name name version))
1531 (sha256
1532 (base32
1533 "002lmf1b2phmc6s348k00yx5shrcc7psn3pgqvraxvr6n8g747jx"))))
1534 (build-system gnu-build-system)
1535 (arguments
1536 `(#:configure-flags
1537 (list "--disable-static")
1538 #:phases
1539 (modify-phases %standard-phases
1540 (replace 'bootstrap
1541 (lambda _ (invoke "sh" "bootstrap" "--noconfigure"))))))
1542 (native-inputs
1543 (list autoconf automake libtool))
1544 (home-page "https://madmurphy.github.io/libconfini/html/index.html")
1545 (synopsis "INI file parser")
1546 (description "@code{libconfini} is an INI file parser library written in
1547 C. It focuses on standardization and parsing exactness and is at ease with
1548 almost every type of file containing key/value pairs.")
1549 (license license:gpl3+)))
1550
1551 (define-public libcutl
1552 (package
1553 (name "libcutl")
1554 (version "1.10.0")
1555 (source (origin
1556 (method url-fetch)
1557 (uri (string-append
1558 "https://www.codesynthesis.com/download/libcutl/"
1559 (version-major+minor version)
1560 "/libcutl-" version ".tar.bz2"))
1561 (sha256
1562 (base32
1563 "070j2x02m4gm1fn7gnymrkbdxflgzxwl7m96aryv8wp3f3366l8j"))
1564 (modules '((guix build utils)))
1565 (snippet
1566 '(begin
1567 ;; Remove bundled sources.
1568 (with-directory-excursion "cutl/details"
1569 (for-each delete-file-recursively
1570 ;; FIXME: Boost_RegEx isn't being detected.
1571 (list
1572 ;;"boost"
1573 "expat")))))))
1574 (build-system gnu-build-system)
1575 (arguments
1576 `(#:configure-flags (list "--disable-static"
1577 ;;"--with-external-boost"
1578 "--with-external-expat")))
1579 (inputs
1580 (list ;;("boost ,boost)
1581 expat))
1582 (home-page "https://www.codesynthesis.com/projects/libcutl/")
1583 (synopsis "C++ utility library with generic and independent components")
1584 (description "libcutl is a C++ utility library. It contains a collection
1585 of generic and independent components such as meta-programming tests, smart
1586 pointers, containers, compiler building blocks, etc.")
1587 (license (list license:expat ;everything except...
1588 license:boost1.0)))) ;...the files under cutl/details/boost
1589
1590 (define-public libxsd-frontend
1591 (package
1592 (name "libxsd-frontend")
1593 (version "2.0.0")
1594 (source
1595 (origin
1596 (method url-fetch)
1597 (uri (string-append "https://www.codesynthesis.com/download/"
1598 "libxsd-frontend/" (version-major+minor version)
1599 "/libxsd-frontend-" version ".tar.bz2"))
1600 (sha256
1601 (base32 "1nmzchsvwvn66jpmcx18anzyl1a3l309x1ld4zllrg37ijc31fim"))))
1602 (build-system gnu-build-system)
1603 (arguments
1604 `(#:test-target "test"
1605 #:imported-modules ((guix build copy-build-system)
1606 ,@%gnu-build-system-modules)
1607 #:modules (((guix build copy-build-system) #:prefix copy:)
1608 (guix build gnu-build-system)
1609 (guix build utils))
1610 #:make-flags (list (string-append "--include-dir="
1611 (assoc-ref %build-inputs "build")
1612 "/include/"))
1613 #:phases
1614 (modify-phases %standard-phases
1615 (delete 'configure)
1616 (replace 'install
1617 (lambda args
1618 (apply (assoc-ref copy:%standard-phases 'install)
1619 #:install-plan
1620 '(("xsd-frontend" "include/xsd-frontend"
1621 #:include-regexp ("\\.?xx$"))
1622 ("xsd-frontend" "lib"
1623 #:include-regexp ("\\.so$")))
1624 args))))))
1625 (native-inputs
1626 (list build))
1627 (inputs
1628 `(("libcutl" ,libcutl)
1629 ("libxerces-c" ,xerces-c)))
1630 (synopsis "XSD Front-end")
1631 (description "@code{libxsd-frontend} is a compiler frontend for the W3C
1632 XML Schema definition language. It includes a parser, semantic graph types
1633 and a traversal mechanism.")
1634 (home-page "https://www.codesynthesis.com/projects/libxsd-frontend/")
1635 (license license:gpl2+)))
1636
1637 (define-public cli
1638 (package
1639 (name "cli")
1640 (version "1.1.0")
1641 (source
1642 (origin
1643 (method url-fetch)
1644 (uri (string-append "https://www.codesynthesis.com/download/"
1645 "cli/" (version-major+minor version)
1646 "/cli-" version ".tar.bz2"))
1647 (sha256
1648 (base32 "0bg0nsai2q4h3mldpnj0jz4iy4svs0bcfvmq0v0c9cdyknny606g"))))
1649 (build-system gnu-build-system)
1650 (arguments
1651 `(#:test-target "test"
1652 #:make-flags (list (string-append "--include-dir="
1653 (assoc-ref %build-inputs "build")
1654 "/include")
1655 (string-append "install_prefix="
1656 (assoc-ref %outputs "out")))
1657 #:phases
1658 (modify-phases %standard-phases
1659 (add-after 'unpack 'patch
1660 (lambda _
1661 (substitute* (find-files "." "\\.make$")
1662 (("build-0\\.3")
1663 (string-append (assoc-ref %build-inputs "build")
1664 "/include/build-0.3")))
1665 ;; Add the namespace prefix, to avoid errors such as "error:
1666 ;; ‘iterate_and_dispatch’ was not declared in this scope".
1667 (substitute* (find-files "." "\\.?xx$")
1668 (("add \\(typeid \\(type\\), \\*this\\);" all)
1669 (string-append "traverser_map<B>::" all))
1670 (("iterate_and_dispatch \\(s\\.names_begin.*;" all)
1671 (string-append "edge_dispatcher::" all)))))
1672 (delete 'configure))))
1673 (native-inputs
1674 (list build))
1675 (inputs
1676 (list libcutl))
1677 (synopsis "C++ Command Line Interface (CLI) definition language")
1678 (description "@code{cli} is a domain-specific language (DSL) for defining
1679 command line interfaces of C++ programs. It allows you to describe the
1680 options that your program supports, their types, default values, and
1681 documentation.")
1682 (home-page "https://codesynthesis.com/projects/cli/")
1683 (license license:expat)))
1684
1685 (define-public xsd
1686 (package
1687 (name "xsd")
1688 (version "4.0.0")
1689 (source
1690 (origin
1691 (method url-fetch)
1692 (uri (string-append "https://www.codesynthesis.com/download/"
1693 "xsd/" (version-major+minor version)
1694 "/xsd-" version ".tar.bz2"))
1695 (sha256
1696 (base32 "1hi9ppxd34np8ydv1h0vgc2qpdmgcd1cdzgk30aidv670xjg91fx"))))
1697 (build-system gnu-build-system)
1698 (outputs '("out" "doc")) ;3.8 MiB of doc and examples
1699 (arguments
1700 `(#:test-target "test"
1701 #:make-flags (list (string-append "--include-dir="
1702 (assoc-ref %build-inputs "build")
1703 "/include/")
1704 (string-append "install_prefix="
1705 (assoc-ref %outputs "out")))
1706 #:phases (modify-phases %standard-phases
1707 (add-after 'install 'move-doc
1708 (lambda* (#:key outputs #:allow-other-keys)
1709 (let ((out (assoc-ref outputs "out"))
1710 (doc (assoc-ref outputs "doc")))
1711 (mkdir-p (string-append doc "/share/doc"))
1712 (rename-file (string-append out "/share/doc/xsd")
1713 (string-append doc "/share/doc/xsd-"
1714 ,version)))))
1715 (delete 'configure))))
1716 (native-inputs
1717 (list build cli))
1718 (inputs
1719 (list libcutl libnsl libxsd-frontend))
1720 (propagated-inputs
1721 ;; The code XSD generates requires the following library at run time;
1722 ;; propagate it for convenience.
1723 (list xerces-c))
1724 (synopsis "XML Data Binding for C++")
1725 (description "CodeSynthesis XSD (also known as libxsd or xsdcxx) is an XML
1726 Schema to C++ data binding compiler. Provided with an XML instance
1727 specification (XML Schema), it generates C++ classes that represent the given
1728 vocabulary as well as XML parsing and serialization code. The data stored in
1729 XML can then be accessed using types and functions that semantically
1730 correspond to an application domain rather than dealing with the intricacies
1731 of reading and writing XML.")
1732 (home-page "https://codesynthesis.com/projects/xsd/")
1733 ;; Exceptions are made to allow using the generated source files as well
1734 ;; as the libxsd library in free software projects whose license is
1735 ;; incompatible with the GPL v2. Refer to the file named FLOSSE for the
1736 ;; details.
1737 (license license:gpl2+)))
1738
1739 (define-public jsonnet
1740 (package
1741 (name "jsonnet")
1742 (version "0.17.0")
1743 (source
1744 (origin
1745 (method git-fetch)
1746 (uri (git-reference
1747 (url "https://github.com/google/jsonnet")
1748 (commit (string-append "v" version))))
1749 (file-name (git-file-name name version))
1750 (sha256
1751 (base32 "1ddz14699v5lqx3dh0mb7hfffr6fk5zhmzn3z8yxkqqvriqnciim"))
1752 (modules '((guix build utils)))
1753 (snippet
1754 #~(begin
1755 (rename-file "third_party/md5" ".md5")
1756 (delete-file-recursively "third_party")
1757 (delete-file-recursively "doc/third_party")
1758 (substitute* '("core/vm.cpp")
1759 (("#include \"json.hpp\"") "#include <nlohmann/json.hpp>"))
1760 (mkdir "third_party")
1761 (rename-file ".md5" "third_party/md5")))))
1762 (build-system cmake-build-system)
1763 (arguments
1764 `(#:configure-flags '("-DUSE_SYSTEM_GTEST=ON" "-DUSE_SYSTEM_JSON=ON"
1765 "-DBUILD_STATIC_LIBS=OFF")))
1766 (native-inputs
1767 (list googletest pkg-config))
1768 (inputs
1769 (list json-modern-cxx))
1770 (home-page "https://jsonnet.org/")
1771 (synopsis "Data templating language")
1772 (description "Jsonnet is a templating language extending JSON
1773 syntax with variables, conditions, functions and more.")
1774 (license license:asl2.0)))
1775
1776 (define-public simdjson
1777 (package
1778 (name "simdjson")
1779 (version "1.0.2")
1780 (source (origin
1781 (method git-fetch)
1782 (uri (git-reference
1783 (url "https://github.com/simdjson/simdjson")
1784 (commit (string-append "v" version))))
1785 (file-name (git-file-name name version))
1786 (sha256
1787 (base32
1788 "05i5jnqd7ngps79cws16ls48gnx08ykkkib3n2hbrdhr1wwrnv7a"))))
1789 (build-system cmake-build-system)
1790 (arguments
1791 '(#:tests? #f ; tests require downloading dependencies
1792 #:configure-flags
1793 '("-DBUILD_SHARED_LIBS=ON")))
1794 (synopsis "JSON parser for C++ using SIMD instructions")
1795 (description
1796 "The simdjson library uses commonly available SIMD instructions and
1797 microparallel algorithms to implement a strict JSON parser with UTF-8
1798 validation.")
1799 (home-page "https://github.com/simdjson/simdjson")
1800 (license license:asl2.0)))
1801
1802 (define-public bloomberg-bde-tools
1803 (let ((commit "094885bd177e0159232d4e6a060a04edb1edd786"))
1804 (package
1805 (name "bloomberg-bde-tools")
1806 ;; Recent releases are not tagged so commit must be used for checkout.
1807 (version "3.97.0.0")
1808 (source (origin
1809 (method git-fetch)
1810 (uri (git-reference
1811 (url "https://github.com/bloomberg/bde-tools")
1812 (commit commit)))
1813 (file-name (git-file-name name version))
1814 (sha256
1815 (base32
1816 "0mbbai73z8amh23ah3wy35kmy612380yr5wg89mic60qwqmpqb02"))
1817 (patches
1818 (search-patches
1819 "bloomberg-bde-tools-fix-install-path.patch"))))
1820 (build-system copy-build-system)
1821 ;; Unable to be an inline dependency of bloomberg-bde due to patch.
1822 (properties '((hidden? . #t)))
1823 (synopsis "Tools for developing and building libraries modeled on BDE")
1824 (description
1825 "This package provides the cmake imports needed to build bloomberg-bde.")
1826 (home-page "https://github.com/bloomberg/bde-tools")
1827 (license license:asl2.0))))
1828
1829 (define-public bloomberg-bde
1830 (let ((commit "b6bcc0e24a5862bf77aea7edd831dedf50e21d64"))
1831 (package
1832 (name "bloomberg-bde")
1833 ;; Recent releases are not tagged so commit must be used for checkout.
1834 (version "3.98.0.0")
1835 (source (origin
1836 (method git-fetch)
1837 (uri (git-reference
1838 (url "https://github.com/bloomberg/bde")
1839 (commit commit)))
1840 (file-name (git-file-name name version))
1841 (sha256
1842 (base32
1843 "0y3lipi1lj9qazgc935851r2qsx5aq3vvc4y52jq57riyz8wg3ma"))
1844 (patches
1845 (search-patches
1846 "bloomberg-bde-cmake-module-path.patch"))
1847 ;;(modules '((guix build utils)))
1848 (snippet
1849 `(begin
1850 ;; FIXME: Delete bundled software. The third-party packages
1851 ;; may be patched or modified from upstream sources.
1852 ;;(for-each delete-file-recursively
1853 ;; (list "thirdparty"))
1854 ;; Delete failing tests.
1855 (for-each
1856 delete-file
1857 (list "groups/bal/ball/ball_asyncfileobserver.t.cpp"
1858 "groups/bal/ball/ball_fileobserver2.t.cpp"
1859 "groups/bal/ball/ball_recordstringformatter.t.cpp"
1860 "groups/bal/balst/balst_stacktraceutil.t.cpp"
1861 "groups/bdl/bdlmt/bdlmt_eventscheduler.t.cpp"
1862 "groups/bdl/bdlmt/bdlmt_timereventscheduler.t.cpp"
1863 "groups/bdl/bdls/bdls_filesystemutil.t.cpp"
1864 "groups/bsl/bslh/bslh_hashpair.t.cpp"
1865 "groups/bsl/bsls/bsls_platform.t.cpp"
1866 "groups/bsl/bsls/bsls_stackaddressutil.t.cpp"
1867 "groups/bsl/bsls/bsls_stopwatch.t.cpp"
1868 "groups/bsl/bslstl/bslstl_function_invokerutil.t.cpp"))
1869 #t))))
1870 (build-system cmake-build-system)
1871 (arguments
1872 `(#:parallel-tests? #f ; Test parallelism may fail inconsistently.
1873 ;; Set UFID to build shared libraries. Flag descriptions can be found at
1874 ;; https://bloomberg.github.io/bde-tools/reference/bde_repo.html#ufid
1875 #:configure-flags ,(match %current-system
1876 ((or "i686-linux" "armhf-linux")
1877 ''("-DUFID=opt_dbg_exc_mt_32_shr_cpp17"))
1878 (_
1879 ''("-DUFID=opt_dbg_exc_mt_64_shr_cpp17")))
1880 #:phases
1881 (modify-phases %standard-phases
1882 ;; Explicitly build tests separate from the main build.
1883 (add-after 'build 'build-tests
1884 (lambda* (#:key make-flags #:allow-other-keys)
1885 (apply invoke "make" "all.t"
1886 `(,@(if #:parallel-build?
1887 `("-j" ,(number->string (parallel-job-count)))
1888 '())
1889 ,@make-flags)))))))
1890 (native-inputs
1891 (list bloomberg-bde-tools pkg-config python))
1892 (synopsis "Foundational C++ libraries used at Bloomberg")
1893 (description
1894 "The BDE Development Environment libraries provide an enhanced
1895 implementation of STL containers, vocabulary types for representing common
1896 concepts (like dates and times), and building blocks for developing
1897 multi-threaded applications and network applications.")
1898 (home-page "https://github.com/bloomberg/bde")
1899 (license license:asl2.0))))
1900
1901 (define-public gulrak-filesystem
1902 (package
1903 (name "gulrak-filesystem")
1904 (version "1.5.10")
1905 (source (origin
1906 (method git-fetch)
1907 (uri (git-reference
1908 (url "https://github.com/gulrak/filesystem")
1909 (commit (string-append "v" version))))
1910 (file-name (git-file-name name version))
1911 (sha256
1912 (base32
1913 "0dx1yvbz5rnisymkqap7z0b06ag9fcs6q6l82vgi8caylhkwsqs7"))))
1914 (build-system cmake-build-system)
1915 (synopsis "Header only C++ std::filesystem compatible library")
1916 (description "This package provides a header-only single-file
1917 std::filesystem compatible helper library, based on the C++17 and C++20 specs,
1918 but implemented for C++11, C++14, C++17 or C++20.")
1919 (home-page "https://github.com/gulrak/filesystem")
1920 (license license:expat)))
1921
1922 (define-public cpp-mustache
1923 (package
1924 (name "cpp-mustache")
1925 (version "4.1")
1926 (source (origin
1927 (method git-fetch)
1928 (uri (git-reference
1929 (url "https://github.com/kainjow/Mustache")
1930 (commit (string-append "v" version))))
1931 (file-name (git-file-name name version))
1932 (sha256
1933 (base32
1934 "0r9rbk6v1wpld2ismfsk2lkhbyv3dkf0p03hkjivbj05qkfhvlbb"))))
1935 (build-system cmake-build-system)
1936 (arguments
1937 (list #:phases
1938 #~(modify-phases %standard-phases
1939 (replace 'check
1940 (lambda* (#:key tests? #:allow-other-keys)
1941 (when tests?
1942 (invoke "./mustache"))))
1943 (replace 'install
1944 (lambda* (#:key outputs #:allow-other-keys)
1945 (install-file "../source/mustache.hpp"
1946 (string-append (assoc-ref outputs "out")
1947 "/include")))))))
1948 (home-page "https://github.com/kainjow/Mustache")
1949 (synopsis "Mustache text templates for modern C++")
1950 (description "@code{cpp-mustache} is a Mustache implementation for C++ 11
1951 and above. It is header only and has zero dependencies. It provides a
1952 templated string type for compatibility with any STL-like string (std::string,
1953 std::wstring, etc).")
1954 (license license:boost1.0)))
1955
1956 (define-public crc32c
1957 (package
1958 (name "crc32c")
1959 (version "1.1.2")
1960 (source (origin
1961 (method git-fetch)
1962 (uri (git-reference
1963 (url "https://github.com/google/crc32c")
1964 (commit version)))
1965 (file-name (git-file-name name version))
1966 (sha256
1967 (base32
1968 "0966lyy3w5cnrs0c0fkma4hga51k54hns72l4n76944awqssap7j"))
1969 (patches (search-patches "crc32c-unbundle-googletest.patch"))))
1970 (build-system cmake-build-system)
1971 (arguments
1972 (list #:configure-flags #~(list "-DBUILD_SHARED_LIBS=ON"
1973 "-DCRC32C_BUILD_BENCHMARKS=OFF"
1974 "-DCRC32C_USE_GLOG=OFF"
1975 (string-append
1976 "-DCRC32C_BUILD_TESTS="
1977 ;; TODO: perhaps infer #:tests?
1978 (if #$(%current-target-system)
1979 "OFF" "ON")))))
1980 (native-inputs (list googletest))
1981 (home-page "https://github.com/google/crc32c")
1982 (synopsis "Cyclic redundancy check")
1983 (description
1984 "This package provides architecture-specific implementations of the
1985 CRC32C algorithm, which is specified in RFC 3720, section 12.1.")
1986 (license license:bsd-3)))
1987
1988 (define fast-float-test-files
1989 (let ((commit "97a0b2e638feb479387554cf253e346500541e7e"))
1990 (origin
1991 (method git-fetch)
1992 (uri (git-reference
1993 (url (string-append "https://github.com/fastfloat"
1994 "/supplemental_test_files.git"))
1995 (commit "97a0b2e638feb479387554cf253e346500541e7e")))
1996 (file-name (string-append "fast-float-test-files-"
1997 (string-take commit 8)))
1998 (sha256
1999 (base32
2000 "0dxbiyzyh7i847i89ablfzypfc3ckhm7f74w98jsh73v1mppmxlf")))))
2001
2002 (define-public fast-float
2003 (package
2004 (name "fast-float")
2005 (version "3.5.1")
2006 (source (origin
2007 (method git-fetch)
2008 (uri (git-reference
2009 (url "https://github.com/fastfloat/fast_float")
2010 (commit (string-append "v" version))))
2011 (file-name (git-file-name name version))
2012 (sha256
2013 (base32
2014 "0z3rxxd0pwvw70dbnv63rm67biw829vdqf50y16isxm6g3sbrz8g"))))
2015 (build-system cmake-build-system)
2016 (arguments
2017 (list
2018 #:configure-flags #~(list "-DFASTFLOAT_TEST=ON"
2019 "-DSYSTEM_DOCTEST=ON")
2020 #:phases
2021 #~(modify-phases %standard-phases
2022 (add-after 'unpack 'patch-cmake-tests
2023 (lambda* (#:key inputs native-inputs #:allow-other-keys)
2024 (substitute* "tests/CMakeLists.txt"
2025 (("FetchContent_GetProperties\\(supplemental_test_files.*")
2026 "")
2027 (("if\\(NOT supplemental_test_files_POPULATED.*")
2028 (string-append
2029 "set(supplemental_test_files_BINARY_DIR "
2030 (search-input-directory (or native-inputs inputs)
2031 "data")
2032 ")\nif(0)\n"))))))))
2033 (native-inputs (list doctest fast-float-test-files))
2034 (home-page "https://github.com/fastfloat/fast_float")
2035 (synopsis "Floating point number parser for C++")
2036 (description "@code{fast_float} is a header-only C++ library for parsing
2037 floating point numbers from strings. It implements the C++ from_chars
2038 functions for the float and double types.")
2039 (license (list license:asl2.0 license:expat)))) ; dual licensed
2040
2041 (define-public pocketfft-cpp
2042 (let ((commit "daa8bb18327bc5c7d22c69428c25cf5dc64167d3")
2043 (revision "0"))
2044 (package
2045 (name "pocketfft-cpp")
2046 (version (git-version "0" revision commit))
2047 (source (origin
2048 (method git-fetch)
2049 (uri (git-reference
2050 (url "https://github.com/mreineck/pocketfft")
2051 (commit commit)))
2052 (file-name (git-file-name name version))
2053 (sha256
2054 (base32
2055 "1dbkkqkmkxgmz1qjpsqzic5ig3qw1pqndbb3dvjc7xq5f2rdzyq1"))
2056 (patches (search-patches
2057 "pocketfft-cpp-prefer-preprocessor-if.patch"))))
2058 (build-system copy-build-system)
2059 (arguments
2060 (list
2061 #:install-plan #~'(("pocketfft_hdronly.h" "include/"))))
2062 (home-page "https://github.com/mreineck/pocketfft")
2063 (synopsis "C++11 header-only Fast Fourier Transform library")
2064 (description "This package provides a single-header C++11 library for
2065 computing Fast Fourier transformations. It supports multidimensional arrays,
2066 different floating point sizes and complex transformations.")
2067 (license license:bsd-3))))
2068
2069 (define-public sajson
2070 (let ((commit "ec644013e34f9984a3cc9ba568cab97a391db9cd")
2071 (revision "0"))
2072 (package
2073 (name "sajson")
2074 (version (git-version "1.0" revision commit))
2075 (source (origin
2076 (method git-fetch)
2077 (uri (git-reference
2078 (url "https://github.com/chadaustin/sajson")
2079 (commit commit)))
2080 (file-name (git-file-name name version))
2081 (patches
2082 (search-patches "sajson-build-with-gcc10.patch"))
2083 (sha256
2084 (base32
2085 "0fjag27w7gvkc5pdhq3ad7yc09rabpzahndw1sgsg04ipznidmmq"))
2086 (modules '((guix build utils)))
2087 (snippet '(delete-file-recursively "third-party"))))
2088 (build-system scons-build-system)
2089 (arguments
2090 (list
2091 #:phases
2092 #~(modify-phases %standard-phases
2093 (add-after 'unpack 'disable-other-builds
2094 (lambda _
2095 (substitute* "SConstruct"
2096 (("for name, tools in builds:")
2097 "for name, tools in [('opt', [gcc, opt])]:"))))
2098 (add-after 'unpack 'use-external-unittest-cpp
2099 (lambda _
2100 (substitute* "SConscript"
2101 (("unittestpp_env\\.Library") "_dummy = ")
2102 (("test_env = env.Clone\\(tools=\\[unittestpp, sajson\\]\\)")
2103 (string-append
2104 "test_env = env.Clone(tools=[sajson])\n"
2105 "test_env.Append(CPPPATH='"
2106 (search-input-directory %build-inputs "/include/UnitTest++")
2107 "', LIBPATH='"
2108 (string-append #$(this-package-native-input "unittest-cpp")
2109 "/lib")
2110 "', LIBS=['UnitTest++'])")))))
2111 (replace 'build
2112 (lambda* (#:key tests? #:allow-other-keys #:rest args)
2113 (when tests?
2114 (apply (assoc-ref %standard-phases 'build)
2115 args))))
2116 (replace 'check
2117 (lambda* (#:key tests? #:allow-other-keys)
2118 (when tests?
2119 (invoke "build/opt/test")
2120 (invoke "build/opt/test_unsorted"))))
2121 (replace 'install
2122 (lambda _
2123 (let ((out (string-append #$output "/include")))
2124 (install-file "include/sajson.h" out)
2125 (install-file "include/sajson_ostream.h" out)))))))
2126 (native-inputs (list unittest-cpp))
2127 (home-page "https://github.com/chadaustin/sajson")
2128 (synopsis "C++11 header-only, in-place JSON parser")
2129 (description "@code{sajson} is an in-place JSON parser with support for
2130 parsing with only a single memory allocation.")
2131 (license license:expat))))
2132
2133 (define-public sajson-for-gemmi
2134 (package/inherit sajson
2135 (name "sajson-for-gemmi")
2136 (source (origin
2137 (inherit (package-source sajson))
2138 (patches (cons
2139 (search-patch
2140 "sajson-for-gemmi-numbers-as-strings.patch")
2141 (origin-patches (package-source sajson))))))
2142 (arguments
2143 (substitute-keyword-arguments (package-arguments sajson)
2144 ;; This is a modified version used in gemmi, in which numbers are kept
2145 ;; as strings. Building the tests fails with the modification.
2146 ((#:tests? _ #f) #f)))
2147 (properties '((hidden? . #t)))))
2148
2149 (define-public optionparser
2150 (package
2151 (name "optionparser")
2152 (version "1.7")
2153 (source (origin
2154 (method url-fetch)
2155 (uri
2156 (string-append "mirror://sourceforge/optionparser/"
2157 "optionparser-" version ".tar.gz"))
2158 (sha256
2159 (base32
2160 "04gfxrdzwacaynb8scsz6rr7nh64n6yk6w9dh2qdhrxw4caqr0dk"))))
2161 (outputs '("out" "doc"))
2162 (build-system gnu-build-system)
2163 (arguments
2164 (list
2165 #:phases
2166 #~(modify-phases %standard-phases
2167 (delete 'configure)
2168 (add-before 'build 'chdir
2169 (lambda _ (chdir "src")))
2170 (replace 'check
2171 (lambda* (#:key tests? #:allow-other-keys)
2172 (when tests?
2173 (begin
2174 (invoke "./example_arg")
2175 (invoke "./testparse")
2176 (invoke "./testprintusage")
2177 (invoke "./testodr")
2178 (invoke "./example")))))
2179 (replace 'install
2180 (lambda _
2181 (install-file "optionparser.h"
2182 (string-append #$output "/include"))))
2183 (add-after 'install 'install-doc
2184 (lambda _
2185 (copy-recursively
2186 "../html"
2187 (string-append #$output:doc "/share/doc/optionparser/html")))))))
2188 (native-inputs (list doxygen))
2189 (home-page "https://optionparser.sourceforge.net/")
2190 (synopsis "Header-only C++ library to parse command line options")
2191 (description "This package provides a header-only C++ library to parse
2192 command line options. It supports the short and long option formats of
2193 getopt(), getopt_long() and getopt_long_only().")
2194 (license license:expat)))
2195
2196 (define-public safeint
2197 (package
2198 (name "safeint")
2199 (version "3.0.27")
2200 (home-page "https://github.com/dcleblanc/SafeInt")
2201 (source (origin
2202 (method git-fetch)
2203 (uri (git-reference
2204 (url home-page)
2205 (commit version)))
2206 (file-name (git-file-name name version))
2207 (sha256
2208 (base32
2209 "01d2dpdhyw3lghmamknb6g39w2gg0sv53pgxlrs2la8h694z6x7s"))))
2210 (build-system cmake-build-system)
2211 (arguments
2212 (list #:phases #~(modify-phases %standard-phases
2213 (replace 'install
2214 (lambda _
2215 (let ((include-dir (string-append #$output
2216 "/include")))
2217 (with-directory-excursion "../source"
2218 (install-file "SafeInt.hpp" include-dir)
2219 (install-file "safe_math.h" include-dir)
2220 (install-file "safe_math_impl.h" include-dir)))))
2221 (add-after 'install 'install-doc
2222 (lambda _
2223 (let ((doc-dir (string-append #$output
2224 "/share/doc/safeint")))
2225 (with-directory-excursion "../source"
2226 (install-file "helpfile.md" doc-dir))))))))
2227 (synopsis "C and C++ library for managing integer overflows")
2228 (description
2229 "SafeInt is a class library for C++ that manages integer overflows. It
2230 also includes a C library that checks casting, multiplication, division,
2231 addition and subtraction for all combinations of signed and unsigned 32-bit and
2232 64-bit integers.")
2233 (license license:expat)))