[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#58261] [PATCH v3 03/15] gnu: Add sajson.
From: |
David Elsing |
Subject: |
[bug#58261] [PATCH v3 03/15] gnu: Add sajson. |
Date: |
Thu, 13 Oct 2022 21:04:12 +0000 |
* gnu/packages/cpp.scm (sajson): New variable.
---
gnu/packages/cpp.scm | 60 +++++++++++++++++++
.../patches/sajson-build-with-gcc10.patch | 45 ++++++++++++++
2 files changed, 105 insertions(+)
create mode 100644 gnu/packages/patches/sajson-build-with-gcc10.patch
diff --git a/gnu/packages/cpp.scm b/gnu/packages/cpp.scm
index 2b5841e777..b6a0a70ed7 100644
--- a/gnu/packages/cpp.scm
+++ b/gnu/packages/cpp.scm
@@ -57,6 +57,7 @@ (define-module (gnu packages cpp)
#:use-module (guix build-system gnu)
#:use-module (guix build-system meson)
#:use-module (guix build-system python)
+ #:use-module (guix build-system scons)
#:use-module (guix modules)
#:use-module (guix gexp)
#:use-module (gnu packages)
@@ -2033,3 +2034,62 @@ (define-public pocketfft-cpp
computing Fast Fourier transformations. It supports multidimensional arrays,
different floating point sizes and complex transformations.")
(license license:bsd-3))))
+
+(define-public sajson
+ (let ((commit "ec644013e34f9984a3cc9ba568cab97a391db9cd")
+ (revision "0"))
+ (package
+ (name "sajson")
+ (version (git-version "1.0" revision commit))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/chadaustin/sajson")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (patches
+ (search-patches "sajson-build-with-gcc10.patch"))
+ (sha256
+ (base32
+ "0fjag27w7gvkc5pdhq3ad7yc09rabpzahndw1sgsg04ipznidmmq"))
+ (modules '((guix build utils)))
+ (snippet '(delete-file-recursively "third-party"))))
+ (build-system scons-build-system)
+ (arguments
+ (list
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'disable-other-builds
+ (lambda _
+ (substitute* "SConstruct"
+ (("for name, tools in builds:")
+ "for name, tools in [('opt', [gcc, opt])]:"))))
+ (add-after 'unpack 'use-external-unittest-cpp
+ (lambda _
+ (substitute* "SConscript"
+ (("unittestpp_env\\.Library") "_dummy = ")
+ (("test_env = env.Clone\\(tools=\\[unittestpp, sajson\\]\\)")
+ (string-append
+ "test_env = env.Clone(tools=[sajson])\n"
+ "test_env.Append(CPPPATH='"
+ (search-input-directory %build-inputs
"/include/UnitTest++")
+ "', LIBPATH='"
+ (string-append #$(this-package-native-input "unittest-cpp")
+ "/lib")
+ "', LIBS=['UnitTest++'])")))))
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (when tests?
+ (invoke "build/opt/test")
+ (invoke "build/opt/test_unsorted"))))
+ (replace 'install
+ (lambda _
+ (let ((out (string-append #$output "/include")))
+ (install-file "include/sajson.h" out)
+ (install-file "include/sajson_ostream.h" out)))))))
+ (native-inputs (list unittest-cpp))
+ (home-page "https://github.com/chadaustin/sajson")
+ (synopsis "C++11 header-only, in-place JSON parser")
+ (description "@code{sajson} is an in-place JSON parser with support for
+parsing with only a single memory allocation.")
+ (license license:expat))))
diff --git a/gnu/packages/patches/sajson-build-with-gcc10.patch
b/gnu/packages/patches/sajson-build-with-gcc10.patch
new file mode 100644
index 0000000000..878706dc79
--- /dev/null
+++ b/gnu/packages/patches/sajson-build-with-gcc10.patch
@@ -0,0 +1,45 @@
+This patch is from the upstream pull request
+https://github.com/chadaustin/sajson/pull/54.
+It fixes linking with GCC.
+
+diff --git a/include/sajson.h b/include/sajson.h
+index 8b4e05a..1bd045b 100644
+--- a/include/sajson.h
++++ b/include/sajson.h
+@@ -138,12 +138,17 @@ constexpr inline size_t make_element(tag t, size_t
value) {
+ // header. This trick courtesy of Rich Geldreich's Purple JSON parser.
+ template <typename unused = void>
+ struct globals_struct {
++ static const unsigned char parse_flags[256];
++};
++typedef globals_struct<> globals;
++
+ // clang-format off
+
+ // bit 0 (1) - set if: plain ASCII string character
+ // bit 1 (2) - set if: whitespace
+ // bit 4 (0x10) - set if: 0-9 e E .
+- constexpr static const uint8_t parse_flags[256] = {
++ template <typename unused>
++ const unsigned char globals_struct<unused>::parse_flags[256] = {
+ // 0 1 2 3 4 5 6 7 8 9 A B C D
E F
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 2,
0, 0, // 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, // 1
+@@ -162,15 +167,13 @@ struct globals_struct {
+ };
+
+ // clang-format on
+-};
+-typedef globals_struct<> globals;
+
+-constexpr inline bool is_plain_string_character(char c) {
++inline bool is_plain_string_character(char c) {
+ // return c >= 0x20 && c <= 0x7f && c != 0x22 && c != 0x5c;
+ return (globals::parse_flags[static_cast<unsigned char>(c)] & 1) != 0;
+ }
+
+-constexpr inline bool is_whitespace(char c) {
++inline bool is_whitespace(char c) {
+ // return c == '\r' || c == '\n' || c == '\t' || c == ' ';
+ return (globals::parse_flags[static_cast<unsigned char>(c)] & 2) != 0;
+ }
--
2.37.0
- [bug#58261] [PATCH v2 00/13] Add rdkit v2., (continued)
- [bug#58261] [PATCH v2 00/13] Add rdkit v2., David Elsing, 2022/10/07
- [bug#58261] [PATCH v3 02/15] gnu: Add pocketfft-cpp., David Elsing, 2022/10/13
- [bug#58261] [PATCH v3 01/15] gnu: Add fast-float., David Elsing, 2022/10/13
- [bug#58261] [PATCH v3 06/15] gnu: Add optionparser., David Elsing, 2022/10/13
- [bug#58261] [PATCH v3 05/15] gnu: Add tinydir., David Elsing, 2022/10/13
- [bug#58261] [PATCH v3 03/15] gnu: Add sajson.,
David Elsing <=
- [bug#58261] [PATCH v3 04/15] gnu: Add cbehave., David Elsing, 2022/10/13
- [bug#58261] [PATCH v3 07/15] gnu: Add sajson-for-gemmi., David Elsing, 2022/10/13
- [bug#58261] [PATCH v3 14/15] gnu: Add ringdecomposerlib., David Elsing, 2022/10/13
- [bug#58261] [PATCH v3 09/15] gnu: Add freesasa., David Elsing, 2022/10/13
- [bug#58261] [PATCH v3 12/15] gnu: Add yaehmop., David Elsing, 2022/10/13
- [bug#58261] [PATCH v3 13/15] gnu: Add avalon-toolkit., David Elsing, 2022/10/13
- [bug#58261] [PATCH v3 15/15] gnu: Add rdkit., David Elsing, 2022/10/13
- [bug#58261] [PATCH v3 08/15] gnu: Add gemmi., David Elsing, 2022/10/13
- [bug#58261] [PATCH v3 11/15] gnu: Add coordgenlibs., David Elsing, 2022/10/13
- [bug#58261] [PATCH v3 10/15] gnu: Add maeparser., David Elsing, 2022/10/13