gnu: emacs-ox-pandoc: Use pandoc instead of ghc-pandoc.
[jackhill/guix/guix.git] / gnu / packages / code.scm
index 50d6870..3eaefc4 100644 (file)
@@ -2,8 +2,8 @@
 ;;; Copyright © 2013, 2015, 2018 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 © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; 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 © 2018 Fis Trivial <ybbs.daans@hotmail.com>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; 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 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #: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.
 
@@ -114,35 +125,44 @@ highlighting your own code that seemed comprehensible when you wrote it.")
 (define-public global                             ; a global variable
   (package
     (name "global")
-    (version "6.6.3")
+    (version "6.6.5")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/global/global-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "0735pj47dnspf20n0j1px24p59nwjinlmlb2n32ln1hvdkprivnb"))))
+               "10vvsgx8v54whb4j9mk5qqyb5h3rdd9da0il3wir8pcpksyk0dww"))))
     (build-system gnu-build-system)
     (inputs `(("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 '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")
@@ -213,16 +233,16 @@ COCOMO model or user-provided parameters.")
 (define-public cloc
   (package
     (name "cloc")
-    (version "1.82")
+    (version "1.86")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/AlDanial/cloc.git")
+             (url "https://github.com/AlDanial/cloc")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0fsz07z0slfg58512fmnlj8pnxkc360bgf7fclg60v9clvcjbjsw"))))
+        (base32 "082gj2b3x11bilz8c572dd60vn6n0fhld5zhi7wk7g1wy9wlgm9w"))))
     (build-system gnu-build-system)
     (inputs
      `(("coreutils" ,coreutils)
@@ -306,7 +326,7 @@ tools such as @command{grep}.")
                (base32
                 "02pwd5m5vq7hbrffgm2na1dfc249z50yyr5jv73vdw15bd7ygl44"))))
     (build-system gnu-build-system)
