gnu: Add cl-ana.statistical-learning.
[jackhill/guix/guix.git] / gnu / packages / cpp.scm
index 9e95bac..ae1e3e3 100644 (file)
@@ -3,6 +3,9 @@
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
 ;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
+;;; Copyright © 2019 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module (guix git-download)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system python)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages check)
   #:use-module (gnu packages code)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages llvm)
+  #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
-  #:use-module (gnu packages tls))
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages web))
 
 (define-public libzen
   (package
@@ -179,7 +185,7 @@ batches.")
                 (modules '((guix build utils)))
                 (snippet '(delete-file-recursively "./test/thirdparty"))))
       (native-inputs
-       `(("catch2" ,catch-framework2)))
+       `(("catch2" ,catch-framework2-1)))
       (build-system cmake-build-system)
       (arguments
        `(#:phases
@@ -204,7 +210,7 @@ as ordering relation.")
 (define-public json-modern-cxx
   (package
     (name "json-modern-cxx")
-    (version "3.1.2")
+    (version "3.7.3")
     (home-page "https://github.com/nlohmann/json")
     (source
      (origin
@@ -213,40 +219,47 @@ as ordering relation.")
                            (commit (string-append "v" version))))
        (sha256
         (base32
-         "1mpr781fb2dfbyscrr7nil75lkxsazg4wkm749168lcf2ksrrbfi"))
+         "04rry1xzis71z5gj1ylcj8b4li5q18zxhcwaviwvi3hx0frzxl9w"))
        (file-name (git-file-name name version))
        (modules '((guix build utils)))
        (snippet
         '(begin
-           (delete-file-recursively "./third_party")
-           (delete-file-recursively "./test/thirdparty")
-           (delete-file-recursively "./benchmarks/thirdparty")
-           ;; Splits catch and fifo_map
+           ;; Delete bundled software.  Preserve doctest_compatibility.h, which
+           ;; is a wrapper library added by this package.
+           (install-file "./test/thirdparty/doctest/doctest_compatibility.h" "/tmp")
+           (for-each delete-file-recursively
+                     '("./third_party" "./test/thirdparty" "./benchmarks/thirdparty"))
+           (install-file "/tmp/doctest_compatibility.h" "./test/thirdparty/doctest")
+
+           ;; Adjust for the unbundled fifo_map and doctest.
+           (substitute* "./test/thirdparty/doctest/doctest_compatibility.h"
+             (("#include \"doctest\\.h\"")
+              "#include <doctest/doctest.h>"))
            (with-directory-excursion "test/src"
-             (let ((files (find-files "." ".*\\.cpp")))
-               (substitute* files
-                 (("#include ?\"(catch.hpp)\"" all catch-hpp)
-                  (string-append "#include <catch/" catch-hpp ">")))
+             (let ((files (find-files "." "\\.cpp$")))
                (substitute* files
                  (("#include ?\"(fifo_map.hpp)\"" all fifo-map-hpp)
                   (string-append
                    "#include <fifo_map/" fifo-map-hpp ">")))))
            #t))))
     (native-inputs
-     `(("amalgamate" ,amalgamate)))
+     `(("amalgamate" ,amalgamate)
+       ("doctest" ,doctest)))
     (inputs
-     `(("catch2" ,catch-framework2)
-       ("fifo-map" ,fifo-map)))
+     `(("fifo-map" ,fifo-map)))
     (build-system cmake-build-system)
     (synopsis "JSON parser and printer library for C++")
     (description "JSON for Modern C++ is a C++ JSON library that provides
 intuitive syntax and trivial integration.")
     (license license:expat)))
 
+(define-public nlohmann-json-cpp
+  (deprecated-package "nlohmann-json-cpp" json-modern-cxx))
+
 (define-public xtl
   (package
     (name "xtl")
-    (version "0.6.4")
+    (version "0.6.8")
     (source (origin
               (method git-fetch)
               (uri
@@ -255,7 +268,7 @@ intuitive syntax and trivial integration.")
                 (commit version)))
               (sha256
                (base32
-                "0rwdw43fq7c581m6frzsd06h71sf7abk7danwa3cp6wd6cgkwdbk"))
+                "13gm8vm1b9nzvlcc632f9khnjw1xdjqj6c7k51r173y1hlk0div7"))
               (file-name (git-file-name name version))))
     (native-inputs
      `(("googletest" ,googletest)
@@ -276,3 +289,124 @@ intuitive syntax and trivial integration.")
     (description "xtl is a C++ header-only template library providing basic
 tools (containers, algorithms) used by other QuantStack packages.")
     (license license:bsd-3)))
+
+(define-public ccls
+  (package
+    (name "ccls")
+    (version "0.20190823.5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/MaskRay/ccls")
+             (commit version)))
+       (sha256
+        (base32 "0b2pkpzn576b92zcxpwchpkyw2fww6s69818rx4g9z34kzm35zy5"))
+       (file-name (git-file-name name version))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:tests? #f)) ; no check target.
+    (inputs
+     `(("rapidjson" ,rapidjson)))
+    (native-inputs
+     `(("clang" ,clang)
+       ("llvm" ,llvm)))
+    (home-page "https://github.com/MaskRay/ccls")
+    (synopsis "C/C++/Objective-C language server")
+    (description
+     "@code{ccls} is a server implementing the Language Server Protocol (LSP)
+for C, C++ and Objective-C languages.  It uses @code{clang} to perform static
+code analysis and supports cross references, hierarchies, completion and
+syntax highlighting.  @code{ccls} is derived from @code{cquery} which is not
+maintained anymore.")
+    (license license:asl2.0)))
+
+(define-public gperftools
+  (package
+    (name "gperftools")
+    (version "2.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/gperftools/gperftools")
+             (commit (string-append "gperftools-" version))))
+       (sha256
+        (base32 "0amvwrzn5qc0b0jpxpy5g6zkmj97zjh4hhjrd130hsg2lwwcwhy1"))
+       (file-name (git-file-name name version))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)
+       ;; For tests:
+       ("perl" ,perl)))
+    (home-page "https://github.com/gperftools/gperftools")
+    (synopsis "Multi-threaded malloc() and performance analysis tools for C++")
+    (description
+     "@code{gperftools} is a collection of a high-performance multi-threaded
+malloc() implementation plus some thread-friendly performance analysis
+tools:
+
+@itemize
+@item tcmalloc,
+@item heap profiler,
+@item heap checker,
+@item CPU checker.
+@end itemize\n")
+    (license license:bsd-3)))
+
+(define-public cpplint
+  (package
+    (name "cpplint")
+    (version "1.4.4")
+    (source
+     (origin
+       (method git-fetch)
+       ;; Fetch from github instead of pypi, since the test cases are not in
+       ;; the pypi archive.
+       (uri (git-reference
+             (url "https://github.com/cpplint/cpplint")
+             (commit version)))
+       (sha256
+        (base32 "1ns9wbizr10w7rpyp106d7ip68s5nyskr54vw9bij11sci9z0v3j"))
+       (file-name (git-file-name name version))))
+    (build-system python-build-system)
+    (home-page "https://github.com/cpplint/cpplint")
+    (synopsis "Static code checker for C++")
+    (description "@code{cpplint} is a command-line tool to check C/C++ files
+for style issues following Google’s C++ style guide.  While Google maintains
+it's own version of the tool, this is a fork that aims to be more responsive
+and make @code{cpplint} usable in wider contexts.")
+    (license license:bsd-3)))
+
+(define-public sobjectizer
+  (package
+    (name "sobjectizer")
+    (version "5.6.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Stiffstream/sobjectizer.git")
+             (commit (string-append "v." version))))
+       (sha256
+        (base32 "0jfai7sqxnnjkms38krm7mssj5l79nb3pllkbyj4j581a7l5j6l5"))
+       (file-name (git-file-name name version))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'change-directory
+           (lambda _
+             (chdir "dev")
+             #t)))))
+    (home-page "https://stiffstream.com/en/products/sobjectizer.html")
+    (synopsis "Cross-platform actor framework for C++")
+    (description
+     "SObjectizer is a cross-platform \"actor frameworks\" for C++.
+SObjectizer supports not only the Actor Model but also the Publish-Subscribe
+Model and CSP-like channels.  The goal of SObjectizer is to simplify
+development of concurrent and multithreaded applications in C++.")
+    (license license:bsd-3)))