;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2015, 2018 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+;;; 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 © 2017, 2018 Clément Lassieur <clement@lassieur.org>
;;; Copyright © 2017 Andy Wingo <wingo@igalia.com>
+;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
+;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
+;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
(define-module (gnu packages code)
#:use-module (guix packages)
#:use-module (guix download)
+ #:use-module (guix git-download)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix build-system gnu)
#:use-module (guix build-system cmake)
+ #: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 compression)
- #:use-module (gnu packages databases)
+ #:use-module (gnu packages cpp)
#:use-module (gnu packages emacs)
#:use-module (gnu packages gcc)
+ #:use-module (gnu packages graphviz)
#:use-module (gnu packages pcre)
- #:use-module (gnu packages pkg-config)
#:use-module (gnu packages perl)
+ #: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 autogen)
#:use-module (gnu packages ncurses)
- #:use-module (gnu packages autotools))
+ #:use-module (gnu packages llvm)
+ #:use-module (gnu packages lua))
;;; Tools to deal with source code: metrics, cross-references, etc.
;; Needed to have cflow-mode.el installed.
(native-inputs `(("emacs" ,emacs-minimal)))
-
+ (arguments
+ '(#:configure-flags (list (string-append "CPPFLAGS="
+ "-D" "CFLOW_PREPROC=\\\""
+ (assoc-ref %build-inputs "gcc")
+ "/bin/cpp\\\""))))
(home-page "https://www.gnu.org/software/cflow/")
(synopsis "Create a graph of control flow within a program")
(description
(define-public global ; a global variable
(package
(name "global")
- (version "6.5.7")
+ (version "6.6.3")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/global/global-"
version ".tar.gz"))
(sha256
(base32
- "0cnd7a7d1pl46yk15q6mnr9i9w3xi8pxgchw4ia9njgr4jjqzh6r"))))
+ "0735pj47dnspf20n0j1px24p59nwjinlmlb2n32ln1hvdkprivnb"))))
(build-system gnu-build-system)
(inputs `(("ncurses" ,ncurses)
("libltdl" ,libltdl)
(home-page "https://www.gnu.org/software/global/")
(synopsis "Cross-environment source code tag system")
(description
- "GLOBAL is a source code tagging system that functions in the same way
-across a wide array of environments, such as different text editors, shells
-and web browsers. The resulting tags are useful for quickly moving around in
-a large, deeply nested project.")
+ "GNU GLOBAL is a source code tagging system that functions in the same
+way across a wide array of environments, such as different text editors,
+shells and web browsers. The resulting tags are useful for quickly moving
+around in a large, deeply nested project.")
(license license:gpl3+)))
(define-public sloccount
(define-public cloc
(package
(name "cloc")
- (version "1.72")
+ (version "1.80")
(source
(origin
(method url-fetch)
"/cloc-" version ".tar.gz"))
(sha256
(base32
- "1gl7bxb4bi6pms0zzl133pzpfypvz57hk2cw7yf6rvs8b48kilnz"))))
+ "0rqxnaskg5b736asyzfda1113zvpkajyqjf49vl9wgzf1r9m6bq8"))))
(build-system gnu-build-system)
(inputs
`(("coreutils" ,coreutils)
("perl" ,perl)
("perl-algorithm-diff" ,perl-algorithm-diff)
- ("perl-regexp-common" ,perl-regexp-common)
- ("perl-digest-md5" ,perl-digest-md5)))
+ ("perl-digest-md5" ,perl-digest-md5)
+ ("perl-parallel-forkmanager" ,perl-parallel-forkmanager)
+ ("perl-regexp-common" ,perl-regexp-common)))
(arguments
`(#:phases (modify-phases %standard-phases
- (delete 'configure)
- (delete 'build)
+ (delete 'configure) ; nothing to configure
+ (delete 'build) ; nothing to build
(replace 'install
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out")))
- (zero?
- (system* "make" "-C" "Unix"
- (string-append "prefix=" out)
- (string-append "INSTALL="
- (assoc-ref inputs "coreutils")
- "/bin/install")
- "install")))))
+ (invoke "make" "-C" "Unix"
+ (string-append "prefix=" out)
+ (string-append "INSTALL="
+ (assoc-ref inputs "coreutils")
+ "/bin/install")
+ "install")
+ #t)))
(add-after 'install 'wrap-program
(lambda* (#:key inputs outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
base, cloc can compute differences in blank, comment, and source lines.
cloc contains code from David Wheeler's SLOCCount. Compared to SLOCCount,
-cloc can handle a greater variety of programming langauges.")
+cloc can handle a greater variety of programming languages.")
(license license:gpl2+)))
(define-public the-silver-searcher
(package
(name "the-silver-searcher")
- (version "2.0.0")
+ (version "2.2.0")
(source (origin
(method url-fetch)
(uri (string-append
- "http://geoff.greer.fm/ag/releases/the_silver_searcher-"
+ "https://geoff.greer.fm/ag/releases/the_silver_searcher-"
version ".tar.gz"))
(sha256
(base32
- "04wm3r5p2mgv8mdkvysak0d5199h5y0yzl032624brfxpzmqfcq0"))))
+ "0w1icjqd8hd45rn1y6nbfznk1a6ip54whwbfbhxp7ws2hn3ilqnr"))))
(build-system gnu-build-system)
(native-inputs
`(("pkg-config" ,pkg-config)))
`(("pcre" ,pcre)
("xz" ,xz)
("zlib" ,zlib)))
- (home-page "http://geoff.greer.fm/ag/")
+ (home-page "https://geoff.greer.fm/ag/")
(synopsis "Fast code searching tool")
(description
"The Silver Searcher (@command{ag}) is a tool for quickly searching large
(define-public lcov
(package
(name "lcov")
- (version "1.12")
+ (version "1.13")
(source (origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/ltp/Coverage%20Analysis"
"/LCOV-" version "/lcov-" version ".tar.gz"))
(sha256
(base32
- "19wfifdpxxivhq9adbphanjfga9bg9spms9v7c3589wndjff8x5l"))))
+ "08wabnb0gcjqk0qc65a6cgbbmz6b8lvam3p7byh0dk42hj3jr5s4"))))
(build-system gnu-build-system)
(arguments
- '(#:make-flags (let ((out (assoc-ref %outputs "out")))
- (list (string-append "PREFIX=" out)
- (string-append "BIN_DIR=" out "/bin")
- (string-append "MAN_DIR=" out "/share/man")))
- #:phases (modify-phases %standard-phases
- (delete 'configure))
- #:tests? #f)) ;no 'check' target
+ '(#: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")
textual @command{gcov} output to implement the following enhanced
functionality such as HTML output.")
(license license:gpl2+)))
+
+(define-public rtags
+ (package
+ (name "rtags")
+ (version "2.18")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/Andersbakken/rtags.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (patches (search-patches "rtags-separate-rct.patch"))
+ (modules '((guix build utils)))
+ (snippet
+ ;; Part of spliting rct with rtags.
+ ;; Substitute #include "rct/header.h" with #include <rct/header.h>.
+ '(with-directory-excursion "src"
+ (delete-file-recursively "rct") ;remove bundled copy
+ (let ((files (find-files "." ".*\\.cpp|.*\\.h")))
+ (substitute* files
+ (("#include ?\"rct/(.*.h)\"" all header)
+ (string-append "#include <rct/" header ">")))
+ #t)))
+ (sha256
+ (base32
+ "0raqjbkl1ykga4ahgl9xw49cgh3cyqcf42z36z7d6fz1fw192kg0"))))
+ (build-system cmake-build-system)
+ (arguments
+ '(#:build-type "RelWithDebInfo"
+ #:configure-flags
+ '("-DRTAGS_NO_ELISP_FILES=1"
+ "-DCMAKE_CXX_FLAGS=-std=c++11"
+ "-DBUILD_TESTING=FALSE")
+ #:tests? #f))
+ (native-inputs
+ `(("pkg-config" ,pkg-config)))
+ (inputs
+ `(("bash-completion" ,bash-completion)
+ ("clang" ,clang)
+ ("llvm" ,llvm)
+ ("lua" ,lua)
+ ("rct" ,rct)
+ ("selene" ,selene)))
+ (home-page "https://github.com/Andersbakken/rtags")
+ (synopsis "Indexer for the C language family with Emacs integration")
+ (description
+ "RTags is a client/server application that indexes C/C++ code and keeps a
+persistent file-based database of references, declarations, definitions,
+symbolnames etc. There’s also limited support for ObjC/ObjC++. It allows you
+to find symbols by name (including nested class and namespace scope). Most
+importantly we give you proper follow-symbol and find-references support.")
+ (license license:gpl3+)))
+
+(define-public colormake
+ (package
+ (name "colormake")
+ (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"))
+ (sha256
+ (base32
+ "08ldss9zd8ls6bjahvxhffpsjcysifr720yf3jz9db2mlklzmyd3"))))
+ (build-system trivial-build-system)
+ (native-inputs
+ `(("bash" ,bash)
+ ("gzip" ,gzip)
+ ("perl" ,perl)
+ ("tar" ,tar)))
+ (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))
+ (patch-shebang "colormake.pl"
+ (list (string-append (assoc-ref %build-inputs "perl")
+ "/bin")))
+ (let* ((out (assoc-ref %outputs "out"))
+ (bin (string-append out "/bin"))
+ (doc (string-append out "/share/doc"))
+ (install-files (lambda (files directory)
+ (for-each (lambda (file)
+ (install-file file directory))
+ files))))
+ (substitute* "colormake"
+ (("colormake\\.pl") (string-append bin "/colormake.pl"))
+ (("/bin/bash")
+ (string-append (assoc-ref %build-inputs "bash") "/bin/sh")))
+ (install-file "colormake.1" (string-append doc "/man/man1"))
+ (install-files '("AUTHORS" "BUGS" "ChangeLog" "README") doc)
+ (install-files '("colormake" "colormake-short" "clmake"
+ "clmake-short" "colormake.pl")
+ bin)
+ #t))))
+ (home-page "http://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.")
+ (license license:gpl2+)))
+
+(define-public makefile2graph
+ (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"))))
+ (build-system gnu-build-system)
+ (arguments
+ '(#:test-target "test"
+ #:make-flags (list "CC=gcc" (string-append "prefix=" %output))
+ #:phases
+ (modify-phases %standard-phases
+ (delete 'configure))))
+ (native-inputs
+ `(("graphviz" ,graphviz)))
+ (home-page "https://github.com/lindenb/makefile2graph")
+ (synopsis "Creates a graph of dependencies from GNU Make")
+ (description
+ "@code{make2graph} creates a graph of dependencies from GNU Make. The
+output is a graphviz-dot file, a Gexf-XML file or a list of the deepest
+independent targets.")
+ (license license:expat)))
+
+(define-public uncrustify
+ (package
+ (name "uncrustify")
+ (version "0.68.1")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/uncrustify/uncrustify/")
+ (commit (string-append name "-" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0gf6vjcfy8pl7idvwsd500ffj9hri62q0n79kpb6cnfprrqpbgf4"))))
+ (build-system cmake-build-system)
+ (native-inputs
+ `(("unzip" ,unzip)
+ ("python" ,python-wrapper)))
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'unpack-etc
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ ;; Configuration samples are not installed by default.
+ (let* ((output (assoc-ref outputs "out"))
+ (etcdir (string-append output "/etc")))
+ (for-each (lambda (l)
+ (install-file l etcdir))
+ (find-files "etc" "\\.cfg$")))
+ #t)))))
+ (home-page "http://uncrustify.sourceforge.net/")
+ (synopsis "Code formatter for C and other related languages")
+ (description
+ "Beautify source code in many languages of the C family (C, C++, C#,
+Objective@tie{}C, D, Java, Pawn, and Vala). Features:
+@itemize
+@item Indent and align code.
+@item Reformat comments (a little bit).
+@item Fix inter-character spacing.
+@item Add or remove parens / braces.
+@item Supports embedded SQL @code{EXEC SQL} stuff.
+@item Highly configurable - More than 600 configurable options.
+@end itemize\n")
+ (license license:gpl2+)))
+
+(define-public astyle
+ (package
+ (name "astyle")
+ (version "3.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "mirror://sourceforge/astyle/astyle/astyle%20"
+ version "/astyle_" version "_linux.tar.gz"))
+ (sha256
+ (base32
+ "1ms54wcs7hg1bsywqwf2lhdfizgbk7qxc9ghasxk8i99jvwlrk6b"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:tests? #f ;no tests
+ #:make-flags (list (string-append "prefix=" %output)
+ "INSTALL=install"
+ "all")
+ #: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
+ (let* ((output (assoc-ref outputs "out"))
+ (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*"))))
+ #t)))))
+ (home-page "http://astyle.sourceforge.net/")
+ (synopsis "Source code indenter, formatter, and beautifier")
+ (description
+ "Artistic Style is a source code indenter, formatter, and beautifier for
+the C, C++, C++/CLI, Objective‑C, C#, and Java programming languages.")
+ (license license:lgpl3+)))
+
+(define-public indent
+ (package
+ (name "indent")
+ (version "2.2.10")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/indent/indent-" version
+ ".tar.gz"))
+ (sha256 (base32
+ "0f9655vqdvfwbxvs1gpa7py8k1z71aqh8hp73f65vazwbfz436wa"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'fix-docdir
+ (lambda _
+ ;; Although indent uses a modern autoconf in which docdir
+ ;; defaults to PREFIX/share/doc, the doc/Makefile.am
+ ;; overrides this to be in PREFIX/doc. Fix this.
+ (substitute* "doc/Makefile.in"
+ (("^docdir = .*$") "docdir = @docdir@\n"))
+ #t)))))
+ (synopsis "Code reformatter")
+ (description
+ "Indent is a program that makes source code easier to read by
+reformatting it in a consistent style. It can change the style to one of
+several different styles such as GNU, BSD or K&R. It has some flexibility to
+deal with incomplete or malformed syntax. GNU indent offers several
+extensions over the standard utility.")
+ (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")
+ (version (git-version "1.1.1" revision commit)))
+ (package
+ (name "amalgamate")
+ (version version)
+ (home-page "https://github.com/edlund/amalgamate")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url home-page)
+ (commit commit)))
+ (sha256
+ (base32
+ "0cllaraw8mxs8q2nr28nhgzkb417gj2wcklqg59w84f4lc78k3yb"))
+ (file-name (git-file-name name version))
+ (modules '((guix build utils)))
+ (snippet
+ '(substitute* "test.sh"
+ (("test_command \"cc -Wall -Wextra -o source.out source.c\"" all)
+ "test_command \"gcc -Wall -Wextra -o source.out source.c\"")))))
+ (build-system gnu-build-system)
+ (inputs
+ `(("python" ,python-wrapper)))
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (delete 'configure)
+ (delete 'build)
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (bin (string-append out "/bin")))
+ (install-file "amalgamate.py" bin))))
+ (replace 'check
+ (lambda _
+ (invoke "./test.sh"))))))
+ (synopsis "Tool for amalgamating C source and header files")
+ ;; The package is indeed a script file, and the term "amalgamate.py" is
+ ;; used by upstream.
+ (description "amalgamate.py aims to make it easy to use SQLite-style C
+source and header amalgamation in projects.")
+ (license license:bsd-3))))