Merge branch 'master' into core-updates
[jackhill/guix/guix.git] / gnu / packages / code.scm
index a4697e3..86730b2 100644 (file)
@@ -1,8 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2015, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2015, 2018, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2018 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2016, 2017, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017 Andy Wingo <wingo@igalia.com>
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2019 Hartmut Goebel <h.goebel@goebel-consult.de>
+;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2021 lu hui <luhuins@163.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system python)
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages)
   #:use-module (gnu packages autogen)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
+  #:use-module (gnu packages c)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cpp)
+  #:use-module (gnu packages curl)
+  #:use-module (gnu packages elf)
   #:use-module (gnu packages emacs)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages graphviz)
+  #:use-module (gnu packages llvm)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages lua)
+  #:use-module (gnu packages ncurses)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages perl-compression)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages texinfo)
-  #:use-module (gnu packages ncurses)
-  #:use-module (gnu packages llvm)
-  #:use-module (gnu packages lua))
+  #:use-module (gnu packages web)
+  #:use-module (gnu packages xml))
 
 ;;; Tools to deal with source code: metrics, cross-references, etc.
 
@@ -115,35 +127,51 @@ highlighting your own code that seemed comprehensible when you wrote it.")
 (define-public global                             ; a global variable
   (package
     (name "global")
-    (version "6.6.4")
+    (version "6.6.6")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/global/global-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "1515642wsjz7x3rsgaqk4sc7n0z2znl7idsk8jz8wgy5aswqqzlq"))))
+               "0pad5p31rdspyrzqky3ppgx7f6gdlfnwg1c7qm8w1m4qzyppi03m"))))
     (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)
+    (inputs `(("coreutils" ,coreutils)
+              ("ncurses" ,ncurses)
               ("libltdl" ,libltdl)
-              ("sqlite" ,sqlite)))
+              ("sqlite" ,sqlite)
+              ("python-wrapper" ,python-wrapper)))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-ncurses="
                             (assoc-ref %build-inputs "ncurses"))
              (string-append "--with-sqlite3="
-                            (assoc-ref %build-inputs "sqlite")))
+                            (assoc-ref %build-inputs "sqlite"))
+             "--disable-static")
 
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'fix-globash
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let* ((echo (string-append
+                           (assoc-ref inputs "coreutils") "/bin/echo")))
+               (substitute* "globash/globash.in"
+                 (("/bin/echo") echo)))))
         (add-after 'install 'post-install
           (lambda* (#:key outputs #:allow-other-keys)
-            ;; Install the Emacs Lisp file in the right place.
+            ;; Install the plugin files in the right place.
             (let* ((out  (assoc-ref outputs "out"))
                    (data (string-append out "/share/gtags"))
+                   (vim  (string-append out "/share/vim/vimfiles/plugin"))
                    (lisp (string-append out "/share/emacs/site-lisp")))
-              (install-file (string-append data "/gtags.el") lisp)
-              (delete-file (string-append data "/gtags.el"))
+              (mkdir-p lisp)
+              (mkdir-p vim)
+              (rename-file (string-append data "/gtags.el")
+                           (string-append lisp "/gtags.el"))
+              (rename-file (string-append data "/gtags.vim")
+                           (string-append vim "/gtags.vim"))
+              (rename-file (string-append data "/gtags-cscope.vim")
+                           (string-append vim "/gtags-cscope.vim"))
               #t))))))
     (home-page "https://www.gnu.org/software/global/")
     (synopsis "Cross-environment source code tag system")
@@ -160,7 +188,7 @@ around in a large, deeply nested project.")
     (version "2.26")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://www.dwheeler.com/sloccount/sloccount-"
+              (uri (string-append "https://dwheeler.com/sloccount/sloccount-"
                                   version ".tar.gz"))
               (sha256
                (base32
@@ -201,7 +229,7 @@ around in a large, deeply nested project.")
         #:make-flags (list (string-append "PREFIX="
                                           (assoc-ref %outputs "out")))))
     (inputs `(("perl" ,perl)))
