Merge branch 'master' into core-updates
This commit is contained in:
commit
1007b6bf0b
|
@ -121,6 +121,9 @@ facilities to directly operate on the syntax tree, such as raising an
|
||||||
s-expression or wrapping it, swallowing or rejecting the following
|
s-expression or wrapping it, swallowing or rejecting the following
|
||||||
s-expression, etc.
|
s-expression, etc.
|
||||||
|
|
||||||
|
GNU Guix also comes with a minor mode that provides some additional
|
||||||
|
functionality for Scheme buffers (@pxref{Emacs Development}).
|
||||||
|
|
||||||
|
|
||||||
@node Coding Style
|
@node Coding Style
|
||||||
@section Coding Style
|
@section Coding Style
|
||||||
|
|
|
@ -12,7 +12,8 @@ Guix convenient and fun.
|
||||||
* Popup Interface: Emacs Popup Interface. Magit-like interface for guix commands.
|
* Popup Interface: Emacs Popup Interface. Magit-like interface for guix commands.
|
||||||
* Prettify Mode: Emacs Prettify. Abbreviating @file{/gnu/store/@dots{}} file names.
|
* Prettify Mode: Emacs Prettify. Abbreviating @file{/gnu/store/@dots{}} file names.
|
||||||
* Build Log Mode: Emacs Build Log. Highlighting Guix build logs.
|
* Build Log Mode: Emacs Build Log. Highlighting Guix build logs.
|
||||||
* Completions: Emacs Completions. Completing @command{guix} shell command.
|
* Completions: Emacs Completions. Completing @command{guix} shell command.
|
||||||
|
* Development: Emacs Development. Tools for Guix developers.
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
|
|
||||||
|
@ -637,3 +638,49 @@ something:
|
||||||
@item @code{guix lint --checkers=synopsis,des}@key{TAB}
|
@item @code{guix lint --checkers=synopsis,des}@key{TAB}
|
||||||
|
|
||||||
@end itemize
|
@end itemize
|
||||||
|
|
||||||
|
|
||||||
|
@node Emacs Development
|
||||||
|
@section Development
|
||||||
|
|
||||||
|
By default, when you open a Scheme file, @code{guix-devel-mode} will be
|
||||||
|
activated (if you don't want it, set @code{guix-devel-activate-mode} to
|
||||||
|
nil). This minor mode provides the following key bindings:
|
||||||
|
|
||||||
|
@table @kbd
|
||||||
|
|
||||||
|
@item C-c . k
|
||||||
|
Copy the name of the current Guile module into kill ring
|
||||||
|
(@code{guix-devel-copy-module-as-kill}).
|
||||||
|
|
||||||
|
@item C-c . u
|
||||||
|
Use the current Guile module. Often after opening a Scheme file, you
|
||||||
|
want to use a module it defines, so you switch to the Geiser REPL and
|
||||||
|
write @code{,use (some module)} there. You may just use this command
|
||||||
|
instead (@code{guix-devel-use-module}).
|
||||||
|
|
||||||
|
@item C-c . b
|
||||||
|
Build a package defined by the current variable definition. The
|
||||||
|
building process is run in the current Geiser REPL. If you modified the
|
||||||
|
current package definition, don't forget to reevaluate it before calling
|
||||||
|
this command---for example, with @kbd{C-M-x} (@pxref{To eval or not to
|
||||||
|
eval,,, geiser, Geiser User Manual})
|
||||||
|
(@code{guix-devel-build-package-definition}).
|
||||||
|
|
||||||
|
@end table
|
||||||
|
|
||||||
|
Unluckily, there is a limitation related to long-running REPL commands.
|
||||||
|
When there is a running process in a Geiser REPL, you are not supposed
|
||||||
|
to evaluate anything in a scheme buffer, because this will ``freeze''
|
||||||
|
the REPL: it will stop producing any output (however, the evaluating
|
||||||
|
process will continue---you will just not see any progress anymore). Be
|
||||||
|
aware: even moving the point in a scheme buffer may ``break'' the REPL
|
||||||
|
if Autodoc (@pxref{Autodoc and friends,,, geiser, Geiser User Manual})
|
||||||
|
is enabled (which is the default).
|
||||||
|
|
||||||
|
So you have to postpone editing your scheme buffers until the running
|
||||||
|
evaluation will be finished in the REPL.
|
||||||
|
|
||||||
|
Alternatively, to avoid this limitation, you may just run another Geiser
|
||||||
|
REPL, and while something is being evaluated in the previous REPL, you
|
||||||
|
can continue editing a scheme file with the help of the current one.
|
||||||
|
|
|
@ -113,7 +113,8 @@ Emacs Interface
|
||||||
* Popup Interface: Emacs Popup Interface. Magit-like interface for guix commands.
|
* Popup Interface: Emacs Popup Interface. Magit-like interface for guix commands.
|
||||||
* Prettify Mode: Emacs Prettify. Abbreviating @file{/gnu/store/@dots{}} file names.
|
* Prettify Mode: Emacs Prettify. Abbreviating @file{/gnu/store/@dots{}} file names.
|
||||||
* Build Log Mode: Emacs Build Log. Highlighting Guix build logs.
|
* Build Log Mode: Emacs Build Log. Highlighting Guix build logs.
|
||||||
* Completions: Emacs Completions. Completing @command{guix} shell command.
|
* Completions: Emacs Completions. Completing @command{guix} shell command.
|
||||||
|
* Development: Emacs Development. Tools for Guix developers.
|
||||||
|
|
||||||
Programming Interface
|
Programming Interface
|
||||||
|
|
||||||
|
|
1
emacs.am
1
emacs.am
|
@ -23,6 +23,7 @@ ELFILES = \
|
||||||
emacs/guix-base.el \
|
emacs/guix-base.el \
|
||||||
emacs/guix-build-log.el \
|
emacs/guix-build-log.el \
|
||||||
emacs/guix-command.el \
|
emacs/guix-command.el \
|
||||||
|
emacs/guix-devel.el \
|
||||||
emacs/guix-emacs.el \
|
emacs/guix-emacs.el \
|
||||||
emacs/guix-external.el \
|
emacs/guix-external.el \
|
||||||
emacs/guix-geiser.el \
|
emacs/guix-geiser.el \
|
||||||
|
|
|
@ -503,7 +503,10 @@ to be modified."
|
||||||
:name "log" :char ?l :doc "View build log"))
|
:name "log" :char ?l :doc "View build log"))
|
||||||
(("graph")
|
(("graph")
|
||||||
,(guix-command-make-argument
|
,(guix-command-make-argument
|
||||||
:name "view" :char ?v :doc "View graph")))
|
:name "view" :char ?v :doc "View graph"))
|
||||||
|
(("size")
|
||||||
|
,(guix-command-make-argument
|
||||||
|
:name "view" :char ?v :doc "View map")))
|
||||||
"Alist of guix commands and additional 'execute' action arguments.")
|
"Alist of guix commands and additional 'execute' action arguments.")
|
||||||
|
|
||||||
(defun guix-command-execute-arguments (commands)
|
(defun guix-command-execute-arguments (commands)
|
||||||
|
@ -525,7 +528,9 @@ to be modified."
|
||||||
(("build")
|
(("build")
|
||||||
("log" . guix-run-view-build-log))
|
("log" . guix-run-view-build-log))
|
||||||
(("graph")
|
(("graph")
|
||||||
("view" . guix-run-view-graph)))
|
("view" . guix-run-view-graph))
|
||||||
|
(("size")
|
||||||
|
("view" . guix-run-view-size-map)))
|
||||||
"Alist of guix commands and alists of special executers for them.
|
"Alist of guix commands and alists of special executers for them.
|
||||||
See also `guix-command-default-executors'.")
|
See also `guix-command-default-executors'.")
|
||||||
|
|
||||||
|
@ -583,6 +588,23 @@ open the log file(s)."
|
||||||
(guix-find-file graph-file)
|
(guix-find-file graph-file)
|
||||||
(error "Couldn't create a graph"))))
|
(error "Couldn't create a graph"))))
|
||||||
|
|
||||||
|
(defun guix-run-view-size-map (args)
|
||||||
|
"Run 'guix ARGS ...' size command, and open the map file."
|
||||||
|
(let* ((wished-map-file
|
||||||
|
(cl-some (lambda (arg)
|
||||||
|
(and (string-match "--map-file=\\(.+\\)" arg)
|
||||||
|
(match-string 1 arg)))
|
||||||
|
args))
|
||||||
|
(map-file (or wished-map-file (guix-png-file-name)))
|
||||||
|
(args (if wished-map-file
|
||||||
|
args
|
||||||
|
(apply #'list
|
||||||
|
(car args)
|
||||||
|
(concat "--map-file=" map-file)
|
||||||
|
(cdr args)))))
|
||||||
|
(guix-command-output args)
|
||||||
|
(guix-find-file map-file)))
|
||||||
|
|
||||||
|
|
||||||
;;; Generating popups, actions, etc.
|
;;; Generating popups, actions, etc.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,136 @@
|
||||||
|
;;; guix-devel.el --- Development tools -*- lexical-binding: t -*-
|
||||||
|
|
||||||
|
;; Copyright © 2015 Alex Kost <alezost@gmail.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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
;;; Commentary:
|
||||||
|
|
||||||
|
;; This file provides commands useful for developing Guix (or even
|
||||||
|
;; arbitrary Guile code) with Geiser.
|
||||||
|
|
||||||
|
;;; Code:
|
||||||
|
|
||||||
|
(require 'guix-guile)
|
||||||
|
(require 'guix-geiser)
|
||||||
|
(require 'guix-utils)
|
||||||
|
(require 'guix-base)
|
||||||
|
|
||||||
|
(defgroup guix-devel nil
|
||||||
|
"Settings for Guix development utils."
|
||||||
|
:group 'guix)
|
||||||
|
|
||||||
|
(defcustom guix-devel-activate-mode t
|
||||||
|
"If non-nil, then `guix-devel-mode' is automatically activated
|
||||||
|
in Scheme buffers."
|
||||||
|
:type 'boolean
|
||||||
|
:group 'guix-devel)
|
||||||
|
|
||||||
|
(defun guix-devel-use-modules (&rest modules)
|
||||||
|
"Use guile MODULES."
|
||||||
|
(apply #'guix-geiser-call "use-modules" modules))
|
||||||
|
|
||||||
|
(defun guix-devel-use-module (&optional module)
|
||||||
|
"Use guile MODULE in the current Geiser REPL.
|
||||||
|
MODULE is a string with the module name - e.g., \"(ice-9 match)\".
|
||||||
|
Interactively, use the module defined by the current scheme file."
|
||||||
|
(interactive (list (guix-guile-current-module)))
|
||||||
|
(guix-devel-use-modules module)
|
||||||
|
(message "Using %s module." module))
|
||||||
|
|
||||||
|
(defun guix-devel-copy-module-as-kill ()
|
||||||
|
"Put the name of the current guile module into `kill-ring'."
|
||||||
|
(interactive)
|
||||||
|
(guix-copy-as-kill (guix-guile-current-module)))
|
||||||
|
|
||||||
|
(defun guix-devel-setup-repl (&optional repl)
|
||||||
|
"Setup REPL for using `guix-devel-...' commands."
|
||||||
|
(guix-devel-use-modules "(guix monad-repl)"
|
||||||
|
"(guix scripts)"
|
||||||
|
"(guix store)")
|
||||||
|
;; Without this workaround, the build output disappears. See
|
||||||
|
;; <https://github.com/jaor/geiser/issues/83> for details.
|
||||||
|
(guix-geiser-eval-in-repl
|
||||||
|
"(current-build-output-port (current-error-port))"
|
||||||
|
repl 'no-history 'no-display))
|
||||||
|
|
||||||
|
(defvar guix-devel-repl-processes nil
|
||||||
|
"List of REPL processes configured by `guix-devel-setup-repl'.")
|
||||||
|
|
||||||
|
(defun guix-devel-setup-repl-maybe (&optional repl)
|
||||||
|
"Setup (if needed) REPL for using `guix-devel-...' commands."
|
||||||
|
(let ((process (get-buffer-process (or repl (guix-geiser-repl)))))
|
||||||
|
(when (and process
|
||||||
|
(not (memq process guix-devel-repl-processes)))
|
||||||
|
(guix-devel-setup-repl repl)
|
||||||
|
(push process guix-devel-repl-processes))))
|
||||||
|
|
||||||
|
(defun guix-devel-build-package-definition ()
|
||||||
|
"Build a package defined by the current top-level variable definition."
|
||||||
|
(interactive)
|
||||||
|
(let ((def (guix-guile-current-definition)))
|
||||||
|
(guix-devel-setup-repl-maybe)
|
||||||
|
(guix-devel-use-modules (guix-guile-current-module))
|
||||||
|
(when (or (not guix-operation-confirm)
|
||||||
|
(guix-operation-prompt (format "Build '%s'?" def)))
|
||||||
|
(guix-geiser-eval-in-repl
|
||||||
|
(concat ",run-in-store "
|
||||||
|
(guix-guile-make-call-expression
|
||||||
|
"build-package" def
|
||||||
|
"#:use-substitutes?" (guix-guile-boolean
|
||||||
|
guix-use-substitutes)
|
||||||
|
"#:dry-run?" (guix-guile-boolean guix-dry-run)))))))
|
||||||
|
|
||||||
|
(defvar guix-devel-keys-map
|
||||||
|
(let ((map (make-sparse-keymap)))
|
||||||
|
(define-key map (kbd "b") 'guix-devel-build-package-definition)
|
||||||
|
(define-key map (kbd "k") 'guix-devel-copy-module-as-kill)
|
||||||
|
(define-key map (kbd "u") 'guix-devel-use-module)
|
||||||
|
map)
|
||||||
|
"Keymap with subkeys for `guix-devel-mode-map'.")
|
||||||
|
|
||||||
|
(defvar guix-devel-mode-map
|
||||||
|
(let ((map (make-sparse-keymap)))
|
||||||
|
(define-key map (kbd "C-c .") guix-devel-keys-map)
|
||||||
|
map)
|
||||||
|
"Keymap for `guix-devel-mode'.")
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(define-minor-mode guix-devel-mode
|
||||||
|
"Minor mode for `scheme-mode' buffers.
|
||||||
|
|
||||||
|
With a prefix argument ARG, enable the mode if ARG is positive,
|
||||||
|
and disable it otherwise. If called from Lisp, enable the mode
|
||||||
|
if ARG is omitted or nil.
|
||||||
|
|
||||||
|
When Guix Devel mode is enabled, it provides the following key
|
||||||
|
bindings:
|
||||||
|
|
||||||
|
\\{guix-devel-mode-map}"
|
||||||
|
:init-value nil
|
||||||
|
:lighter " Guix"
|
||||||
|
:keymap guix-devel-mode-map)
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun guix-devel-activate-mode-maybe ()
|
||||||
|
"Activate `guix-devel-mode' depending on
|
||||||
|
`guix-devel-activate-mode' variable."
|
||||||
|
(when guix-devel-activate-mode
|
||||||
|
(guix-devel-mode)))
|
||||||
|
|
||||||
|
(provide 'guix-devel)
|
||||||
|
|
||||||
|
;;; guix-devel.el ends here
|
|
@ -24,6 +24,41 @@
|
||||||
|
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
|
(require 'geiser-guile)
|
||||||
|
|
||||||
|
(defvar guix-guile-definition-regexp
|
||||||
|
(rx bol "(define"
|
||||||
|
(zero-or-one "*")
|
||||||
|
(zero-or-one "-public")
|
||||||
|
(one-or-more space)
|
||||||
|
(zero-or-one "(")
|
||||||
|
(group (one-or-more (or word (syntax symbol)))))
|
||||||
|
"Regexp used to find the guile definition.")
|
||||||
|
|
||||||
|
(defun guix-guile-current-definition ()
|
||||||
|
"Return string with name of the current top-level guile definition."
|
||||||
|
(save-excursion
|
||||||
|
(beginning-of-defun)
|
||||||
|
(if (looking-at guix-guile-definition-regexp)
|
||||||
|
(match-string-no-properties 1)
|
||||||
|
(error "Couldn't find the current definition"))))
|
||||||
|
|
||||||
|
(defun guix-guile-current-module ()
|
||||||
|
"Return a string with the current guile module.
|
||||||
|
Return nil, if current buffer does not define a module."
|
||||||
|
;; Modified version of `geiser-guile--get-module'.
|
||||||
|
(save-excursion
|
||||||
|
(geiser-syntax--pop-to-top)
|
||||||
|
(when (or (re-search-backward geiser-guile--module-re nil t)
|
||||||
|
(looking-at geiser-guile--library-re)
|
||||||
|
(re-search-forward geiser-guile--module-re nil t))
|
||||||
|
(match-string-no-properties 1))))
|
||||||
|
|
||||||
|
(defun guix-guile-boolean (arg)
|
||||||
|
"Return a string with guile boolean value.
|
||||||
|
Transform elisp ARG (nil or non-nil) to the guile boolean (#f or #t)."
|
||||||
|
(concat "#" (prin1-to-string (if arg 't 'f))))
|
||||||
|
|
||||||
(defun guix-guile-make-call-expression (proc &rest args)
|
(defun guix-guile-make-call-expression (proc &rest args)
|
||||||
"Return \"(PROC ARGS ...)\" string.
|
"Return \"(PROC ARGS ...)\" string.
|
||||||
PROC and ARGS should be strings."
|
PROC and ARGS should be strings."
|
||||||
|
|
|
@ -12,4 +12,6 @@ avoid loading autoloads of Emacs packages installed in
|
||||||
(require 'guix-emacs)
|
(require 'guix-emacs)
|
||||||
(guix-emacs-load-autoloads 'all))
|
(guix-emacs-load-autoloads 'all))
|
||||||
|
|
||||||
|
(add-hook 'scheme-mode-hook 'guix-devel-activate-mode-maybe)
|
||||||
|
|
||||||
(provide 'guix-init)
|
(provide 'guix-init)
|
||||||
|
|
|
@ -60,6 +60,7 @@
|
||||||
#:use-module (gnu packages readline)
|
#:use-module (gnu packages readline)
|
||||||
#:use-module (gnu packages xiph)
|
#:use-module (gnu packages xiph)
|
||||||
#:use-module (gnu packages xml)
|
#:use-module (gnu packages xml)
|
||||||
|
#:use-module (gnu packages xorg)
|
||||||
#:use-module (gnu packages zip)
|
#:use-module (gnu packages zip)
|
||||||
#:use-module (srfi srfi-1))
|
#:use-module (srfi srfi-1))
|
||||||
|
|
||||||
|
@ -1739,6 +1740,39 @@ directly to a different computer on your LAN network. It is an audio daemon
|
||||||
with a much different focus than most other audio daemons.")
|
with a much different focus than most other audio daemons.")
|
||||||
(license license:gpl3+)))
|
(license license:gpl3+)))
|
||||||
|
|
||||||
|
(define-public xjackfreak
|
||||||
|
(package
|
||||||
|
(name "xjackfreak")
|
||||||
|
(version "1.0")
|
||||||
|
(source (origin
|
||||||
|
(method url-fetch)
|
||||||
|
(uri (string-append
|
||||||
|
"https://github.com/johnhldavis/xjackfreak/archive/v"
|
||||||
|
version ".tar.gz"))
|
||||||
|
(file-name (string-append name "-" version ".tar.gz"))
|
||||||
|
(sha256
|
||||||
|
(base32
|
||||||
|
"0xj6gpxfnw9jbdgwgm0x23xgfvj2kwmwb1nk0drw8lxgcchkq7d9"))))
|
||||||
|
(build-system gnu-build-system)
|
||||||
|
(arguments
|
||||||
|
`(#:make-flags
|
||||||
|
(list (string-append "docdir=" (assoc-ref %outputs "out")
|
||||||
|
"/share/doc/xjackfreak"))))
|
||||||
|
(inputs
|
||||||
|
`(("jack" ,jack-1)
|
||||||
|
("libx11" ,libx11)
|
||||||
|
("libxt" ,libxt)
|
||||||
|
("libxext" ,libxext)))
|
||||||
|
(native-inputs
|
||||||
|
`(("pkg-config" ,pkg-config)))
|
||||||
|
(home-page "https://github.com/johnhldavis/xjackfreak")
|
||||||
|
(synopsis "JACK audio frequency analyzer and display")
|
||||||
|
(description
|
||||||
|
"XJackFreak is an audio analysis and equalizing tool for the Jack Audio
|
||||||
|
Connection Kit. It can display the FFT of any input, modify it and output the
|
||||||
|
result.")
|
||||||
|
(license license:gpl3+)))
|
||||||
|
|
||||||
(define-public zita-convolver
|
(define-public zita-convolver
|
||||||
(package
|
(package
|
||||||
(name "zita-convolver")
|
(name "zita-convolver")
|
||||||
|
|
|
@ -28,6 +28,8 @@
|
||||||
#:use-module (gnu packages autotools)
|
#:use-module (gnu packages autotools)
|
||||||
#:use-module (gnu packages bash)
|
#:use-module (gnu packages bash)
|
||||||
#:use-module (gnu packages boost)
|
#:use-module (gnu packages boost)
|
||||||
|
#:use-module (gnu packages image)
|
||||||
|
#:use-module (gnu packages python)
|
||||||
#:use-module (gnu packages fontutils)
|
#:use-module (gnu packages fontutils)
|
||||||
#:use-module (gnu packages pkg-config)
|
#:use-module (gnu packages pkg-config)
|
||||||
#:use-module (gnu packages compression)
|
#:use-module (gnu packages compression)
|
||||||
|
@ -130,6 +132,44 @@ use in computer imaging applications. The IlmImf C++ libraries support
|
||||||
storage of the \"EXR\" file format for storing 16-bit floating-point images.")
|
storage of the \"EXR\" file format for storing 16-bit floating-point images.")
|
||||||
(license license:bsd-3)))
|
(license license:bsd-3)))
|
||||||
|
|
||||||
|
(define-public openimageio
|
||||||
|
(package
|
||||||
|
(name "openimageio")
|
||||||
|
(version "1.5.18")
|
||||||
|
(source (origin
|
||||||
|
(method url-fetch)
|
||||||
|
(uri (string-append "https://github.com/OpenImageIO/oiio/"
|
||||||
|
"archive/Release-" version ".tar.gz"))
|
||||||
|
(file-name (string-append name "-" version ".tar.gz"))
|
||||||
|
(sha256
|
||||||
|
(base32
|
||||||
|
"0mn7cz19mn8dcrhkq15h25gl20ammr1wz0j2j3c2vxs6ph7zn8jy"))))
|
||||||
|
(build-system cmake-build-system)
|
||||||
|
;; FIXME: To run all tests successfully, test image sets from multiple
|
||||||
|
;; third party sources have to be present. For details see
|
||||||
|
;; https://github.com/OpenImageIO/oiio/blob/master/INSTALL
|
||||||
|
(arguments `(#:tests? #f))
|
||||||
|
(native-inputs
|
||||||
|
`(("pkg-config" ,pkg-config)))
|
||||||
|
(inputs
|
||||||
|
`(("boost" ,boost)
|
||||||
|
("libpng" ,libpng)
|
||||||
|
("libjpeg" ,libjpeg-8)
|
||||||
|
("libtiff" ,libtiff)
|
||||||
|
("giflib" ,giflib)
|
||||||
|
("openexr" ,openexr)
|
||||||
|
("ilmbase" ,ilmbase)
|
||||||
|
("python" ,python-2)
|
||||||
|
("zlib" ,zlib)))
|
||||||
|
(synopsis "C++ library for reading and writing images")
|
||||||
|
(description
|
||||||
|
"OpenImageIO is a library for reading and writing images, and a bunch of
|
||||||
|
related classes, utilities, and applications. There is a particular emphasis
|
||||||
|
on formats and functionality used in professional, large-scale animation and
|
||||||
|
visual effects work for film.")
|
||||||
|
(home-page "http://www.openimageio.org")
|
||||||
|
(license license:bsd-3)))
|
||||||
|
|
||||||
(define-public ctl
|
(define-public ctl
|
||||||
(package
|
(package
|
||||||
(name "ctl")
|
(name "ctl")
|
||||||
|
|
|
@ -3388,14 +3388,14 @@ a front-end for C compilers or analysis tools.")
|
||||||
(define-public python-cffi
|
(define-public python-cffi
|
||||||
(package
|
(package
|
||||||
(name "python-cffi")
|
(name "python-cffi")
|
||||||
(version "0.8.6")
|
(version "1.2.1")
|
||||||
(source
|
(source
|
||||||
(origin
|
(origin
|
||||||
(method url-fetch)
|
(method url-fetch)
|
||||||
(uri (string-append "https://pypi.python.org/packages/source/c/"
|
(uri (string-append "https://pypi.python.org/packages/source/c/"
|
||||||
"cffi/cffi-" version ".tar.gz"))
|
"cffi/cffi-" version ".tar.gz"))
|
||||||
(sha256
|
(sha256
|
||||||
(base32 "0406j3sgndmx88idv5zxkkrwfqxmjl18pj8gf47nsg4ymzixjci5"))))
|
(base32 "0g8yfzinry1vsj6d1jlnd19338bh92lhhk207ksy4lm1n3g73dga"))))
|
||||||
(build-system python-build-system)
|
(build-system python-build-system)
|
||||||
(outputs '("out" "doc"))
|
(outputs '("out" "doc"))
|
||||||
(inputs
|
(inputs
|
||||||
|
@ -3405,10 +3405,10 @@ a front-end for C compilers or analysis tools.")
|
||||||
(native-inputs
|
(native-inputs
|
||||||
`(("pkg-config" ,pkg-config)
|
`(("pkg-config" ,pkg-config)
|
||||||
("python-sphinx" ,python-sphinx)
|
("python-sphinx" ,python-sphinx)
|
||||||
|
("python-pytest" ,python-pytest)
|
||||||
("python-setuptools" ,python-setuptools)))
|
("python-setuptools" ,python-setuptools)))
|
||||||
(arguments
|
(arguments
|
||||||
`(#:tests? #f ; FIXME: requires pytest
|
`(#:phases
|
||||||
#:phases
|
|
||||||
(alist-cons-after
|
(alist-cons-after
|
||||||
'install 'install-doc
|
'install 'install-doc
|
||||||
(lambda* (#:key outputs #:allow-other-keys)
|
(lambda* (#:key outputs #:allow-other-keys)
|
||||||
|
@ -4945,3 +4945,26 @@ printing of sub-tables by specifying a row range.")
|
||||||
|
|
||||||
(define-public python2-prettytable
|
(define-public python2-prettytable
|
||||||
(package-with-python2 python-prettytable))
|
(package-with-python2 python-prettytable))
|
||||||
|
|
||||||
|
(define-public python-pyasn1
|
||||||
|
(package
|
||||||
|
(name "python-pyasn1")
|
||||||
|
(version "0.1.8")
|
||||||
|
(source
|
||||||
|
(origin
|
||||||
|
(method url-fetch)
|
||||||
|
(uri (string-append "https://pypi.python.org/packages/source/p/"
|
||||||
|
"pyasn1/pyasn1-" version ".tar.gz"))
|
||||||
|
(sha256
|
||||||
|
(base32
|
||||||
|
"0iw31d9l0zwx35szkzq72hiw002wnqrlrsi9dpbrfngcl1ybwcsx"))))
|
||||||
|
(build-system python-build-system)
|
||||||
|
(home-page "http://pyasn1.sourceforge.net/")
|
||||||
|
(synopsis "ASN.1 types and codecs")
|
||||||
|
(description
|
||||||
|
"This is an implementation of ASN.1 types and codecs in Python. It is
|
||||||
|
suitable for a wide range of protocols based on the ASN.1 specification.")
|
||||||
|
(license bsd-2)))
|
||||||
|
|
||||||
|
(define-public python2-pyasn1
|
||||||
|
(package-with-python2 python-pyasn1))
|
||||||
|
|
|
@ -101,27 +101,29 @@ width of the bar is BAR-WIDTH."
|
||||||
|
|
||||||
(define (string-pad-middle left right len)
|
(define (string-pad-middle left right len)
|
||||||
"Combine LEFT and RIGHT with enough padding in the middle so that the
|
"Combine LEFT and RIGHT with enough padding in the middle so that the
|
||||||
resulting string has length at least LEN. This right justifies RIGHT."
|
resulting string has length at least LEN (it may overflow). If the string
|
||||||
(string-append left
|
does not overflow, the last char in RIGHT will be flush with the LEN
|
||||||
(string-pad right (max 0 (- len (string-length left))))))
|
column."
|
||||||
|
(let* ((total-used (+ (string-length left)
|
||||||
(define (store-url-abbreviation url)
|
(string-length right)))
|
||||||
"Return a friendlier version of URL for display."
|
(num-spaces (max 1 (- len total-used)))
|
||||||
(let ((store-path (string-append (%store-directory) "/" (basename url))))
|
(padding (make-string num-spaces #\space)))
|
||||||
;; Take advantage of the implementation for store paths.
|
(string-append left padding right)))
|
||||||
(store-path-abbreviation store-path)))
|
|
||||||
|
|
||||||
(define* (store-path-abbreviation store-path #:optional (prefix-length 6))
|
(define* (store-path-abbreviation store-path #:optional (prefix-length 6))
|
||||||
"Return an abbreviation of STORE-PATH for display, showing PREFIX-LENGTH
|
"If STORE-PATH is the file name of a store entry, return an abbreviation of
|
||||||
characters of the hash."
|
STORE-PATH for display, showing PREFIX-LENGTH characters of the hash.
|
||||||
(let ((base (basename store-path)))
|
Otherwise return STORE-PATH."
|
||||||
(string-append (string-take base prefix-length)
|
(if (string-prefix? (%store-directory) store-path)
|
||||||
"…"
|
(let ((base (basename store-path)))
|
||||||
(string-drop base 32))))
|
(string-append (string-take base prefix-length)
|
||||||
|
"…"
|
||||||
|
(string-drop base 32)))
|
||||||
|
store-path))
|
||||||
|
|
||||||
(define* (progress-proc file size
|
(define* (progress-proc file size
|
||||||
#:optional (log-port (current-output-port))
|
#:optional (log-port (current-output-port))
|
||||||
#:key (abbreviation identity))
|
#:key (abbreviation basename))
|
||||||
"Return a procedure to show the progress of FILE's download, which is SIZE
|
"Return a procedure to show the progress of FILE's download, which is SIZE
|
||||||
bytes long. The returned procedure is suitable for use as an argument to
|
bytes long. The returned procedure is suitable for use as an argument to
|
||||||
`dump-port'. The progress report is written to LOG-PORT, with ABBREVIATION
|
`dump-port'. The progress report is written to LOG-PORT, with ABBREVIATION
|
||||||
|
@ -519,7 +521,7 @@ on success."
|
||||||
(_ (list (string->uri url))))))
|
(_ (list (string->uri url))))))
|
||||||
|
|
||||||
(define (fetch uri file)
|
(define (fetch uri file)
|
||||||
(format #t "starting download of `~a' from `~a'...~%"
|
(format #t "~%Starting download of ~a~%From ~a...~%"
|
||||||
file (uri->string uri))
|
file (uri->string uri))
|
||||||
(case (uri-scheme uri)
|
(case (uri-scheme uri)
|
||||||
((http https)
|
((http https)
|
||||||
|
|
|
@ -474,7 +474,9 @@ MANIFEST."
|
||||||
'#$(manifest-inputs manifest)))))
|
'#$(manifest-inputs manifest)))))
|
||||||
|
|
||||||
(gexp->derivation "info-dir" build
|
(gexp->derivation "info-dir" build
|
||||||
#:modules '((guix build utils))))
|
#:modules '((guix build utils))
|
||||||
|
#:local-build? #t
|
||||||
|
#:substitutable? #f))
|
||||||
|
|
||||||
(define (ghc-package-cache-file manifest)
|
(define (ghc-package-cache-file manifest)
|
||||||
"Return a derivation that builds the GHC 'package.cache' file for all the
|
"Return a derivation that builds the GHC 'package.cache' file for all the
|
||||||
|
@ -527,7 +529,8 @@ entries of MANIFEST, or #f if MANIFEST does not have any GHC packages."
|
||||||
(map manifest-entry-name (manifest-entries manifest)))
|
(map manifest-entry-name (manifest-entries manifest)))
|
||||||
(gexp->derivation "ghc-package-cache" build
|
(gexp->derivation "ghc-package-cache" build
|
||||||
#:modules '((guix build utils))
|
#:modules '((guix build utils))
|
||||||
#:local-build? #t)
|
#:local-build? #t
|
||||||
|
#:substitutable? #f)
|
||||||
(return #f))))
|
(return #f))))
|
||||||
|
|
||||||
(define (ca-certificate-bundle manifest)
|
(define (ca-certificate-bundle manifest)
|
||||||
|
@ -591,7 +594,8 @@ MANIFEST. Single-file bundles are required by programs such as Git and Lynx."
|
||||||
|
|
||||||
(gexp->derivation "ca-certificate-bundle" build
|
(gexp->derivation "ca-certificate-bundle" build
|
||||||
#:modules '((guix build utils))
|
#:modules '((guix build utils))
|
||||||
#:local-build? #t))
|
#:local-build? #t
|
||||||
|
#:substitutable? #f))
|
||||||
|
|
||||||
(define (gtk-icon-themes manifest)
|
(define (gtk-icon-themes manifest)
|
||||||
"Return a derivation that unions all icon themes from manifest entries and
|
"Return a derivation that unions all icon themes from manifest entries and
|
||||||
|
@ -669,7 +673,8 @@ creates the GTK+ 'icon-theme.cache' file for each theme."
|
||||||
(guix build profiles)
|
(guix build profiles)
|
||||||
(guix search-paths)
|
(guix search-paths)
|
||||||
(guix records))
|
(guix records))
|
||||||
#:local-build? #t)
|
#:local-build? #t
|
||||||
|
#:substitutable? #f)
|
||||||
(return #f))))
|
(return #f))))
|
||||||
|
|
||||||
(define %default-profile-hooks
|
(define %default-profile-hooks
|
||||||
|
@ -727,7 +732,14 @@ the monadic procedures listed in HOOKS--such as an Info 'dir' file, etc."
|
||||||
(guix build utils)
|
(guix build utils)
|
||||||
(guix search-paths)
|
(guix search-paths)
|
||||||
(guix records))
|
(guix records))
|
||||||
#:local-build? #t)))
|
|
||||||
|
;; Not worth offloading.
|
||||||
|
#:local-build? #t
|
||||||
|
|
||||||
|
;; Disable substitution because it would trigger a
|
||||||
|
;; connection to the substitute server, which is likely
|
||||||
|
;; to have no substitute to offer.
|
||||||
|
#:substitutable? #f)))
|
||||||
|
|
||||||
(define (profile-regexp profile)
|
(define (profile-regexp profile)
|
||||||
"Return a regular expression that matches PROFILE's name and number."
|
"Return a regular expression that matches PROFILE's name and number."
|
||||||
|
|
|
@ -803,7 +803,10 @@ converted to a space; sequences of more than one line break are preserved."
|
||||||
|
|
||||||
(define (texi->plain-text str)
|
(define (texi->plain-text str)
|
||||||
"Return a plain-text representation of texinfo fragment STR."
|
"Return a plain-text representation of texinfo fragment STR."
|
||||||
(stexi->plain-text (texi-fragment->stexi str)))
|
;; 'texi-fragment->stexi' uses a string port so make sure it's a
|
||||||
|
;; Unicode-capable one (see <http://bugs.gnu.org/11197>.)
|
||||||
|
(with-fluids ((%default-port-encoding "UTF-8"))
|
||||||
|
(stexi->plain-text (texi-fragment->stexi str))))
|
||||||
|
|
||||||
(define (package-description-string package)
|
(define (package-description-string package)
|
||||||
"Return a plain-text representation of PACKAGE description field."
|
"Return a plain-text representation of PACKAGE description field."
|
||||||
|
|
|
@ -149,8 +149,7 @@
|
||||||
('version "1.2.3")
|
('version "1.2.3")
|
||||||
('source ('origin
|
('source ('origin
|
||||||
('method 'url-fetch)
|
('method 'url-fetch)
|
||||||
('uri ('string-append "mirror://cran/src/contrib/my-example-sxml_"
|
('uri ('cran-uri "my-example-sxml" 'version))
|
||||||
'version ".tar.gz"))
|
|
||||||
('sha256
|
('sha256
|
||||||
('base32
|
('base32
|
||||||
(? string? hash)))))
|
(? string? hash)))))
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#:use-module (guix profiles)
|
#:use-module (guix profiles)
|
||||||
#:use-module (guix store)
|
#:use-module (guix store)
|
||||||
#:use-module (guix derivations)
|
#:use-module (guix derivations)
|
||||||
|
#:use-module (guix tests)
|
||||||
#:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
||||||
#:use-module (srfi srfi-11)
|
#:use-module (srfi srfi-11)
|
||||||
#:use-module (srfi srfi-19)
|
#:use-module (srfi srfi-19)
|
||||||
|
@ -89,6 +90,12 @@ interface, and powerful string processing.")
|
||||||
(fill-paragraph "First line.
|
(fill-paragraph "First line.
|
||||||
Second line" 24))
|
Second line" 24))
|
||||||
|
|
||||||
|
(test-equal "package-description-string vs. Unicode"
|
||||||
|
"b•ll•t\n\n" ;see <http://bugs.gnu.org/21536>
|
||||||
|
(with-fluids ((%default-port-encoding "ISO-8859-1"))
|
||||||
|
(package-description-string
|
||||||
|
(dummy-package "foo" (description "b•ll•t")))))
|
||||||
|
|
||||||
(test-equal "package-specification->name+version+output"
|
(test-equal "package-specification->name+version+output"
|
||||||
'(("guile" #f "out")
|
'(("guile" #f "out")
|
||||||
("guile" "2.0.9" "out")
|
("guile" "2.0.9" "out")
|
||||||
|
|
Loading…
Reference in New Issue