@@ -5,6 +5,7 @@
;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
+;;; Copyright © 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -26,6 +27,7 @@
#:select (gpl2 gpl2+ gpl3+ lgpl2.1+ bsd-3 x11 perl-license))
#:use-module (guix packages)
#:use-module (guix download)
+ #:use-module (guix git-download)
#:use-module (guix utils)
#:use-module (guix build-system gnu)
#:use-module (guix build-system perl)
@@ -35,7 +37,9 @@
#:use-module (gnu packages check)
#:use-module (gnu packages databases)
#:use-module (gnu packages freedesktop)
+ #:use-module (gnu packages less)
#:use-module (gnu packages linux)
+ #:use-module (gnu packages pcre)
#:use-module (gnu packages perl)
#:use-module (gnu packages pdf)
#:use-module (gnu packages python)
@@ -414,4 +418,77 @@ online libraries. It provides fast search of document text and
bibliographic data and simple document and bibtex retrieval.")
(license gpl3+)))
+(define-public ugrep
+ (package
+ (name "ugrep")
+ (version "3.1.1")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/Genivia/ugrep")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32 "136pcxb4rykflnvlm1zjj6ksdr0c9bhcvyzixkixmix5s122q6jz"))
+ (file-name (string-append name "-" version "-checkout"))
+ (modules '((guix build utils)))
+ (snippet
+ '(begin
+ (delete-file-recursively "bin") ;; pre-build executables
+ ;; TODO: If there is a script for rebuilding them, remove
+ ;; archives, pdf and .class in tests/
+ #t))))
+ (build-system gnu-build-system)
+ (inputs
+ `(("bzip2" ,bzip2)
+ ("less" ,less)
+ ("lz4" ,lz4)
+ ("lzip" ,lzip) ;; lzma
+ ("pcre2" ,pcre2)
+ ("zlib" ,zlib)))
+ (arguments
+ `(#:configure-flags '("--enable-pager")
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'configure 'patch-paths-to-binaries
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((less (assoc-ref inputs "less")))
+ (substitute* "src/ugrep.cpp"
+ (("(#\\s*define +DEFAULT_PAGER_COMMAND +\")(less\\W)" _ a b)
+ (string-append a less "/bin/" b)))))))))
+ (home-page "https://github.com/Genivia/ugrep/")
+ (synopsis "Faster grep with an interactive query UI")
+ (description "Universal grep: ultra fast searcher of file systems, text
+and binary files, source code, archives, compressed files, documents, and
+more.
+
+The main features include:
+
+@itemize
+@item Written in clean and efficient C++11, built for speed
+@item Ultra fast with new match algorithms beating grep, ripgrep, silver
+ searcher, hyperscan, etc.
+@item Multi-threaded search using high-performance lock-free job queue stealing
+@item Multi-threaded task-parallel decompression and search
+@item Optimized pattern matching (AVX, SSE2, ARM NEON/AArch64)
+@item Optimized asynchronous IO for efficient concurrent searching
+@item Thoroughly tested (includes over 1000 test cases)
+@item Compatible with the standard GNU/BSD grep command-line options
+@item Comprehensive how-to tutorial for beginners to advanced users
+@item Interactive query UI to enter search patterns
+@item Select files to search by file types, filename suffix, and \"magic bytes\"
+@item Search archives (cpio, jar, tar, pax, zip)
+@item Search compressed files (zip, gz, Z, bz, bz2, lzma, xz)
+@item Search pdf, doc, docx, xls, xlxs, and more using filters
+@item Search binary files and display hexdumps with binary pattern matches
+@item Search UTF-encoded files with Unicode pattern matches (by default)
+@item Search files encoded in ISO-8859-1 thru 16, CP 437, CP 850, MAC, KOI8, etc.
+@item Search files excluding files specified by .gitignore etc.
+@item Search patterns across newlines, matching multiple lines at once
+@item Search patterns excluding negative patterns (\"match this but not that\")
+@item Includes predefined regex patterns to search source code, XML, JSON, HTML
+@item Output results in CSV, JSON, XML, and user-specified formats
+@item Sort matching files by name, size, and time
+@end itemize")
+ (license bsd-3)))
+
;;; search.scm ends here