;;; 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 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>
;;;
;;; This file is part of GNU Guix.
;;;
(define-module (gnu packages code)
#:use-module (guix packages)
+ #:use-module (guix utils)
#:use-module (guix download)
#:use-module (guix git-download)
#:use-module ((guix licenses) #:prefix license:)
#: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 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.
(define-public cflow
(package
(name "cflow")
- (version "1.5")
+ (version "1.6")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/cflow/cflow-"
version ".tar.bz2"))
(sha256
(base32
- "0yq33k5ap1zpnja64n89iai4zh018ffr72wki5a6mzczd880mr3g"))))
+ "1mzd3yf0dfv8h2av5vsxxlhpk21nw064h91b2kgfrdz92r0pnj1l"))))
(build-system gnu-build-system)
;; Needed to have cflow-mode.el installed.
(define-public global ; a global variable
(package
(name "global")
- (version "6.6.3")
+ (version "6.6.4")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/global/global-"
version ".tar.gz"))
(sha256
(base32
- "0735pj47dnspf20n0j1px24p59nwjinlmlb2n32ln1hvdkprivnb"))))
+ "1515642wsjz7x3rsgaqk4sc7n0z2znl7idsk8jz8wgy5aswqqzlq"))))
(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")
(define-public cloc
(package
(name "cloc")
- (version "1.80")
+ (version "1.86")
(source
(origin
- (method url-fetch)
- (uri (string-append
- "https://github.com/AlDanial/cloc/releases/download/v" version
- "/cloc-" version ".tar.gz"))
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/AlDanial/cloc.git")
+ (commit version)))
+ (file-name (git-file-name name version))
(sha256
- (base32
- "0rqxnaskg5b736asyzfda1113zvpkajyqjf49vl9wgzf1r9m6bq8"))))
+ (base32 "082gj2b3x11bilz8c572dd60vn6n0fhld5zhi7wk7g1wy9wlgm9w"))))
(build-system gnu-build-system)
(inputs
`(("coreutils" ,coreutils)
(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
(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.git")
+ (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
(license license:gpl3+)))
(define-public lcov
- (package
- (name "lcov")
- (version "1.13")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://sourceforge/ltp/Coverage%20Analysis"
- "/LCOV-" version "/lcov-" version ".tar.gz"))
- (sha256
- (base32
- "08wabnb0gcjqk0qc65a6cgbbmz6b8lvam3p7byh0dk42hj3jr5s4"))))
- (build-system gnu-build-system)
- (arguments
- '(#:make-flags
- (let ((out (assoc-ref %outputs "out")))
- (list (string-append "PREFIX=" out)))
- #: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
+ ;; 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.git")
+ (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+)))
+ (license license:gpl2+))))
(define-public rtags
(package
'(#:build-type "RelWithDebInfo"
#:configure-flags
'("-DRTAGS_NO_ELISP_FILES=1"
- "-DCMAKE_CXX_FLAGS=-std=c++11"
"-DBUILD_TESTING=FALSE")
#:tests? #f))
(native-inputs
(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.git")
+ (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")))
"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.")
(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.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1gjfk3d8qg3cla7qd2y7r9s03whlfwy83q8k76xfcnqrjjfavdgk"))))
(build-system gnu-build-system)
(arguments
'(#:test-target "test"
(define-public uncrustify
(package
(name "uncrustify")
- (version "0.68.1")
+ (version "0.69.0")
(source (origin
(method git-fetch)
(uri (git-reference
(file-name (git-file-name name version))
(sha256
(base32
- "0gf6vjcfy8pl7idvwsd500ffj9hri62q0n79kpb6cnfprrqpbgf4"))))
+ "0sqrg13kp8fwymq40976bq380bzw40g4ss7ihlbq45d0f90ifa1k"))))
(build-system cmake-build-system)
(native-inputs
`(("unzip" ,unzip)
#: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")
(define-public indent
(package
(name "indent")
- (version "2.2.10")
+ (version "2.2.12")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/indent/indent-" version
".tar.gz"))
- (sha256 (base32
- "0f9655vqdvfwbxvs1gpa7py8k1z71aqh8hp73f65vazwbfz436wa"))))
+ (sha256
+ (base32 "12xvcd16cwilzglv9h7sgh4h1qqjd1h8s48ji2dla58m4706hzg7"))))
(build-system gnu-build-system)
(arguments
`(#:phases
;; overrides this to be in PREFIX/doc. Fix this.
(substitute* "doc/Makefile.in"
(("^docdir = .*$") "docdir = @docdir@\n"))
+ #t))
+ (add-after 'unpack 'fix-configure
+ (lambda* (#:key inputs native-inputs #:allow-other-keys)
+ ;; Replace outdated config.sub and config.guess:
+ (with-directory-excursion "config"
+ (for-each (lambda (file)
+ (install-file
+ (string-append (assoc-ref
+ (or native-inputs inputs) "automake")
+ "/share/automake-"
+ ,(version-major+minor
+ (package-version automake))
+ "/" file) "."))
+ '("config.sub" "config.guess")))
#t)))))
+ (native-inputs
+ `(("texinfo" ,texinfo)
+ ("automake" ,automake))) ; For up to date 'config.guess' and 'config.sub'.
(synopsis "Code reformatter")
(description
"Indent is a program that makes source code easier to read by
(license license:gpl3+)
(home-page "https://www.gnu.org/software/indent/")))
-(define-public indent-2.2.12
- (package
- (inherit indent)
- (version "2.2.12")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/indent/indent-" version
- ".tar.gz"))
- (sha256
- (base32
- "12xvcd16cwilzglv9h7sgh4h1qqjd1h8s48ji2dla58m4706hzg7"))))
- (native-inputs `(("texinfo" ,texinfo)))))
-
(define-public amalgamate
(let* ((commit "c91f07eea1133aa184f652b8f1398eaf03586208")
(revision "0")