-    (home-page "http://www.dwheeler.com/sloccount/")
+    (home-page "https://dwheeler.com/sloccount/")
     (synopsis "Count physical source lines of code (SLOC)")
     (description
      "SLOCCount is a set of the programs for counting source lines of
@@ -214,16 +242,16 @@ COCOMO model or user-provided parameters.")
 (define-public cloc
   (package
     (name "cloc")
-    (version "1.84")
+    (version "1.90")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/AlDanial/cloc.git")
-             (commit version)))
+             (url "https://github.com/AlDanial/cloc")
+             (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "14xikdwcr6pcnkk2i43zrsj88z8b3mrv0svbnbvxvarw1id83pnn"))))
+        (base32 "0ic9q6qqw5f1wafp9lpmhr0miasbdb9zr59c0jlymnzffdmnliyc"))))
     (build-system gnu-build-system)
     (inputs
      `(("coreutils" ,coreutils)
@@ -318,6 +346,75 @@ features that are not supported by the standard @code{stdio} implementation.")
     (license (license:non-copyleft
               "http://sourceforge.net/p/ctrio/git/ci/master/tree/README"))))
 
+(define-public universal-ctags
+  (package
+    (name "universal-ctags")
+    (version "5.9.20210509.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/universal-ctags/ctags")
+             (commit (string-append "p" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1sq94bnbzr40zwihfnsna759bbak0lw27j0yn12iwpg4xgb4hhwp"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Remove the bundled PackCC and associated build rules.
+           (substitute* "Makefile.am"
+             (("^PACKCC = .*")
+              "PACKCC = packcc")
+             (("\\$\\(PACKCC_FILES\\)")
+              "")
+             (("\\$\\(PEG_SRCS\\) \\$\\(PEG_HEADS\\): \\$\\(PACKCC\\)")
+              "$(PEG_SRCS) $(PEG_HEADS):"))
+           (delete-file-recursively "misc/packcc")))))
+    (build-system gnu-build-system)
+    (arguments
+     '(;; Don't use the build-time TMPDIR (/tmp/guix-build-...) at runtime.
+       #:configure-flags '("--enable-tmpdir=/tmp")
+       #:test-target "units"
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'make-files-writable
+                    (lambda _
+                      (for-each make-file-writable (find-files "."))))
+                  (add-before 'bootstrap 'patch-misc
+                    (lambda _
+                      ;; The autogen.sh script calls out to these scripts, so
+                      ;; we cannot wait for the patch-source-shebangs phase.
+                      (for-each patch-shebang (find-files "misc"))))
+                  (add-before 'check 'patch-tests
+                    (lambda _
+                      (substitute* "misc/units"
+                        (("SHELL=/bin/sh")
+                         (string-append "SHELL=" (which "sh"))))
+                      (substitute* "Tmain/utils.sh"
+                        (("/bin/echo") (which "echo"))))))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("packcc" ,packcc)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("jansson" ,jansson)
+       ("libseccomp" ,libseccomp)
+       ("libxml2" ,libxml2)
+       ("libyaml" ,libyaml)))
+    (home-page "https://ctags.io/")
+    (synopsis "Generate tag files for source code")
+    (description
+     "Universal Ctags generates an index (or tag) file of language objects
+found in source files for many popular programming languages.  This index
+makes it easy for text editors and other tools to locate the indexed items.
+Universal Ctags improves on traditional ctags because of its multilanguage
+support, its ability for the user to define new languages searched by regular
+expressions, and its ability to generate emacs-style TAGS files.")
+    (license license:gpl2+)))
+
 (define-public withershins
   (package
     (name "withershins")
@@ -326,7 +423,7 @@ features that are not supported by the standard @code{stdio} implementation.")
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/cameronwhite/withershins.git")
+             (url "https://github.com/cameronwhite/withershins")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
@@ -376,28 +473,45 @@ stack traces.")
 (define-public lcov
   (package
     (name "lcov")
-    (version "1.14")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://sourceforge/ltp/Coverage%20Analysis"
-                                  "/LCOV-" version "/lcov-" version ".tar.gz"))
-              (sha256
-               (base32
-                "06h7ixyznf6vz1qvksjgy5f3q2nw9akf6zx59npf0h3l32cmd68l"))))
+    (version "1.15")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/linux-test-project/lcov"
+                           "/releases/download/v" version
+                           "/lcov-" version ".tar.gz"))
+       (sha256
+        (base32 "0fh5z0q5wg2jxr2nn5w7321y0zg9rwk75j3k5hnamjdy6gxa5kf1"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:make-flags
-       (let ((out (assoc-ref %outputs "out")))
-         (list (string-append "PREFIX=" out)))
+     '(#:test-target "test"
+       #:make-flags (list (string-append "PREFIX="
+                                         (assoc-ref %outputs "out")))
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure))           ; no configure script
-       #:tests? #f))                    ; no 'check' target
-    (inputs `(("perl" ,perl)))
+         (add-after 'unpack 'patch-pwd
+           ;; Lift the requirement of having a shell in PATH.
+           (lambda _
+             (substitute* "bin/geninfo"
+               (("qw/abs_path/")
+                "qw/abs_path getcwd/"))
+             (substitute* '("bin/lcov" "bin/geninfo")
+               (("`pwd`")
+                "getcwd()"))
+             #t))
+         (delete 'configure)            ;no configure script
+         (add-after 'install 'wrap
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (wrap-program (string-append out "/bin/geninfo")
+                 `("PERL5LIB" ":" prefix (,(getenv "PERL5LIB")))))
+             #t)))))
+    (inputs `(("perl" ,perl)
+              ("perl-io-compress" ,perl-io-compress)
+              ("perl-json" ,perl-json)))
     (home-page "http://ltp.sourceforge.net/coverage/lcov.php")
     (synopsis "Code coverage tool that enhances GNU gcov")
-    (description
-     "LCOV is an extension of @command{gcov}, a tool part of the
+    (description "LCOV is an extension of @command{gcov}, a tool part of the
 GNU@tie{}Binutils, which provides information about what parts of a program
 are actually executed (i.e., \"covered\") while running a particular test
 case.  The extension consists of a set of Perl scripts which build on the
@@ -405,6 +519,69 @@ textual @command{gcov} output to implement the following enhanced
 functionality such as HTML output.")
     (license license:gpl2+)))
 
+(define-public lcov-cobertura
+  (package
+    (name "python-lcov-cobertura")
+    (version "1.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "lcov_cobertura" version))
+       (sha256
+        (base32
+         "02ar6yjazlxq4p64cz9gag08bvakmzjrp147jara9wlnlbc96j8g"))))
+    (build-system python-build-system)
+    (home-page "https://eriwen.github.io/lcov-to-cobertura-xml/")
+    (synopsis "LCOV to Cobertura XML converter")
+    (description
+     "The lcov-to-cobertura Python module converts code coverage report files
+in the lcov format to the XML format of
+@uref{http://cobertura.github.io/cobertura/, Cobertura}, a Java code coverage
+tool.  It allows continuous integration servers like Jenkins to aggregate
+results and determine build stability.")
+    (license license:asl2.0)))
+
+(define-public kcov
+  (package
+    (name "kcov")
+    (version "38")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/SimonKagstrom/kcov")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0zqg21xwivi16csl6a5wby6679ny01bjaw4am3y4qcgjdyihifp8"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f ;no test target
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-/bin/bash-references
+           (lambda _
+             (substitute* (find-files "src" ".*\\.cc?$")
+               (("/bin/bash") (which "bash"))
+               (("/bin/sh") (which "sh")))
+             #t)))))
+    (inputs
+     `(("curl" ,curl)
+       ("elfutils" ,elfutils)
+       ("libelf" ,libelf)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("python" ,python)))
+    (home-page "https://github.com/SimonKagstrom/kcov")
+    (synopsis "Code coverage tester for compiled languages, Python and Bash")
+    (description "Kcov is a FreeBSD/Linux/OSX code coverage tester for compiled
+languages, Python and Bash.  Kcov was originally a fork of Bcov, but has since
+evolved to support a large feature set in addition to that of Bcov.
+
+Kcov uses DWARF debugging information for compiled programs to make it
+possible to collect coverage information without special compiler switches.")
+    (license license:gpl2+)))
+
 (define-public rtags
   (package
     (name "rtags")
@@ -413,7 +590,7 @@ functionality such as HTML output.")
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/Andersbakken/rtags.git")
+             (url "https://github.com/Andersbakken/rtags")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (patches (search-patches "rtags-separate-rct.patch"))
@@ -465,7 +642,7 @@ importantly we give you proper follow-symbol and find-references support.")
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/pagekite/Colormake.git")
+             (url "https://github.com/pagekite/Colormake")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
@@ -515,7 +692,7 @@ produce colored output.")
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/lindenb/makefile2graph.git")
+             (url "https://github.com/lindenb/makefile2graph")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256