Merge branch 'master' into staging
This commit is contained in:
commit
7a05fdd0e1
|
@ -544,7 +544,7 @@ EXTRA_DIST += \
|
|||
tests/cve-sample.xml \
|
||||
build-aux/config.rpath \
|
||||
bootstrap \
|
||||
release.nix \
|
||||
doc/build.scm \
|
||||
$(TESTS)
|
||||
|
||||
if !BUILD_DAEMON_OFFLOAD
|
||||
|
|
|
@ -0,0 +1,563 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
;; This file contains machinery to build HTML and PDF copies of the manual
|
||||
;; that can be readily published on the web site. To do that, run:
|
||||
;;
|
||||
;; guix build -f build.scm
|
||||
;;
|
||||
;; The result is a directory hierarchy that can be used as the manual/
|
||||
;; sub-directory of the web site.
|
||||
|
||||
(use-modules (guix)
|
||||
(guix gexp)
|
||||
(guix git)
|
||||
(guix git-download)
|
||||
(git)
|
||||
(gnu packages base)
|
||||
(gnu packages gawk)
|
||||
(gnu packages gettext)
|
||||
(gnu packages guile)
|
||||
(gnu packages texinfo)
|
||||
(gnu packages tex)
|
||||
(srfi srfi-19)
|
||||
(srfi srfi-71))
|
||||
|
||||
(define file-append*
|
||||
(@@ (guix self) file-append*))
|
||||
|
||||
(define translated-texi-manuals
|
||||
(@@ (guix self) translate-texi-manuals))
|
||||
|
||||
(define info-manual
|
||||
(@@ (guix self) info-manual))
|
||||
|
||||
(define %languages
|
||||
'("de" "en" "es" "fr" "ru" "zh_CN"))
|
||||
|
||||
(define (texinfo-manual-images source)
|
||||
"Return a directory containing all the images used by the user manual, taken
|
||||
from SOURCE, the root of the source tree."
|
||||
(define graphviz
|
||||
(module-ref (resolve-interface '(gnu packages graphviz))
|
||||
'graphviz))
|
||||
|
||||
(define images
|
||||
(file-append* source "doc/images"))
|
||||
|
||||
(define build
|
||||
(with-imported-modules '((guix build utils))
|
||||
#~(begin
|
||||
(use-modules (guix build utils)
|
||||
(srfi srfi-26))
|
||||
|
||||
(define (dot->image dot-file format)
|
||||
(invoke #+(file-append graphviz "/bin/dot")
|
||||
"-T" format "-Gratio=.9" "-Gnodesep=.005"
|
||||
"-Granksep=.00005" "-Nfontsize=9"
|
||||
"-Nheight=.1" "-Nwidth=.1"
|
||||
"-o" (string-append #$output "/"
|
||||
(basename dot-file ".dot")
|
||||
"." format)
|
||||
dot-file))
|
||||
|
||||
;; Build graphs.
|
||||
(mkdir-p #$output)
|
||||
(for-each (lambda (dot-file)
|
||||
(for-each (cut dot->image dot-file <>)
|
||||
'("png" "pdf")))
|
||||
(find-files #$images "\\.dot$"))
|
||||
|
||||
;; Copy other PNGs.
|
||||
(for-each (lambda (png-file)
|
||||
(install-file png-file #$output))
|
||||
(find-files #$images "\\.png$")))))
|
||||
|
||||
(computed-file "texinfo-manual-images" build))
|
||||
|
||||
(define* (texinfo-manual-source source #:key
|
||||
(version "0.0")
|
||||
(languages %languages)
|
||||
(date 1))
|
||||
"Gather all the source files of the Texinfo manuals from SOURCE--.texi file
|
||||
as well as images, OS examples, and translations."
|
||||
(define documentation
|
||||
(file-append* source "doc"))
|
||||
|
||||
(define examples
|
||||
(file-append* source "gnu/system/examples"))
|
||||
|
||||
(define build
|
||||
(with-imported-modules '((guix build utils))
|
||||
#~(begin
|
||||
(use-modules (guix build utils)
|
||||
(srfi srfi-19))
|
||||
|
||||
(define (make-version-texi language)
|
||||
;; Create the 'version.texi' file for LANGUAGE.
|
||||
(let ((file (if (string=? language "en")
|
||||
"version.texi"
|
||||
(string-append "version-" language ".texi"))))
|
||||
(call-with-output-file (string-append #$output "/" file)
|
||||
(lambda (port)
|
||||
(let* ((version #$version)
|
||||
(time (make-time time-utc 0 #$date))
|
||||
(date (time-utc->date time)))
|
||||
(format port "
|
||||
@set UPDATED ~a
|
||||
@set UPDATED-MONTH ~a
|
||||
@set EDITION ~a
|
||||
@set VERSION ~a\n"
|
||||
(date->string date "~e ~B ~Y")
|
||||
(date->string date "~B ~Y")
|
||||
version version))))))
|
||||
|
||||
(install-file #$(file-append* documentation "/htmlxref.cnf")
|
||||
#$output)
|
||||
|
||||
(for-each (lambda (texi)
|
||||
(install-file texi #$output))
|
||||
(append (find-files #$documentation "\\.(texi|scm)$")
|
||||
(find-files #$(translated-texi-manuals source)
|
||||
"\\.texi$")))
|
||||
|
||||
;; Create 'version.texi'.
|
||||
(for-each make-version-texi '#$languages)
|
||||
|
||||
;; Copy configuration templates that the manual includes.
|
||||
(for-each (lambda (template)
|
||||
(copy-file template
|
||||
(string-append
|
||||
#$output "/os-config-"
|
||||
(basename template ".tmpl")
|
||||
".texi")))
|
||||
(find-files #$examples "\\.tmpl$"))
|
||||
|
||||
(symlink #$(texinfo-manual-images source)
|
||||
(string-append #$output "/images")))))
|
||||
|
||||
(computed-file "texinfo-manual-source" build))
|
||||
|
||||
(define %web-site-url
|
||||
;; URL of the web site home page.
|
||||
(or (getenv "GUIX_WEB_SITE_URL")
|
||||
"/software/guix/"))
|
||||
|
||||
(define %makeinfo-html-options
|
||||
;; Options passed to 'makeinfo --html'.
|
||||
'("--css-ref=https://www.gnu.org/software/gnulib/manual.css"))
|
||||
|
||||
(define* (html-manual source #:key (languages %languages)
|
||||
(version "0.0")
|
||||
(manual "guix")
|
||||
(date 1)
|
||||
(options %makeinfo-html-options))
|
||||
"Return the HTML manuals built from SOURCE for all LANGUAGES, with the given
|
||||
makeinfo OPTIONS."
|
||||
(define manual-source
|
||||
(texinfo-manual-source source
|
||||
#:version version
|
||||
#:languages languages
|
||||
#:date date))
|
||||
|
||||
(define build
|
||||
(with-imported-modules '((guix build utils))
|
||||
#~(begin
|
||||
(use-modules (guix build utils)
|
||||
(ice-9 match))
|
||||
|
||||
(define (normalize language)
|
||||
;; Normalize LANGUAGE. For instance, "zh_CN" become "zh-cn".
|
||||
(string-map (match-lambda
|
||||
(#\_ #\-)
|
||||
(chr chr))
|
||||
(string-downcase language)))
|
||||
|
||||
;; Install a UTF-8 locale so that 'makeinfo' is at ease.
|
||||
(setenv "GUIX_LOCPATH"
|
||||
#+(file-append glibc-utf8-locales "/lib/locale"))
|
||||
(setenv "LC_ALL" "en_US.utf8")
|
||||
|
||||
(setvbuf (current-output-port) 'line)
|
||||
(setvbuf (current-error-port) 'line)
|
||||
|
||||
(for-each (lambda (language)
|
||||
(let ((opts `("--html"
|
||||
"-c" ,(string-append "TOP_NODE_UP_URL=/manual/"
|
||||
language)
|
||||
#$@options
|
||||
,(if (string=? language "en")
|
||||
(string-append #$manual-source "/"
|
||||
#$manual ".texi")
|
||||
(string-append #$manual-source "/"
|
||||
#$manual "." language ".texi")))))
|
||||
(format #t "building HTML manual for language '~a'...~%"
|
||||
language)
|
||||
(mkdir-p (string-append #$output "/"
|
||||
(normalize language)))
|
||||
(setenv "LANGUAGE" language)
|
||||
(apply invoke #$(file-append texinfo "/bin/makeinfo")
|
||||
"-o" (string-append #$output "/"
|
||||
(normalize language)
|
||||
"/html_node")
|
||||
opts)
|
||||
(apply invoke #$(file-append texinfo "/bin/makeinfo")
|
||||
"--no-split"
|
||||
"-o"
|
||||
(string-append #$output "/"
|
||||
(normalize language)
|
||||
"/" #$manual
|
||||
(if (string=? language "en")
|
||||
""
|
||||
(string-append "." language))
|
||||
".html")
|
||||
opts)))
|
||||
'#$languages))))
|
||||
|
||||
(computed-file (string-append manual "-html-manual") build))
|
||||
|
||||
(define* (pdf-manual source #:key (languages %languages)
|
||||
(version "0.0")
|
||||
(manual "guix")
|
||||
(date 1)
|
||||
(options '()))
|
||||
"Return the HTML manuals built from SOURCE for all LANGUAGES, with the given
|
||||
makeinfo OPTIONS."
|
||||
(define manual-source
|
||||
(texinfo-manual-source source
|
||||
#:version version
|
||||
#:languages languages
|
||||
#:date date))
|
||||
|
||||
;; FIXME: This union works, except for the table of contents of non-English
|
||||
;; manuals, which contains escape sequences like "^^ca^^fe" instead of
|
||||
;; accented letters.
|
||||
;;
|
||||
;; (define texlive
|
||||
;; (texlive-union (list texlive-tex-texinfo
|
||||
;; texlive-generic-epsf
|
||||
;; texlive-fonts-ec)))
|
||||
|
||||
(define build
|
||||
(with-imported-modules '((guix build utils))
|
||||
#~(begin
|
||||
(use-modules (guix build utils)
|
||||
(srfi srfi-34)
|
||||
(ice-9 match))
|
||||
|
||||
(define (normalize language) ;XXX: deduplicate
|
||||
;; Normalize LANGUAGE. For instance, "zh_CN" becomes "zh-cn".
|
||||
(string-map (match-lambda
|
||||
(#\_ #\-)
|
||||
(chr chr))
|
||||
(string-downcase language)))
|
||||
|
||||
;; Install a UTF-8 locale so that 'makeinfo' is at ease.
|
||||
(setenv "GUIX_LOCPATH"
|
||||
#+(file-append glibc-utf8-locales "/lib/locale"))
|
||||
(setenv "LC_ALL" "en_US.utf8")
|
||||
(setenv "PATH"
|
||||
(string-append #+(file-append texlive "/bin") ":"
|
||||
#+(file-append texinfo "/bin") ":"
|
||||
|
||||
;; Below are command-line tools needed by
|
||||
;; 'texi2dvi' and friends.
|
||||
#+(file-append sed "/bin") ":"
|
||||
#+(file-append grep "/bin") ":"
|
||||
#+(file-append coreutils "/bin") ":"
|
||||
#+(file-append gawk "/bin") ":"
|
||||
#+(file-append tar "/bin") ":"
|
||||
#+(file-append diffutils "/bin")))
|
||||
|
||||
(setvbuf (current-output-port) 'line)
|
||||
(setvbuf (current-error-port) 'line)
|
||||
|
||||
(setenv "HOME" (getcwd)) ;for kpathsea/mktextfm
|
||||
|
||||
;; 'SOURCE_DATE_EPOCH' is honored by pdftex.
|
||||
(setenv "SOURCE_DATE_EPOCH" "1")
|
||||
|
||||
(for-each (lambda (language)
|
||||
(let ((opts `("--pdf"
|
||||
"-I" "."
|
||||
#$@options
|
||||
,(if (string=? language "en")
|
||||
(string-append #$manual-source "/"
|
||||
#$manual ".texi")
|
||||
(string-append #$manual-source "/"
|
||||
#$manual "." language ".texi")))))
|
||||
(format #t "building PDF manual for language '~a'...~%"
|
||||
language)
|
||||
(mkdir-p (string-append #$output "/"
|
||||
(normalize language)))
|
||||
(setenv "LANGUAGE" language)
|
||||
|
||||
|
||||
;; FIXME: Unfortunately building PDFs for non-Latin
|
||||
;; alphabets doesn't work:
|
||||
;; <https://lists.gnu.org/archive/html/help-texinfo/2012-01/msg00014.html>.
|
||||
(guard (c ((invoke-error? c)
|
||||
(format (current-error-port)
|
||||
"~%~%Failed to produce \
|
||||
PDF for language '~a'!~%~%"
|
||||
language)))
|
||||
(apply invoke #$(file-append texinfo "/bin/makeinfo")
|
||||
"--pdf" "-o"
|
||||
(string-append #$output "/"
|
||||
(normalize language)
|
||||
"/" #$manual
|
||||
(if (string=? language "en")
|
||||
""
|
||||
(string-append "."
|
||||
language))
|
||||
".pdf")
|
||||
opts))))
|
||||
'#$languages))))
|
||||
|
||||
(computed-file (string-append manual "-pdf-manual") build))
|
||||
|
||||
(define (guix-manual-text-domain source languages)
|
||||
"Return the PO files for LANGUAGES of the 'guix-manual' text domain taken
|
||||
from SOURCE."
|
||||
(define po-directory
|
||||
(file-append* source "/po/doc"))
|
||||
|
||||
(define build
|
||||
(with-imported-modules '((guix build utils))
|
||||
#~(begin
|
||||
(use-modules (guix build utils))
|
||||
|
||||
(mkdir-p #$output)
|
||||
(for-each (lambda (language)
|
||||
(define directory
|
||||
(string-append #$output "/" language
|
||||
"/LC_MESSAGES"))
|
||||
|
||||
(mkdir-p directory)
|
||||
(invoke #+(file-append gnu-gettext "/bin/msgfmt")
|
||||
"-c" "-o"
|
||||
(string-append directory "/guix-manual.mo")
|
||||
(string-append #$po-directory "/guix-manual."
|
||||
language ".po")))
|
||||
'#$(delete "en" languages)))))
|
||||
|
||||
(computed-file "guix-manual-po" build))
|
||||
|
||||
(define* (html-manual-indexes source
|
||||
#:key (languages %languages)
|
||||
(version "0.0")
|
||||
(manual "guix")
|
||||
(date 1))
|
||||
(define build
|
||||
(with-imported-modules '((guix build utils))
|
||||
#~(begin
|
||||
(use-modules (guix build utils)
|
||||
(ice-9 match)
|
||||
(ice-9 popen)
|
||||
(sxml simple)
|
||||
(srfi srfi-19))
|
||||
|
||||
(define (normalize language) ;XXX: deduplicate
|
||||
;; Normalize LANGUAGE. For instance, "zh_CN" become "zh-cn".
|
||||
(string-map (match-lambda
|
||||
(#\_ #\-)
|
||||
(chr chr))
|
||||
(string-downcase language)))
|
||||
|
||||
(define-syntax-rule (with-language language exp ...)
|
||||
(let ((lang (getenv "LANGUAGE")))
|
||||
(dynamic-wind
|
||||
(lambda ()
|
||||
(setenv "LANGUAGE" language)
|
||||
(setlocale LC_MESSAGES))
|
||||
(lambda () exp ...)
|
||||
(lambda ()
|
||||
(if lang
|
||||
(setenv "LANGUAGE" lang)
|
||||
(unsetenv "LANGUAGE"))
|
||||
(setlocale LC_MESSAGES)))))
|
||||
|
||||
;; (put 'with-language 'scheme-indent-function 1)
|
||||
(define* (translate str language
|
||||
#:key (domain "guix-manual"))
|
||||
(define exp
|
||||
`(begin
|
||||
(bindtextdomain "guix-manual"
|
||||
#+(guix-manual-text-domain
|
||||
source
|
||||
languages))
|
||||
(write (gettext ,str "guix-manual"))))
|
||||
|
||||
(with-language language
|
||||
;; Since the 'gettext' function caches msgid translations,
|
||||
;; regardless of $LANGUAGE, we have to spawn a new process each
|
||||
;; time we want to translate to a different language. Bah!
|
||||
(let* ((pipe (open-pipe* OPEN_READ
|
||||
#+(file-append guile-2.2
|
||||
"/bin/guile")
|
||||
"-c" (object->string exp)))
|
||||
(str (read pipe)))
|
||||
(close-pipe pipe)
|
||||
str)))
|
||||
|
||||
(define (seconds->string seconds language)
|
||||
(let* ((time (make-time time-utc 0 seconds))
|
||||
(date (time-utc->date time)))
|
||||
(with-language language (date->string date "~e ~B ~Y"))))
|
||||
|
||||
(define (guix-url path)
|
||||
(string-append #$%web-site-url path))
|
||||
|
||||
(define (sxml-index language)
|
||||
(define title
|
||||
(translate "GNU Guix Reference Manual" language))
|
||||
|
||||
;; FIXME: Avoid duplicating styling info from guix-artwork.git.
|
||||
`(html (@ (lang ,language))
|
||||
(head
|
||||
(title ,(string-append title " — GNU Guix"))
|
||||
(meta (@ (charset "UTF-8")))
|
||||
(meta (@ (name "viewport") (content "width=device-width, initial-scale=1.0")))
|
||||
;; Menu prefetch.
|
||||
(link (@ (rel "prefetch") (href ,(guix-url "menu/index.html"))))
|
||||
;; Base CSS.
|
||||
(link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/elements.css"))))
|
||||
(link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/common.css"))))
|
||||
(link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/messages.css"))))
|
||||
(link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/navbar.css"))))
|
||||
(link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/breadcrumbs.css"))))
|
||||
(link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/buttons.css"))))
|
||||
(link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/footer.css"))))
|
||||
|
||||
(link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/page.css"))))
|
||||
(link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/post.css")))))
|
||||
(body
|
||||
(header (@ (class "navbar"))
|
||||
(h1 (a (@ (class "branding")
|
||||
(href #$%web-site-url)))
|
||||
(span (@ (class "a11y-offset"))
|
||||
"Guix"))
|
||||
(nav (@ (class "menu"))))
|
||||
(nav (@ (class "breadcrumbs"))
|
||||
(a (@ (class "crumb")
|
||||
(href #$%web-site-url))
|
||||
"Home"))
|
||||
(main
|
||||
(article
|
||||
(@ (class "page centered-block limit-width"))
|
||||
(h2 ,title)
|
||||
(p (@ (class "post-metadata centered-text"))
|
||||
#$version " — "
|
||||
,(seconds->string #$date language))
|
||||
|
||||
(div
|
||||
(ul
|
||||
(li (a (@ (href "html_node"))
|
||||
"HTML, with one page per node"))
|
||||
(li (a (@ (href
|
||||
,(string-append
|
||||
#$manual
|
||||
(if (string=? language
|
||||
"en")
|
||||
""
|
||||
(string-append "."
|
||||
language))
|
||||
".html")))
|
||||
"HTML, entirely on one page"))
|
||||
,@(if (member language '("ru" "zh_CN"))
|
||||
'()
|
||||
`((li (a (@ (href ,(string-append
|
||||
#$manual
|
||||
(if (string=? language "en")
|
||||
""
|
||||
(string-append "."
|
||||
language))
|
||||
".pdf"))))
|
||||
"PDF")))))))
|
||||
(footer))))
|
||||
|
||||
(define (write-index language file)
|
||||
(call-with-output-file file
|
||||
(lambda (port)
|
||||
(display "<!DOCTYPE html>\n" port)
|
||||
(sxml->xml (sxml-index language) port))))
|
||||
|
||||
(setenv "GUIX_LOCPATH"
|
||||
#+(file-append glibc-utf8-locales "/lib/locale"))
|
||||
(setenv "LC_ALL" "en_US.utf8")
|
||||
(setlocale LC_ALL "en_US.utf8")
|
||||
|
||||
(bindtextdomain "guix-manual"
|
||||
#+(guix-manual-text-domain source languages))
|
||||
|
||||
(for-each (lambda (language)
|
||||
(define directory
|
||||
(string-append #$output "/"
|
||||
(normalize language)))
|
||||
|
||||
(mkdir-p directory)
|
||||
(write-index language
|
||||
(string-append directory
|
||||
"/index.html")))
|
||||
'#$languages))))
|
||||
|
||||
(computed-file "html-indexes" build))
|
||||
|
||||
(define* (pdf+html-manual source
|
||||
#:key (languages %languages)
|
||||
(version "0.0")
|
||||
(date (time-second (current-time time-utc)))
|
||||
(manual "guix"))
|
||||
"Return the union of the HTML and PDF manuals, as well as the indexes."
|
||||
(directory-union (string-append manual "-manual")
|
||||
(map (lambda (proc)
|
||||
(proc source
|
||||
#:date date
|
||||
#:languages languages
|
||||
#:version version
|
||||
#:manual manual))
|
||||
(list html-manual-indexes
|
||||
html-manual pdf-manual))
|
||||
#:copy? #t))
|
||||
|
||||
(define (latest-commit+date directory)
|
||||
"Return two values: the last commit ID (a hex string) for DIRECTORY, and its
|
||||
commit date (an integer)."
|
||||
(let* ((repository (repository-open directory))
|
||||
(head (repository-head repository))
|
||||
(oid (reference-target head))
|
||||
(commit (commit-lookup repository oid)))
|
||||
;; TODO: Use (git describe) when it's widely available.
|
||||
(values (oid->string oid) (commit-time commit))))
|
||||
|
||||
|
||||
(let* ((root (canonicalize-path
|
||||
(string-append (current-source-directory) "/..")))
|
||||
(commit date (latest-commit+date root)))
|
||||
(format (current-error-port)
|
||||
"building manual from work tree around commit ~a, ~a~%"
|
||||
commit
|
||||
(let* ((time (make-time time-utc 0 date))
|
||||
(date (time-utc->date time)))
|
||||
(date->string date "~e ~B ~Y")))
|
||||
(pdf+html-manual (local-file root "guix" #:recursive? #t
|
||||
#:select? (git-predicate root))
|
||||
#:version (or (getenv "GUIX_MANUAL_VERSION")
|
||||
(string-take commit 7))
|
||||
#:date date))
|
|
@ -4657,6 +4657,14 @@ While this will limit the leaking of user identity through home paths
|
|||
and each of the user fields, this is only one useful component of a
|
||||
broader privacy/anonymity solution---not one in and of itself.
|
||||
|
||||
@item --no-cwd
|
||||
For containers, the default behavior is to share the current working
|
||||
directory with the isolated container and immediately change to that
|
||||
directory within the container. If this is undesirable, @code{--no-cwd}
|
||||
will cause the current working directory to @emph{not} be automatically
|
||||
shared and will change to the user's home directory within the container
|
||||
instead. See also @code{--user}.
|
||||
|
||||
@item --expose=@var{source}[=@var{target}]
|
||||
For containers, expose the file system @var{source} from the host system
|
||||
as the read-only file system @var{target} within the container. If
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
# Copyright © 2017 sharlatan <sharlatanus@gmail.com>
|
||||
# Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
|
||||
# Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
|
||||
# Copyright © 2019 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||
#
|
||||
# This file is part of GNU Guix.
|
||||
#
|
||||
|
@ -85,14 +86,12 @@ _debug()
|
|||
|
||||
chk_require()
|
||||
{ # Check that every required command is available.
|
||||
declare -a cmds
|
||||
declare -a warn
|
||||
|
||||
cmds=(${1})
|
||||
local c
|
||||
|
||||
_debug "--- [ $FUNCNAME ] ---"
|
||||
|
||||
for c in ${cmds[@]}; do
|
||||
for c in "$@"; do
|
||||
command -v "$c" &>/dev/null || warn+=("$c")
|
||||
done
|
||||
|
||||
|
@ -101,8 +100,15 @@ chk_require()
|
|||
return 1; }
|
||||
|
||||
_msg "${PAS}verification of required commands completed"
|
||||
}
|
||||
|
||||
gpg --list-keys ${OPENPGP_SIGNING_KEY_ID} >/dev/null 2>&1 || (
|
||||
chk_gpg_keyring()
|
||||
{ # Check whether the Guix release signing public key is present.
|
||||
_debug "--- [ $FUNCNAME ] ---"
|
||||
|
||||
# Without --dry-run this command will create a ~/.gnupg owned by root on
|
||||
# systems where gpg has never been used, causing errors and confusion.
|
||||
gpg --dry-run --list-keys ${OPENPGP_SIGNING_KEY_ID} >/dev/null 2>&1 || (
|
||||
_err "${ERR}Missing OpenPGP public key. Fetch it with this command:"
|
||||
echo " wget https://sv.gnu.org/people/viewgpg.php?user_id=15145 -qO - | gpg --import -"
|
||||
exit 1
|
||||
|
@ -415,7 +421,8 @@ main()
|
|||
_msg "Starting installation ($(date))"
|
||||
|
||||
chk_term
|
||||
chk_require "${REQUIRE[*]}"
|
||||
chk_require "${REQUIRE[@]}"
|
||||
chk_gpg_keyring
|
||||
chk_init_sys
|
||||
chk_sys_arch
|
||||
|
||||
|
|
|
@ -490,6 +490,7 @@ GNU_SYSTEM_MODULES = \
|
|||
%D%/packages/wget.scm \
|
||||
%D%/packages/wicd.scm \
|
||||
%D%/packages/wine.scm \
|
||||
%D%/packages/wireservice.scm \
|
||||
%D%/packages/wm.scm \
|
||||
%D%/packages/wordnet.scm \
|
||||
%D%/packages/wv.scm \
|
||||
|
@ -741,6 +742,7 @@ dist_patch_DATA = \
|
|||
%D%/packages/patches/cpufrequtils-fix-aclocal.patch \
|
||||
%D%/packages/patches/crawl-upgrade-saves.patch \
|
||||
%D%/packages/patches/crda-optional-gcrypt.patch \
|
||||
%D%/packages/patches/csvkit-fix-tests.patch \
|
||||
%D%/packages/patches/clucene-contribs-lib.patch \
|
||||
%D%/packages/patches/cube-nocheck.patch \
|
||||
%D%/packages/patches/cursynth-wave-rand.patch \
|
||||
|
@ -891,8 +893,6 @@ dist_patch_DATA = \
|
|||
%D%/packages/patches/grep-timing-sensitive-test.patch \
|
||||
%D%/packages/patches/groff-source-date-epoch.patch \
|
||||
%D%/packages/patches/groovy-add-exceptionutilsgenerator.patch \
|
||||
%D%/packages/patches/grub-binutils-compat.patch \
|
||||
%D%/packages/patches/grub-check-error-efibootmgr.patch \
|
||||
%D%/packages/patches/grub-efi-fat-serial-number.patch \
|
||||
%D%/packages/patches/gsl-test-i686.patch \
|
||||
%D%/packages/patches/gspell-dash-test.patch \
|
||||
|
@ -1231,6 +1231,7 @@ dist_patch_DATA = \
|
|||
%D%/packages/patches/python2-pygobject-2-gi-info-type-error-domain.patch \
|
||||
%D%/packages/patches/python-pygpgme-fix-pinentry-tests.patch \
|
||||
%D%/packages/patches/python-robotframework-honor-source-date-epoch.patch \
|
||||
%D%/packages/patches/python-slugify-depend-on-unidecode.patch \
|
||||
%D%/packages/patches/python2-subprocess32-disable-input-test.patch \
|
||||
%D%/packages/patches/python-unittest2-python3-compat.patch \
|
||||
%D%/packages/patches/python-unittest2-remove-argparse.patch \
|
||||
|
|
|
@ -298,6 +298,20 @@ GP2C, the GP to C compiler, translates GP scripts to PARI programs.")
|
|||
(license license:gpl2)
|
||||
(home-page "https://pari.math.u-bordeaux.fr/")))
|
||||
|
||||
(define fplll-4-cmh
|
||||
(package
|
||||
(inherit fplll)
|
||||
(name "fplll")
|
||||
(version "4.0.4")
|
||||
(source
|
||||
(origin
|
||||
(method url-fetch)
|
||||
(uri (string-append
|
||||
"http://perso.ens-lyon.fr/damien.stehle/fplll/libfplll-"
|
||||
version ".tar.gz"))
|
||||
(sha256
|
||||
(base32 "1cbiby7ykis4z84swclpysrljmqhfcllpkcbll1m08rzskgb1a6b"))))))
|
||||
|
||||
(define-public cmh
|
||||
(package
|
||||
(name "cmh")
|
||||
|
@ -316,7 +330,7 @@ GP2C, the GP to C compiler, translates GP scripts to PARI programs.")
|
|||
("mpfr" ,mpfr)
|
||||
("mpc" ,mpc)
|
||||
("mpfrcx" ,mpfrcx)
|
||||
("fplll" ,fplll)
|
||||
("fplll" ,fplll-4-cmh)
|
||||
("pari-gp" ,pari-gp)))
|
||||
(synopsis "Igusa class polynomial computations")
|
||||
(description
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
|
||||
;;; Copyright © 2016, 2017, 2018 Roel Janssen <roel@gnu.org>
|
||||
;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||
;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -652,7 +652,7 @@ database is exposed as a @code{TxDb} object.")
|
|||
(define-public r-txdb-mmusculus-ucsc-mm10-knowngene
|
||||
(package
|
||||
(name "r-txdb-mmusculus-ucsc-mm10-knowngene")
|
||||
(version "3.4.4")
|
||||
(version "3.4.7")
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
;; We cannot use bioconductor-uri here because this tarball is
|
||||
|
@ -663,7 +663,7 @@ database is exposed as a @code{TxDb} object.")
|
|||
version ".tar.gz"))
|
||||
(sha256
|
||||
(base32
|
||||
"01lgxc1fx5nhlpbwjd5zqghkkbmh6axd98ikx4b0spv0jdg6gf39"))))
|
||||
"04impkl8zh1gpwwrpbf19jqznsjrq2306yyhm6cmx6hr1401bd6b"))))
|
||||
(properties
|
||||
`((upstream-name . "TxDb.Mmusculus.UCSC.mm10.knownGene")))
|
||||
(build-system r-build-system)
|
||||
|
|
|
@ -7237,25 +7237,6 @@ BLAST, KEGG, GenBank, MEDLINE and GO.")
|
|||
;; (LGPLv2.1+) and scripts in samples (which have GPL2 and GPL2+)
|
||||
(license (list license:ruby license:lgpl2.1+ license:gpl2+ ))))
|
||||
|
||||
(define-public r-biocinstaller
|
||||
(package
|
||||
(name "r-biocinstaller")
|
||||
(version "1.32.1")
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (bioconductor-uri "BiocInstaller" version))
|
||||
(sha256
|
||||
(base32
|
||||
"1s1f9qhyf3mc73ir25x2zlgi9hf45a37lg4z8fbva4i21hqisgsl"))))
|
||||
(properties
|
||||
`((upstream-name . "BiocInstaller")))
|
||||
(build-system r-build-system)
|
||||
(home-page "https://bioconductor.org/packages/BiocInstaller")
|
||||
(synopsis "Install Bioconductor packages")
|
||||
(description "This package is used to install and update R packages from
|
||||
Bioconductor, CRAN, and Github.")
|
||||
(license license:artistic2.0)))
|
||||
|
||||
(define-public r-biocviews
|
||||
(package
|
||||
(name "r-biocviews")
|
||||
|
@ -13622,10 +13603,10 @@ sequencing data.")
|
|||
|
||||
(define-public r-xbioc
|
||||
(let ((revision "1")
|
||||
(commit "f798c187e376fd1ba27abd559f47bbae7e3e466b"))
|
||||
(commit "6ff0670a37ab3036aaf1d94aa4b208310946b0b5"))
|
||||
(package
|
||||
(name "r-xbioc")
|
||||
(version (git-version "0.1.15" revision commit))
|
||||
(version (git-version "0.1.16" revision commit))
|
||||
(source (origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
|
@ -13634,13 +13615,13 @@ sequencing data.")
|
|||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"03hffh2f6z71y6l6dqpa5cql3hdaw7zigdi8sm2dzgx379k9rgrr"))))
|
||||
"0w8bsq5myiwkfhh83nm6is5ichiyvwa1axx2szvxnzq39x6knf66"))))
|
||||
(build-system r-build-system)
|
||||
(propagated-inputs
|
||||
`(("r-annotationdbi" ,r-annotationdbi)
|
||||
("r-assertthat" ,r-assertthat)
|
||||
("r-biobase" ,r-biobase)
|
||||
("r-biocinstaller" ,r-biocinstaller)
|
||||
("r-biocmanager" ,r-biocmanager)
|
||||
("r-digest" ,r-digest)
|
||||
("r-pkgmaker" ,r-pkgmaker)
|
||||
("r-plyr" ,r-plyr)
|
||||
|
|
|
@ -82,19 +82,22 @@
|
|||
(define-public grub
|
||||
(package
|
||||
(name "grub")
|
||||
(version "2.02")
|
||||
(version "2.04")
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (string-append "mirror://gnu/grub/grub-" version ".tar.xz"))
|
||||
(sha256
|
||||
(base32
|
||||
"03vvdfhdmf16121v7xs8is2krwnv15wpkhkf16a4yf8nsfc3f2w1"))
|
||||
(patches (search-patches "grub-check-error-efibootmgr.patch"
|
||||
"grub-binutils-compat.patch"
|
||||
"grub-efi-fat-serial-number.patch"))))
|
||||
"0zgp5m3hmc9jh8wpjx6czzkh5id2y8n1k823x2mjvm2sk6b28ag5"))
|
||||
(patches (search-patches "grub-efi-fat-serial-number.patch"))))
|
||||
(build-system gnu-build-system)
|
||||
(arguments
|
||||
`(#:phases (modify-phases %standard-phases
|
||||
`(#:configure-flags
|
||||
;; Counterintuitively, this *disables* a spurious Python dependency by
|
||||
;; calling the ‘true’ binary instead. Python is only needed during
|
||||
;; bootstrapping (for genptl.py), not when building from a release.
|
||||
(list "PYTHON=true")
|
||||
#:phases (modify-phases %standard-phases
|
||||
(add-after 'unpack 'patch-stuff
|
||||
(lambda* (#:key inputs #:allow-other-keys)
|
||||
(substitute* "grub-core/Makefile.in"
|
||||
|
@ -127,6 +130,14 @@
|
|||
(substitute* "Makefile.in"
|
||||
(("grub_cmd_date grub_cmd_set_date grub_cmd_sleep")
|
||||
"grub_cmd_date grub_cmd_sleep"))
|
||||
#t))
|
||||
(add-before 'check 'disable-pixel-perfect-test
|
||||
(lambda _
|
||||
;; This test compares many screenshots rendered with an
|
||||
;; older Unifont (9.0.06) than that packaged in Guix.
|
||||
(substitute* "Makefile.in"
|
||||
(("test_unset grub_func_test")
|
||||
"test_unset"))
|
||||
#t)))
|
||||
;; Disable tests on ARM and AARCH64 platforms.
|
||||
#:tests? ,(not (any (cute string-prefix? <> (or (%current-target-system)
|
||||
|
@ -147,9 +158,12 @@
|
|||
;; for generating alternative keyboard layouts.
|
||||
("console-setup" ,console-setup)
|
||||
|
||||
;; Needed for ‘grub-mount’, the only reliable way to tell whether a given
|
||||
;; file system will be readable by GRUB without rebooting.
|
||||
("fuse" ,fuse)
|
||||
|
||||
("freetype" ,freetype)
|
||||
;; ("libusb" ,libusb)
|
||||
;; ("fuse" ,fuse)
|
||||
("ncurses" ,ncurses)))
|
||||
(native-inputs
|
||||
`(("pkg-config" ,pkg-config)
|
||||
|
|
|
@ -760,9 +760,9 @@ from forcing GEXP-PROMISE."
|
|||
("valgrind" ,valgrind)
|
||||
("vulkan-headers" ,vulkan-headers)))
|
||||
|
||||
;; Building Chromium with a single core takes around 6 hours on an x86_64
|
||||
;; system. Give some leeway for slower or busy machines.
|
||||
(properties '((timeout . 64800))) ;18 hours
|
||||
;; Building Chromium takes ... a very long time. On a single core, a busy
|
||||
;; mid-end x86 system may need more than 24 hours to complete the build.
|
||||
(properties '((timeout . 144000))) ;40 hours
|
||||
|
||||
(home-page "https://github.com/Eloston/ungoogled-chromium")
|
||||
(description
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
;;; Copyright © 2019 Jack Hill <jackhill@jackhill.us>
|
||||
;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
|
||||
;;; Copyright © 2019 Gábor Boskovits <boskovits@gmail.com>
|
||||
;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -92,6 +93,7 @@
|
|||
#:use-module (gnu packages popt)
|
||||
#:use-module (gnu packages python)
|
||||
#:use-module (gnu packages python-crypto)
|
||||
#:use-module (gnu packages python-web)
|
||||
#:use-module (gnu packages python-xyz)
|
||||
#:use-module (gnu packages rdf)
|
||||
#:use-module (gnu packages readline)
|
||||
|
@ -3080,3 +3082,24 @@ NumPy, and other traditional Python scientific computing packages.")
|
|||
|
||||
(define-public python2-pyarrow
|
||||
(package-with-python2 python-pyarrow))
|
||||
|
||||
(define-public python-crate
|
||||
(package
|
||||
(name "python-crate")
|
||||
(version "0.23.0")
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (pypi-uri "crate" version))
|
||||
(sha256
|
||||
(base32
|
||||
"0s3s7yg4m2zflg9q96aibwb5hizsn10ql63fsj6h5z624qkavnlp"))))
|
||||
(build-system python-build-system)
|
||||
(propagated-inputs
|
||||
`(("python-urllib3" ,python-urllib3)))
|
||||
(home-page "https://github.com/crate/crate-python")
|
||||
(synopsis "CrateDB Python client")
|
||||
(description
|
||||
"This package provides a Python client library for CrateDB.
|
||||
It implements the Python DB API 2.0 specification and includes support for
|
||||
SQLAlchemy.")
|
||||
(license license:asl2.0)))
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
;;; Copyright © 2018 Rutger Helling <rhelling@mykolab.com>
|
||||
;;; Copyright © 2018, 2019 Pierre Neidhardt <mail@ambrevar.xyz>
|
||||
;;; Copyright © 2019 Leo Famulari <leo@famulari.name>
|
||||
;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -236,7 +237,8 @@ to recover data more efficiently by only reading the necessary blocks.")
|
|||
"0wy13i3i4x2bw1hf5m4fd0myh61f9bcrs035fdlf6gyc1jksrcp6"))))
|
||||
(build-system gnu-build-system)
|
||||
(arguments
|
||||
`(#:make-flags (list (string-append "PREFIX=" %output)
|
||||
`(#:configure-flags (list "--enable-compat-symlinks")
|
||||
#:make-flags (list (string-append "PREFIX=" %output)
|
||||
"CC=gcc")))
|
||||
(native-inputs
|
||||
`(("xxd" ,xxd))) ; for tests
|
||||
|
|
|
@ -250,7 +250,7 @@ easy.")
|
|||
(define-public snap
|
||||
(package
|
||||
(name "snap")
|
||||
(version "5")
|
||||
(version "5.0.1")
|
||||
(source
|
||||
(origin
|
||||
(method git-fetch)
|
||||
|
@ -260,7 +260,7 @@ easy.")
|
|||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"0bh52n7nklaaq02qb56v7bvrslf047my6irl7g8h6xfjgw04yf20"))))
|
||||
"0ic0xgal19yazbd1kffmbjhiicvvlw5clj48lj80mksa2lgvnzna"))))
|
||||
(build-system trivial-build-system)
|
||||
(arguments
|
||||
`(#:modules ((guix build utils))
|
||||
|
|
|
@ -2225,18 +2225,20 @@ display and behaviour is easily customisable.")
|
|||
(define-public emacs-git-timemachine
|
||||
(package
|
||||
(name "emacs-git-timemachine")
|
||||
(version "4.5")
|
||||
(version "4.10")
|
||||
(source
|
||||
(origin
|
||||
(method url-fetch)
|
||||
(uri (string-append "https://gitlab.com/pidu/git-timemachine"
|
||||
"/-/archive/" version
|
||||
"/git-timemachine-" version ".tar.gz"))
|
||||
(file-name (string-append name "-" version ".tar.gz"))
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://gitlab.com/pidu/git-timemachine.git")
|
||||
(commit version)))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"0ii40qcincasg7s1yrvqcxkqcqzb4sfs7gcxscn6m4x4ans165zy"))))
|
||||
"08zsn3lsnnf01wkv5ls38jga02s5dnf0j3gigy4qd6im3j3d04m1"))))
|
||||
(build-system emacs-build-system)
|
||||
(propagated-inputs
|
||||
`(("emacs-transient" ,emacs-transient)))
|
||||
(home-page "https://gitlab.com/pidu/git-timemachine")
|
||||
(synopsis "Step through historic versions of Git-controlled files")
|
||||
(description "This package enables you to step through historic versions
|
||||
|
@ -2575,7 +2577,7 @@ as horizontal rules.")
|
|||
(define-public emacs-simple-httpd
|
||||
(package
|
||||
(name "emacs-simple-httpd")
|
||||
(version "1.4.6")
|
||||
(version "1.5.1")
|
||||
(source
|
||||
(origin
|
||||
(method git-fetch)
|
||||
|
@ -2584,9 +2586,9 @@ as horizontal rules.")
|
|||
(commit version)))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32 "1qmkc0w28l53zzf5yd2grrk1sq222g5qnsm35ph25s1cfvc1qb2g"))))
|
||||
(base32 "0dpn92rg813c4pq7a1vzj3znyxzp2lmvxqz6pzcqi0l2xn5r3wvb"))))
|
||||
(build-system emacs-build-system)
|
||||
(home-page "https://github.com/skeeto/emacs-http-server")
|
||||
(home-page "https://github.com/skeeto/emacs-web-server")
|
||||
(synopsis "HTTP server in pure Emacs Lisp")
|
||||
(description
|
||||
"This package provides a simple HTTP server written in Emacs Lisp to
|
||||
|
@ -2596,7 +2598,7 @@ serve files and directory listings.")
|
|||
(define-public emacs-skewer-mode
|
||||
(package
|
||||
(name "emacs-skewer-mode")
|
||||
(version "1.6.2")
|
||||
(version "1.8.0")
|
||||
(source
|
||||
(origin
|
||||
(method git-fetch)
|
||||
|
@ -2605,7 +2607,7 @@ serve files and directory listings.")
|
|||
(commit version)))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32 "05jndz0c26q60s416vqgvr66axdmxb7qsr2g70fvl5iqavnayhpv"))))
|
||||
(base32 "1ha7jl7776pk1bki5zj2q0jy66450mn8xr3aqjc0m9kj3gc9qxgw"))))
|
||||
(build-system emacs-build-system)
|
||||
(propagated-inputs
|
||||
`(("emacs-simple-httpd" ,emacs-simple-httpd)
|
||||
|
@ -4075,6 +4077,30 @@ organizer.")
|
|||
It is built on top of the custom theme support in Emacs 24 or later.")
|
||||
(license license:gpl3+)))
|
||||
|
||||
(define-public emacs-moe-theme-el
|
||||
(let ((commit "6e086d855d6bb446bbd1090742815589a81a915f")
|
||||
(version "1.0")
|
||||
(revision "1"))
|
||||
(package
|
||||
(name "emacs-moe-theme-el")
|
||||
(version (git-version version revision commit))
|
||||
(source
|
||||
(origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://github.com/kuanyui/moe-theme.el")
|
||||
(commit commit)))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32 "0xj4wfd7h4jqnr193pizm9frf6lmwjr0dsdv2l9mqh9k691z1dnc"))))
|
||||
(build-system emacs-build-system)
|
||||
(home-page "https://github.com/kuanyui/moe-theme.el")
|
||||
(synopsis "Anime-inspired color themes")
|
||||
(description
|
||||
"This package provides vibrant color schemes with light and dark
|
||||
variants.")
|
||||
(license license:gpl3+))))
|
||||
|
||||
(define-public emacs-solarized-theme
|
||||
(package
|
||||
(name "emacs-solarized-theme")
|
||||
|
@ -4523,7 +4549,7 @@ fully-functional one.")
|
|||
(define-public emacs-hydra
|
||||
(package
|
||||
(name "emacs-hydra")
|
||||
(version "0.14.0")
|
||||
(version "0.15.0")
|
||||
(source
|
||||
(origin
|
||||
(method git-fetch)
|
||||
|
@ -4533,7 +4559,7 @@ fully-functional one.")
|
|||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"0ln4z2796ycy33g5jcxkqvm7638qxy4sipsab7d2864hh700cikg"))))
|
||||
"0fapvhmhgc9kppf3bvkgry0cd7gyilg7sfvlscfrfjxpx4xvwsfy"))))
|
||||
(build-system emacs-build-system)
|
||||
(home-page "https://github.com/abo-abo/hydra")
|
||||
(synopsis "Make Emacs bindings that stick around")
|
||||
|
@ -4757,25 +4783,26 @@ a temporary @code{keep-lines} or @code{occur}.")
|
|||
(license license:gpl3+)))
|
||||
|
||||
(define-public emacs-zoutline
|
||||
(let ((commit "b3ee0f0e0b916838c2d2c249beba74ffdb8d5699")
|
||||
(revision "0"))
|
||||
(package
|
||||
(name "emacs-zoutline")
|
||||
(version (git-version "0.1" revision commit))
|
||||
(home-page "https://github.com/abo-abo/zoutline")
|
||||
(source (origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference (url home-page) (commit commit)))
|
||||
(sha256
|
||||
(base32
|
||||
"0sd0017piw0dis6dhpq5dkqd3acisxqgipl7dj8gmc1vnswhdwr8"))
|
||||
(file-name (git-file-name name version))))
|
||||
(build-system emacs-build-system)
|
||||
(synopsis "Simple outline library")
|
||||
(description
|
||||
"This library provides helpers for outlines. Outlines allow users to
|
||||
(package
|
||||
(name "emacs-zoutline")
|
||||
(version "0.2.0")
|
||||
(source
|
||||
(origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://github.com/abo-abo/zoutline")
|
||||
(commit version)))
|
||||
(sha256
|
||||
(base32
|
||||
"1w0zh6vs7klgivq5r030a82mcfg1zwic4x3fimyiqyg5n8p67hyx"))
|
||||
(file-name (git-file-name name version))))
|
||||
(build-system emacs-build-system)
|
||||
(home-page "https://github.com/abo-abo/zoutline")
|
||||
(synopsis "Simple outline library")
|
||||
(description
|
||||
"This library provides helpers for outlines. Outlines allow users to
|
||||
navigate code in a tree-like fashion.")
|
||||
(license license:gpl3+))))
|
||||
(license license:gpl3+)))
|
||||
|
||||
(define-public emacs-lispy
|
||||
(package
|
||||
|
@ -4835,6 +4862,36 @@ keybinding style. The provided commands allow for editing Lisp in normal
|
|||
state and will work even without lispy being enabled.")
|
||||
(license license:gpl3+))))
|
||||
|
||||
(define-public emacs-lpy
|
||||
(let ((commit "553d28f7b6523ae5d44d34852ab770b871b0b0ad")
|
||||
(version "0.1.0")
|
||||
(revision "1"))
|
||||
(package
|
||||
(name "emacs-lpy")
|
||||
(version (git-version version revision commit))
|
||||
(source
|
||||
(origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://github.com/abo-abo/lpy")
|
||||
(commit commit)))
|
||||
(sha256
|
||||
(base32
|
||||
"0kl9b3gga18cwv5cq4db8i6b7waj6mp3h2l7qjnp7wq6dpvwhn0i"))
|
||||
(file-name (git-file-name name version))))
|
||||
(propagated-inputs
|
||||
`(("emacs-zoutline" ,emacs-zoutline)
|
||||
("emacs-lispy" ,emacs-lispy)))
|
||||
(build-system emacs-build-system)
|
||||
(home-page "https://github.com/abo-abo/lpy")
|
||||
(synopsis "Modal editing for Python")
|
||||
(description
|
||||
"This package provides a minor mode for Python that binds useful
|
||||
commands to unprefixed keys, such as @code{j} or @code{e}, under certain
|
||||
circumstances, and leaves the keys untouched outside of those situations,
|
||||
allowing unprefixed keys to insert their respective characters as expected.")
|
||||
(license license:gpl3+))))
|
||||
|
||||
(define-public emacs-clojure-mode
|
||||
(package
|
||||
(name "emacs-clojure-mode")
|
||||
|
@ -6103,28 +6160,33 @@ Emacs that Evil does not cover properly by default, such as @code{help-mode},
|
|||
(license license:gpl3+))))
|
||||
|
||||
(define-public emacs-goto-chg
|
||||
(package
|
||||
(name "emacs-goto-chg")
|
||||
(version "1.6")
|
||||
(source
|
||||
(origin
|
||||
(method url-fetch)
|
||||
;; There is no versioned source.
|
||||
(uri "https://www.emacswiki.org/emacs/download/goto-chg.el")
|
||||
(file-name (string-append "goto-chg-" version ".el"))
|
||||
(sha256
|
||||
(base32
|
||||
"078d6p4br5vips7b9x4v6cy0wxf6m5ij9gpqd4g33bryn22gnpij"))))
|
||||
(build-system emacs-build-system)
|
||||
;; There is no other home page.
|
||||
(home-page "https://www.emacswiki.org/emacs/goto-chg.el")
|
||||
(synopsis "Go to the last change in the Emacs buffer")
|
||||
(description
|
||||
"This package provides @code{M-x goto-last-change} command that goes to
|
||||
(let ((commit "1829a13026c597e358f716d2c7793202458120b5")
|
||||
(version "1.7.3")
|
||||
(revision "1"))
|
||||
(package
|
||||
(name "emacs-goto-chg")
|
||||
(version (git-version version revision commit))
|
||||
(source
|
||||
(origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://github.com/emacs-evil/goto-chg")
|
||||
(commit commit)))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"1y603maw9xwdj3qiarmf1bp13461f9f5ackzicsbynl0i9la3qki"))))
|
||||
(build-system emacs-build-system)
|
||||
(propagated-inputs
|
||||
`(("emacs-undo-tree" ,emacs-undo-tree)))
|
||||
(home-page "https://github.com/emacs-evil/goto-chg")
|
||||
(synopsis "Go to the last change in the Emacs buffer")
|
||||
(description
|
||||
"This package provides @code{M-x goto-last-change} command that goes to
|
||||
the point of the most recent edit in the current Emacs buffer. When repeated,
|
||||
go to the second most recent edit, etc. Negative argument, @kbd{C-u -}, is
|
||||
used for reverse direction.")
|
||||
(license license:gpl2+)))
|
||||
(license license:gpl2+))))
|
||||
|
||||
(define-public emacs-janpath-evil-numbers
|
||||
(let ((commit "d988041c1fe6e941dc8d591390750b237f71f524")
|
||||
|
@ -8321,13 +8383,13 @@ highlighting.")
|
|||
(license license:gpl3+)))
|
||||
|
||||
(define-public emacs-restclient
|
||||
(let ((commit "07a3888bb36d0e29608142ebe743b4362b800f40")
|
||||
(revision "1")) ;Guix package revision,
|
||||
(let ((commit "422ee8d8b077dffe65706a0f027ed700b84746bc")
|
||||
(version "0")
|
||||
(revision "2")) ;Guix package revision,
|
||||
;upstream doesn't have official releases
|
||||
(package
|
||||
(name "emacs-restclient")
|
||||
(version (string-append revision "."
|
||||
(string-take commit 7)))
|
||||
(version (git-version version revision commit))
|
||||
(source (origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
|
@ -8335,7 +8397,7 @@ highlighting.")
|
|||
(commit commit)))
|
||||
(sha256
|
||||
(base32
|
||||
"00lmjhb5im1kgrp54yipf1h9pshxzgjlg71yf2rq5n973gvb0w0q"))
|
||||
"067nin7vxkdpffxa0q61ybv7szihhvpdinivmci9qkbb86rs9kkz"))
|
||||
(file-name (git-file-name name version))))
|
||||
(build-system emacs-build-system)
|
||||
(propagated-inputs
|
||||
|
@ -9168,33 +9230,25 @@ contexts.
|
|||
(define-public emacs-polymode
|
||||
(package
|
||||
(name "emacs-polymode")
|
||||
(version "0.1.5")
|
||||
(version "0.2")
|
||||
(source (origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://github.com/vspinu/polymode.git")
|
||||
(url "https://github.com/polymode/polymode.git")
|
||||
(commit (string-append "v" version))))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"0wwphs54jx48a3ca6x1qaz56j3j9bg4mv8g2akkffrzbdcb8sbc7"))))
|
||||
"04v0gnzfsjb50bgly6kvpryx8cyzwjaq2llw4qv9ijw1l6ixmq3b"))))
|
||||
(build-system emacs-build-system)
|
||||
(arguments
|
||||
`(#:include (cons* "^modes/.*\\.el$" %default-include)
|
||||
#:phases
|
||||
(modify-phases %standard-phases
|
||||
(add-after 'set-emacs-load-path 'add-modes-subdir-to-load-path
|
||||
(lambda _
|
||||
(setenv "EMACSLOADPATH"
|
||||
(string-append (getenv "EMACSLOADPATH")
|
||||
":" (getcwd) "/modes" ":")))))))
|
||||
(home-page "https://github.com/vspinu/polymode")
|
||||
(home-page "https://github.com/polymode/polymode")
|
||||
(synopsis "Framework for multiple Emacs modes based on indirect buffers")
|
||||
(description "Polymode is an Emacs package that offers generic support
|
||||
for multiple major modes inside a single Emacs buffer. It is lightweight,
|
||||
object oriented and highly extensible. Creating a new polymode typically
|
||||
takes only a few lines of code. Polymode also provides extensible facilities
|
||||
for external literate programming tools for exporting, weaving and tangling.")
|
||||
(description
|
||||
"Polymode is an Emacs package that offers generic support for multiple
|
||||
major modes inside a single Emacs buffer. It is lightweight, object oriented
|
||||
and highly extensible. Creating a new polymode typically takes only a few
|
||||
lines of code. Polymode also provides extensible facilities for external
|
||||
literate programming tools for exporting, weaving and tangling.")
|
||||
(license license:gpl3+)))
|
||||
|
||||
(define-public emacs-polymode-ansible
|
||||
|
@ -9226,6 +9280,33 @@ for external literate programming tools for exporting, weaving and tangling.")
|
|||
"Edit YAML files for Ansible containing embedded Jinja2 templating.")
|
||||
(license license:gpl3+))))
|
||||
|
||||
(define-public emacs-polymode-org
|
||||
(package
|
||||
(name "emacs-polymode-org")
|
||||
(version "0.2")
|
||||
(source
|
||||
(origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://github.com/polymode/poly-org.git")
|
||||
(commit (string-append "v" version))))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"04x6apjad4kg30456z1j4ipp64yjgkcaim6hqr6bb0rmrianqhck"))))
|
||||
(build-system emacs-build-system)
|
||||
(propagated-inputs
|
||||
`(("emacs-polymode" ,emacs-polymode)))
|
||||
(properties '((upstream-name . "poly-org")))
|
||||
(home-page "https://github.com/polymode/poly-org")
|
||||
(synopsis "Polymode definitions for Org mode buffers")
|
||||
(description
|
||||
"Provides definitions for @code{emacs-polymode} to support
|
||||
@code{emacs-org} buffers. Edit source blocks in an Org mode buffer using the
|
||||
native modes of the blocks' languages while remaining inside the primary Org
|
||||
buffer.")
|
||||
(license license:gpl3+)))
|
||||
|
||||
(define-public eless
|
||||
(package
|
||||
(name "eless")
|
||||
|
@ -10675,33 +10756,30 @@ navigate and display hierarchy structures.")
|
|||
(license license:gpl3+))))
|
||||
|
||||
(define-public emacs-md4rd
|
||||
(let ((commit "c55512c2f7680db2a1e73db6bdf93adecaf40fec")
|
||||
(revision "1"))
|
||||
(package
|
||||
(name "emacs-md4rd")
|
||||
(version (string-append "0.0.2" "-" revision "."
|
||||
(string-take commit 7)))
|
||||
(source (origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://github.com/ahungry/md4rd.git")
|
||||
(commit commit)))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"0mvv1mvsrpkrmikcpfqf2zbawnzgq33j6zjdrlv48mcw57xb2ak9"))))
|
||||
(propagated-inputs
|
||||
`(("emacs-hierarchy" ,emacs-hierarchy)
|
||||
("emacs-request" ,emacs-request)
|
||||
("emacs-dash" ,emacs-dash)
|
||||
("emacs-s" ,emacs-s)
|
||||
("emacs-tree-mode" ,emacs-tree-mode)))
|
||||
(build-system emacs-build-system)
|
||||
(home-page "https://github.com/ahungry/md4rd")
|
||||
(synopsis "Emacs Mode for Reddit")
|
||||
(description
|
||||
"This package allows to read Reddit from within Emacs interactively.")
|
||||
(license license:gpl3+))))
|
||||
(package
|
||||
(name "emacs-md4rd")
|
||||
(version "0.3.1")
|
||||
(source (origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://github.com/ahungry/md4rd.git")
|
||||
(commit version)))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"1n6g6k4adzkkn1g7z4j27s35xy12c1fg2r08gv345ddr3wplq4ri"))))
|
||||
(propagated-inputs
|
||||
`(("emacs-hierarchy" ,emacs-hierarchy)
|
||||
("emacs-request" ,emacs-request)
|
||||
("emacs-dash" ,emacs-dash)
|
||||
("emacs-s" ,emacs-s)
|
||||
("emacs-tree-mode" ,emacs-tree-mode)))
|
||||
(build-system emacs-build-system)
|
||||
(home-page "https://github.com/ahungry/md4rd")
|
||||
(synopsis "Emacs Mode for Reddit")
|
||||
(description
|
||||
"This package allows to read Reddit from within Emacs interactively.")
|
||||
(license license:gpl3+)))
|
||||
|
||||
(define-public emacs-pulseaudio-control
|
||||
(let ((commit "7e1a87068379075a5e9ce36c64c686c03d20d379")
|
||||
|
@ -12265,12 +12343,10 @@ bookmarks and history.")
|
|||
(license license:gpl3+)))
|
||||
|
||||
(define-public emacs-stumpwm-mode
|
||||
(let ((commit "8fbe071d2c6c040794060a354eb377218dc10b35")
|
||||
(revision "1"))
|
||||
(let ((commit "5328f85fbf6a8b08c758c17b9435368bf7a68f39"))
|
||||
(package
|
||||
(name "emacs-stumpwm-mode")
|
||||
(version (string-append "0.0.1-" revision "."
|
||||
(string-take commit 7)))
|
||||
(version (git-version "0.0.1" "1" commit))
|
||||
(source (origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
|
@ -12279,7 +12355,7 @@ bookmarks and history.")
|
|||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"1dfwsvz1c8w6j4jp0kzaz78ml3f5dp0a5pvf090kwpbpg176r7iq"))))
|
||||
"00kf4k8bqadi5s667wb96sn549v2kvw01zwszjrg7nhd805m1ng6"))))
|
||||
(build-system emacs-build-system)
|
||||
(arguments
|
||||
`(#:phases
|
||||
|
@ -12552,7 +12628,7 @@ the current upstream.")
|
|||
(define-public emacs-company-restclient
|
||||
(package
|
||||
(name "emacs-company-restclient")
|
||||
(version "0.1.0")
|
||||
(version "0.3.0")
|
||||
(source
|
||||
(origin
|
||||
(method git-fetch)
|
||||
|
@ -12561,7 +12637,7 @@ the current upstream.")
|
|||
(commit (string-append "v" version))))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32 "0i1fh5lvqwlgn3g3fzh0xacxyljx6gkryipn133vfkv4jbns51n4"))))
|
||||
(base32 "0yp0hlrgcr6yy1xkjvfckys2k24x9xg7y6336ma61bdwn5lpv0x0"))))
|
||||
(build-system emacs-build-system)
|
||||
(propagated-inputs
|
||||
`(("emacs-company" ,emacs-company)
|
||||
|
@ -13051,14 +13127,14 @@ cohesion with the Emacs Way.")
|
|||
(version "1.1")
|
||||
(source
|
||||
(origin
|
||||
(method url-fetch)
|
||||
(uri (string-append
|
||||
"https://gitlab.com/Ambrevar/emacs-fish-completion/repository/"
|
||||
"archive.tar.gz?ref="
|
||||
version))
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://gitlab.com/Ambrevar/emacs-fish-completion.git")
|
||||
(commit version)))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"0bpvifv6c2a65nks6kvarw0hhm37fnyy74wikwf9qq1i20va0fpv"))))
|
||||
"1pjqnbyjmj64q5nwq1mrdxcls4fp5y0b6zqs785i0s6wdvrm4021"))))
|
||||
(build-system emacs-build-system)
|
||||
(inputs `(("fish" ,fish)))
|
||||
(arguments
|
||||
|
@ -13069,6 +13145,7 @@ cohesion with the Emacs Way.")
|
|||
(let ((fish (assoc-ref inputs "fish")))
|
||||
;; Specify the absolute file names of the various
|
||||
;; programs so that everything works out-of-the-box.
|
||||
(make-file-writable "fish-completion.el")
|
||||
(emacs-substitute-variables
|
||||
"fish-completion.el"
|
||||
("fish-completion-command"
|
||||
|
@ -14912,18 +14989,18 @@ opposed to character-based).")
|
|||
(package
|
||||
(name "emacs-disk-usage")
|
||||
(version "1.3.3")
|
||||
(home-page "https://gitlab.com/Ambrevar/emacs-disk-usage")
|
||||
(source
|
||||
(origin
|
||||
(method url-fetch)
|
||||
(uri (string-append
|
||||
"https://elpa.gnu.org/packages/disk-usage-"
|
||||
version
|
||||
".el"))
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://gitlab.com/Ambrevar/emacs-disk-usage.git")
|
||||
(commit version)))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"0h1jwznd41gi0vg830ilfgm01q05zknikzahwasm9cizwm2wyizj"))))
|
||||
"0hv2gsd8k5fbjgckgiyisq4rn1i7y4rchbjy8kmixjv6mx563bll"))))
|
||||
(build-system emacs-build-system)
|
||||
(home-page "https://gitlab.com/Ambrevar/emacs-disk-usage")
|
||||
(synopsis "Sort and browse disk usage listings with Emacs")
|
||||
(description "Disk Usage is a file system analyzer: it offers a tabulated
|
||||
view of file listings sorted by size. Directory sizes are computed
|
||||
|
|
|
@ -7594,16 +7594,16 @@ views can be printed as PDF or PostScript files, or exported to HTML.")
|
|||
(define-public lollypop
|
||||
(package
|
||||
(name "lollypop")
|
||||
(version "0.9.521")
|
||||
(version "1.1.3.1")
|
||||
(source
|
||||
(origin
|
||||
(method url-fetch)
|
||||
(uri (string-append "https://gitlab.gnome.org/World/lollypop/uploads/"
|
||||
"e4df2ed75c5ed71d64afcc668e579b2a/"
|
||||
"5a7cd7c72b6d83ae08d0c54c4691f9df/"
|
||||
name "-" version ".tar.xz"))
|
||||
(sha256
|
||||
(base32
|
||||
"0knsqh24siyw98vmiq6b1hzq4y4cazs9f1hq1js9c96hqqj9rvdx"))))
|
||||
"1r5wn0bja9psz6nr1rcaysdkkwz84rbyzpdfw66cxa6wiy52pkjm"))))
|
||||
(build-system meson-build-system)
|
||||
(arguments
|
||||
`(#:imported-modules ((guix build python-build-system)
|
||||
|
@ -7636,6 +7636,7 @@ views can be printed as PDF or PostScript files, or exported to HTML.")
|
|||
("python" ,python)
|
||||
("python-beautifulsoup4" ,python-beautifulsoup4)
|
||||
("python-gst" ,python-gst)
|
||||
("python-pil" ,python-pillow)
|
||||
("python-pycairo" ,python-pycairo)
|
||||
("python-pygobject" ,python-pygobject)
|
||||
("python-pylast" ,python-pylast)
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
|
||||
;;; Copyright © 2016 Mark H Weaver <mhw@netris.org>
|
||||
;;; Copyright © 2016, 2017, 2018, 2019 ng0 <ng0@n0.is>
|
||||
;;; Copyright © 2016, 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||
;;; Copyright © 2016, 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||
;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
|
@ -146,14 +146,14 @@ tool to extract metadata from a file and print the results.")
|
|||
(define-public libmicrohttpd
|
||||
(package
|
||||
(name "libmicrohttpd")
|
||||
(version "0.9.64")
|
||||
(version "0.9.65")
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (string-append "mirror://gnu/libmicrohttpd/libmicrohttpd-"
|
||||
version ".tar.gz"))
|
||||
(sha256
|
||||
(base32
|
||||
"03imzkd1hl2mkkpi84vg5xq9x6b58gwsv86ym85km0lhb7nxi4p7"))))
|
||||
"1jdk6wigvnkh5bi9if4rik8i9sbvdql61lm8ipgpypyxqmcpjipj"))))
|
||||
(build-system gnu-build-system)
|
||||
(inputs
|
||||
`(("curl" ,curl)
|
||||
|
|
|
@ -147,7 +147,7 @@ between two other data points.")
|
|||
(define-public gama
|
||||
(package
|
||||
(name "gama")
|
||||
(version "2.03")
|
||||
(version "2.06")
|
||||
(source
|
||||
(origin
|
||||
(method url-fetch)
|
||||
|
@ -155,7 +155,7 @@ between two other data points.")
|
|||
version ".tar.gz"))
|
||||
(sha256
|
||||
(base32
|
||||
"0d33yyasnx54c6i40rkr9by4qv92rqb8wkmp5r46nz7bbp9kpymv"))))
|
||||
"06xp3kj099b6m2fsmgcbzgj7xk4j0drsps52m4fr8vc6fglsh44p"))))
|
||||
(build-system gnu-build-system)
|
||||
(arguments '(#:parallel-tests? #f)) ; race condition
|
||||
(native-inputs
|
||||
|
|
|
@ -1411,7 +1411,7 @@ that the Ethernet protocol is much simpler than the IP protocol.")
|
|||
(define-public iproute
|
||||
(package
|
||||
(name "iproute2")
|
||||
(version "5.1.0")
|
||||
(version "5.2.0")
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (string-append
|
||||
|
@ -1419,7 +1419,7 @@ that the Ethernet protocol is much simpler than the IP protocol.")
|
|||
version ".tar.xz"))
|
||||
(sha256
|
||||
(base32
|
||||
"1kvvrz5mlpjxqcm7vl6i8w6l1cb2amp6p5xyq006pgzafc49hnnw"))))
|
||||
"1a2dywa2kam24951byv9pl32mb9z6klh7d4vp8fwfgrm4vn5vfd5"))))
|
||||
(build-system gnu-build-system)
|
||||
(arguments
|
||||
`( ;; There is a test suite, but it wants network namespaces and sudo.
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
;;; Copyright © 2016, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
|
||||
;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
|
||||
;;; Copyright © 2018, 2019 Marius Bakke <mbakke@fastmail.com>
|
||||
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||
;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||
;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
|
||||
;;; Copyright © 2018 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
|
||||
;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
|
||||
|
@ -332,12 +332,12 @@ requirements according to version 1.1 of the OpenCL specification.")
|
|||
(version (package-version llvm))
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (string-append "http://releases.llvm.org/"
|
||||
(uri (string-append "https://releases.llvm.org/"
|
||||
version "/openmp-" version
|
||||
".src.tar.xz"))
|
||||
(sha256
|
||||
(base32
|
||||
"030dkg5cypd7j9hq0mcqb5gs31lxwmzfq52j81l7v9ldcy5bf5mz"))
|
||||
"1mf9cpgvix34xlpv0inkgl3qmdvgvp96f7sksqizri0n5xfp1cgp"))
|
||||
(file-name (string-append "libomp-" version ".tar.xz"))))
|
||||
(build-system cmake-build-system)
|
||||
;; XXX: Note this gets built with GCC because building with Clang itself
|
||||
|
|
|
@ -3747,7 +3747,7 @@ audio samples and various soft sythesizers. It can receive input from a MIDI ke
|
|||
(define-public musescore
|
||||
(package
|
||||
(name "musescore")
|
||||
(version "3.2")
|
||||
(version "3.2.3")
|
||||
(source (origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
|
@ -3756,7 +3756,7 @@ audio samples and various soft sythesizers. It can receive input from a MIDI ke
|
|||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"0719p4hjlq7skga8q4hvnd5w33vhrd1a1aygvqm9pn4na02zazy6"))
|
||||
"17wx1wl8ns2k31qvrr888dxnrsa13vazg04zh2sn2q4vzd869a7v"))
|
||||
(modules '((guix build utils)))
|
||||
(snippet
|
||||
;; Un-bundle OpenSSL and remove unused libraries.
|
||||
|
|
|
@ -563,16 +563,16 @@ transactions from C or Python.")
|
|||
(define-public diffoscope
|
||||
(package
|
||||
(name "diffoscope")
|
||||
(version (git-version "115" "1" "7f3416ffd12572b42c814e43ac15cee44ef48155"))
|
||||
(version "116")
|
||||
(source (origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://salsa.debian.org/reproducible-builds/diffoscope.git")
|
||||
(commit "7f3416ffd12572b42c814e43ac15cee44ef48155")))
|
||||
(commit "116")))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"1pn2rwlz5shdx7s63798wx2v7029bl5if6dlq3i2r6zsnpp0laki"))))
|
||||
"1anz2c112y0w21mh7xp6bs6z7v10dcy1i25nypkvqy3j929m0g28"))))
|
||||
(build-system python-build-system)
|
||||
(arguments
|
||||
`(#:phases (modify-phases %standard-phases
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
diff --git a/tests/test_utilities/test_csvsql.py b/tests/test_utilities/test_csvsql.py
|
||||
index e6ec4af..4f47980 100644
|
||||
--- a/tests/test_utilities/test_csvsql.py
|
||||
+++ b/tests/test_utilities/test_csvsql.py
|
||||
@@ -197,7 +197,7 @@ class TestCSVSQL(CSVKitTestCase, EmptyFileTests):
|
||||
utility.run()
|
||||
output = output_file.getvalue()
|
||||
output_file.close()
|
||||
- self.assertEqual(output, 'a,b,c\n1,2,3\n0,5,6\n')
|
||||
+ self.assertEqual(output, 'a,b,c\n1,2.0,3.0\n0,5.0,6.0\n')
|
||||
|
||||
def test_no_prefix_unique_constraint(self):
|
||||
self.get_output(['--db', 'sqlite:///' + self.db_file, '--insert', 'examples/dummy.csv', '--unique-constraint', 'a'])
|
||||
diff --git a/tests/test_utilities/test_sql2csv.py b/tests/test_utilities/test_sql2csv.py
|
||||
index a0c3d3e..babcfd6 100644
|
||||
--- a/tests/test_utilities/test_sql2csv.py
|
||||
+++ b/tests/test_utilities/test_sql2csv.py
|
||||
@@ -121,23 +121,23 @@ class TestSQL2CSV(CSVKitTestCase, EmptyFileTests):
|
||||
input_file.close()
|
||||
|
||||
def test_unicode(self):
|
||||
- expected = self.csvsql('examples/test_utf8.csv')
|
||||
+ self.csvsql('examples/test_utf8.csv')
|
||||
csv = self.get_output(['--db', 'sqlite:///' + self.db_file, '--query', 'select * from foo'])
|
||||
- self.assertEqual(csv.strip(), expected)
|
||||
+ self.assertEqual(csv.strip(), 'foo,bar,baz\n1.0,2.0,3\n4.0,5.0,ʤ')
|
||||
|
||||
def test_no_header_row(self):
|
||||
self.csvsql('examples/dummy.csv')
|
||||
csv = self.get_output(['--db', 'sqlite:///' + self.db_file, '--no-header-row', '--query', 'select * from foo'])
|
||||
|
||||
self.assertTrue('a,b,c' not in csv)
|
||||
- self.assertTrue('1,2,3' in csv)
|
||||
+ self.assertTrue('1,2.0,3.0' in csv)
|
||||
|
||||
def test_linenumbers(self):
|
||||
self.csvsql('examples/dummy.csv')
|
||||
csv = self.get_output(['--db', 'sqlite:///' + self.db_file, '--linenumbers', '--query', 'select * from foo'])
|
||||
|
||||
self.assertTrue('line_number,a,b,c' in csv)
|
||||
- self.assertTrue('1,1,2,3' in csv)
|
||||
+ self.assertTrue('1,1,2.0,3.0' in csv)
|
||||
|
||||
def test_wildcard_on_sqlite(self):
|
||||
self.csvsql('examples/iris.csv')
|
|
@ -1,53 +0,0 @@
|
|||
Fix a relocation issue that shows up with recent binutils.
|
||||
|
||||
Patch taken from upstream:
|
||||
https://git.sv.gnu.org/cgit/grub.git/commit/?id=842c390469e2c2e10b5aa36700324cd3bde25875
|
||||
|
||||
diff --git a/grub-core/efiemu/i386/loadcore64.c b/grub-core/efiemu/i386/loadcore64.c
|
||||
index e49d0b6..18facf4 100644
|
||||
--- a/grub-core/efiemu/i386/loadcore64.c
|
||||
+++ b/grub-core/efiemu/i386/loadcore64.c
|
||||
@@ -98,6 +98,7 @@ grub_arch_efiemu_relocate_symbols64 (grub_efiemu_segment_t segs,
|
||||
break;
|
||||
|
||||
case R_X86_64_PC32:
|
||||
+ case R_X86_64_PLT32:
|
||||
err = grub_efiemu_write_value (addr,
|
||||
*addr32 + rel->r_addend
|
||||
+ sym.off
|
||||
diff --git a/grub-core/kern/x86_64/dl.c b/grub-core/kern/x86_64/dl.c
|
||||
index 4406906..3a73e6e 100644
|
||||
--- a/grub-core/kern/x86_64/dl.c
|
||||
+++ b/grub-core/kern/x86_64/dl.c
|
||||
@@ -70,6 +70,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
|
||||
break;
|
||||
|
||||
case R_X86_64_PC32:
|
||||
+ case R_X86_64_PLT32:
|
||||
{
|
||||
grub_int64_t value;
|
||||
value = ((grub_int32_t) *addr32) + rel->r_addend + sym->st_value -
|
||||
diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c
|
||||
index a2bb054..39d7efb 100644
|
||||
--- a/util/grub-mkimagexx.c
|
||||
+++ b/util/grub-mkimagexx.c
|
||||
@@ -841,6 +841,7 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections,
|
||||
break;
|
||||
|
||||
case R_X86_64_PC32:
|
||||
+ case R_X86_64_PLT32:
|
||||
{
|
||||
grub_uint32_t *t32 = (grub_uint32_t *) target;
|
||||
*t32 = grub_host_to_target64 (grub_target_to_host32 (*t32)
|
||||
diff --git a/util/grub-module-verifier.c b/util/grub-module-verifier.c
|
||||
index 9179285..a79271f 100644
|
||||
--- a/util/grub-module-verifier.c
|
||||
+++ b/util/grub-module-verifier.c
|
||||
@@ -19,6 +19,7 @@ struct grub_module_verifier_arch archs[] = {
|
||||
-1
|
||||
}, (int[]){
|
||||
R_X86_64_PC32,
|
||||
+ R_X86_64_PLT32,
|
||||
-1
|
||||
}
|
||||
},
|
|
@ -1,197 +0,0 @@
|
|||
Without this patch, GRUB may proceed to wipe all firmware boot entries
|
||||
and report a successful installation, even if efibootmgr hit an error.
|
||||
|
||||
Origin URL:
|
||||
https://git.sv.gnu.org/cgit/grub.git/commit/?id=6400613ad0b463abc93362086a491cd2a5e99b0d
|
||||
|
||||
From 6400613ad0b463abc93362086a491cd2a5e99b0d Mon Sep 17 00:00:00 2001
|
||||
From: Steve McIntyre <steve@einval.com>
|
||||
Date: Wed, 31 Jan 2018 21:49:36 +0000
|
||||
Subject: Make grub-install check for errors from efibootmgr
|
||||
|
||||
Code is currently ignoring errors from efibootmgr, giving users
|
||||
clearly bogus output like:
|
||||
|
||||
Setting up grub-efi-amd64 (2.02~beta3-4) ...
|
||||
Installing for x86_64-efi platform.
|
||||
Could not delete variable: No space left on device
|
||||
Could not prepare Boot variable: No space left on device
|
||||
Installation finished. No error reported.
|
||||
|
||||
and then potentially unbootable systems. If efibootmgr fails, grub-install
|
||||
should know that and report it!
|
||||
|
||||
We've been using similar patch in Debian now for some time, with no ill effects.
|
||||
|
||||
diff --git a/grub-core/osdep/unix/platform.c b/grub-core/osdep/unix/platform.c
|
||||
index a3fcfca..ca448bc 100644
|
||||
--- a/grub-core/osdep/unix/platform.c
|
||||
+++ b/grub-core/osdep/unix/platform.c
|
||||
@@ -78,19 +78,20 @@ get_ofpathname (const char *dev)
|
||||
dev);
|
||||
}
|
||||
|
||||
-static void
|
||||
+static int
|
||||
grub_install_remove_efi_entries_by_distributor (const char *efi_distributor)
|
||||
{
|
||||
int fd;
|
||||
pid_t pid = grub_util_exec_pipe ((const char * []){ "efibootmgr", NULL }, &fd);
|
||||
char *line = NULL;
|
||||
size_t len = 0;
|
||||
+ int rc;
|
||||
|
||||
if (!pid)
|
||||
{
|
||||
grub_util_warn (_("Unable to open stream from %s: %s"),
|
||||
"efibootmgr", strerror (errno));
|
||||
- return;
|
||||
+ return errno;
|
||||
}
|
||||
|
||||
FILE *fp = fdopen (fd, "r");
|
||||
@@ -98,7 +99,7 @@ grub_install_remove_efi_entries_by_distributor (const char *efi_distributor)
|
||||
{
|
||||
grub_util_warn (_("Unable to open stream from %s: %s"),
|
||||
"efibootmgr", strerror (errno));
|
||||
- return;
|
||||
+ return errno;
|
||||
}
|
||||
|
||||
line = xmalloc (80);
|
||||
@@ -119,23 +120,25 @@ grub_install_remove_efi_entries_by_distributor (const char *efi_distributor)
|
||||
bootnum = line + sizeof ("Boot") - 1;
|
||||
bootnum[4] = '\0';
|
||||
if (!verbosity)
|
||||
- grub_util_exec ((const char * []){ "efibootmgr", "-q",
|
||||
+ rc = grub_util_exec ((const char * []){ "efibootmgr", "-q",
|
||||
"-b", bootnum, "-B", NULL });
|
||||
else
|
||||
- grub_util_exec ((const char * []){ "efibootmgr",
|
||||
+ rc = grub_util_exec ((const char * []){ "efibootmgr",
|
||||
"-b", bootnum, "-B", NULL });
|
||||
}
|
||||
|
||||
free (line);
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
-void
|
||||
+int
|
||||
grub_install_register_efi (grub_device_t efidir_grub_dev,
|
||||
const char *efifile_path,
|
||||
const char *efi_distributor)
|
||||
{
|
||||
const char * efidir_disk;
|
||||
int efidir_part;
|
||||
+ int ret;
|
||||
efidir_disk = grub_util_biosdisk_get_osdev (efidir_grub_dev->disk);
|
||||
efidir_part = efidir_grub_dev->disk->partition ? efidir_grub_dev->disk->partition->number + 1 : 1;
|
||||
|
||||
@@ -151,23 +154,26 @@ grub_install_register_efi (grub_device_t efidir_grub_dev,
|
||||
grub_util_exec ((const char * []){ "modprobe", "-q", "efivars", NULL });
|
||||
#endif
|
||||
/* Delete old entries from the same distributor. */
|
||||
- grub_install_remove_efi_entries_by_distributor (efi_distributor);
|
||||
+ ret = grub_install_remove_efi_entries_by_distributor (efi_distributor);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
|
||||
char *efidir_part_str = xasprintf ("%d", efidir_part);
|
||||
|
||||
if (!verbosity)
|
||||
- grub_util_exec ((const char * []){ "efibootmgr", "-q",
|
||||
+ ret = grub_util_exec ((const char * []){ "efibootmgr", "-q",
|
||||
"-c", "-d", efidir_disk,
|
||||
"-p", efidir_part_str, "-w",
|
||||
"-L", efi_distributor, "-l",
|
||||
efifile_path, NULL });
|
||||
else
|
||||
- grub_util_exec ((const char * []){ "efibootmgr",
|
||||
+ ret = grub_util_exec ((const char * []){ "efibootmgr",
|
||||
"-c", "-d", efidir_disk,
|
||||
"-p", efidir_part_str, "-w",
|
||||
"-L", efi_distributor, "-l",
|
||||
efifile_path, NULL });
|
||||
free (efidir_part_str);
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
void
|
||||
diff --git a/include/grub/util/install.h b/include/grub/util/install.h
|
||||
index 5910b0c..0dba8b6 100644
|
||||
--- a/include/grub/util/install.h
|
||||
+++ b/include/grub/util/install.h
|
||||
@@ -210,7 +210,7 @@ grub_install_create_envblk_file (const char *name);
|
||||
const char *
|
||||
grub_install_get_default_x86_platform (void);
|
||||
|
||||
-void
|
||||
+int
|
||||
grub_install_register_efi (grub_device_t efidir_grub_dev,
|
||||
const char *efifile_path,
|
||||
const char *efi_distributor);
|
||||
diff --git a/util/grub-install.c b/util/grub-install.c
|
||||
index 5e4cdfd..690f180 100644
|
||||
--- a/util/grub-install.c
|
||||
+++ b/util/grub-install.c
|
||||
@@ -1848,9 +1848,13 @@ main (int argc, char *argv[])
|
||||
if (!removable && update_nvram)
|
||||
{
|
||||
/* Try to make this image bootable using the EFI Boot Manager, if available. */
|
||||
- grub_install_register_efi (efidir_grub_dev,
|
||||
- "\\System\\Library\\CoreServices",
|
||||
- efi_distributor);
|
||||
+ int ret;
|
||||
+ ret = grub_install_register_efi (efidir_grub_dev,
|
||||
+ "\\System\\Library\\CoreServices",
|
||||
+ efi_distributor);
|
||||
+ if (ret)
|
||||
+ grub_util_error (_("efibootmgr failed to register the boot entry: %s"),
|
||||
+ strerror (ret));
|
||||
}
|
||||
|
||||
grub_device_close (ins_dev);
|
||||
@@ -1871,6 +1875,7 @@ main (int argc, char *argv[])
|
||||
{
|
||||
char * efifile_path;
|
||||
char * part;
|
||||
+ int ret;
|
||||
|
||||
/* Try to make this image bootable using the EFI Boot Manager, if available. */
|
||||
if (!efi_distributor || efi_distributor[0] == '\0')
|
||||
@@ -1887,7 +1892,10 @@ main (int argc, char *argv[])
|
||||
efidir_grub_dev->disk->name,
|
||||
(part ? ",": ""), (part ? : ""));
|
||||
grub_free (part);
|
||||
- grub_install_register_efi (efidir_grub_dev,
|
||||
- efifile_path, efi_distributor);
|
||||
+ ret = grub_install_register_efi (efidir_grub_dev,
|
||||
+ efifile_path, efi_distributor);
|
||||
+ if (ret)
|
||||
+ grub_util_error (_("efibootmgr failed to register the boot entry: %s"),
|
||||
+ strerror (ret));
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
Below is a followup to the patch above: the uninitialized variable could lead
|
||||
‘grub-install’ to error out when it shouldn’t (seen on an AArch64 box where
|
||||
‘grub_install_remove_efi_entries_by_distributor’ didn't have any entry to
|
||||
remove):
|
||||
|
||||
grub-install: error: efibootmgr failed to register the boot entry: Unknown error 65535.
|
||||
|
||||
See <http://lists.gnu.org/archive/html/bug-grub/2018-10/msg00006.html>.
|
||||
|
||||
--- grub-2.02/grub-core/osdep/unix/platform.c 2018-10-17 22:21:53.015284846 +0200
|
||||
+++ grub-2.02/grub-core/osdep/unix/platform.c 2018-10-17 22:21:55.595271222 +0200
|
||||
@@ -85,7 +85,7 @@ grub_install_remove_efi_entries_by_distr
|
||||
pid_t pid = grub_util_exec_pipe ((const char * []){ "efibootmgr", NULL }, &fd);
|
||||
char *line = NULL;
|
||||
size_t len = 0;
|
||||
- int rc;
|
||||
+ int rc = 0;
|
||||
|
||||
if (!pid)
|
||||
{
|
|
@ -4,22 +4,23 @@ serial number (instead of the randomly chosen one) to create EFI
|
|||
images (the 'efi.img' file) that are reproducible bit-for-bit.
|
||||
|
||||
Patch by Ludovic Courtès <ludo@gnu.org>.
|
||||
Mangled (for GRUB 2.04) by Tobias Geerinckx-Rice <me@tobias.gr>.
|
||||
|
||||
--- grub-2.02/util/grub-mkrescue.c 2019-04-20 19:15:26.180242812 +0200
|
||||
+++ grub-2.02/util/grub-mkrescue.c 2019-04-20 21:56:34.672370849 +0200
|
||||
@@ -788,8 +788,15 @@ main (int argc, char *argv[])
|
||||
--- grub-2.04/util/grub-mkrescue.c 2019-05-20 13:01:11.000000000 +0200
|
||||
+++ grub-2.04/util/grub-mkrescue.c 2019-07-08 23:57:36.912104652 +0200
|
||||
@@ -809,8 +809,15 @@
|
||||
free (efidir_efi_boot);
|
||||
|
||||
efiimgfat = grub_util_path_concat (2, iso9660_dir, "efi.img");
|
||||
int rv;
|
||||
- rv = grub_util_exec ((const char * []) { "mformat", "-C", "-f", "2880", "-L", "16", "-i",
|
||||
- efiimgfat, "::", NULL });
|
||||
+
|
||||
+ const char *fat_serial_number = getenv ("GRUB_FAT_SERIAL_NUMBER");
|
||||
+ const char *mformat_args[] =
|
||||
+ { "mformat", "-C", "-f", "2880", "-L", "16",
|
||||
+ fat_serial_number != NULL ? "-N" : "-C",
|
||||
+ fat_serial_number != NULL ? fat_serial_number : "-C",
|
||||
+ "-i", efiimgfat, "::", NULL };
|
||||
+ { "mformat", "-C", "-f", "2880", "-L", "16",
|
||||
+ fat_serial_number != NULL ? "-N" : "-C",
|
||||
+ fat_serial_number != NULL ? fat_serial_number : "-C",
|
||||
+ "-i", efiimgfat, "::", NULL };
|
||||
+
|
||||
+ rv = grub_util_exec (mformat_args);
|
||||
if (rv != 0)
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
diff --git a/setup.py b/setup.py
|
||||
index 4800173..6bdd77f 100755
|
||||
--- a/setup.py
|
||||
+++ b/setup.py
|
||||
@@ -14,8 +14,7 @@ url = 'https://github.com/un33k/python-slugify'
|
||||
author = 'Val Neekman'
|
||||
author_email = 'info@neekware.com'
|
||||
license = 'MIT'
|
||||
-install_requires = ['text-unidecode==1.2']
|
||||
-extras_require = {'unidecode': ['Unidecode==1.0.23']}
|
||||
+install_requires = ['Unidecode']
|
||||
|
||||
classifiers = [
|
||||
'Development Status :: 5 - Production/Stable',
|
||||
@@ -67,7 +66,6 @@ setup(
|
||||
author_email=author_email,
|
||||
packages=find_packages(exclude=EXCLUDE_FROM_PACKAGES),
|
||||
install_requires=install_requires,
|
||||
- extras_require=extras_require,
|
||||
classifiers=classifiers,
|
||||
entry_points={'console_scripts': ['slugify=slugify.slugify:main']},
|
||||
)
|
|
@ -29,6 +29,7 @@
|
|||
;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
|
||||
;;; Copyright © 2019 Vagrant Cascadian <vagrant@debian.org>
|
||||
;;; Copyright © 2019 Brendan Tildesley <mail@brendan.scot>
|
||||
;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -3165,3 +3166,33 @@ Python.")
|
|||
(propagated-inputs
|
||||
`(("python-gevent" ,python2-gevent)
|
||||
("python-tornado" ,python2-tornado)))))
|
||||
|
||||
(define-public python-slugify
|
||||
(package
|
||||
(name "python-slugify")
|
||||
(version "3.0.2")
|
||||
(source
|
||||
(origin
|
||||
(method url-fetch)
|
||||
(uri (pypi-uri "python-slugify" version))
|
||||
(sha256
|
||||
(base32
|
||||
"0n6pfmsq899c54plpvzi46l7zrpa3zfpm8im6h32czjw6kxky5jp"))
|
||||
(patches
|
||||
(search-patches "python-slugify-depend-on-unidecode.patch"))))
|
||||
(native-inputs
|
||||
`(("python-wheel" ,python-wheel)))
|
||||
(propagated-inputs
|
||||
`(("python-unidecode" ,python-unidecode)))
|
||||
(arguments
|
||||
`(#:phases
|
||||
(modify-phases %standard-phases
|
||||
(replace 'check
|
||||
(lambda _
|
||||
(invoke "python" "test.py"))))))
|
||||
(build-system python-build-system)
|
||||
(home-page "https://github.com/un33k/python-slugify")
|
||||
(synopsis "Python Slugify application that handles Unicode")
|
||||
(description "This package provides a @command{slufigy} command and
|
||||
library to create slugs from unicode strings while keeping it DRY.")
|
||||
(license license:expat)))
|
||||
|
|
|
@ -62,6 +62,7 @@
|
|||
;;; Copyright © 2019 Jack Hill <jackhill@jackhill.us>
|
||||
;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
|
||||
;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
|
||||
;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -15932,3 +15933,24 @@ hash, recno, and queue. Complete support of Berkeley DB distributed
|
|||
transactions. Complete support for Berkeley DB Replication Manager.
|
||||
Complete support for Berkeley DB Base Replication. Support for RPC.")
|
||||
(license license:bsd-3)))
|
||||
|
||||
(define-public python-dbfread
|
||||
(package
|
||||
(name "python-dbfread")
|
||||
(version "2.0.7")
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (pypi-uri "dbfread" version))
|
||||
(sha256
|
||||
(base32
|
||||
"0gdpwdzf1fngsi6jrdyj4qdf6cr7gnnr3zp80dpkzbgz0spskj07"))))
|
||||
(build-system python-build-system)
|
||||
(native-inputs
|
||||
`(("python-pytest" ,python-pytest)))
|
||||
(home-page "https://dbfread.readthedocs.io")
|
||||
(synopsis "Read DBF Files with Python")
|
||||
(description
|
||||
"This library reads DBF files and returns the data as native Python data
|
||||
types for further processing. It is primarily intended for batch jobs and
|
||||
one-off scripts.")
|
||||
(license license:expat)))
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
|
||||
;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
|
||||
;;; Copyright © 2019 Kyle Meyer <kyle@kyleam.com>
|
||||
;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -65,6 +66,26 @@ program uses. The display output of the program can be customized or saved
|
|||
to a file.")
|
||||
(license gpl3+)))
|
||||
|
||||
(define-public python-pytimeparse
|
||||
(package
|
||||
(name "python-pytimeparse")
|
||||
(version "1.1.8")
|
||||
(source
|
||||
(origin
|
||||
(method url-fetch)
|
||||
(uri (pypi-uri "pytimeparse" version))
|
||||
(sha256
|
||||
(base32
|
||||
"02kaambsgpjx3zi42j6l11rwms2p35b9hsk4f3kdf979gd3kcqg8"))))
|
||||
(native-inputs
|
||||
`(("python-nose" ,python-nose)))
|
||||
(build-system python-build-system)
|
||||
(home-page "https://github.com/wroberts/pytimeparse")
|
||||
(synopsis "Time expression parser")
|
||||
(description "This small Python module parses various kinds of time
|
||||
expressions.")
|
||||
(license expat)))
|
||||
|
||||
(define-public python-pytzdata
|
||||
(package
|
||||
(name "python-pytzdata")
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
|
||||
;;; Copyright © 2019 Brendan Tildesley <mail@brendan.scot>
|
||||
;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
|
||||
;;; Copyright © 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -5238,16 +5239,28 @@ command-line arguments or read from stdin.")
|
|||
(define-public python-internetarchive
|
||||
(package
|
||||
(name "python-internetarchive")
|
||||
(version "1.7.4")
|
||||
(version "1.8.5")
|
||||
(source
|
||||
(origin
|
||||
(method url-fetch)
|
||||
(uri (string-append "https://github.com/jjjake/internetarchive/archive/"
|
||||
"v" version ".tar.gz"))
|
||||
(file-name (string-append name "-" version ".tar.gz"))
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://github.com/jjjake/internetarchive")
|
||||
(commit (string-append "v" version))))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"0sdbb2ag6vmybi8zmbjszi492a587giaaqxyy1p6gy03cb8mc512"))))
|
||||
"0ih7hplv92wbv6cmgc1gs0v35qkajwicalwcq8vcljw30plr24fp"))
|
||||
(modules '((guix build utils)))
|
||||
(snippet
|
||||
'(begin
|
||||
;; Python 3.7 removed `_pattern_type'.
|
||||
(for-each (lambda (file)
|
||||
(chmod file #o644)
|
||||
(substitute* file
|
||||
(("^import re\n" line)
|
||||
(string-append line "re._pattern_type = re.Pattern\n"))))
|
||||
(find-files "." "\\.py$"))
|
||||
#t))))
|
||||
(build-system python-build-system)
|
||||
(arguments
|
||||
`(#:phases
|
||||
|
@ -6498,3 +6511,30 @@ update an existing mirrored site, and resume interrupted downloads.
|
|||
|
||||
HTTrack is fully configurable, and has an integrated help system.")
|
||||
(license license:gpl3+)))
|
||||
|
||||
(define-public anonip
|
||||
(package
|
||||
(name "anonip")
|
||||
(version "1.0.0")
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (pypi-uri "anonip" version))
|
||||
(sha256
|
||||
(base32
|
||||
"0ckn9nnfhpdnz8b92q8pkysdqj6pdh71ckfqvfj0z01cq0hzbhd2"))))
|
||||
(build-system python-build-system)
|
||||
(home-page "https://github.com/DigitaleGesellschaft/Anonip")
|
||||
(synopsis "Anonymize IP addresses in log files")
|
||||
(description
|
||||
"Anonip masks the last bits of IPv4 and IPv6 addresses in log files.
|
||||
That way most of the relevant information is preserved, while the IP address
|
||||
does not match a particular individuum anymore.
|
||||
|
||||
Depending on your Web server, the log entries may be piped to Anonip directly
|
||||
or via a FIFO (named pipe). Thus the unmasked IP addresses will never be
|
||||
written to any file.
|
||||
|
||||
It's also possible to rewrite existing log files.
|
||||
|
||||
Anonip can also be uses as a Python module in your own Python application.")
|
||||
(license license:bsd-3)))
|
||||
|
|
|
@ -79,7 +79,7 @@ in downloaded documents to relative links.")
|
|||
(define-public wgetpaste
|
||||
(package
|
||||
(name "wgetpaste")
|
||||
(version "2.28")
|
||||
(version "2.29")
|
||||
(source
|
||||
(origin
|
||||
(method url-fetch)
|
||||
|
@ -87,10 +87,10 @@ in downloaded documents to relative links.")
|
|||
version ".tar.bz2"))
|
||||
(sha256
|
||||
(base32
|
||||
"1hh9svyypqcvdg5mjxyyfzpdzhylhf7s7xq5dzglnm4injx3i3ak"))))
|
||||
"1rp0wxr3zy7y2xp3azaadfghrx7g0m138f9qg6icjxkkz4vj9r22"))))
|
||||
(build-system gnu-build-system)
|
||||
(arguments
|
||||
'(#:modules ((guix build gnu-build-system)
|
||||
`(#:modules ((guix build gnu-build-system)
|
||||
(guix build utils)
|
||||
(srfi srfi-1))
|
||||
#:phases
|
||||
|
@ -102,16 +102,17 @@ in downloaded documents to relative links.")
|
|||
;; https://gitweb.gentoo.org/repo/gentoo.git/tree/app-text/wgetpaste/files/wgetpaste-remove-dead.patch
|
||||
(lambda _
|
||||
(substitute* "wgetpaste"
|
||||
((" poundpython\"") "\"")
|
||||
(("-poundpython") "-bpaste")) ; dpaste blocks tor users
|
||||
(("-bpaste") "-dpaste")) ; dpaste blocks tor users
|
||||
#t))
|
||||
(replace 'install
|
||||
(lambda* (#:key outputs #:allow-other-keys)
|
||||
(let* ((out (assoc-ref outputs "out"))
|
||||
(bin (string-append out "/bin"))
|
||||
(zsh (string-append out "/share/zsh/site-functions")))
|
||||
(zsh (string-append out "/share/zsh/site-functions"))
|
||||
(doc (string-append out "/share/doc/" ,name "-" ,version)))
|
||||
(install-file "wgetpaste" bin)
|
||||
(install-file "_wgetpaste" zsh)
|
||||
(install-file "LICENSE" doc)
|
||||
#t)))
|
||||
(add-after 'install 'wrap-program
|
||||
;; /bin/wgetpaste prides itself on relying only on the following
|
||||
|
|
|
@ -310,7 +310,7 @@ integrate Windows applications into your desktop.")
|
|||
(define-public wine-staging-patchset-data
|
||||
(package
|
||||
(name "wine-staging-patchset-data")
|
||||
(version "4.12")
|
||||
(version "4.12.1")
|
||||
(source
|
||||
(origin
|
||||
(method git-fetch)
|
||||
|
@ -320,7 +320,7 @@ integrate Windows applications into your desktop.")
|
|||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"1drsrps6bd5gcafzcfrr9pzajhh5s6qg5la7q4qpwzlng9969f3r"))))
|
||||
"1bvpvj6vcw2p6vcjm6mw5maarbs4lfw1ix3pj020w4n3kg4nmmc4"))))
|
||||
(build-system trivial-build-system)
|
||||
(native-inputs
|
||||
`(("bash" ,bash)
|
||||
|
@ -366,7 +366,7 @@ integrate Windows applications into your desktop.")
|
|||
(file-name (string-append name "-" version ".tar.xz"))
|
||||
(sha256
|
||||
(base32
|
||||
"1az5pcczq2zl1cvfdggzf89n0sf77m3fjkc8rnna8qr3n585q4h0"))))
|
||||
"09yjfb2k14y11k19lm8dqmb8qwxyhh67d5q1gqv480y64mljvkx0"))))
|
||||
(inputs `(("autoconf" ,autoconf) ; for autoreconf
|
||||
("faudio" ,faudio)
|
||||
("ffmpeg" ,ffmpeg)
|
||||
|
|
|
@ -0,0 +1,267 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
(define-module (gnu packages wireservice)
|
||||
#:use-module ((guix licenses) #:prefix license:)
|
||||
#:use-module (guix build-system python)
|
||||
#:use-module (guix download)
|
||||
#:use-module (guix git-download)
|
||||
#:use-module (guix packages)
|
||||
#:use-module (gnu packages)
|
||||
#:use-module (gnu packages check)
|
||||
#:use-module (gnu packages databases)
|
||||
#:use-module (gnu packages python-web)
|
||||
#:use-module (gnu packages python-xyz)
|
||||
#:use-module (gnu packages sphinx)
|
||||
#:use-module (gnu packages time))
|
||||
|
||||
;; Common package definition for packages from https://github.com/wireservice.
|
||||
(define-syntax-rule (wireservice-package extra-fields ...)
|
||||
(package
|
||||
(build-system python-build-system)
|
||||
(arguments
|
||||
`(#:phases
|
||||
(modify-phases %standard-phases
|
||||
(replace 'check
|
||||
(lambda _
|
||||
(invoke "nosetests" "tests")))
|
||||
(add-after 'install 'install-docs
|
||||
(lambda* (#:key outputs #:allow-other-keys)
|
||||
(let* ((out (assoc-ref outputs "out"))
|
||||
(doc (string-append out "/share/doc/"
|
||||
,(package-name this-package)
|
||||
"-"
|
||||
,(package-version this-package))))
|
||||
(with-directory-excursion "docs"
|
||||
(for-each
|
||||
(lambda (target)
|
||||
(invoke "make" target)
|
||||
(copy-recursively (string-append "_build/" target)
|
||||
(string-append doc "/" target)))
|
||||
'("html" "dirhtml" "singlehtml" "text")))
|
||||
#t))))))
|
||||
(license license:expat)
|
||||
extra-fields ...))
|
||||
|
||||
(define-public python-leather
|
||||
(wireservice-package
|
||||
(name "python-leather")
|
||||
(version "0.3.3")
|
||||
(source (origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://github.com/wireservice/leather.git")
|
||||
(commit version)))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"1ck3dplni99sv4s117cbm07ydwwjsrxkhdy19rnk0iglia1d4s5i"))))
|
||||
(native-inputs
|
||||
`(("python-nose" ,python-nose)
|
||||
("python-sphinx" ,python-sphinx)
|
||||
("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
|
||||
("python-csselect" ,python-cssselect)
|
||||
("python-lxml" ,python-lxml)))
|
||||
(propagated-inputs
|
||||
`(("python-six" ,python-six)))
|
||||
(home-page "https://leather.rtfd.org")
|
||||
(synopsis "Python charting for 80% of humans")
|
||||
(description "Leather is a Python charting library for those who need
|
||||
charts now and don't care if they're perfect.")))
|
||||
|
||||
(define-public python-agate
|
||||
(wireservice-package
|
||||
(name "python-agate")
|
||||
(version "1.6.1")
|
||||
(source (origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://github.com/wireservice/agate.git")
|
||||
(commit version)))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"077zj8xad8hsa3nqywvf7ircirmx3krxdipl8wr3dynv3l3khcpl"))))
|
||||
(native-inputs
|
||||
`(("python-nose" ,python-nose)
|
||||
("python-sphinx" ,python-sphinx)
|
||||
("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
|
||||
("python-csselect" ,python-cssselect)
|
||||
("python-lxml" ,python-lxml)))
|
||||
(propagated-inputs
|
||||
`(("python-babel" ,python-babel)
|
||||
("python-isodate" ,python-isodate)
|
||||
("python-leather" ,python-leather)
|
||||
("python-parsedatetime" ,python-parsedatetime)
|
||||
("python-pytimeparse" ,python-pytimeparse)
|
||||
("python-six" ,python-six)
|
||||
("python-slugify" ,python-slugify)))
|
||||
(home-page "https://agate.rtfd.org")
|
||||
(synopsis "Data analysis library")
|
||||
(description "Agate is a Python data analysis library. It is an
|
||||
alternative to numpy and pandas that solves real-world problems with readable
|
||||
code. Agate was previously known as journalism.")))
|
||||
|
||||
(define-public python-agate-sql
|
||||
(wireservice-package
|
||||
(name "python-agate-sql")
|
||||
(version "0.5.4")
|
||||
(source (origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://github.com/wireservice/agate-sql.git")
|
||||
(commit version)))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"16q0b211n5b1qmhzkfl2jr56lda0rvyh5j1wzw26h2n4pm4wxlx2"))))
|
||||
(native-inputs
|
||||
`(("python-nose" ,python-nose)
|
||||
("python-sphinx" ,python-sphinx)
|
||||
("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)))
|
||||
(propagated-inputs
|
||||
`(("python-agate" ,python-agate)
|
||||
("python-crate" ,python-crate)
|
||||
("python-sqlalchemy" ,python-sqlalchemy)))
|
||||
(home-page "https://agate-sql.rtfd.org")
|
||||
(synopsis "SQL read/write support to agate")
|
||||
(description "@code{agatesql} uses a monkey patching pattern to add SQL
|
||||
support to all @code{agate.Table} instances.")))
|
||||
|
||||
(define-public python-agate-dbf
|
||||
(wireservice-package
|
||||
(name "python-agate-dbf")
|
||||
(version "0.2.1")
|
||||
(source (origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://github.com/wireservice/agate-dbf.git")
|
||||
(commit version)))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"1y49fi6pmm7gzhajvqmfpcca2sqnwj24fqnsvzwk7r1hg2iaa2gi"))))
|
||||
(native-inputs
|
||||
`(("python-nose" ,python-nose)
|
||||
("python-sphinx" ,python-sphinx)
|
||||
("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)))
|
||||
(propagated-inputs
|
||||
`(("python-agate" ,python-agate)
|
||||
("python-dbfread" ,python-dbfread)))
|
||||
(home-page "https://agate-dbf.rtfd.org")
|
||||
(synopsis "Add read support for dbf files to agate")
|
||||
(description "@code{agatedbf} uses a monkey patching pattern to add read
|
||||
for dbf files support to all @code{agate.Table} instances.")))
|
||||
|
||||
(define-public python-agate-excel
|
||||
(wireservice-package
|
||||
(name "python-agate-excel")
|
||||
(version "0.2.3")
|
||||
(source (origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://github.com/wireservice/agate-excel.git")
|
||||
(commit version)))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"1k5lv21k19s7kgbj5srd1xgrkqvxqqs49qwj33zncs9l7851afy7"))))
|
||||
(native-inputs
|
||||
`(("python-nose" ,python-nose)
|
||||
("python-sphinx" ,python-sphinx)
|
||||
("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)))
|
||||
(propagated-inputs
|
||||
`(("python-agate" ,python-agate)
|
||||
("python-openpyxl" ,python-openpyxl)
|
||||
("python-xlrd" ,python-xlrd)))
|
||||
(home-page "https://agate-excel.rtfd.org")
|
||||
(synopsis "Add read support for Excel files (xls and xlsx) to agate")
|
||||
(description "@code{agateexcel} uses a monkey patching pattern to add read
|
||||
for xls and xlsx files support to all @code{agate.Table} instances.")))
|
||||
|
||||
(define-public csvkit
|
||||
(package
|
||||
(name "csvkit")
|
||||
(version "1.0.4")
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (pypi-uri "csvkit" version))
|
||||
(sha256
|
||||
(base32
|
||||
"1830lb95rh1iyi3drlwxzb6y3pqkii0qiyzd40c1kvhvaf1s6lqk"))
|
||||
(patches (search-patches "csvkit-fix-tests.patch"))))
|
||||
(build-system python-build-system)
|
||||
(native-inputs
|
||||
`(("python-psycopg2" ,python-psycopg2) ;; Used to test PostgreSQL support.
|
||||
("python-sphinx" ,python-sphinx)
|
||||
("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)))
|
||||
(inputs
|
||||
`(("python-agate-dbf" ,python-agate-dbf)
|
||||
("python-agate-excel" ,python-agate-excel)
|
||||
("python-agate-sql" ,python-agate-sql)
|
||||
("python-six" ,python-six)))
|
||||
(arguments
|
||||
`(#:phases
|
||||
(modify-phases %standard-phases
|
||||
(add-after 'install 'install-docs
|
||||
(lambda* (#:key outputs #:allow-other-keys)
|
||||
(let* ((out (assoc-ref outputs "out"))
|
||||
(man1 (string-append out "/share/man/man1")))
|
||||
(with-directory-excursion "docs"
|
||||
(invoke "make" "man")
|
||||
(copy-recursively "_build/man" man1))
|
||||
#t))))))
|
||||
(home-page "https://csvkit.rtfd.org")
|
||||
(synopsis "Command-line tools for working with CSV")
|
||||
(description "csvkit is a suite of command-line tools for converting to
|
||||
and working with CSV. It provides the following commands:
|
||||
@itemize
|
||||
@item Input:
|
||||
@itemize
|
||||
@item @command{in2csv}: Convert various formats to CSV.
|
||||
@item @command{sql2csv}: Execute SQL commands on a database and return the
|
||||
data as CSV.
|
||||
@end itemize
|
||||
@item Processing:
|
||||
@itemize
|
||||
@item @command{csvclean}: Remove common syntax errors.
|
||||
@item @command{csvcut}: Filter and truncate CSV files.
|
||||
@item @command{csvgrep}: Filter tabular data to only those rows where
|
||||
certain columns contain a given value or match a regular expression.
|
||||
@item @command{csvjoin}: Merges two or more CSV tables together using a
|
||||
method analogous to SQL JOIN operation.
|
||||
@item @command{csvsort}: Sort CSV files.
|
||||
@item @command{csvstack}: Stack up the rows from multiple CSV files,
|
||||
optionally adding a grouping value to each row.
|
||||
@end itemize
|
||||
@item Output and analysis:
|
||||
@itemize
|
||||
@item @command{csvformat}: Convert a CSV file to a custom output format.
|
||||
@item @command{csvjson}: Converts a CSV file into JSON or GeoJSON.
|
||||
@item @command{csvlook}: Renders a CSV to the command line in a
|
||||
Markdown-compatible, fixed-width format.
|
||||
@item @command{csvpy}: Loads a CSV file into a @code{agate.csv.Reader}
|
||||
object and then drops into a Python shell so the user can inspect the data
|
||||
however they see fit.
|
||||
@item @command{csvsql}: Generate SQL statements for a CSV file or execute
|
||||
those statements directly on a database.
|
||||
@item @command{csvstat}: Prints descriptive statistics for all columns in a
|
||||
CSV file.
|
||||
@end itemize
|
||||
@end itemize")
|
||||
(license license:expat)))
|
|
@ -269,8 +269,8 @@ Despite the name it should work with any X11 window manager.")
|
|||
(license license:bsd-3)))
|
||||
|
||||
(define-public i3blocks
|
||||
(let ((commit "37f23805ff886639163fbef8aedba71c8071eff8")
|
||||
(revision "1"))
|
||||
(let ((commit "ec050e79ad8489a6f8deb37d4c20ab10729c25c3")
|
||||
(revision "2"))
|
||||
(package
|
||||
(name "i3blocks")
|
||||
(version (string-append "1.4-" revision "."
|
||||
|
@ -282,7 +282,7 @@ Despite the name it should work with any X11 window manager.")
|
|||
(commit commit)))
|
||||
(sha256
|
||||
(base32
|
||||
"15rnrcajzyrmhlz1a21qqsjlj3dkib70806dlb386fliylc2kisb"))
|
||||
"1fx4230lmqa5rpzph68dwnpcjfaaqv5gfkradcr85hd1z8d1qp1b"))
|
||||
(file-name (git-file-name name version))))
|
||||
(build-system gnu-build-system)
|
||||
(arguments
|
||||
|
|
|
@ -349,13 +349,15 @@ INSTANCES."
|
|||
(resolve-dependencies instances))
|
||||
|
||||
(define (instance->derivation instance)
|
||||
(mcached (if (eq? instance core-instance)
|
||||
(build-channel-instance instance)
|
||||
(mlet %store-monad ((core (instance->derivation core-instance))
|
||||
(deps (mapm %store-monad instance->derivation
|
||||
(edges instance))))
|
||||
(build-channel-instance instance core deps)))
|
||||
instance))
|
||||
(mlet %store-monad ((system (current-system)))
|
||||
(mcached (if (eq? instance core-instance)
|
||||
(build-channel-instance instance)
|
||||
(mlet %store-monad ((core (instance->derivation core-instance))
|
||||
(deps (mapm %store-monad instance->derivation
|
||||
(edges instance))))
|
||||
(build-channel-instance instance core deps)))
|
||||
instance
|
||||
system)))
|
||||
|
||||
(unless core-instance
|
||||
(let ((loc (and=> (any (compose channel-location channel-instance-channel)
|
||||
|
|
|
@ -78,7 +78,9 @@ DIRECTORY is not accessible."
|
|||
((= stat:type 'directory)
|
||||
(append (scheme-files absolute)
|
||||
result))
|
||||
(_ result)))))
|
||||
(_ result)))
|
||||
(else
|
||||
result)))
|
||||
(else
|
||||
result))))))
|
||||
'()
|
||||
|
|
|
@ -161,6 +161,10 @@ COMMAND or an interactive shell in that environment.\n"))
|
|||
-u, --user=USER instead of copying the name and home of the current
|
||||
user into an isolated container, use the name USER
|
||||
with home directory /home/USER"))
|
||||
(display (G_ "
|
||||
--no-cwd do not share current working directory with an
|
||||
isolated container"))
|
||||
|
||||
(display (G_ "
|
||||
--share=SPEC for containers, share writable host file system
|
||||
according to SPEC"))
|
||||
|
@ -269,6 +273,9 @@ use '--preserve' instead~%"))
|
|||
(lambda (opt name arg result)
|
||||
(alist-cons 'user arg
|
||||
(alist-delete 'user result eq?))))
|
||||
(option '("no-cwd") #f #f
|
||||
(lambda (opt name arg result)
|
||||
(alist-cons 'no-cwd? #t result)))
|
||||
(option '("share") #t #f
|
||||
(lambda (opt name arg result)
|
||||
(alist-cons 'file-system-mapping
|
||||
|
@ -444,7 +451,8 @@ regexps in WHITE-LIST."
|
|||
((_ . status) status)))))
|
||||
|
||||
(define* (launch-environment/container #:key command bash user user-mappings
|
||||
profile manifest link-profile? network?)
|
||||
profile manifest link-profile? network?
|
||||
map-cwd?)
|
||||
"Run COMMAND within a container that features the software in PROFILE.
|
||||
Environment variables are set according to the search paths of MANIFEST.
|
||||
The global shell is BASH, a file name for a GNU Bash binary in the
|
||||
|
@ -479,26 +487,29 @@ will be used for the passwd entry. LINK-PROFILE? creates a symbolic link from
|
|||
;; /bin/sh, the current working directory, and possibly networking
|
||||
;; configuration files within the container.
|
||||
(mappings
|
||||
(override-user-mappings
|
||||
user home
|
||||
(append user-mappings
|
||||
;; Current working directory.
|
||||
(list (file-system-mapping
|
||||
(source cwd)
|
||||
(target cwd)
|
||||
(writable? #t)))
|
||||
;; When in Rome, do as Nix build.cc does: Automagically
|
||||
;; map common network configuration files.
|
||||
(if network?
|
||||
%network-file-mappings
|
||||
'())
|
||||
;; Mappings for the union closure of all inputs.
|
||||
(map (lambda (dir)
|
||||
(file-system-mapping
|
||||
(source dir)
|
||||
(target dir)
|
||||
(writable? #f)))
|
||||
reqs))))
|
||||
(append
|
||||
(override-user-mappings
|
||||
user home
|
||||
(append user-mappings
|
||||
;; Share current working directory, unless asked not to.
|
||||
(if map-cwd?
|
||||
(list (file-system-mapping
|
||||
(source cwd)
|
||||
(target cwd)
|
||||
(writable? #t)))
|
||||
'())))
|
||||
;; When in Rome, do as Nix build.cc does: Automagically
|
||||
;; map common network configuration files.
|
||||
(if network?
|
||||
%network-file-mappings
|
||||
'())
|
||||
;; Mappings for the union closure of all inputs.
|
||||
(map (lambda (dir)
|
||||
(file-system-mapping
|
||||
(source dir)
|
||||
(target dir)
|
||||
(writable? #f)))
|
||||
reqs)))
|
||||
(file-systems (append %container-file-systems
|
||||
(map file-system-mapping->bind-mount
|
||||
mappings))))
|
||||
|
@ -536,8 +547,10 @@ will be used for the passwd entry. LINK-PROFILE? creates a symbolic link from
|
|||
(write-group groups)
|
||||
|
||||
;; For convenience, start in the user's current working
|
||||
;; directory rather than the root directory.
|
||||
(chdir (override-user-dir user home cwd))
|
||||
;; directory or, if unmapped, the home directory.
|
||||
(chdir (if map-cwd?
|
||||
(override-user-dir user home cwd)
|
||||
home-dir))
|
||||
|
||||
(primitive-exit/status
|
||||
;; A container's environment is already purified, so no need to
|
||||
|
@ -664,6 +677,7 @@ message if any test fails."
|
|||
(container? (assoc-ref opts 'container?))
|
||||
(link-prof? (assoc-ref opts 'link-profile?))
|
||||
(network? (assoc-ref opts 'network?))
|
||||
(no-cwd? (assoc-ref opts 'no-cwd?))
|
||||
(user (assoc-ref opts 'user))
|
||||
(bootstrap? (assoc-ref opts 'bootstrap?))
|
||||
(system (assoc-ref opts 'system))
|
||||
|
@ -684,6 +698,9 @@ message if any test fails."
|
|||
(leave (G_ "'--link-profile' cannot be used without '--container'~%")))
|
||||
(when (and (not container?) user)
|
||||
(leave (G_ "'--user' cannot be used without '--container'~%")))
|
||||
(when (and (not container?) no-cwd?)
|
||||
(leave (G_ "--no-cwd cannot be used without --container~%")))
|
||||
|
||||
|
||||
(with-store store
|
||||
(with-status-verbosity (assoc-ref opts 'verbosity)
|
||||
|
@ -740,7 +757,9 @@ message if any test fails."
|
|||
#:profile profile
|
||||
#:manifest manifest
|
||||
#:link-profile? link-prof?
|
||||
#:network? network?)))
|
||||
#:network? network?
|
||||
#:map-cwd? (not no-cwd?))))
|
||||
|
||||
(else
|
||||
(return
|
||||
(exit/status
|
||||
|
|
|
@ -769,7 +769,8 @@ Info manual."
|
|||
(gnu services)
|
||||
,@(scheme-modules* source "gnu/bootloader")
|
||||
,@(scheme-modules* source "gnu/system")
|
||||
,@(scheme-modules* source "gnu/services"))
|
||||
,@(scheme-modules* source "gnu/services")
|
||||
,@(scheme-modules* source "gnu/machine"))
|
||||
(list *core-package-modules* *package-modules*
|
||||
*extra-modules* *core-modules*)
|
||||
#:extensions dependencies
|
||||
|
|
129
release.nix
129
release.nix
|
@ -1,129 +0,0 @@
|
|||
/* GNU Guix --- Functional package management for GNU
|
||||
Copyright (C) 2012 Ludovic Courtès <ludo@gnu.org>
|
||||
|
||||
This file is part of GNU Guix.
|
||||
|
||||
GNU Guix is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or (at
|
||||
your option) any later version.
|
||||
|
||||
GNU Guix is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* Release file to build Guix with Nix. Useful to bootstrap Guix on
|
||||
Guix-enabled Hydra instances. */
|
||||
|
||||
let
|
||||
nixpkgs = <nixpkgs>;
|
||||
|
||||
buildOutOfSourceTree = true;
|
||||
succeedOnFailure = true;
|
||||
keepBuildDirectory = true;
|
||||
|
||||
# The Guile used to bootstrap the whole thing. It's normally
|
||||
# downloaded by the build system, but here we download it via a
|
||||
# fixed-output derivation and stuff it into the build tree.
|
||||
bootstrap_guile =
|
||||
let pkgs = import nixpkgs {}; in {
|
||||
i686 = pkgs.fetchurl {
|
||||
url = http://www.fdn.fr/~lcourtes/software/guix/packages/i686-linux/20121219/guile-2.0.7.tar.xz;
|
||||
sha256 = "45d1f9bfb9e4531a8f1c5a105f7ab094cd481b8a179ccc63cbabb73ce6b8437f";
|
||||
};
|
||||
|
||||
x86_64 = pkgs.fetchurl {
|
||||
url = http://www.fdn.fr/~lcourtes/software/guix/packages/x86_64-linux/20121219/guile-2.0.7.tar.xz;
|
||||
sha256 = "953fbcc8db6e310626be79b67319cf4141dc23b296447952a99d95425b3a4dc1";
|
||||
};
|
||||
};
|
||||
|
||||
jobs = {
|
||||
tarball =
|
||||
let pkgs = import nixpkgs {}; in
|
||||
pkgs.releaseTools.sourceTarball {
|
||||
name = "guix-tarball";
|
||||
src = <guix>;
|
||||
buildInputs = with pkgs; [ guile sqlite bzip2 git libgcrypt ];
|
||||
buildNativeInputs = with pkgs; [ texinfo gettext cvs pkgconfig ];
|
||||
preAutoconf = ''git config submodule.nix.url "${<nix>}"'';
|
||||
configureFlags =
|
||||
[ "--with-libgcrypt-prefix=${pkgs.libgcrypt}"
|
||||
"--localstatedir=/nix/var"
|
||||
];
|
||||
};
|
||||
|
||||
build =
|
||||
{ system ? builtins.currentSystem }:
|
||||
|
||||
let pkgs = import nixpkgs { inherit system; }; in
|
||||
pkgs.releaseTools.nixBuild {
|
||||
name = "guix";
|
||||
buildInputs = with pkgs; [ guile sqlite bzip2 libgcrypt ];
|
||||
buildNativeInputs = [ pkgs.pkgconfig ];
|
||||
src = jobs.tarball;
|
||||
configureFlags =
|
||||
[ "--with-libgcrypt-prefix=${pkgs.libgcrypt}"
|
||||
"--localstatedir=/nix/var"
|
||||
];
|
||||
|
||||
preBuild =
|
||||
# Use our pre-downloaded bootstrap tarballs instead of letting
|
||||
# the build system download it over and over again.
|
||||
'' mkdir -p distro/packages/bootstrap/{i686,x86_64}-linux
|
||||
cp -v "${bootstrap_guile.i686}" \
|
||||
distro/packages/bootstrap/i686-linux/guile-2.0.7.tar.xz
|
||||
cp -v "${bootstrap_guile.x86_64}" \
|
||||
distro/packages/bootstrap/x86_64-linux/guile-2.0.7.tar.xz
|
||||
'';
|
||||
|
||||
inherit succeedOnFailure keepBuildDirectory
|
||||
buildOutOfSourceTree;
|
||||
};
|
||||
|
||||
|
||||
build_disable_daemon =
|
||||
{ system ? builtins.currentSystem }:
|
||||
|
||||
let
|
||||
pkgs = import nixpkgs { inherit system; };
|
||||
build = jobs.build { inherit system; };
|
||||
in
|
||||
pkgs.lib.overrideDerivation build ({ configureFlags, ... }: {
|
||||
configureFlags = configureFlags ++ [ "--disable-daemon" ];
|
||||
buildInputs = with pkgs; [ guile nixUnstable pkgconfig ];
|
||||
|
||||
# Since we need to talk to a running daemon, we need to escape
|
||||
# the chroot.
|
||||
preConfigure = "export NIX_REMOTE=daemon";
|
||||
__noChroot = true;
|
||||
});
|
||||
|
||||
# Jobs to test the distro.
|
||||
distro = {
|
||||
hello =
|
||||
{ system ? builtins.currentSystem }:
|
||||
|
||||
let
|
||||
pkgs = import nixpkgs { inherit system; };
|
||||
guix = jobs.build { inherit system; };
|
||||
in
|
||||
# XXX: We have no way to tell the Nix code to swallow the .drv
|
||||
# produced by `guix-build', so we have a pointless indirection
|
||||
# here. This could be worked around by generating Nix code
|
||||
# from the .drv, and importing that.
|
||||
pkgs.releaseTools.nixBuild {
|
||||
src = null;
|
||||
name = "guix-hello";
|
||||
phases = "buildPhase";
|
||||
buildPhase = "${guix}/bin/guix-build --no-substitutes hello | tee $out";
|
||||
__noChroot = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
in
|
||||
jobs
|
|
@ -84,6 +84,14 @@ echo "(use-modules (guix profiles) (gnu packages bootstrap))
|
|||
guix environment --bootstrap --manifest=$tmpdir/manifest.scm --pure \
|
||||
-- "$SHELL" -c 'test -f "$GUIX_ENVIRONMENT/bin/guile"'
|
||||
|
||||
# if not sharing CWD, chdir home
|
||||
(
|
||||
cd "$tmpdir" \
|
||||
&& guix environment --bootstrap --container --no-cwd --user=foo \
|
||||
--ad-hoc guile-bootstrap --pure \
|
||||
-- /bin/sh -c 'test $(pwd) == "/home/foo" -a ! -d '"$tmpdir"
|
||||
)
|
||||
|
||||
# Make sure '-r' works as expected.
|
||||
rm -f "$gcroot"
|
||||
expected="`guix environment --bootstrap --ad-hoc guile-bootstrap \
|
||||
|
|
Loading…
Reference in New Issue