-    (home-page "http://daniel.haxx.se/projects/trio/")
+    (home-page "https://daniel.haxx.se/projects/trio/")
     (synopsis "Portable and extendable printf and string functions")
     (description
      "Trio is a set of @code{printf} and string functions designed be used by
@@ -317,22 +337,102 @@ 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
+  ;; The project is unable to decide whether to use 1.0 or 6.0 as the
+  ;; first public release version (it started as a fork of another ctags
+  ;; project that was on version 5.8), and five years later have been
+  ;; unable to tag a release.  Thus, we just take the master branch.
+  (let ((commit "0c78c0c4a68030df0d025c90bad291108b5e7107")
+        (revision "0"))
+    (package
+      (name "universal-ctags")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/universal-ctags/ctags")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0lnxc3kwi6srw0015m16vyjfdc7pdr9d1qzxjsbfv3c69ag87jhc"))
+         (modules '((guix build utils)))
+         (snippet
+          '(begin
+             ;; Remove the bundled PackCC and associated build rules.
+             (substitute* "Makefile.am"
+               (("\\$\\(packcc_verbose\\)\\$\\(PACKCC\\)")
+                "packcc")
+               (("\\$\\(PEG_SRCS\\) \\$\\(PEG_HEADS\\): packcc\\$\\(EXEEXT\\)")
+                "$(PEG_SRCS) $(PEG_HEADS):")
+               (("noinst_PROGRAMS \\+= packcc")
+                ""))
+             (delete-file-recursively "misc/packcc")
+             #t))))
+      (build-system gnu-build-system)
+      (arguments
+       '(#:phases (modify-phases %standard-phases
+                    (add-after 'unpack 'make-files-writable
+                      (lambda _
+                        (for-each make-file-writable (find-files "."))
+                        #t))
+                    (add-before 'bootstrap 'patch-optlib2c
+                      (lambda _
+                        ;; The autogen.sh script calls out to optlib2c to
+                        ;; generate translations, so we can not wait for the
+                        ;; patch-source-shebangs phase.
+                        (patch-shebang "misc/optlib2c")
+                        #t))
+                    (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")))
+                        #t)))))
+      (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")
     (version "0.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/cameronwhite/withershins/archive/v"
-                    version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "08z3lyvswx7sad10637vfpwglbcbgzzcpfihw0x8lzr74f3b70bh"))))
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/cameronwhite/withershins")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1cviqvbbcwljm1zx12j6511hazr3kscwrvcyifrkfi4fpy5z985m"))))
     (build-system cmake-build-system)
     (arguments
      `(#:out-of-source? #f
+       #:configure-flags
+       ;; XXX A (justified!) misleading-indentation error breaks the build.
+       (list "-DENABLE_WERROR=OFF")
        #:phases
        (modify-phases %standard-phases
          (add-after
@@ -370,35 +470,100 @@ stack traces.")
     (license license:gpl3+)))
 
 (define-public lcov
+  ;; Use a recent commit from upstream since the latest official release
+  ;; (1.14) doesn't support GCC 9 (see:
+  ;; https://github.com/linux-test-project/lcov/issues/58).
+  (let* ((commit "40580cd65909bc8324ae09b36bca2e178652ff3f")
+         (revision "0")
+         (version (git-version "1.14" revision commit)))
+    (package
+      (name "lcov")
+      (version "1.14")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/linux-test-project/lcov")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0shgmh6fzhnj1qfdl90jgjmlbb1ih1qh879dca8hc58yggy3hqgb"))))
+      (build-system gnu-build-system)
+      (arguments
+       '(#:test-target "test"
+         #:make-flags (list (string-append "PREFIX="
+                                           (assoc-ref %outputs "out")))
+         #:phases
+         (modify-phases %standard-phases
+           (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-json" ,perl-json)
+                ("perl-perlio-gzip" ,perl-perlio-gzip)))
+      (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
+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
+textual @command{gcov} output to implement the following enhanced
+functionality such as HTML output.")
+      (license license:gpl2+))))
+
+(define-public kcov
   (package
-    (name "lcov")
-    (version "1.14")
+    (name "kcov")
+    (version "38")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://sourceforge/ltp/Coverage%20Analysis"
-                                  "/LCOV-" version "/lcov-" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/SimonKagstrom/kcov")
+                    (commit version)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "06h7ixyznf6vz1qvksjgy5f3q2nw9akf6zx59npf0h3l32cmd68l"))))
-    (build-system gnu-build-system)
+                "0zqg21xwivi16csl6a5wby6679ny01bjaw4am3y4qcgjdyihifp8"))))
+    (build-system cmake-build-system)
     (arguments
-     '(#:make-flags
-       (let ((out (assoc-ref %outputs "out")))
-         (list (string-append "PREFIX=" out)))
+     `(#:tests? #f ;no test target
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure))           ; no configure script
-       #:tests? #f))                    ; no 'check' target
-    (inputs `(("perl" ,perl)))
-    (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
-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
-textual @command{gcov} output to implement the following enhanced
-functionality such as HTML output.")
+         (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
@@ -409,7 +574,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"))
@@ -432,7 +597,6 @@ functionality such as HTML output.")
      '(#:build-type "RelWithDebInfo"
        #:configure-flags
        '("-DRTAGS_NO_ELISP_FILES=1"
-         "-DCMAKE_CXX_FLAGS=-std=c++11"
          "-DBUILD_TESTING=FALSE")
        #:tests? #f))
     (native-inputs
@@ -460,30 +624,24 @@ importantly we give you proper follow-symbol and find-references support.")
     (version "0.9.20140503")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/pagekite/Colormake/archive/"
-                           version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/pagekite/Colormake")
+             (commit version)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32
-         "08ldss9zd8ls6bjahvxhffpsjcysifr720yf3jz9db2mlklzmyd3"))))
+        (base32 "1f9v5s0viq4yc9iv6701h3pv7j21zz1ckl37lpp9hsnliiizv03p"))))
     (build-system trivial-build-system)
     (native-inputs
      `(("bash" ,bash)
-       ("gzip" ,gzip)
-       ("perl" ,perl)
-       ("tar" ,tar)))
+       ("perl" ,perl)))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
        (begin
          (use-modules (guix build utils))
-         ;; bootstrap
-         (setenv "PATH" (string-append
-                         (assoc-ref %build-inputs "tar") "/bin" ":"
-                         (assoc-ref %build-inputs "gzip") "/bin"))
-         (invoke "tar" "xvf" (assoc-ref %build-inputs "source"))
-         (chdir (string-append (string-capitalize ,name) "-" ,version))
+         (copy-recursively (assoc-ref %build-inputs "source") "source")
+         (chdir "source")
          (patch-shebang  "colormake.pl"
                          (list (string-append (assoc-ref %build-inputs "perl")
                                               "/bin")))
@@ -504,7 +662,7 @@ importantly we give you proper follow-symbol and find-references support.")
                             "clmake-short" "colormake.pl")
                           bin)
            #t))))
-    (home-page "http://bre.klaki.net/programs/colormake/")
+    (home-page "https://bre.klaki.net/programs/colormake/")
     (synopsis "Wrapper around @command{make} to produce colored output")
     (description "This package provides a wrapper around @command{make} to
 produce colored output.")
@@ -514,14 +672,15 @@ produce colored output.")
   (package
     (name "makefile2graph")
     (version "1.5.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/lindenb/" name
-                                  "/archive/v" version ".tar.gz"))
-              (sha256
-               (base32
-                "0h1vchkpmm9h6s87p5nf0ksjxcmsxpx8k62a508w428n570wcr4l"))
-              (file-name (string-append name "-" version ".tar.gz"))))
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/lindenb/makefile2graph")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1gjfk3d8qg3cla7qd2y7r9s03whlfwy83q8k76xfcnqrjjfavdgk"))))
     (build-system gnu-build-system)
     (arguments
      '(#:test-target "test"
@@ -601,21 +760,38 @@ Objective@tie{}C, D, Java, Pawn, and Vala).  Features:
        #:make-flags (list (string-append "prefix=" %output)
                           "INSTALL=install"
                           "all")
+       #:modules ((guix build gnu-build-system) ;; FIXME use %default-modules
+                  (guix build utils)
+                  (ice-9 regex))
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
            (lambda _ (chdir "build/gcc") #t))
          (add-after 'install 'install-libs
            (lambda* (#:key outputs #:allow-other-keys)
-             ;; Libraries are not installed by default
+             ;; Libraries and includes are not installed by default
              (let* ((output (assoc-ref outputs "out"))
+                    (incdir (string-append output "/include"))
                     (libdir (string-append output "/lib")))
-               (begin
-                 (mkdir-p libdir)
-                 (for-each (lambda (l)
-                             (copy-file
-                              l (string-append libdir "/" (basename l))))
-                           (find-files "bin" "lib*"))))
+               (define (make-so-link sofile strip-pattern)
+                 (symlink
+                  (basename sofile)
+                  (regexp-substitute #f
+                                     (string-match strip-pattern sofile)
+                                     'pre)))
+               (mkdir-p incdir)
+               (copy-file "../../src/astyle.h"
+                          (string-append incdir "/astyle.h"))
+               (mkdir-p libdir)
+               (for-each (lambda (l)
+                           (copy-file
+                            l (string-append libdir "/" (basename l))))
+                         (find-files "bin" "lib*"))
+               (for-each
+                (lambda (sofile)
+                  (make-so-link sofile "(\\.[0-9]){3}$")  ;; link .so
+                  (make-so-link sofile "(\\.[0-9]){2}$")) ;; link .so.3
+                (find-files libdir "lib.*\\.so\\..*")))
              #t)))))
     (home-page "http://astyle.sourceforge.net/")
     (synopsis "Source code indenter, formatter, and beautifier")