forked from tribes/guix
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 79b0f72a9e | |||
| 5fdb66f176 | |||
| b900520019 | |||
| 7ad64d8453 | |||
| 1517fb1a77 |
@@ -1,8 +0,0 @@
|
||||
[codespell]
|
||||
skip = guix/d3.v3.js, *.po, doc/*info, doc/*.de.*, doc/*.es.*, doc/*.fr.*, doc/*.it.*, doc/*.ko.*, doc/*.pt_BR.*, doc/*.ru.*, doc/*.sk.*, doc/*.sv.*, doc/*.zh_CN.*
|
||||
ignore-words-list = crate, debbugs, deriver
|
||||
write-changes = true
|
||||
# ask for confirmation, ask to choose from a list
|
||||
interactive = 3
|
||||
# Number of lines to show before and after for context
|
||||
context = 1
|
||||
+23
-632
@@ -1,134 +1,18 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2012-2023 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2013,2014 Mark H Weaver <mhw@netris.org>
|
||||
;;; Copyright © 2014 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
|
||||
;;; Copyright © 2015 David Thompson <davet@gnu.org>
|
||||
;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
|
||||
;;; Copyright © 2017 Alex Kost <alezost@gmail.com>
|
||||
;;; Copyright © 2018-2020 Caleb Ristvedt <caleb.ristvedt@cune.org>
|
||||
;;; Copyright © 2020-2023, 2025 Maxim Cournoyer <maxim@guixotic.coop>
|
||||
;;; Copyright © 2020 Miguel Ángel Arruga Vivas <rosen644835@gmail.com>
|
||||
;;; Copyright © 2020 Christine Lemmer-Webber <cwebber@dustycloud.org>
|
||||
;;; Copyright © 2022 Liliana Marie Prikler <liliana.prikler@gmail.com>
|
||||
;;; Copyright © 2022 Andrew Tropin <andrew@trop.in>
|
||||
;;; Copyright © 2022 Brian Cully <bjc@kublai.com>
|
||||
;;; Copyright © 2023 (unmatched-parenthesis <paren@disroot.org>
|
||||
;;; Copyright © 2024 Christopher Baines <mail@cbaines.net>
|
||||
;;; Copyright © 2024 Tomas Volf <~@wolfsden.cz>
|
||||
;;; Copyright © 2024 Nicolas Graves <ngraves@ngraves.fr>
|
||||
;;; Copyright © 2025 David Elsing <david.elsing@posteo.net>
|
||||
;;; Copyright © 2025 Hilton Chain <hako@ultrarare.space>
|
||||
;;; 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/>.
|
||||
|
||||
;; Per-directory local variables for GNU Emacs 23 and later.
|
||||
|
||||
((nil
|
||||
. ((fill-column . 78)
|
||||
(tab-width . 8)
|
||||
(sentence-end-double-space . t)
|
||||
|
||||
;; For use with 'bug-reference-prog-mode'. Extra bug-reference
|
||||
;; configuration should be done in your Emacs user configuration file;
|
||||
;; refer to (info (guix) The Perfect Setup).
|
||||
(eval . (setq-local bug-reference-bug-regexp
|
||||
;; #8545 (issues), !8545 (PRs), guix/guix#8545 and
|
||||
;; guix/guix!8545
|
||||
(rx (group (seq (? "guix/guix") (or "#" "!"))
|
||||
(group (one-or-more digit))))))
|
||||
(bug-reference-url-format . "https://codeberg.org/guix/guix/issues/%s")
|
||||
|
||||
(eval . (add-to-list 'completion-ignored-extensions ".go"))
|
||||
|
||||
;; Emacs-Guix
|
||||
(eval . (setq-local guix-directory
|
||||
(locate-dominating-file default-directory
|
||||
".dir-locals.el")))
|
||||
;; Magit
|
||||
(eval . (with-eval-after-load 'git-commit
|
||||
(add-to-list 'git-commit-trailers "Change-Id")))
|
||||
|
||||
;; TempEl
|
||||
(eval . (with-eval-after-load
|
||||
'tempel
|
||||
(if (stringp tempel-path)
|
||||
(setq tempel-path (list tempel-path)))
|
||||
(let ((guix-tempel-snippets
|
||||
(concat
|
||||
(expand-file-name
|
||||
"etc/snippets/tempel"
|
||||
(locate-dominating-file default-directory
|
||||
".dir-locals.el"))
|
||||
"/*.eld")))
|
||||
(unless (member guix-tempel-snippets tempel-path)
|
||||
(add-to-list 'tempel-path guix-tempel-snippets)))))
|
||||
|
||||
;; YASnippet
|
||||
(eval . (with-eval-after-load
|
||||
'yasnippet
|
||||
(let ((guix-yasnippets
|
||||
(expand-file-name
|
||||
"etc/snippets/yas"
|
||||
(locate-dominating-file default-directory
|
||||
".dir-locals.el"))))
|
||||
(unless (member guix-yasnippets yas-snippet-dirs)
|
||||
(add-to-list 'yas-snippet-dirs guix-yasnippets)
|
||||
(yas-reload-all)))))
|
||||
|
||||
;; Geiser
|
||||
;; This allows automatically setting the `geiser-guile-load-path'
|
||||
;; variable when using various Guix checkouts (e.g., via git worktrees).
|
||||
(geiser-repl-per-project-p . t)
|
||||
(geiser-insert-actual-lambda . nil)))
|
||||
|
||||
;; For use with 'bug-reference-prog-mode'.
|
||||
(bug-reference-url-format . "http://bugs.gnu.org/%s")
|
||||
(bug-reference-bug-regexp
|
||||
. "<https?://\\(debbugs\\|bugs\\)\\.gnu\\.org/\\([0-9]+\\)>")))
|
||||
(c-mode . ((c-file-style . "gnu")))
|
||||
(emacs-lisp-mode . ((indent-tabs-mode . nil)))
|
||||
(texinfo-mode . ((indent-tabs-mode . nil)
|
||||
(fill-column . 72)))
|
||||
(scheme-mode
|
||||
.
|
||||
((indent-tabs-mode . nil)
|
||||
|
||||
;; Emacs 28 changed the behavior of 'lisp-fill-paragraph', which causes the
|
||||
;; first line of package descriptions to extrude past 'fill-column', and
|
||||
;; somehow that is deemed more correct upstream (see:
|
||||
;; https://issues.guix.gnu.org/56197).
|
||||
(eval . (progn
|
||||
(require 'lisp-mode)
|
||||
(defun emacs27-lisp-fill-paragraph (&optional justify)
|
||||
(interactive "P")
|
||||
(or (fill-comment-paragraph justify)
|
||||
(let ((paragraph-start
|
||||
(concat paragraph-start
|
||||
"\\|\\s-*\\([(;\"]\\|\\s-:\\|`(\\|#'(\\)"))
|
||||
(paragraph-separate
|
||||
(concat paragraph-separate "\\|\\s-*\".*[,\\.]$"))
|
||||
(fill-column (if (and (integerp emacs-lisp-docstring-fill-column)
|
||||
(derived-mode-p 'emacs-lisp-mode))
|
||||
emacs-lisp-docstring-fill-column
|
||||
fill-column)))
|
||||
(fill-paragraph justify))
|
||||
;; Never return nil.
|
||||
t))
|
||||
(setq-local fill-paragraph-function #'emacs27-lisp-fill-paragraph)))
|
||||
|
||||
;; This notably allows '(' in Paredit to not insert a space when the
|
||||
;; preceding symbol is one of these.
|
||||
(eval . (modify-syntax-entry ?~ "'"))
|
||||
(eval . (modify-syntax-entry ?$ "'"))
|
||||
(eval . (modify-syntax-entry ?+ "'"))
|
||||
|
||||
(eval . (put 'eval-when 'scheme-indent-function 1))
|
||||
(eval . (put 'call-with-prompt 'scheme-indent-function 1))
|
||||
(eval . (put 'test-assert 'scheme-indent-function 1))
|
||||
@@ -137,21 +21,10 @@
|
||||
(eval . (put 'test-equal 'scheme-indent-function 1))
|
||||
(eval . (put 'test-eq 'scheme-indent-function 1))
|
||||
(eval . (put 'call-with-input-string 'scheme-indent-function 1))
|
||||
(eval . (put 'call-with-port 'scheme-indent-function 1))
|
||||
(eval . (put 'guard 'scheme-indent-function 1))
|
||||
(eval . (put 'lambda* 'scheme-indent-function 1))
|
||||
(eval . (put 'peekable-lambda 'scheme-indent-function 1))
|
||||
(eval . (put 'substitute* 'scheme-indent-function 1))
|
||||
(eval . (put 'match-record 'scheme-indent-function 3))
|
||||
(eval . (put 'match-record-lambda 'scheme-indent-function 2))
|
||||
(eval . (put 'with-fluids 'scheme-indent-function 2))
|
||||
|
||||
;; TODO: Contribute these to Emacs' scheme-mode.
|
||||
(eval . (put 'let-keywords 'scheme-indent-function 3))
|
||||
|
||||
;; 'modify-inputs' and its keywords.
|
||||
(eval . (put 'modify-inputs 'scheme-indent-function 1))
|
||||
(eval . (put 'replace 'scheme-indent-function 1))
|
||||
(eval . (put 'match-record 'scheme-indent-function 2))
|
||||
|
||||
;; 'modify-phases' and its keywords.
|
||||
(eval . (put 'modify-phases 'scheme-indent-function 1))
|
||||
@@ -161,15 +34,17 @@
|
||||
|
||||
(eval . (put 'modify-services 'scheme-indent-function 1))
|
||||
(eval . (put 'with-directory-excursion 'scheme-indent-function 1))
|
||||
(eval . (put 'with-file-lock 'scheme-indent-function 1))
|
||||
(eval . (put 'with-file-lock/no-wait 'scheme-indent-function 1))
|
||||
(eval . (put 'with-profile-lock 'scheme-indent-function 1))
|
||||
(eval . (put 'with-writable-file 'scheme-indent-function 2))
|
||||
|
||||
(eval . (put 'package/inherit 'scheme-indent-function 1))
|
||||
(eval . (put 'package 'scheme-indent-function 0))
|
||||
(eval . (put 'origin 'scheme-indent-function 0))
|
||||
(eval . (put 'build-system 'scheme-indent-function 0))
|
||||
(eval . (put 'bag 'scheme-indent-function 0))
|
||||
(eval . (put 'graft 'scheme-indent-function 0))
|
||||
(eval . (put 'operating-system 'scheme-indent-function 0))
|
||||
(eval . (put 'file-system 'scheme-indent-function 0))
|
||||
(eval . (put 'manifest-entry 'scheme-indent-function 0))
|
||||
(eval . (put 'manifest-pattern 'scheme-indent-function 0))
|
||||
(eval . (put 'substitute-keyword-arguments 'scheme-indent-function 1))
|
||||
(eval . (put 'with-store 'scheme-indent-function 1))
|
||||
(eval . (put 'with-store/non-blocking 'scheme-indent-function 1))
|
||||
(eval . (put 'with-external-store 'scheme-indent-function 1))
|
||||
(eval . (put 'with-error-handling 'scheme-indent-function 0))
|
||||
(eval . (put 'with-mutex 'scheme-indent-function 1))
|
||||
@@ -178,8 +53,6 @@
|
||||
(eval . (put 'call-with-decompressed-port 'scheme-indent-function 2))
|
||||
(eval . (put 'call-with-gzip-input-port 'scheme-indent-function 1))
|
||||
(eval . (put 'call-with-gzip-output-port 'scheme-indent-function 1))
|
||||
(eval . (put 'call-with-lzip-input-port 'scheme-indent-function 1))
|
||||
(eval . (put 'call-with-lzip-output-port 'scheme-indent-function 1))
|
||||
(eval . (put 'signature-case 'scheme-indent-function 1))
|
||||
(eval . (put 'emacs-batch-eval 'scheme-indent-function 0))
|
||||
(eval . (put 'emacs-batch-edit-file 'scheme-indent-function 1))
|
||||
@@ -188,8 +61,6 @@
|
||||
(eval . (put 'with-derivation-narinfo 'scheme-indent-function 1))
|
||||
(eval . (put 'with-derivation-substitute 'scheme-indent-function 2))
|
||||
(eval . (put 'with-status-report 'scheme-indent-function 1))
|
||||
(eval . (put 'with-status-verbosity 'scheme-indent-function 1))
|
||||
(eval . (put 'with-build-handler 'scheme-indent-function 1))
|
||||
|
||||
(eval . (put 'mlambda 'scheme-indent-function 1))
|
||||
(eval . (put 'mlambdaq 'scheme-indent-function 1))
|
||||
@@ -200,505 +71,25 @@
|
||||
(eval . (put 'munless 'scheme-indent-function 1))
|
||||
(eval . (put 'mlet* 'scheme-indent-function 2))
|
||||
(eval . (put 'mlet 'scheme-indent-function 2))
|
||||
(eval . (put 'state-parameterize 'scheme-indent-function 2))
|
||||
(eval . (put 'store-parameterize 'scheme-indent-function 2))
|
||||
(eval . (put 'run-with-store 'scheme-indent-function 1))
|
||||
(eval . (put 'run-with-state 'scheme-indent-function 1))
|
||||
(eval . (put 'wrap-program 'scheme-indent-function 1))
|
||||
(eval . (put 'wrap-script 'scheme-indent-function 1))
|
||||
(eval . (put 'with-imported-modules 'scheme-indent-function 1))
|
||||
(eval . (put 'with-extensions 'scheme-indent-function 1))
|
||||
(eval . (put 'with-parameters 'scheme-indent-function 1))
|
||||
(eval . (put 'let-system 'scheme-indent-function 1))
|
||||
(eval . (put 'with-build-variables 'scheme-indent-function 2))
|
||||
|
||||
(eval . (put 'with-database 'scheme-indent-function 2))
|
||||
(eval . (put 'call-with-database 'scheme-indent-function 1))
|
||||
(eval . (put 'call-with-transaction 'scheme-indent-function 1))
|
||||
(eval . (put 'call-with-retrying-transaction 'scheme-indent-function 1))
|
||||
|
||||
(eval . (put 'call-with-container 'scheme-indent-function 1))
|
||||
(eval . (put 'container-excursion 'scheme-indent-function 1))
|
||||
(eval . (put 'eventually 'scheme-indent-function 1))
|
||||
|
||||
(eval . (put 'call-with-progress-reporter 'scheme-indent-function 1))
|
||||
(eval . (put 'with-repository 'scheme-indent-function 2))
|
||||
(eval . (put 'with-temporary-git-repository 'scheme-indent-function 2))
|
||||
(eval . (put 'with-served-git-repository 'scheme-indent-function 2))
|
||||
(eval . (put 'with-environment-variables 'scheme-indent-function 1))
|
||||
(eval . (put 'with-fresh-gnupg-setup 'scheme-indent-function 1))
|
||||
|
||||
(eval . (put 'with-paginated-output-port 'scheme-indent-function 1))
|
||||
|
||||
(eval . (put 'with-shepherd-action 'scheme-indent-function 3))
|
||||
|
||||
(eval . (put 'with-http-server 'scheme-indent-function 1))
|
||||
|
||||
;; Record constructors.
|
||||
;; URIs for origin methods.
|
||||
(eval . (put 'android-repo-reference 'scheme-indent-function 0))
|
||||
(eval . (put 'bzr-reference 'scheme-indent-function 0))
|
||||
(eval . (put 'cvs-reference 'scheme-indent-function 0))
|
||||
(eval . (put 'git-checkout 'scheme-indent-function 0))
|
||||
(eval . (put 'git-reference 'scheme-indent-function 0))
|
||||
(eval . (put 'hg-reference 'scheme-indent-function 0))
|
||||
(eval . (put 'svn-multi-reference 'scheme-indent-function 0))
|
||||
(eval . (put 'svn-reference 'scheme-indent-function 0))
|
||||
|
||||
;; guix/
|
||||
(eval . (put 'avahi-service 'scheme-indent-function 0))
|
||||
(eval . (put 'bag 'scheme-indent-function 0))
|
||||
(eval . (put 'build-status 'scheme-indent-function 0))
|
||||
(eval . (put 'build-system 'scheme-indent-function 0))
|
||||
(eval . (put 'channel 'scheme-indent-function 0))
|
||||
(eval . (put 'gnu-package-descriptor 'scheme-indent-function 0))
|
||||
(eval . (put 'graft 'scheme-indent-function 0))
|
||||
(eval . (put 'lint-checker 'scheme-indent-function 0))
|
||||
(eval . (put 'lint-warning 'scheme-indent-function 0))
|
||||
(eval . (put 'manifest-entry 'scheme-indent-function 0))
|
||||
(eval . (put 'manifest-pattern 'scheme-indent-function 0))
|
||||
(eval . (put 'manifest-transaction 'scheme-indent-function 0))
|
||||
(eval . (put 'node-type 'scheme-indent-function 0))
|
||||
(eval . (put 'origin 'scheme-indent-function 0))
|
||||
(eval . (put 'package 'scheme-indent-function 0))
|
||||
(eval . (put 'platform 'scheme-indent-function 0))
|
||||
(eval . (put 'profile 'scheme-indent-function 0))
|
||||
(eval . (put 'progress-reporter 'scheme-indent-function 0))
|
||||
(eval . (put 'search-path-specification 'scheme-indent-function 0))
|
||||
(eval . (put 'upstream-input 'scheme-indent-function 0))
|
||||
(eval . (put 'upstream-source 'scheme-indent-function 0))
|
||||
(eval . (put 'upstream-updater 'scheme-indent-function 0))
|
||||
|
||||
;; gnu/
|
||||
(eval . (put 'bootloader 'scheme-indent-function 0))
|
||||
(eval . (put 'bootloader-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'image 'scheme-indent-function 0))
|
||||
(eval . (put 'image-type 'scheme-indent-function 0))
|
||||
(eval . (put 'menu-entry 'scheme-indent-function 0))
|
||||
(eval . (put 'partition 'scheme-indent-function 0))
|
||||
|
||||
;; gnu/machine
|
||||
(eval . (put 'digital-ocean-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'environment-type 'scheme-indent-function 0))
|
||||
(eval . (put 'hetzner-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'machine 'scheme-indent-function 0))
|
||||
(eval . (put 'machine-ssh-configuration 'scheme-indent-function 0))
|
||||
|
||||
;; gnu/system
|
||||
(eval . (put 'boot-parameters 'scheme-indent-function 0))
|
||||
(eval . (put 'file-system 'scheme-indent-function 0))
|
||||
(eval . (put 'file-system-mapping 'scheme-indent-function 0))
|
||||
(eval . (put 'locale-definition 'scheme-indent-function 0))
|
||||
(eval . (put 'mapped-device 'scheme-indent-function 0))
|
||||
(eval . (put 'mapped-device-kind 'scheme-indent-function 0))
|
||||
(eval . (put 'name-service 'scheme-indent-function 0))
|
||||
(eval . (put 'name-service-switch 'scheme-indent-function 0))
|
||||
(eval . (put 'operating-system 'scheme-indent-function 0))
|
||||
(eval . (put 'pam-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'pam-entry 'scheme-indent-function 0))
|
||||
(eval . (put 'pam-extension 'scheme-indent-function 0))
|
||||
(eval . (put 'pam-service 'scheme-indent-function 0))
|
||||
(eval . (put 'privileged-program 'scheme-indent-function 0))
|
||||
(eval . (put 'subid-range 'scheme-indent-function 0))
|
||||
(eval . (put 'subids-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'subids-extension 'scheme-indent-function 0))
|
||||
(eval . (put 'swap-space 'scheme-indent-function 0))
|
||||
(eval . (put 'user-account 'scheme-indent-function 0))
|
||||
(eval . (put 'user-group 'scheme-indent-function 0))
|
||||
(eval . (put 'virtual-machine 'scheme-indent-function 0))
|
||||
|
||||
;; gnu/home
|
||||
(eval . (put 'home-bash-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-bash-extension 'scheme-indent-function 0))
|
||||
(eval . (put 'home-batsignal-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-beets-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-dbus-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-dotfiles-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-environment 'scheme-indent-function 0))
|
||||
(eval . (put 'home-fish-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-fish-extension 'scheme-indent-function 0))
|
||||
(eval . (put 'home-gpg-agent-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-inputrc-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-kodi-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-mcron-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-msmtp-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-openssh-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-parcimonie-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-pipewire-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-redshift-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-shell-profile-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-shepherd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-ssh-agent-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-unclutter-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-xdg-base-directories-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-xdg-mime-applications-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-xdg-user-directories-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-xmodmap-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-znc-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-zsh-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'home-zsh-extension 'scheme-indent-function 0))
|
||||
(eval . (put 'msmtp-account 'scheme-indent-function 0))
|
||||
(eval . (put 'msmtp-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'openssh-host 'scheme-indent-function 0))
|
||||
(eval . (put 'point 'scheme-indent-function 0))
|
||||
(eval . (put 'proxy-jump 'scheme-indent-function 0))
|
||||
(eval . (put 'sway-bar 'scheme-indent-function 0))
|
||||
(eval . (put 'sway-border-color 'scheme-indent-function 0))
|
||||
(eval . (put 'sway-color 'scheme-indent-function 0))
|
||||
(eval . (put 'sway-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'sway-input 'scheme-indent-function 0))
|
||||
(eval . (put 'sway-mode 'scheme-indent-function 0))
|
||||
(eval . (put 'sway-output 'scheme-indent-function 0))
|
||||
(eval . (put 'xdg-desktop-action 'scheme-indent-function 0))
|
||||
(eval . (put 'xdg-desktop-entry 'scheme-indent-function 0))
|
||||
|
||||
;; gnu/services
|
||||
(eval . (put 'agate-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'agetty-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'alsa-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'anonip-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'apcupsd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'apcupsd-event-handlers 'scheme-indent-function 0))
|
||||
(eval . (put 'auditd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'autossh-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'avahi-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'backend-userroot-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'bffe-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'bitlbee-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'bluetooth-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'cachefilesd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'certbot-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'cgit-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'configuration-field 'scheme-indent-function 0))
|
||||
(eval . (put 'connman-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'connman-general-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'containerd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'cuirass-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'cuirass-remote-server-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'cuirass-remote-worker-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'cups-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'darkstat-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'dbus-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'dconf-keyfile 'scheme-indent-function 0))
|
||||
(eval . (put 'dconf-profile 'scheme-indent-function 0))
|
||||
(eval . (put 'debootstrap-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'dhcp-client-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'dhcpcd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'dhcpd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'dicod-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'dict-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'directory-server-instance-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'dnsmasq-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'docker-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'dovecot-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'dropbear-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'earlyoom-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'elogind-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'enlightenment-desktop-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'exim-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'ext-component-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'fail2ban-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'fail2ban-ignore-cache-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'fail2ban-jail-action-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'fail2ban-jail-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'fail2ban-jail-filter-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'fcgiwrap-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'fifo-listener-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'file-database-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'files-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'fprintd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'fstrim-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'ganeti-cleaner-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'ganeti-confd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'ganeti-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'ganeti-kvmd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'ganeti-luxid-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'ganeti-metad-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'ganeti-mond-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'ganeti-noded-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'ganeti-os 'scheme-indent-function 0))
|
||||
(eval . (put 'ganeti-os-variant 'scheme-indent-function 0))
|
||||
(eval . (put 'ganeti-rapi-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'ganeti-watcher-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'ganeti-wconfd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'gdm-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'geoclue-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'getmail-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'getmail-configuration-file 'scheme-indent-function 0))
|
||||
(eval . (put 'getmail-destination-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'getmail-options-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'getmail-retriever-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'git-daemon-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'git-http-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'gitile-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'gitolite-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'gitolite-git-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'gitolite-rc-file 'scheme-indent-function 0))
|
||||
(eval . (put 'gmnisrv-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'gnome-desktop-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'gnome-keyring-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'gpm-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'greetd-agreety-session 'scheme-indent-function 0))
|
||||
(eval . (put 'greetd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'greetd-gtkgreet-sway-session 'scheme-indent-function 0))
|
||||
(eval . (put 'greetd-terminal-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'greetd-user-session 'scheme-indent-function 0))
|
||||
(eval . (put 'greetd-wlgreet-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'greetd-wlgreet-session 'scheme-indent-function 0))
|
||||
(eval . (put 'greetd-wlgreet-sway-session 'scheme-indent-function 0))
|
||||
(eval . (put 'gss-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'guix-build-coordinator-agent-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'guix-build-coordinator-agent-dynamic-auth 'scheme-indent-function 0))
|
||||
(eval . (put 'guix-build-coordinator-agent-dynamic-auth-with-file 'scheme-indent-function 0))
|
||||
(eval . (put 'guix-build-coordinator-agent-password-auth 'scheme-indent-function 0))
|
||||
(eval . (put 'guix-build-coordinator-agent-password-file-auth 'scheme-indent-function 0))
|
||||
(eval . (put 'guix-build-coordinator-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'guix-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'guix-data-service-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'guix-extension 'scheme-indent-function 0))
|
||||
(eval . (put 'guix-publish-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'gvfs-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'host 'scheme-indent-function 0))
|
||||
(eval . (put 'hostapd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'hpcguix-web-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'httpd-config-file 'scheme-indent-function 0))
|
||||
(eval . (put 'httpd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'httpd-module 'scheme-indent-function 0))
|
||||
(eval . (put 'httpd-virtualhost 'scheme-indent-function 0))
|
||||
(eval . (put 'hurd-console-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'hurd-getty-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'hurd-vm-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'idmap-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'imap4d-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'inet-listener-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'inetd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'inetd-entry 'scheme-indent-function 0))
|
||||
(eval . (put 'inputattach-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'int-component-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'ipfs-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'iptables-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'iwd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'iwd-general-settings 'scheme-indent-function 0))
|
||||
(eval . (put 'iwd-network-settings 'scheme-indent-function 0))
|
||||
(eval . (put 'iwd-scan-settings 'scheme-indent-function 0))
|
||||
(eval . (put 'iwd-settings 'scheme-indent-function 0))
|
||||
(eval . (put 'jami-account 'scheme-indent-function 0))
|
||||
(eval . (put 'jami-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'joycond-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'keepalived-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'kmscon-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'knot-acl-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'knot-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'knot-key-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'knot-keystore-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'knot-policy-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'knot-remote-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'knot-resolver-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'knot-zone-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'krb5-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'krb5-realm 'scheme-indent-function 0))
|
||||
(eval . (put 'kwallet-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'ladspa-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'laminar-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'libvirt-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'lightdm-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'lightdm-gtk-greeter-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'lightdm-seat-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'linux-builder-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'lirc-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'live-service 'scheme-indent-function 0))
|
||||
(eval . (put 'localed-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'location-access-control 'scheme-indent-function 0))
|
||||
(eval . (put 'log-cleanup-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'log-rotation 'scheme-indent-function 0))
|
||||
(eval . (put 'log-rotation-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'login-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'lsh-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'lxqt-desktop-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'mailbox-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'mate-desktop-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'mcron-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'memcached-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'method-access-control 'scheme-indent-function 0))
|
||||
(eval . (put 'mingetty-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'mod-muc-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'modem-manager-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'mosquitto-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'mpd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'mpd-output 'scheme-indent-function 0))
|
||||
(eval . (put 'mpd-partition 'scheme-indent-function 0))
|
||||
(eval . (put 'mpd-plugin 'scheme-indent-function 0))
|
||||
(eval . (put 'mumble-server-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'mumble-server-public-registration-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'mumi-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'mumi-package-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'mympd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'mympd-ip-acl 'scheme-indent-function 0))
|
||||
(eval . (put 'mysql-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'namespace-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'nar-herder-cached-compression-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'nar-herder-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'network-address 'scheme-indent-function 0))
|
||||
(eval . (put 'network-link 'scheme-indent-function 0))
|
||||
(eval . (put 'network-manager-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'network-route 'scheme-indent-function 0))
|
||||
(eval . (put 'nfs-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'nftables-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'nginx-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'nginx-location-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'nginx-log-format-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'nginx-named-location-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'nginx-server-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'nginx-upstream-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'ngircd-channel 'scheme-indent-function 0))
|
||||
(eval . (put 'ngircd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'ngircd-global 'scheme-indent-function 0))
|
||||
(eval . (put 'ngircd-limits 'scheme-indent-function 0))
|
||||
(eval . (put 'ngircd-operator 'scheme-indent-function 0))
|
||||
(eval . (put 'ngircd-options 'scheme-indent-function 0))
|
||||
(eval . (put 'ngircd-server 'scheme-indent-function 0))
|
||||
(eval . (put 'ngircd-ssl 'scheme-indent-function 0))
|
||||
(eval . (put 'nix-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'nscd-cache 'scheme-indent-function 0))
|
||||
(eval . (put 'nscd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'nslcd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'ntp-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'ntp-server 'scheme-indent-function 0))
|
||||
(eval . (put 'oci-container-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'oci-image 'scheme-indent-function 0))
|
||||
(eval . (put 'opaque-cgit-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'opaque-cups-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'opaque-dovecot-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'opaque-prosody-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'opendht-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'openntpd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'opensmtpd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'openssh-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'openvpn-ccd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'openvpn-client-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'openvpn-remote-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'openvpn-server-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'openvswitch-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'operation-access-control 'scheme-indent-function 0))
|
||||
(eval . (put 'package-database-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'pagekite-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'pam-krb5-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'pam-mount-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'pam-mount-volume 'scheme-indent-function 0))
|
||||
(eval . (put 'passdb-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'patchwork-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'patchwork-database-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'patchwork-settings-module 'scheme-indent-function 0))
|
||||
(eval . (put 'pcscd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'php-fpm-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'php-fpm-dynamic-process-manager-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'php-fpm-on-demand-process-manager-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'php-fpm-static-process-manager-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'pipefs-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'plasma-desktop-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'plugin-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'policy-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'polkit-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'postgresql-config-file 'scheme-indent-function 0))
|
||||
(eval . (put 'postgresql-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'postgresql-role 'scheme-indent-function 0))
|
||||
(eval . (put 'pounce-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'power-profiles-daemon-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'powertop-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'prometheus-node-exporter-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'prosody-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'protocol-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'pulseaudio-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'qemu-binfmt-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'qemu-guest-agent-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'quassel-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'radicale-auth-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'radicale-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'radicale-encoding-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'radicale-logging-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'radicale-rights-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'radicale-server-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'radicale-storage-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'rasdaemon-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'readymedia-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'readymedia-media-directory 'scheme-indent-function 0))
|
||||
(eval . (put 'redis-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'repository-cgit-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'resize-file-system-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'restic-backup-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'restic-backup-job 'scheme-indent-function 0))
|
||||
(eval . (put 'rngd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'rootless-podman-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'rpcbind-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'rshiny-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'rspamd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'rsync-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'rsync-module 'scheme-indent-function 0))
|
||||
(eval . (put 'samba-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'screen-locker-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'sddm-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'seatd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'service-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'service-type 'scheme-indent-function 0))
|
||||
(eval . (put 'shepherd-action 'scheme-indent-function 0))
|
||||
(eval . (put 'shepherd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'shepherd-service 'scheme-indent-function 0))
|
||||
(eval . (put 'slim-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'snuik-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'speakersafetyd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'spice-vdagent-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'ssl-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'static-networking 'scheme-indent-function 0))
|
||||
(eval . (put 'strongswan-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'sugar-desktop-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'syncthing-config-file 'scheme-indent-function 0))
|
||||
(eval . (put 'syncthing-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'syncthing-device 'scheme-indent-function 0))
|
||||
(eval . (put 'syncthing-folder 'scheme-indent-function 0))
|
||||
(eval . (put 'syncthing-folder-device 'scheme-indent-function 0))
|
||||
(eval . (put 'sysctl-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'syslog-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'system-log-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'tailon-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'tailon-configuration-file 'scheme-indent-function 0))
|
||||
(eval . (put 'thermald-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'tlp-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'tor-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'tor-onion-service-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'tor-transport-plugin 'scheme-indent-function 0))
|
||||
(eval . (put 'transmission-daemon-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'udev-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'udisks-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'unattended-upgrade-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'unbound-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'unbound-remote 'scheme-indent-function 0))
|
||||
(eval . (put 'unbound-server 'scheme-indent-function 0))
|
||||
(eval . (put 'unbound-zone 'scheme-indent-function 0))
|
||||
(eval . (put 'unix-listener-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'upower-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'usb-modeswitch-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'userdb-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'varnish-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'virtlog-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'virtual-build-machine 'scheme-indent-function 0))
|
||||
(eval . (put 'virtualhost-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'vnstat-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'webssh-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'wesnothd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'whoogle-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'wireguard-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'wireguard-peer 'scheme-indent-function 0))
|
||||
(eval . (put 'wpa-supplicant-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'wsdd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'xe-guest-utilities-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'xen-guest-agent-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'xfce-desktop-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'xorg-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'xvnc-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'yggdrasil-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'zabbix-agent-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'zabbix-front-end-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'zabbix-server-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'zone-entry 'scheme-indent-function 0))
|
||||
(eval . (put 'zone-file 'scheme-indent-function 0))
|
||||
(eval . (put 'zram-device-configuration 'scheme-indent-function 0)))))
|
||||
;; This notably allows '(' in Paredit to not insert a space when the
|
||||
;; preceding symbol is one of these.
|
||||
(eval . (modify-syntax-entry ?~ "'"))
|
||||
(eval . (modify-syntax-entry ?$ "'"))
|
||||
(eval . (modify-syntax-entry ?+ "'"))))
|
||||
(emacs-lisp-mode . ((indent-tabs-mode . nil)))
|
||||
(texinfo-mode . ((indent-tabs-mode . nil)
|
||||
(fill-column . 72))))
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
root = true
|
||||
|
||||
[*.{c,h,cpp,hpp,el,scm,ac,am,m4,po}{,.in}]
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.{c,h,cpp,hpp,ac,am,m4,el,scm}{,.in}]
|
||||
max_line_length = 80
|
||||
|
||||
[*.{c,h,cpp,hpp,ac,m4,el,scm}{,.in}]
|
||||
indent_style = space
|
||||
|
||||
[*.{c,h,cpp,hpp}{,.in}]
|
||||
indent_size = 4
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
name: 'Bug Reporting'
|
||||
about: 'Please check whether the bug is already reported, on Codeberg or in the Guix issue tracker.'
|
||||
title: ''
|
||||
ref: ''
|
||||
labels:
|
||||
---
|
||||
<!--
|
||||
Describe the bug you encounter below.
|
||||
|
||||
Please provide the output of the command `guix describe`.
|
||||
-->
|
||||
`guix describe` outputs:
|
||||
```text
|
||||
|
||||
```
|
||||
@@ -1,22 +0,0 @@
|
||||
# Force the use of templates.
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Guix Issue Tracker (will stop accepting new submittions on January 1st, 2026)
|
||||
url: https://issues.guix.gnu.org/
|
||||
about: Submit patches and bug reports via email.
|
||||
|
||||
- name: Help Mailing List (help-guix@gnu.org)
|
||||
url: https://lists.gnu.org/mailman/listinfo/help-guix
|
||||
about: Subscribe to the Help mailing list to get support from the GNU Guix community via email. You can post messages in English though we also accept other languages.
|
||||
|
||||
- name: Development Mailing List (guix-devel@gnu.org)
|
||||
url: https://lists.gnu.org/mailman/listinfo/guix-devel
|
||||
about: Discussion about the development of GNU Guix.
|
||||
|
||||
- name: Security Mailing List (guix-security@gnu.org)
|
||||
url: https://lists.gnu.org/mailman/listinfo/guix-security
|
||||
about: Report security issues in Guix itself or in the packages it provides. Posting here allows Guix developers to address the problem before it is widely publicized.
|
||||
|
||||
- name: Contact - GNU Guix
|
||||
url: https://guix.gnu.org/en/contact/
|
||||
about: Communication channels of GNU Guix.
|
||||
@@ -1,65 +0,0 @@
|
||||
---
|
||||
name: 'Pull Request'
|
||||
about: 'Pull request template'
|
||||
title: ''
|
||||
ref: ''
|
||||
labels:
|
||||
---
|
||||
<!--
|
||||
Below is a checklist for package-related patches.
|
||||
|
||||
For details please refer to [the manual](https://guix.gnu.org/manual/devel/en/html_node/Submitting-Patches.html).
|
||||
|
||||
Common issues in the contribution process are also documented in the
|
||||
["Contributing" chapter](https://guix.gnu.org/manual/devel/en/html_node/Contributing.html)
|
||||
of the manual.
|
||||
|
||||
Tick a box by changing it from [ ] to [x].
|
||||
-->
|
||||
|
||||
- System(s) where you built it (successfully):
|
||||
- [ ] x86_64-linux
|
||||
- [ ] i686-linux
|
||||
- [ ] aarch64-linux
|
||||
- [ ] armhf-linux
|
||||
- [ ] powerpc64le-linux
|
||||
- [ ] riscv64-linux
|
||||
- [ ] x86_64-gnu
|
||||
- [ ] i586-gnu
|
||||
|
||||
- Package **update**
|
||||
- Closure size increase.
|
||||
```console
|
||||
$ guix size PACKAGE | tail -n1 # before
|
||||
total: ...
|
||||
$ ./pre-inst-env guix size PACKAGE | tail -n1 # after
|
||||
total: ...
|
||||
```
|
||||
- Build status of direct dependents (`./pre-inst-env guix build -k -P1 PACKAGE ...`):
|
||||
```text
|
||||
|
||||
```
|
||||
- Link to upstream release notes (if applicable):
|
||||
```text
|
||||
|
||||
```
|
||||
- Package **addition**
|
||||
- [ ] The packages includes tests when available.
|
||||
- [ ] Closure size given by `guix size`.
|
||||
- [ ] Fixed errors reported by `guix lint` (`./pre-inst-env guix lint PACKAGE ...`).
|
||||
- [ ] Verified cryptographic signature provided by upstream.
|
||||
- [ ] The packages don't use bundled copies of software.
|
||||
- [ ] Synopsis and description are written in conformance with [the guidelines](https://guix.gnu.org/manual/devel/en/html_node/Synopses-and-Descriptions.html).
|
||||
|
||||
- [ ] Commit messages follow [the "ChangeLog" style](https://www.gnu.org/prep/standards/html_node/Change-Logs.html).
|
||||
- [ ] The change doesn't break `guix pull` (`guix pull --url=/path/to/your/checkout --profile=/tmp/guix.master --disable-authentication`).
|
||||
|
||||
- Successfully cross-compiled to the following target(s) (this is optional):
|
||||
- [ ] x86_64-linux-gnu
|
||||
- [ ] i686-linux-gnu
|
||||
- [ ] aarch64-linux-gnu
|
||||
- [ ] arm-linux-gnueabihf
|
||||
- [ ] powerpc64le-linux-gnu
|
||||
- [ ] riscv64-linux-gnu
|
||||
- [ ] x86_64-pc-gnu
|
||||
- [ ] i586-pc-gnu
|
||||
@@ -1,3 +0,0 @@
|
||||
*.scm diff=scheme
|
||||
*.scm.in diff=scheme
|
||||
*.texi diff=texinfo
|
||||
+28
-42
@@ -1,7 +1,6 @@
|
||||
*.eps
|
||||
*.go
|
||||
*.log
|
||||
*.mo
|
||||
*.pdf
|
||||
*.png
|
||||
*.tar.xz
|
||||
@@ -29,25 +28,21 @@
|
||||
/configure
|
||||
/doc/*.1
|
||||
/doc/.dirstamp
|
||||
/doc/contributing.*.texi
|
||||
/doc/guix*.aux
|
||||
/doc/guix*.cp
|
||||
/doc/guix*.cps
|
||||
/doc/guix*.fn
|
||||
/doc/guix*.fns
|
||||
/doc/guix*.html
|
||||
/doc/guix*.info
|
||||
/doc/guix*.info-[0-9]
|
||||
/doc/guix*.info-[0-9][0-9]
|
||||
/doc/guix*.ky
|
||||
/doc/guix*.pg
|
||||
/doc/guix*.toc
|
||||
/doc/guix*.t2p
|
||||
/doc/guix*.tp
|
||||
/doc/guix*.vr
|
||||
/doc/guix*.vrs
|
||||
/doc/guix.*.texi
|
||||
/doc/guix-cookbook.*.texi
|
||||
/doc/guix.*.aux
|
||||
/doc/guix.*.cp
|
||||
/doc/guix.*.cps
|
||||
/doc/guix.*.fn
|
||||
/doc/guix.*.fns
|
||||
/doc/guix.*.html
|
||||
/doc/guix.*.info
|
||||
/doc/guix.*.info-[0-9]
|
||||
/doc/guix.*.ky
|
||||
/doc/guix.*.pg
|
||||
/doc/guix.*.toc
|
||||
/doc/guix.*.t2p
|
||||
/doc/guix.*.tp
|
||||
/doc/guix.*.vr
|
||||
/doc/guix.*.vrs
|
||||
/doc/guix.aux
|
||||
/doc/guix.cp
|
||||
/doc/guix.cps
|
||||
@@ -68,19 +63,12 @@
|
||||
/doc/stamp-vti
|
||||
/doc/version.texi
|
||||
/doc/version-*.texi
|
||||
/etc/apparmor.d/tunables/guix
|
||||
/etc/committer.scm
|
||||
/etc/gnu-store.mount
|
||||
/etc/guix-daemon.cil
|
||||
/etc/guix-daemon.conf
|
||||
/etc/guix-daemon.service
|
||||
/etc/guix-publish.conf
|
||||
/etc/guix-publish.service
|
||||
/etc/guix-gc.service
|
||||
/etc/guix-gc.timer
|
||||
/etc/init.d/guix-daemon
|
||||
/etc/openrc/guix-daemon
|
||||
/guix-*
|
||||
/guix-daemon
|
||||
/guix/config.scm
|
||||
/libformat.a
|
||||
/libstore.a
|
||||
@@ -95,10 +83,18 @@
|
||||
/m4/nls.m4
|
||||
/m4/po.m4
|
||||
/m4/progtest.m4
|
||||
/nix-setuid-helper
|
||||
/nix/AUTHORS
|
||||
/nix/COPYING
|
||||
/nix/config.h
|
||||
/nix/config.h.in
|
||||
/nix/nix-daemon/nix-daemon.cc
|
||||
/nix/nix-setuid-helper/nix-setuid-helper.cc
|
||||
/nix/scripts/authenticate
|
||||
/nix/scripts/list-runtime-roots
|
||||
/nix/scripts/offload
|
||||
/nix/scripts/substitute
|
||||
/po/doc/*.mo
|
||||
/po/doc/*.pot
|
||||
/po/guix/*.gmo
|
||||
/po/guix/*.insert-header
|
||||
/po/guix/*.mo
|
||||
@@ -134,12 +130,10 @@
|
||||
/po/packages/remove-potcdate.sin
|
||||
/po/packages/stamp-po
|
||||
/pre-inst-env
|
||||
/release-*
|
||||
/scripts/guix
|
||||
/t-*/
|
||||
/test-env
|
||||
/test-tmp
|
||||
/tests/**/*.trs
|
||||
/tests/*.trs
|
||||
GPATH
|
||||
GRTAGS
|
||||
GTAGS
|
||||
@@ -147,17 +141,9 @@ Makefile
|
||||
Makefile.in
|
||||
config.cache
|
||||
stamp-h[0-9]
|
||||
.am[0-9]*/
|
||||
.dirstamp
|
||||
.deps
|
||||
tmp
|
||||
/doc/os-config-lightweight-desktop.texi
|
||||
/nix/scripts/download
|
||||
/.tarball-version
|
||||
/etc/indent-code.el
|
||||
/.version
|
||||
/doc/stamp-*
|
||||
/gnu/packages/bootstrap
|
||||
/gnu/packages/aux-files/guile-guile-launcher.o
|
||||
/guile
|
||||
.DS_Store
|
||||
.mumi/current-issue
|
||||
/doc/stamp-[0-9]
|
||||
|
||||
@@ -1,131 +0,0 @@
|
||||
;; This file, which is best viewed as -*- Scheme -*-, lists the OpenPGP keys
|
||||
;; currently authorized to sign commits in this repository.
|
||||
|
||||
(authorizations
|
||||
(version 0)
|
||||
|
||||
(;; primary: "D963 A5A3 8A80 3D52 4461 F914 7483 0A27 6C32 8EC2"
|
||||
("2841 9AC6 5038 7440 C7E9 2FFA 2208 D209 58C1 DEB0"
|
||||
(name "abcdw"))
|
||||
("AD17 A21E F8AE D8F1 CC02 DBD9 F7D5 C9BF 765C 61E3"
|
||||
(name "andreas"))
|
||||
("27D5 86A4 F890 0854 329F F09F 1260 E464 82E6 3562"
|
||||
(name "apteryx"))
|
||||
("7F73 0343 F2F0 9F3C 77BF 79D3 2E25 EE8B 6180 2BB3"
|
||||
(name "arunisaac"))
|
||||
( ;; primary: "D0C2 EAC1 3310 822D 98DE B57C E9C5 A2D9 0898 A02F"
|
||||
"01FD 85F4 1A7B 7F82 0583 06A5 935E BE07 36DC 857E"
|
||||
(name "avp"))
|
||||
("5D54 CF25 57B2 38E8 8DC1 80A2 2D22 3241 0AB7 4043"
|
||||
(name "baleine"))
|
||||
( ;; primary: "34FF 38BC D151 25A6 E340 A0B5 3453 2F9F AFCA 8B8E"
|
||||
"A3A4 B419 0074 087C A7DE 5698 BC45 CA67 E2F8 D007"
|
||||
(name "bavier"))
|
||||
("3E89 EEE7 458E 720D 9754 E0B2 5E28 A33B 0B84 F577"
|
||||
(name "cbaines"))
|
||||
("3CE4 6455 8A84 FDC6 9DB4 0CFB 090B 1199 3D9A EBB5"
|
||||
(name "civodul"))
|
||||
("838A FE0D 55DC 074E 360F 943A 84B6 9CE6 F3F6 B767"
|
||||
(name "cnx"))
|
||||
("CCB8 1842 F9D7 058E CD67 377A BF5C DF4D F6BF 6682"
|
||||
(name "csantosb"))
|
||||
("510A 8628 E2A7 7678 8F8C 709C 4BC0 2592 5FF8 F4D3"
|
||||
(name "cwebber"))
|
||||
(;; primary: "295A F991 6F46 F8A1 34B0 29DA 8086 3842 F0FE D83B"
|
||||
"76CE C6B1 7274 B465 C02D B3D9 E71A 3554 2C30 BAA5"
|
||||
(name "dannym"))
|
||||
("8CCB A7F5 52B9 CBEA E1FB 2915 8328 C747 0FF1 D807"
|
||||
(name "dthompson"))
|
||||
("A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351"
|
||||
(name "efraim"))
|
||||
("5DBE 23D3 9053 6526 7F8C C76A FDB9 52BD 3F73 56D6"
|
||||
(name "ekaitz"))
|
||||
("50E1 7BE0 D210 C883 D675 3150 4A3D 07EF D05C 4045"
|
||||
(name "fishinthecalculator"))
|
||||
(;; primary: "D1BD 1EB7 B655 AECE 0BA7 8F94 4940 7E7E 89CA 9B07"
|
||||
"0807 AC76 DFE8 4303 6D5F 5879 F51D 4A16 DCEE 6FA7"
|
||||
(name "futurile"))
|
||||
("E426 7CD1 FC3E E959 7F07 42F9 CC98 E9F0 4330 FD7F"
|
||||
(name "gabber"))
|
||||
(;; primary: "2453 02B1 BAB1 F867 FDCA 96BC 8F3F 861F 82EB 7A9A"
|
||||
"CBC5 9C66 EC27 B971 7940 6B3E 6BE8 208A DF21 FE3F"
|
||||
(name "glv"))
|
||||
(;; primary: "220F 98D9 5E86 204C 0036 DA7B 6DEC 4360 408B 4185"
|
||||
"F4C2 D1DF 3FDE EA63 D1D3 0776 ACC6 6D09 CA52 8292"
|
||||
(name "hako"))
|
||||
("3D58 BE78 5C1B E400 E214 0755 43F4 B499 3A1F 9D20"
|
||||
(name "htgoebel"))
|
||||
( ;; primary: "FECD 9EBA FAAD 1831 7E05 DAC0 E55F 4198 D2A7 0CD7"
|
||||
"6980 A9B9 5202 AA11 EB1D 8922 8499 AC88 F1A7 1CF2"
|
||||
(name "ieure"))
|
||||
(;; primary: "66A5 6D9C 9A98 BE7F 719A B401 2652 5665 AE72 7D37"
|
||||
"0325 78A6 8298 94E7 2AA2 66F5 D415 BF25 3B51 5976"
|
||||
(name "iyzsong"))
|
||||
("1A85 8392 E331 EAFD B8C2 7FFB F3C1 A0D9 C1D6 5273"
|
||||
(name "janneke"))
|
||||
("3B1D 7F19 E36B B60C 0F5B 2CA9 A52A A2B4 77B6 DD35"
|
||||
(name "jgart"))
|
||||
(;; primary: "1BA4 08C5 8BF2 0EA7 3179 635A 865D C0A3 DED9 B5D0"
|
||||
"E31D 9DDE EBA5 4A14 8A20 4550 DA45 97F9 47B4 1025"
|
||||
(name "jlicht"))
|
||||
("8141 6036 E81A 5CF7 8F80 1071 ECFC 8398 8B4E 4B9F"
|
||||
(name "jonsger"))
|
||||
("3924 8CD8 41C6 3CC3 36DC AF2F 505E 40B9 1617 1A8A"
|
||||
(name "jpoiret"))
|
||||
("017D 74E2 7F58 5696 3801 781D F663 943E 08D8 092A"
|
||||
(name "lbraun"))
|
||||
("ACC2 3BA0 59F7 CCF4 08F0 43AD 442A 84B8 C70E 2F87"
|
||||
(name "lilyp"))
|
||||
("6840 722E EEE4 D3A6 4EE5 3EAC 6AAC 1963 757F 47FF"
|
||||
(name "lfam"))
|
||||
("D919 0965 CE03 199E AF28 B3BE 7CEF 2984 7562 C516"
|
||||
(name "mhw"))
|
||||
("B845 5B7F FAD5 E8E9 5DEF 4296 637B 0B13 8065 B68A"
|
||||
(name "monego"))
|
||||
("4008 6A7E 0252 9B60 31FB 8607 8354 7635 3176 9CA6"
|
||||
(name "mothacehe"))
|
||||
(;; primary: "F5BC 5534 C36F 0087 B39D 36EF 1C9D C4FE B9DB 7C4B"
|
||||
"F5DA 2032 4B87 3D0B 7A38 7672 0DB0 FF88 4F55 6D79"
|
||||
(name "nckx"))
|
||||
("ED0E F1C8 E126 BA83 1B48 5FE9 DA00 B4F0 48E9 2F2D"
|
||||
(name "ngz"))
|
||||
("514E 833A 8861 1207 4F98 F68A E447 3B6A 9C05 755D"
|
||||
(name "nmeum"))
|
||||
("002A AAA3 4208 F3F2 BBD7 CE14 EF6E B274 13CF EEF3"
|
||||
(name "oom"))
|
||||
("CEF4 CB91 4856 BA38 0A20 A7E2 3008 88CB 39C6 3817"
|
||||
(name "pelzflorian"))
|
||||
(;; primary: "7E9F 5BF6 1680 4367 127B 7A87 F9E6 9FB8 5A75 54F1"
|
||||
"A420 7B56 C255 109F 2CB3 157E 4990 97AE 5EA8 15D9"
|
||||
(name "podiki"))
|
||||
("BCA6 89B6 3655 3801 C3C6 2150 197A 5888 235F ACAC"
|
||||
(name "rekado"))
|
||||
(;; From commit cc51c03ff867d4633505354819c6d88af88bf919 (March 2020).
|
||||
;; See <https://lists.gnu.org/archive/html/guix-devel/2020-03/msg00070.html>.
|
||||
"F556 FD94 FB8F 8B87 79E3 6832 CBD0 CD51 38C1 9AFC"
|
||||
(name "roelj"))
|
||||
(;; From commit 2cbede5935eb6a40173bbdf30a9ad22bf7574c22 (Jan. 2020). See
|
||||
;; <https://lists.gnu.org/archive/html/guix-devel/2020-01/msg00499.html>.
|
||||
"1EFB 0909 1F17 D28C CBF9 B13A 53D4 57B2 D636 EE82"
|
||||
(name "roptat"))
|
||||
(;; primary: "3AC5 5D0E 1DA7 AF44 3868 11EE 213D C372 0E7A 023C"
|
||||
"6B51 071A 0FB1 52AD ED93 6360 0322 7982 69E4 71C3"
|
||||
(name "Rutherther"))
|
||||
("EAD1 89E4 799B 5E5E B20A 2A19 CDBC 0BD9 5943 A706"
|
||||
(name "SameExpert"))
|
||||
(;; primary: "D6B0 C593 DA8C 5EDC A44C 7A58 C336 91F7 1188 B004"
|
||||
"A02C 2D82 0EF4 B25B A6B5 1D90 2AC6 A5EC 1C35 7C59"
|
||||
(name "samplet"))
|
||||
("9847 81DE 689C 21C2 6418 0867 76D7 27BF F62C D2B5"
|
||||
(name "sharlatan"))
|
||||
("F494 72F4 7A59 00D5 C235 F212 89F9 6D48 08F3 59C7"
|
||||
(name "snape"))
|
||||
("6580 7361 3BFC C5C7 E2E4 5D45 DC51 8FC8 7F97 16AA"
|
||||
(name "vagrantc"))
|
||||
(;; primary: "C955 CC5D C048 7FB1 7966 40A9 199A F6A3 67E9 4ABB"
|
||||
"7238 7123 8EAC EB63 4548 5857 167F 8EA5 001A FA9C"
|
||||
(name "wigust"))
|
||||
("7EBE A494 60CE 5E2C 0875 7FDB 3B5A A993 E1A2 DFF0"
|
||||
(name "z572"))
|
||||
("705A 29B7 01EE 410E B6F9 236E 92F1 D22C 608E E7E5"
|
||||
(name "zimoun"))))
|
||||
@@ -1,7 +0,0 @@
|
||||
;; This is a Guix channel.
|
||||
|
||||
(channel
|
||||
(version 0)
|
||||
(news-file "etc/news.scm")
|
||||
(keyring-reference "keyring")
|
||||
(url "https://git.guix.gnu.org/guix.git")) ;the primary URL
|
||||
@@ -6,7 +6,6 @@ Al McElrath <hello@yrns.org> <hello@atonesir.com>
|
||||
Alex Sassmannshausen <alex@pompo.co> <alex.sassmannshausen@gmail.com>
|
||||
Alexander I. Grafov <grafov@gmail.com>
|
||||
Alírio Eyng <alirioeyng@gmail.com>
|
||||
Amin Bandali <bandali@gnu.org> <mab@gnu.org>
|
||||
Amirouche Boubekki <amirouche@hypermove.net>
|
||||
Andreas Enge <andreas@enge.fr> <andreas.enge@inria.fr>
|
||||
Andreas Enge <andreas@enge.fr> <privat@xobs-novena>
|
||||
@@ -14,8 +13,6 @@ Andy Wingo <wingo@igalia.com> <wingo@pobox.com>
|
||||
Ben Woodcroft <donttrustben@gmail.com>
|
||||
Ben Woodcroft <donttrustben@gmail.com> <b.woodcroft@uq.edu.au>
|
||||
Ben Woodcroft <donttrustben@gmail.com> <donttrustben near gmail.com>
|
||||
Brett Gilio <brettg@gnu.org> <brettg@posteo.net>
|
||||
Christine Lemmer-Webber <cwebber@dustycloud.org>
|
||||
Claes Wallin (韋嘉誠) <claes.wallin@greatsinodevelopment.com>
|
||||
Cyprien Nicolas <cyprien@nicolas.tf> <c.nicolas+gitorious@gmail.com>
|
||||
Daniel Pimentel <d4n1@d4n1.org> <d4n1@member.fsf.org>
|
||||
@@ -25,15 +22,10 @@ David Thompson <davet@gnu.org> <dthompson2@worcester.edu>
|
||||
David Thompson <davet@gnu.org> <dthompson@member.fsf.org>
|
||||
David Thompson <davet@gnu.org> <dthompson@vistahigherlearning.com>
|
||||
Deck Pickard <deck.r.pickard@gmail.com> <nebu@kipple>
|
||||
Eric Bavier <bavier@posteo.net> <ericbavier@gmail.com>
|
||||
Eric Bavier <bavier@posteo.net> <bavier@member.fsf.org>
|
||||
Eric Bavier <bavier@member.fsf.org> <ericbavier@gmail.com>
|
||||
Eric Dvorsak <eric@dvorsak.fr> <yenda1@gmail.com>
|
||||
Evgeny Pisemsky <mail@pisemsky.site> <evgeny@pisemsky.com>
|
||||
George Clemmer <myglc2@gmail.com>
|
||||
Giacomo Leidi <therewasa@fishinthecalculator.me> <goodoldpaul@autistici.org>
|
||||
ison <ison@airmail.cc> <ison111@protonmail.com>
|
||||
Ivan Vilata i Balaguer <ivan@selidor.net>
|
||||
Jakob L. Kreuze <zerodaysfordays@sdf.org> <zerodaysfordays@sdf.lonestar.org>
|
||||
Jeff Mickey <j@codemac.net> <jm@igneous.io>
|
||||
John Darrington <jmd@gnu.org> <john@darrington.wattle.id.au>
|
||||
John J. Foerch <jjfoerch@earthlink.net>
|
||||
@@ -41,41 +33,29 @@ Joshua Grant <tadni@riseup.net> <gzg@riseup.net>
|
||||
Joshua Grant <tadni@riseup.net> <jgrant@parenthetical.io>
|
||||
Joshua Grant <tadni@riseup.net> <tadnimi@gmail.com>
|
||||
Joshua Grant <tadni@riseup.net> <youlysses@riseup.net>
|
||||
Juliana Sims <juli@incana.org> <jtsims@protonmail.com>
|
||||
Kei Kebreau <kkebreau@posteo.net>
|
||||
Kei Kebreau <kei@openmailbox.org> <kkebreau@posteo.net>
|
||||
Leo Famulari <leo@famulari.name> <lfamular@gmail.com>
|
||||
Liliana Marie Prikler <liliana.prikler@gmail.com>
|
||||
Liliana Marie Prikler <liliana.prikler@gmail.com> Leo Prikler <leo.prikler@student.tugraz.at>
|
||||
Ludovic Courtès <ludo@gnu.org> <ludovic.courtes@inria.fr>
|
||||
Marek Benc <dusxmt@gmx.com> <merkur32@gmail.com>
|
||||
Marius Bakke <marius@gnu.org> <mbakke@fastmail.com>
|
||||
Marius Bakke <marius@gnu.org> <m.bakke@warwick.ac.uk>
|
||||
Marius Bakke <marius@gnu.org> <marius.bakke@usit.uio.no>
|
||||
Marius Bakke <marius@gnu.org> <mbakke@berlin.guixsd.org>
|
||||
Marius Bakke <mbakke@fastmail.com> <m.bakke@warwick.ac.uk>
|
||||
Mathieu Lirzin <mthl@gnu.org> <mthl@openmailbox.org>
|
||||
Mathieu Lirzin <mthl@gnu.org> <mathieu.lirzin@openmailbox.org>
|
||||
Mathieu Othacehe <m.othacehe@gmail.com>
|
||||
Mathieu Othacehe <mathieu.othacehe@parrot.com>
|
||||
Mathieu Othacehe <othacehe@gnu.org>
|
||||
Matthew James Kraai <kraai@ftbfs.org>
|
||||
Maxim Cournoyer <maxim@guixotic.coop> <maxim.cournoyer@gmail.com>
|
||||
Nguyễn Gia Phong <cnx@loang.net> <mcsinyx@disroot.org>
|
||||
Nikita Karetnikov <nikita@karetnikov.org> <nikita.karetnikov@gmail.com>
|
||||
nikita <nikita@n0.is>
|
||||
nikita <nikita@n0.is> ng0 <ng0@n0.is>
|
||||
nikita <nikita@n0.is> Nils Gillmann <ng0@n0.is>
|
||||
nikita <nikita@n0.is> Nils Gillmann <gillmann@infotropique.org>
|
||||
nikita <nikita@n0.is> ng0 <ng0@crash.cx>
|
||||
nikita <nikita@n0.is> <ng0@infotropique.org>
|
||||
nikita <nikita@n0.is> <ng0@no-reply.infotropique.org>
|
||||
nikita <nikita@n0.is> <ng0@no-reply.pragmatique.xyz>
|
||||
nikita <nikita@n0.is> <ng0@pragmatique.xyz>
|
||||
nikita <nikita@n0.is> <contact.ng0@cryptolab.net>
|
||||
nikita <nikita@n0.is> <ng0@we.make.ritual.n0.is>
|
||||
nikita <nikita@n0.is> <ngillmann@runbox.com>
|
||||
nikita <nikita@n0.is> <niasterisk@grrlz.net>
|
||||
nikita <nikita@n0.is> <ng@niasterisk.space>
|
||||
nikita <nikita@n0.is> <ng0@libertad.pw>
|
||||
Nils Gillmann <ng0@n0.is> ng0 <ng0@n0.is>
|
||||
Nils Gillmann <ng0@n0.is> Nils Gillmann <gillmann@infotropique.org>
|
||||
Nils Gillmann <ng0@n0.is> ng0 <ng0@crash.cx>
|
||||
Nils Gillmann <ng0@n0.is> ng0 <ng0@crash.cx>
|
||||
Nils Gillmann <ng0@n0.is> <ng0@infotropique.org>
|
||||
Nils Gillmann <ng0@n0.is> <ng0@no-reply.infotropique.org>
|
||||
Nils Gillmann <ng0@n0.is> <ng0@no-reply.pragmatique.xyz>
|
||||
Nils Gillmann <ng0@n0.is> <ng0@pragmatique.xyz>
|
||||
Nils Gillmann <ng0@n0.is> <contact.ng0@cryptolab.net>
|
||||
Nils Gillmann <ng0@n0.is> <ng0@we.make.ritual.n0.is>
|
||||
Nils Gillmann <ng0@n0.is> <ngillmann@runbox.com>
|
||||
Nils Gillmann <ng0@n0.is> <niasterisk@grrlz.net>
|
||||
Nils Gillmann <ng0@n0.is> <ng@niasterisk.space>
|
||||
Nils Gillmann <ng0@n0.is> <ng0@libertad.pw>
|
||||
Pierre Neidhardt <mail@ambrevar.xyz>
|
||||
Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr>
|
||||
Pjotr Prins <pjotr.guix@thebird.nl> <pjotr.public01@thebird.nl>
|
||||
@@ -87,16 +67,12 @@ Raymond Nicholson <rain1@openmailbox.org>
|
||||
Rene Saavedra <rennes@openmailbox.org>
|
||||
Ricardo Wurmus <rekado@elephly.net>
|
||||
Ricardo Wurmus <rekado@elephly.net> <ricardo.wurmus@mdc-berlin.de>
|
||||
宋文武 <iyzsong@envs.net> <iyzsong@gmail.com>
|
||||
宋文武 <iyzsong@envs.net> <iyzsong@member.fsf.org>
|
||||
Sou Bunnbu (宋文武) <iyzsong@gmail.com>
|
||||
Sou Bunnbu (宋文武) <iyzsong@gmail.com> <iyzsong@member.fsf.org>
|
||||
Stefan Reichör <stefan@xsteve.at>
|
||||
Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
|
||||
Theodoros Foradis <theodoros.for@openmailbox.org> <theodoros@foradis.org>
|
||||
Thomas Danckaert <thomas.danckaert@gmail.com> <post@thomasdanckaert.be>
|
||||
Tobias Geerinckx-Rice <me@tobias.gr> <tobias.geerinckx.rice@gmail.com>
|
||||
Tomas Volf <~@wolfsden.cz> <wolf@wolfsden.cz>
|
||||
Tomáš Čech <sleep_walker@gnu.org> <sleep_walker@suse.cz>
|
||||
Vincent Legoll <vincent.legoll@gmail.com> <vincent.legoll@idgrilles.fr>
|
||||
Zheng Junjie <873216071@qq.com> Z572 <873216071@qq.com>
|
||||
Zheng Junjie <873216071@qq.com> Zheng Junjie <zhengjunjie@iscas.ac.cn>
|
||||
Zheng Junjie <873216071@qq.com> Zheng junjie <873216071@qq.com>
|
||||
@@ -1,3 +0,0 @@
|
||||
((debbugs-host . "debbugs.gnu.org")
|
||||
(patch-email-address . "guix-patches@gnu.org")
|
||||
(mumi-host . "issues.guix.gnu.org"))
|
||||
@@ -1,11 +0,0 @@
|
||||
# This config file allows for Patchwork integration with
|
||||
# https://patches.guix-patches.cbaines.net/.
|
||||
|
||||
[settings]
|
||||
project: guix-patches
|
||||
patchwork_url: https://patches.guix-patches.cbaines.net
|
||||
add_signoff: False
|
||||
# TODO: enable check_patch
|
||||
check_patch: False
|
||||
ignore_bad_tags: True
|
||||
keep_change_id: True
|
||||
+66
-91
@@ -1,103 +1,78 @@
|
||||
Important: to avoid polarizing/hurtful discussions in our public spaces, any
|
||||
matter pertaining to our use of this Code of Conduct should be brought
|
||||
privately to the Guix maintainers at guix-maintainers@gnu.org. Failure to do
|
||||
so will be considered as a violation of this Code of Conduct.
|
||||
|
||||
Contributor Covenant Code of Conduct
|
||||
|
||||
Note: In the sequel, "project" refers to GNU Guix, and "project
|
||||
maintainer(s)" refers to maintainer(s) of GNU Guix.
|
||||
|
||||
Our Pledge
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, caste, color, religion, or sexual
|
||||
identity and orientation.
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, gender identity and expression, level of experience,
|
||||
education, socio-economic status, nationality, personal appearance, race,
|
||||
religion, or sexual identity and orientation.
|
||||
|
||||
Our Standards
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the overall
|
||||
community
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or advances of
|
||||
any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others’ private information, such as a physical or email address,
|
||||
without their explicit permission
|
||||
* Publishing others’ private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
Enforcement Responsibilities
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
Scope
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
Enforcement
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
guix-maintainers@gnu.org.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
Enforcement Guidelines
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
1. Correction
|
||||
Community Impact: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
Consequence: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
2. Warning
|
||||
Community Impact: A violation through a single incident or series of
|
||||
actions.
|
||||
Consequence: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or permanent
|
||||
ban.
|
||||
3. Temporary Ban
|
||||
Community Impact: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
Consequence: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
4. Permanent Ban
|
||||
Community Impact: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
Consequence: A permanent ban from any sort of public interaction within the
|
||||
community.
|
||||
Attribution
|
||||
This Code of Conduct is adapted from the Contributor Covenant,
|
||||
version 2.1, available at
|
||||
https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
|
||||
Community Impact Guidelines were inspired by
|
||||
Mozilla’s code of conduct enforcement ladder.
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
https://www.contributor-covenant.org/faq. Translations are available at
|
||||
https://www.contributor-covenant.org/translations.
|
||||
|
||||
Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at guix-maintainers@gnu.org. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project’s leadership.
|
||||
|
||||
Attribution
|
||||
|
||||
This Code of Conduct is adapted from the Contributor Covenant, version 1.4,
|
||||
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||
|
||||
-507
@@ -1,507 +0,0 @@
|
||||
# This -*- conf -*- file was generated by './etc/teams.scm codeowners'.
|
||||
#
|
||||
# It describes the expected reviewers for a pull request based on the
|
||||
# changed files. Unlike what the name of the file suggests they don't
|
||||
# own the code (ownership is collective in this house!) but merely have
|
||||
# a good understanding of that area of the codebase and therefore are
|
||||
# usually suited as a reviewer.
|
||||
|
||||
gnu/packages/machine-learning\.scm @guix/ai
|
||||
|
||||
gnu/packages/audio\.scm @guix/audio
|
||||
gnu/packages/fluidplug\.scm @guix/audio
|
||||
gnu/packages/music\.scm @guix/audio
|
||||
gnu/packages/xiph\.scm @guix/audio
|
||||
|
||||
gnu/packages/elixir(-.+|)\.scm$ @guix/beam
|
||||
guix/build/mix-build-system\.scm @guix/beam
|
||||
guix/build-system/mix\.scm @guix/beam
|
||||
gnu/packages/erlang(-.+|)\.scm$ @guix/beam
|
||||
guix/build/rebar-build-system\.scm @guix/beam
|
||||
guix/build-system/rebar\.scm @guix/beam
|
||||
guix/import/hexpm\.scm @guix/beam
|
||||
guix/scripts/import/hexpm\.scm @guix/beam
|
||||
|
||||
gnu/packages/bioinformatics\.scm @guix/bioinformatics
|
||||
|
||||
gnu/packages/bootstrap\.scm @guix/bootstrap
|
||||
gnu/packages/commencement\.scm @guix/bootstrap
|
||||
gnu/packages/mes\.scm @guix/bootstrap
|
||||
|
||||
gnu/packages/assembly\.scm @guix/build-tools
|
||||
gnu/packages/autogen\.scm @guix/build-tools
|
||||
gnu/packages/autotools\.scm @guix/build-tools
|
||||
gnu/packages/bison\.scm @guix/build-tools
|
||||
gnu/packages/compiler-tools\.scm @guix/build-tools
|
||||
gnu/packages/m4\.scm @guix/build-tools
|
||||
gnu/packages/oyacc\.scm @guix/build-tools
|
||||
gnu/packages/re2c\.scm @guix/build-tools
|
||||
|
||||
gnu/build-system/cmake\.scm @guix/cpp
|
||||
gnu/build/cmake-build-system\.scm @guix/cpp
|
||||
gnu/packages/c\.scm @guix/cpp
|
||||
gnu/packages/cmake\.scm @guix/cpp
|
||||
gnu/packages/cpp\.scm @guix/cpp
|
||||
gnu/packages/ninja\.scm @guix/cpp
|
||||
gnu/packages/valgrind\.scm @guix/cpp
|
||||
|
||||
etc/teams\.scm @guix/core
|
||||
guix/avahi\.scm @guix/core
|
||||
guix/base16\.scm @guix/core
|
||||
guix/base32\.scm @guix/core
|
||||
guix/base64\.scm @guix/core
|
||||
guix/bzr-download\.scm @guix/core
|
||||
guix/cache\.scm @guix/core
|
||||
guix/channels\.scm @guix/core
|
||||
guix/ci\.scm @guix/core
|
||||
guix/colors\.scm @guix/core
|
||||
guix/combinators\.scm @guix/core
|
||||
guix/config\.scm @guix/core
|
||||
guix/cpio\.scm @guix/core
|
||||
guix/cpu\.scm @guix/core
|
||||
guix/cve\.scm @guix/core
|
||||
guix/cvs-download\.scm @guix/core
|
||||
guix/deprecation\.scm @guix/core
|
||||
guix/derivations\.scm @guix/core
|
||||
guix/describe\.scm @guix/core
|
||||
guix/diagnostics\.scm @guix/core
|
||||
guix/discovery\.scm @guix/core
|
||||
guix/docker\.scm @guix/core
|
||||
guix/download\.scm @guix/core
|
||||
guix/elf\.scm @guix/core
|
||||
guix/fossil-download\.scm @guix/core
|
||||
guix/ftp-client\.scm @guix/core
|
||||
guix/gexp\.scm @guix/core
|
||||
guix/git-authenticate\.scm @guix/core
|
||||
guix/git-download\.scm @guix/core
|
||||
guix/git\.scm @guix/core
|
||||
guix/glob\.scm @guix/core
|
||||
guix/gnu-maintenance\.scm @guix/core
|
||||
guix/gnupg\.scm @guix/core
|
||||
guix/grafts\.scm @guix/core
|
||||
guix/graph\.scm @guix/core
|
||||
guix/hash\.scm @guix/core
|
||||
guix/hg-download\.scm @guix/core
|
||||
guix/http-client\.scm @guix/core
|
||||
guix/i18n\.scm @guix/core
|
||||
guix/inferior\.scm @guix/core
|
||||
guix/ipfs\.scm @guix/core
|
||||
guix/least-authority\.scm @guix/core
|
||||
guix/licenses\.scm @guix/core
|
||||
guix/lint\.scm @guix/core
|
||||
guix/man-db\.scm @guix/core
|
||||
guix/memoization\.scm @guix/core
|
||||
guix/modules\.scm @guix/core
|
||||
guix/monad-repl\.scm @guix/core
|
||||
guix/monads\.scm @guix/core
|
||||
guix/narinfo\.scm @guix/core
|
||||
guix/nar\.scm @guix/core
|
||||
guix/openpgp\.scm @guix/core
|
||||
guix/packages\.scm @guix/core
|
||||
guix/pki\.scm @guix/core
|
||||
guix/platform\.scm @guix/core
|
||||
guix/profiles\.scm @guix/core
|
||||
guix/profiling\.scm @guix/core
|
||||
guix/progress\.scm @guix/core
|
||||
guix/quirks\.scm @guix/core
|
||||
guix/read-print\.scm @guix/core
|
||||
guix/records\.scm @guix/core
|
||||
guix/remote\.scm @guix/core
|
||||
guix/remote-procedures\.scm @guix/core
|
||||
guix/repl\.scm @guix/core
|
||||
guix/search-paths\.scm @guix/core
|
||||
guix/self\.scm @guix/core
|
||||
guix/serialization\.scm @guix/core
|
||||
guix/sets\.scm @guix/core
|
||||
guix/ssh\.scm @guix/core
|
||||
guix/status\.scm @guix/core
|
||||
guix/store\.scm @guix/core
|
||||
guix/substitutes\.scm @guix/core
|
||||
guix/svn-download\.scm @guix/core
|
||||
guix/swh\.scm @guix/core
|
||||
guix/tests\.scm @guix/core
|
||||
guix/transformations\.scm @guix/core
|
||||
guix/ui\.scm @guix/core
|
||||
guix/upstream\.scm @guix/core
|
||||
guix/utils\.scm @guix/core
|
||||
guix/workers\.scm @guix/core
|
||||
guix/platforms/ @guix/core
|
||||
guix/scripts/ @guix/core
|
||||
guix/store/ @guix/core
|
||||
nix/ @guix/core
|
||||
|
||||
gnu/packages/base\.scm @guix/core-packages
|
||||
gnu/packages/bootstrap\.scm @guix/core-packages
|
||||
gnu/packages/commencement\.scm @guix/core-packages
|
||||
gnu/packages/cross-base\.scm @guix/core-packages
|
||||
gnu/packages/gcc\.scm @guix/core-packages
|
||||
gnu/packages/guile\.scm @guix/core-packages
|
||||
gnu/packages/ld-wrapper\.in @guix/core-packages
|
||||
gnu/packages/make-bootstrap\.scm @guix/core-packages
|
||||
gnu/packages/multiprecision\.scm @guix/core-packages
|
||||
guix/build/gnu-build-system\.scm @guix/core-packages
|
||||
guix/build/utils\.scm @guix/core-packages
|
||||
guix/build-system/gnu\.scm @guix/core-packages
|
||||
|
||||
gnu/packages/(.*-|)crypto\.scm$ @guix/crypto
|
||||
gnu/packages/cryptsetup\.scm @guix/crypto
|
||||
gnu/packages/cybersecurity\.scm @guix/crypto
|
||||
gnu/packages/gnupg\.scm @guix/crypto
|
||||
gnu/packages/nettle\.scm @guix/crypto
|
||||
gnu/packages/password-utils\.scm @guix/crypto
|
||||
gnu/packages/security-token\.scm @guix/crypto
|
||||
gnu/packages/ssh\.scm @guix/crypto
|
||||
gnu/packages/tls\.scm @guix/crypto
|
||||
gnu/packages/vpn\.scm @guix/crypto
|
||||
|
||||
gnu/packages/debian\.scm @guix/debian
|
||||
|
||||
\.texi$ @guix/documentation
|
||||
doc/build\.scm @guix/documentation
|
||||
gnu/system/examples/bare-bones\.tmpl @guix/documentation
|
||||
gnu/system/examples/lightweight-desktop\.tmpl @guix/documentation
|
||||
gnu/system/examples/desktop\.tmpl @guix/documentation
|
||||
|
||||
gnu/packages/dotnet\.scm @guix/dotnet
|
||||
|
||||
gnu/packages/electronics\.scm @guix/electronics
|
||||
gnu/packages/hdl\.scm @guix/electronics
|
||||
gnu/packages/libftdi\.scm @guix/electronics
|
||||
gnu/packages/engineering\.scm @guix/electronics
|
||||
gnu/packages/flashing-tools\.scm @guix/electronics
|
||||
|
||||
gnu/packages/aux-files/emacs/guix-emacs\.el @guix/emacs
|
||||
gnu/packages/aux-files/emacs/comp-integrity\.el @guix/emacs
|
||||
gnu/packages/emacs(-.+|)\.scm$ @guix/emacs
|
||||
gnu/packages/tree-sitter\.scm @guix/emacs
|
||||
guix/build/emacs-build-system\.scm @guix/emacs
|
||||
guix/build/emacs-utils\.scm @guix/emacs
|
||||
guix/build-system/emacs\.scm @guix/emacs
|
||||
guix/import/elpa\.scm @guix/emacs
|
||||
guix/scripts/import/elpa\.scm @guix/emacs
|
||||
tests/import/elpa\.scm @guix/emacs
|
||||
|
||||
gnu/packages/bootloaders\.scm @guix/embedded
|
||||
gnu/packages/coreboot\.scm @guix/embedded
|
||||
gnu/packages/firmware\.scm @guix/embedded
|
||||
|
||||
gnu/packages/emulators\.scm @guix/games
|
||||
gnu/packages/games\.scm @guix/games
|
||||
gnu/packages/game-development\.scm @guix/games
|
||||
gnu/packages/luanti\.scm @guix/games
|
||||
gnu/packages/esolangs\.scm @guix/games
|
||||
gnu/packages/motti\.scm @guix/games
|
||||
gnu/services/games\.scm @guix/games
|
||||
gnu/tests/games\.scm @guix/games
|
||||
guix/build/luanti-build-system\.scm @guix/games
|
||||
|
||||
etc/teams/gnome @guix/gnome
|
||||
gnu/packages/glib\.scm @guix/gnome
|
||||
gnu/packages/gstreamer\.scm @guix/gnome
|
||||
gnu/packages/gtk\.scm @guix/gnome
|
||||
gnu/packages/gnome\.scm @guix/gnome
|
||||
gnu/packages/gnome-circle\.scm @guix/gnome
|
||||
gnu/packages/gnome-xyz\.scm @guix/gnome
|
||||
gnu/packages/webkit\.scm @guix/gnome
|
||||
gnu/services/desktop\.scm @guix/gnome
|
||||
guix/build/glib-or-gtk-build-system\.scm @guix/gnome
|
||||
guix/build/meson-build-system\.scm @guix/gnome
|
||||
|
||||
gnu/packages/configuration-management\.scm @guix/go
|
||||
gnu/packages/golang(-.+|)\.scm$ @guix/go
|
||||
gnu/packages/syncthing\.scm @guix/go
|
||||
gnu/packages/terraform\.scm @guix/go
|
||||
guix/build-system/go\.scm @guix/go
|
||||
guix/build/go-build-system\.scm @guix/go
|
||||
guix/import/go\.scm @guix/go
|
||||
guix/scripts/import/go\.scm @guix/go
|
||||
tests/import/go\.scm @guix/go
|
||||
|
||||
gnu/packages/guile\.scm @guix/guile
|
||||
gnu/packages/guile-wm\.scm @guix/guile
|
||||
gnu/packages/guile-xyz\.scm @guix/guile
|
||||
guix/build-system/guile\.scm @guix/guile
|
||||
guix/build/guile-build-system\.scm @guix/guile
|
||||
|
||||
gnu/packages/hare\.scm @guix/hare
|
||||
gnu/packages/hare-apps\.scm @guix/hare
|
||||
gnu/packages/hare-xyz\.scm @guix/hare
|
||||
guix/build-system/hare\.scm @guix/hare
|
||||
guix/build/hare-build-system\.scm @guix/hare
|
||||
|
||||
gnu/packages/dhall\.scm @guix/haskell
|
||||
gnu/packages/haskell(-.+|)\.scm$ @guix/haskell
|
||||
gnu/packages/purescript\.scm @guix/haskell
|
||||
guix/build/haskell-build-system\.scm @guix/haskell
|
||||
guix/build-system/haskell\.scm @guix/haskell
|
||||
guix/import/cabal\.scm @guix/haskell
|
||||
guix/import/hackage\.scm @guix/haskell
|
||||
guix/import/stackage\.scm @guix/haskell
|
||||
guix/scripts/import/hackage\.scm @guix/haskell
|
||||
|
||||
(gnu|guix/scripts)/home(\.scm$|/) @guix/home
|
||||
tests/guix-home\.sh @guix/home
|
||||
tests/home-import\.scm @guix/home
|
||||
tests/home-services\.scm @guix/home
|
||||
|
||||
gnu/packages/fabric-management\.scm @guix/hpc
|
||||
gnu/packages/mpi\.scm @guix/hpc
|
||||
gnu/packages/oneapi\.scm @guix/hpc
|
||||
gnu/packages/opencl\.scm @guix/hpc
|
||||
gnu/packages/parallel\.scm @guix/hpc
|
||||
gnu/packages/rocm\.scm @guix/hpc
|
||||
gnu/packages/rocm-tools\.scm @guix/hpc
|
||||
gnu/packages/rocm-libs\.scm @guix/hpc
|
||||
gnu/packages/sycl\.scm @guix/hpc
|
||||
gnu/packages/tbb\.scm @guix/hpc
|
||||
gnu/packages/vulkan\.scm @guix/hpc
|
||||
|
||||
gnu/system/hurd\.scm @guix/hurd
|
||||
gnu/system/images/hurd\.scm @guix/hurd
|
||||
gnu/build/hurd-boot\.scm @guix/hurd
|
||||
gnu/services/hurd\.scm @guix/hurd
|
||||
gnu/packages/hurd\.scm @guix/hurd
|
||||
|
||||
gnu/installer(\.scm$|/) @guix/installer
|
||||
|
||||
gnu/packages/clojure\.scm @guix/java
|
||||
gnu/packages/java(-.+|)\.scm$ @guix/java
|
||||
gnu/packages/maven(-.+|)\.scm$ @guix/java
|
||||
gnu/packages/netbeans\.scm @guix/java
|
||||
guix/build/ant-build-system\.scm @guix/java
|
||||
guix/build/clojure-build-system\.scm @guix/java
|
||||
guix/build/clojure-utils\.scm @guix/java
|
||||
guix/build/java-utils\.scm @guix/java
|
||||
guix/build/maven-build-system\.scm @guix/java
|
||||
guix/build/maven/ @guix/java
|
||||
guix/build-system/ant\.scm @guix/java
|
||||
guix/build-system/clojure\.scm @guix/java
|
||||
guix/build-system/maven\.scm @guix/java
|
||||
|
||||
gnu/packages/javascript\.scm @guix/javascript
|
||||
gnu/packages/node-xyz\.scm @guix/javascript
|
||||
gnu/packages/node\.scm @guix/javascript
|
||||
guix/build-system/node\.scm @guix/javascript
|
||||
guix/build/node-build-system\.scm @guix/javascript
|
||||
guix/import/npm-binary\.scm @guix/javascript
|
||||
guix/scripts/import/npm-binary\.scm @guix/javascript
|
||||
|
||||
gnu/packages/julia(-.+|)\.scm$ @guix/julia
|
||||
guix/build/julia-build-system\.scm @guix/julia
|
||||
guix/build-system/julia\.scm @guix/julia
|
||||
|
||||
gnu/packages/(kde)(-.+|)\.scm$ @guix/kde
|
||||
|
||||
gnu/build/linux-modules\.scm @guix/linux-libre
|
||||
gnu/packages/aux-files/linux-libre.*$ @guix/linux-libre
|
||||
gnu/packages/linux\.scm @guix/linux-libre
|
||||
gnu/tests/linux-modules\.scm @guix/linux-libre
|
||||
guix/build/linux-module-build-system\.scm @guix/linux-libre
|
||||
guix/build-system/linux-module\.scm @guix/linux-libre
|
||||
|
||||
gnu/packages/lisp(-.+|)\.scm$ @guix/lisp
|
||||
guix/build/asdf-build-system\.scm @guix/lisp
|
||||
guix/build/lisp-utils\.scm @guix/lisp
|
||||
guix/build-system/asdf\.scm @guix/lisp
|
||||
|
||||
gnu/packages/anthy\.scm @guix/localization
|
||||
gnu/packages/fcitx5\.scm @guix/localization
|
||||
gnu/packages/fonts\.scm @guix/localization
|
||||
gnu/packages/ibus\.scm @guix/localization
|
||||
|
||||
gnu/packages/lua\.scm @guix/lua
|
||||
gnu/packages/luanti\.scm @guix/lua
|
||||
|
||||
gnu/packages/lxqt\.scm @guix/lxqt
|
||||
|
||||
gnu/packages/mate\.scm @guix/mate
|
||||
|
||||
gnu/build/icecat-extension\.scm @guix/mozilla
|
||||
gnu/packages/browser-extensions\.scm @guix/mozilla
|
||||
gnu/packages/gnuzilla\.scm @guix/mozilla
|
||||
gnu/packages/librewolf\.scm @guix/mozilla
|
||||
gnu/packages/tor-browsers\.scm @guix/mozilla
|
||||
|
||||
gnu/packages/ocaml\.scm @guix/ocaml
|
||||
gnu/packages/coq\.scm @guix/ocaml
|
||||
gnu/packages/rocq\.scm @guix/ocaml
|
||||
guix/build/ocaml-build-system\.scm @guix/ocaml
|
||||
guix/build/dune-build-system\.scm @guix/ocaml
|
||||
guix/build-system/ocaml\.scm @guix/ocaml
|
||||
guix/build-system/dune\.scm @guix/ocaml
|
||||
guix/import/opam\.scm @guix/ocaml
|
||||
guix/scripts/import/opam\.scm @guix/ocaml
|
||||
tests/import/opam\.scm @guix/ocaml
|
||||
|
||||
gnu/packages/perl(-.+|)\.scm$ @guix/perl
|
||||
guix/build/perl-build-system\.scm @guix/perl
|
||||
guix/build/rakudo-build-system\.scm @guix/perl
|
||||
guix/build-system/perl\.scm @guix/perl
|
||||
guix/build-system/rakudo\.scm @guix/perl
|
||||
guix/import/cpan\.scm @guix/perl
|
||||
guix/scripts/import/cpan\.scm @guix/perl
|
||||
|
||||
gnu/packages/aux-files/python/.*\.py$ @guix/python
|
||||
gnu/packages/django\.scm @guix/python
|
||||
gnu/packages/jupyter\.scm @guix/python
|
||||
gnu/packages/python(-.+|)\.scm$ @guix/python
|
||||
gnu/packages/sphinx\.scm @guix/python
|
||||
gnu/packages/tryton\.scm @guix/python
|
||||
guix/build-system/pyproject\.scm @guix/python
|
||||
guix/build-system/python\.scm @guix/python
|
||||
guix/build/pyproject-build-system\.scm @guix/python
|
||||
guix/build/python-build-system\.scm @guix/python
|
||||
guix/build/toml\.scm @guix/python
|
||||
guix/import/pypi\.scm @guix/python
|
||||
guix/scripts/import/pypi\.scm @guix/python
|
||||
tests/import/pypi\.scm @guix/python
|
||||
tests/toml\.scm @guix/python
|
||||
|
||||
gnu/packages/benchmark\.scm @guix/qa-packages
|
||||
gnu/packages/check\.scm @guix/qa-packages
|
||||
gnu/packages/ci\.scm @guix/qa-packages
|
||||
gnu/packages/code\.scm @guix/qa-packages
|
||||
gnu/packages/debug\.scm @guix/qa-packages
|
||||
gnu/packages/dezyne\.scm @guix/qa-packages
|
||||
gnu/packages/libunwind\.scm @guix/qa-packages
|
||||
gnu/services/ci\.scm @guix/qa-packages
|
||||
gnu/tests/ci\.scm @guix/qa-packages
|
||||
|
||||
gnu/packages/qt\.scm @guix/qt
|
||||
guix/build-system/qt\.scm @guix/qt
|
||||
guix/build/qt-build-system\.scm @guix/qt
|
||||
guix/build/qt-utils\.scm @guix/qt
|
||||
|
||||
gnu/packages/bioconductor\.scm @guix/r
|
||||
gnu/packages/cran\.scm @guix/r
|
||||
guix/build/r-build-system\.scm @guix/r
|
||||
guix/build-system/r\.scm @guix/r
|
||||
guix/import/cran\.scm @guix/r
|
||||
guix/scripts/import/cran\.scm @guix/r
|
||||
tests/import/cran\.scm @guix/r
|
||||
|
||||
gnu/packages/chez\.scm @guix/racket
|
||||
gnu/packages/racket\.scm @guix/racket
|
||||
|
||||
NEWS @guix/release
|
||||
etc/manifests/release-minimal\.scm @guix/release
|
||||
etc/manifests/release-desktop\.scm @guix/release
|
||||
|
||||
gnu/packages/diffoscope\.scm @guix/reproduciblebuilds
|
||||
|
||||
gnu/packages/(ruby)(-.+|)\.scm$ @guix/ruby
|
||||
guix/build/ruby-build-system\.scm @guix/ruby
|
||||
guix/build-system/ruby\.scm @guix/ruby
|
||||
guix/import/gem\.scm @guix/ruby
|
||||
guix/scripts/import/gem\.scm @guix/ruby
|
||||
tests/import/gem\.scm @guix/ruby
|
||||
|
||||
gnu/packages/(crates|rust)(-.+|)\.scm$ @guix/rust
|
||||
gnu/packages/sequoia\.scm @guix/rust
|
||||
guix/build/cargo-build-system\.scm @guix/rust
|
||||
guix/build/cargo-utils\.scm @guix/rust
|
||||
guix/build-system/cargo\.scm @guix/rust
|
||||
guix/import/crate\.scm @guix/rust
|
||||
guix/import/crate/cargo-lock\.scm @guix/rust
|
||||
guix/scripts/import/crate\.scm @guix/rust
|
||||
tests/import/crate\.scm @guix/rust
|
||||
|
||||
gnu/packages/fortran(-.+|)\.scm$ @guix/science
|
||||
gnu/packages/algebra\.scm @guix/science
|
||||
gnu/packages/astronomy\.scm @guix/science
|
||||
gnu/packages/chemistry\.scm @guix/science
|
||||
gnu/packages/geo\.scm @guix/science
|
||||
gnu/packages/graph\.scm @guix/science
|
||||
gnu/packages/lean\.scm @guix/science
|
||||
gnu/packages/maths\.scm @guix/science
|
||||
gnu/packages/medical\.scm @guix/science
|
||||
gnu/packages/physics\.scm @guix/science
|
||||
gnu/packages/sagemath\.scm @guix/science
|
||||
gnu/packages/statistics\.scm @guix/science
|
||||
|
||||
gnu/packages/sugar\.scm @guix/sugar
|
||||
|
||||
gnu/packages/admin\.scm @guix/sysadmin
|
||||
gnu/packages/acl\.scm @guix/sysadmin
|
||||
gnu/packages/adns\.scm @guix/sysadmin
|
||||
gnu/packages/antivirus\.scm @guix/sysadmin
|
||||
gnu/packages/apparmor\.scm @guix/sysadmin
|
||||
gnu/packages/authentication\.scm @guix/sysadmin
|
||||
gnu/packages/cluster\.scm @guix/sysadmin
|
||||
gnu/packages/configuration-management\.scm @guix/sysadmin
|
||||
gnu/packages/databases\.scm @guix/sysadmin
|
||||
gnu/packages/distributed\.scm @guix/sysadmin
|
||||
gnu/packages/dns\.scm @guix/sysadmin
|
||||
gnu/packages/high-availability\.scm @guix/sysadmin
|
||||
gnu/packages/kerberos\.scm @guix/sysadmin
|
||||
gnu/packages/logging\.scm @guix/sysadmin
|
||||
gnu/packages/monitoring\.scm @guix/sysadmin
|
||||
gnu/packages/nfs\.scm @guix/sysadmin
|
||||
gnu/packages/openldap\.scm @guix/sysadmin
|
||||
gnu/packages/openstack\.scm @guix/sysadmin
|
||||
gnu/packages/prometheus\.scm @guix/sysadmin
|
||||
gnu/packages/rdesktop\.scm @guix/sysadmin
|
||||
gnu/packages/samba\.scm @guix/sysadmin
|
||||
gnu/packages/selinux\.scm @guix/sysadmin
|
||||
gnu/packages/storage\.scm @guix/sysadmin
|
||||
gnu/packages/task-runners\.scm @guix/sysadmin
|
||||
gnu/packages/terraform\.scm @guix/sysadmin
|
||||
gnu/packages/virtualization\.scm @guix/sysadmin
|
||||
gnu/packages/vnc\.scm @guix/sysadmin
|
||||
gnu/services/admin\.scm @guix/sysadmin
|
||||
gnu/services/authentication\.scm @guix/sysadmin
|
||||
gnu/services/databases\.scm @guix/sysadmin
|
||||
gnu/services/dns\.scm @guix/sysadmin
|
||||
gnu/services/high-availability\.scm @guix/sysadmin
|
||||
gnu/services/kerberos\.scm @guix/sysadmin
|
||||
gnu/services/monitoring\.scm @guix/sysadmin
|
||||
gnu/services/nfs\.scm @guix/sysadmin
|
||||
gnu/services/samba\.scm @guix/sysadmin
|
||||
gnu/services/virtualization\.scm @guix/sysadmin
|
||||
gnu/services/vnc\.scm @guix/sysadmin
|
||||
gnu/tests/databases\.scm @guix/sysadmin
|
||||
gnu/tests/dns\.scm @guix/sysadmin
|
||||
gnu/tests/high-availability\.scm @guix/sysadmin
|
||||
gnu/tests/monitoring\.scm @guix/sysadmin
|
||||
gnu/tests/nfs\.scm @guix/sysadmin
|
||||
gnu/tests/samba\.scm @guix/sysadmin
|
||||
gnu/tests/virtualization\.scm @guix/sysadmin
|
||||
gnu/tests/vnc\.scm @guix/sysadmin
|
||||
|
||||
gnu/build/jami-service\.scm @guix/telephony
|
||||
gnu/packages/jami\.scm @guix/telephony
|
||||
gnu/packages/linphone\.scm @guix/telephony
|
||||
gnu/packages/telephony\.scm @guix/telephony
|
||||
gnu/services/telephony\.scm @guix/telephony
|
||||
gnu/tests/data/jami-dummy-account\.dat @guix/telephony
|
||||
gnu/tests/telephony\.scm @guix/telephony
|
||||
tests/services/telephony\.scm @guix/telephony
|
||||
|
||||
gnu/packages/tex\.scm @guix/tex
|
||||
gnu/packages/texlive\.scm @guix/tex
|
||||
guix/build/texlive-build-system\.scm @guix/tex
|
||||
guix/build-system/texlive\.scm @guix/tex
|
||||
guix/import/texlive\.scm @guix/tex
|
||||
guix/scripts/import/texlive\.scm @guix/tex
|
||||
tests/import/texlive\.scm @guix/tex
|
||||
|
||||
etc/news\.scm @guix/translations
|
||||
po/ @guix/translations
|
||||
|
||||
gnu/packages/version-control\.scm @guix/vcs
|
||||
gnu/services/version-control\.scm @guix/vcs
|
||||
gnu/tests/version-control\.scm @guix/vcs
|
||||
guix/build/bzr\.scm @guix/vcs
|
||||
guix/build/cvs\.scm @guix/vcs
|
||||
guix/build/fossil\.scm @guix/vcs
|
||||
guix/build/git\.scm @guix/vcs
|
||||
guix/build/hg\.scm @guix/vcs
|
||||
guix/build/svn\.scm @guix/vcs
|
||||
|
||||
gnu/packages/xfce\.scm @guix/xfce
|
||||
|
||||
gnu/packages/zig\.scm @guix/zig
|
||||
gnu/packages/zig-xyz\.scm @guix/zig
|
||||
guix/build/zig-build-system\.scm @guix/zig
|
||||
guix/build-system/zig\.scm @guix/zig
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
#+TITLE: Hacking GNU Guix and Its Incredible Distro
|
||||
|
||||
Copyright © 2012, 2013, 2014, 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
|
||||
Copyright © 2012, 2013, 2014, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
|
||||
Copyright © 2015, 2017 Mathieu Lirzin <mthl@gnu.org>
|
||||
Copyright © 2017 Leo Famulari <leo@famulari.name>
|
||||
Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
|
||||
@@ -13,8 +13,61 @@ Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
|
||||
|
||||
* Contributing
|
||||
|
||||
See the manual for useful hacking information, either by running
|
||||
See the manual for useful hacking informations, either by running
|
||||
|
||||
info -f doc/guix.info "Contributing"
|
||||
|
||||
or by checking the [[https://guix.gnu.org/manual/devel/en/html_node/Contributing.html][web copy of the manual]].
|
||||
or by checking the [[http://www.gnu.org/software/guix/manual/guix.html#Contributing][web copy of the manual]].
|
||||
|
||||
* Commit Access
|
||||
|
||||
For frequent contributors, having write access to the repository is
|
||||
convenient. When you deem it necessary, feel free to ask for it on the
|
||||
mailing list. When you get commit access, please make sure to follow the
|
||||
policy below (discussions of the policy can take place on guix-devel@gnu.org.)
|
||||
|
||||
Non-trivial patches should always be posted to guix-patches@gnu.org (trivial
|
||||
patches include fixing typos, etc.). This mailing list fills the
|
||||
patch-tracking database at [[https://bugs.gnu.org/guix-patches]]; see
|
||||
"Contributing" in the manual for details.
|
||||
|
||||
For patches that just add a new package, and a simple one, it’s OK to commit,
|
||||
if you’re confident (which means you successfully built it in a chroot setup,
|
||||
and have done a reasonable copyright and license auditing.) Likewise for
|
||||
package upgrades, except upgrades that trigger a lot of rebuilds (for example,
|
||||
upgrading GnuTLS or GLib.) We have a mailing list for commit notifications
|
||||
(guix-commits@gnu.org), so people can notice. Before pushing your changes,
|
||||
make sure to run ‘git pull --rebase’.
|
||||
|
||||
All commits that are pushed to the central repository on Savannah must be
|
||||
signed with an OpenPGP key, and the public key should be uploaded to your user
|
||||
account on Savannah and to public key servers, such as ‘pgp.mit.edu’. To
|
||||
configure Git to automatically sign commits, run:
|
||||
|
||||
git config commit.gpgsign true
|
||||
git config user.signingkey CABBA6EA1DC0FF33
|
||||
|
||||
You can prevent yourself from accidentally pushing unsigned commits to
|
||||
Savannah by using the pre-push Git hook called located at ‘etc/git/pre-push’:
|
||||
|
||||
cp etc/git/pre-push .git/hooks/pre-push
|
||||
|
||||
When pushing a commit on behalf of somebody else, please add a Signed-off-by
|
||||
line at the end of the commit log message (e.g. with ‘git am --signoff’).
|
||||
This improves tracking of who did what.
|
||||
|
||||
For anything else, please post to guix-patches@gnu.org and leave time for a
|
||||
review, without committing anything. If you didn’t receive any reply
|
||||
after two weeks, and if you’re confident, it’s OK to commit.
|
||||
|
||||
That last part is subject to being adjusted, allowing individuals to commit
|
||||
directly on non-controversial changes on parts they’re familiar with.
|
||||
|
||||
* Using emacs-debbugs
|
||||
|
||||
Bug reports and patches are tracked using debbugs. If you are on emacs, you
|
||||
can use emacs-debbugs.
|
||||
|
||||
List all open bug reports on guix-patches with
|
||||
|
||||
C-u M-x debbugs-gnu <RET> <RET> guix-patches <RET> n y
|
||||
|
||||
+240
-820
File diff suppressed because it is too large
Load Diff
@@ -2,11 +2,8 @@
|
||||
#+TITLE: Guix NEWS – history of user-visible changes
|
||||
#+STARTUP: content hidestars
|
||||
|
||||
Copyright © 2013-2022 Ludovic Courtès <ludo@gnu.org>
|
||||
Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
|
||||
Copyright © 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
|
||||
Copyright © 2021, 2022, 2024 Maxim Cournoyer <maxim@guixotic.coop>
|
||||
Copyright © 2022 Mathieu Othacehe <othacehe@gnu.org>
|
||||
Copyright © 2026 Noé Lopez <noelopez@free.fr>
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
@@ -14,823 +11,6 @@ Copyright © 2026 Noé Lopez <noelopez@free.fr>
|
||||
|
||||
Please send Guix bug reports to bug-guix@gnu.org.
|
||||
|
||||
* Changes in 1.6.0 (since 1.5.0)
|
||||
** Distribution
|
||||
*** GNOME updated to version 48
|
||||
*** New service for Fossil SCM
|
||||
*** TeX Live updated to 2026.1
|
||||
|
||||
** Programming interfaces
|
||||
*** New (guix fossil-download) module, for fetching Fossil repositories
|
||||
|
||||
* Changes in 1.5.0 (since 1.4.0)
|
||||
** Package management
|
||||
*** New ‘rpm’ format for the ‘guix pack’ command
|
||||
*** New ‘appimage’ format for the ‘guix pack’ command
|
||||
*** New ‘--max-layers’ and ‘--file’ options for the ‘guix pack’ command
|
||||
*** New ‘--roll-back’ and ‘--expression’ options for the ‘guix deploy’ command
|
||||
*** New ‘--with-version’ package transformation option
|
||||
*** New ‘--with-configure-flag’ package transformation option
|
||||
*** New ‘--nesting’ option to use Guix within ‘guix shell’ containers
|
||||
*** New ‘--emulate-fhs’ option for ‘guix shell’ containers
|
||||
*** New ‘--dependents’ and ‘--development’ options for ‘guix build’
|
||||
*** New ‘--interactive’ and ‘--list-types’ flags for ‘guix repl’
|
||||
*** The root file-system of ‘guix shell’ containers is now read-only
|
||||
*** New ‘--writable-root’ option for the ‘guix shell’ command
|
||||
*** Improved style rules for ‘guix style’
|
||||
*** New ‘guix locate’ command
|
||||
*** ‘guix refresh’ now honours the ‘--key-server’ option
|
||||
*** ‘guix git authenticate‘ now remembers introduction commit and signer
|
||||
*** ‘guix git authenticate’ now installs pre-push and post-merge git hooks
|
||||
*** System reconfiguration now supports kexec for fast reboot
|
||||
*** Hetzner Cloud is now supported by the ‘guix deploy’ command
|
||||
*** The Guix Daemon can now be run without root privileges
|
||||
*** ‘guix refresh’ can now target partial version
|
||||
*** New ‘guix import composer’ command
|
||||
*** New ‘guix import binary-npm’ command
|
||||
*** New ‘guix import nuget’ command
|
||||
*** New ‘graphml’ backend for guix graph
|
||||
*** New ‘cyclonedx-json’ backend for guix graph
|
||||
*** AppArmor profiles are now available for guix and guix-daemon
|
||||
** Distribution
|
||||
*** ‘nss-certs’ is now included in ‘%base-packages’
|
||||
*** ‘udev-service-type’ now supports hardware configuration files
|
||||
*** ‘gdm-service-type’ now uses Wayland by default
|
||||
*** KDE Plasma 6.5 is now available with the new ‘plasma-desktop-service-type’
|
||||
*** GNOME was updated to version 44 with a more modular desktop service
|
||||
*** Declarative offloading with new ‘build-machines’ field of operating-system
|
||||
*** ‘containerd-service-type’ is no longer included with the Docker service
|
||||
*** ‘privileged-programs’ replaces ‘setuid-programs’ in ‘operating-system’
|
||||
*** The ‘postgresql’ field of ‘postgresql-configuration‘ is now mandatory
|
||||
*** The Rottlog service was replaced by new ‘log-rotation-service-type’
|
||||
*** The default system log has been changed to Shepherd’s ‘system-log’ service
|
||||
*** New recommended ‘%base-home-services’ variable for Guix Home
|
||||
*** UDisks now mounts removable devices in /run/media/$USER instead of /media
|
||||
*** Syncthing service received incompatible changes
|
||||
*** ‘node-build-system’ received incompatible changes
|
||||
*** New services for /etc/profile.d and /etc/bashrc.d
|
||||
*** New build system for clasp-cl
|
||||
*** New Rust packaging model
|
||||
*** C.utf8 locale is now supported by glibc
|
||||
*** Fully bootstrapped mono and zig are now available
|
||||
*** 64bit Hurd (x86_64-gnu) now has experimental support
|
||||
*** 12525 new packages
|
||||
*** 8911 package updates
|
||||
|
||||
Noteworthy updates:
|
||||
bash 5.2.37, binutils 2.44, clojure 1.12.0, cups 2.4.14, emacs 30.2,
|
||||
gcc-toolchain 15.2.0, gdb 16.3, ghc 9.2.8, gimp 3.0.4, glibc 2.41,
|
||||
gnome 46.10, gnupg 2.4.7, go 1.25.3, guile 3.0.9, icecat 140.6.0-gnu1,
|
||||
icedtea 3.19.0, inkscape 1.3.2, julia 1.8.5, libreoffice 25.2.5.2,
|
||||
linux-libre 6.17.12, lxde 0.99.3, mate 1.28.2, ocaml 5.3.0, octave 10.3.0,
|
||||
openjdk 25, perl 5.36.0, python 3.11.14, racket 8.18, rust 1.85.1, r 4.5.2,
|
||||
sbcl 2.5.8, shepherd 1.0.9, xfce 4.20.0, xorg-server 21.1.21
|
||||
|
||||
** Programming interfaces
|
||||
*** ‘(gnu system setuid)’ has been renamed to ‘(gnu system privilege)’
|
||||
*** Moved to a new Rust packaging model and repackaged all Rust applications
|
||||
*** Rust library packages have been moved to the guix-rust-past-crates channel
|
||||
*** Most Python packages now use the ‘pyproject-build-system’
|
||||
** Noteworthy bug fixes
|
||||
*** Daemon vulnerability allowing store corruption has been fixed
|
||||
*** Daemon vulnerability allowing takeover of build users has been fixed
|
||||
*** Daemon privilege escalation vulnerabilities fixed
|
||||
*** Daemon CVEs have been fixed
|
||||
CVE-2024-27297, CVE-2024-52867, CVE-2025-46415, CVE-2025-46416, CVE-2025-59378
|
||||
* Changes in 1.4.0 (since 1.3.0)
|
||||
** Package management
|
||||
*** New ‘guix home’ command, for home environment management
|
||||
*** New ‘guix shell’ command, the successor to ‘guix environment’
|
||||
*** New ‘guix system edit’ command, to edit services
|
||||
*** New ‘deb’ format for the ‘guix pack’ command
|
||||
*** New ‘guix import minetest’ command, to import Minetest extensions
|
||||
*** New ‘guix import elm’ command, to import Elm packages
|
||||
*** New ‘guix import egg’ command, to import CHICKEN egg packages
|
||||
*** New ‘guix import hexpm’ command, to import Erlang and Elixir packages
|
||||
*** New 'guix style' command, to auto-format package definitions
|
||||
*** ‘guix import texlive’ rewritten to use the TLPDB as its source
|
||||
*** ‘guix import elpa’ now supports the non-GNU ELPA repository
|
||||
*** ‘guix import pypi’ can now import a specific version
|
||||
*** ‘guix import cran’ can now import a specific version
|
||||
*** New updater (see ‘guix refresh’): ‘generic-git’
|
||||
*** ‘guix graph’ has a new ‘--max-depth’ option
|
||||
*** ‘guix deploy’ has a new ‘--execute’ option
|
||||
*** ‘guix shell’ has a new ‘--emulate-fhs’ option
|
||||
*** ‘guix shell’ has a new ‘--symlink’ option
|
||||
*** ‘--with-commit’ option now accepts strings returned by ‘git describe’
|
||||
*** ‘--with-source’ option now applied recursively
|
||||
*** Align tabular data output by commands like ‘guix package --list-available’
|
||||
*** Improved ‘guix import go’ importer via a new PEG parser
|
||||
*** Improved Software Heritage downloader
|
||||
*** New 'web.archive.org’ download fall-back
|
||||
*** Various performance enhancements
|
||||
*** New ‘--tune’ package transformation option
|
||||
*** ‘guix refresh’ ‘-L’ option is repurposed to ‘load-path’ modification
|
||||
*** ‘guix system image’ supersedes the ‘docker-image’ sub-command
|
||||
|
||||
** Distribution
|
||||
*** The installation script can now enable local substitute servers discovery
|
||||
*** The installation script can now customize the Bash prompt for Guix
|
||||
*** More control over boot-time file system checks and repairs
|
||||
*** XFS file systems can be created by the installer and mounted by label/UUID
|
||||
*** New interface for declaring swap space
|
||||
*** GNOME is now at version 42
|
||||
*** TeX Live is now at version 2021
|
||||
*** Multiple TeX Live trees can now be used via GUIX_TEXMF
|
||||
*** Python modules are searched in GUIX_PYTHONPATH instead of PYTHONPATH
|
||||
*** Python is now faster thanks to being built with optimizations
|
||||
*** The Rust bootstrap now starts from 1.54 instead of 1.19
|
||||
*** Most Python 2 packages have been removed
|
||||
*** Guix now makes use of parallel xz compression
|
||||
*** Faster shared libraries discovery via a per-package dynamic linker cache
|
||||
*** Package inputs can now be plain package lists
|
||||
*** A package origin can now be a single file rather than an archive
|
||||
*** New sanity-check phase to detect Python packaging problems at build time
|
||||
*** Fetching sources can now fall-back to use Disarchive
|
||||
*** Improved CI and infrastructure
|
||||
*** Multiple cross-compilation tooling addition and fixes
|
||||
*** Many Qt 6 modules are now packaged
|
||||
*** Configuring setuid programs is now more flexible
|
||||
*** Add support for the XFS file system
|
||||
*** Add partial support for LUKS2 headers when using GRUB
|
||||
*** GDM now supports Wayland
|
||||
*** Guix System static networking support is improved
|
||||
*** The installer final configuration is prettified
|
||||
*** The installer external command handling is improved
|
||||
*** The installer now has a crash dump upload mechanism
|
||||
*** Emacs now supports native compilation
|
||||
*** GRUB bootloader now supports chain-loading
|
||||
*** The GNU Shepherd was upgraded to 0.9.3
|
||||
*** The init RAM disk honors more arguments—e.g. ‘root’ and ‘rootflags’
|
||||
*** ‘guix system image’ can now generate WSL images
|
||||
*** The mcron task scheduler logs now contain the jobs exit statuses
|
||||
*** Chromium extensions are now built in a deterministic fashion
|
||||
*** The ‘rsync’ service lets you specify individual “modules”
|
||||
*** New services
|
||||
|
||||
anonip, bitmask, fail2ban, gitile, greetd, jami, lightdm, log-cleanup,
|
||||
nar-herder, opendht, rasdaemon, samba, seatd, strongswan, wsdd
|
||||
|
||||
*** 5311 new packages
|
||||
|
||||
*** 6573 package updates
|
||||
|
||||
Noteworthy updates:
|
||||
bash 5.1.8, binutils 2.37, clojure 1.11.1, cups 2.3.3op2, emacs 28.2,
|
||||
enlightenment 0.25.4, gcc-toolchain 12.2.0, gdb 12.1, ghc 8.10.7,
|
||||
gimp 2.10.32, glibc 2.33, gnome 42.4, gnupg 2.2.32, go 1.19.1, guile 3.0.8,
|
||||
icecat 102.5.0-guix0-preview1, icedtea 3.19.0, inkscape 1.2.1, julia 1.6.7,
|
||||
libreoffice 7.4.3.2, linux-libre 6.0.10, ocaml 4.14.0, octave 7.2.0,
|
||||
openjdk 18, perl 5.34.0, python2 2.7.18, python 3.9.9, racket 8.7,
|
||||
rust 1.60.0, r 4.2.2, sbcl 2.2.10, shepherd 0.9.3, xorg-server 21.1.4
|
||||
|
||||
** Programming interfaces
|
||||
*** Package input fields can now be plain package lists
|
||||
*** G-expressions can now be used in build phases
|
||||
*** New ‘modify-inputs’ macro to ease customizing a list of package inputs
|
||||
*** New ‘this-package-input’ and ‘this-package-native-input’ macros
|
||||
*** Build phases are no longer required to return a boolean
|
||||
*** (guix records) now supports “field sanitizers”
|
||||
*** Various improvements to the helpers in (gnu service configuration)
|
||||
*** ‘texlive-union’ is now deprecated in favor of ‘texlive-updmap.cfg’
|
||||
*** New (guix cpu) module
|
||||
*** New (guix least-authority) module
|
||||
*** New (guix platform) module
|
||||
*** New (guix read-print) module
|
||||
|
||||
It provides a comment-preserving reader and a comment-preserving
|
||||
pretty-printer smarter than (ice-9 pretty-print).
|
||||
|
||||
*** New ‘channel-build-system’
|
||||
|
||||
This build system lets you build Guix instances from channel specifications,
|
||||
similar to how 'guix time-machine' would do it, as regular packages.
|
||||
|
||||
*** New ‘pyproject-build-system’
|
||||
|
||||
This is an extension of ‘python-build-system’ with support for PEP-517 and
|
||||
‘pyproject.toml’ files. It may eventually get merged back into
|
||||
‘python-build-system’.
|
||||
|
||||
*** New ‘elm-build-system’
|
||||
*** New ‘rebar-build-system’
|
||||
|
||||
** Noteworthy bug fixes
|
||||
*** Fall back to Software Heritage when cloning a channel
|
||||
(<https://issues.guix.gnu.org/44187>)
|
||||
*** ‘--with-patch’ can be used on packages with non-origin sources
|
||||
(<https://issues.guix.gnu.org/49697>)
|
||||
*** Fix pathological profile building performance in the presence of grafts
|
||||
(<https://issues.guix.gnu.org/49439>)
|
||||
*** Deduplication phase of the garbage collector is now faster
|
||||
(<https://issues.guix.gnu.org/24937>)
|
||||
*** File system flags are validated before system instantiation
|
||||
(<https://issues.guix.gnu.org/51425>)
|
||||
*** Fonts can now be discovered in any profile via XDG_DATA_DIRS
|
||||
(<https://issues.guix.gnu.org/31403>)
|
||||
*** Various Python reproducibility fixes
|
||||
*** The installer now supports MSDOS disk labels on UEFI systems
|
||||
(<https://issues.guix.gnu.org/47889>)
|
||||
*** The installer can now properly mount FAT16 partitions
|
||||
(<https://issues.guix.gnu.org/48419>)
|
||||
*** The installer no longer crashes when deleting a free space partition
|
||||
*** Emacs handles major upgrades better without a re-login
|
||||
(<https://issues.guix.gnu.org/47458>)
|
||||
*** The bootloader configuration now accepts multiple targets
|
||||
(<https://issues.guix.gnu.org/40997>)
|
||||
*** File system mount point is always created when ‘create?’ is true
|
||||
(<https://issues.guix.gnu.org/40158>)
|
||||
*** Build the man database only if ‘man-db’ is in the profile
|
||||
*** gdk-pixbuf now discovers pixbuf loaders via a search path
|
||||
(<https://issues.guix.gnu.org/50957>)
|
||||
*** Gitolite home directory permissions are fixed
|
||||
(https://issues.guix.gnu.org/56444)
|
||||
*** The man-db database is indexed via man pages names
|
||||
(https://issues.guix.gnu.org/38838)
|
||||
*** ‘chfn’ can now change the user's full name
|
||||
(https://issues.guix.gnu.org/52539)
|
||||
*** GNOME Settings Bluetooth panel is now working
|
||||
(https://issues.guix.gnu.org/32166)
|
||||
*** Inferiors are now caching store connections
|
||||
(https://issues.guix.gnu.org/48007)
|
||||
*** Retry downloads when a substitute has become unavailable
|
||||
(https://issues.guix.gnu.org/57978)
|
||||
*** The installer doesn't segfault when removing an extended partition
|
||||
*** The installer doesn't ship an older Guix revision
|
||||
(https://issues.guix.gnu.org/53210)
|
||||
*** The installer cannot proceed without any non-root user accounts
|
||||
(https://issues.guix.gnu.org/54666)
|
||||
*** <operating-system> compiler truly honors the 'system' argument
|
||||
(https://issues.guix.gnu.org/55951)
|
||||
|
||||
* Changes in 1.3.0 (since 1.2.0)
|
||||
** Package management
|
||||
*** POWER9 (powerpc64le-linux) is now supported as a technology preview
|
||||
*** New ‘--export-manifest’ and ‘--export-channels’ options of ‘guix package’
|
||||
*** New ‘--profile’ option for ‘guix environment’
|
||||
*** New ‘--discover’ option of ‘guix-daemon’, for local substitute discovery
|
||||
*** New ‘--advertise’ option of ‘guix publish’
|
||||
*** New ‘--with-patch’ and ‘--with-latest’ package transformation options
|
||||
*** ‘guix system image’ supersedes the ‘disk-image’ and ‘vm-image’ sub-commands
|
||||
*** ‘--verbosity=1’ no longer displays download URLs
|
||||
*** ‘guix publish -C’ now supports zstd compression via Guile-zstd
|
||||
*** ‘guix-daemon’ now supports zstd substitutes, which decompress faster
|
||||
*** New ‘guix import go’ command, to import Go packages
|
||||
*** ‘guix import opam’ now supports Coq packages and has a ‘--repo’ option
|
||||
*** ‘guix import crate’ now honors semantic versioning (“semver”)
|
||||
*** ‘guix import nix’ has been removed
|
||||
*** New updaters (see ‘guix refresh’): ‘sourceforge’ and ‘generic-html’
|
||||
*** Substitute installation has been optimized
|
||||
*** ‘guix’ commands suggest alternative sub-commands or options upon typos
|
||||
*** Offloading no longer requires ‘guile’ to be in $PATH on build machines
|
||||
*** ‘GUIX_EXTENSIONS_PATH’ is honored when looking for extensions such as GWL
|
||||
*** New ‘--format’ option for ‘guix processes’
|
||||
*** ‘guix upgrade’ can now be passed several regexps
|
||||
|
||||
** Distribution
|
||||
|
||||
*** The Guix System demonstration VM now supports the SPICE protocol
|
||||
*** The installation script can now run in a fully automated manner
|
||||
*** ‘qemu-binfmt-service-type’ now relies on statically-linked QEMU
|
||||
*** ‘sysctl-service-type’ enables Linux protected hardlinks/symlinks by default
|
||||
*** ‘%base-services’ now includes a default ‘sysctl-service-type’ instance
|
||||
*** Linux Logical Volume Manager (LVM) now supported, via ‘lvm-device-mapping’
|
||||
*** ‘guix system init’ has been optimized
|
||||
*** ‘guix system’ warns when users/groups appear more than once
|
||||
*** ‘guix system image -t rock64-raw’ produces images for Rock64 devices
|
||||
*** ‘herd discover guix-daemon on’ turns on substitute server discovery
|
||||
*** Default initrd now supports bcachefs
|
||||
*** CUPS service includes ‘brlaser’ extension by default
|
||||
*** “lp” group is no longer included in ‘%base-groups’
|
||||
*** New ‘--graph-backend’ option for ‘guix system {extension,shepherd}-graph’
|
||||
*** New services
|
||||
|
||||
agate, cuirass-remote-worker, ipfs, keepalived, laminar, radicale, syncthing,
|
||||
transmission-daemon, wireguard, xorg-server
|
||||
|
||||
*** 2009 new packages
|
||||
|
||||
*** 3100 package updates
|
||||
|
||||
Noteworthy updates:
|
||||
emacs 27.2, gcc-toolchain 10.3.0, ghc 8.8.3, glibc 2.31, gnome 3.34.5,
|
||||
gnupg 2.2.27, go 1.14.15, guile 3.0.5, icecat 78.10.0-guix0-preview1,
|
||||
icedtea 3.7.0, inkscape 1.0.2, julia 1.5.3, libreoffice 6.4.7.2,
|
||||
linux-libre 5.11.15, ocaml 4.11.1, octave 6.2.0, openjdk 14.0,
|
||||
python 3.8.2, racket 8.0, rust 1.51.0, r 4.0.4, sbcl 2.1.3, xfce 4.16.0,
|
||||
xorg-server 1.20.10
|
||||
|
||||
** Programming interfaces
|
||||
|
||||
*** New ‘channel-with-substitutes-available’ procedure in (guix channels)
|
||||
*** New modules (guix substitutes), (guix narinfo), and (guix avahi)
|
||||
*** <image> records can be passed to ‘guix system image’
|
||||
*** New (guix ipfs) module to interact with an IPFS gateway
|
||||
|
||||
** Noteworthy bug fixes
|
||||
|
||||
*** Risk of local privilege escalation via guix-daemon fixed
|
||||
(<https://issues.guix.gnu.org/47229>, CVE-2021-27851)
|
||||
*** Setuid programs on Guix System are no longer setgid root
|
||||
(<https://issues.guix.gnu.org/46395>)
|
||||
*** Risk of local privilege escalation during reconfigure fixed
|
||||
(<https://issues.guix.gnu.org/47584>)
|
||||
*** Grafting recognizes UTF-16 and UTF-32 store references
|
||||
(<https://issues.guix.gnu.org/33848>)
|
||||
*** (guix git) honors HTTP/HTTPS proxy settings for Git submodules
|
||||
(<https://issues.guix.gnu.org/44593>)
|
||||
*** Fix ‘guix substitute’ crash when interleaving lzip and gzip
|
||||
(<https://issues.guix.gnu.org/46967>)
|
||||
*** Fix GnuTLS memory corruption when used from Guile
|
||||
(<https://issues.guix.gnu.org/46330>)
|
||||
*** Update GnuTLS to 3.6.15, addressing a time-dependent test failure
|
||||
(<https://issues.guix.gnu.org/44559>)
|
||||
*** Booted system is fully protected from garbage collection
|
||||
(<https://issues.guix.gnu.org/46767>)
|
||||
*** Add MSDOS disk label support on UEFI systems
|
||||
(<https://issues.guix.gnu.org/47889>)
|
||||
*** Installer’s kmscon no longer uses up 100% CPU
|
||||
(<https://issues.guix.gnu.org/39341>)
|
||||
*** Git checkouts can be updated to the remote’s default HEAD
|
||||
(<https://issues.guix.gnu.org/45187>)
|
||||
*** ‘guix pull’ correctly displays early builds and downloads
|
||||
(<https://issues.guix.gnu.org/41930>)
|
||||
*** Fix OpenRC init scripts for ‘guix-daemon’
|
||||
(<https://issues.guix.gnu.org/46871>)
|
||||
*** Activate system when switching generations
|
||||
(<https://issues.guix.gnu.org/38884>)
|
||||
*** ‘guix environment -C’ preserves original mount flags
|
||||
(<https://issues.guix.gnu.org/46292>)
|
||||
*** Remove duplicates in profile transactions
|
||||
(<https://issues.guix.gnu.org/23874>)
|
||||
*** Fix sound problems with ALSA plugins on foreign distros
|
||||
(<https://issues.guix.gnu.org/40832>)
|
||||
|
||||
** Native language support
|
||||
|
||||
*** Updated translations of the manual
|
||||
|
||||
The manual is fully translated into French and German, 90% translated into
|
||||
Spanish, and has preliminary translations into Chinese, Brazilian Portuguese,
|
||||
and Russian.
|
||||
|
||||
*** Update translations of the cookbook
|
||||
|
||||
The cookbook is fully translated in French and German and has a preliminary
|
||||
translation into Korean.
|
||||
|
||||
*** Updated translations of messages
|
||||
|
||||
This version of Guix is fully translated in French, German, and Slovak; it has
|
||||
good translation into Brazilian Portuguese and Spanish, and preliminary
|
||||
translations in a dozen other languages.
|
||||
|
||||
*** Translations now hosted on Fedora’s Weblate instance
|
||||
|
||||
Translations are now handled at
|
||||
<https://translate.fedoraproject.org/projects/guix/guix/> (thanks, Fedora!).
|
||||
You can join to help improve translations in your native language of messages,
|
||||
documentation, package descriptions, and the web site.
|
||||
|
||||
* Changes in 1.2.0 (since 1.1.0)
|
||||
|
||||
** Package management
|
||||
*** ‘guix pull’ now cryptographically authenticates channels
|
||||
*** ‘guix describe -f channels’ now shows “channel introductions”
|
||||
*** ‘guix describe -f channels-sans-intro’ omits channel introductions
|
||||
*** New ‘guix git authenticate’ command, to authenticate Git checkouts
|
||||
*** ‘guix pull’ and ‘guix system reconfigure’ detect attempts to downgrade
|
||||
*** New ‘--allow-downgrades’ option for ‘guix pull’ and ‘guix system’
|
||||
*** Guix build time reduced thanks to Guile 3.0.4’s “baseline compiler”
|
||||
*** New ‘--with-debug-info’ package transformation option
|
||||
*** New ‘--with-c-toolchain’ package transformation option
|
||||
*** New ‘--without-tests’ package transformation option
|
||||
*** ‘--with-input’ & co. now also apply to implicit dependencies
|
||||
*** Package transformation options are now recorded in profiles
|
||||
*** New fakechroot “execution engine” for packs produced by ‘guix pack -RR’
|
||||
*** New ‘--cache-bypass-threshold’ option for ‘guix publish’
|
||||
*** New ‘--diff’ option for ‘guix challenge’, to compare substitutes
|
||||
*** New ‘--exclude’ option for ‘guix lint’, to exclude checkers
|
||||
*** New ‘check-for-collisions’ checker in ‘guix lint’
|
||||
*** All of Guix and Guix System now runs on Guile 3.0
|
||||
*** ‘guix pull’ and ‘--with-git-url’ now support authenticated SSH repos
|
||||
*** ‘guix pull’ now honors $http_proxy and $https_proxy
|
||||
*** New ‘--path’ option for ‘guix graph’, showing the shortest path
|
||||
*** ‘guix repl’ can now be passed a script to execute
|
||||
*** ‘guix help’ finally shows command descriptions
|
||||
*** ‘guix install’ etc. no longer list items to download by default
|
||||
*** ‘guix search’ etc. now automatically invoke the pager
|
||||
*** New ‘--hash’ option for ‘guix hash’
|
||||
*** New ‘--list-formats’ option for ‘guix describe’
|
||||
*** New “Getting Started” section in the manual
|
||||
|
||||
** Distribution
|
||||
*** Bootstrap binary seeds reduced to 60 MiB on x86_64/i686
|
||||
*** New ‘--target’ option for ‘guix system’, for cross-compilation
|
||||
*** New ‘--image-type’ option for ‘guix system disk-image’
|
||||
*** New ‘--label’ option for ‘guix system disk-image’
|
||||
*** Guix System can now boot from a Btrfs subvolume
|
||||
*** New ‘hurd’ field of ‘operating-system’, for GNU/Hurd support
|
||||
*** Guix System can be cross-compiled to GNU/Hurd with ‘--target=i586-pc-gnu’
|
||||
*** New ‘hurd-vm-service-type’ to spawn a GNU/Hurd VM on GNU/Linux
|
||||
*** /etc/guix/acl on Guix System is now built from the OS configuration
|
||||
*** ‘rottlog-service-type’ is now part of ‘%base-services’
|
||||
*** Linux-libre modules are now gzip-compressed
|
||||
*** The efivarfs file system is now part of ‘%base-file-systems’
|
||||
*** mcron job specs are now statically checked at OS build time
|
||||
*** ‘swap-devices’ field of ‘operating-system’ can contains UUIDs and labels
|
||||
*** Graphical installer uses UUIDs for unencrypted swap partitions
|
||||
*** Graphical installer now supports NTFS file systems
|
||||
*** File systems UUIDs and labels now recognized for F2FS and NTFS
|
||||
*** Root file system can now be on NFS
|
||||
*** New services
|
||||
|
||||
autossh, ganeti, gmnisrv, guix-build-coordinator,
|
||||
guix-build-coordinator-agent, guix-build-coordinator-queue-builds, hostapd,
|
||||
hurd-console, hurd-getty, hurd-vm, lxqt, rshiny, secret-service,
|
||||
simulated-wifi, udev-rules, unattended-upgrade, webssh, zram
|
||||
|
||||
*** 1999 new packages
|
||||
*** 3652 package updates
|
||||
|
||||
Noteworthy updates:
|
||||
bash 5.0.16, binutils 2.34, cups 2.3.3, emacs 27.1, enlightenment 0.24.2,
|
||||
gcc-toolchain 10.2.0, gdb 10.1, ghc 8.8.3, gimp 2.10.22, glibc 2.31,
|
||||
gnome 3.34.2, gnupg 2.2.23, go 1.14.10, guile 3.0.4,
|
||||
icecat 78.4.0-guix0-preview1, inkscape 1.0.1, julia 1.5.2,
|
||||
libreoffice 6.4.6.2, linux-libre 5.9.3, mate 1.24.1, ocaml 4.09.0,
|
||||
openjdk 14.0, perl 5.30.2, python2 2.7.17, python 3.8.2, racket 7.8,
|
||||
rust 1.46.0, r 4.0.3, sbcl 2.0.10, shepherd 0.8.1, xfce 4.14.2,
|
||||
xorg-server 1.20.8
|
||||
|
||||
|
||||
** Programming interfaces
|
||||
*** New ‘maven-build-system’, for packages built with Maven
|
||||
*** ‘haskell-build-system’ now always adds a “static” output
|
||||
*** New (gnu image) module, to build system images
|
||||
*** New (guix git-authenticate) module, for Git checkout authentication
|
||||
*** New (guix openpgp) module with a minimal OpenPGP implementation
|
||||
*** New (guix transformations) module, for package transformations
|
||||
*** New (gnu services hurd) module providing GNU/Hurd services
|
||||
*** (guix json) removed in favor of Guile-JSON’s (json) module
|
||||
*** (guix zlib) and (guix lzlib) removed in favor of Guile-{Zlib,Lzlib}
|
||||
*** ‘local-file’ warns about non-literal relative file names
|
||||
*** Daemon now supports more hash algorithms: SHA3 and BLAKE2s
|
||||
*** New <content-hash> record type for use in ‘origin’
|
||||
*** New ‘let-system’ for in (guix gexp), for system-dependent code
|
||||
*** New lowerable <profile> record type in (guix profiles)
|
||||
*** (gnu build secret-service) can share secrets with a guest OS
|
||||
*** “Programming Interface” section of the manual greatly expounded
|
||||
|
||||
** Noteworthy bug fixes
|
||||
*** ‘guix pull’ now shows a progress bar while fetching from Git
|
||||
(<https://bugs.gnu.org/39260>)
|
||||
*** ‘guix copy’ and ‘guix deploy’ show a progress bar while copying
|
||||
*** Bootloader messages are now localized
|
||||
(<https://issues.guix.gnu.org/35394>)
|
||||
*** ‘guix system reconfigure’ now starts services not currently running
|
||||
(<https://bugs.gnu.org/43720>)
|
||||
*** Desktop environments now detect newly installed applications
|
||||
(<https://bugs.gnu.org/35594>)
|
||||
*** Offloading and copying small items is now much faster
|
||||
(<https://issues.guix.gnu.org/43340>)
|
||||
*** GCC switched back to C_INCLUDE_PATH & co. from CPATH
|
||||
(<https://bugs.gnu.org/30756>)
|
||||
*** Graphical installer no longer hangs while connecting to WiFi network
|
||||
(<https://issues.guix.gnu.org/40682>)
|
||||
*** GNU Aspell truly honors ASPELL_DICT_DIR (<https://bugs.gnu.org/29686>)
|
||||
*** Fix overly aggressive memoization of “commencement” packages
|
||||
(<https://bugs.gnu.org/40482>)
|
||||
*** Duplicate /etc entries are now reported (<https://bugs.gnu.org/40729>)
|
||||
*** ‘guix pack -R’ wrapper correctly reports exit code
|
||||
(<https://bugs.gnu.org/40816>)
|
||||
*** Fix time travel to pre-Guile 3.0 revisions
|
||||
(<https://bugs.gnu.org/41028>)
|
||||
*** ‘package-grafts’ returns grafts for all the relevant outputs
|
||||
(<https://bugs.gnu.org/41796>)
|
||||
*** ‘guix pull’ and related commands authenticate Git checkouts
|
||||
(<https://bugs.gnu.org/22883>)
|
||||
*** Fix GNU libstdc++ misconfiguration in recent ‘gcc-toolchain’ versions
|
||||
(<https://bugs.gnu.org/42392>)
|
||||
*** ‘guix pack -R’ wraps propagated inputs as well
|
||||
(<https://bugs.gnu.org/42510>)
|
||||
*** ‘guix pack -R’ wrapper leaves root available to child processes
|
||||
(<https://bugs.gnu.org/44261>)
|
||||
*** ‘lib/guix/package.cache’ generated by ‘guix pull’ is now bit-reproducible
|
||||
(<https://bugs.gnu.org/42009>)
|
||||
*** Graphical installer now properly detects disks containing an LVM partition
|
||||
(<https://issues.guix.gnu.org/42683>)
|
||||
*** Fix possible crash when copying store items over SSH
|
||||
(<https://bugs.gnu.org/42740>)
|
||||
*** ‘gcc’ is now a “deprecated” alias for ‘gcc-toolchain’
|
||||
(<https://bugs.gnu.org/43303>)
|
||||
*** ‘package-input-rewriting’ & co. no longer yield unnecessary rebuilds
|
||||
(<https://bugs.gnu.org/42156>)
|
||||
*** Offloading better normalizes build machine load
|
||||
(<https://issues.guix.gnu.org/43773>)
|
||||
*** ‘guix build --check’ now honors ‘--rounds’
|
||||
(<https://issues.guix.gnu.org/40144>)
|
||||
*** ‘guix-install.sh’ now installs shell completion files
|
||||
(<https://bugs.gnu.org/43744>)
|
||||
*** ‘guix-install.sh’ now warns about lack of ‘nscd’
|
||||
(<https://bugs.gnu.org/43744>)
|
||||
|
||||
** Native language support
|
||||
*** Updated translations of the manual
|
||||
|
||||
The manual is fully translated into French, German, and Spanish, and has
|
||||
preliminary translations into Chinese and Russian.
|
||||
|
||||
*** Updated translations of messages
|
||||
|
||||
This version of Guix is fully translated in French, German, and Spanish, and
|
||||
partially translated in 11 other languages.
|
||||
|
||||
* Changes in 1.1.0 (since 1.0.1)
|
||||
** Package management
|
||||
*** New ‘guix deploy’ command to deploy several machines at once
|
||||
*** Channels can now provide news, viewed with ‘guix pull --news’
|
||||
*** ‘guix system reconfigure’ saves provenance data
|
||||
*** New ‘guix system describe’ command to view system provenance info
|
||||
*** New /run/current-system/{channels,configuration}.scm files
|
||||
*** New ‘guix time-machine’ command
|
||||
*** ‘guix pack’ has a new ‘--entry-point’ option
|
||||
*** ‘guix pack’ saves environment variables for ‘docker’ and ‘singularity’
|
||||
*** ‘guix pack’ provides a meaningful repository name for ‘docker’
|
||||
*** New ‘--target’ option for ‘guix system’
|
||||
*** ‘--no-build-hook’ was renamed to ‘--no-offload’
|
||||
*** ‘--keep-failed’ now implies ‘--no-offload’
|
||||
*** ‘--dry-run’ no longer implies ‘--no-grafts’
|
||||
*** ‘guix import crate’ has a new ‘--recursive’ option
|
||||
*** ‘guix import crate’ can import a specific package version
|
||||
*** ‘guix pull’ returns Guix on Guile 3.0
|
||||
*** ‘guix pull’ and ‘--with-git-url’ can clone repositories over SSH
|
||||
*** ‘--with-commit’ now accepts tags
|
||||
*** ‘guix challenge’ has a new ‘--diff’ option to show differences
|
||||
*** ‘guix weather’ has a new ‘--display-missing’ option
|
||||
*** Guix can now fetch lzip-compressed substitutes in addition to gzip
|
||||
*** ‘guix publish’ supports lzip compression via ‘-C’
|
||||
*** ‘guix lint -c archival’ queries Software Heritage
|
||||
*** ‘guix archive’ has a new ‘-t’ option to list archive contents
|
||||
*** ‘guix describe’ and similar commands emit terminal hyperlinks
|
||||
*** ‘guix build’ now attempts to substitute missing .drv files
|
||||
*** ‘guix package’ etc. now lock the profile they operate on
|
||||
*** ‘guix pull’ honors /etc/guix/channels.scm when it exists
|
||||
*** New ‘guix show’ command, synonymous with ‘guix package --show’
|
||||
*** The ‘--manifest’ option can be repeated to combine manifests
|
||||
*** Some commands previously lacking ‘--load-path’ now support it
|
||||
** Distribution
|
||||
*** The set of pre-built bootstrap “binary seeds” has been halved
|
||||
*** Graphical installer has better support for non-Latin keyboard layouts
|
||||
*** Graphical installer allows users to choose an HTTP/HTTPS proxy
|
||||
*** Graphical installer allows users to edit the system configuration
|
||||
*** New ‘kernel-loadable-modules’ field in ‘operating-system’
|
||||
*** rottlog service is now part of ‘%base-services’
|
||||
*** ‘%base-services’ now includes /usr/bin/env as a “special file”
|
||||
*** ‘herd set-http-proxy guix-daemon URL’ can be used to set a proxy
|
||||
*** ‘qemu-binfmt’ service now supports riscv32 and riscv64
|
||||
*** File system UUIDs and labels are now supported for JFS
|
||||
*** New services
|
||||
|
||||
auditd, fontconfig-file-system, getmail, gnome-keyring, kernel-module-loader,
|
||||
knot-resolver, mumi, nfs, nftables, nix, pagekite, pam-mount, patchwork,
|
||||
polkit-wheel, provenance, pulseaudio, sane, singularity, usb-modeswitch
|
||||
|
||||
*** 3514 new packages
|
||||
|
||||
*** 3368 package updates
|
||||
|
||||
Noteworthy updates:
|
||||
bash 5.0.7, binutils 2.32, cups 2.3.1, emacs 26.3, enlightenment 0.23.1,
|
||||
gcc-toolchain 9.3.0, gdb 9.1, ghc 8.6.5, gimp 2.10.18, glibc 2.29,
|
||||
gnome 3.32.2, gnupg 2.2.20, go 1.13.9, guile 2.2.7,
|
||||
icecat 68.7.0-guix0-preview1, icedtea 3.7.0, julia 1.3.1,
|
||||
libreoffice 6.4.2.2, linux-libre 5.4.31, mate 1.24.0, ocaml 4.09.0,
|
||||
octave 5.2.0, openjdk 12.33, perl 5.30.0, python2 2.7.16, python 3.7.4,
|
||||
racket 7.6, rust 1.39.0, r 3.6.3, sbcl 2.0.3, shepherd 0.7.0, xfce 4.14.0,
|
||||
xorg-server 1.20.7
|
||||
|
||||
** Programming interfaces
|
||||
*** New build systems
|
||||
|
||||
copy-build-system, julia-build-system, node-build-system, qt-build-system
|
||||
|
||||
*** New ‘with-build-handler’ and ‘map/accumulate-builds’ in (guix store)
|
||||
*** (guix gexp) has a new ‘with-parameters’ form
|
||||
*** New (guix remote) module for remote evaluation of gexps
|
||||
*** New ‘eval/container’ procedure in (gnu system linux-container)
|
||||
*** (guix inferior) now reifies exceptions as ‘&inferior-exception’
|
||||
*** (guix cve) uses the new NIST-provided JSON files instead of XML
|
||||
*** New (guix json) module to map JSON objects to Scheme records
|
||||
*** New (gnu installer tests) module to drive the graphical installer
|
||||
*** New (guix diagnostics) module for consistent diagnostic messages
|
||||
*** “Checkers” now live in (guix lint)
|
||||
** Notewothy bug fixes
|
||||
*** Grafts leads to inefficient substitute info retrieval
|
||||
(<https://issues.guix.gnu.org/issue/22990>)
|
||||
*** Grafting prevents build plan from being displayed upfront
|
||||
(https://issues.guix.gnu.org/issue/28310)
|
||||
*** Changing the HTTP/FTP proxy used by the daemon is inconvenient
|
||||
(<https://issues.guix.gnu.org/issue/25569>)
|
||||
*** ‘guix system disk-image’ successfully builds a bad image
|
||||
(<https://issues.guix.gnu.org/issue/34276>)
|
||||
*** Installer cannot be restarted after a failed install
|
||||
(<https://issues.guix.gnu.org/issue/35543>)
|
||||
*** Null pointer error when partitioning with the graphical installer
|
||||
(<https://issues.guix.gnu.org/issue/35858>)
|
||||
*** 'guix upgrade' misdiagnoses upgrades in the presence of propagated inputs
|
||||
(<https://issues.guix.gnu.org/issue/35872>)
|
||||
*** mcron randomly stops running jobs
|
||||
(<https://issues.guix.gnu.org/issue/37237>)
|
||||
*** Mistaken warning "guix pull was never run"
|
||||
(<https://issues.guix.gnu.org/issue/38196>)
|
||||
*** `guix pack --format=squashfs` fails on CentOS7
|
||||
(<https://issues.guix.gnu.org/issue/40043>)
|
||||
*** installer: No way to input Latin characters with non-Latin keyboard layouts
|
||||
(<https://issues.guix.gnu.org/issue/40273>)
|
||||
*** installer: Always add '%base-initrd-modules' to 'initrd-modules'
|
||||
(<https://issues.guix.gnu.org/issue/36099>)
|
||||
*** [MATE] shutdown and reboot not possible from UI
|
||||
(<https://issues.guix.gnu.org/issue/40327>)
|
||||
*** 'guix-daemon' honors %localstatedir, %sysconfdir, and %storedir
|
||||
(<https://issues.guix.gnu.org/issue/35874>)
|
||||
*** Fix ‘GUIX_LOCPATH’ quoting in ‘guix-daemon.service’ (systemd)
|
||||
(<https://issues.guix.gnu.org/issue/36074>)
|
||||
*** Include USB_ModeSwitch in %desktop-services
|
||||
(<https://issues.guix.gnu.org/issue/35640>)
|
||||
*** linux-container: Mount a new /dev/pts instance in the container
|
||||
(<https://issues.guix.gnu.org/issue/36463>)
|
||||
*** system: Write the timezone to /etc/timezone
|
||||
(<https://issues.guix.gnu.org/issue/35746>)
|
||||
*** linux-modules: Define and use a module name database
|
||||
(<https://issues.guix.gnu.org/issue/34902>)
|
||||
*** pack: Create /tmp in Docker images
|
||||
(<https://issues.guix.gnu.org/issue/37161>)
|
||||
*** guix system: Reinstalling the bootloader preserves extra menu entries
|
||||
(<https://issues.guix.gnu.org/issue/36876>)
|
||||
*** system: Add 'mount' and 'umount' to '%setuid-programs'
|
||||
(<https://issues.guix.gnu.org/issue/37569>)
|
||||
*** linux-libre: Try to aggressively gather entropy during boot
|
||||
(<https://issues.guix.gnu.org/issue/37501>)
|
||||
*** daemon: Make 'profiles/per-user' non-world-writable
|
||||
(<https://issues.guix.gnu.org/issue/37744>)
|
||||
*** linux-boot: Don't ignore options when mounting root file system
|
||||
(<https://issues.guix.gnu.org/issue/37977>)
|
||||
*** Files produced by syslogd are no longer world-readable
|
||||
(<https://issues.guix.gnu.org/issue/40405>)
|
||||
|
||||
** Native language support
|
||||
*** Updated translations of the manual
|
||||
|
||||
The manual is fully translated into Spanish, more than 85% complete in French
|
||||
and German, and has preliminary translations into Russian and Chinese.
|
||||
|
||||
*** Updated translations of messages
|
||||
|
||||
This version of Guix is fully translated in Brazilian Portuguese, French,
|
||||
German, and Spanish, and partially translated in 10 other languages.
|
||||
|
||||
* Changes in 1.0.1 (since 1.0.0)
|
||||
** Package management
|
||||
*** The ‘https_proxy’ environment variable is now honored
|
||||
** Distribution
|
||||
*** ‘guix system docker-image’ now produces images with an entry point
|
||||
*** New ‘--network’ option for ‘guix system container’
|
||||
*** ‘gcc’ package is now hidden; ‘gcc-toolchain’ is what users want
|
||||
*** ‘mcron’ service now logs to /var/log/mcron.log
|
||||
*** Dovecot: ‘auth-verbose-passwords?’ renamed from ‘auth-verbose-passwords’
|
||||
*** ‘slim’ service now allows for multiple instances on different VTs
|
||||
*** 70 new packages
|
||||
*** 483 package updates
|
||||
|
||||
Noteworthy updates:
|
||||
gdb 8.3, ghc 8.4.3, glibc 2.28, gnupg 2.2.15, go 1.12.1, guile 2.2.4,
|
||||
icecat 60.6.2-guix1, icedtea 3.7.0, linux-libre 5.1.2, python 3.7.0,
|
||||
rust 1.34.1, shepherd 0.6.1
|
||||
|
||||
** Programming interfaces
|
||||
*** New (guix lzlib) module, to be used eventually for substitute compression
|
||||
** Noteworthy bug fixes
|
||||
*** Installer appends packages to ‘%base-packages’
|
||||
(<https://bugs.gnu.org/35541>)
|
||||
*** Installer allows for arbitrary-long passphrases and passwords
|
||||
(<https://bugs.gnu.org/35716>)
|
||||
*** ‘network-manager-applet’ is provided as part of ‘%desktop-services’
|
||||
(<https://bugs.gnu.org/35554>)
|
||||
*** Installer can create Btrfs file systems
|
||||
(<https://bugs.gnu.org/35655>)
|
||||
*** Installer password entry visibility can be toggled
|
||||
(<https://bugs.gnu.org/35540>)
|
||||
*** ‘guix-daemon.service’ file for systemd selects a valid UTF-8 locale
|
||||
(<https://bugs.gnu.org/35671>)
|
||||
*** ‘gnome-tweak-tool’ starts correctly
|
||||
(<https://bugs.gnu.org/35597>)
|
||||
*** ‘getlogin’ C function now works as expected
|
||||
(<https://bugs.gnu.org/35553>)
|
||||
*** Leading zeros are preserved when serializing FAT UUIDs
|
||||
(<https://bugs.gnu.org/35582>)
|
||||
*** ‘guix search’ now searches output names
|
||||
(<https://bugs.gnu.org/35588>)
|
||||
*** ‘guix environment’ in non ad-hoc mode honors package transformations
|
||||
(<https://bugs.gnu.org/35618>)
|
||||
*** ‘guix refresh’ correctly determines the latest version for GitHub
|
||||
(<https://bugs.gnu.org/35684>)
|
||||
|
||||
** Native language support
|
||||
*** New preliminary translation of the manual to Russian
|
||||
*** Updated translations: da, de, es, fr
|
||||
|
||||
* Changes in 1.0.0 (since 0.16.0)
|
||||
** Package management
|
||||
*** New ‘-v’/‘--verbosity’ option for all commands
|
||||
*** Most commands now default to verbosity level 1 (“quiet”)
|
||||
*** New ‘guix package’ aliases: ‘install’, ‘remove’, ‘upgrade’, and ‘search’
|
||||
*** ‘guix pack -RR’ produces PRoot-enabled relocatable binaries
|
||||
*** New ‘--save-provenance’ option for ‘guix pack’
|
||||
*** CLI diagnostics use colors; more operations show progress bars
|
||||
*** New ‘--news’ option for ‘guix pull’
|
||||
*** New ‘--preserve’ option for ‘guix environment’
|
||||
*** ‘guix environment -C’ creates containers with a non-zero UID
|
||||
*** Channels can now specify dependencies in a ‘.guix-channel’ file
|
||||
*** New ‘reverse-bag’ graph type for ‘guix graph’
|
||||
*** New ‘--with-git-url’ package transformation option
|
||||
*** The ‘--with-branch’ package transformation option fetches Git sub-modules
|
||||
*** New ‘guix system delete-generations’ command
|
||||
*** New ‘--list-roots’ and ‘--delete-generations’ options for ‘guix gc’
|
||||
*** New ‘--coverage’ option for ‘guix weather’
|
||||
*** ‘guix pull’ computes a package cache to speed up package lookups by name
|
||||
*** ‘guix pull’ now embeds ‘glibc-utf8-locales’
|
||||
*** ‘guix refresh -l’ better estimates dependents
|
||||
*** ‘guix build’ can take multiple ‘--system’ flags
|
||||
*** ‘guix offload’ avoids build machines with too little free disk space
|
||||
*** ‘guix offload’ now uses (guix inferior) to communicate with remote hosts
|
||||
*** Guix can no longer be built with Guile 2.0
|
||||
** Distribution
|
||||
*** New text-mode graphical installer
|
||||
*** New virtual machine (VM) image
|
||||
*** New ‘keyboard-layout’ field for the OS, bootloader, and Xorg configuration
|
||||
*** New ‘xorg-configuration’ record type for Xorg server configuration
|
||||
*** ‘%desktop-services’ now includes GDM instead of SLiM for graphical log-in
|
||||
*** New ‘label’ and ‘essential-services’ fields for <operation-system>
|
||||
*** The manual has been restructured for clarity
|
||||
*** New ‘remote-inferior’ procedure in (guix ssh)
|
||||
*** New (gnu ci) module for continuous integration jobs
|
||||
*** (gnu services shepherd) now supports one-shot services
|
||||
*** New services
|
||||
|
||||
cups-pk-helper, imap4d, inputattach, localed, nslcd, zabbix-agent,
|
||||
zabbix-server
|
||||
|
||||
*** 1102 new packages
|
||||
*** 2104 package updates
|
||||
|
||||
Noteworthy updates:
|
||||
clojure 1.10.0, cups 2.2.11, emacs 26.2, gcc 8.3.0, gdb 8.2.1, ghc 8.4.3,
|
||||
gimp 2.10.10, glibc 2.28, gnome 3.28.2, gnupg 2.2.15, go 1.12.1,
|
||||
guile 2.2.4, icecat 60.6.1-guix1, icedtea 3.7.0, inkscape 0.92.4,
|
||||
libreoffice 6.1.5.2, linux-libre 5.0.10, mate 1.22.0, ocaml 4.07.1,
|
||||
octave 5.1.0, openjdk 11.28, python 3.7.0, rust 1.34.0, r 3.6.0,
|
||||
sbcl 1.5.1, shepherd 0.6.0, xfce 4.12.1, xorg-server 1.20.4
|
||||
|
||||
** Programming interfaces
|
||||
*** New ‘this-package’, ‘this-origin’, and ‘this-operating-system’ macros
|
||||
*** The ‘self-native-input?’ field was removed from <package>
|
||||
*** New ‘package-input-rewriting/spec’ procedure for graph rewriting
|
||||
*** New ‘package-closure’ procedure in (guix packages)
|
||||
*** New UI helper modules (guix colors) and (guix deprecation)
|
||||
*** New (gnu build accounts) module to manage /etc/{passwd,shadow,group}
|
||||
*** ‘nix-*’ bindings in (guix store) replaced by ‘store-connection-*’
|
||||
*** Records created by ‘define-record-type*’ report duplicate fields
|
||||
** Noteworthy bug fixes
|
||||
*** ISO images produced by ‘guix system’ are now reproducible bit-for-bit
|
||||
(<https://bugs.gnu.org/35283>)
|
||||
*** ‘guix pack -f squashfs’ produces relative symlinks
|
||||
(<https://bugs.gnu.org/34913>)
|
||||
*** ‘guix package -r something-not-installed’ now raises an error
|
||||
*** Fix multi-threaded miscompilation issue with syntax parameters
|
||||
(<https://bugs.gnu.org/27476>)
|
||||
*** file-systems: Spawn a REPL only when interaction is possible
|
||||
(<https://bugs.gnu.org/23697>)
|
||||
*** ‘guix environment’ supports package transformation options
|
||||
(<https://bugs.gnu.org/33776>)
|
||||
*** ‘guix substitute’ now ignores irrelevant narinfo signatures
|
||||
(<https://bugs.gnu.org/33733>)
|
||||
*** On Guix System, guix-daemon now runs in a UTF-8 locale
|
||||
(<https://bugs.gnu.org/32942>)
|
||||
*** Fix relative file name canonicalization for '--root'
|
||||
(<https://bugs.gnu.org/35271>)
|
||||
*** vm: Do not mount /xchg with "cache=loose"
|
||||
(<https://bugs.gnu.org/33639>)
|
||||
*** build-system/go: Build with a filesystem union of Go dependencies
|
||||
(<https://bugs.gnu.org/33620>)
|
||||
*** 'containerized-operating-system' removes "useless" services
|
||||
(<https://bugs.gnu.org/34211>)
|
||||
** Native language support
|
||||
*** The manual is now fully translated in French and Spanish
|
||||
*** The manual is also partly translated in German and in Simplified Chinese
|
||||
*** Updated translations: da, de, es, fr
|
||||
*** New translations: sv
|
||||
|
||||
* Changes in 0.16.0 (since 0.15.0)
|
||||
|
||||
** Package management
|
||||
@@ -2005,7 +1185,7 @@ zynaddsubfx@3.0.3, zziplib@0.13.69
|
||||
*** ‘guix pack’ now honors package transformation options
|
||||
*** ‘guix package --search’ no longer shows superseded packages
|
||||
(<https://bugs.gnu.org/30566>)
|
||||
*** ‘guix offload test’ reports errors more nicely
|
||||
*** ‘guix offload test’ reports errors more nicely
|
||||
(<https://bugs.gnu.org/28057>)
|
||||
*** postgresql service is started through ‘pg_ctl’
|
||||
(<https://bugs.gnu.org/29992>)
|
||||
@@ -3428,7 +2608,7 @@ zimg@2.5, zlib@1.2.11, znc@1.6.5
|
||||
*** Create home directories once file systems are mounted
|
||||
(<http://bugs.gnu.org/21108>)
|
||||
*** GNU R now builds bit-reproducibly (<https://bugs.gnu.org/25598>)
|
||||
*** The daemon’s default settings are used unless overridden
|
||||
*** The daemon’s default settings are used unless overriden
|
||||
(<https://bugs.gnu.org/20217>)
|
||||
*** ‘guix system’ now supports the common build option ‘--root’
|
||||
(<https://bugs.gnu.org/26271>)
|
||||
@@ -5743,7 +4923,7 @@ Monad” in the manual.
|
||||
|
||||
*** X session is executed from a login shell (<http://bugs.gnu.org/19119>)
|
||||
*** grub.cfg is now a garbage-collector root (<http://bugs.gnu.org/19160>)
|
||||
*** Substituter progress report properly formatted
|
||||
*** Substituter progress report properly formatted
|
||||
(<http://bugs.gnu.org/19313>)
|
||||
*** Document permissions for /gnu/store (<http://bugs.gnu.org/19316>)
|
||||
*** Make sure config.go is newer than config.scm
|
||||
@@ -5999,18 +5179,18 @@ This could cause problems with ancient Linux kernel.
|
||||
*** download: Use the 'SERVER NAME' TLS extension when possible
|
||||
(<http://bugs.gnu.org/18526>)
|
||||
*** libdaemon: Add alternate source URLs (<http://bugs.gnu.org/18639>)
|
||||
*** icu4c: Reinstate RUNPATH on shared libraries
|
||||
*** icu4c: Reinstate RUNPATH on shared libraries
|
||||
(<http://bugs.gnu.org/18695>)
|
||||
*** nss-mdns: Add alternate source URLs (<http://bugs.gnu.org/18704>)
|
||||
*** download: Add "Accept: */*" to the HTTP headers
|
||||
(<http://bugs.gnu.org/18768>)
|
||||
*** guix-register: Do not attempt to create NIX_STORE_DIR
|
||||
*** guix-register: Do not attempt to create NIX_STORE_DIR
|
||||
(<http://bugs.gnu.org/18689>)
|
||||
*** Allow Linux-libre to find our 'modprobe' command
|
||||
(<http://bugs.gnu.org/18525>)
|
||||
*** man-pages: Build sequentially (<http://bugs.gnu.org/18701>)
|
||||
*** Fix intermittent test failures involving GC (<http://bugs.gnu.org/18935>)
|
||||
*** guix import: pypi: Gracefully handle non-existent packages
|
||||
*** guix import: pypi: Gracefully handle non-existent packages
|
||||
(<http://bugs.gnu.org/18831>)
|
||||
*** Make sure the shared library has the '.so' extension
|
||||
(<http://bugs.gnu.org/18521>)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
-*- mode: org -*-
|
||||
|
||||
[[https://www.gnu.org/software/guix/][GNU Guix]] (IPA: /ɡiːks/) is a purely functional package manager, and
|
||||
[[https://www.gnu.org/software/guix/][GNU Guix]] (IPA: /ɡiːks/) is a purely functional package manager, and
|
||||
associated free software distribution, for the [[https://www.gnu.org/gnu/gnu.html][GNU system]]. In addition
|
||||
to standard package management features, Guix supports transactional
|
||||
upgrades and roll-backs, unprivileged package management, per-user
|
||||
@@ -10,20 +10,35 @@ It provides [[https://www.gnu.org/software/guile/][Guile]] Scheme APIs, includin
|
||||
domain-specific languages (EDSLs) to describe how packages are to be
|
||||
built and composed.
|
||||
|
||||
GNU Guix can be used on top of an already-installed GNU/Linux distribution, or
|
||||
it can be used standalone (we call that “Guix System”).
|
||||
A user-land free software distribution for GNU/Linux comes as part of
|
||||
Guix.
|
||||
|
||||
Guix is based on the [[https://nixos.org/nix/][Nix]] package manager.
|
||||
|
||||
|
||||
* Requirements
|
||||
|
||||
If you are building Guix from source, please see the manual for build
|
||||
instructions and requirements, either by running:
|
||||
GNU Guix currently depends on the following packages:
|
||||
|
||||
info -f doc/guix.info "Requirements"
|
||||
- [[https://gnu.org/software/guile/][GNU Guile 2.2.x or 2.0.x]], version 2.0.13 or later
|
||||
- [[https://notabug.org/cwebber/guile-gcrypt][Guile-Gcrypt]] 0.1.0 or later
|
||||
- [[https://www.gnu.org/software/make/][GNU Make]]
|
||||
- [[https://www.gnutls.org][GnuTLS]] compiled with guile support enabled
|
||||
- [[https://notabug.org/guile-sqlite3/guile-sqlite3][Guile-SQLite3]], version 0.1.0 or later
|
||||
- [[https://gitlab.com/guile-git/guile-git][Guile-Git]]
|
||||
- [[http://www.zlib.net/][zlib]]
|
||||
- [[https://savannah.nongnu.org/projects/guile-json/][Guile-JSON]]
|
||||
|
||||
or by checking the [[https://guix.gnu.org/manual/en/html_node/Requirements.html][web copy of the manual]].
|
||||
Unless `--disable-daemon' was passed, the following packages are needed:
|
||||
|
||||
- [[https://gnupg.org/][GNU libgcrypt]]
|
||||
- [[https://sqlite.org/][SQLite 3]]
|
||||
- [[https://gcc.gnu.org][GCC's g++]]
|
||||
- optionally [[http://www.bzip.org][libbz2]]
|
||||
|
||||
When `--disable-daemon' was passed, you instead need the following:
|
||||
|
||||
- [[https://nixos.org/nix/][Nix]]
|
||||
|
||||
* Installation
|
||||
|
||||
@@ -31,16 +46,26 @@ See the manual for the installation instructions, either by running
|
||||
|
||||
info -f doc/guix.info "Installation"
|
||||
|
||||
or by checking the [[https://guix.gnu.org/manual/en/html_node/Installation.html][web copy of the manual]].
|
||||
or by checking the [[https://www.gnu.org/software/guix/manual/guix.html#Installation][web copy of the manual]].
|
||||
|
||||
* Building from Git
|
||||
For information on installation from a Git checkout, please see the section
|
||||
"Building from Git" in the manual.
|
||||
|
||||
For information on building Guix from a Git checkout, please see the relevant
|
||||
section in the manual, either by running
|
||||
* Installing Guix from Guix
|
||||
|
||||
info -f doc/guix.info "Building from Git"
|
||||
You can re-build and re-install Guix using a system that already runs Guix.
|
||||
To do so:
|
||||
|
||||
or by checking the [[https://guix.gnu.org/manual/en/html_node/Building-from-Git.html][web_copy of the manual]].
|
||||
- Start a shell with the development environment for Guix:
|
||||
|
||||
guix environment guix
|
||||
|
||||
- Re-run the 'configure' script passing it the option
|
||||
'--localstatedir=/somewhere', where '/somewhere' is the 'localstatedir'
|
||||
value of the currently installed Guix (failing to do that would lead the
|
||||
new Guix to consider the store to be empty!).
|
||||
|
||||
- Run "make", "make check", and "make install".
|
||||
|
||||
* How It Works
|
||||
|
||||
@@ -50,19 +75,39 @@ the promise of a build; it is stored as a text file under
|
||||
`derivation' primitive, as well as higher-level wrappers such as
|
||||
`build-expression->derivation'.
|
||||
|
||||
Guix does remote procedure calls (RPCs) to the build daemon (the =guix-daemon=
|
||||
command), which in turn performs builds and accesses to the store on its
|
||||
behalf. The RPCs are implemented in the (guix store) module.
|
||||
Guix does remote procedure calls (RPCs) to the Guix or Nix daemon (the
|
||||
=guix-daemon= or =nix-daemon= command), which in turn performs builds
|
||||
and accesses to the Nix store on its behalf. The RPCs are implemented
|
||||
in the (guix store) module.
|
||||
|
||||
* Installing Guix as non-root
|
||||
|
||||
The Guix daemon allows software builds to be performed under alternate
|
||||
user accounts, which are normally created specifically for this
|
||||
purpose. For instance, you may have a pool of accounts in the
|
||||
=guixbuild= group, and then you can instruct =guix-daemon= to use them
|
||||
like this:
|
||||
|
||||
$ guix-daemon --build-users-group=guixbuild
|
||||
|
||||
However, unless it is run as root, =guix-daemon= cannot switch users.
|
||||
In that case, it falls back to using a setuid-root helper program call
|
||||
=nix-setuid-helper=. That program is not setuid-root by default when
|
||||
you install it; instead you should run a command along these lines
|
||||
(assuming Guix is installed under /usr/local):
|
||||
|
||||
# chown root.root /usr/local/libexec/nix-setuid-helper
|
||||
# chmod 4755 /usr/local/libexec/nix-setuid-helper
|
||||
|
||||
* Contact
|
||||
|
||||
GNU Guix is hosted at https://codeberg.org/guix/guix/.
|
||||
GNU Guix is hosted at https://savannah.gnu.org/projects/guix/.
|
||||
|
||||
Please email mailto:help-guix@gnu.org for questions. Bug reports should be
|
||||
submitted via https://codeberg.org/guix/guix/issues/. Email
|
||||
mailto:gnu-system-discuss@gnu.org for general issues regarding the GNU system.
|
||||
Please email <bug-guix@gnu.org> for bug reports or questions regarding
|
||||
Guix and its distribution; email <gnu-system-discuss@gnu.org> for
|
||||
general issues regarding the GNU system.
|
||||
|
||||
Join #guix on irc.libera.chat.
|
||||
Join #guix on irc.freenode.net.
|
||||
|
||||
* Guix & Nix
|
||||
|
||||
@@ -108,18 +153,3 @@ but exposes all the API as Scheme.
|
||||
- The [[https://www.gnu.org/s/gsrc/][GNU Source Release Collection]] (GSRC) is a user-land software
|
||||
distribution; unlike Guix, it relies on core tools available on the
|
||||
host system
|
||||
|
||||
* Copyright Notices
|
||||
|
||||
GNU Guix is made available under the GNU GPL version 3 or later license, and
|
||||
authors retain their copyright. For copyright notices, we adhere to the
|
||||
guidance documented in (info "(maintain) Copyright Notices"), and explicitly
|
||||
allow ranges instead of individual years. Here's an example of the preferred
|
||||
style used for copyright notices in source file headers:
|
||||
|
||||
#+begin_comment
|
||||
Copyright © 2019-2023, 2025 Your Name <your@email.com>
|
||||
#+end_comment
|
||||
|
||||
Meaning there were copyright-able changes made for the years 2019, 2020, 2021,
|
||||
2022, 2023 and 2025.
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
README
|
||||
@@ -23,7 +23,7 @@ There will be a few 0.x releases by then to give the new features more
|
||||
exposure and testing.
|
||||
|
||||
You're welcome to discuss this road map on guix-devel@gnu.org or #guix on
|
||||
the Libera Chat IRC network!
|
||||
Freenode!
|
||||
|
||||
* Features scheduled for 1.0
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ infrastructure help:
|
||||
Alen Skondro <askondro@gmail.com>
|
||||
Jan Synáček <jan.synacek@gmail.com>
|
||||
Matthias Wachs <wachs@net.in.tum.de>
|
||||
Christine Lemmer-Webber <cwebber@dustycloud.org>
|
||||
Christopher Allan Webber <cwebber@dustycloud.org>
|
||||
Philip Woods <elzairthesorcerer@gmail.com>
|
||||
|
||||
GNU Guix also includes non-software works. Thanks to the following
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
#+STARTUP: content hidestars
|
||||
|
||||
Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
|
||||
Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
@@ -84,41 +83,3 @@ Problems include that current glibc releases do not build on GNU/Hurd.
|
||||
In addition, there haven’t been stable releases of GNU Mach, MiG, and
|
||||
Hurd, which would be a pre-condition.
|
||||
|
||||
* Installer
|
||||
** Fix impossibility to restart on error after cow-store has been started
|
||||
See https://lists.gnu.org/archive/html/guix-devel/2018-12/msg00161.html.
|
||||
- Force reboot upon installer failure
|
||||
- Unshare the installer process
|
||||
- Run the installer process in a separate namespace
|
||||
** Partitioning
|
||||
*** Add RAID support
|
||||
*** Add more partitioning schemes
|
||||
The actual schemes are taken from Debian Installer but some are not
|
||||
implemented yet: like "Separate partitions for /home /var and /tmp".
|
||||
*** Replace wait page "Partition formatting is in progress, please wait"
|
||||
Create a new waiting page describing what's being done:
|
||||
|
||||
[ 20% ]
|
||||
Running mkfs.ext4 on /dev/sda2 ...
|
||||
|
||||
[ 40% ]
|
||||
Running mkfs.ext4 on /dev/sda3 ...
|
||||
*** Add a confirmation page before formatting/partitioning
|
||||
** Desktop environments
|
||||
*** Allow for no desktop environments
|
||||
Propose to choose between "headless server" and "lightweight X11" in a new
|
||||
page.
|
||||
*** Add services selection feature
|
||||
Add a services page to the configuration. Ask for services to be installed
|
||||
like SSH, bluetooth, TLP in a checkbox list?
|
||||
** Locale and keymap
|
||||
*** Try to guess user locale and keymap by probing BIOS or HW (dmidecode)
|
||||
** Timezone
|
||||
*** Regroup everything in one single page
|
||||
Under the form:
|
||||
(UTC + 1) Europe/Paris
|
||||
(UTC + 2) Africa/Cairo
|
||||
...
|
||||
** Display issue
|
||||
*** Investigate display issue described here:
|
||||
https://lists.gnu.org/archive/html/guix-devel/2019-01/msg00305.html
|
||||
|
||||
@@ -2,32 +2,4 @@
|
||||
# Create the build system.
|
||||
|
||||
set -e -x
|
||||
|
||||
# Generate stubs for translations.
|
||||
langs=`find po/doc -type f -name 'guix-manual*.po' \
|
||||
| sed -e 's,.*/guix-manual\.,,;s,\.po$,,'`
|
||||
for lang in ${langs}; do
|
||||
if [ ! -e "doc/guix.${lang}.texi" ]; then
|
||||
echo "@setfilename guix.${lang}.info" > "doc/guix.${lang}.texi"
|
||||
echo "@include version-${lang}.texi" >> "doc/guix.${lang}.texi"
|
||||
# Ensure .po file is newer.
|
||||
touch "po/doc/guix-manual.${lang}.po"
|
||||
fi
|
||||
done
|
||||
langs=`find po/doc -type f -name 'guix-cookbook*.po' \
|
||||
| sed -e 's,.*/guix-cookbook\.,,;s,\.po$,,'`
|
||||
for lang in ${langs}; do
|
||||
if [ ! -e "doc/guix-cookbook.${lang}.texi" ]; then
|
||||
echo "@setfilename guix-cookbook.${lang}.info" > "doc/guix-cookbook.${lang}.texi"
|
||||
# Ensure .po file is newer.
|
||||
touch "po/doc/guix-cookbook.${lang}.po"
|
||||
fi
|
||||
done
|
||||
|
||||
autoreconf -vfi
|
||||
|
||||
# Replace Automake's build-aux/mdate-sh with build-aux/mdate-from-git, our
|
||||
# own, reproducible version.
|
||||
chmod +w build-aux/mdate-sh
|
||||
rm -f build-aux/mdate-sh
|
||||
ln -s mdate-from-git.scm build-aux/mdate-sh
|
||||
exec autoreconf -vfi
|
||||
|
||||
+271
-176
@@ -1,5 +1,5 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2014, 2016-2021, 2025 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2014, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -22,7 +22,7 @@
|
||||
#:use-module (guix ui)
|
||||
#:use-module (guix config)
|
||||
#:use-module (guix modules)
|
||||
#:use-module ((guix self) #:select (make-config.scm))
|
||||
#:use-module (guix build-system gnu)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:use-module (srfi srfi-19)
|
||||
#:use-module (srfi srfi-34)
|
||||
@@ -46,6 +46,153 @@
|
||||
;;;
|
||||
;;; Code:
|
||||
|
||||
|
||||
;;;
|
||||
;;; Generating (guix config).
|
||||
;;;
|
||||
;;; This is copied from (guix self) because we cannot assume (guix self) is
|
||||
;;; available at this point.
|
||||
;;;
|
||||
|
||||
(define %dependency-variables
|
||||
;; (guix config) variables corresponding to dependencies.
|
||||
'(%libgcrypt %libz %xz %gzip %bzip2))
|
||||
|
||||
(define %persona-variables
|
||||
;; (guix config) variables that define Guix's persona.
|
||||
'(%guix-package-name
|
||||
%guix-version
|
||||
%guix-bug-report-address
|
||||
%guix-home-page-url))
|
||||
|
||||
(define %config-variables
|
||||
;; (guix config) variables corresponding to Guix configuration.
|
||||
(letrec-syntax ((variables (syntax-rules ()
|
||||
((_)
|
||||
'())
|
||||
((_ variable rest ...)
|
||||
(cons `(variable . ,variable)
|
||||
(variables rest ...))))))
|
||||
(variables %localstatedir %storedir %sysconfdir %system)))
|
||||
|
||||
(define* (make-config.scm #:key zlib gzip xz bzip2
|
||||
(package-name "GNU Guix")
|
||||
(package-version "0")
|
||||
(bug-report-address "bug-guix@gnu.org")
|
||||
(home-page-url "https://gnu.org/s/guix"))
|
||||
|
||||
;; Hack so that Geiser is not confused.
|
||||
(define defmod 'define-module)
|
||||
|
||||
(scheme-file "config.scm"
|
||||
#~(begin
|
||||
(#$defmod (guix config)
|
||||
#:export (%guix-package-name
|
||||
%guix-version
|
||||
%guix-bug-report-address
|
||||
%guix-home-page-url
|
||||
%store-directory
|
||||
%state-directory
|
||||
%store-database-directory
|
||||
%config-directory
|
||||
%libz
|
||||
%gzip
|
||||
%bzip2
|
||||
%xz))
|
||||
|
||||
;; XXX: Work around <http://bugs.gnu.org/15602>.
|
||||
(eval-when (expand load eval)
|
||||
#$@(map (match-lambda
|
||||
((name . value)
|
||||
#~(define-public #$name #$value)))
|
||||
%config-variables)
|
||||
|
||||
(define %store-directory
|
||||
(or (and=> (getenv "NIX_STORE_DIR") canonicalize-path)
|
||||
%storedir))
|
||||
|
||||
(define %state-directory
|
||||
;; This must match `NIX_STATE_DIR' as defined in
|
||||
;; `nix/local.mk'.
|
||||
(or (getenv "NIX_STATE_DIR")
|
||||
(string-append %localstatedir "/guix")))
|
||||
|
||||
(define %store-database-directory
|
||||
(or (getenv "NIX_DB_DIR")
|
||||
(string-append %state-directory "/db")))
|
||||
|
||||
(define %config-directory
|
||||
;; This must match `GUIX_CONFIGURATION_DIRECTORY' as
|
||||
;; defined in `nix/local.mk'.
|
||||
(or (getenv "GUIX_CONFIGURATION_DIRECTORY")
|
||||
(string-append %sysconfdir "/guix")))
|
||||
|
||||
(define %guix-package-name #$package-name)
|
||||
(define %guix-version #$package-version)
|
||||
(define %guix-bug-report-address #$bug-report-address)
|
||||
(define %guix-home-page-url #$home-page-url)
|
||||
|
||||
(define %gzip
|
||||
#+(and gzip (file-append gzip "/bin/gzip")))
|
||||
(define %bzip2
|
||||
#+(and bzip2 (file-append bzip2 "/bin/bzip2")))
|
||||
(define %xz
|
||||
#+(and xz (file-append xz "/bin/xz")))
|
||||
|
||||
(define %libz
|
||||
#+(and zlib
|
||||
(file-append zlib "/lib/libz")))))))
|
||||
|
||||
|
||||
;;;
|
||||
;;; 'gexp->script'.
|
||||
;;;
|
||||
;;; This is our own variant of 'gexp->script' with an extra #:module-path
|
||||
;;; parameter, which was unavailable in (guix gexp) until commit
|
||||
;;; 1ae16033f34cebe802023922436883867010850f (March 2018.)
|
||||
;;;
|
||||
|
||||
(define (load-path-expression modules path)
|
||||
"Return as a monadic value a gexp that sets '%load-path' and
|
||||
'%load-compiled-path' to point to MODULES, a list of module names. MODULES
|
||||
are searched for in PATH."
|
||||
(mlet %store-monad ((modules (imported-modules modules
|
||||
#:module-path path))
|
||||
(compiled (compiled-modules modules
|
||||
#:module-path path)))
|
||||
(return (gexp (eval-when (expand load eval)
|
||||
(set! %load-path
|
||||
(cons (ungexp modules) %load-path))
|
||||
(set! %load-compiled-path
|
||||
(cons (ungexp compiled)
|
||||
%load-compiled-path)))))))
|
||||
|
||||
(define* (gexp->script name exp
|
||||
#:key (guile (default-guile))
|
||||
(module-path %load-path))
|
||||
"Return an executable script NAME that runs EXP using GUILE, with EXP's
|
||||
imported modules in its search path."
|
||||
(mlet %store-monad ((set-load-path
|
||||
(load-path-expression (gexp-modules exp)
|
||||
module-path)))
|
||||
(gexp->derivation name
|
||||
(gexp
|
||||
(call-with-output-file (ungexp output)
|
||||
(lambda (port)
|
||||
;; Note: that makes a long shebang. When the store
|
||||
;; is /gnu/store, that fits within the 128-byte
|
||||
;; limit imposed by Linux, but that may go beyond
|
||||
;; when running tests.
|
||||
(format port
|
||||
"#!~a/bin/guile --no-auto-compile~%!#~%"
|
||||
(ungexp guile))
|
||||
|
||||
(write '(ungexp set-load-path) port)
|
||||
(write '(ungexp exp) port)
|
||||
(chmod port #o555))))
|
||||
#:module-path module-path)))
|
||||
|
||||
|
||||
(define (date-version-string)
|
||||
"Return the current date and hour in UTC timezone, for use as a poor
|
||||
person's version identifier."
|
||||
@@ -53,27 +200,61 @@ person's version identifier."
|
||||
(date->string (current-date 0) "~Y~m~d.~H"))
|
||||
|
||||
(define guile-gcrypt
|
||||
;; The 'guile-gcrypt' package from the host Guix.
|
||||
;; The host Guix may or may not have 'guile-gcrypt', which was introduced in
|
||||
;; August 2018. If it has it, it's at least version 0.1.0, which is good
|
||||
;; enough. If it doesn't, specify our own package because the target Guix
|
||||
;; requires it.
|
||||
(match (find-best-packages-by-name "guile-gcrypt" #f)
|
||||
(()
|
||||
(package
|
||||
(name "guile-gcrypt")
|
||||
(version "0.1.0")
|
||||
(home-page "https://notabug.org/cwebber/guile-gcrypt")
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (string-append home-page "/archive/v" version ".tar.gz"))
|
||||
(sha256
|
||||
(base32
|
||||
"1gir7ifknbmbvjlql5j6wzk7bkb5lnmq80q59ngz43hhpclrk5k3"))
|
||||
(file-name (string-append name "-" version ".tar.gz"))))
|
||||
(build-system gnu-build-system)
|
||||
(arguments
|
||||
;; The 'bootstrap' phase appeared in 'core-updates', which was merged
|
||||
;; into 'master' ca. June 2018.
|
||||
'(#:phases (modify-phases %standard-phases
|
||||
(delete 'bootstrap)
|
||||
(add-before 'configure 'bootstrap
|
||||
(lambda _
|
||||
(unless (zero? (system* "autoreconf" "-vfi"))
|
||||
(error "autoreconf failed"))
|
||||
#t)))))
|
||||
(native-inputs
|
||||
`(("pkg-config" ,(specification->package "pkg-config"))
|
||||
("autoconf" ,(specification->package "autoconf"))
|
||||
("automake" ,(specification->package "automake"))
|
||||
("texinfo" ,(specification->package "texinfo"))))
|
||||
(inputs
|
||||
`(("guile" ,(specification->package "guile"))
|
||||
("libgcrypt" ,(specification->package "libgcrypt"))))
|
||||
(synopsis "Cryptography library for Guile using Libgcrypt")
|
||||
(description
|
||||
"Guile-Gcrypt provides a Guile 2.x interface to a subset of the
|
||||
GNU Libgcrypt crytographic library. It provides modules for cryptographic
|
||||
hash functions, message authentication codes (MAC), public-key cryptography,
|
||||
strong randomness, and more. It is implemented using the foreign function
|
||||
interface (FFI) of Guile.")
|
||||
(license #f))) ;license:gpl3+
|
||||
((package . _)
|
||||
package)))
|
||||
|
||||
(define* (build-program source version
|
||||
#:optional (guile-version (effective-version))
|
||||
#:key (pull-version 0) (channel-metadata #f)
|
||||
built-in-builders)
|
||||
"Return a program that computes the derivation to build Guix from SOURCE.
|
||||
If BUILT-IN-BUILDERS is provided, it should be a list of
|
||||
strings and this will be used instead of the builtin builders provided by the
|
||||
build daemon, from within the generated build program."
|
||||
#:key (pull-version 0))
|
||||
"Return a program that computes the derivation to build Guix from SOURCE."
|
||||
(define select?
|
||||
;; Select every module but (guix config) and non-Guix modules.
|
||||
;; Also exclude (guix channels): it is autoloaded by (guix describe), but
|
||||
;; only for peripheral functionality.
|
||||
(match-lambda
|
||||
(('guix 'config) #f)
|
||||
(('guix 'channels) #f)
|
||||
(('guix 'build 'download) #f) ;autoloaded by (guix download)
|
||||
(('guix _ ...) #t)
|
||||
(('gnu _ ...) #t)
|
||||
(_ #f)))
|
||||
@@ -111,10 +292,10 @@ build daemon, from within the generated build program."
|
||||
#~(begin
|
||||
(use-modules (ice-9 match))
|
||||
|
||||
;; To avoid lots of readlink calls
|
||||
(fluid-set! %file-port-name-canonicalization #f)
|
||||
|
||||
(eval-when (expand load eval)
|
||||
;; Don't augment '%load-path'.
|
||||
(unsetenv "GUIX_PACKAGE_PATH")
|
||||
|
||||
;; (gnu packages …) modules are going to be looked up
|
||||
;; under SOURCE. (guix config) is looked up in FRONT.
|
||||
(match (command-line)
|
||||
@@ -131,24 +312,37 @@ build daemon, from within the generated build program."
|
||||
|
||||
;; Only load Guile-Gcrypt, our own modules, or those
|
||||
;; of Guile.
|
||||
(set! %load-compiled-path
|
||||
(cons (string-append #$guile-gcrypt "/lib/guile/"
|
||||
(effective-version)
|
||||
"/site-ccache")
|
||||
%load-compiled-path))
|
||||
|
||||
;; Disable position recording to save time and space
|
||||
;; when loading the package modules.
|
||||
(read-disable 'positions))
|
||||
(match %load-compiled-path
|
||||
((front _ ... sys1 sys2)
|
||||
(unless (string-prefix? #$guile-gcrypt front)
|
||||
(set! %load-compiled-path
|
||||
(list (string-append #$guile-gcrypt
|
||||
"/lib/guile/"
|
||||
(effective-version)
|
||||
"/site-ccache")
|
||||
front sys1 sys2))))))
|
||||
|
||||
(use-modules (guix store)
|
||||
(guix self)
|
||||
(guix derivations)
|
||||
(srfi srfi-1))
|
||||
|
||||
(define (spin system)
|
||||
(define spin
|
||||
(circular-list "-" "\\" "|" "/" "-" "\\" "|" "/"))
|
||||
|
||||
(format (current-error-port)
|
||||
"Computing Guix derivation for '~a'... "
|
||||
system)
|
||||
(let loop ((spin spin))
|
||||
(display (string-append "\b" (car spin))
|
||||
(current-error-port))
|
||||
(force-output (current-error-port))
|
||||
(sleep 1)
|
||||
(loop (cdr spin))))
|
||||
|
||||
(match (command-line)
|
||||
((_ source system version protocol-version
|
||||
build-output)
|
||||
((_ source system version protocol-version)
|
||||
;; The current input port normally wraps a file
|
||||
;; descriptor connected to the daemon, or it is
|
||||
;; connected to /dev/null. In the former case, reuse
|
||||
@@ -157,190 +351,91 @@ build daemon, from within the generated build program."
|
||||
;; case, attempt to open a new connection.
|
||||
(let* ((proto (string->number protocol-version))
|
||||
(store (if (integer? proto)
|
||||
(port->connection
|
||||
(duplicate-port
|
||||
(current-input-port)
|
||||
"w+0")
|
||||
#:version proto
|
||||
#:built-in-builders
|
||||
'#$built-in-builders)
|
||||
(open-connection
|
||||
#:built-in-builders
|
||||
'#$built-in-builders)))
|
||||
(sock (socket AF_UNIX SOCK_STREAM 0)))
|
||||
;; Connect to BUILD-OUTPUT and send it the raw
|
||||
;; build output.
|
||||
(connect sock AF_UNIX build-output)
|
||||
|
||||
(when (integer? proto)
|
||||
;; port->connection doesn't setup buffering, so
|
||||
;; do this here
|
||||
(setvbuf (store-connection-socket store)
|
||||
'block
|
||||
%default-store-connection-buffer-size))
|
||||
(port->connection (duplicate-port
|
||||
(current-input-port)
|
||||
"w+0")
|
||||
#:version proto)
|
||||
(open-connection))))
|
||||
(call-with-new-thread
|
||||
(lambda ()
|
||||
(spin system)))
|
||||
|
||||
(display
|
||||
(and=>
|
||||
;; Silence autoload warnings and the likes.
|
||||
(parameterize ((current-warning-port
|
||||
(%make-void-port "w"))
|
||||
(current-build-output-port sock))
|
||||
(run-with-store store
|
||||
(guix-derivation source version
|
||||
#$guile-version
|
||||
#:channel-metadata
|
||||
'#$channel-metadata
|
||||
#:pull-version
|
||||
#$pull-version)
|
||||
#:system system))
|
||||
(run-with-store store
|
||||
(guix-derivation source version
|
||||
#$guile-version
|
||||
#:pull-version
|
||||
#$pull-version)
|
||||
#:system system)
|
||||
derivation-file-name))))))
|
||||
#:module-path (list source))))
|
||||
|
||||
(define (proxy input output)
|
||||
"Dump the contents of INPUT to OUTPUT until EOF is reached on INPUT.
|
||||
Display a spinner when nothing happens."
|
||||
(define spin
|
||||
(circular-list "-" "\\" "|" "/" "-" "\\" "|" "/"))
|
||||
|
||||
(setvbuf input 'block 16384)
|
||||
(let loop ((spin spin))
|
||||
(match (select (list input) '() '() 1)
|
||||
((() () ())
|
||||
(when (isatty? (current-error-port))
|
||||
(display (string-append "\b" (car spin))
|
||||
(current-error-port))
|
||||
(force-output (current-error-port)))
|
||||
(loop (cdr spin)))
|
||||
(((_) () ())
|
||||
;; Read from INPUT as much as can be read without blocking.
|
||||
(let ((bv (get-bytevector-some input)))
|
||||
(unless (eof-object? bv)
|
||||
(put-bytevector output bv)
|
||||
(loop spin)))))))
|
||||
|
||||
(define (call-with-clean-environment thunk)
|
||||
(let ((env (environ)))
|
||||
(dynamic-wind
|
||||
(lambda ()
|
||||
(environ '()))
|
||||
thunk
|
||||
(lambda ()
|
||||
(environ env)))))
|
||||
|
||||
(define-syntax-rule (with-clean-environment exp ...)
|
||||
"Evaluate EXP in a context where zero environment variables are defined."
|
||||
(call-with-clean-environment (lambda () exp ...)))
|
||||
|
||||
;; The procedure below is our return value.
|
||||
(define* (build source
|
||||
#:key verbose?
|
||||
(version (date-version-string)) channel-metadata
|
||||
system
|
||||
#:key verbose? (version (date-version-string)) system
|
||||
(pull-version 0)
|
||||
|
||||
;; For the standalone Guix, default to Guile 3.0. For old
|
||||
;; For the standalone Guix, default to Guile 2.2. For old
|
||||
;; versions of 'guix pull' (pre-0.15.0), we have to use the
|
||||
;; same Guile as the current one.
|
||||
(guile-version (if (> pull-version 0)
|
||||
"3.0"
|
||||
"2.2"
|
||||
(effective-version)))
|
||||
built-in-builders
|
||||
|
||||
#:allow-other-keys
|
||||
#:rest rest)
|
||||
"Return a derivation that unpacks SOURCE into STORE and compiles Scheme
|
||||
files."
|
||||
;; Avoid lots of readlink calls
|
||||
(fluid-set! %file-port-name-canonicalization #f)
|
||||
|
||||
;; Build the build program and then use it as a trampoline to build from
|
||||
;; SOURCE.
|
||||
(mlet %store-monad ((build (build-program source version guile-version
|
||||
#:channel-metadata channel-metadata
|
||||
#:pull-version pull-version
|
||||
#:built-in-builders
|
||||
built-in-builders))
|
||||
#:pull-version pull-version))
|
||||
(system (if system (return system) (current-system)))
|
||||
(home -> (getenv "HOME"))
|
||||
|
||||
;; Note: Use the deprecated names here because the
|
||||
;; caller might be Guix <= 0.16.0.
|
||||
(port ((store-lift nix-server-socket)))
|
||||
(major ((store-lift nix-server-major-version)))
|
||||
(minor ((store-lift nix-server-minor-version))))
|
||||
(mbegin %store-monad
|
||||
;; Before 'with-build-handler' was implemented and used, we had to
|
||||
;; explicitly call 'show-what-to-build*'.
|
||||
(munless (module-defined? (resolve-module '(guix store))
|
||||
'with-build-handler)
|
||||
(show-what-to-build* (list build)))
|
||||
(show-what-to-build* (list build))
|
||||
(built-derivations (list build))
|
||||
|
||||
;; Use the port beneath the current store as the stdin of BUILD. This
|
||||
;; way, we know 'open-pipe*' will not close it on 'exec'. If PORT is
|
||||
;; not a file port (e.g., it's an SSH channel), then the subprocess's
|
||||
;; stdin will actually be /dev/null.
|
||||
(let* ((sock (socket AF_UNIX SOCK_STREAM 0))
|
||||
(node (let ((file (string-append (or (getenv "TMPDIR") "/tmp")
|
||||
"/guix-build-output-"
|
||||
(number->string (getpid)))))
|
||||
(bind sock AF_UNIX file)
|
||||
(listen sock 1)
|
||||
file))
|
||||
(pipe (with-input-from-port port
|
||||
(let* ((pipe (with-input-from-port port
|
||||
(lambda ()
|
||||
;; Make sure BUILD is not influenced by
|
||||
;; $GUILE_LOAD_PATH & co.
|
||||
(with-clean-environment
|
||||
(setenv "GUILE_WARN_DEPRECATED" "no") ;be quiet and drive
|
||||
(setenv "COLUMNS" "120") ;show wider backtraces
|
||||
(when home
|
||||
;; Inherit HOME so that 'xdg-directory' works.
|
||||
(setenv "HOME" home))
|
||||
(open-pipe* OPEN_READ
|
||||
(derivation->output-path build)
|
||||
source system version
|
||||
(if (file-port? port)
|
||||
(number->string
|
||||
(logior major minor))
|
||||
"none")
|
||||
node))))))
|
||||
(format (current-error-port) "Computing Guix derivation for '~a'... "
|
||||
system)
|
||||
|
||||
;; Wait for a connection on SOCK and proxy build output so it can be
|
||||
;; processed according to the settings currently in effect (build
|
||||
;; traces, verbosity level, and so on).
|
||||
(match (accept sock)
|
||||
((port . _)
|
||||
(close-port sock)
|
||||
(delete-file node)
|
||||
(proxy port (current-build-output-port))))
|
||||
|
||||
;; Now that the build output connection was closed, read the result, a
|
||||
;; derivation file name, from PIPE.
|
||||
(let ((str (get-string-all pipe))
|
||||
(status (close-pipe pipe)))
|
||||
(match str
|
||||
((? eof-object?)
|
||||
(error "build program failed" (list build status)))
|
||||
((? derivation-path? drv)
|
||||
(mbegin %store-monad
|
||||
(return (newline (current-error-port)))
|
||||
((store-lift add-temp-root) drv)
|
||||
(return (read-derivation-from-file drv))))
|
||||
("#f"
|
||||
;; Unsupported PULL-VERSION.
|
||||
(return #f))
|
||||
((? string? str)
|
||||
(raise (condition
|
||||
(&message
|
||||
(message (format #f "You found a bug: the program '~a'
|
||||
(setenv "GUILE_WARN_DEPRECATED" "no") ;be quiet and drive
|
||||
(open-pipe* OPEN_READ
|
||||
(derivation->output-path build)
|
||||
source system version
|
||||
(if (file-port? port)
|
||||
(number->string
|
||||
(logior major minor))
|
||||
"none")))))
|
||||
(str (get-string-all pipe))
|
||||
(status (close-pipe pipe)))
|
||||
(match str
|
||||
((? eof-object?)
|
||||
(error "build program failed" (list build status)))
|
||||
((? derivation-path? drv)
|
||||
(mbegin %store-monad
|
||||
(return (newline (current-output-port)))
|
||||
((store-lift add-temp-root) drv)
|
||||
(return (read-derivation-from-file drv))))
|
||||
("#f"
|
||||
;; Unsupported PULL-VERSION.
|
||||
(return #f))
|
||||
((? string? str)
|
||||
(raise (condition
|
||||
(&message
|
||||
(message (format #f "You found a bug: the program '~a'
|
||||
failed to compute the derivation for Guix (version: ~s; system: ~s;
|
||||
host version: ~s; pull-version: ~s).
|
||||
Please report the COMPLETE output above to <~a>.~%"
|
||||
(derivation->output-path build)
|
||||
version system %guix-version pull-version
|
||||
%guix-bug-report-address))))))))))))
|
||||
Please report it by email to <~a>.~%"
|
||||
(derivation->output-path build)
|
||||
version system %guix-version pull-version
|
||||
%guix-bug-report-address)))))))))))
|
||||
|
||||
;; This file is loaded by 'guix pull'; return it the build procedure.
|
||||
build
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018 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/>.
|
||||
|
||||
;;;
|
||||
;;; Check whether important binaries are available.
|
||||
;;;
|
||||
|
||||
(use-modules (guix store)
|
||||
(guix grafts)
|
||||
(guix packages)
|
||||
(guix derivations)
|
||||
(gnu packages emacs)
|
||||
(gnu packages make-bootstrap)
|
||||
(srfi srfi-1)
|
||||
(srfi srfi-26)
|
||||
(ice-9 format))
|
||||
|
||||
(with-store store
|
||||
(parameterize ((%graft? #f))
|
||||
(let* ((native (append-map (lambda (system)
|
||||
(map (cut package-derivation store <> system)
|
||||
(list %bootstrap-tarballs emacs)))
|
||||
%hydra-supported-systems))
|
||||
(cross (map (cut package-cross-derivation store
|
||||
%bootstrap-tarballs <>)
|
||||
'("mips64el-linux-gnu"
|
||||
"arm-linux-gnueabihf")))
|
||||
(total (append native cross)))
|
||||
|
||||
(set-build-options store
|
||||
#:use-substitutes? #t
|
||||
#:substitute-urls %default-substitute-urls)
|
||||
(let* ((total (map derivation->output-path total))
|
||||
(available (substitutable-paths store total))
|
||||
(missing (lset-difference string=? total available)))
|
||||
(if (null? missing)
|
||||
(format (current-error-port)
|
||||
"~a packages found substitutable on~{ ~a~}~%"
|
||||
(length total) %hydra-supported-systems)
|
||||
(format (current-error-port)
|
||||
"~a packages are not substitutable:~%~{ ~a~%~}~%"
|
||||
(length missing) missing))
|
||||
(exit (null? missing))))))
|
||||
@@ -1,82 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2020 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/>.
|
||||
|
||||
;;;
|
||||
;;; Validate 'etc/news.scm'.
|
||||
;;;
|
||||
|
||||
(use-modules (git)
|
||||
(guix git)
|
||||
(guix ui)
|
||||
(guix channels)
|
||||
(srfi srfi-26)
|
||||
(ice-9 match))
|
||||
|
||||
;; XXX: These two things are currently private.
|
||||
(define read-channel-news (@@ (guix channels) read-channel-news))
|
||||
(define channel-news-entries (cut struct-ref <> 0))
|
||||
|
||||
(define (all-the-news directory)
|
||||
"Return the <channel-news> read from DIRECTORY, a checkout of the 'guix'
|
||||
channel."
|
||||
(call-with-input-file (string-append directory "/etc/news.scm")
|
||||
read-channel-news))
|
||||
|
||||
(define (validate-texinfo str type language)
|
||||
"Parse STR as a Texinfo fragment and raise an error if that fails."
|
||||
(catch #t
|
||||
(lambda ()
|
||||
(texi->plain-text str))
|
||||
(lambda (key . args)
|
||||
(print-exception (current-error-port) #f key args)
|
||||
(report-error (G_ "the Texinfo snippet below is invalid (~a, ~a):~%")
|
||||
type language)
|
||||
(display str (current-error-port))
|
||||
(exit 1))))
|
||||
|
||||
(define (validate-news-entry repository entry)
|
||||
"Validate ENTRY, a <channel-news-entry>, making sure it refers to an
|
||||
existent commit of REPOSITORY and contains only valid Texinfo."
|
||||
(catch 'git-error
|
||||
(lambda ()
|
||||
(let ((commit (commit-lookup repository
|
||||
(string->oid
|
||||
(channel-news-entry-commit entry)))))
|
||||
(for-each (match-lambda
|
||||
((language . title)
|
||||
(validate-texinfo title 'title language)))
|
||||
(channel-news-entry-title entry))
|
||||
(for-each (match-lambda
|
||||
((language . body)
|
||||
(validate-texinfo body 'body language)))
|
||||
(channel-news-entry-body entry))))
|
||||
(lambda (key error . rest)
|
||||
(if (= GIT_ENOTFOUND (git-error-code error))
|
||||
(leave (G_ "commit '~a' of entry '~a' does not exist~%")
|
||||
(channel-news-entry-commit entry)
|
||||
(channel-news-entry-title entry))
|
||||
(apply throw key error rest)))))
|
||||
|
||||
(let* ((this-directory (dirname (current-filename)))
|
||||
(top-directory (string-append this-directory "/.."))
|
||||
(entries (channel-news-entries (all-the-news top-directory))))
|
||||
(with-repository top-directory repository
|
||||
(for-each (cut validate-news-entry repository <>)
|
||||
entries)
|
||||
(info (G_ "All ~a channel news entries are valid.~%")
|
||||
(length entries))))
|
||||
@@ -50,7 +50,7 @@
|
||||
directory))
|
||||
((_ . directory) directory))
|
||||
(derivation->output-paths drv)))))
|
||||
(%final-inputs system)))
|
||||
%final-inputs))
|
||||
|
||||
(define (assert-valid-substitute substitute)
|
||||
"Make sure SUBSTITUTE does not refer to any bootstrap inputs, and bail out
|
||||
@@ -83,4 +83,5 @@ refer to the bootstrap tools."
|
||||
(set-build-options store #:use-substitutes? #t)
|
||||
|
||||
(for-each (cut test-final-inputs store <>)
|
||||
%cuirass-supported-systems)))
|
||||
%hydra-supported-systems)))
|
||||
|
||||
|
||||
+16
-65
@@ -1,6 +1,6 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2016 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
|
||||
;;; Copyright © 2016, 2017, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -17,8 +17,7 @@
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
(use-modules (ice-9 format)
|
||||
(ice-9 match)
|
||||
(use-modules (ice-9 match)
|
||||
(ice-9 threads)
|
||||
(srfi srfi-1)
|
||||
(guix build compile)
|
||||
@@ -79,18 +78,6 @@ to 'make'."
|
||||
(current-processor-count))))
|
||||
(loop tail)))))))))
|
||||
|
||||
(define (parallel-job-count*)
|
||||
;; XXX: Work around memory requirements not sustainable on i686 above '-j4'
|
||||
;; or so: <https://bugs.gnu.org/40522>.
|
||||
(let ((count (parallel-job-count)))
|
||||
(if (string-prefix? "i686" %host-type)
|
||||
(min count 4)
|
||||
count)))
|
||||
|
||||
(define (% completed total)
|
||||
"Return the completion percentage of COMPLETED over TOTAL as an integer."
|
||||
(inexact->exact (round (* 100. (/ completed total)))))
|
||||
|
||||
;; Install a SIGINT handler to give unwind handlers in 'compile-file' an
|
||||
;; opportunity to run upon SIGINT and to remove temporary output files.
|
||||
(sigaction SIGINT
|
||||
@@ -98,53 +85,17 @@ to 'make'."
|
||||
(exit 1)))
|
||||
|
||||
(match (command-line)
|
||||
((_ "--total" (= string->number grand-total)
|
||||
"--completed" (= string->number processed)
|
||||
. files)
|
||||
;; GRAND-TOTAL is the total number of .scm files in the project; PROCESSED
|
||||
;; is the total number of .scm files already compiled in previous
|
||||
;; invocations of this script.
|
||||
(catch #t
|
||||
(lambda ()
|
||||
(let* ((to-build (filter file-needs-compilation? files))
|
||||
(processed (+ processed
|
||||
(- (length files) (length to-build)))))
|
||||
(compile-files srcdir (getcwd) to-build
|
||||
#:workers (parallel-job-count*)
|
||||
#:host host
|
||||
#:report-load (lambda (file total completed)
|
||||
(when file
|
||||
(format #t "[~3d%] LOAD ~a~%"
|
||||
(% (+ 1 completed
|
||||
(* 2 processed))
|
||||
(* 2 grand-total))
|
||||
file)
|
||||
(force-output)))
|
||||
#:report-compilation (lambda (file total completed)
|
||||
(when file
|
||||
(format #t "[~3d%] GUILEC ~a~%"
|
||||
(% (+ total completed 1
|
||||
(* 2 processed))
|
||||
(* 2 grand-total))
|
||||
(scm->go file))
|
||||
(force-output))))))
|
||||
(lambda _
|
||||
(primitive-exit 1))
|
||||
(lambda args
|
||||
;; Try to report the error in an intelligible way.
|
||||
(let* ((stack (make-stack #t))
|
||||
(frame (if (> (stack-length stack) 1)
|
||||
(stack-ref stack 1) ;skip the 'throw' frame
|
||||
(stack-ref stack 0)))
|
||||
(ui (false-if-exception
|
||||
(resolve-module '(guix ui))))
|
||||
(report (and ui
|
||||
(false-if-exception
|
||||
(module-ref ui 'report-load-error)))))
|
||||
(if report
|
||||
(report (or (and=> (current-load-port) port-filename) "?.scm")
|
||||
args frame)
|
||||
(begin
|
||||
(print-exception (current-error-port) frame
|
||||
(car args) (cdr args))
|
||||
(display-backtrace stack (current-error-port)))))))))
|
||||
((_ . files)
|
||||
(compile-files srcdir (getcwd)
|
||||
(filter file-needs-compilation? files)
|
||||
#:workers (parallel-job-count)
|
||||
#:host host
|
||||
#:report-load (lambda (file total completed)
|
||||
(when file
|
||||
(format #t " LOAD ~a~%" file)
|
||||
(force-output)))
|
||||
#:report-compilation (lambda (file total completed)
|
||||
(when file
|
||||
(format #t " GUILEC ~a~%"
|
||||
(scm->go file))
|
||||
(force-output))))))
|
||||
|
||||
@@ -20,9 +20,6 @@
|
||||
|
||||
(use-modules (srfi srfi-26))
|
||||
|
||||
;; Avoid lots of readlink calls
|
||||
(fluid-set! %file-port-name-canonicalization #f)
|
||||
|
||||
;; Add ~/.config/guix/current to the search path.
|
||||
(eval-when (expand load eval)
|
||||
(and=> (or (getenv "XDG_CONFIG_HOME")
|
||||
@@ -44,10 +41,6 @@
|
||||
|
||||
(match (command-line)
|
||||
((program source)
|
||||
;; The build procedure outputs to this port, so setup buffering to avoid
|
||||
;; one char per syscall.
|
||||
(setvbuf (current-error-port) 'line)
|
||||
|
||||
(with-error-handling
|
||||
(with-store store
|
||||
(let* ((script (string-append source "/build-aux/build-self.scm"))
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
|
||||
;;;
|
||||
;;; 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/>.
|
||||
|
||||
;; Translate cross-references in a translated .texi manual.
|
||||
|
||||
(use-modules (guix build po)
|
||||
(ice-9 match))
|
||||
|
||||
(match (command-line)
|
||||
((program texi pofile)
|
||||
(translate-cross-references texi pofile)))
|
||||
@@ -1,108 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2016-2018, 2020, 2022 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
|
||||
;;; Copyright © 2021 Mathieu Othacehe <othacehe@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 program replicates the behavior of Cuirass's 'evaluate' process.
|
||||
;;; It displays the evaluated jobs on the standard output.
|
||||
|
||||
(use-modules (guix channels)
|
||||
(guix derivations)
|
||||
(guix git-download)
|
||||
(guix inferior)
|
||||
(guix packages)
|
||||
(guix store)
|
||||
(guix ui)
|
||||
((guix ui) #:select (build-notifier))
|
||||
(ice-9 match)
|
||||
(ice-9 pretty-print)
|
||||
(ice-9 threads))
|
||||
|
||||
(define %top-srcdir
|
||||
(and=> (assq-ref (current-source-location) 'filename)
|
||||
(lambda (file)
|
||||
(canonicalize-path
|
||||
(string-append (dirname file) "/../..")))))
|
||||
|
||||
(match (command-line)
|
||||
((command directory)
|
||||
(let ((real-build-things build-things))
|
||||
(with-store store
|
||||
;; The evaluation of Guix itself requires building a "trampoline"
|
||||
;; program, and possibly everything it depends on. Thus, allow builds
|
||||
;; but print a notification.
|
||||
(with-build-handler (build-notifier #:use-substitutes? #f)
|
||||
|
||||
;; Add %TOP-SRCDIR to the store with a proper Git predicate so we
|
||||
;; work from a clean checkout.
|
||||
(let ((source (add-to-store store "guix-source" #t
|
||||
"sha256" %top-srcdir
|
||||
#:select? (git-predicate %top-srcdir))))
|
||||
(define instances
|
||||
(list (checkout->channel-instance source)))
|
||||
|
||||
(define channels
|
||||
(map channel-instance-channel instances))
|
||||
|
||||
(define derivation
|
||||
;; Compute the derivation of Guix for COMMIT.
|
||||
(run-with-store store
|
||||
(channel-instances->derivation instances)))
|
||||
|
||||
;; TODO: Remove 'show-what-to-build' call when Cuirass' 'evaluate'
|
||||
;; scripts uses 'with-build-handler'.
|
||||
(show-what-to-build store (list derivation))
|
||||
(build-derivations store (list derivation))
|
||||
|
||||
|
||||
;; Evaluate jobs on a per-system basis for two reasons. It speeds
|
||||
;; up the evaluation speed as the evaluations can be performed
|
||||
;; concurrently. It also decreases the amount of memory needed per
|
||||
;; evaluation process.
|
||||
;;
|
||||
;; Fork inferior processes upfront before we have created any
|
||||
;; threads.
|
||||
(let ((inferiors (map (lambda _
|
||||
(open-inferior (derivation->output-path derivation)))
|
||||
%cuirass-supported-systems)))
|
||||
(n-par-for-each
|
||||
(min (length %cuirass-supported-systems)
|
||||
(current-processor-count))
|
||||
(lambda (system inferior)
|
||||
(with-store store
|
||||
(let ((channels (map channel-instance->sexp instances)))
|
||||
(inferior-eval '(use-modules (gnu ci)) inferior)
|
||||
(let ((jobs
|
||||
(inferior-eval-with-store
|
||||
inferior store
|
||||
`(lambda (store)
|
||||
(cuirass-jobs store
|
||||
'((subset . all)
|
||||
(systems . ,(list system))
|
||||
(channels . ,channels))))))
|
||||
(file
|
||||
(string-append directory "/jobs-" system ".scm")))
|
||||
(close-inferior inferior)
|
||||
(call-with-output-file file
|
||||
(lambda (port)
|
||||
(pretty-print jobs port)))))))
|
||||
%cuirass-supported-systems
|
||||
inferiors)))))))
|
||||
(x
|
||||
(format (current-error-port) "Wrong command: ~a~%." x)
|
||||
(exit 1)))
|
||||
@@ -0,0 +1,25 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@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 defines build jobs for the Cuirass continuation integration
|
||||
;;; tool.
|
||||
;;;
|
||||
|
||||
(include "../hydra/gnu-system.scm")
|
||||
(include "hydra-to-cuirass.scm")
|
||||
@@ -0,0 +1,6 @@
|
||||
;;;
|
||||
;;; This file defines Cuirass build jobs to build Guix itself.
|
||||
;;;
|
||||
|
||||
(include "../hydra/guix-modular.scm")
|
||||
(include "hydra-to-cuirass.scm")
|
||||
@@ -0,0 +1,47 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@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 defines the conversion of Hydra build jobs to Cuirass build
|
||||
;;; jobs. It is meant to be included in other files.
|
||||
;;;
|
||||
|
||||
(use-modules ((guix licenses)
|
||||
#:select (license? license-name license-uri license-comment)))
|
||||
|
||||
(define (cuirass-jobs store arguments)
|
||||
"Return Cuirass jobs."
|
||||
(map hydra-job->cuirass-job (hydra-jobs store arguments)))
|
||||
|
||||
(define (hydra-job->cuirass-job hydra-job)
|
||||
(let ((name (car hydra-job))
|
||||
(job ((cdr hydra-job))))
|
||||
(lambda _ (acons #:job-name (symbol->string name)
|
||||
(map symbol-alist-entry->keyword-alist-entry job)))))
|
||||
|
||||
(define (symbol-alist-entry->keyword-alist-entry entry)
|
||||
(cons (symbol->keyword (car entry)) (entry->sexp-entry (cdr entry))))
|
||||
|
||||
(define (entry->sexp-entry o)
|
||||
(match o
|
||||
((? license?) `((name . (license-name o))
|
||||
(uri . ,(license-uri o))
|
||||
(comment . ,(license-comment o))))
|
||||
((lst ...)
|
||||
(map entry->sexp-entry lst))
|
||||
(_ o)))
|
||||
@@ -1,80 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
if test "$#" -lt 1 || test "$#" -gt 2
|
||||
then
|
||||
echo "Usage: extract-syscall-ranges.sh FILENAME [abiname_regex]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
numbers_to_ranges()
|
||||
{
|
||||
if ! read number
|
||||
then
|
||||
printf '{}\n'
|
||||
return
|
||||
fi
|
||||
low="$number"
|
||||
high="$number"
|
||||
while true
|
||||
do
|
||||
if read number
|
||||
then
|
||||
if test "$number" -eq "$((high + 1))"
|
||||
then
|
||||
high="$number"
|
||||
else
|
||||
break
|
||||
fi
|
||||
else
|
||||
printf '{ {%d, %d} }\n' "$low" "$high"
|
||||
return
|
||||
fi
|
||||
done
|
||||
printf '{ {%d, %d}' "$low" "$high"
|
||||
low="$number"
|
||||
high="$number"
|
||||
while true
|
||||
do
|
||||
if read number
|
||||
then
|
||||
if test "$number" -eq "$((high + 1))"
|
||||
then
|
||||
high="$number"
|
||||
else
|
||||
printf ', {%d, %d}' "$low" "$high"
|
||||
low="$number"
|
||||
high="$number"
|
||||
fi
|
||||
else
|
||||
printf ', {%d, %d} }\n' "$low" "$high"
|
||||
return
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
if test "$#" -eq 2
|
||||
then
|
||||
abi_regex="$2"
|
||||
getnumbers()
|
||||
{
|
||||
# delete comment lines and space-only lines
|
||||
sed -e '/^[[:space:]]*#/d ; /^[[:space:]]*$/d' |
|
||||
# filter to only include lines with target abi or "common"
|
||||
grep -E "^[0-9]+[[:space:]]+(common|(${abi_regex}))[[:space:]]" |
|
||||
# limit to only syscall number
|
||||
sed -e 's/\([0-9]\+\).*/\1/g'
|
||||
}
|
||||
else
|
||||
getnumbers()
|
||||
{
|
||||
# delete comment lines and space-only lines and limit to syscall number
|
||||
sed -e '/^[[:space:]]*#/d ; /^[[:space:]]*$/d ; s/\([0-9]\+\).*/\1/g'
|
||||
}
|
||||
fi
|
||||
|
||||
getnumbers < "$1" |
|
||||
sort -n |
|
||||
uniq | # Yes, there are duplicate syscall entries...
|
||||
numbers_to_ranges
|
||||
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@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 program replicates the behavior of Hydra's 'hydra-eval-guile-job'.
|
||||
;;; It evaluates the Hydra job defined by the program passed as its first
|
||||
;;; arguments and outputs an sexp of the jobs on standard output.
|
||||
|
||||
(use-modules (guix store)
|
||||
(srfi srfi-19)
|
||||
(ice-9 match)
|
||||
(ice-9 pretty-print)
|
||||
(ice-9 format))
|
||||
|
||||
(define %top-srcdir
|
||||
(and=> (assq-ref (current-source-location) 'filename)
|
||||
(lambda (file)
|
||||
(canonicalize-path
|
||||
(string-append (dirname file) "/../..")))))
|
||||
|
||||
(define %user-module
|
||||
;; Hydra user module.
|
||||
(let ((m (make-module)))
|
||||
(beautify-user-module! m)
|
||||
m))
|
||||
|
||||
(cond-expand
|
||||
(guile-2.2
|
||||
;; Guile 2.2.2 has a bug whereby 'time-monotonic' objects have seconds and
|
||||
;; nanoseconds swapped (fixed in Guile commit 886ac3e). Work around it.
|
||||
(define time-monotonic time-tai))
|
||||
(else #t))
|
||||
|
||||
(define (call-with-time thunk kont)
|
||||
"Call THUNK and pass KONT the elapsed time followed by THUNK's return
|
||||
values."
|
||||
(let* ((start (current-time time-monotonic))
|
||||
(result (call-with-values thunk list))
|
||||
(end (current-time time-monotonic)))
|
||||
(apply kont (time-difference end start) result)))
|
||||
|
||||
(define (call-with-time-display thunk)
|
||||
"Call THUNK and write to the current output port its duration."
|
||||
(call-with-time thunk
|
||||
(lambda (time . results)
|
||||
(format #t "~,3f seconds~%"
|
||||
(+ (time-second time)
|
||||
(/ (time-nanosecond time) 1e9)))
|
||||
(apply values results))))
|
||||
|
||||
(define (assert-valid-job job thing)
|
||||
"Raise an error if THING is not an alist with a valid 'derivation' entry.
|
||||
Otherwise return THING."
|
||||
(unless (and (list? thing)
|
||||
(and=> (assoc-ref thing 'derivation)
|
||||
(lambda (value)
|
||||
(and (string? value)
|
||||
(string-suffix? ".drv" value)))))
|
||||
(error "job did not produce a valid alist" job thing))
|
||||
thing)
|
||||
|
||||
|
||||
;; Without further ado...
|
||||
(match (command-line)
|
||||
((command file cuirass? ...)
|
||||
;; Load FILE, a Scheme file that defines Hydra jobs.
|
||||
(let ((port (current-output-port))
|
||||
(real-build-things build-things))
|
||||
(save-module-excursion
|
||||
(lambda ()
|
||||
(set-current-module %user-module)
|
||||
(primitive-load file)))
|
||||
|
||||
(with-store store
|
||||
;; Make sure we don't resort to substitutes.
|
||||
(set-build-options store
|
||||
#:use-substitutes? #f
|
||||
#:substitute-urls '())
|
||||
|
||||
;; Grafts can trigger early builds. We do not want that to happen
|
||||
;; during evaluation, so use a sledgehammer to catch such problems.
|
||||
;; An exception, though, is the evaluation of Guix itself, which
|
||||
;; requires building a "trampoline" program.
|
||||
(set! build-things
|
||||
(lambda (store . args)
|
||||
(format (current-error-port)
|
||||
"warning: building things during evaluation~%")
|
||||
(format (current-error-port)
|
||||
"'build-things' arguments: ~s~%" args)
|
||||
(apply real-build-things store args)))
|
||||
|
||||
;; Call the entry point of FILE and print the resulting job sexp.
|
||||
(pretty-print
|
||||
(match ((module-ref %user-module
|
||||
(if (equal? cuirass? "cuirass")
|
||||
'cuirass-jobs
|
||||
'hydra-jobs))
|
||||
store `((guix
|
||||
. ((file-name . ,%top-srcdir)))))
|
||||
(((names . thunks) ...)
|
||||
(map (lambda (job thunk)
|
||||
(format (current-error-port) "evaluating '~a'... " job)
|
||||
(force-output (current-error-port))
|
||||
(cons job
|
||||
(assert-valid-job job
|
||||
(call-with-time-display thunk))))
|
||||
names thunks)))
|
||||
port))))
|
||||
((command _ ...)
|
||||
(format (current-error-port) "Usage: ~a FILE [cuirass]
|
||||
Evaluate the Hydra or Cuirass jobs defined in FILE.~%"
|
||||
command)
|
||||
(exit 1)))
|
||||
|
||||
;;; Local Variables:
|
||||
;;; eval: (put 'call-with-time 'scheme-indent-function 1)
|
||||
;;; End:
|
||||
|
||||
@@ -0,0 +1,458 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
|
||||
;;; Copyright © 2018 Clément Lassieur <clement@lassieur.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 defines build jobs for the Hydra continuation integration
|
||||
;;; tool.
|
||||
;;;
|
||||
|
||||
(use-modules (system base compile))
|
||||
|
||||
(eval-when (expand load eval)
|
||||
|
||||
;; Pre-load the compiler so we don't end up auto-compiling it.
|
||||
(compile #t)
|
||||
|
||||
;; Use our very own Guix modules.
|
||||
(set! %fresh-auto-compile #t)
|
||||
|
||||
;; Ignore .go files except for Guile's. This is because our checkout in the
|
||||
;; store has mtime set to the epoch, and thus .go files look newer, even
|
||||
;; though they may not correspond. Use 'reverse' so that /gnu/store/…-guile
|
||||
;; comes before /run/current-system/profile.
|
||||
(set! %load-compiled-path
|
||||
(list
|
||||
(dirname (dirname (search-path (reverse %load-compiled-path)
|
||||
"ice-9/boot-9.go")))))
|
||||
|
||||
(and=> (assoc-ref (current-source-location) 'filename)
|
||||
(lambda (file)
|
||||
(let ((dir (canonicalize-path
|
||||
(string-append (dirname file) "/../.."))))
|
||||
(format (current-error-port) "prepending ~s to the load path~%"
|
||||
dir)
|
||||
(set! %load-path (cons dir %load-path))))))
|
||||
|
||||
(use-modules (guix config)
|
||||
(guix store)
|
||||
(guix grafts)
|
||||
(guix profiles)
|
||||
(guix packages)
|
||||
(guix derivations)
|
||||
(guix monads)
|
||||
(guix ui)
|
||||
((guix licenses) #:select (gpl3+))
|
||||
((guix utils) #:select (%current-system))
|
||||
((guix scripts system) #:select (read-operating-system))
|
||||
((guix scripts pack)
|
||||
#:select (lookup-compressor self-contained-tarball))
|
||||
(gnu bootloader)
|
||||
(gnu bootloader u-boot)
|
||||
(gnu packages)
|
||||
(gnu packages gcc)
|
||||
(gnu packages base)
|
||||
(gnu packages gawk)
|
||||
(gnu packages guile)
|
||||
(gnu packages gettext)
|
||||
(gnu packages compression)
|
||||
(gnu packages multiprecision)
|
||||
(gnu packages make-bootstrap)
|
||||
(gnu packages package-management)
|
||||
(gnu system)
|
||||
(gnu system vm)
|
||||
(gnu system install)
|
||||
(gnu tests)
|
||||
(srfi srfi-1)
|
||||
(srfi srfi-26)
|
||||
(ice-9 match))
|
||||
|
||||
;; XXX: Debugging hack: since `hydra-eval-guile-jobs' redirects the output
|
||||
;; port to the bit bucket, let us write to the error port instead.
|
||||
(setvbuf (current-error-port) _IOLBF)
|
||||
(set-current-output-port (current-error-port))
|
||||
|
||||
(define* (package->alist store package system
|
||||
#:optional (package-derivation package-derivation))
|
||||
"Convert PACKAGE to an alist suitable for Hydra."
|
||||
(parameterize ((%graft? #f))
|
||||
`((derivation . ,(derivation-file-name
|
||||
(package-derivation store package system
|
||||
#:graft? #f)))
|
||||
(description . ,(package-synopsis package))
|
||||
(long-description . ,(package-description package))
|
||||
(license . ,(package-license package))
|
||||
(home-page . ,(package-home-page package))
|
||||
(maintainers . ("bug-guix@gnu.org"))
|
||||
(max-silent-time . ,(or (assoc-ref (package-properties package)
|
||||
'max-silent-time)
|
||||
3600)) ;1 hour by default
|
||||
(timeout . ,(or (assoc-ref (package-properties package) 'timeout)
|
||||
72000))))) ;20 hours by default
|
||||
|
||||
(define (package-job store job-name package system)
|
||||
"Return a job called JOB-NAME that builds PACKAGE on SYSTEM."
|
||||
(let ((job-name (symbol-append job-name (string->symbol ".")
|
||||
(string->symbol system))))
|
||||
`(,job-name . ,(cut package->alist store package system))))
|
||||
|
||||
(define (package-cross-job store job-name package target system)
|
||||
"Return a job called TARGET.JOB-NAME that cross-builds PACKAGE for TARGET on
|
||||
SYSTEM."
|
||||
`(,(symbol-append (string->symbol target) (string->symbol ".") job-name
|
||||
(string->symbol ".") (string->symbol system)) .
|
||||
,(cute package->alist store package system
|
||||
(lambda* (store package system #:key graft?)
|
||||
(package-cross-derivation store package target system
|
||||
#:graft? graft?)))))
|
||||
|
||||
(define %core-packages
|
||||
;; Note: Don't put the '-final' package variants because (1) that's
|
||||
;; implicit, and (2) they cannot be cross-built (due to the explicit input
|
||||
;; chain.)
|
||||
(list gcc-4.8 gcc-4.9 gcc-5 glibc binutils
|
||||
gmp mpfr mpc coreutils findutils diffutils patch sed grep
|
||||
gawk gnu-gettext hello guile-2.0 guile-2.2 zlib gzip xz
|
||||
%bootstrap-binaries-tarball
|
||||
%binutils-bootstrap-tarball
|
||||
(%glibc-bootstrap-tarball)
|
||||
%gcc-bootstrap-tarball
|
||||
%guile-bootstrap-tarball
|
||||
%bootstrap-tarballs))
|
||||
|
||||
(define %packages-to-cross-build
|
||||
%core-packages)
|
||||
|
||||
(define %cross-targets
|
||||
'("mips64el-linux-gnu"
|
||||
"mips64el-linux-gnuabi64"
|
||||
"arm-linux-gnueabihf"
|
||||
"aarch64-linux-gnu"
|
||||
"powerpc-linux-gnu"
|
||||
"i586-pc-gnu" ;aka. GNU/Hurd
|
||||
"i686-w64-mingw32"))
|
||||
|
||||
(define %guixsd-supported-systems
|
||||
'("x86_64-linux" "i686-linux" "armhf-linux"))
|
||||
|
||||
(define %u-boot-systems
|
||||
'("armhf-linux"))
|
||||
|
||||
(define (qemu-jobs store system)
|
||||
"Return a list of jobs that build QEMU images for SYSTEM."
|
||||
(define (->alist drv)
|
||||
`((derivation . ,(derivation-file-name drv))
|
||||
(description . "Stand-alone QEMU image of the GNU system")
|
||||
(long-description . "This is a demo stand-alone QEMU image of the GNU
|
||||
system.")
|
||||
(license . ,gpl3+)
|
||||
(home-page . ,%guix-home-page-url)
|
||||
(maintainers . ("bug-guix@gnu.org"))))
|
||||
|
||||
(define (->job name drv)
|
||||
(let ((name (symbol-append name (string->symbol ".")
|
||||
(string->symbol system))))
|
||||
`(,name . ,(lambda ()
|
||||
(parameterize ((%graft? #f))
|
||||
(->alist drv))))))
|
||||
|
||||
(define MiB
|
||||
(expt 2 20))
|
||||
|
||||
(if (member system %guixsd-supported-systems)
|
||||
(if (member system %u-boot-systems)
|
||||
(list (->job 'flash-image
|
||||
(run-with-store store
|
||||
(mbegin %store-monad
|
||||
(set-guile-for-build (default-guile))
|
||||
(system-disk-image
|
||||
(operating-system (inherit installation-os)
|
||||
(bootloader (bootloader-configuration
|
||||
(bootloader u-boot-bootloader)
|
||||
(target #f))))
|
||||
#:disk-image-size
|
||||
(* 1500 MiB))))))
|
||||
(list (->job 'usb-image
|
||||
(run-with-store store
|
||||
(mbegin %store-monad
|
||||
(set-guile-for-build (default-guile))
|
||||
(system-disk-image installation-os
|
||||
#:disk-image-size
|
||||
(* 1500 MiB)))))
|
||||
(->job 'iso9660-image
|
||||
(run-with-store store
|
||||
(mbegin %store-monad
|
||||
(set-guile-for-build (default-guile))
|
||||
(system-disk-image installation-os
|
||||
#:file-system-type
|
||||
"iso9660"))))))
|
||||
'()))
|
||||
|
||||
(define (system-test-jobs store system)
|
||||
"Return a list of jobs for the system tests."
|
||||
(define (test->thunk test)
|
||||
(lambda ()
|
||||
(define drv
|
||||
(run-with-store store
|
||||
(mbegin %store-monad
|
||||
(set-current-system system)
|
||||
(set-grafting #f)
|
||||
(set-guile-for-build (default-guile))
|
||||
(system-test-value test))))
|
||||
|
||||
`((derivation . ,(derivation-file-name drv))
|
||||
(description . ,(format #f "GuixSD '~a' system test"
|
||||
(system-test-name test)))
|
||||
(long-description . ,(system-test-description test))
|
||||
(license . ,gpl3+)
|
||||
(home-page . ,%guix-home-page-url)
|
||||
(maintainers . ("bug-guix@gnu.org")))))
|
||||
|
||||
(define (->job test)
|
||||
(let ((name (string->symbol
|
||||
(string-append "test." (system-test-name test)
|
||||
"." system))))
|
||||
(cons name (test->thunk test))))
|
||||
|
||||
(if (member system %guixsd-supported-systems)
|
||||
(map ->job (all-system-tests))
|
||||
'()))
|
||||
|
||||
(define (tarball-jobs store system)
|
||||
"Return Hydra jobs to build the self-contained Guix binary tarball."
|
||||
(define (->alist drv)
|
||||
`((derivation . ,(derivation-file-name drv))
|
||||
(description . "Stand-alone binary Guix tarball")
|
||||
(long-description . "This is a tarball containing binaries of Guix and
|
||||
all its dependencies, and ready to be installed on non-GuixSD distributions.")
|
||||
(license . ,gpl3+)
|
||||
(home-page . ,%guix-home-page-url)
|
||||
(maintainers . ("bug-guix@gnu.org"))))
|
||||
|
||||
(define (->job name drv)
|
||||
(let ((name (symbol-append name (string->symbol ".")
|
||||
(string->symbol system))))
|
||||
`(,name . ,(lambda ()
|
||||
(parameterize ((%graft? #f))
|
||||
(->alist drv))))))
|
||||
|
||||
;; XXX: Add a job for the stable Guix?
|
||||
(list (->job 'binary-tarball
|
||||
(run-with-store store
|
||||
(mbegin %store-monad
|
||||
(set-guile-for-build (default-guile))
|
||||
(>>= (profile-derivation (packages->manifest (list guix)))
|
||||
(lambda (profile)
|
||||
(self-contained-tarball "guix-binary" profile
|
||||
#:localstatedir? #t
|
||||
#:compressor
|
||||
(lookup-compressor "xz")))))
|
||||
#:system system))))
|
||||
|
||||
(define job-name
|
||||
;; Return the name of a package's job.
|
||||
(compose string->symbol
|
||||
(cut package-full-name <> "-")))
|
||||
|
||||
(define package->job
|
||||
(let ((base-packages
|
||||
(delete-duplicates
|
||||
(append-map (match-lambda
|
||||
((_ package _ ...)
|
||||
(match (package-transitive-inputs package)
|
||||
(((_ inputs _ ...) ...)
|
||||
inputs))))
|
||||
(%final-inputs)))))
|
||||
(lambda (store package system)
|
||||
"Return a job for PACKAGE on SYSTEM, or #f if this combination is not
|
||||
valid."
|
||||
(cond ((member package base-packages)
|
||||
(package-job store (symbol-append 'base. (job-name package))
|
||||
package system))
|
||||
((supported-package? package system)
|
||||
(let ((drv (package-derivation store package system
|
||||
#:graft? #f)))
|
||||
(and (substitutable-derivation? drv)
|
||||
(package-job store (job-name package)
|
||||
package system))))
|
||||
(else
|
||||
#f)))))
|
||||
|
||||
(define (all-packages)
|
||||
"Return the list of packages to build."
|
||||
(define (adjust package result)
|
||||
(cond ((package-replacement package)
|
||||
(cons* package ;build both
|
||||
(package-replacement package)
|
||||
result))
|
||||
((package-superseded package)
|
||||
result) ;don't build it
|
||||
(else
|
||||
(cons package result))))
|
||||
|
||||
(fold-packages adjust
|
||||
(fold adjust '() ;include base packages
|
||||
(match (%final-inputs)
|
||||
(((labels packages _ ...) ...)
|
||||
packages)))
|
||||
#:select? (const #t))) ;include hidden packages
|
||||
|
||||
(define (arguments->manifests arguments)
|
||||
"Return the list of manifests extracted from ARGUMENTS."
|
||||
(map (match-lambda
|
||||
((input-name . relative-path)
|
||||
(let* ((checkout (assq-ref arguments (string->symbol input-name)))
|
||||
(base (assq-ref checkout 'file-name)))
|
||||
(in-vicinity base relative-path))))
|
||||
(assq-ref arguments 'manifests)))
|
||||
|
||||
(define (manifests->packages store manifests)
|
||||
"Return the list of packages found in MANIFESTS."
|
||||
(define (load-manifest manifest)
|
||||
(save-module-excursion
|
||||
(lambda ()
|
||||
(set-current-module (make-user-module '((guix profiles) (gnu))))
|
||||
(primitive-load manifest))))
|
||||
|
||||
(delete-duplicates!
|
||||
(map manifest-entry-item
|
||||
(append-map (compose manifest-entries
|
||||
load-manifest)
|
||||
manifests))))
|
||||
|
||||
|
||||
;;;
|
||||
;;; Hydra entry point.
|
||||
;;;
|
||||
|
||||
(define (hydra-jobs store arguments)
|
||||
"Return Hydra jobs."
|
||||
(define subset
|
||||
(match (assoc-ref arguments 'subset)
|
||||
("core" 'core) ; only build core packages
|
||||
("hello" 'hello) ; only build hello
|
||||
(((? string?) (? string?) ...) 'list) ; only build selected list of packages
|
||||
("manifests" 'manifests) ; only build packages in the list of manifests
|
||||
(_ 'all))) ; build everything
|
||||
|
||||
(define systems
|
||||
(match (assoc-ref arguments 'systems)
|
||||
(#f %hydra-supported-systems)
|
||||
((lst ...) lst)
|
||||
((? string? str) (call-with-input-string str read))))
|
||||
|
||||
(define (cross-jobs system)
|
||||
(define (from-32-to-64? target)
|
||||
;; Return true if SYSTEM is 32-bit and TARGET is 64-bit. This hack
|
||||
;; prevents known-to-fail cross-builds from i686-linux or armhf-linux to
|
||||
;; mips64el-linux-gnuabi64.
|
||||
(and (or (string-prefix? "i686-" system)
|
||||
(string-prefix? "i586-" system)
|
||||
(string-prefix? "armhf-" system))
|
||||
(string-contains target "64"))) ;x86_64, mips64el, aarch64, etc.
|
||||
|
||||
(define (same? target)
|
||||
;; Return true if SYSTEM and TARGET are the same thing. This is so we
|
||||
;; don't try to cross-compile to 'mips64el-linux-gnu' from
|
||||
;; 'mips64el-linux'.
|
||||
(or (string-contains target system)
|
||||
(and (string-prefix? "armhf" system) ;armhf-linux
|
||||
(string-prefix? "arm" target)))) ;arm-linux-gnueabihf
|
||||
|
||||
(define (pointless? target)
|
||||
;; Return #t if it makes no sense to cross-build to TARGET from SYSTEM.
|
||||
(match system
|
||||
((or "x86_64-linux" "i686-linux")
|
||||
(if (string-contains target "mingw")
|
||||
(not (string=? "x86_64-linux" system))
|
||||
#f))
|
||||
(_
|
||||
;; Don't try to cross-compile from non-Intel platforms: this isn't
|
||||
;; very useful and these are often brittle configurations.
|
||||
#t)))
|
||||
|
||||
(define (either proc1 proc2 proc3)
|
||||
(lambda (x)
|
||||
(or (proc1 x) (proc2 x) (proc3 x))))
|
||||
|
||||
(append-map (lambda (target)
|
||||
(map (lambda (package)
|
||||
(package-cross-job store (job-name package)
|
||||
package target system))
|
||||
%packages-to-cross-build))
|
||||
(remove (either from-32-to-64? same? pointless?)
|
||||
%cross-targets)))
|
||||
|
||||
;; Turn off grafts. Grafting is meant to happen on the user's machines.
|
||||
(parameterize ((%graft? #f))
|
||||
;; Return one job for each package, except bootstrap packages.
|
||||
(append-map (lambda (system)
|
||||
(format (current-error-port)
|
||||
"evaluating for '~a' (heap size: ~a MiB)...~%"
|
||||
system
|
||||
(round
|
||||
(/ (assoc-ref (gc-stats) 'heap-size)
|
||||
(expt 2. 20))))
|
||||
(invalidate-derivation-caches!)
|
||||
(case subset
|
||||
((all)
|
||||
;; Build everything, including replacements.
|
||||
(let ((all (all-packages))
|
||||
(job (lambda (package)
|
||||
(package->job store package
|
||||
system))))
|
||||
(append (filter-map job all)
|
||||
(qemu-jobs store system)
|
||||
(system-test-jobs store system)
|
||||
(tarball-jobs store system)
|
||||
(cross-jobs system))))
|
||||
((core)
|
||||
;; Build core packages only.
|
||||
(append (map (lambda (package)
|
||||
(package-job store (job-name package)
|
||||
package system))
|
||||
%core-packages)
|
||||
(cross-jobs system)))
|
||||
((hello)
|
||||
;; Build hello package only.
|
||||
(if (string=? system (%current-system))
|
||||
(let ((hello (specification->package "hello")))
|
||||
(list (package-job store (job-name hello) hello system)))
|
||||
'()))
|
||||
((list)
|
||||
;; Build selected list of packages only.
|
||||
(if (string=? system (%current-system))
|
||||
(let* ((names (assoc-ref arguments 'subset))
|
||||
(packages (map specification->package names)))
|
||||
(map (lambda (package)
|
||||
(package-job store (job-name package)
|
||||
package system))
|
||||
packages))
|
||||
'()))
|
||||
((manifests)
|
||||
;; Build packages in the list of manifests.
|
||||
(let* ((manifests (arguments->manifests arguments))
|
||||
(packages (manifests->packages store manifests)))
|
||||
(map (lambda (package)
|
||||
(package-job store (job-name package)
|
||||
package system))
|
||||
packages)))
|
||||
(else
|
||||
(error "unknown subset" subset))))
|
||||
systems)))
|
||||
@@ -0,0 +1,83 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2017, 2018 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 defines a continuous integration job to build the same modular
|
||||
;;; Guix as 'guix pull', which is defined in (guix self).
|
||||
;;;
|
||||
|
||||
(use-modules (guix store)
|
||||
(guix config)
|
||||
(guix utils)
|
||||
((guix packages) #:select (%hydra-supported-systems))
|
||||
(guix derivations)
|
||||
(guix monads)
|
||||
((guix licenses) #:prefix license:)
|
||||
(srfi srfi-1)
|
||||
(ice-9 match))
|
||||
|
||||
;; XXX: Debugging hack: since `hydra-eval-guile-jobs' redirects the output
|
||||
;; port to the bit bucket, let us write to the error port instead.
|
||||
(setvbuf (current-error-port) _IOLBF)
|
||||
(set-current-output-port (current-error-port))
|
||||
|
||||
(define* (build-job store source version system)
|
||||
"Return a Hydra job a list building the modular Guix derivation from SOURCE
|
||||
for SYSTEM. Use VERSION as the version identifier."
|
||||
(lambda ()
|
||||
(define build
|
||||
(primitive-load (string-append source "/build-aux/build-self.scm")))
|
||||
|
||||
`((derivation . ,(derivation-file-name
|
||||
(run-with-store store
|
||||
(build source #:version version #:system system
|
||||
#:pull-version 1
|
||||
#:guile-version "2.2")))) ;the latest 2.2.x
|
||||
(description . "Modular Guix")
|
||||
(long-description
|
||||
. "This is the modular Guix package as produced by 'guix pull'.")
|
||||
(license . ,license:gpl3+)
|
||||
(home-page . ,%guix-home-page-url)
|
||||
(maintainers . (,%guix-bug-report-address)))))
|
||||
|
||||
(define (hydra-jobs store arguments)
|
||||
"Return Hydra jobs."
|
||||
(define systems
|
||||
(match (assoc-ref arguments 'systems)
|
||||
(#f %hydra-supported-systems)
|
||||
((lst ...) lst)
|
||||
((? string? str) (call-with-input-string str read))))
|
||||
|
||||
(define guix-checkout
|
||||
(or (assq-ref arguments 'guix) ;Hydra on hydra
|
||||
(assq-ref arguments 'guix-modular))) ;Cuirass on berlin
|
||||
|
||||
(define version
|
||||
(or (assq-ref guix-checkout 'revision)
|
||||
"0.unknown"))
|
||||
|
||||
(let ((file (assq-ref guix-checkout 'file-name)))
|
||||
(format (current-error-port) "using checkout ~s (~s; arguments: ~s)~%"
|
||||
guix-checkout file arguments)
|
||||
|
||||
(map (lambda (system)
|
||||
(let ((name (string->symbol
|
||||
(string-append "guix." system))))
|
||||
`(,name
|
||||
. ,(build-job store file version system))))
|
||||
systems)))
|
||||
@@ -0,0 +1,106 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018 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 defines build jobs of Guix itself for the Hydra continuation
|
||||
;;; integration tool.
|
||||
;;;
|
||||
|
||||
;; Attempt to use our very own Guix modules.
|
||||
(eval-when (expand load eval)
|
||||
|
||||
;; Ignore any available .go, and force recompilation. This is because our
|
||||
;; checkout in the store has mtime set to the epoch, and thus .go files look
|
||||
;; newer, even though they may not correspond.
|
||||
(set! %fresh-auto-compile #t)
|
||||
|
||||
;; Display which files are loaded.
|
||||
(set! %load-verbosely #t)
|
||||
|
||||
(and=> (assoc-ref (current-source-location) 'filename)
|
||||
(lambda (file)
|
||||
(let ((dir (string-append (dirname file) "/../..")))
|
||||
(format (current-error-port) "prepending ~s to the load path~%"
|
||||
dir)
|
||||
(set! %load-path (cons dir %load-path))))))
|
||||
|
||||
|
||||
(use-modules (guix store)
|
||||
(guix packages)
|
||||
(guix utils)
|
||||
(guix grafts)
|
||||
(guix derivations)
|
||||
(guix build-system gnu)
|
||||
(gnu packages package-management)
|
||||
(srfi srfi-1)
|
||||
(srfi srfi-26)
|
||||
(ice-9 match))
|
||||
|
||||
;; XXX: Debugging hack: since `hydra-eval-guile-jobs' redirects the output
|
||||
;; port to the bit bucket, let us write to the error port instead.
|
||||
(setvbuf (current-error-port) _IOLBF)
|
||||
(set-current-output-port (current-error-port))
|
||||
|
||||
(define* (package->alist store package system
|
||||
#:optional (package-derivation package-derivation))
|
||||
"Convert PACKAGE to an alist suitable for Hydra."
|
||||
`((derivation . ,(derivation-file-name
|
||||
(parameterize ((%graft? #f))
|
||||
(package-derivation store package system
|
||||
#:graft? #f))))
|
||||
(description . ,(package-synopsis package))
|
||||
(long-description . ,(package-description package))
|
||||
(license . ,(package-license package))
|
||||
(home-page . ,(package-home-page package))
|
||||
(maintainers . ("bug-guix@gnu.org"))))
|
||||
|
||||
(define (hydra-jobs store arguments)
|
||||
"Return Hydra jobs."
|
||||
(define systems
|
||||
(match (filter-map (match-lambda
|
||||
(('system . value)
|
||||
value)
|
||||
(_ #f))
|
||||
arguments)
|
||||
((lst ..1)
|
||||
lst)
|
||||
(_
|
||||
(list (%current-system)))))
|
||||
|
||||
(define guix-checkout
|
||||
(assq-ref arguments 'guix))
|
||||
|
||||
(let ((file (assq-ref guix-checkout 'file-name)))
|
||||
(format (current-error-port) "using checkout ~s (~s)~%"
|
||||
guix-checkout file)
|
||||
|
||||
`((tarball . ,(cute package->alist store
|
||||
(dist-package guix file)
|
||||
(%current-system)))
|
||||
|
||||
,@(map (lambda (system)
|
||||
(let ((name (string->symbol
|
||||
(string-append "guix." system))))
|
||||
`(,name
|
||||
. ,(cute package->alist store
|
||||
(package
|
||||
(inherit guix)
|
||||
(version "latest")
|
||||
(source file))
|
||||
system))))
|
||||
%hydra-supported-systems))))
|
||||
@@ -1,78 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2025 Florian Pelz <pelzflorian@pelzflorian.de>
|
||||
;;;
|
||||
;;; 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/>.
|
||||
|
||||
;; Minify Gettext PO files when synced from
|
||||
;; <https://codeberg.org/guix/translations/>,
|
||||
;; keeping only actually translated messages.
|
||||
|
||||
;; Note: This does not work for PO files of the guix domain, which needed
|
||||
;; support for plural forms in (@ (guix build po) read-po-file). The guix
|
||||
;; domain's files are comparatively small and the read-po-file API would
|
||||
;; have to be expanded to use records or such; it is not worth it.
|
||||
|
||||
(use-modules (guix build po)
|
||||
(ice-9 match)
|
||||
(ice-9 textual-ports))
|
||||
|
||||
(define (escape str)
|
||||
"Escape msgid or msgstr. Replace by C-style escape sequences."
|
||||
(let* ((in (open-input-string str))
|
||||
(text (get-string-all in))
|
||||
(escaped-text-as-list
|
||||
(string-fold-right
|
||||
(lambda (char result)
|
||||
(cons (case char
|
||||
((#\") "\\\"")
|
||||
((#\\) "\\\\")
|
||||
((#\linefeed) "\\n")
|
||||
((#\return) "\\r")
|
||||
((#\tab) "\\t")
|
||||
(else (string char)))
|
||||
result))
|
||||
'()
|
||||
text))
|
||||
(escaped-text (apply string-append escaped-text-as-list)))
|
||||
(display escaped-text)))
|
||||
|
||||
(match (command-line)
|
||||
((program pofile)
|
||||
(let ((input (open-input-file pofile)))
|
||||
;; Just copy until an empty line.
|
||||
(letrec ((copy
|
||||
(lambda ()
|
||||
(let ((next-line (get-line input)))
|
||||
(display next-line)
|
||||
(newline)
|
||||
(when (> (string-length next-line) 0)
|
||||
(copy))))))
|
||||
(copy))
|
||||
;; Then print only translated messages.
|
||||
(for-each
|
||||
(lambda (msg)
|
||||
(match msg
|
||||
((msgid . msgstr)
|
||||
(display "msgid \"")
|
||||
(escape msgid)
|
||||
(display "\"")
|
||||
(newline)
|
||||
(display "msgstr \"")
|
||||
(escape msgstr)
|
||||
(display "\"")
|
||||
(newline)
|
||||
(newline))))
|
||||
(read-po-file input)))))
|
||||
@@ -1,89 +0,0 @@
|
||||
#! /bin/sh
|
||||
# -*-scheme-*-
|
||||
export LANG=C LANGUAGE=C LC_TIME=C
|
||||
export TZ=UTC0
|
||||
exec guile --no-auto-compile -L $srcdir -C $srcdir -e '(mdate-from-git)' -s "$0" "$@"
|
||||
!#
|
||||
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; This program 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.
|
||||
;;;
|
||||
;;; This program 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:
|
||||
;;;
|
||||
;;; Usage: mdate-from-git.scm FILE
|
||||
;;;
|
||||
;;; This script is compatible with Automake's `mdate-sh' but uses the timestamp
|
||||
;;; from Git instead of from the file system. Also, it can be appended to
|
||||
;;; mdate-sh.
|
||||
|
||||
;;; As a special exception for Guix, it caters for doc/guix.LANG.texi files that
|
||||
;;; are not stored in Git, by using po/doc/guix-manual.LANG.po for the Git
|
||||
;;; timestamp. Test doing something like:
|
||||
;;;
|
||||
;;; build-aux/mdate-from-git.scm doc/guix.de.texi
|
||||
;;;
|
||||
;;;; Code:
|
||||
|
||||
(define-module (mdate-from-git)
|
||||
#:use-module (ice-9 match)
|
||||
#:use-module (ice-9 popen)
|
||||
#:use-module (ice-9 rdelim)
|
||||
#:use-module (ice-9 regex)
|
||||
#:export (main))
|
||||
|
||||
(define (pipe-command command)
|
||||
(let* ((port (apply open-pipe* OPEN_READ command))
|
||||
(output (read-string port)))
|
||||
(close-port port)
|
||||
output))
|
||||
|
||||
(define (guix.LANG.texi->guix-manual.LANG.po file-name)
|
||||
"Translated manuals doc/guix.LANG.texi are not tracked in Git and are
|
||||
generated from po/doc/guix-manual.LANG.po. For such an untraced .TEXI file,
|
||||
return its .PO counterpart."
|
||||
(let ((m (string-match "doc/guix.([^.]+).texi" file-name)))
|
||||
(if (not m) file-name
|
||||
(let ((lang (match:substring m 1)))
|
||||
(format #f "po/doc/guix-manual.~a.po" lang)))))
|
||||
|
||||
|
||||
;;;
|
||||
;;; Entry point.
|
||||
;;;
|
||||
(define (main args)
|
||||
(match args
|
||||
((script file-name)
|
||||
(let* ((command `("git" "ls-files" "--error-unmatch" "--" ,file-name))
|
||||
(tracked? (zero? (with-error-to-port (%make-void-port "w")
|
||||
(lambda _
|
||||
(with-output-to-port (%make-void-port "w")
|
||||
(lambda _ (apply system* command)))))))
|
||||
(file-name (if tracked? file-name
|
||||
(guix.LANG.texi->guix-manual.LANG.po file-name)))
|
||||
(command `("git" "log" "--pretty=format:%ct" "-n1" "--" ,file-name))
|
||||
(timestamp (with-error-to-port (%make-void-port "w")
|
||||
(lambda _ (pipe-command command))))
|
||||
(source-date-epoch (or (getenv "SOURCE_DATE_EPOCH") "1"))
|
||||
(timestamp (if (string-null? timestamp) source-date-epoch
|
||||
timestamp))
|
||||
(time (gmtime (string->number timestamp)))
|
||||
(d-m-y (strftime "%-d %B %Y" time)))
|
||||
(display d-m-y)))
|
||||
(_
|
||||
(format (current-error-port) "Usage: mdate-from-git.scm FILE\n")
|
||||
(exit 2))))
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
# GNU Guix --- Functional package management for GNU
|
||||
# Copyright © 2012, 2013, 2014, 2015, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
|
||||
# Copyright © 2012, 2013, 2014, 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
|
||||
# Copyright © 2017 Eric Bavier <bavier@cray.com>
|
||||
#
|
||||
# This file is part of GNU Guix.
|
||||
@@ -42,15 +42,25 @@ export GUILE_LOAD_COMPILED_PATH GUILE_LOAD_PATH
|
||||
PATH="$abs_top_builddir/scripts:$abs_top_builddir:$PATH"
|
||||
export PATH
|
||||
|
||||
# The daemon invokes 'guix'; tell it which one to use.
|
||||
GUIX="$abs_top_builddir/scripts/guix"
|
||||
export GUIX
|
||||
# Daemon helpers.
|
||||
|
||||
# Sanity check.
|
||||
if [ "$1" = "guix" ] && [ ! -f "$GUIX" ]; then
|
||||
echo "$GUIX is not built. Please run 'make scripts/guix'."
|
||||
exit 1
|
||||
fi
|
||||
NIX_ROOT_FINDER="$abs_top_builddir/nix/scripts/list-runtime-roots"
|
||||
NIX_SUBSTITUTERS="$abs_top_builddir/nix/scripts/substitute"
|
||||
NIX_LIBEXEC_DIR="@abs_top_builddir@/nix/scripts" # for 'guix-authenticate'
|
||||
|
||||
export NIX_ROOT_FINDER NIX_SUBSTITUTERS NIX_LIBEXEC_DIR
|
||||
|
||||
NIX_BUILD_HOOK="$abs_top_builddir/nix/scripts/offload"
|
||||
@BUILD_DAEMON_OFFLOAD_TRUE@export NIX_BUILD_HOOK
|
||||
@BUILD_DAEMON_OFFLOAD_FALSE@# No offloading support.
|
||||
@BUILD_DAEMON_OFFLOAD_FALSE@unset NIX_BUILD_HOOK
|
||||
|
||||
# The following variables need only be defined when compiling Guix
|
||||
# modules, but we define them to be on the safe side in case of
|
||||
# auto-compilation.
|
||||
|
||||
NIX_HASH="@NIX_HASH@"
|
||||
export NIX_HASH
|
||||
|
||||
# Define $GUIX_UNINSTALLED to prevent `guix' from
|
||||
# prepending @guilemoduledir@ to the Guile load paths.
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2016, 2018 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/>.
|
||||
|
||||
(define-module (run-system-tests)
|
||||
#:use-module (gnu tests)
|
||||
#:use-module (guix store)
|
||||
#:use-module (guix status)
|
||||
#:use-module (guix monads)
|
||||
#:use-module (guix derivations)
|
||||
#:use-module (guix ui)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:use-module (srfi srfi-34)
|
||||
#:use-module (ice-9 match)
|
||||
#:export (run-system-tests))
|
||||
|
||||
(define (built-derivations* drv)
|
||||
(lambda (store)
|
||||
(guard (c ((nix-protocol-error? c)
|
||||
(values #f store)))
|
||||
(values (build-derivations store drv) store))))
|
||||
|
||||
(define (filterm mproc lst) ;XXX: move to (guix monads)
|
||||
(with-monad %store-monad
|
||||
(>>= (foldm %store-monad
|
||||
(lambda (item result)
|
||||
(mlet %store-monad ((keep? (mproc item)))
|
||||
(return (if keep?
|
||||
(cons item result)
|
||||
result))))
|
||||
'()
|
||||
lst)
|
||||
(lift1 reverse %store-monad))))
|
||||
|
||||
(define (run-system-tests . args)
|
||||
(define tests
|
||||
;; Honor the 'TESTS' environment variable so that one can select a subset
|
||||
;; of tests to run in the usual way:
|
||||
;;
|
||||
;; make check-system TESTS=installed-os
|
||||
(match (getenv "TESTS")
|
||||
(#f
|
||||
(all-system-tests))
|
||||
((= string-tokenize (tests ...))
|
||||
(filter (lambda (test)
|
||||
(member (system-test-name test) tests))
|
||||
(all-system-tests)))))
|
||||
|
||||
(format (current-error-port) "Running ~a system tests...~%"
|
||||
(length tests))
|
||||
|
||||
(with-store store
|
||||
(with-status-report print-build-event
|
||||
(run-with-store store
|
||||
(mlet* %store-monad ((drv (mapm %store-monad system-test-value tests))
|
||||
(out -> (map derivation->output-path drv)))
|
||||
(mbegin %store-monad
|
||||
(show-what-to-build* drv)
|
||||
(set-build-options* #:keep-going? #t #:keep-failed? #t
|
||||
#:print-build-trace #t
|
||||
#:print-extended-build-trace? #t
|
||||
#:fallback? #t)
|
||||
(built-derivations* drv)
|
||||
(mlet %store-monad ((valid (filterm (store-lift valid-path?)
|
||||
out))
|
||||
(failed (filterm (store-lift
|
||||
(negate valid-path?))
|
||||
out)))
|
||||
(format #t "TOTAL: ~a\n" (length drv))
|
||||
(for-each (lambda (item)
|
||||
(format #t "PASS: ~a~%" item))
|
||||
valid)
|
||||
(for-each (lambda (item)
|
||||
(format #t "FAIL: ~a~%" item))
|
||||
failed)
|
||||
(exit (null? failed)))))))))
|
||||
Executable → Regular
+58
-175
@@ -1,13 +1,8 @@
|
||||
#!/bin/sh
|
||||
exec guile --no-auto-compile -e main -s "$0" "$@"
|
||||
!#
|
||||
;;;; test-driver.scm - Guile test driver for Automake testsuite harness
|
||||
|
||||
(define script-version "2026-03-21.02") ;UTC
|
||||
(define script-version "2017-03-22.13") ;UTC
|
||||
|
||||
;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
|
||||
;;; Copyright © 2021 Maxim Cournoyer <maxim@guixotic.coop>
|
||||
;;; Copyright © 2024 Tomas Volf <~@wolfsden.cz>
|
||||
;;;
|
||||
;;; This program is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
@@ -29,44 +24,27 @@ exec guile --no-auto-compile -e main -s "$0" "$@"
|
||||
;;;
|
||||
;;;; Code:
|
||||
|
||||
(use-modules (ice-9 format)
|
||||
(ice-9 getopt-long)
|
||||
(use-modules (ice-9 getopt-long)
|
||||
(ice-9 pretty-print)
|
||||
(ice-9 regex)
|
||||
(srfi srfi-1)
|
||||
(srfi srfi-19)
|
||||
(srfi srfi-26)
|
||||
(srfi srfi-64)
|
||||
(srfi srfi-71))
|
||||
(srfi srfi-64))
|
||||
|
||||
(define (show-help)
|
||||
(display "Usage:
|
||||
test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
|
||||
[--expect-failure={yes|no}] [--color-tests={yes|no}]
|
||||
[--select=REGEXP] [--exclude=REGEXP] [--errors-only={yes|no}]
|
||||
[--enable-hard-errors={yes|no}] [--brief={yes|no}}]
|
||||
[--show-duration={yes|no}] [--]
|
||||
[--enable-hard-errors={yes|no}] [--brief={yes|no}}] [--]
|
||||
TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
|
||||
The '--test-name' option is mandatory. The '--select' and '--exclude' options
|
||||
allow selecting or excluding individual test cases via a regexp, respectively.
|
||||
The '--errors-only' option can be set to \"yes\" to limit the logged test case
|
||||
metadata to only those test cases that failed. When set to \"yes\", the
|
||||
'--brief' option disables printing the individual test case result to the
|
||||
console. When '--show-duration' is set to \"yes\", the time elapsed per test
|
||||
case is shown.\n"))
|
||||
The '--test-name', '--log-file' and '--trs-file' options are mandatory.\n"))
|
||||
|
||||
(define %options
|
||||
'((test-name (value #t))
|
||||
(log-file (value #t))
|
||||
(trs-file (value #t))
|
||||
(select (value #t))
|
||||
(exclude (value #t))
|
||||
(errors-only (value #t))
|
||||
(color-tests (value #t))
|
||||
(expect-failure (value #t)) ;XXX: not implemented yet
|
||||
(enable-hard-errors (value #t)) ;not implemented in SRFI-64
|
||||
(brief (value #t))
|
||||
(show-duration (value #t))
|
||||
(help (single-char #\h) (value #f))
|
||||
(version (single-char #\V) (value #f))))
|
||||
|
||||
@@ -97,120 +75,56 @@ case is shown.\n"))
|
||||
"[m") ;no color
|
||||
result)))
|
||||
|
||||
(define* (test-result-kind* #:optional (runner (test-runner-current)))
|
||||
;; TODO: Since Guile 3.0.11, the test-result-kind value of tests not
|
||||
;; selected by specifiers is #f instead of 'skip, which seems like a bug.
|
||||
;; Revert to use 'test-result-kind' after
|
||||
;; <https://codeberg.org/guile/guile/issues/133> is resolved and made and
|
||||
;; available in Guix.
|
||||
(or (test-result-ref runner 'result-kind)
|
||||
'skip))
|
||||
|
||||
(define (current-test-full-name runner)
|
||||
"Get full name (test group path + name) of current test."
|
||||
(format #f "~{~a~^/~}: ~a"
|
||||
(test-runner-group-path runner)
|
||||
(test-runner-test-name runner)))
|
||||
|
||||
|
||||
;;;
|
||||
;;; SRFI 64 custom test runner.
|
||||
;;;
|
||||
|
||||
(define* (test-runner-gnu test-name #:key color? brief? errors-only?
|
||||
show-duration?
|
||||
(out-port (current-output-port))
|
||||
(trs-port (%make-void-port "w"))
|
||||
select exclude)
|
||||
"Return a custom SRFI-64 test runner and a `finalize' procedure as multiple
|
||||
values. TEST-NAME is a string specifying the file name of the current the
|
||||
test. COLOR? specifies whether to use colors. When BRIEF? is true, the
|
||||
individual test cases results are masked and only the summary is shown.
|
||||
ERRORS-ONLY? reduces the amount of test case metadata logged to only that of
|
||||
the failed test cases. OUT-PORT and TRS-PORT must be output ports. OUT-PORT
|
||||
defaults to the current output port, while TRS-PORT defaults to a void port,
|
||||
which means no TRS output is logged. SELECT and EXCLUDE may take a regular
|
||||
expression to select or exclude individual test cases based on their names.
|
||||
|
||||
After the tests are finished running, the `finalize' procedure should be
|
||||
called to do the final reporting."
|
||||
|
||||
(define test-cases-start-time (make-hash-table))
|
||||
(define* (test-runner-gnu test-name #:key color? brief? out-port trs-port)
|
||||
"Return an custom SRFI-64 test runner. TEST-NAME is a string specifying the
|
||||
file name of the current the test. COLOR? specifies whether to use colors,
|
||||
and BRIEF?, well, you know. OUT-PORT and TRS-PORT must be output ports. The
|
||||
current output port is supposed to be redirected to a '.log' file."
|
||||
|
||||
(define (test-on-test-begin-gnu runner)
|
||||
;; Procedure called at the start of an individual test case, before the
|
||||
;; test expression (and expected value) are evaluated.
|
||||
(let ((test-case-name (current-test-full-name runner))
|
||||
(start-time (current-time time-monotonic)))
|
||||
(hash-set! test-cases-start-time test-case-name start-time)))
|
||||
|
||||
(define (test-skipped? runner)
|
||||
(eq? 'skip (test-result-kind* runner)))
|
||||
|
||||
(define (test-failed? runner)
|
||||
(not (or (test-passed? runner)
|
||||
(test-skipped? runner))))
|
||||
(let ((result (cute assq-ref (test-result-alist runner) <>)))
|
||||
(format #t "test-name: ~A~%" (result 'test-name))
|
||||
(format #t "location: ~A~%"
|
||||
(string-append (result 'source-file) ":"
|
||||
(number->string (result 'source-line))))
|
||||
(test-display "source" (result 'source-form) #:pretty? #t)))
|
||||
|
||||
(define (test-on-test-end-gnu runner)
|
||||
;; Procedure called at the end of an individual test case, when the result
|
||||
;; of the test is available.
|
||||
(let* ((results (test-result-alist runner))
|
||||
(result? (cut assq <> results))
|
||||
(result (cut assq-ref results <>))
|
||||
(test-case-name (current-test-full-name runner))
|
||||
(start (hash-ref test-cases-start-time test-case-name))
|
||||
(end (current-time time-monotonic))
|
||||
(time-elapsed (time-difference end start))
|
||||
(time-elapsed-seconds (+ (time-second time-elapsed)
|
||||
(* 1e-9 (time-nanosecond time-elapsed)))))
|
||||
(unless (or brief? (and errors-only? (test-skipped? runner)))
|
||||
(result (cut assq-ref results <>)))
|
||||
(unless brief?
|
||||
;; Display the result of each test case on the console.
|
||||
(format out-port "~a: ~a - ~a ~@[[~,3fs]~]~%"
|
||||
(result->string (test-result-kind* runner) #:colorize? color?)
|
||||
test-name test-case-name
|
||||
(and show-duration? time-elapsed-seconds)))
|
||||
(format out-port "~A: ~A - ~A~%"
|
||||
(result->string (test-result-kind runner) #:colorize? color?)
|
||||
test-name (test-runner-test-name runner)))
|
||||
(when (result? 'expected-value)
|
||||
(test-display "expected-value" (result 'expected-value)))
|
||||
(when (result? 'expected-error)
|
||||
(test-display "expected-error" (result 'expected-error) #:pretty? #t))
|
||||
(when (result? 'actual-value)
|
||||
(test-display "actual-value" (result 'actual-value)))
|
||||
(when (result? 'actual-error)
|
||||
(test-display "actual-error" (result 'actual-error) #:pretty? #t))
|
||||
(format #t "result: ~a~%" (result->string (result 'result-kind)))
|
||||
(newline)
|
||||
(format trs-port ":test-result: ~A ~A~%"
|
||||
(result->string (test-result-kind runner))
|
||||
(test-runner-test-name runner))))
|
||||
|
||||
(unless (and errors-only? (not (test-failed? runner)))
|
||||
(format #t "test-name: ~A~%" test-case-name)
|
||||
(format #t "location: ~A~%"
|
||||
(string-append (result 'source-file) ":"
|
||||
(number->string (result 'source-line))))
|
||||
(test-display "source" (result 'source-form) #:pretty? #t)
|
||||
(when (result? 'expected-value)
|
||||
(test-display "expected-value" (result 'expected-value)))
|
||||
(when (result? 'expected-error)
|
||||
(test-display "expected-error" (result 'expected-error) #:pretty? #t))
|
||||
(when (result? 'actual-value)
|
||||
(test-display "actual-value" (result 'actual-value)))
|
||||
(when (result? 'actual-error)
|
||||
(test-display "actual-error" (result 'actual-error) #:pretty? #t))
|
||||
(format #t "result: ~a~%" (result->string (result 'result-kind)))
|
||||
(newline))
|
||||
|
||||
(format trs-port ":test-result: ~A ~A [~,3fs]~%"
|
||||
(result->string (test-result-kind* runner))
|
||||
test-case-name time-elapsed-seconds)))
|
||||
|
||||
(define (finalize runner)
|
||||
"Procedure to call after all tests finish to do the final reporting."
|
||||
(define (test-on-group-end-gnu runner)
|
||||
;; Procedure called by a 'test-end', including at the end of a test-group.
|
||||
(let ((fail (or (positive? (test-runner-fail-count runner))
|
||||
(positive? (test-runner-xpass-count runner))))
|
||||
(skip (or (positive? (test-runner-skip-count runner))
|
||||
(positive? (test-runner-xfail-count runner)))))
|
||||
(format trs-port ":global-test-result: ~{~A~^,~}~%"
|
||||
(filter-map (λ (proc str)
|
||||
(let ((n (proc runner)))
|
||||
(if (positive? n) str #f)))
|
||||
(list test-runner-pass-count
|
||||
test-runner-fail-count
|
||||
test-runner-xpass-count
|
||||
test-runner-xfail-count
|
||||
test-runner-skip-count)
|
||||
(list "PASS"
|
||||
"FAIL"
|
||||
"XPASS"
|
||||
"XFAIL"
|
||||
"SKIP")))
|
||||
;; XXX: The global results need some refinements for XPASS.
|
||||
(format trs-port ":global-test-result: ~A~%"
|
||||
(if fail "FAIL" (if skip "SKIP" "PASS")))
|
||||
(format trs-port ":recheck: ~A~%"
|
||||
(if fail "yes" "no"))
|
||||
(format trs-port ":copy-in-global-log: ~A~%"
|
||||
@@ -220,26 +134,15 @@ called to do the final reporting."
|
||||
(format out-port "~A: ~A~%"
|
||||
(result->string (if fail 'fail (if skip 'skip 'pass))
|
||||
#:colorize? color?)
|
||||
test-name))))
|
||||
test-name))
|
||||
#f))
|
||||
|
||||
(let ((runner (test-runner-null)))
|
||||
(test-runner-on-test-begin! runner test-on-test-begin-gnu)
|
||||
(test-runner-on-test-end! runner test-on-test-end-gnu)
|
||||
(test-runner-on-group-end! runner test-on-group-end-gnu)
|
||||
(test-runner-on-bad-end-name! runner test-on-bad-end-name-simple)
|
||||
(values runner
|
||||
(λ () (finalize runner)))))
|
||||
|
||||
|
||||
;;;
|
||||
;;; SRFI 64 test specifiers.
|
||||
;;;
|
||||
(define (test-match-name* regexp)
|
||||
"Return a test specifier that matches a test name against REGEXP."
|
||||
(compose (cut string-match regexp <>) current-test-full-name))
|
||||
|
||||
(define (test-match-name*/negated regexp)
|
||||
"Return a negated test specifier version of test-match-name*."
|
||||
(compose not (test-match-name* regexp)))
|
||||
runner))
|
||||
|
||||
|
||||
;;;
|
||||
@@ -251,46 +154,26 @@ called to do the final reporting."
|
||||
(option (cut option-ref opts <> <>)))
|
||||
(cond
|
||||
((option 'help #f) (show-help))
|
||||
((option 'version #f) (format #t "test-driver.scm ~A~%" script-version))
|
||||
((option 'version #f) (format #t "test-driver.scm ~A" script-version))
|
||||
(else
|
||||
(let* ((log (and=> (option 'log-file #f) (cut open-file <> "w0")))
|
||||
(trs (and=> (option 'trs-file #f) (cut open-file <> "wl")))
|
||||
(out (duplicate-port (current-output-port) "wl"))
|
||||
(test-name (option 'test-name #f))
|
||||
(select (option 'select #f))
|
||||
(exclude (option 'exclude #f))
|
||||
(test-specifiers (filter-map
|
||||
identity
|
||||
(list (and=> select test-match-name*)
|
||||
(and=> exclude test-match-name*/negated))))
|
||||
(test-specifier (apply test-match-all test-specifiers))
|
||||
(color-tests (if (assoc 'color-tests opts)
|
||||
(option->boolean opts 'color-tests)
|
||||
#t)))
|
||||
(when log
|
||||
(redirect-port log (current-output-port))
|
||||
(redirect-port log (current-warning-port))
|
||||
(redirect-port log (current-error-port)))
|
||||
(let ((runner
|
||||
finalize (test-runner-gnu
|
||||
test-name
|
||||
#:color? color-tests
|
||||
#:brief? (option->boolean opts 'brief)
|
||||
#:errors-only? (option->boolean opts 'errors-only)
|
||||
#:show-duration? (option->boolean
|
||||
opts 'show-duration)
|
||||
#:out-port out #:trs-port trs)))
|
||||
(test-apply runner test-specifier
|
||||
(lambda _
|
||||
(load-from-path test-name)))
|
||||
(finalize))
|
||||
(and=> log close-port)
|
||||
(and=> trs close-port)
|
||||
(let ((log (open-file (option 'log-file "") "w0"))
|
||||
(trs (open-file (option 'trs-file "") "wl"))
|
||||
(out (duplicate-port (current-output-port) "wl")))
|
||||
(redirect-port log (current-output-port))
|
||||
(redirect-port log (current-warning-port))
|
||||
(redirect-port log (current-error-port))
|
||||
(test-with-runner
|
||||
(test-runner-gnu (option 'test-name #f)
|
||||
#:color? (option->boolean opts 'color-tests)
|
||||
#:brief? (option->boolean opts 'brief)
|
||||
#:out-port out #:trs-port trs)
|
||||
(load-from-path (option 'test-name #f)))
|
||||
(close-port log)
|
||||
(close-port trs)
|
||||
(close-port out))))
|
||||
(exit 0)))
|
||||
|
||||
;;; Local Variables:
|
||||
;;; mode: scheme
|
||||
;;; eval: (add-hook 'write-file-functions 'time-stamp)
|
||||
;;; time-stamp-start: "(define script-version \""
|
||||
;;; time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
|
||||
+22
-37
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
# GNU Guix --- Functional package management for GNU
|
||||
# Copyright © 2012-2019, 2021, 2025 Ludovic Courtès <ludo@gnu.org>
|
||||
# Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
|
||||
#
|
||||
# This file is part of GNU Guix.
|
||||
#
|
||||
@@ -50,18 +50,20 @@ then
|
||||
# it or its parent directories. See <http://bugs.gnu.org/17935>.
|
||||
NIX_STORE_DIR="`cd "@GUIX_TEST_ROOT@/store"; pwd -P`"
|
||||
|
||||
GUIX_LOG_DIRECTORY="@GUIX_TEST_ROOT@/var/log/guix"
|
||||
GUIX_DATABASE_DIRECTORY="@GUIX_TEST_ROOT@/db"
|
||||
NIX_LOCALSTATE_DIR="@GUIX_TEST_ROOT@/var"
|
||||
NIX_LOG_DIR="@GUIX_TEST_ROOT@/var/log/guix"
|
||||
NIX_DB_DIR="@GUIX_TEST_ROOT@/db"
|
||||
NIX_ROOT_FINDER="@abs_top_builddir@/nix/scripts/list-runtime-roots"
|
||||
|
||||
# Choose a PID-dependent name to allow for parallel builds. Note
|
||||
# that the directory name must be chosen so that the socket's file
|
||||
# name is less than 108-char long (the size of `sun_path' in glibc).
|
||||
# Currently, in Nix builds, we're at ~106 chars...
|
||||
GUIX_STATE_DIRECTORY="@GUIX_TEST_ROOT@/var/$$"
|
||||
NIX_STATE_DIR="@GUIX_TEST_ROOT@/var/$$"
|
||||
|
||||
# We can't exit when we reach the limit, because perhaps the test doesn't
|
||||
# actually rely on the daemon, but at least warn.
|
||||
if test "`echo -n "$GUIX_STATE_DIRECTORY/daemon-socket/socket" | wc -c`" -ge 108
|
||||
if test "`echo -n "$NIX_STATE_DIR/daemon-socket/socket" | wc -c`" -ge 108
|
||||
then
|
||||
echo "warning: exceeding socket file name limit; test may fail!" >&2
|
||||
fi
|
||||
@@ -73,58 +75,41 @@ then
|
||||
# Copy the keys so that the secret key has the right permissions (the
|
||||
# daemon errors out when this is not the case.)
|
||||
mkdir -p "$GUIX_CONFIGURATION_DIRECTORY"
|
||||
cp "@abs_top_srcdir@/tests/keys/openpgp/signing-key.sec" \
|
||||
"@abs_top_srcdir@/tests/keys/openpgp/signing-key.pub" \
|
||||
"$GUIX_CONFIGURATION_DIRECTORY"
|
||||
cp "@abs_top_srcdir@/tests/signing-key.sec" \
|
||||
"@abs_top_srcdir@/tests/signing-key.pub" \
|
||||
"$GUIX_CONFIGURATION_DIRECTORY"
|
||||
chmod 400 "$GUIX_CONFIGURATION_DIRECTORY/signing-key.sec"
|
||||
fi
|
||||
|
||||
# A place to store data of the substituter.
|
||||
GUIX_BINARY_SUBSTITUTE_URL="file://$GUIX_STATE_DIRECTORY/substituter-data"
|
||||
rm -rf "$GUIX_STATE_DIRECTORY/substituter-data"
|
||||
mkdir -p "$GUIX_STATE_DIRECTORY/substituter-data"
|
||||
GUIX_BINARY_SUBSTITUTE_URL="file://$NIX_STATE_DIR/substituter-data"
|
||||
rm -rf "$NIX_STATE_DIR/substituter-data"
|
||||
mkdir -p "$NIX_STATE_DIR/substituter-data"
|
||||
|
||||
# For a number of tests, we want to allow unsigned narinfos, for
|
||||
# simplicity.
|
||||
GUIX_ALLOW_UNAUTHENTICATED_SUBSTITUTES=yes
|
||||
|
||||
# Place for the substituter's cache.
|
||||
XDG_CACHE_HOME="$GUIX_STATE_DIRECTORY/cache-$$"
|
||||
XDG_CACHE_HOME="$NIX_STATE_DIR/cache-$$"
|
||||
|
||||
# For the (guix import snix) tests.
|
||||
NIXPKGS="@NIXPKGS@"
|
||||
|
||||
export NIX_IGNORE_SYMLINK_STORE NIX_STORE_DIR \
|
||||
GUIX_LOG_DIRECTORY GUIX_STATE_DIRECTORY GUIX_DATABASE_DIRECTORY \
|
||||
GUIX_BINARY_SUBSTITUTE_URL \
|
||||
NIX_LOCALSTATE_DIR NIX_LOG_DIR NIX_STATE_DIR NIX_DB_DIR \
|
||||
NIX_ROOT_FINDER GUIX_BINARY_SUBSTITUTE_URL \
|
||||
GUIX_ALLOW_UNAUTHENTICATED_SUBSTITUTES \
|
||||
GUIX_CONFIGURATION_DIRECTORY XDG_CACHE_HOME
|
||||
|
||||
# Create a fresh directory with restrictive permissions so that our test
|
||||
# daemon's weak isolation can't be exploited by other users
|
||||
rm -rf "$GUIX_STATE_DIRECTORY/daemon-socket"
|
||||
mkdir -m 0700 "$GUIX_STATE_DIRECTORY/daemon-socket"
|
||||
|
||||
# If unprivileged user namespaces are not supported, pass
|
||||
# '--disable-chroot'.
|
||||
if [ -f /proc/self/ns/user ] \
|
||||
&& { [ ! -f /proc/sys/kernel/unprivileged_userns_clone ] \
|
||||
|| [ "$(cat /proc/sys/kernel/unprivileged_userns_clone)" -eq 1 ]; }
|
||||
then
|
||||
extra_options=""
|
||||
else
|
||||
extra_options="--disable-chroot"
|
||||
echo "unprivileged user namespaces not supported; \
|
||||
running 'guix-daemon $extra_options'" >&2
|
||||
fi
|
||||
GUIX_CONFIGURATION_DIRECTORY XDG_CACHE_HOME NIXPKGS
|
||||
|
||||
# Launch the daemon without chroot support because is may be
|
||||
# unavailable, for instance if we're not running as root.
|
||||
"@abs_top_builddir@/pre-inst-env" \
|
||||
"@abs_top_builddir@/guix-daemon" \
|
||||
$extra_options \
|
||||
--allow-aslr \
|
||||
"@abs_top_builddir@/guix-daemon" --disable-chroot \
|
||||
--substitute-urls="$GUIX_BINARY_SUBSTITUTE_URL" &
|
||||
|
||||
daemon_pid=$!
|
||||
trap "kill $daemon_pid ; rm -rf $GUIX_STATE_DIRECTORY" EXIT
|
||||
trap "kill $daemon_pid ; rm -rf $NIX_STATE_DIR" EXIT
|
||||
|
||||
# The test suite expects the 'guile-bootstrap' package to be available.
|
||||
# Normally the Guile bootstrap tarball is downloaded by a fixed-output
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -95,7 +95,7 @@ paragraph."
|
||||
(with-atomic-file-replacement news-file
|
||||
(lambda (input output)
|
||||
(rewrite-org-section input output
|
||||
(make-regexp "^(\\*+).*new packages")
|
||||
(make-regexp "^(\\*+) (.*) new packages")
|
||||
(lambda (match port)
|
||||
(let ((stars (match:substring match 1)))
|
||||
(format port
|
||||
@@ -105,7 +105,7 @@ paragraph."
|
||||
(define (write-packages-updates news-file old new)
|
||||
"Write to NEWS-FILE the list of packages upgraded between OLD and NEW."
|
||||
(define important
|
||||
'("gcc-toolchain" "glibc" "binutils" "gdb" ;toolchain
|
||||
'("gcc" "glibc" "binutils" "gdb" ;toolchain
|
||||
"shepherd" "linux-libre" "xorg-server" "cups" ;OS
|
||||
"gnome" "xfce" "enlightenment" "lxde" "mate" ;desktop env.
|
||||
"guile" "bash" "python" "python2" "perl" ;languages
|
||||
@@ -141,7 +141,7 @@ paragraph."
|
||||
(with-atomic-file-replacement news-file
|
||||
(lambda (input output)
|
||||
(rewrite-org-section input output
|
||||
(make-regexp "^(\\*+).*package updates")
|
||||
(make-regexp "^(\\*+) (.*) package updates")
|
||||
(lambda (match port)
|
||||
(let ((stars (match:substring match 1))
|
||||
(lst (map (match-lambda
|
||||
@@ -166,22 +166,16 @@ paragraph."
|
||||
(string-append data-directory "/packages-"
|
||||
version ".txt"))
|
||||
|
||||
(define (package<? p1 p2)
|
||||
(string<? (package-full-name p1) (package-full-name p2)))
|
||||
|
||||
(let-values (((previous-version new-version)
|
||||
(call-with-input-file news-file NEWS->versions)))
|
||||
(format (current-error-port) "Updating NEWS for ~a to ~a...~%"
|
||||
previous-version new-version)
|
||||
(let* ((old (call-with-input-file (package-file previous-version)
|
||||
read))
|
||||
(all-packages/sorted (sort (fold-packages (lambda (p r)
|
||||
(cons p r))
|
||||
'())
|
||||
package<?))
|
||||
(new (map (lambda (p)
|
||||
(cons (package-name p) (package-version p)))
|
||||
all-packages/sorted)))
|
||||
(new (fold-packages (lambda (p r)
|
||||
(alist-cons (package-name p) (package-version p)
|
||||
r))
|
||||
'())))
|
||||
(call-with-output-file (package-file new-version)
|
||||
(lambda (port)
|
||||
(pretty-print new port)))
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2017-2018, 2025 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2020, 2025 Maxim Cournoyer <maxim@guixotic.coop>
|
||||
;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -25,25 +24,20 @@
|
||||
;;; Code:
|
||||
|
||||
(use-modules (guix)
|
||||
(guix ui)
|
||||
(guix git-download)
|
||||
(guix upstream)
|
||||
(guix utils)
|
||||
(guix base32)
|
||||
(guix build utils)
|
||||
(guix scripts hash)
|
||||
(gnu packages package-management)
|
||||
(ice-9 match)
|
||||
(ice-9 popen)
|
||||
(ice-9 regex)
|
||||
(ice-9 textual-ports)
|
||||
(srfi srfi-1)
|
||||
(srfi srfi-2)
|
||||
(srfi srfi-26))
|
||||
(ice-9 match))
|
||||
|
||||
(define %top-srcdir
|
||||
(string-append (current-source-directory) "/.."))
|
||||
|
||||
(define version-controlled?
|
||||
(git-predicate %top-srcdir))
|
||||
|
||||
(define (package-definition-location)
|
||||
"Return the source properties of the definition of the 'guix' package."
|
||||
(call-with-input-file (location-file (package-location guix))
|
||||
@@ -107,107 +101,43 @@ COMMIT."
|
||||
(exp
|
||||
(error "'guix' package definition is not as expected" exp)))))
|
||||
|
||||
(define (git-add-worktree directory commit)
|
||||
"Create a new git worktree at DIRECTORY, detached on commit COMMIT."
|
||||
(invoke "git" "worktree" "add" "--detach" directory commit))
|
||||
|
||||
(define (call-with-temporary-git-worktree commit proc)
|
||||
"Execute PROC in the context of a temporary git worktree created from
|
||||
COMMIT. PROC receives the temporary directory file name as an argument."
|
||||
(call-with-temporary-directory
|
||||
(lambda (tmp-directory)
|
||||
(dynamic-wind
|
||||
(lambda ()
|
||||
#t)
|
||||
(lambda ()
|
||||
(git-add-worktree tmp-directory commit)
|
||||
(proc tmp-directory))
|
||||
(lambda ()
|
||||
(invoke "git" "worktree" "remove" "--force" tmp-directory))))))
|
||||
|
||||
(define %guix-git-repo-push-url-regexp
|
||||
"(git.guix.gnu.org|codeberg.org/guix|git@codeberg.org:guix)/guix(.git)? \\(push\\)")
|
||||
|
||||
(define (with-input-pipe-to-string prog . args)
|
||||
(let* ((input-pipe (apply open-pipe* OPEN_READ prog args))
|
||||
(output (get-string-all input-pipe))
|
||||
(exit-val (status:exit-val (close-pipe input-pipe))))
|
||||
(unless (zero? exit-val)
|
||||
(error (format #f "Command ~s exited with non-zero exit status: ~s"
|
||||
(string-join (cons prog args)) exit-val)))
|
||||
(string-trim-both output)))
|
||||
|
||||
(define (find-origin-remote)
|
||||
"Find the name of the git remote with the Guix git repo URL."
|
||||
(and-let* ((remotes (string-split (with-input-pipe-to-string
|
||||
"git" "remote" "-v")
|
||||
#\newline))
|
||||
(origin-entry (find (cut string-match
|
||||
%guix-git-repo-push-url-regexp
|
||||
<>)
|
||||
remotes)))
|
||||
(first (string-split origin-entry #\tab))))
|
||||
|
||||
(define (commit-already-pushed? remote commit)
|
||||
"True if COMMIT is found in the REMOTE repository."
|
||||
(not (string-null? (with-input-pipe-to-string
|
||||
"git" "branch" "-r" "--contains" commit
|
||||
(string-append remote "/master")))))
|
||||
|
||||
(define (keep-source-in-store store source)
|
||||
"Add SOURCE to the store under the name that the 'guix' package expects."
|
||||
|
||||
;; Add SOURCE to the store, but this time under the real name used in the
|
||||
;; 'origin'. This allows us to build the package without having to make a
|
||||
;; real checkout; thus, it also works when working on a private branch.
|
||||
(reload-module
|
||||
(resolve-module '(gnu packages package-management)))
|
||||
|
||||
(let* ((source (add-to-store store
|
||||
(origin-file-name (package-source guix))
|
||||
#t "sha256" source
|
||||
#:select? (git-predicate source)))
|
||||
(root (store-path-package-name source)))
|
||||
|
||||
;; Add an indirect GC root for SOURCE in the current directory.
|
||||
(false-if-exception (delete-file root))
|
||||
(symlink source root)
|
||||
(add-indirect-root store
|
||||
(string-append (getcwd) "/" root))
|
||||
|
||||
(info (G_ "source code kept in ~a (GC root: ~a)~%")
|
||||
source root)))
|
||||
|
||||
|
||||
(define (main . args)
|
||||
(match args
|
||||
((commit version)
|
||||
(with-directory-excursion %top-srcdir
|
||||
(or (getenv "GUIX_ALLOW_ME_TO_USE_PRIVATE_COMMIT")
|
||||
(let ((remote (find-origin-remote)))
|
||||
(unless remote
|
||||
(leave (G_ "Failed to find the origin git remote.~%")))
|
||||
(commit-already-pushed? remote commit))
|
||||
(leave (G_ "Commit ~a is not pushed upstream. Aborting.~%") commit))
|
||||
(call-with-temporary-git-worktree commit
|
||||
(lambda (tmp-directory)
|
||||
(let* ((hash (nix-base32-string->bytevector
|
||||
(string-trim-both
|
||||
(with-output-to-string
|
||||
(lambda ()
|
||||
(guix-hash "-rx" tmp-directory))))))
|
||||
(location (package-definition-location))
|
||||
(old-hash (content-hash-value
|
||||
(origin-hash (package-source guix)))))
|
||||
(edit-expression location
|
||||
(update-definition commit hash
|
||||
#:old-hash old-hash
|
||||
#:version version))
|
||||
;; When GUIX_ALLOW_ME_TO_USE_PRIVATE_COMMIT is set, the sources are
|
||||
;; added to the store. This is used as part of 'make release'.
|
||||
(when (getenv "GUIX_ALLOW_ME_TO_USE_PRIVATE_COMMIT")
|
||||
(with-store store
|
||||
(keep-source-in-store store tmp-directory))))))))
|
||||
(with-store store
|
||||
(let* ((source (add-to-store store
|
||||
"guix-checkout" ;dummy name
|
||||
#t "sha256" %top-srcdir
|
||||
#:select? version-controlled?))
|
||||
(hash (query-path-hash store source))
|
||||
(location (package-definition-location))
|
||||
(old-hash (origin-sha256 (package-source guix))))
|
||||
(edit-expression location
|
||||
(update-definition commit hash
|
||||
#:old-hash old-hash
|
||||
#:version version))
|
||||
|
||||
;; Re-add SOURCE to the store, but this time under the real name used
|
||||
;; in the 'origin'. This allows us to build the package without
|
||||
;; having to make a real checkout; thus, it also works when working
|
||||
;; on a private branch.
|
||||
(reload-module
|
||||
(resolve-module '(gnu packages package-management)))
|
||||
|
||||
(let* ((source (add-to-store store
|
||||
(origin-file-name (package-source guix))
|
||||
#t "sha256" source))
|
||||
(root (store-path-package-name source)))
|
||||
|
||||
;; Add an indirect GC root for SOURCE in the current directory.
|
||||
(false-if-exception (delete-file root))
|
||||
(symlink source root)
|
||||
(add-indirect-root store
|
||||
(string-append (getcwd) "/" root))
|
||||
|
||||
(format #t "source code for commit ~a: ~a (GC root: ~a)~%"
|
||||
commit source root)))))
|
||||
((commit)
|
||||
;; Automatically deduce the version and revision numbers.
|
||||
(main commit #f))))
|
||||
|
||||
@@ -1,90 +0,0 @@
|
||||
#! /bin/sh
|
||||
# -*-scheme-*-
|
||||
build_aux=$(dirname $0)
|
||||
srcdir=$build_aux/..
|
||||
export LC_ALL=en_US.UTF-8
|
||||
export TZ=UTC0
|
||||
exec guile --no-auto-compile -L $srcdir -C $srcdir -e main -s "$0" "$@"
|
||||
!#
|
||||
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; This program 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.
|
||||
;;;
|
||||
;;; This program 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 script provides an xgettext wrapper to (re)set POT-Creation-Date from
|
||||
;;; a Git timestamp. Test doing something like:
|
||||
;;;
|
||||
;;; build-aux/xgettext.scm --files-from=po/guix/POTFILES.in --default-domain=test
|
||||
;;;
|
||||
;;;; Code:
|
||||
|
||||
(use-modules (srfi srfi-1)
|
||||
(srfi srfi-26)
|
||||
(ice-9 curried-definitions)
|
||||
(ice-9 match)
|
||||
(ice-9 popen)
|
||||
(ice-9 rdelim)
|
||||
(guix build utils))
|
||||
|
||||
(define ((option? name) option)
|
||||
(string-prefix? name option))
|
||||
|
||||
(define (get-option args name)
|
||||
(let ((option (find (option? name) args)))
|
||||
(and option
|
||||
(substring option (string-length name)))))
|
||||
|
||||
(define (pipe-command command)
|
||||
(let* ((port (apply open-pipe* OPEN_READ command))
|
||||
(output (read-string port)))
|
||||
(close-port port)
|
||||
output))
|
||||
|
||||
|
||||
;;;
|
||||
;;; Entry point.
|
||||
;;;
|
||||
(define (main args)
|
||||
(fluid-set! %default-port-encoding #f)
|
||||
(let* ((files-from (get-option args "--files-from="))
|
||||
(default-domain (get-option args "--default-domain="))
|
||||
(directory (or (get-option args "--directory=") "."))
|
||||
(xgettext (or (get-option args "--xgettext=") "xgettext"))
|
||||
(xgettext-args (filter (negate (option? "--xgettext=")) args))
|
||||
(command (match xgettext-args
|
||||
((xgettext.scm args ...)
|
||||
`(,xgettext ,@args))))
|
||||
(result (apply system* command))
|
||||
(status (/ result 256)))
|
||||
(if (or (not (zero? status))
|
||||
(not files-from))
|
||||
(exit status)
|
||||
(let* ((text (with-input-from-file files-from read-string))
|
||||
(lines (string-split text #\newline))
|
||||
(files (filter (negate (cute string-prefix? "#" <>)) lines))
|
||||
(files (map (cute string-append directory "/" <>) files))
|
||||
(git-command `("git" "log" "--pretty=format:%ci" "-n1" ,@files))
|
||||
(timestamp (pipe-command git-command))
|
||||
(source-date-epoch (or (getenv "SOURCE_DATE_EPOCH") "1"))
|
||||
(timestamp (if (string-null? timestamp) source-date-epoch
|
||||
timestamp))
|
||||
(po-file (string-append default-domain ".po")))
|
||||
(substitute* po-file
|
||||
(("(\"POT-Creation-Date: )[^\\]*" all header)
|
||||
(string-append header timestamp)))))))
|
||||
+40
-37
@@ -13,7 +13,7 @@ if test "x$guix_build_daemon" = "xyes"; then
|
||||
GUIX_ASSERT_CXX11
|
||||
|
||||
AC_PROG_RANLIB
|
||||
AC_CONFIG_HEADERS([nix/config.h])
|
||||
AC_CONFIG_HEADER([nix/config.h])
|
||||
|
||||
dnl Use 64-bit file system calls so that we can support files > 2 GiB.
|
||||
AC_SYS_LARGEFILE
|
||||
@@ -34,37 +34,35 @@ if test "x$guix_build_daemon" = "xyes"; then
|
||||
dnl Look for SQLite, a required dependency.
|
||||
PKG_CHECK_MODULES([SQLITE3], [sqlite3 >= 3.6.19])
|
||||
|
||||
AC_DEFINE([NIX_VERSION], ["0.0.0"], [Fake Nix version number.])
|
||||
AC_DEFINE_UNQUOTED([SYSTEM], ["$guix_system"],
|
||||
[Guix host system type--i.e., platform and OS kernel tuple.])
|
||||
|
||||
case "$LIBGCRYPT_PREFIX" in
|
||||
no)
|
||||
LIBGCRYPT_CPPFLAGS=""
|
||||
LIBGCRYPT_CFLAGS=""
|
||||
;;
|
||||
*)
|
||||
LIBGCRYPT_CPPFLAGS="-I$LIBGCRYPT_PREFIX/include"
|
||||
LIBGCRYPT_CFLAGS="-I$LIBGCRYPT_PREFIX/include"
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$LIBGCRYPT_LIBDIR" in
|
||||
no | "")
|
||||
LIBGCRYPT_LIBS="-lgcrypt"
|
||||
;;
|
||||
*)
|
||||
LIBGCRYPT_LDFLAGS="-L$LIBGCRYPT_LIBDIR"
|
||||
LIBGCRYPT_LIBS="-L$LIBGCRYPT_LIBDIR -lgcrypt"
|
||||
;;
|
||||
esac
|
||||
|
||||
LIBGCRYPT_LIBS="-lgcrypt"
|
||||
AC_SUBST([LIBGCRYPT_CPPFLAGS])
|
||||
AC_SUBST([LIBGCRYPT_LDFLAGS])
|
||||
AC_SUBST([LIBGCRYPT_CFLAGS])
|
||||
AC_SUBST([LIBGCRYPT_LIBS])
|
||||
|
||||
save_CPPFLAGS="$CPPFLAGS"
|
||||
save_CFLAGS="$CFLAGS"
|
||||
save_LDFLAGS="$LDFLAGS"
|
||||
save_LIBS="$LIBS"
|
||||
CPPFLAGS="$CPPFLAGS $LIBGCRYPT_CPPFLAGS"
|
||||
CFLAGS="$CFLAGS $LIBGCRYPT_CFLAGS"
|
||||
LDFLAGS="$LDFLAGS $LIBGCRYPT_LDFLAGS"
|
||||
LIBS="$LIBS $LIBGCRYPT_LIBS"
|
||||
|
||||
have_gcrypt=yes
|
||||
AC_CHECK_LIB([gcrypt], [gcry_md_open], [:], [have_gcrypt=no])
|
||||
@@ -72,14 +70,13 @@ if test "x$guix_build_daemon" = "xyes"; then
|
||||
if test "x$have_gcrypt" != "xyes"; then
|
||||
AC_MSG_ERROR([GNU libgcrypt not found; please install it.])
|
||||
fi
|
||||
CPPFLAGS="$save_CPPFLAGS"
|
||||
|
||||
CFLAGS="$save_CFLAGS"
|
||||
LDFLAGS="$save_LDFLAGS"
|
||||
LIBS="$save_LIBS"
|
||||
|
||||
dnl Chroot support.
|
||||
AC_CHECK_FUNCS([chroot unshare])
|
||||
AC_CHECK_HEADERS([sched.h sys/param.h sys/mount.h sys/syscall.h \
|
||||
linux/close_range.h sys/prctl.h])
|
||||
AC_CHECK_HEADERS([sched.h sys/param.h sys/mount.h sys/syscall.h])
|
||||
|
||||
if test "x$ac_cv_func_chroot" != "xyes"; then
|
||||
AC_MSG_ERROR(['chroot' function missing, bailing out])
|
||||
@@ -94,9 +91,19 @@ if test "x$guix_build_daemon" = "xyes"; then
|
||||
dnl sched_setaffinity: to improve RPC locality.
|
||||
dnl statvfs: to detect disk-full conditions.
|
||||
dnl strsignal: for error reporting.
|
||||
dnl statx: fine-grain 'stat' call, new in glibc 2.28.
|
||||
AC_CHECK_FUNCS([lutimes lchown posix_fallocate sched_setaffinity \
|
||||
statvfs nanosleep strsignal statx close_range])
|
||||
statvfs nanosleep strsignal])
|
||||
|
||||
dnl Check whether the store optimiser can optimise symlinks.
|
||||
AC_MSG_CHECKING([whether it is possible to create a link to a symlink])
|
||||
ln -s bla tmp_link
|
||||
if ln tmp_link tmp_link2 2> /dev/null; then
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(CAN_LINK_SYMLINK, 1, [Whether link() works on symlinks.])
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
rm -f tmp_link tmp_link2
|
||||
|
||||
dnl Check for <locale>.
|
||||
AC_LANG_PUSH(C++)
|
||||
@@ -108,15 +115,17 @@ if test "x$guix_build_daemon" = "xyes"; then
|
||||
dnl to do i686-linux builds on x86_64-linux machines.
|
||||
AC_CHECK_HEADERS([sys/personality.h])
|
||||
|
||||
dnl Check for <linux/fs.h> (for immutable file support).
|
||||
AC_CHECK_HEADERS([linux/fs.h])
|
||||
|
||||
dnl Determine the appropriate default list of substitute URLs (GnuTLS
|
||||
dnl is required so we can default to 'https'.)
|
||||
GUIX_SUBSTITUTE_URLS="https://bordeaux.guix.gnu.org https://ci.guix.gnu.org"
|
||||
guix_substitute_urls="https://ci.guix.info"
|
||||
|
||||
AC_MSG_CHECKING([for default substitute URLs])
|
||||
AC_MSG_RESULT([$GUIX_SUBSTITUTE_URLS])
|
||||
AC_SUBST([GUIX_SUBSTITUTE_URLS])
|
||||
AC_MSG_RESULT([$guix_substitute_urls])
|
||||
|
||||
AC_DEFINE_UNQUOTED([GUIX_SUBSTITUTE_URLS], ["$GUIX_SUBSTITUTE_URLS"],
|
||||
AC_DEFINE_UNQUOTED([GUIX_SUBSTITUTE_URLS], ["$guix_substitute_urls"],
|
||||
[Default list of substitute URLs used by 'guix-daemon'.])
|
||||
|
||||
dnl Check for Guile-SSH, which is required by 'guix offload'.
|
||||
@@ -140,22 +149,16 @@ if test "x$guix_build_daemon" = "xyes"; then
|
||||
|
||||
GUIX_CHECK_LOCALSTATEDIR
|
||||
|
||||
case "x$host_os" in
|
||||
x*linux*)
|
||||
AC_CHECK_PROG([have_slirp4netns], [slirp4netns], [yes])
|
||||
if test "x$have_slirp4netns" != "xyes"
|
||||
then
|
||||
AC_MSG_WARN([Slirp4netns not found; fixed-output chroot builds won't work without it.])
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
AC_PATH_PROG([SLIRP4NETNS], [slirp4netns], [slirp4netns])
|
||||
AC_DEFINE_UNQUOTED([SLIRP4NETNS], ["$SLIRP4NETNS"],
|
||||
[Path to the slirp4netns program, if any.])
|
||||
|
||||
dnl needed for inspecting 64-bit system call arguments in seccomp's Berkeley
|
||||
dnl Packet Filter VM, which only directly operates on 32-bit words.
|
||||
AC_C_BIGENDIAN
|
||||
AC_CONFIG_FILES([nix/scripts/list-runtime-roots],
|
||||
[chmod +x nix/scripts/list-runtime-roots])
|
||||
AC_CONFIG_FILES([nix/scripts/download],
|
||||
[chmod +x nix/scripts/download])
|
||||
AC_CONFIG_FILES([nix/scripts/substitute],
|
||||
[chmod +x nix/scripts/substitute])
|
||||
AC_CONFIG_FILES([nix/scripts/authenticate],
|
||||
[chmod +x nix/scripts/authenticate])
|
||||
AC_CONFIG_FILES([nix/scripts/offload],
|
||||
[chmod +x nix/scripts/offload])
|
||||
fi
|
||||
|
||||
AM_CONDITIONAL([HAVE_LIBBZ2], [test "x$HAVE_LIBBZ2" = "xyes"])
|
||||
|
||||
+87
-128
@@ -1,31 +1,14 @@
|
||||
# -*- Autoconf -*-
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
#
|
||||
# GNU Guix --- Functional package management for GNU
|
||||
# Copyright © 2012-2021, 2022-2023, 2025 Ludovic Courtès <ludo@gnu.org>
|
||||
# Copyright © 2013, 2016 Mark H Weaver <mhw@netris.org>
|
||||
# Copyright © 2014-2016 Alex Kost <alezost@gmail.com>
|
||||
# Copyright © 2014-2016 David Thompson <davet@gnu.org>
|
||||
# Copyright © 2015-2016, 2018 Mathieu Lirzin <mthl@gnu.org>
|
||||
# Copyright © 2015-2020 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||
# Copyright © 2016 Eric Le Bihan <eric.le.bihan.dev@free.fr>
|
||||
# Copyright © 2016, 2018, 2020, 2022 Ricardo Wurmus <rekado@elephly.net>
|
||||
# Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||
# Copyright © 2018 nikita <nikita@n0.is>
|
||||
# Copyright © 2018, 2021 Julien Lepiller <julien@lepiller.eu>
|
||||
# Copyright © 2017-2018 Eric Bavier <bavier@posteo.net>
|
||||
# Copyright © 2020-2021, 2023-204 Maxim Cournoyer <maxim@guixotic.coop>
|
||||
# Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||
# Copyright © 2024 gemmaro <gemmaro.dev@gmail.com>
|
||||
|
||||
AC_PREREQ([2.69])
|
||||
AC_PREREQ(2.68)
|
||||
AC_INIT([GNU Guix],
|
||||
[m4_esyscmd([build-aux/git-version-gen .tarball-version])],
|
||||
[https://codeberg.org/guix/guix/issues/], [guix],
|
||||
[bug-guix@gnu.org], [guix],
|
||||
[https://www.gnu.org/software/guix/])
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
|
||||
AM_INIT_AUTOMAKE([1.14 gnu tar-ustar silent-rules subdir-objects \
|
||||
AM_INIT_AUTOMAKE([1.14 gnu silent-rules subdir-objects \
|
||||
color-tests parallel-tests -Woverride -Wno-portability])
|
||||
|
||||
# Enable silent rules by default.
|
||||
@@ -38,58 +21,46 @@ dnl For the C++ code. This must be used early.
|
||||
AC_USE_SYSTEM_EXTENSIONS
|
||||
|
||||
AM_GNU_GETTEXT([external])
|
||||
AM_GNU_GETTEXT_VERSION([0.19.1])
|
||||
AM_GNU_GETTEXT_VERSION([0.18.1])
|
||||
|
||||
GUIX_SYSTEM_TYPE
|
||||
GUIX_ASSERT_SUPPORTED_SYSTEM
|
||||
GUIX_CHANNEL_METADATA
|
||||
|
||||
AM_CONDITIONAL([CROSS_COMPILING], [test "x$cross_compiling" = "xyes"])
|
||||
|
||||
AC_ARG_WITH(store-dir,
|
||||
AS_HELP_STRING([--with-store-dir=PATH],
|
||||
AC_HELP_STRING([--with-store-dir=PATH],
|
||||
[file name of the store (defaults to /gnu/store)]),
|
||||
[storedir="$withval"],
|
||||
[storedir="/gnu/store"])
|
||||
AC_SUBST(storedir)
|
||||
|
||||
AC_ARG_WITH([bash-completion-dir],
|
||||
AS_HELP_STRING([--with-bash-completion-dir=DIR],
|
||||
AC_HELP_STRING([--with-bash-completion-dir=DIR],
|
||||
[name of the Bash completion directory]),
|
||||
[bashcompletiondir="$withval"],
|
||||
[bashcompletiondir='${sysconfdir}/bash_completion.d'])
|
||||
AC_SUBST([bashcompletiondir])
|
||||
|
||||
AC_ARG_WITH([zsh-completion-dir],
|
||||
AS_HELP_STRING([--with-zsh-completion-dir=DIR],
|
||||
AC_HELP_STRING([--with-zsh-completion-dir=DIR],
|
||||
[name of the Zsh completion directory]),
|
||||
[zshcompletiondir="$withval"],
|
||||
[zshcompletiondir='${datadir}/zsh/site-functions'])
|
||||
AC_SUBST([zshcompletiondir])
|
||||
|
||||
AC_ARG_WITH([fish-completion-dir],
|
||||
AS_HELP_STRING([--with-fish-completion-dir=DIR],
|
||||
AC_HELP_STRING([--with-fish-completion-dir=DIR],
|
||||
[name of the Fish completion directory]),
|
||||
[fishcompletiondir="$withval"],
|
||||
[fishcompletiondir='${datadir}/fish/vendor_completions.d'])
|
||||
AC_SUBST([fishcompletiondir])
|
||||
|
||||
AC_ARG_WITH([selinux-policy-dir],
|
||||
AS_HELP_STRING([--with-selinux-policy-dir=DIR],
|
||||
AC_HELP_STRING([--with-selinux-policy-dir=DIR],
|
||||
[name of the SELinux policy directory]),
|
||||
[selinux_policydir="$withval"],
|
||||
[selinux_policydir='${datadir}/selinux/'])
|
||||
AC_SUBST([selinux_policydir])
|
||||
|
||||
AC_ARG_WITH([apparmor-profile-dir],
|
||||
AS_HELP_STRING([--with-apparmor-profile-dir=DIR],
|
||||
[name of the AppArmor profile directory]),
|
||||
[apparmor_profiledir="$withval"],
|
||||
[apparmor_profiledir='${sysconfdir}/apparmor.d'])
|
||||
AC_SUBST([apparmor_profiledir])
|
||||
apparmor_profile_tunablesdir='${apparmor_profiledir}/tunables'
|
||||
AC_SUBST([apparmor_profile_tunablesdir])
|
||||
|
||||
dnl Better be verbose.
|
||||
AC_MSG_CHECKING([for the store directory])
|
||||
AC_MSG_RESULT([$storedir])
|
||||
@@ -99,16 +70,15 @@ AC_ARG_ENABLE([daemon],
|
||||
[guix_build_daemon="$enableval"],
|
||||
[guix_build_daemon="yes"])
|
||||
|
||||
dnl Prepare a version of $localstatedir & co. that does not contain references
|
||||
dnl to shell variables. Also set some sane default directory variables for
|
||||
dnl use with the Guix. This also causes localstatedir to be /var and
|
||||
dnl sysconfdir to be /etc.
|
||||
AC_PREFIX_DEFAULT()
|
||||
guix_prefix="`eval echo $prefix | sed -e"s|NONE|$ac_default_prefix|g"`"
|
||||
# Prepare a version of $localstatedir & co. that does not contain references
|
||||
# to shell variables.
|
||||
guix_prefix="`eval echo $prefix | sed -e"s|NONE|/usr/local|g"`"
|
||||
guix_localstatedir="`eval echo $localstatedir | sed -e "s|NONE|$guix_prefix|g"`"
|
||||
guix_sysconfdir="`eval echo $sysconfdir | sed -e "s|NONE|$guix_prefix|g"`"
|
||||
guix_sbindir="`eval echo $sbindir | sed -e "s|NONE|$guix_prefix|g"`"
|
||||
AC_SUBST([guix_localstatedir])
|
||||
AC_SUBST([guix_sysconfdir])
|
||||
AC_SUBST([guix_sbindir])
|
||||
|
||||
GUIX_CHECK_FILE_NAME_LIMITS([can_run_tests])
|
||||
AM_CONDITIONAL([CAN_RUN_TESTS], [test "x$can_run_tests" = "xyes"])
|
||||
@@ -123,18 +93,15 @@ m4_pattern_forbid([^GUIX_])
|
||||
|
||||
dnl Search for 'guile' and 'guild'. This macro defines
|
||||
dnl 'GUILE_EFFECTIVE_VERSION'.
|
||||
GUILE_PKG([3.0])
|
||||
GUILE_PKG([2.2 2.0])
|
||||
GUILE_PROGS
|
||||
if test "x$GUILD" = "x"; then
|
||||
AC_MSG_ERROR(['guild' binary not found; please check your Guile installation.])
|
||||
AC_MSG_ERROR(['guild' binary not found; please check your guile-2.x installation.])
|
||||
fi
|
||||
|
||||
dnl (guix ui), notably, requires 'default-optimization-level' added in 3.0.3.
|
||||
dnl (guix serialization) requires 'bytevector-slice' added in 3.0.9.
|
||||
PKG_CHECK_MODULES([GUILE], [guile-3.0 >= 3.0.9])
|
||||
|
||||
dnl Get CFLAGS and LDFLAGS for libguile.
|
||||
GUILE_FLAGS
|
||||
if test "x$GUILE_EFFECTIVE_VERSION" = "x2.0"; then
|
||||
PKG_CHECK_MODULES([GUILE], [guile-2.0 >= 2.0.13])
|
||||
fi
|
||||
|
||||
dnl Installation directories for .scm and .go files.
|
||||
guilemoduledir="${datarootdir}/guile/site/$GUILE_EFFECTIVE_VERSION"
|
||||
@@ -155,12 +122,9 @@ if test "x$have_guile_git" != "xyes"; then
|
||||
AC_MSG_ERROR([Guile-Git is missing; please install it.])
|
||||
fi
|
||||
|
||||
dnl Check Guile-Git version resp. required recently added symbol.
|
||||
GUILE_MODULE_REQUIRED_EXPORT([(git)], [graph-descendant?])
|
||||
|
||||
dnl Check for Guile-JSON.
|
||||
GUIX_CHECK_GUILE_JSON
|
||||
if test "x$guix_cv_have_recent_guile_json" != "xyes"; then
|
||||
GUILE_MODULE_AVAILABLE([have_guile_json], [(json)])
|
||||
if test "x$have_guile_json" != "xyes"; then
|
||||
AC_MSG_ERROR([Guile-JSON is missing; please install it.])
|
||||
fi
|
||||
|
||||
@@ -170,64 +134,18 @@ if test "x$guix_cv_have_recent_guile_sqlite3" != "xyes"; then
|
||||
AC_MSG_ERROR([A recent Guile-SQLite3 could not be found; please install it.])
|
||||
fi
|
||||
|
||||
GUIX_CHECK_GUILE_GCRYPT
|
||||
if test "x$guix_cv_have_recent_guile_gcrypt" != "xyes"; then
|
||||
AC_MSG_ERROR([A recent Guile-Gcrypt could not be found; please install it.])
|
||||
GUILE_MODULE_AVAILABLE([have_guile_gcrypt], [(gcrypt hash)])
|
||||
if test "x$have_guile_gcrypt" != "xyes"; then
|
||||
AC_MSG_ERROR([Guile-Gcrypt could not be found; please install it.])
|
||||
fi
|
||||
|
||||
GUIX_CHECK_GUILE_GIT
|
||||
if test "x$guix_cv_have_recent_guile_git" != "xyes"; then
|
||||
AC_MSG_ERROR([A recent Guile-Git could not be found; please install it.])
|
||||
fi
|
||||
|
||||
dnl Check for the optional Guile-Lib.
|
||||
GUILE_MODULE_EXPORTS([have_guile_lib], [(htmlprag)], [%strict-tokenizer?])
|
||||
AM_CONDITIONAL([HAVE_GUILE_LIB], [test "x$have_guile_lib" = "xyes"])
|
||||
AM_COND_IF(HAVE_GUILE_LIB,,
|
||||
[AC_MSG_WARN([The Guile-Lib requirement was not satisfied (>= 0.2.7);
|
||||
Some features such as the Go importer will not be usable.])])
|
||||
|
||||
dnl Check for Guile-zlib.
|
||||
GUIX_CHECK_GUILE_ZLIB
|
||||
if test "x$guix_cv_have_recent_guile_zlib" != "xyes"; then
|
||||
AC_MSG_ERROR([A recent Guile-zlib could not be found; please install it.])
|
||||
fi
|
||||
|
||||
dnl Check for Guile-lzlib.
|
||||
GUILE_MODULE_AVAILABLE([have_guile_lzlib], [(lzlib)])
|
||||
if test "x$have_guile_lzlib" != "xyes"; then
|
||||
AC_MSG_ERROR([Guile-lzlib is missing; please install it.])
|
||||
fi
|
||||
|
||||
dnl Check for Guile-semver.
|
||||
GUILE_MODULE_AVAILABLE([have_guile_semver], [(semver)])
|
||||
if test "x$have_guile_semver" != "xyes"; then
|
||||
AC_MSG_ERROR([Guile-semver is missing; please install it.])
|
||||
fi
|
||||
|
||||
dnl Check for Guile-Avahi.
|
||||
GUILE_MODULE_AVAILABLE([have_guile_avahi], [(avahi)])
|
||||
AM_CONDITIONAL([HAVE_GUILE_AVAHI],
|
||||
[test "x$have_guile_avahi" = "xyes"])
|
||||
|
||||
dnl Guile-newt is used by the graphical installer.
|
||||
GUILE_MODULE_AVAILABLE([have_guile_newt], [(newt)])
|
||||
|
||||
AC_ARG_ENABLE([installer],
|
||||
AS_HELP_STRING([--enable-installer], [Build the graphical installer sources.]))
|
||||
|
||||
AS_IF([test "x$enable_installer" = "xyes"], [
|
||||
if test "x$have_guile_newt" != "xyes"; then
|
||||
AC_MSG_ERROR([Guile-newt could not be found; please install it.])
|
||||
fi
|
||||
])
|
||||
|
||||
AM_CONDITIONAL([ENABLE_INSTALLER],
|
||||
[test "x$enable_installer" = "xyes"])
|
||||
|
||||
dnl Make sure we have a full-fledged Guile.
|
||||
GUIX_ASSERT_GUILE_FEATURES([regex posix socket net-db threads])
|
||||
|
||||
dnl Make sure we don't suffer from the bug in 'equal?' wrt. syntax objects
|
||||
dnl found in 2.2.1. See <https://bugs.gnu.org/29903>.
|
||||
GUIX_ASSERT_SYNTAX_OBJECT_EQUAL
|
||||
|
||||
AC_PROG_SED
|
||||
|
||||
dnl Decompressors, for use by the substituter and other modules.
|
||||
@@ -238,13 +156,42 @@ AC_SUBST([GZIP])
|
||||
AC_SUBST([BZIP2])
|
||||
AC_SUBST([XZ])
|
||||
|
||||
dnl Git is now required for the "builtin:git-download" derivation builder.
|
||||
AC_PATH_PROG([GIT], [git])
|
||||
if test "x$GIT" = "x"; then
|
||||
AC_MSG_ERROR([Git is missing; please install it.])
|
||||
fi
|
||||
AC_SUBST([GIT])
|
||||
AC_ARG_WITH([nix-prefix],
|
||||
[AS_HELP_STRING([--with-nix-prefix=DIR],
|
||||
[search for Nix in DIR (for testing purposes and '--disable-daemon' builds)])],
|
||||
[case "$withval" in
|
||||
yes|no) ;;
|
||||
*)
|
||||
NIX_PREFIX="$withval"
|
||||
PATH="$NIX_PREFIX/bin:$PATH"; export PATH
|
||||
AC_SUBST([NIX_PREFIX])
|
||||
;;
|
||||
esac],
|
||||
[])
|
||||
|
||||
AC_PATH_PROG([NIX_HASH], [nix-hash])
|
||||
if test "x$guix_build_daemon$NIX_HASH" = "xno"; then
|
||||
AC_MSG_ERROR([Nix programs not found; please install Nix or use `--with-nix-prefix'.])
|
||||
fi
|
||||
|
||||
AC_ARG_WITH([nixpkgs],
|
||||
[AS_HELP_STRING([--with-nixpkgs=DIR],
|
||||
[search for Nixpkgs in DIR (for testing purposes only)])],
|
||||
[case "$withval" in
|
||||
yes|no) AC_MSG_ERROR([Please use `--with-nixpkgs=DIR'.]);;
|
||||
*) NIXPKGS="$withval";;
|
||||
esac],
|
||||
[])
|
||||
|
||||
AC_MSG_CHECKING([for Nixpkgs source tree])
|
||||
if test -f "$NIXPKGS/default.nix"; then
|
||||
AC_MSG_RESULT([$NIXPKGS])
|
||||
AC_SUBST([NIXPKGS])
|
||||
else
|
||||
AC_MSG_RESULT([not found])
|
||||
fi
|
||||
|
||||
LIBGCRYPT="libgcrypt"
|
||||
LIBGCRYPT_LIBDIR="no"
|
||||
LIBGCRYPT_PREFIX="no"
|
||||
|
||||
@@ -254,6 +201,7 @@ AC_ARG_WITH([libgcrypt-prefix],
|
||||
yes|no)
|
||||
;;
|
||||
*)
|
||||
LIBGCRYPT="$withval/lib/libgcrypt"
|
||||
LIBGCRYPT_PREFIX="$withval"
|
||||
LIBGCRYPT_LIBDIR="$withval/lib"
|
||||
;;
|
||||
@@ -264,9 +212,11 @@ AC_ARG_WITH([libgcrypt-libdir],
|
||||
[search for GNU libgcrypt's shared library in DIR])],
|
||||
[case "$withval" in
|
||||
yes|no)
|
||||
LIBGCRYPT="libgcrypt"
|
||||
LIBGCRYPT_LIBDIR="no"
|
||||
;;
|
||||
*)
|
||||
LIBGCRYPT="$withval/libgcrypt"
|
||||
LIBGCRYPT_LIBDIR="$withval"
|
||||
;;
|
||||
esac])
|
||||
@@ -279,9 +229,24 @@ case "x$LIBGCRYPT_PREFIX$LIBGCRYPT_LIBDIR" in
|
||||
;;
|
||||
esac
|
||||
|
||||
dnl Library name suitable for `dynamic-link'.
|
||||
AC_MSG_CHECKING([for libgcrypt shared library name])
|
||||
AC_MSG_RESULT([$LIBGCRYPT])
|
||||
AC_SUBST([LIBGCRYPT])
|
||||
AC_SUBST([LIBGCRYPT_PREFIX])
|
||||
AC_SUBST([LIBGCRYPT_LIBDIR])
|
||||
|
||||
dnl Library name of zlib suitable for 'dynamic-link'.
|
||||
GUIX_LIBZ_LIBDIR([libz_libdir])
|
||||
if test "x$libz_libdir" = "x"; then
|
||||
LIBZ="libz"
|
||||
else
|
||||
LIBZ="$libz_libdir/libz"
|
||||
fi
|
||||
AC_MSG_CHECKING([for zlib's shared library name])
|
||||
AC_MSG_RESULT([$LIBZ])
|
||||
AC_SUBST([LIBZ])
|
||||
|
||||
dnl Check for Guile-SSH, for the (guix ssh) module.
|
||||
GUIX_CHECK_GUILE_SSH
|
||||
AM_CONDITIONAL([HAVE_GUILE_SSH],
|
||||
@@ -299,17 +264,12 @@ dnl Manual pages.
|
||||
AM_MISSING_PROG([HELP2MAN], [help2man])
|
||||
|
||||
dnl Documentation translation.
|
||||
AM_MISSING_PROG([PO4A], [po4a])
|
||||
AM_MISSING_PROG([PO4A_TRANSLATE], [po4a-translate])
|
||||
AM_MISSING_PROG([PO4A_UPDATEPO], [po4a-updatepo])
|
||||
|
||||
AC_MSG_CHECKING([if building from git])
|
||||
if test -e .git; then
|
||||
in_git_p=yes
|
||||
else
|
||||
in_git_p=no
|
||||
fi
|
||||
AC_MSG_RESULT([$in_git_p])
|
||||
AM_CONDITIONAL([in_git_p],
|
||||
[test "x$in_git_p" = "xyes"])
|
||||
dnl Emacs (optional), for 'etc/indent-package.el'.
|
||||
AC_PATH_PROG([EMACS], [emacs], [/usr/bin/emacs])
|
||||
AC_SUBST([EMACS])
|
||||
|
||||
case "$storedir" in
|
||||
/gnu/store)
|
||||
@@ -324,12 +284,11 @@ AC_CONFIG_FILES([Makefile
|
||||
po/guix/Makefile.in
|
||||
po/packages/Makefile.in
|
||||
etc/guix-daemon.cil
|
||||
etc/apparmor.d/tunables/guix
|
||||
guix/config.scm])
|
||||
|
||||
AC_CONFIG_FILES([etc/committer.scm], [chmod +x etc/committer.scm])
|
||||
AC_CONFIG_FILES([test-env:build-aux/test-env.in], [chmod +x test-env])
|
||||
AC_CONFIG_FILES([pre-inst-env:build-aux/pre-inst-env.in],
|
||||
[chmod +x pre-inst-env])
|
||||
AC_CONFIG_FILES([etc/indent-code.el], [chmod +x etc/indent-code.el])
|
||||
|
||||
AC_OUTPUT
|
||||
|
||||
Vendored
-1557
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,534 @@
|
||||
@node Mitwirken
|
||||
@chapter Mitwirken
|
||||
|
||||
Dieses Projekt basiert auf Kooperation, daher benötigen wir Ihre Hilfe, um
|
||||
es wachsen zu lassen! Bitte kontaktieren Sie uns auf
|
||||
@email{guix-devel@@gnu.org} und @code{#guix} im Freenode-IRC-Netzwerk. Wir
|
||||
freuen uns auf Ihre Ideen, Fehlerberichte, Patches und alles, was hilfreich
|
||||
für das Projekt sein könnte. Besonders willkommen ist Hilfe bei der
|
||||
Erstellung von Paketen (@pxref{Paketrichtlinien}).
|
||||
|
||||
@cindex Verhaltensregeln, für Mitwirkende
|
||||
@cindex Verhaltenskodex für Mitwirkende
|
||||
Wir möchten eine angenehme, freundliche und von Belästigungen freie Umgebung
|
||||
bereitstellen, so dass jeder Beiträge nach seinen Fähigkeiten leisten
|
||||
kann. Zu diesem Zweck verwendet unser Projekt einen »Verhaltenskodex für
|
||||
Mitwirkende«, der von @url{http://contributor-covenant.org/} übernommen
|
||||
wurde. Eine übersetzte Fassung finden Sie auf
|
||||
@url{https://www.contributor-covenant.org/de/version/1/4/code-of-conduct}
|
||||
sowie eine mitgelieferte, englische Fassung in der Datei
|
||||
@file{CODE-OF-CONDUCT} im Quellbaum.
|
||||
|
||||
Von Mitwirkenden wird nicht erwartet, dass sie in Patches oder in der
|
||||
Online-Kommunikation ihre echten Namen preisgeben. Sie können einen
|
||||
beliebigen Namen oder ein Pseudonym ihrer Wahl verwenden.
|
||||
|
||||
@menu
|
||||
* Erstellung aus dem Git:: Das Neueste und Beste.
|
||||
* Guix vor der Installation ausführen:: Hacker-Tricks.
|
||||
* Perfekt eingerichtet:: Die richtigen Werkzeuge.
|
||||
* Code-Stil:: Wie Mitwirkende hygienisch arbeiten.
|
||||
* Einreichen von Patches:: Teilen Sie Ihre Arbeit.
|
||||
@end menu
|
||||
|
||||
@node Erstellung aus dem Git
|
||||
@section Erstellung aus dem Git
|
||||
|
||||
Wenn Sie an Guix selbst hacken wollen, ist es empfehlenswert, dass Sie die
|
||||
neueste Version aus dem Git-Softwarebestand verwenden:
|
||||
|
||||
@example
|
||||
git clone https://git.savannah.gnu.org/git/guix.git
|
||||
@end example
|
||||
|
||||
Wenn Sie Guix aus einem Checkout erstellen, sind außer den bereits in den
|
||||
Installationsanweisungen genannten Paketen weitere nötig
|
||||
(@pxref{Voraussetzungen}).
|
||||
|
||||
@itemize
|
||||
@item @url{http://gnu.org/software/autoconf/, GNU Autoconf};
|
||||
@item @url{http://gnu.org/software/automake/, GNU Automake};
|
||||
@item @url{http://gnu.org/software/gettext/, GNU Gettext};
|
||||
@item @url{http://gnu.org/software/texinfo/, GNU Texinfo};
|
||||
@item @url{http://www.graphviz.org/, Graphviz};
|
||||
@item @url{http://www.gnu.org/software/help2man/, GNU Help2man (optional)}.
|
||||
@end itemize
|
||||
|
||||
Der einfachste Weg, eine Entwicklungsumgebung für Guix einzurichten, ist
|
||||
natürlich, Guix zu benutzen! Der folgende Befehl startet eine neue Shell, in
|
||||
der alle Abhängigkeiten und Umgebungsvariablen bereits eingerichtet sind, um
|
||||
an Guix zu arbeiten:
|
||||
|
||||
@example
|
||||
guix environment guix
|
||||
@end example
|
||||
|
||||
In @xref{Aufruf von guix environment} finden Sie weitere Informationen zu
|
||||
diesem Befehl. Zusätzliche Abhängigkeiten können mit @option{--ad-hoc}
|
||||
hinzugefügt werden:
|
||||
|
||||
@example
|
||||
guix environment guix --ad-hoc help2man git strace
|
||||
@end example
|
||||
|
||||
Führen Sie @command{./bootstrap} aus, um die Infrastruktur des
|
||||
Erstellungssystems mit Autoconf und Automake zu erstellen. Möglicherweise
|
||||
erhalten Sie eine Fehlermeldung wie diese:
|
||||
|
||||
@example
|
||||
configure.ac:46: error: possibly undefined macro: PKG_CHECK_MODULES
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
Das bedeutet wahrscheinlich, dass Autoconf @file{pkg.m4} nicht finden
|
||||
konnte, welches von pkg-config bereitgestellt wird. Stellen Sie sicher, dass
|
||||
@file{pkg.m4} verfügbar ist. Gleiches gilt für den von Guile
|
||||
bereitgestellten Makrosatz @file{guile.m4}. Wenn Sie beispielsweise Automake
|
||||
in @file{/usr/local} installiert haben, würde in @file{/usr/share} nicht
|
||||
nach @file{.m4}-Dateien geschaut. In einem solchen Fall müssen Sie folgenden
|
||||
Befehl aufrufen:
|
||||
|
||||
@example
|
||||
export ACLOCAL_PATH=/usr/share/aclocal
|
||||
@end example
|
||||
|
||||
In @xref{Macro Search Path,,, automake, The GNU Automake Manual} finden Sie
|
||||
weitere Informationen.
|
||||
|
||||
Dann führen Sie wie gewohnt @command{./configure} aus. Achten Sie darauf,
|
||||
@code{--localstatedir=@var{Verzeichnis}} zu übergeben, wobei
|
||||
@var{Verzeichnis} der von Ihrer aktuellen Installation verwendete
|
||||
@code{localstatedir}-Wert ist (weitere Informationen auf @pxref{Der Store}).
|
||||
|
||||
Zum Schluss müssen Sie @code{make check} aufrufen, um die Tests auszuführen
|
||||
(@pxref{Die Testsuite laufen lassen}). Falls etwas fehlschlägt, werfen Sie einen
|
||||
Blick auf die Installationsanweisungen (@pxref{Installation}) oder senden
|
||||
Sie eine E-Mail an die @email{guix-devel@@gnu.org, Mailingliste}.
|
||||
|
||||
|
||||
@node Guix vor der Installation ausführen
|
||||
@section Guix vor der Installation ausführen
|
||||
|
||||
Um eine gesunde Arbeitsumgebung zu erhalten, ist es hilfreich, die im
|
||||
lokalen Quellbaum vorgenommenen Änderungen zunächst zu testen, ohne sie
|
||||
tatsächlich zu installieren. So können Sie zwischen Ihrem
|
||||
Endnutzer-»Straßenanzug« und Ihrem »Faschingskostüm« unterscheiden.
|
||||
|
||||
To that end, all the command-line tools can be used even if you have not run
|
||||
@code{make install}. To do that, you first need to have an environment with
|
||||
all the dependencies available (@pxref{Erstellung aus dem Git}), and then simply
|
||||
prefix each command with @command{./pre-inst-env} (the @file{pre-inst-env}
|
||||
script lives in the top build tree of Guix; it is generated by
|
||||
@command{./configure}), as in@footnote{The @option{-E} flag to
|
||||
@command{sudo} guarantees that @code{GUILE_LOAD_PATH} is correctly set such
|
||||
that @command{guix-daemon} and the tools it uses can find the Guile modules
|
||||
they need.}:
|
||||
|
||||
@example
|
||||
$ sudo -E ./pre-inst-env guix-daemon --build-users-group=guixbuild
|
||||
$ ./pre-inst-env guix build hello
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
Entsprechend, um eine Guile-Sitzung zu öffnen, die die Guix-Module benutzt:
|
||||
|
||||
@example
|
||||
$ ./pre-inst-env guile -c '(use-modules (guix utils)) (pk (%current-system))'
|
||||
|
||||
;;; ("x86_64-linux")
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
@cindex REPL
|
||||
@cindex Lese-Auswerten-Schreiben-Schleife
|
||||
@dots{} und auf einer REPL (@pxref{Using Guile Interactively,,, guile, Guile
|
||||
Reference Manual}):
|
||||
|
||||
@example
|
||||
$ ./pre-inst-env guile
|
||||
scheme@@(guile-user)> ,use(guix)
|
||||
scheme@@(guile-user)> ,use(gnu)
|
||||
scheme@@(guile-user)> (define snakes
|
||||
(fold-packages
|
||||
(lambda (package lst)
|
||||
(if (string-prefix? "python"
|
||||
(package-name package))
|
||||
(cons package lst)
|
||||
lst))
|
||||
'()))
|
||||
scheme@@(guile-user)> (length snakes)
|
||||
$1 = 361
|
||||
@end example
|
||||
|
||||
Das @command{pre-inst-env}-Skript richtet alle Umgebungsvariablen ein, die
|
||||
nötig sind, um dies zu ermöglichen, einschließlich @env{PATH} und
|
||||
@env{GUILE_LOAD_PATH}.
|
||||
|
||||
Note that @command{./pre-inst-env guix pull} does @emph{not} upgrade the
|
||||
local source tree; it simply updates the @file{~/.config/guix/current}
|
||||
symlink (@pxref{Aufruf von guix pull}). Run @command{git pull} instead if you
|
||||
want to upgrade your local source tree.
|
||||
|
||||
|
||||
@node Perfekt eingerichtet
|
||||
@section Perfekt eingerichtet
|
||||
|
||||
Um perfekt für das Hacken an Guix eingerichtet zu sein, brauchen Sie an sich
|
||||
dasselbe wie um perfekt für das Hacken mit Guile (@pxref{Using Guile in
|
||||
Emacs,,, guile, Guile Reference Manual}). Zunächst brauchen Sie mehr als
|
||||
ein Textverarbeitungsprogramm, Sie brauchen
|
||||
@url{http://www.gnu.org/software/emacs, Emacs}, ermächtigt vom wunderbaren
|
||||
@url{http://nongnu.org/geiser/, Geiser}.
|
||||
|
||||
Geiser ermöglicht interaktive und inkrementelle Entwicklung aus Emacs
|
||||
heraus: Code kann in Puffern kompiliert und ausgewertet werden. Zugang zu
|
||||
Online-Dokumentation (Docstrings) steht ebenso zur Verfügung wie
|
||||
kontextabhängige Vervollständigung, @kbd{M-.} um zu einer Objektdefinition
|
||||
zu springen, eine REPL, um Ihren Code auszuprobieren, und mehr
|
||||
(@pxref{Einführung,,, geiser, Geiser User Manual}). Zur bequemen
|
||||
Guix-Entwicklung sollten Sie Guiles Ladepfad so ergänzen, dass die
|
||||
Quelldateien in Ihrem Checkout gefunden werden.
|
||||
|
||||
@lisp
|
||||
;; @r{Angenommen das Guix-Checkout ist in ~/src/guix.}
|
||||
(with-eval-after-load 'geiser-guile
|
||||
(add-to-list 'geiser-guile-load-path "~/src/guix"))
|
||||
@end lisp
|
||||
|
||||
Um den Code tatsächlich zu bearbeiten, bietet Emacs schon einen netten
|
||||
Scheme-Modus. Aber Sie dürfen auch
|
||||
@url{http://www.emacswiki.org/emacs/ParEdit, Paredit} nicht verpassen. Es
|
||||
bietet Hilfsmittel, um direkt mit dem Syntaxbaum zu arbeiten, und kann so
|
||||
zum Beispiel einen S-Ausdruck hochheben oder ihn umhüllen, ihn verschlucken
|
||||
oder den nachfolgenden S-Ausdruck verwerfen, etc.
|
||||
|
||||
@cindex Code-Schnipsel
|
||||
@cindex Vorlagen
|
||||
@cindex Tipparbeit sparen
|
||||
Wir bieten auch Vorlagen für häufige Git-Commit-Nachrichten und
|
||||
Paketdefinitionen im Verzeichnis @file{etc/snippets}. Diese Vorlagen können
|
||||
mit @url{http://joaotavora.github.io/yasnippet/, YASnippet} zusammen benutzt
|
||||
werden, um kurze Auslöse-Zeichenketten zu interaktiven Textschnipseln
|
||||
umzuschreiben. Vielleicht möchten Sie das Schnipselverzeichnis zu Ihrer
|
||||
@var{yas-snippet-dirs}-Variablen in Emacs hinzufügen.
|
||||
|
||||
@lisp
|
||||
;; @r{Angenommen das Guix-Checkout ist in ~/src/guix.}
|
||||
(with-eval-after-load 'yasnippet
|
||||
(add-to-list 'yas-snippet-dirs "~/src/guix/etc/snippets"))
|
||||
@end lisp
|
||||
|
||||
The commit message snippets depend on @url{https://magit.vc/, Magit} to
|
||||
display staged files. When editing a commit message type @code{add}
|
||||
followed by @kbd{TAB} to insert a commit message template for adding a
|
||||
package; type @code{update} followed by @kbd{TAB} to insert a template for
|
||||
updating a package; type @code{https} followed by @kbd{TAB} to insert a
|
||||
template for changing the home page URI of a package to HTTPS.
|
||||
|
||||
Das Hauptschnipsel für @code{scheme-mode} wird ausgelöst, indem Sie
|
||||
@code{package...} gefolgt von @kbd{TAB} eintippen. Dieses Snippet fügt auch
|
||||
die Auslöse-Zeichenkette @code{origin...} ein, die danach weiter
|
||||
umgeschrieben werden kann. Das @code{origin}-Schnipsel kann wiederum andere
|
||||
Auslöse-Zeichenketten einfügen, die alle auf @code{...} enden, was selbst
|
||||
wieder weiter umgeschrieben werden kann.
|
||||
|
||||
|
||||
@node Code-Stil
|
||||
@section Code-Stil
|
||||
|
||||
Im Allgemeinen folgt unser Code den GNU Coding Standards (@pxref{Top,,,
|
||||
standards, GNU Coding Standards}). Da diese aber nicht viel über Scheme zu
|
||||
sagen haben, folgen hier einige zusätzliche Regeln.
|
||||
|
||||
@menu
|
||||
* Programmierparadigmen:: Wie Sie Ihre Elemente zusammenstellen.
|
||||
* Module:: Wo Sie Ihren Code unterbringen.
|
||||
* Datentypen und Mustervergleich:: Implementierung von Datenstrukturen.
|
||||
* Formatierung von Code:: Schreibkonventionen.
|
||||
@end menu
|
||||
|
||||
@node Programmierparadigmen
|
||||
@subsection Programmierparadigmen
|
||||
|
||||
Scheme-Code wird in Guix auf rein funktionale Weise geschrieben. Eine
|
||||
Ausnahme ist Code, der mit Ein- und Ausgabe zu tun hat, und Prozeduren, die
|
||||
grundlegende Konzepte implementieren, wie zum Beispiel die Prozedur
|
||||
@code{memoize}.
|
||||
|
||||
@node Module
|
||||
@subsection Module
|
||||
|
||||
Guile-Module, die beim Erstellen nutzbar sein sollen, müssen im Namensraum
|
||||
@code{(guix build @dots{})} leben. Sie dürfen auf keine anderen Guix- oder
|
||||
GNU-Module Bezug nehmen. Jedoch ist es in Ordnung, wenn ein »wirtsseitiges«
|
||||
Modul ein erstellungsseitiges Modul benutzt.
|
||||
|
||||
Module, die mit dem weiteren GNU-System zu tun haben, sollten im Namensraum
|
||||
@code{(gnu @dots{})} und nicht in @code{(guix @dots{})} stehen.
|
||||
|
||||
@node Datentypen und Mustervergleich
|
||||
@subsection Datentypen und Mustervergleich
|
||||
|
||||
Im klassischen Lisp gibt es die Tendenz, Listen zur Darstellung von allem zu
|
||||
benutzen, und diese dann »händisch« zu durchlaufen mit @code{car},
|
||||
@code{cdr}, @code{cadr} und so weiter. Dieser Stil ist aus verschiedenen
|
||||
Gründen problematisch, insbesondere wegen der Tatsache, dass er schwer zu
|
||||
lesen, schnell fehlerbehaftet und ein Hindernis beim Melden von Typfehlern
|
||||
ist.
|
||||
|
||||
Guix-Code sollte angemessene Datentypen definieren (zum Beispiel mit
|
||||
@code{define-record-type*}) statt Listen zu missbrauchen. Außerdem sollte er
|
||||
das @code{(ice-9 match)}-Modul von Guile zum Mustervergleich benutzen,
|
||||
besonders mit Listen.
|
||||
|
||||
@node Formatierung von Code
|
||||
@subsection Formatierung von Code
|
||||
|
||||
@cindex Formatierung von Code
|
||||
@cindex Code-Stil
|
||||
Beim Schreiben von Scheme-Code halten wir uns an die üblichen
|
||||
Gepflogenheiten unter Scheme-Programmierern. Im Allgemeinen bedeutet das,
|
||||
dass wir uns an @url{http://mumble.net/~campbell/scheme/style.txt,
|
||||
Riastradh's Lisp Style Rules} halten. Es hat sich ergeben, dass dieses
|
||||
Dokument auch die Konventionen beschreibt, die im Code von Guile
|
||||
hauptsächlich verwendet werden. Es ist gut durchdacht und schön geschrieben,
|
||||
also lesen Sie es bitte.
|
||||
|
||||
Ein paar in Guix eingeführte Sonderformen, wie zum Beispiel das
|
||||
@code{substitute*}-Makro, haben abweichende Regeln für die Einrückung. Diese
|
||||
sind in der Datei @file{.dir-locals.el} definiert, die Emacs automatisch
|
||||
benutzt. Beachten Sie auch, dass Emacs-Guix einen Modus namens
|
||||
@code{guix-devel-mode} bereitstellt, der Guix-Code richtig einrückt und
|
||||
hervorhebt (@pxref{Development,,, emacs-guix, The Emacs-Guix Reference
|
||||
Manual}).
|
||||
|
||||
@cindex Einrückung, Code-
|
||||
@cindex Formatierung, Code-
|
||||
Falls Sie nicht Emacs verwenden, sollten Sie sicherstellen, dass Ihr Editor
|
||||
diese Regeln kennt. Um eine Paketdefinition automatisch einzurücken, können
|
||||
Sie auch Folgendes ausführen:
|
||||
|
||||
@example
|
||||
./etc/indent-code.el gnu/packages/@var{Datei}.scm @var{Paket}
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
Dadurch wird die Definition von @var{Paket} in
|
||||
@file{gnu/packages/@var{Datei}.scm} automatisch eingerückt, indem Emacs im
|
||||
Batch-Modus läuft. Um die Einrückung in einer gesamten Datei vorzunehmen,
|
||||
lassen Sie das zweite Argument weg:
|
||||
|
||||
@example
|
||||
./etc/indent-code.el gnu/services/@var{Datei}.scm
|
||||
@end example
|
||||
|
||||
@cindex Vim, zum Editieren von Scheme-Code
|
||||
Wenn Sie Code mit Vim bearbeiten, empfehlen wir, dass Sie @code{:set
|
||||
autoindent} ausführen, damit Ihr Code automatisch eingerückt wird, während
|
||||
Sie ihn schreiben. Außerdem könnte Ihnen
|
||||
@uref{https://www.vim.org/scripts/script.php?script_id=3998,
|
||||
@code{paredit.vim}} dabei helfen, mit all diesen Klammern fertigzuwerden.
|
||||
|
||||
Wir fordern von allen Prozeduren auf oberster Ebene, dass sie über einen
|
||||
Docstring verfügen. Diese Voraussetzung kann jedoch bei einfachen, privaten
|
||||
Prozeduren im Namensraum @code{(guix build @dots{})} aufgeweicht werden.
|
||||
|
||||
Prozeduren sollten nicht mehr als vier positionsbestimmte Parameter
|
||||
haben. Benutzen Sie Schlüsselwort-Parameter für Prozeduren, die mehr als
|
||||
vier Parameter entgegennehmen.
|
||||
|
||||
|
||||
@node Einreichen von Patches
|
||||
@section Einreichen von Patches
|
||||
|
||||
Die Entwicklung wird mit Hilfe des verteilten Versionskontrollsystems Git
|
||||
durchgeführt. Daher ist eine ständige Verbindung zum Repository nicht
|
||||
unbedingt erforderlich. Wir begrüßen Beiträge in Form von Patches, die
|
||||
mittels @code{git format-patch} erstellt und an die Mailingliste
|
||||
@email{guix-patches@@gnu.org} geschickt werden.
|
||||
|
||||
Diese Mailing-Liste setzt auf einer Debbugs-Instanz auf, die zugänglich ist
|
||||
unter @uref{https://bugs.gnu.org/guix-patches}, wodurch wir den Überblick
|
||||
über Eingereichtes behalten können. Jede an diese Mailing-Liste gesendete
|
||||
Nachricht bekommt eine neue Folgenummer zugewiesen, so dass man eine
|
||||
Folge-Email zur Einreichung an @code{@var{NNN}@@debbugs.gnu.org} senden
|
||||
kann, wobei @var{NNN} für die Folgenummer steht (@pxref{Senden einer Patch-Reihe}).
|
||||
|
||||
Bitte schreiben Sie Commit-Logs im ChangeLog-Format (@pxref{Change Logs,,,
|
||||
standards, GNU Coding Standards}); dazu finden Sie Beispiele unter den
|
||||
bisherigen Commits.
|
||||
|
||||
Bevor Sie einen Patch einreichen, der eine Paketdefinition hinzufügt oder
|
||||
verändert, gehen Sie bitte diese Prüfliste durch:
|
||||
|
||||
@enumerate
|
||||
@item
|
||||
Wenn die Autoren der verpackten Software eine kryptographische Signatur für
|
||||
den Tarball der Veröffentlichung anbieten, so machen Sie sich bitte die
|
||||
Mühe, die Echtheit des Archivs zu überprüfen. Für eine abgetrennte
|
||||
GPG-Signaturdatei würden Sie das mit dem Befehl @code{gpg --verify} tun.
|
||||
|
||||
@item
|
||||
Nehmen Sie sich die Zeit, eine passende Zusammenfassung und Beschreibung für
|
||||
das Paket zu verfassen. Unter @xref{Zusammenfassungen und Beschreibungen} finden Sie
|
||||
dazu einige Richtlinien.
|
||||
|
||||
@item
|
||||
Verwenden Sie @code{guix lint @var{Paket}}, wobei @var{Paket} das neue oder
|
||||
geänderte Paket bezeichnet, und beheben Sie alle gemeldeten Fehler
|
||||
(@pxref{Aufruf von guix lint}).
|
||||
|
||||
@item
|
||||
Stellen Sie sicher, dass das Paket auf Ihrer Plattform erstellt werden kann,
|
||||
indem Sie @code{guix build @var{Paket}} ausführen.
|
||||
|
||||
@item
|
||||
@cindex gebündelt
|
||||
Achten Sie darauf, dass im Paket keine Software gebündelt mitgeliefert wird,
|
||||
die bereits in separaten Paketen zur Verfügung steht.
|
||||
|
||||
Manchmal enthalten Pakete Kopien des Quellcodes ihrer Abhängigkeiten, um
|
||||
Nutzern die Installation zu erleichtern. Als eine Distribution wollen wir
|
||||
jedoch sicherstellen, dass solche Pakete die schon in der Distribution
|
||||
verfügbare Fassung benutzen, sofern es eine gibt. Dadurch wird sowohl der
|
||||
Ressourcenverbrauch optimiert (die Abhängigkeit wird so nur einmal erstellt
|
||||
und gespeichert) als auch der Distribution die Möglichkeit gegeben,
|
||||
ergänzende Änderungen durchzuführen, um beispielsweise
|
||||
Sicherheitsaktualisierungen für ein bestimmtes Paket an nur einem Ort
|
||||
einzuspielen, die aber das gesamte System betreffen — gebündelt
|
||||
mitgelieferte Kopien würden dies verhindern.
|
||||
|
||||
@item
|
||||
Schauen Sie sich das von @command{guix size} ausgegebene Profil an
|
||||
(@pxref{Aufruf von guix size}). Dadurch können Sie Referenzen auf andere
|
||||
Pakete finden, die ungewollt vorhanden sind. Dies kann auch dabei helfen, zu
|
||||
entscheiden, ob das Paket aufgespalten werden sollte (@pxref{Pakete mit mehreren Ausgaben.}) und welche optionalen Abhängigkeiten verwendet werden
|
||||
sollten.
|
||||
|
||||
@item
|
||||
Achten Sie bei wichtigen Änderungen darauf, dass abhängige Pakete (falls
|
||||
vorhanden) nicht von der Änderung beeinträchtigt werden; @code{guix refresh
|
||||
--list-dependent @var{Paket}} hilft Ihnen dabei (@pxref{Aufruf von guix refresh}).
|
||||
|
||||
@c ===========================================================================
|
||||
@c
|
||||
@c This file was generated with po4a. Translate the source file.
|
||||
@c
|
||||
@c ===========================================================================
|
||||
@c See <https://lists.gnu.org/archive/html/guix-devel/2016-10/msg00933.html>.
|
||||
@cindex Branching-Strategie
|
||||
@cindex Neuerstellungs-Zeitplan
|
||||
Je nachdem, wieviele abhängige Pakete es gibt, und entsprechend wieviele
|
||||
Neuerstellungen dadurch nötig würden, finden Commits auf anderen Branches
|
||||
statt, nach ungefähr diesen Regeln:
|
||||
|
||||
@table @asis
|
||||
@item 300 abhängige Pakete oder weniger
|
||||
@code{master}-Branch (störfreie Änderungen).
|
||||
|
||||
@item zwischen 300 und 1200 abhängige Pakete
|
||||
@code{staging}-Branch (störfreie Änderungen). Dieser Branch wird circa alle
|
||||
3 Wochen in @code{master} gemerget. Themenbezogene Änderungen (z.B. eine
|
||||
Aktualisierung der GNOME-Plattform) können stattdessen auch auf einem
|
||||
eigenen Branch umgesetzt werden (wie @code{gnome-updates}).
|
||||
|
||||
@item mehr als 1200 abhängige Pakete
|
||||
@code{core-updates}-Branch (kann auch größere und womöglich andere Software
|
||||
beeinträchtigende Änderungen umfassen). Dieser Branch wird planmäßig in
|
||||
@code{master} alle 2,5 Monate oder so gemerget.
|
||||
@end table
|
||||
|
||||
All these branches are @uref{https://hydra.gnu.org/project/gnu, tracked by
|
||||
our build farm} and merged into @code{master} once everything has been
|
||||
successfully built. This allows us to fix issues before they hit users, and
|
||||
to reduce the window during which pre-built binaries are not available.
|
||||
|
||||
@c TODO: It would be good with badges on the website that tracks these
|
||||
@c branches. Or maybe even a status page.
|
||||
Generally, branches other than @code{master} are considered @emph{frozen} if
|
||||
there has been a recent evaluation, or there is a corresponding @code{-next}
|
||||
branch. Please ask on the mailing list or IRC if unsure where to place a
|
||||
patch.
|
||||
|
||||
@item
|
||||
@cindex Determinismus, von Erstellungsprozessen
|
||||
@cindex Reproduzierbare Erstellungen, Überprüfung
|
||||
Überprüfen Sie, ob der Erstellungsprozess deterministisch ist. Dazu prüfen
|
||||
Sie typischerweise, ob eine unabhängige Erstellung des Pakets genau dasselbe
|
||||
Ergebnis wie Ihre Erstellung hat, Bit für Bit.
|
||||
|
||||
Dies können Sie leicht tun, indem Sie dasselbe Paket mehrere Male
|
||||
hintereinander auf Ihrer Maschine erstellen (@pxref{Aufruf von guix build}):
|
||||
|
||||
@example
|
||||
guix build --rounds=2 mein-paket
|
||||
@end example
|
||||
|
||||
Dies reicht aus, um eine ganze Klasse häufiger Ursachen von
|
||||
Nichtdeterminismus zu finden, wie zum Beispiel Zeitstempel oder
|
||||
zufallsgenerierte Ausgaben im Ergebnis der Erstellung.
|
||||
|
||||
Eine weitere Möglichkeit ist, @command{guix challenge} (@pxref{Aufruf von guix challenge}) zu benutzen. Sie können es ausführen, sobald ein Paket commitet
|
||||
und von @code{hydra.gnu.org} erstellt wurde, um zu sehen, ob dort dasselbe
|
||||
Ergebnis wie bei Ihnen geliefert wurde. Noch besser: Finden Sie eine andere
|
||||
Maschine, die das Paket erstellen kann, und führen Sie @command{guix
|
||||
publish} aus. Da sich die entfernte Erstellungsmaschine wahrscheinlich von
|
||||
Ihrer unterscheidet, können Sie auf diese Weise Probleme durch
|
||||
Nichtdeterminismus erkennen, die mit der Hardware zu tun haben — zum
|
||||
Beispiel die Nutzung anderer Befehlssatzerweiterungen — oder mit dem
|
||||
Betriebssystem-Kernel — zum Beispiel, indem @code{uname} oder
|
||||
@file{/proc}-Dateien verwendet werden.
|
||||
|
||||
@item
|
||||
Beim Schreiben von Dokumentation achten Sie bitte auf eine
|
||||
geschlechtsneutrale Wortwahl, wenn Sie sich auf Personen beziehen, wie
|
||||
@uref{https://en.wikipedia.org/wiki/Singular_they, »they«@comma{}
|
||||
»their«@comma{} »them« im Singular}, und so weiter.
|
||||
|
||||
@item
|
||||
Stelllen Sie sicher, dass Ihr Patch nur einen Satz zusammengehöriger
|
||||
Änderungen umfasst. Das Zusammenfassen nicht zusammengehöriger Änderungen
|
||||
erschwert und bremst das Durchsehen Ihres Patches.
|
||||
|
||||
Beispiele für nicht zusammengehörige Änderungen sind das Hinzufügen mehrerer
|
||||
Pakete auf einmal, oder das Aktualisieren eines Pakets auf eine neue Version
|
||||
zusammen mit Fehlerbehebungen für das Paket.
|
||||
|
||||
@item
|
||||
Bitte befolgen Sie unsere Richtlinien für die Code-Formatierung, womöglich
|
||||
wollen Sie dies automatisch tun lassen durch das Skript
|
||||
@command{etc/indent-code.el} (@pxref{Formatierung von Code}).
|
||||
|
||||
@item
|
||||
When possible, use mirrors in the source URL (@pxref{Aufruf von guix download}). Use reliable URLs, not generated ones. For instance, GitHub
|
||||
archives are not necessarily identical from one generation to the next, so
|
||||
in this case it's often better to clone the repository. Don't use the
|
||||
@command{name} field in the URL: it is not very useful and if the name
|
||||
changes, the URL will probably be wrong.
|
||||
|
||||
@end enumerate
|
||||
|
||||
Bitte benutzen Sie @samp{[PATCH] @dots{}} als Betreff, wenn Sie einen Patch
|
||||
an die Mailing-Liste schicken. Sie können dazu Ihr E-Mail-Programm oder den
|
||||
Befehl @command{git send-email} benutzen (@pxref{Senden einer Patch-Reihe}). Wir bevorzugen es, Patches als reine Textnachrichten zu erhalten,
|
||||
entweder eingebettet (inline) oder als MIME-Anhänge. Sie sind dazu
|
||||
angehalten, zu überprüfen, ob Ihr Mail-Programm solche Dinge wie
|
||||
Zeilenumbrüche oder die Einrückung verändert, wodurch die Patches womöglich
|
||||
nicht mehr funktionieren.
|
||||
|
||||
Wenn dadurch ein Fehler behoben wurde, schließen Sie bitte den Thread, indem
|
||||
Sie eine E-Mail an @email{@var{NNN}-done@@debbugs.gnu.org} senden.
|
||||
|
||||
@unnumberedsubsec Senden einer Patch-Reihe
|
||||
@anchor{Senden einer Patch-Reihe}
|
||||
@cindex Patch-Reihe
|
||||
@cindex @code{git send-email}
|
||||
@cindex @code{git-send-email}
|
||||
|
||||
@c Debbugs bug: https://debbugs.gnu.org/db/15/15361.html
|
||||
Wenn Sie eine Patch-Reihe senden (z.B. mit @code{git send-email}), schicken
|
||||
Sie bitte als Erstes eine Nachricht an @email{guix-patches@@gnu.org} und
|
||||
dann nachfolgende Patches an @email{@var{NNN}@@debbugs.gnu.org}, um
|
||||
sicherzustellen, dass sie zusammen bearbeitet werden. Siehe
|
||||
@uref{https://debbugs.gnu.org/Advanced.html, die Debbugs-Dokumentation} für
|
||||
weitere Informationen.
|
||||
@@ -0,0 +1,524 @@
|
||||
@node Contribuer
|
||||
@chapter Contribuer
|
||||
|
||||
Ce projet est un effort coopératif et nous avons besoin de votre aide pour
|
||||
le faire grandir ! Contactez-nous sur @email{guix-devel@@gnu.org} et
|
||||
@code{#guix} sur le réseau IRC Freenode. Nous accueillons les idées, les
|
||||
rapports de bogues, les correctifs et tout ce qui pourrait aider le projet.
|
||||
Nous apprécions particulièrement toute aide sur la création de paquets
|
||||
(@pxref{Consignes d'empaquetage}).
|
||||
|
||||
@cindex code de conduite, des contributeurs
|
||||
@cindex convention de contribution
|
||||
Nous souhaitons fournir un environnement chaleureux, amical et sans
|
||||
harcèlement pour que tout le monde puisse contribuer au mieux de ses
|
||||
capacités. Pour cela notre projet a une « Convention de contribution »
|
||||
adaptée de @url{http://contributor-covenant.org/}. Vous pouvez trouver une
|
||||
version locale dans le fichier @file{CODE-OF-CONDUCT} dans l'arborescence
|
||||
des sources.
|
||||
|
||||
Les contributeurs n'ont pas besoin d'utiliser leur nom légal dans leurs
|
||||
correctifs et leurs communications en ligne ; ils peuvent utiliser n'importe
|
||||
quel nom ou pseudonyme de leur choix.
|
||||
|
||||
@menu
|
||||
* Construire depuis Git:: toujours le plus récent.
|
||||
* Lancer Guix avant qu'il ne soit installé:: Astuces pour les hackers.
|
||||
* La configuration parfaite:: Les bons outils.
|
||||
* Style de code:: Hygiène du contributeur.
|
||||
* Envoyer des correctifs:: Partager votre travail.
|
||||
@end menu
|
||||
|
||||
@node Construire depuis Git
|
||||
@section Construire depuis Git
|
||||
|
||||
Si vous souhaitez travailler sur Guix lui-même, il est recommandé d'utiliser
|
||||
la dernière version du dépôt Git :
|
||||
|
||||
@example
|
||||
git clone https://git.savannah.gnu.org/git/guix.git
|
||||
@end example
|
||||
|
||||
Lors de la construction de Guix depuis un extrait, les paquets suivants sont
|
||||
requis en plus de ceux mentionnés dans les instructions d'installation
|
||||
(@pxref{Prérequis}).
|
||||
|
||||
@itemize
|
||||
@item @url{http://gnu.org/software/autoconf/, GNU Autoconf};
|
||||
@item @url{http://gnu.org/software/automake/, GNU Automake};
|
||||
@item @url{http://gnu.org/software/gettext/, GNU Gettext};
|
||||
@item @url{http://gnu.org/software/texinfo/, GNU Texinfo};
|
||||
@item @url{http://www.graphviz.org/, Graphviz};
|
||||
@item @url{http://www.gnu.org/software/help2man/, GNU Help2man (facultatif)}.
|
||||
@end itemize
|
||||
|
||||
La manière la plus simple de configurer un environnement de développement
|
||||
pour Guix est, bien sûr, d'utiliser Guix ! La commande suivante démarre un
|
||||
nouveau shell où toutes les dépendances et les variables d'environnements
|
||||
appropriées sont configurés pour travailler sur Guix :
|
||||
|
||||
@example
|
||||
guix environment guix
|
||||
@end example
|
||||
|
||||
@xref{Invoquer guix environment}, pour plus d'information sur cette
|
||||
commande. On peut ajouter des dépendances supplémentaires avec
|
||||
@option{--ad-hoc} :
|
||||
|
||||
@example
|
||||
guix environment guix --ad-hoc help2man git strace
|
||||
@end example
|
||||
|
||||
Lancez @command{./bootstrap} pour générer l'infrastructure du système de
|
||||
construction avec Autoconf et Automake. Si vous avez une erreur comme :
|
||||
|
||||
@example
|
||||
configure.ac:46: error: possibly undefined macro: PKG_CHECK_MODULES
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
cela signifie probablement qu'Autoconf n'a pas pu trouver @file{pkg.m4} qui
|
||||
est fournit par pkg-config. Assurez-vous que @file{pkg.m4} est disponible.
|
||||
C'est aussi vrai pour l'ensemble de macros de @file{guile.m4} fournies par
|
||||
Guile. Par exemple, si vous avez installé Automake dans @file{/usr/local},
|
||||
il ne cherchera pas les fichiers @file{.m4} dans @file{/usr/share}. Dans ce
|
||||
case vous devez invoquer la commande suivante :
|
||||
|
||||
@example
|
||||
export ACLOCAL_PATH=/usr/share/aclocal
|
||||
@end example
|
||||
|
||||
@xref{Macro Search Path,,, automake, The GNU Automake Manual}, pour plus
|
||||
d'information.
|
||||
|
||||
Ensuite, lancez @command{./configure} comme d'habitude. Assurez-vous de
|
||||
passer @code{--localstatedir=@var{directory}} où @var{directory} est la
|
||||
valeur @code{localstatedir} utilisée par votre installation actuelle
|
||||
(@pxref{Le dépôt} pour plus d'informations à ce propos).
|
||||
|
||||
Finalement, vous devez invoquer @code{make check} pour lancer les tests
|
||||
(@pxref{Lancer la suite de tests}). Si quelque chose échoue, jetez un œil
|
||||
aux instructions d'installation (@pxref{Installation}) ou envoyez un message
|
||||
à la list @email{guix-devel@@gnu.org}.
|
||||
|
||||
|
||||
@node Lancer Guix avant qu'il ne soit installé
|
||||
@section Lancer Guix avant qu'il ne soit installé
|
||||
|
||||
Pour garder un environnement de travail sain, il est utile de tester les
|
||||
changement localement sans les installer pour de vrai. Pour pouvoir
|
||||
distinguer votre rôle « d'utilisateur final » de celui parfois haut en
|
||||
couleur de « développeur ».
|
||||
|
||||
Pour cela, tous les outils en ligne de commande sont utilisables même sans
|
||||
avoir lancé @code{make install}. Pour cela, vous devez d'abord avoir un
|
||||
environnement avec toutes les dépendances disponibles (@pxref{Construire depuis Git}), puis préfixer chaque commande par @command{./pre-inst-env} (le script
|
||||
@file{pre-inst-env} se trouve dans le répertoire de plus haut niveau de
|
||||
l'arborescence des sources de Guix ; il est généré par
|
||||
@command{./configure}) comme cela@footnote{L'option @option{-E} de
|
||||
@command{sudo} garantie que @code{GUILE_LOAD_PATH} est bien paramétré pour
|
||||
@command{guix-daemon} et pour que les outils qu'il utilise puissent trouver
|
||||
les modules Guile dont ils ont besoin.} :
|
||||
|
||||
@example
|
||||
$ sudo -E ./pre-inst-env guix-daemon --build-users-group=guixbuild
|
||||
$ ./pre-inst-env guix build hello
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
De même, pour une session Guile qui utilise les modules Guix :
|
||||
|
||||
@example
|
||||
$ ./pre-inst-env guile -c '(use-modules (guix utils)) (pk (%current-system))'
|
||||
|
||||
;;; ("x86_64-linux")
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
@cindex REPL
|
||||
@cindex read-eval-print loop
|
||||
@dots{} et pour un REPL (@pxref{Using Guile Interactively,,, guile, Guile
|
||||
Reference Manual})
|
||||
|
||||
@example
|
||||
$ ./pre-inst-env guile
|
||||
scheme@@(guile-user)> ,use(guix)
|
||||
scheme@@(guile-user)> ,use(gnu)
|
||||
scheme@@(guile-user)> (define snakes
|
||||
(fold-packages
|
||||
(lambda (package lst)
|
||||
(if (string-prefix? "python"
|
||||
(package-name package))
|
||||
(cons package lst)
|
||||
lst))
|
||||
'()))
|
||||
scheme@@(guile-user)> (length snakes)
|
||||
$1 = 361
|
||||
@end example
|
||||
|
||||
Le script @command{pre-inst-env} paramètre toutes les variables
|
||||
d'environnement nécessaires, dont @env{PATH} et @env{GUILE_LOAD_PATH}.
|
||||
|
||||
Remarquez que @command{./pre-inst-env guix pull} ne met @emph{pas} à jour
|
||||
l'arborescence des sources locale ; cela met seulement à jour le lien
|
||||
symbolique de @file{~/.config/guix/current} (@pxref{Invoquer guix pull}).
|
||||
Lancez @command{git pull} à la place si vous voulez mettre à jour votre
|
||||
arborescence des source locale.
|
||||
|
||||
|
||||
@node La configuration parfaite
|
||||
@section La configuration parfaite
|
||||
|
||||
La configuration parfaite pour travailler sur Guix est simplement la
|
||||
configuration parfaite pour travailler en Guile (@pxref{Using Guile in
|
||||
Emacs,,, guile, Guile Reference Manual}). Tout d'abord, vous avez besoin de
|
||||
mieux qu'un éditeur de texte, vous avez besoin de
|
||||
@url{http://www.gnu.org/software/emacs, Emacs}, amélioré par le superbe
|
||||
@url{http://nongnu.org/geiser/, Geiser}.
|
||||
|
||||
Geiser permet le développement interactif et incrémental depuis Emacs : la
|
||||
compilation du code et son évaluation depuis les buffers, l'accès à la
|
||||
documentation en ligne (docstrings), la complétion sensible au contexte,
|
||||
@kbd{M-.} pour sauter à la définition d'un objet, un REPL pour tester votre
|
||||
code, et bien plus (@pxref{Introduction,,, geiser, Geiser User Manual}).
|
||||
Pour travailler confortablement sur Guix, assurez-vous de modifier le chemin
|
||||
de chargement de Guile pour qu'il trouve les fichiers source de votre dépôt
|
||||
:
|
||||
|
||||
@lisp
|
||||
;; @r{Si l'extrait est dans ~/src/guix.}
|
||||
(with-eval-after-load 'geiser-guile
|
||||
(add-to-list 'geiser-guile-load-path "~/src/guix"))
|
||||
@end lisp
|
||||
|
||||
Pour effectivement éditer le code, Emacs a déjà un très bon mode Scheme.
|
||||
Mais en plus de ça, vous ne devez pas rater
|
||||
@url{http://www.emacswiki.org/emacs/ParEdit, Paredit}. Il fournit des
|
||||
fonctionnalités pour opérer directement sur l'arbre de syntaxe, comme
|
||||
relever une s-expression ou l'envelopper, absorber ou rejeter la
|
||||
s-expression suivante, etc.
|
||||
|
||||
@cindex extraits de code
|
||||
@cindex modèles
|
||||
@cindex réduire la quantité de code commun
|
||||
Nous fournissons aussi des modèles pour les messages de commit git communs
|
||||
et les définitions de paquets dans le répertoire @file{etc/snippets}. Ces
|
||||
modèles s'utilisent avec @url{http://joaotavora.github.io/yasnippet/,
|
||||
YASnippet} pour développer des chaînes courtes de déclenchement en extraits
|
||||
de texte interactifs. Vous pouvez ajouter le répertoire des modèles dans la
|
||||
variables @var{yas-snippet-dirs} d'Emacs.
|
||||
|
||||
@lisp
|
||||
;; @r{Si l'extrait est dans ~/src/guix.}
|
||||
(with-eval-after-load 'yasnippet
|
||||
(add-to-list 'yas-snippet-dirs "~/src/guix/etc/snippets"))
|
||||
@end lisp
|
||||
|
||||
Les extraits de messages de commit dépendent de @url{https://magit.vc/,
|
||||
Magit} pour afficher les fichiers sélectionnés. Lors de la modification
|
||||
d'un message de commit, tapez @code{add} suivi de @kbd{TAB} pour insérer un
|
||||
modèle de message de commit pour ajouter un paquet ; tapez @code{update}
|
||||
suivi de @kbd{TAB} pour insérer un modèle pour la mise à jour d'un paquet ;
|
||||
tapez @code{https} suivi de @kbd{TAB} pour insérer un modèle pour le
|
||||
changement à HTTPS de l'URI de la page d'accueil.
|
||||
|
||||
L'extrait principal pour @code{scheme-mode} est lancé en tapant
|
||||
@code{package…} suivi par @kbd{TAB}. Cet extrait insère aussi la chaîne de
|
||||
déclenchement @code{origin…}, qui peut aussi être étendue. L'extrait
|
||||
@code{origin} lui-même peut aussi insérer des chaînes de déclenchement qui
|
||||
finissent sur @code{…}, qui peuvent aussi être étendues.
|
||||
|
||||
|
||||
@node Style de code
|
||||
@section Style de code
|
||||
|
||||
En général notre code suit le Standard de Code GNU (@pxref{Top,,, standards,
|
||||
GNU Coding Standards}). Cependant, il ne parle pas beaucoup de Scheme, donc
|
||||
voici quelques règles supplémentaires.
|
||||
|
||||
@menu
|
||||
* Paradigme de programmation:: Comment composer vos éléments.
|
||||
* Modules:: Où stocker votre code ?
|
||||
* Types de données et reconnaissance de motif:: Implémenter des
|
||||
structures de données.
|
||||
* Formatage du code:: Conventions d'écriture.
|
||||
@end menu
|
||||
|
||||
@node Paradigme de programmation
|
||||
@subsection Paradigme de programmation
|
||||
|
||||
Le code Scheme dans Guix est écrit dans un style purement fonctionnel. Le
|
||||
code qui s'occupe des entrées-sorties est une exception ainsi que les
|
||||
procédures qui implémentent des concepts bas-niveau comme la procédure
|
||||
@code{memoize}.
|
||||
|
||||
@node Modules
|
||||
@subsection Modules
|
||||
|
||||
Les modules Guile qui sont sensés être utilisés du côté de la construction
|
||||
doivent se trouver dans l'espace de nom @code{(guix build @dots{})}. Ils ne
|
||||
doivent pas se référer à d'autres modules Guix ou GNU@. Cependant il est
|
||||
correct pour un module « côté hôte » de dépendre d'un module coté
|
||||
construction.
|
||||
|
||||
Les modules qui s'occupent du système GNU général devraient se trouver dans
|
||||
l'espace de nom @code{(gnu @dots{})} plutôt que @code{(guix @dots{})}.
|
||||
|
||||
@node Types de données et reconnaissance de motif
|
||||
@subsection Types de données et reconnaissance de motif
|
||||
|
||||
La tendance en Lisp classique est d'utiliser des listes pour tout
|
||||
représenter et de naviguer dedans « à la main ( avec @code{car}, @code{cdr},
|
||||
@code{cadr} et compagnie. Il y a plusieurs problèmes avec ce style,
|
||||
notamment le fait qu'il soit dur à lire, source d'erreur et un obstacle aux
|
||||
rapports d'erreur bien typés.
|
||||
|
||||
Le code de Guix devrait définir des types de données appropriées (par
|
||||
exemple, avec @code{define-record-type*}) plutôt que d'abuser des listes.
|
||||
En plus, il devrait utiliser la recherche de motifs, via le module Guile
|
||||
@code{(ice-9 match)}, surtout pour rechercher dans des listes.
|
||||
|
||||
@node Formatage du code
|
||||
@subsection Formatage du code
|
||||
|
||||
@cindex formater le code
|
||||
@cindex style de code
|
||||
Lorsque nous écrivons du code Scheme, nous suivons la sagesse commune aux
|
||||
programmeurs Scheme. En général, nous suivons les
|
||||
@url{http://mumble.net/~campbell/scheme/style.txt, règles de style de
|
||||
Riastradh}. Ce document décrit aussi les conventions utilisées dans le code
|
||||
de Guile. Il est bien pensé et bien écrit, alors n'hésitez pas à le lire.
|
||||
|
||||
Certaines formes spéciales introduites dans Guix comme la macro
|
||||
@code{substitute*} ont des règles d'indentation spécifiques. Elles sont
|
||||
définies dans le fichier @file{.dir-locals.el} qu'Emacs utilise
|
||||
automatiquement. Remarquez aussi qu'Emacs-Guix fournit le mode
|
||||
@code{guix-devel-mode} qui indente et colore le code Guix correctement
|
||||
(@pxref{Development,,, emacs-guix, The Emacs-Guix Reference Manual}).
|
||||
|
||||
@cindex indentation, du code
|
||||
@cindex formatage, du code
|
||||
Si vous n'utilisez pas Emacs, assurez-vous que votre éditeur connaisse ces
|
||||
règles. Pour indenter automatiquement une définition de paquet, vous pouvez
|
||||
aussi lancer :
|
||||
|
||||
@example
|
||||
./etc/indent-code.el gnu/packages/@var{file}.scm @var{package}
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
Cela indente automatiquement la définition de @var{package} dans
|
||||
@file{gnu/packages/@var{file}.scm} en lançant Emacs en mode commande. Pour
|
||||
indenter un fichier complet, n'indiquez pas de second argument :
|
||||
|
||||
@example
|
||||
./etc/indent-code.el gnu/services/@var{file}.scm
|
||||
@end example
|
||||
|
||||
@cindex Vim, édition de code Scheme
|
||||
Si vous éditez du code avec Vim, nous recommandons de lancer @code{:set
|
||||
autoindent} pour que votre code soit automatiquement indenté au moment où
|
||||
vous l'entrez. En plus,
|
||||
@uref{https://www.vim.org/scripts/script.php?script_id=3998,
|
||||
@code{paredit.vim}} peut vous aider à gérer toutes ces parenthèses.
|
||||
|
||||
Nous demandons que toutes les procédure de premier niveau contiennent une
|
||||
chaîne de documentation. Ce pré-requis peut être relâché pour les
|
||||
procédures privées simples dans l'espace de nom @code{(guix build @dots{})}
|
||||
cependant.
|
||||
|
||||
Les procédures ne devraient pas avoir plus de quatre paramètres
|
||||
positionnés. Utilisez des paramètres par mot-clefs pour les procédures qui
|
||||
prennent plus de quatre paramètres.
|
||||
|
||||
|
||||
@node Envoyer des correctifs
|
||||
@section Envoyer des correctifs
|
||||
|
||||
Le développement se fait avec le système de contrôle de version Git. Ainsi,
|
||||
l'accès au dépôt n'est pas strictement nécessaire. Nous accueillons les
|
||||
contributions sous forme de correctifs produits par @code{git format-patch}
|
||||
envoyés sur la liste de diffusion @email{guix-patches@@gnu.org}.
|
||||
|
||||
Cette liste de diffusion est gérée par une instance Debbugs accessible à
|
||||
l'adresse @uref{https://bugs.gnu.org/guix-patches}, qui nous permet de
|
||||
suivre les soumissions. Chaque message envoyé à cette liste se voit
|
||||
attribuer un numéro de suivi ; les gens peuvent ensuite répondre à cette
|
||||
soumission en envoyant un courriel à @code{@var{NNN}@@debbugs.gnu.org}, où
|
||||
@var{NNN} est le numéro de suivi (@pxref{Envoyer une série de correctifs}).
|
||||
|
||||
Veuillez écrire les messages de commit dans le format ChangeLog
|
||||
(@pxref{Change Logs,,, standards, GNU Coding Standards}) ; vous pouvez
|
||||
regarder l'historique des commits pour trouver des exemples.
|
||||
|
||||
Avant de soumettre un correctif qui ajoute ou modifie la définition d'un
|
||||
paquet, veuillez vérifier cette check-list :
|
||||
|
||||
@enumerate
|
||||
@item
|
||||
Si les auteurs du paquet logiciel fournissent une signature cryptographique
|
||||
pour l'archive, faîtes un effort pour vérifier l'authenticité de l'archive.
|
||||
Pour un fichier de signature GPG détaché, cela se fait avec la commande
|
||||
@code{gpg --verify}.
|
||||
|
||||
@item
|
||||
Prenez un peu de temps pour fournir un synopsis et une description adéquats
|
||||
pour le paquet. Voir @xref{Synopsis et descriptions} pour quelques lignes
|
||||
directrices.
|
||||
|
||||
@item
|
||||
Lancez @code{guix lint @var{paquet}}, où @var{paquet} est le nom du nouveau
|
||||
paquet ou du paquet modifié, et corrigez les erreurs qu'il rapporte
|
||||
(@pxref{Invoquer guix lint}).
|
||||
|
||||
@item
|
||||
Assurez-vous que le paquet se construise sur votre plate-forme avec
|
||||
@code{guix build @var{paquet}}.
|
||||
|
||||
@item
|
||||
@cindex construction groupée
|
||||
Assurez-vous que le paquet n'utilise pas de copie groupée d'un logiciel déjà
|
||||
disponible dans un paquet séparé.
|
||||
|
||||
Parfois, les paquets incluent des copie du code source de leurs dépendances
|
||||
pour le confort de leurs utilisateurs. Cependant, en tant que distribution,
|
||||
nous voulons nous assurer que ces paquets utilisent bien les copient que
|
||||
nous avons déjà dans la distribution si elles existent. Cela améliore
|
||||
l'utilisation des ressources (la dépendance n'est construite et stockée
|
||||
qu'une seule fois) et permet à la distribution de faire des changements
|
||||
transversaux comme appliquer des correctifs de sécurité pour un paquet donné
|
||||
depuis un unique emplacement et qu'ils affectent tout le système, ce
|
||||
qu'empêchent les copies groupées.
|
||||
|
||||
@item
|
||||
Regardez le profile rapporté par @command{guix size} (@pxref{Invoquer guix size}). Cela vous permettra de remarquer des références à d'autres paquets
|
||||
qui ont été retenus. Il peut aussi aider à déterminer s'il faut découper le
|
||||
paquet (@pxref{Des paquets avec plusieurs résultats}) et quelle dépendance
|
||||
facultative utiliser.
|
||||
|
||||
@item
|
||||
Pour les changements important, vérifiez que les paquets qui en dépendent
|
||||
(s'ils existent) ne sont pas affectés par le changement ; @code{guix refresh
|
||||
--list-dependant @var{paquet}} vous aidera (@pxref{Invoquer guix refresh}).
|
||||
|
||||
@c ===========================================================================
|
||||
@c
|
||||
@c This file was generated with po4a. Translate the source file.
|
||||
@c
|
||||
@c ===========================================================================
|
||||
@c See <https://lists.gnu.org/archive/html/guix-devel/2016-10/msg00933.html>.
|
||||
@cindex stratégie de branche
|
||||
@cindex stratégie de planification des reconstructions
|
||||
Suivant le nombre de paquets dépendants et donc le nombre de reconstruction
|
||||
induites, les commits vont vers des branches différentes, suivant ces
|
||||
principes :
|
||||
|
||||
@table @asis
|
||||
@item 300 paquets dépendants ou moins
|
||||
branche @code{master} (changements non-disruptifs).
|
||||
|
||||
@item entre 300 et 1 200 paquets dépendants
|
||||
branche @code{staging} (changemets non-disruptifs). Cette branche devrait
|
||||
être fusionnées dans @code{master} tous les 3 semaines. Les changements par
|
||||
thèmes (par exemple une mise à jour de la pile GNOME) peuvent aller dans une
|
||||
branche spécifique (disons, @code{gnome-updates}).
|
||||
|
||||
@item plus de 1 200 paquets dépendants
|
||||
branche @code{core-updates} (peut inclure des changements majeurs et
|
||||
potentiellement disruptifs). Cette branche devrait être fusionnée dans
|
||||
@code{master} tous les 2,5 mois environ.
|
||||
@end table
|
||||
|
||||
Toutes ces branches sont @uref{https://hydra.gnu.org/project/gnu, gérées par
|
||||
notre ferme de construction} et fusionnées dans @code{master} une fois que
|
||||
tout a été construit correctement. Cela nous permet de corriger des
|
||||
problèmes avant qu'ils n'atteignent les utilisateurs et réduit la fenêtre
|
||||
pendant laquelle les binaires pré-construits ne sont pas disponibles.
|
||||
|
||||
@c TODO: It would be good with badges on the website that tracks these
|
||||
@c branches. Or maybe even a status page.
|
||||
Généralement les autres branches que @code{master} sont considérées comme
|
||||
@emph{gelées} s'il y a eu une évaluation récente ou qu'il y a une branche
|
||||
@code{-next} correspondante. Demandez sur la liste de diffusion ou sur IRC
|
||||
si vous n'êtes pas sûr de savoir où pousser votre correctif.
|
||||
|
||||
@item
|
||||
@cindex déterminisme, du processus de construction
|
||||
@cindex construction reproductibles, vérification
|
||||
Vérifiez si le processus de construction du paquet est déterministe. Cela
|
||||
signifie typiquement vérifier qu'une construction indépendante du paquet
|
||||
renvoie exactement le même résultat que vous avez obtenu, bit à bit.
|
||||
|
||||
Une manière simple de le faire est de reconstruire le paquet plusieurs fois
|
||||
à la suite sur votre machine (@pxref{Invoquer guix build}) :
|
||||
|
||||
@example
|
||||
guix build --rounds=2 mon-paquet
|
||||
@end example
|
||||
|
||||
Cela est suffisant pour trouver une classe de non-déterminisme commune,
|
||||
comme l'horodatage ou des sorties générées aléatoirement dans le résultat de
|
||||
la construction.
|
||||
|
||||
Une autre option consiste à utiliser @command{guix challenge}
|
||||
(@pxref{Invoquer guix challenge}). Vous pouvez lancer la commande une fois
|
||||
que les paquets ont été commités et construits par @code{hydra.gnu.org} pour
|
||||
vérifier s'il obtient le même résultat que vous. Mieux encore : trouvez une
|
||||
autre machine qui peut le construire et lancez @command{guix publish}. Puis
|
||||
la machine distante est sûrement différente de la vôtre, cela peut trouver
|
||||
des problèmes de non-déterminisme liés au matériel — par exemple utiliser
|
||||
une extension du jeu d'instruction — ou du noyau du système d'exploitation —
|
||||
par exemple se reposer sur @code{uname} ou les fichiers de @file{/proc}.
|
||||
|
||||
@item
|
||||
Lorsque vous écrivez de la documentation, utilisez une formulation au genre
|
||||
neutre lorsque vous vous référez à des personnes, comme le
|
||||
@uref{https://fr.wikipedia.org/wiki/They_singulier, ``they''@comma{}
|
||||
``their''@comma{} ``them'' singulier} (en anglais).
|
||||
|
||||
@item
|
||||
Vérifiez que votre correctif contienne seulement un ensemble de changements
|
||||
liés. Grouper des changements non liés ensemble rend la revue plus
|
||||
difficile et plus lente.
|
||||
|
||||
Ajouter plusieurs paquet ou une mise à jour d'un paquet avec des corrections
|
||||
dans ce paquet sont des exemples de changements sans rapport.
|
||||
|
||||
@item
|
||||
Suivez nos règles de formatage de code, éventuellement en lançant le script
|
||||
@command{et/indent-code.el} pour le faire automatiquement (@pxref{Formatage
|
||||
du code}).
|
||||
|
||||
@item
|
||||
Si possible, utilisez des miroirs dans l'URL des sources (@pxref{Invoquer guix download}). Utilisez des URL stable, pas des URL générées. Par
|
||||
exemple, les archives GitHub ne sont pas nécessairement identiques d'une
|
||||
génération à la suivante, donc il vaut mieux dans ce cas cloner le dépôt.
|
||||
N'utilisez pas le champ @command{name} dans l'URL : ce n'est pas très utile
|
||||
et si le nom change, l'URL sera probablement erronée.
|
||||
|
||||
@end enumerate
|
||||
|
||||
Lorsque vous envoyez un correctif à la liste de diffusion, utilisez
|
||||
@samp{[PATCH] @dots{}} comme sujet. Vous pouvez utiliser votre client de
|
||||
courriel ou la commande @command{git send-email} (@pxref{Envoyer une série
|
||||
de correctifs}). Nous préférons recevoir des correctifs en texte brut, soit
|
||||
en ligne, soit en pièce-jointe MIME@. Nous vous conseillons de faire
|
||||
attention si votre client de courriel change par exemple les retours à la
|
||||
ligne ou l'indentation, ce qui peut casser les correctifs.
|
||||
|
||||
Lorsqu'un bogue est résolu, veuillez fermer le fil en envoyant un courriel à
|
||||
@email{@var{NNN}-done@@debbugs.gnu.org}.
|
||||
|
||||
@unnumberedsubsec Envoyer une série de correctifs
|
||||
@anchor{Envoyer une série de correctifs}
|
||||
@cindex série de correctifs
|
||||
@cindex @code{git send-email}
|
||||
@cindex @code{git-send-email}
|
||||
|
||||
@c Debbugs bug: https://debbugs.gnu.org/db/15/15361.html
|
||||
Lorsque vous envoyez une série de correctifs (p.@@:: ex.@: avec @code{git
|
||||
send-email}), envoyez d'abord une premier message à
|
||||
@email{guix-patches@@gnu.org} puis envoyez le reste des correctifs à
|
||||
@email{@var{NNN}@@debbugs.gnu.org} pour vous assurer qu'ils seront groupés
|
||||
ensemble. Voyez @uref{https://debbugs.gnu.org/Advanced.html, la
|
||||
documentation de Debbugs} pour plus d'informations.
|
||||
+162
-3531
File diff suppressed because it is too large
Load Diff
@@ -6,7 +6,8 @@
|
||||
;; Augment the package definition of GDB with the build tools
|
||||
;; needed when developing GDB (and which are not needed when
|
||||
;; simply installing it.)
|
||||
(package
|
||||
(inherit gdb)
|
||||
(native-inputs (modify-inputs (package-native-inputs gdb)
|
||||
(prepend autoconf-2.69 automake texinfo))))
|
||||
(package (inherit gdb)
|
||||
(native-inputs `(("autoconf" ,autoconf-2.64)
|
||||
("automake" ,automake)
|
||||
("texinfo" ,texinfo)
|
||||
,@(package-native-inputs gdb))))
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@
|
||||
|
||||
@display
|
||||
Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
|
||||
@uref{https://fsf.org/}
|
||||
@uref{http://fsf.org/}
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
@@ -414,7 +414,7 @@ The Free Software Foundation may publish new, revised versions
|
||||
of the GNU Free Documentation License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns. See
|
||||
@uref{https://www.gnu.org/copyleft/}.
|
||||
@uref{http://www.gnu.org/copyleft/}.
|
||||
|
||||
Each version of the License is given a distinguishing version number.
|
||||
If the Document specifies that a particular numbered version of this
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+24155
File diff suppressed because it is too large
Load Diff
+24923
File diff suppressed because it is too large
Load Diff
+7240
-40495
File diff suppressed because it is too large
Load Diff
@@ -1,27 +0,0 @@
|
||||
(use-modules (gnu home)
|
||||
(gnu home services)
|
||||
(gnu home services shells)
|
||||
(gnu services)
|
||||
(gnu packages admin)
|
||||
(guix gexp))
|
||||
|
||||
|
||||
(home-environment
|
||||
(packages (list htop))
|
||||
(services
|
||||
(append (list
|
||||
(service home-bash-service-type
|
||||
(home-bash-configuration
|
||||
(guix-defaults? #t)
|
||||
(variables
|
||||
`(("HISTFILE" . "$XDG_CACHE_HOME/.bash_history")
|
||||
("HISTSIZE" . "50000")))))
|
||||
|
||||
(simple-service 'test-config
|
||||
home-xdg-configuration-files-service-type
|
||||
(list `("test.conf"
|
||||
,(plain-file "tmp-file.txt"
|
||||
"the content of
|
||||
~/.config/test.conf")))))
|
||||
%base-home-services)))
|
||||
|
||||
+37
-169
@@ -1,62 +1,10 @@
|
||||
# htmlxref.cnf - reference file for free Texinfo manuals on the web.
|
||||
# Modified by Ludovic Courtès <ludo@gnu.org> for the GNU Guix manual.
|
||||
# Further modified by Tomas Volf <~@wolfsden.cz>.
|
||||
|
||||
htmlxrefversion=2026-02-23.07; # UTC
|
||||
htmlxrefversion=2018-07-05.20; # UTC
|
||||
|
||||
# Override URLs of manuals provided by the Documentation Center.
|
||||
|
||||
DOCUMENTATION_CENTER = https://doc.guix.gnu.org
|
||||
|
||||
bash mono ${DOCUMENTATION_CENTER}/bash/latest/en/bash.html
|
||||
bash node ${DOCUMENTATION_CENTER}/bash/latest/en/html_node
|
||||
binutils mono ${DOCUMENTATION_CENTER}/binutils/latest/en/binutils.html
|
||||
binutils node ${DOCUMENTATION_CENTER}/binutils/latest/en/html_node
|
||||
cuirass mono ${DOCUMENTATION_CENTER}/cuirass/latest/en/cuirass.html
|
||||
cuirass node ${DOCUMENTATION_CENTER}/cuirass/latest/en/html_node
|
||||
emacs-guix mono ${DOCUMENTATION_CENTER}/emacs-guix/latest/en/emacs-guix.html
|
||||
emacs-guix node ${DOCUMENTATION_CENTER}/emacs-guix/latest/en/html_node
|
||||
fibers mono ${DOCUMENTATION_CENTER}/fibers/latest/en/fibers.html
|
||||
fibers node ${DOCUMENTATION_CENTER}/fibers/latest/en/html_node
|
||||
gash mono ${DOCUMENTATION_CENTER}/gash/latest/en/gash.html
|
||||
gash node ${DOCUMENTATION_CENTER}/gash/latest/en/html_node
|
||||
gcrypt mono ${DOCUMENTATION_CENTER}/gcrypt/latest/en/gcrypt.html
|
||||
gcrypt node ${DOCUMENTATION_CENTER}/gcrypt/latest/en/html_node
|
||||
gdb mono ${DOCUMENTATION_CENTER}/gdb/latest/en/gdb.html
|
||||
gdb node ${DOCUMENTATION_CENTER}/gdb/latest/en/html_node
|
||||
geiser mono ${DOCUMENTATION_CENTER}/geiser/latest/en/geiser.html
|
||||
geiser node ${DOCUMENTATION_CENTER}/geiser/latest/en/html_node
|
||||
grub mono ${DOCUMENTATION_CENTER}/grub/latest/en/grub.html
|
||||
grub node ${DOCUMENTATION_CENTER}/grub/latest/en/html_node
|
||||
guile-avahi mono ${DOCUMENTATION_CENTER}/guile-avahi/latest/en/guile-avahi.html
|
||||
guile-avahi node ${DOCUMENTATION_CENTER}/guile-avahi/latest/en/html_node
|
||||
guile-gcrypt mono ${DOCUMENTATION_CENTER}/guile-gcrypt/latest/en/guile-gcrypt.html
|
||||
guile-gcrypt node ${DOCUMENTATION_CENTER}/guile-gcrypt/latest/en/html_node
|
||||
guile-gnutls mono ${DOCUMENTATION_CENTER}/guile-gnutls/latest/en/guile-gnutls.html
|
||||
guile-gnutls node ${DOCUMENTATION_CENTER}/guile-gnutls/latest/en/html_node
|
||||
guile-library mono ${DOCUMENTATION_CENTER}/guile-library/latest/en/guile-library.html
|
||||
guile-library node ${DOCUMENTATION_CENTER}/guile-library/latest/en/html_node
|
||||
guile mono ${DOCUMENTATION_CENTER}/guile/latest/en/guile.html
|
||||
guile-netlink mono ${DOCUMENTATION_CENTER}/guile-netlink/latest/en/guile-netlink.html
|
||||
guile-netlink node ${DOCUMENTATION_CENTER}/guile-netlink/latest/en/html_node
|
||||
guile node ${DOCUMENTATION_CENTER}/guile/latest/en/html_node
|
||||
guile-ssh mono ${DOCUMENTATION_CENTER}/guile-ssh/latest/en/guile-ssh.html
|
||||
guile-ssh node ${DOCUMENTATION_CENTER}/guile-ssh/latest/en/html_node
|
||||
inetutils mono ${DOCUMENTATION_CENTER}/inetutils/latest/en/inetutils.html
|
||||
inetutils node ${DOCUMENTATION_CENTER}/inetutils/latest/en/html_node
|
||||
libc mono ${DOCUMENTATION_CENTER}/libc/latest/en/libc.html
|
||||
libc node ${DOCUMENTATION_CENTER}/libc/latest/en/html_node
|
||||
mes mono ${DOCUMENTATION_CENTER}/mes/latest/en/mes.html
|
||||
mes node ${DOCUMENTATION_CENTER}/mes/latest/en/html_node
|
||||
r5rs mono ${DOCUMENTATION_CENTER}/r5rs/latest/en/r5rs.html
|
||||
r5rs node ${DOCUMENTATION_CENTER}/r5rs/latest/en/html_node
|
||||
recutils mono ${DOCUMENTATION_CENTER}/recutils/latest/en/recutils.html
|
||||
recutils node ${DOCUMENTATION_CENTER}/recutils/latest/en/html_node
|
||||
shepherd mono ${DOCUMENTATION_CENTER}/shepherd/latest/en/shepherd.html
|
||||
shepherd node ${DOCUMENTATION_CENTER}/shepherd/latest/en/html_node
|
||||
|
||||
# Copyright 2010-2020, 2022 Free Software Foundation, Inc.
|
||||
#
|
||||
# Copyright 2010, 2011, 2012, 2013, 2014, 2015 Free Software Foundation, Inc.
|
||||
#
|
||||
# Copying and distribution of this file, with or without modification,
|
||||
# are permitted in any medium without royalty provided the copyright
|
||||
# notice and this notice are preserved.
|
||||
@@ -75,10 +23,10 @@ shepherd node ${DOCUMENTATION_CENTER}/shepherd/latest/en/html_node
|
||||
# - follow the naming convention for nodes described at
|
||||
# http://www.gnu.org/software/texinfo/manual/texinfo/html_node/HTML-Xref.html
|
||||
# This is what makeinfo and texi2html implement.
|
||||
#
|
||||
#
|
||||
# Unless the above criteria are met, it's not possible to generate
|
||||
# reliable cross-manual references.
|
||||
#
|
||||
#
|
||||
# For information on automatically generating all the useful formats for
|
||||
# a manual to put on the web, see
|
||||
# http://www.gnu.org/prep/maintain/html_node/Manuals-on-Web-Pages.html.
|
||||
@@ -89,7 +37,7 @@ shepherd node ${DOCUMENTATION_CENTER}/shepherd/latest/en/html_node
|
||||
# associated, and thus gnu.org/manual can't include them.
|
||||
|
||||
# shorten references to manuals on www.gnu.org.
|
||||
G = https://www.gnu.org
|
||||
G = http://www.gnu.org
|
||||
GS = ${G}/software
|
||||
|
||||
3dldf mono ${GS}/3dldf/manual/user_ref/3DLDF.html
|
||||
@@ -120,12 +68,12 @@ autogen node ${GS}/autoconf/manual/html_node/
|
||||
automake mono ${GS}/automake/manual/automake.html
|
||||
automake node ${GS}/automake/manual/html_node/
|
||||
|
||||
avl node http://adtinfo.org/libavl.html/
|
||||
avl node http://www.stanford.edu/~blp/avl/libavl.html/
|
||||
|
||||
bash mono ${GS}/bash/manual/bash.html
|
||||
bash node ${GS}/bash/manual/html_node/
|
||||
|
||||
BINUTILS = https://sourceware.org/binutils/docs
|
||||
BINUTILS = http://sourceware.org/binutils/docs
|
||||
binutils node ${BINUTILS}/binutils/
|
||||
as node ${BINUTILS}/as/
|
||||
bfd node ${BINUTILS}/bfd/
|
||||
@@ -162,21 +110,13 @@ cpio node ${GS}/cpio/manual/html_node/
|
||||
|
||||
cssc node ${GS}/cssc/manual/
|
||||
|
||||
CUIRASS = ${GS}/guix/cuirass/manual
|
||||
cuirass mono ${CUIRASS}/cuirass.html
|
||||
cuirass node ${CUIRASS}/html_node/
|
||||
|
||||
CVS = ${GS}/trans-coord/manual
|
||||
cvs mono ${CVS}/cvs/cvs.html
|
||||
cvs node ${CVS}/cvs/html_node/
|
||||
#cvs cannot be handled here; see http://ximbiot.com/cvs/manual.
|
||||
|
||||
ddd mono ${GS}/ddd/manual/html_mono/ddd.html
|
||||
|
||||
ddrescue mono ${GS}/ddrescue/manual/ddrescue_manual.html
|
||||
|
||||
dejagnu node ${GS}/dejagnu/manual/
|
||||
|
||||
DICO = https://puszcza.gnu.org.ua/software/dico/manual
|
||||
DICO = http://puszcza.gnu.org.ua/software/dico/manual
|
||||
dico mono ${DICO}/dico.html
|
||||
dico chapter ${DICO}/html_chapter/
|
||||
dico section ${DICO}/html_section/
|
||||
@@ -185,9 +125,6 @@ dico node ${DICO}/html_node/
|
||||
diffutils mono ${GS}/diffutils/manual/diffutils
|
||||
diffutils node ${GS}/diffutils/manual/html_node/
|
||||
|
||||
dmd mono ${GS}/dmd/manual/dmd
|
||||
dmd node ${GS}/dmd/manual/html_node/
|
||||
|
||||
ed mono ${GS}/ed/manual/ed_manual.html
|
||||
|
||||
EMACS = ${GS}/emacs/manual
|
||||
@@ -230,9 +167,6 @@ emacs node ${EMACS}/html_node/emacs/
|
||||
eshell mono ${EMACS}/html_mono/eshell.html
|
||||
eshell node ${EMACS}/html_node/eshell/
|
||||
#
|
||||
eww mono ${EMACS}/html_mono/eww.html
|
||||
eww node ${EMACS}/html_node/eww/
|
||||
#
|
||||
flymake mono ${EMACS}/html_mono/flymake.html
|
||||
flymake node ${EMACS}/html_node/flymake/
|
||||
#
|
||||
@@ -242,9 +176,6 @@ emacs node ${EMACS}/html_node/emacs/
|
||||
idlwave mono ${EMACS}/html_mono/idlwave.html
|
||||
idlwave node ${EMACS}/html_node/idlwave/
|
||||
#
|
||||
info mono ${EMACS}/html_mono/info.html
|
||||
info node ${EMACS}/html_node/info/
|
||||
#
|
||||
message mono ${EMACS}/html_mono/message.html
|
||||
message node ${EMACS}/html_node/message/
|
||||
#
|
||||
@@ -303,7 +234,8 @@ find node ${GS}/findutils/manual/html_node/find_html
|
||||
findutils mono ${GS}/findutils/manual/html_mono/find.html
|
||||
findutils node ${GS}/findutils/manual/html_node/find_html
|
||||
|
||||
flex node https://westes.github.io/flex/manual/
|
||||
FLEX = http://flex.sourceforge.net
|
||||
flex node ${FLEX}/manual/
|
||||
|
||||
gama mono ${GS}/gama/manual/gama.html
|
||||
gama node ${GS}/gama/manual/html_node/
|
||||
@@ -317,13 +249,13 @@ gawk node ${GAWK}/html_node/
|
||||
gcal mono ${GS}/gcal/manual/gcal.html
|
||||
gcal node ${GS}/gcal/manual/html_node/
|
||||
|
||||
GCC = https://gcc.gnu.org/onlinedocs
|
||||
GCC = http://gcc.gnu.org/onlinedocs
|
||||
gcc node ${GCC}/gcc/
|
||||
cpp node ${GCC}/cpp/
|
||||
gcj node ${GCC}/gcj/
|
||||
gfortran node ${GCC}/gfortran/
|
||||
gnat_rm node ${GCC}/gnat_rm/
|
||||
gnat_ugn node ${GCC}/gnat_ugn/
|
||||
gnat_ugn_unw node ${GCC}/gnat_ugn_unw/
|
||||
libgomp node ${GCC}/libgomp/
|
||||
libstdc++ node ${GCC}/libstdc++/
|
||||
#
|
||||
@@ -333,7 +265,7 @@ gcc node ${GCC}/gcc/
|
||||
gnat-style node ${GCC}/gnat-style/
|
||||
libiberty node ${GCC}/libiberty/
|
||||
|
||||
GDB = https://sourceware.org/gdb/current/onlinedocs
|
||||
GDB = http://sourceware.org/gdb/current/onlinedocs
|
||||
gdb node ${GDB}/gdb/
|
||||
stabs node ${GDB}/stabs/
|
||||
|
||||
@@ -343,23 +275,16 @@ gdbm chapter ${GDBM}/html_chapter/
|
||||
gdbm section ${GDBM}/html_section/
|
||||
gdbm node ${GDBM}/html_node/
|
||||
|
||||
geiser chapter http://geiser.nongnu.org/
|
||||
|
||||
gettext mono ${GS}/gettext/manual/gettext.html
|
||||
gettext node ${GS}/gettext/manual/html_node/
|
||||
|
||||
gforth node https://www.complang.tuwien.ac.at/forth/gforth/Docs-html/
|
||||
|
||||
# Also found at:
|
||||
# https://mirrors.edge.kernel.org/pub/software/scm/git/docs/user-manual.html
|
||||
# https://git.github.io/htmldocs/user-manual.html
|
||||
git mono https://git-scm.com/docs/user-manual
|
||||
gforth node http://www.complang.tuwien.ac.at/forth/gforth/Docs-html/
|
||||
|
||||
global mono ${GS}/global/manual/global.html
|
||||
|
||||
gmediaserver node ${GS}/gmediaserver/manual/
|
||||
|
||||
gmp node https://www.gmplib.org/manual/
|
||||
gmp node http://www.gmplib.org/manual/
|
||||
|
||||
gnu-arch node ${GS}/gnu-arch/tutorial/
|
||||
|
||||
@@ -382,7 +307,7 @@ gnun node ${GNUN}/gnun/html_node/
|
||||
web-trans mono ${GNUN}/web-trans/web-trans.html
|
||||
web-trans node ${GNUN}/web-trans/html_node/
|
||||
|
||||
GNUPG = https://www.gnupg.org/documentation/manuals
|
||||
GNUPG = http://www.gnupg.org/documentation/manuals
|
||||
gnupg node ${GNUPG}/gnupg/
|
||||
dirmngr node ${GNUPG}/dirmngr/
|
||||
gcrypt node ${GNUPG}/gcrypt/
|
||||
@@ -402,8 +327,8 @@ GNUSTANDARDS = ${G}/prep
|
||||
standards mono ${GNUSTANDARDS}/standards/standards.html
|
||||
standards node ${GNUSTANDARDS}/standards/html_node/
|
||||
|
||||
gnutls mono ${GS}/gnutls/manual/gnutls.html
|
||||
gnutls node ${GS}/gnutls/manual/html_node/
|
||||
gnutls mono http://gnutls.org/manual/gnutls.html
|
||||
gnutls node http://gnutls.org/manual/html_node/
|
||||
|
||||
gnutls-guile mono http://gnutls.org/manual/gnutls-guile.html
|
||||
gnutls-guile node http://gnutls.org/manual/gnutls-guile/
|
||||
@@ -461,55 +386,13 @@ GUILE_GNOME = ${GS}/guile-gnome/docs
|
||||
|
||||
guile-gtk node ${GS}/guile-gtk/docs/guile-gtk/
|
||||
|
||||
guile-netlink mono https://git.lepiller.eu/guile-netlink/manual/manual.html
|
||||
|
||||
guile-rpc mono ${GS}/guile-rpc/manual/guile-rpc.html
|
||||
guile-rpc node ${GS}/guile-rpc/manual/html_node/
|
||||
|
||||
GUIX_ROOT = https://guix.gnu.org
|
||||
GUIX = ${GUIX_ROOT}/manual/devel
|
||||
guix.de mono ${GUIX}/de/guix.de.html
|
||||
guix.de node ${GUIX}/de/html_node/
|
||||
guix.es mono ${GUIX}/es/guix.es.html
|
||||
guix.es node ${GUIX}/es/html_node/
|
||||
guix.fr mono ${GUIX}/fr/guix.fr.html
|
||||
guix.fr node ${GUIX}/fr/html_node/
|
||||
guix.it mono ${GUIX}/it/guix.it.html
|
||||
guix.it node ${GUIX}/it/html_node/
|
||||
guix.pt_BR mono ${GUIX}/pt-br/guix.pt_BR.html
|
||||
guix.pt_BR node ${GUIX}/pt-br/html_node/
|
||||
guix.ru mono ${GUIX}/ru/guix.ru.html
|
||||
guix.ru node ${GUIX}/ru/html_node/
|
||||
guix.zh_CN mono ${GUIX}/zh-cn/guix.zh_CN.html
|
||||
guix.zh_CN node ${GUIX}/zh-cn/html_node/
|
||||
guix mono ${GUIX}/en/guix.html
|
||||
guix node ${GUIX}/en/html_node/
|
||||
|
||||
GUIX_COOKBOOK = ${GUIX_ROOT}/cookbook
|
||||
guix-cookbook.de mono ${GUIX_COOKBOOK}/de/guix-cookbook.de.html
|
||||
guix-cookbook.de node ${GUIX_COOKBOOK}/de/html_node/
|
||||
guix-cookbook.es mono ${GUIX_COOKBOOK}/es/guix-cookbook.de.html
|
||||
guix-cookbook.es node ${GUIX_COOKBOOK}/es/html_node/
|
||||
guix-cookbook.fr mono ${GUIX_COOKBOOK}/fr/guix-cookbook.fr.html
|
||||
guix-cookbook.fr node ${GUIX_COOKBOOK}/fr/html_node/
|
||||
guix-cookbook.it mono ${GUIX_COOKBOOK}/it/guix-cookbook.it.html
|
||||
guix-cookbook.it node ${GUIX_COOKBOOK}/it/html_node/
|
||||
guix-cookbook.ko mono ${GUIX_COOKBOOK}/ko/guix-cookbook.ko.html
|
||||
guix-cookbook.ko node ${GUIX_COOKBOOK}/ko/html_node/
|
||||
guix-cookbook.pt_BR mono ${GUIX_COOKBOOK}/pt-br/guix-cookbook.pt_BR.html
|
||||
guix-cookbook.pt_BR node ${GUIX_COOKBOOK}/pt-br/html_node/
|
||||
guix-cookbook.ru mono ${GUIX_COOKBOOK}/ru/guix-cookbook.ru.html
|
||||
guix-cookbook.ru node ${GUIX_COOKBOOK}/ru/html_node/
|
||||
guix-cookbook.sk mono ${GUIX_COOKBOOK}/sk/guix-cookbook.sk.html
|
||||
guix-cookbook.sk node ${GUIX_COOKBOOK}/sk/html_node/
|
||||
guix-cookbook.sv mono ${GUIX_COOKBOOK}/sv/guix-cookbook.sv.html
|
||||
guix-cookbook.sv node ${GUIX_COOKBOOK}/sv/html_node/
|
||||
guix-cookbook.ta mono ${GUIX_COOKBOOK}/ta/guix-cookbook.ta.html
|
||||
guix-cookbook.ta node ${GUIX_COOKBOOK}/ta/html_node/
|
||||
guix-cookbook mono ${GUIX_COOKBOOK}/en/guix-cookbook.html
|
||||
guix-cookbook node ${GUIX_COOKBOOK}/en/html_node/
|
||||
guix-cookbook.zh_CN mono ${GUIX_COOKBOOK}/zh-cn/guix-cookbook.zh_CN.html
|
||||
guix-cookbook.zh_CN node ${GUIX_COOKBOOK}/zh-cn/html_node/
|
||||
guix mono ${GS}/guix/manual/guix.html
|
||||
guix node ${GS}/guix/manual/html_node/
|
||||
guix.fr mono ${GS}/guix/manual/fr/guix.html
|
||||
guix.fr node ${GS}/guix/manual/fr/html_node/
|
||||
|
||||
gv mono ${GS}/gv/manual/gv.html
|
||||
gv node ${GS}/gv/manual/html_node/
|
||||
@@ -522,10 +405,6 @@ hello node ${GS}/hello/manual/html_node/
|
||||
|
||||
help2man mono ${GS}/help2man/help2man.html
|
||||
|
||||
# XXX: These are actually pages created by texi2html, so no quite following
|
||||
# the expected naming scheme.
|
||||
hurd mono ${GS}/hurd/doc/
|
||||
|
||||
idutils mono ${GS}/idutils/manual/idutils.html
|
||||
idutils node ${GS}/idutils/manual/html_node/
|
||||
|
||||
@@ -604,21 +483,15 @@ mcron node ${GS}/mcron/manual/html_node/
|
||||
mdk mono ${GS}/mdk/manual/mdk.html
|
||||
mdk node ${GS}/mdk/manual/html_node/
|
||||
|
||||
METAEXCHANGE = https://ftp.gwdg.de/pub/gnu2/iwfmdh/doc/texinfo
|
||||
METAEXCHANGE = http://ftp.gwdg.de/pub/gnu2/iwfmdh/doc/texinfo
|
||||
iwf_mh node ${METAEXCHANGE}/iwf_mh.html
|
||||
scantest node ${METAEXCHANGE}/scantest.html
|
||||
|
||||
mes mono ${GS}/mes/manual/mes.html
|
||||
mes node ${GS}/mes/manual/html_node/
|
||||
|
||||
MIT_SCHEME = ${GS}/mit-scheme/documentation/stable
|
||||
mit-scheme-ref mono ${MIT_SCHEME}/mit-scheme-ref.html
|
||||
MIT_SCHEME = ${GS}/mit-scheme/documentation
|
||||
mit-scheme-ref node ${MIT_SCHEME}/mit-scheme-ref/
|
||||
mit-scheme-user mono ${MIT_SCHEME}/mit-scheme-user.html
|
||||
mit-scheme-user node ${MIT_SCHEME}/mit-scheme-user/
|
||||
sos mono ${MIT_SCHEME}/mit-scheme-sos.html
|
||||
sos node ${MIT_SCHEME}/mit-scheme-sos/
|
||||
mit-scheme-imail mono ${MIT_SCHEME}/mit-scheme-imail.html
|
||||
mit-scheme-imail node ${MIT_SCHEME}/mit-scheme-imail/
|
||||
|
||||
moe mono ${GS}/moe/manual/moe_manual.html
|
||||
|
||||
@@ -630,9 +503,9 @@ mpfr mono http://www.mpfr.org/mpfr-current/mpfr.html
|
||||
|
||||
mtools mono ${GS}/mtools/manual/mtools.html
|
||||
|
||||
myserver mono http://www.myserverproject.net/doc.php
|
||||
myserver node http://www.myserverproject.net/documentation/
|
||||
|
||||
nano mono https://www.nano-editor.org/dist/latest/nano.html
|
||||
nano mono http://www.nano-editor.org/dist/latest/nano.html
|
||||
|
||||
nettle chapter http://www.lysator.liu.se/~nisse/nettle/nettle.html
|
||||
|
||||
@@ -665,7 +538,7 @@ pspp node ${GS}/pspp/manual/html_node/
|
||||
pyconfigure mono ${GS}/pyconfigure/manual/pyconfigure.html
|
||||
pyconfigure node ${GS}/pyconfigure/manual/html_node/
|
||||
|
||||
R = https://cran.r-project.org/doc/manuals
|
||||
R = http://cran.r-project.org/doc/manuals
|
||||
R-intro mono ${R}/R-intro.html
|
||||
R-lang mono ${R}/R-lang.html
|
||||
R-exts mono ${R}/R-exts.html
|
||||
@@ -676,7 +549,7 @@ R = https://cran.r-project.org/doc/manuals
|
||||
rcs mono ${GS}/rcs/manual/rcs.html
|
||||
rcs node ${GS}/rcs/manual/html_node/
|
||||
|
||||
READLINE = https://tiswww.cwru.edu/php/chet/readline
|
||||
READLINE = http://cnswww.cns.cwru.edu/php/chet/readline
|
||||
readline mono ${READLINE}/readline.html
|
||||
rluserman mono ${READLINE}/rluserman.html
|
||||
history mono ${READLINE}/history.html
|
||||
@@ -728,15 +601,12 @@ sqltutor node ${GS}/sqltutor/manual/html_node/
|
||||
|
||||
src-highlite mono ${GS}/src-highlite/source-highlight.html
|
||||
|
||||
stow mono ${GS}/stow/manual/stow.html
|
||||
stow node ${GS}/stow/manual/html_node/
|
||||
|
||||
swbis mono ${GS}/swbis/manual.html
|
||||
|
||||
tar mono ${GS}/tar/manual/tar.html
|
||||
tar chapter ${GS}/tar/manual/html_chapter/
|
||||
tar section ${GS}/tar/manual/html_section/
|
||||
tar node ${GS}/tar/manual/html_node/
|
||||
tar node ${GS}/autoconf/manual/html_node/
|
||||
|
||||
teseq mono ${GS}/teseq/teseq.html
|
||||
teseq node ${GS}/teseq/html_node/
|
||||
@@ -744,6 +614,9 @@ teseq node ${GS}/teseq/html_node/
|
||||
TEXINFO = ${GS}/texinfo/manual
|
||||
texinfo mono ${TEXINFO}/texinfo/texinfo.html
|
||||
texinfo node ${TEXINFO}/texinfo/html_node/
|
||||
#
|
||||
info mono ${TEXINFO}/info/info.html
|
||||
info node ${TEXINFO}/info/html_node/
|
||||
#
|
||||
info-stnd mono ${TEXINFO}/info-stnd/info-stnd.html
|
||||
info-stnd node ${TEXINFO}/info-stnd/html_node/
|
||||
@@ -771,7 +644,7 @@ xboard node ${GS}/xboard/manual/html_node/
|
||||
# emacs-page
|
||||
# Free TeX-related Texinfo manuals on tug.org.
|
||||
|
||||
T = https://tug.org/texinfohtml
|
||||
T = http://tug.org/texinfohtml
|
||||
|
||||
dvipng mono ${T}/dvipng.html
|
||||
dvips mono ${T}/dvips.html
|
||||
@@ -781,14 +654,9 @@ latex2e mono ${T}/latex2e.html
|
||||
tlbuild mono ${T}/tlbuild.html
|
||||
web2c mono ${T}/web2c.html
|
||||
|
||||
ELPA = https://elpa.gnu.org
|
||||
ELPA_DOC = ${ELPA}/packages/doc
|
||||
|
||||
debbugs-ug mono ${ELPA_DOC}/debbugs-ug.html
|
||||
|
||||
|
||||
# Local Variables:
|
||||
# eval: (add-hook 'write-file-functions 'time-stamp)
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "htmlxrefversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Obtained by running "nix-store --graph" on the first GCC derivation.
|
||||
|
||||
digraph G {
|
||||
"/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [label = "gcc-bootstrap-0.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [label = "gcc-bootstrap-0.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "black"];
|
||||
"/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "red"];
|
||||
"/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "green"];
|
||||
@@ -11,8 +11,8 @@ digraph G {
|
||||
"/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "black"];
|
||||
"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "red"];
|
||||
"/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" -> "/nix/store/x60397za40lx0n88f51a2csfdq5xvb19-gcc-bootstrap-0.drv" [color = "green"];
|
||||
"/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" [label = "tar", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [label = "glibc-bootstrap-0.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" [label = "tar", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [label = "glibc-bootstrap-0.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "blue"];
|
||||
"/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "magenta"];
|
||||
"/nix/store/8iivk9hpnps21yrbq3zzsxgzv9ixbhgh-glibc-bootstrap-0-guile-builder" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "burlywood"];
|
||||
@@ -20,63 +20,63 @@ digraph G {
|
||||
"/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "red"];
|
||||
"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "green"];
|
||||
"/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" -> "/nix/store/4sv9xhcjap6byca130fzpzzjalb7iixv-glibc-bootstrap-0.drv" [color = "blue"];
|
||||
"/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" [label = "xz", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/8iivk9hpnps21yrbq3zzsxgzv9ixbhgh-glibc-bootstrap-0-guile-builder" [label = "glibc-bootstrap-0-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" [label = "xz", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/8iivk9hpnps21yrbq3zzsxgzv9ixbhgh-glibc-bootstrap-0-guile-builder" [label = "glibc-bootstrap-0-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" -> "/nix/store/8iivk9hpnps21yrbq3zzsxgzv9ixbhgh-glibc-bootstrap-0-guile-builder" [color = "magenta"];
|
||||
"/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" -> "/nix/store/8iivk9hpnps21yrbq3zzsxgzv9ixbhgh-glibc-bootstrap-0-guile-builder" [color = "burlywood"];
|
||||
"/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" [label = "module-import.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" [label = "module-import.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/9zrdfvnrpljryr82an2n1mj6bh2przhn-module-import-guile-builder" -> "/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" [color = "black"];
|
||||
"/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" -> "/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" [color = "red"];
|
||||
"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" [color = "green"];
|
||||
"/nix/store/9zrdfvnrpljryr82an2n1mj6bh2przhn-module-import-guile-builder" [label = "module-import-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/9zrdfvnrpljryr82an2n1mj6bh2przhn-module-import-guile-builder" [label = "module-import-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" -> "/nix/store/9zrdfvnrpljryr82an2n1mj6bh2przhn-module-import-guile-builder" [color = "blue"];
|
||||
"/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [label = "gcc-4.7.2.tar.xz.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [label = "gcc-4.7.2.tar.xz.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/6kslnirvm26fij7wpjqbw617ri4gf5x5-gcc-4.7.2.tar.xz-guile-builder" -> "/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [color = "magenta"];
|
||||
"/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" -> "/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [color = "burlywood"];
|
||||
"/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" -> "/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [color = "black"];
|
||||
"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/fl9cwcczfdv73vq5sr0c4rd5hqzrgvac-gcc-4.7.2.tar.xz.drv" [color = "red"];
|
||||
"/nix/store/6kslnirvm26fij7wpjqbw617ri4gf5x5-gcc-4.7.2.tar.xz-guile-builder" [label = "gcc-4.7.2.tar.xz-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/jaaqdl979wjirnbxz1jqsipg22nva5n4-bash" [label = "bash", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [label = "module-import.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/6kslnirvm26fij7wpjqbw617ri4gf5x5-gcc-4.7.2.tar.xz-guile-builder" [label = "gcc-4.7.2.tar.xz-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/jaaqdl979wjirnbxz1jqsipg22nva5n4-bash" [label = "bash", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [label = "module-import.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/abagrdbdndkd0y2dwk0nw1gw0g0rhl2z-ftp-client.scm" -> "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [color = "green"];
|
||||
"/nix/store/dwd2iwd1ban8a8rmx568dpgrbkkidfhw-download.scm" -> "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [color = "blue"];
|
||||
"/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" -> "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [color = "magenta"];
|
||||
"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [color = "burlywood"];
|
||||
"/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" -> "/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" [color = "black"];
|
||||
"/nix/store/abagrdbdndkd0y2dwk0nw1gw0g0rhl2z-ftp-client.scm" [label = "ftp-client.scm", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/dwd2iwd1ban8a8rmx568dpgrbkkidfhw-download.scm" [label = "download.scm", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" [label = "utils.scm", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" [label = "module-import-compiled.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/abagrdbdndkd0y2dwk0nw1gw0g0rhl2z-ftp-client.scm" [label = "ftp-client.scm", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/dwd2iwd1ban8a8rmx568dpgrbkkidfhw-download.scm" [label = "download.scm", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" [label = "utils.scm", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" [label = "module-import-compiled.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/98gzqlgpm4gxrpl5bzykpqbwrx8ckx8l-module-import-compiled-guile-builder" -> "/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" [color = "red"];
|
||||
"/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" -> "/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" [color = "green"];
|
||||
"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" [color = "blue"];
|
||||
"/nix/store/98gzqlgpm4gxrpl5bzykpqbwrx8ckx8l-module-import-compiled-guile-builder" [label = "module-import-compiled-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" [label = "gcc-bootstrap-0-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/98gzqlgpm4gxrpl5bzykpqbwrx8ckx8l-module-import-compiled-guile-builder" [label = "module-import-compiled-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" [label = "gcc-bootstrap-0-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" -> "/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" [color = "magenta"];
|
||||
"/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" -> "/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" [color = "burlywood"];
|
||||
"/nix/store/jaaqdl979wjirnbxz1jqsipg22nva5n4-bash" -> "/nix/store/r3dsy5j2c16sv26raala6kahff7w18hb-gcc-bootstrap-0-guile-builder" [color = "black"];
|
||||
"/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [label = "glibc-2.17.tar.xz.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [label = "glibc-2.17.tar.xz.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/kvk5wp8c9rzvvrmq5fv5r58l78q8i6ch-module-import.drv" -> "/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [color = "red"];
|
||||
"/nix/store/pzv319p3q7raiad7nq7fcdw9rafzp14k-module-import-compiled.drv" -> "/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [color = "green"];
|
||||
"/nix/store/q7as3jddipj4g6si8lawrdbkjg0zcjvg-glibc-2.17.tar.xz-guile-builder" -> "/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [color = "blue"];
|
||||
"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/wdwrkg02gn28bkpbxgdb2nv558v8s3ji-glibc-2.17.tar.xz.drv" [color = "magenta"];
|
||||
"/nix/store/q7as3jddipj4g6si8lawrdbkjg0zcjvg-glibc-2.17.tar.xz-guile-builder" [label = "glibc-2.17.tar.xz-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" [label = "guile-bootstrap-2.0.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/q7as3jddipj4g6si8lawrdbkjg0zcjvg-glibc-2.17.tar.xz-guile-builder" [label = "glibc-2.17.tar.xz-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" [label = "guile-bootstrap-2.0.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" -> "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" [color = "burlywood"];
|
||||
"/nix/store/jaaqdl979wjirnbxz1jqsipg22nva5n4-bash" -> "/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" [color = "black"];
|
||||
"/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [label = "build-bootstrap-guile.sh", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [label = "build-bootstrap-guile.sh", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/3iawic1z95112yfz5y9xdp66qbxxr8l1-tar" -> "/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [color = "red"];
|
||||
"/nix/store/4xv2y0m6zr2lgi8x8pcb3zxjqxsz69kj-mkdir" -> "/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [color = "green"];
|
||||
"/nix/store/8cc81w6m04csm52y247xj3gydrbz2niv-xz" -> "/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [color = "blue"];
|
||||
"/nix/store/c450lqvaaz3ngx9pfiiiw55rqq6ssfda-guile-2.0.7.tar.xz" -> "/nix/store/bplka3yqdg8prqq3zdxza6wxlkjdhr2g-build-bootstrap-guile.sh" [color = "magenta"];
|
||||
"/nix/store/4xv2y0m6zr2lgi8x8pcb3zxjqxsz69kj-mkdir" [label = "mkdir", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/c450lqvaaz3ngx9pfiiiw55rqq6ssfda-guile-2.0.7.tar.xz" [label = "guile-2.0.7.tar.xz", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" [label = "module-import-compiled.drv", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/4xv2y0m6zr2lgi8x8pcb3zxjqxsz69kj-mkdir" [label = "mkdir", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/c450lqvaaz3ngx9pfiiiw55rqq6ssfda-guile-2.0.7.tar.xz" [label = "guile-2.0.7.tar.xz", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" [label = "module-import-compiled.drv", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/8jiqjlb6zxjys16ca7s6jvxcc620c71k-module-import-compiled-guile-builder" -> "/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" [color = "burlywood"];
|
||||
"/nix/store/96yx6013dhggr3mpg5ayxv8dm9mv2ghv-module-import.drv" -> "/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" [color = "black"];
|
||||
"/nix/store/x9x1a86flhx15cams7235rfy5gc5cww1-guile-bootstrap-2.0.drv" -> "/nix/store/y4n7rzysx6qz3p0n91dw9qz5w93l6iqv-module-import-compiled.drv" [color = "red"];
|
||||
"/nix/store/8jiqjlb6zxjys16ca7s6jvxcc620c71k-module-import-compiled-guile-builder" [label = "module-import-compiled-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" [label = "module-import-guile-builder", fontname = "dejavu sans", shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/8jiqjlb6zxjys16ca7s6jvxcc620c71k-module-import-compiled-guile-builder" [label = "module-import-compiled-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" [label = "module-import-guile-builder", fontname = Helvetica, shape = box, style = filled, fillcolor = "#ffffff"];
|
||||
"/nix/store/abagrdbdndkd0y2dwk0nw1gw0g0rhl2z-ftp-client.scm" -> "/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" [color = "green"];
|
||||
"/nix/store/dwd2iwd1ban8a8rmx568dpgrbkkidfhw-download.scm" -> "/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" [color = "blue"];
|
||||
"/nix/store/mj7amprgvl2rgash1nr0v64apik8vc7f-utils.scm" -> "/nix/store/yfixjx2gpvsi5dhkpdx5gj6gx0xdk1c8-module-import-guile-builder" [color = "magenta"];
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
digraph "Guix bag" {
|
||||
"/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" [label = "glibc-intermediate-2.24", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" [label = "glibc-intermediate-2.24", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" -> "/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" [color = magenta];
|
||||
"/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" -> "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" [color = magenta];
|
||||
"/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" -> "/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" [color = magenta];
|
||||
@@ -16,7 +16,7 @@ digraph "Guix bag" {
|
||||
"/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" -> "/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" [color = magenta];
|
||||
"/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = magenta];
|
||||
"/gnu/store/aymf6jlxxpwgr71rkiz24m646nqsyii6-glibc-intermediate-2.24.drv" -> "/gnu/store/5syba2bxhh8z79jhq83fzy8fxcx5xb4s-linux-libre-headers-4.4.18.drv" [color = magenta];
|
||||
"/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" [label = "texinfo-6.3", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" [label = "texinfo-6.3", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = cyan3];
|
||||
"/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" -> "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [color = cyan3];
|
||||
"/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" -> "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" [color = cyan3];
|
||||
@@ -27,25 +27,25 @@ digraph "Guix bag" {
|
||||
"/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = cyan3];
|
||||
"/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = cyan3];
|
||||
"/gnu/store/wx8ifbb7x22cl4998fyldsr24fcv18j3-texinfo-6.3.drv" -> "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" [color = cyan3];
|
||||
"/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [label = "make-boot0-4.2.1", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [label = "make-boot0-4.2.1", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" -> "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [color = dimgrey];
|
||||
"/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" -> "/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" [color = dimgrey];
|
||||
"/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = dimgrey];
|
||||
"/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = dimgrey];
|
||||
"/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = dimgrey];
|
||||
"/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [label = "glibc-bootstrap-0", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" [label = "gcc-bootstrap-0", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [label = "glibc-bootstrap-0", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" [label = "gcc-bootstrap-0", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" -> "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [color = darkseagreen];
|
||||
"/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [label = "binutils-bootstrap-0", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [label = "bootstrap-binaries-0", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [label = "diffutils-boot0-3.5", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [label = "binutils-bootstrap-0", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [label = "bootstrap-binaries-0", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [label = "diffutils-boot0-3.5", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = blue];
|
||||
"/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" -> "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [color = blue];
|
||||
"/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" -> "/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" [color = blue];
|
||||
"/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = blue];
|
||||
"/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = blue];
|
||||
"/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = blue];
|
||||
"/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" [label = "findutils-boot0-4.6.0", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" [label = "findutils-boot0-4.6.0", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = blue];
|
||||
"/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" -> "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [color = blue];
|
||||
"/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" -> "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [color = blue];
|
||||
@@ -53,14 +53,14 @@ digraph "Guix bag" {
|
||||
"/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = blue];
|
||||
"/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = blue];
|
||||
"/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = blue];
|
||||
"/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" [label = "file-boot0-5.28", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" [label = "file-boot0-5.28", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = darkgoldenrod];
|
||||
"/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" -> "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [color = darkgoldenrod];
|
||||
"/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" -> "/gnu/store/jxlg2pb4bhxjld9kimc0vgc1pvgifzag-gcc-bootstrap-0.drv" [color = darkgoldenrod];
|
||||
"/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = darkgoldenrod];
|
||||
"/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = darkgoldenrod];
|
||||
"/gnu/store/nwzyr3xskw0ms8cndffsfvhvm5xz96pc-file-boot0-5.28.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = darkgoldenrod];
|
||||
"/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" [label = "perl-boot0-5.24.0", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" [label = "perl-boot0-5.24.0", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = peachpuff4];
|
||||
"/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" -> "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [color = peachpuff4];
|
||||
"/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" -> "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" [color = peachpuff4];
|
||||
@@ -70,7 +70,7 @@ digraph "Guix bag" {
|
||||
"/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = peachpuff4];
|
||||
"/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = peachpuff4];
|
||||
"/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = peachpuff4];
|
||||
"/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" [label = "gcc-cross-boot0-4.9.4", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" [label = "gcc-cross-boot0-4.9.4", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" -> "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" [color = darkseagreen];
|
||||
"/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" -> "/gnu/store/wda0p45jlbzg6w9j8zxw2sd11n2a4pbv-glibc-bootstrap-0.drv" [color = darkseagreen];
|
||||
"/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = darkseagreen];
|
||||
@@ -81,7 +81,7 @@ digraph "Guix bag" {
|
||||
"/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = darkseagreen];
|
||||
"/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = darkseagreen];
|
||||
"/gnu/store/w9adgzgdqkwz0w13zxf2fn363v9wcllc-gcc-cross-boot0-4.9.4.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = darkseagreen];
|
||||
"/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" [label = "binutils-cross-boot0-2.27", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" [label = "binutils-cross-boot0-2.27", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = dimgrey];
|
||||
"/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" -> "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [color = dimgrey];
|
||||
"/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" -> "/gnu/store/m4900ip34w4rcgn5620iqdi1wv198d9s-findutils-boot0-4.6.0.drv" [color = dimgrey];
|
||||
@@ -91,12 +91,12 @@ digraph "Guix bag" {
|
||||
"/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" -> "/gnu/store/wv8sf8h4n9s5cdya223iy2wp3alr92x8-binutils-bootstrap-0.drv" [color = dimgrey];
|
||||
"/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = dimgrey];
|
||||
"/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = dimgrey];
|
||||
"/gnu/store/72snmrnjphwjxffknjhzm3xg38wd08al-ld-wrapper-x86_64-guix-linux-gnu-0.drv" [label = "ld-wrapper-x86_64-guix-linux-gnu-0", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/72snmrnjphwjxffknjhzm3xg38wd08al-ld-wrapper-x86_64-guix-linux-gnu-0.drv" [label = "ld-wrapper-x86_64-guix-linux-gnu-0", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/72snmrnjphwjxffknjhzm3xg38wd08al-ld-wrapper-x86_64-guix-linux-gnu-0.drv" -> "/gnu/store/v1v7jp438hc5rpgriwpjp04x049vh0g4-binutils-cross-boot0-2.27.drv" [color = dimgrey];
|
||||
"/gnu/store/72snmrnjphwjxffknjhzm3xg38wd08al-ld-wrapper-x86_64-guix-linux-gnu-0.drv" -> "/gnu/store/af19ma2vm3qhvh3rw6cdivyp98s18bj3-guile-bootstrap-2.0.drv" [color = dimgrey];
|
||||
"/gnu/store/72snmrnjphwjxffknjhzm3xg38wd08al-ld-wrapper-x86_64-guix-linux-gnu-0.drv" -> "/gnu/store/pmvh852v0x1zbl4r37pcpdqnq6m3bwfk-bootstrap-binaries-0.drv" [color = dimgrey];
|
||||
"/gnu/store/af19ma2vm3qhvh3rw6cdivyp98s18bj3-guile-bootstrap-2.0.drv" [label = "guile-bootstrap-2.0", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/5syba2bxhh8z79jhq83fzy8fxcx5xb4s-linux-libre-headers-4.4.18.drv" [label = "linux-libre-headers-4.4.18", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/af19ma2vm3qhvh3rw6cdivyp98s18bj3-guile-bootstrap-2.0.drv" [label = "guile-bootstrap-2.0", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/5syba2bxhh8z79jhq83fzy8fxcx5xb4s-linux-libre-headers-4.4.18.drv" [label = "linux-libre-headers-4.4.18", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/5syba2bxhh8z79jhq83fzy8fxcx5xb4s-linux-libre-headers-4.4.18.drv" -> "/gnu/store/ccj3as3258l70lmphi48hs7n017wv75s-perl-boot0-5.24.0.drv" [color = blue];
|
||||
"/gnu/store/5syba2bxhh8z79jhq83fzy8fxcx5xb4s-linux-libre-headers-4.4.18.drv" -> "/gnu/store/1jpld53g41rzv2bmjp6v9mckmyw75vs3-make-boot0-4.2.1.drv" [color = blue];
|
||||
"/gnu/store/5syba2bxhh8z79jhq83fzy8fxcx5xb4s-linux-libre-headers-4.4.18.drv" -> "/gnu/store/zpphawi07xidhfs2dja3w7hmnfp99j02-diffutils-boot0-3.5.drv" [color = blue];
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
digraph "Guix bag-emerged" {
|
||||
"/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" [label = "coreutils-8.25", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" [label = "coreutils-8.25", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" -> "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" [color = cyan3];
|
||||
"/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = cyan3];
|
||||
"/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = cyan3];
|
||||
@@ -23,7 +23,7 @@ digraph "Guix bag-emerged" {
|
||||
"/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" -> "/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" [color = cyan3];
|
||||
"/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" -> "/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" [color = cyan3];
|
||||
"/gnu/store/yv2r96w2dvbb0sjrf9f2imybpnyd616b-coreutils-8.25.drv" -> "/gnu/store/ijv3y5l1fbbzwb77lc867r1qbsf147i8-libcap-2.24.drv" [color = cyan3];
|
||||
"/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" [label = "perl-5.24.0", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" [label = "perl-5.24.0", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = blue];
|
||||
"/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = blue];
|
||||
"/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" -> "/gnu/store/xx3hiqhqn0d94zz7b46hgggwsz3wjiiw-bzip2-1.0.6.drv" [color = blue];
|
||||
@@ -43,26 +43,26 @@ digraph "Guix bag-emerged" {
|
||||
"/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" -> "/gnu/store/hv3dl3my12mq0gkwvckmnqccnckn39l0-gcc-4.9.4.drv" [color = blue];
|
||||
"/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = blue];
|
||||
"/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = blue];
|
||||
"/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [label = "tar-1.29", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [label = "gzip-1.8", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/xx3hiqhqn0d94zz7b46hgggwsz3wjiiw-bzip2-1.0.6.drv" [label = "bzip2-1.0.6", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/kz8rzasivw4aflsv4rll3m539xybf226-xz-5.2.2.drv" [label = "xz-5.2.2", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/3pwrlsd23k2h104akxfj3cxhqcp973g9-file-5.28.drv" [label = "file-5.28", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/f1ww5vh5abnvr8b24llipm5dl89s5lq2-diffutils-3.5.drv" [label = "diffutils-3.5", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/0cbgdhhyh7hsgwq1x54n9vnq99rfjch9-patch-2.7.5.drv" [label = "patch-2.7.5", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/8xjnm44dfwwxp90hxq6zhb6qvia7rb3l-sed-4.2.2.drv" [label = "sed-4.2.2", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/54wjl6dp6rp47r67f4nyfqyv8nh456yc-findutils-4.6.0.drv" [label = "findutils-4.6.0", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/k951w49yw74ikg19l4mmlwfrq9w7a7zd-gawk-4.1.4.drv" [label = "gawk-4.1.4", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/n48xdjkvhlhj5mgdzy59n0dpb9vn0v78-grep-2.25.drv" [label = "grep-2.25", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/i52csyja3036ns0zj6z85lkgz3wfyym7-coreutils-8.25.drv" [label = "coreutils-8.25", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/nv4mnbz3mpd4gv80djk7762wyvxpccqk-make-4.2.1.drv" [label = "make-4.2.1", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/2c60vlcvpj5dvmgklajkp7cpynhcqixr-bash-4.4.0.drv" [label = "bash-4.4.0", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/zhc5c4s0xvzizpgpq2za6x84vxv57iy6-ld-wrapper-0.drv" [label = "ld-wrapper-0", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/9k1js0kalh4s6q4hf0rgg2n0zdyrwi69-binutils-2.27.drv" [label = "binutils-2.27", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/hv3dl3my12mq0gkwvckmnqccnckn39l0-gcc-4.9.4.drv" [label = "gcc-4.9.4", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [label = "glibc-2.24", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [label = "glibc-utf8-locales-2.24", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" [label = "acl-2.2.52", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [label = "tar-1.29", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [label = "gzip-1.8", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/xx3hiqhqn0d94zz7b46hgggwsz3wjiiw-bzip2-1.0.6.drv" [label = "bzip2-1.0.6", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/kz8rzasivw4aflsv4rll3m539xybf226-xz-5.2.2.drv" [label = "xz-5.2.2", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/3pwrlsd23k2h104akxfj3cxhqcp973g9-file-5.28.drv" [label = "file-5.28", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/f1ww5vh5abnvr8b24llipm5dl89s5lq2-diffutils-3.5.drv" [label = "diffutils-3.5", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/0cbgdhhyh7hsgwq1x54n9vnq99rfjch9-patch-2.7.5.drv" [label = "patch-2.7.5", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/8xjnm44dfwwxp90hxq6zhb6qvia7rb3l-sed-4.2.2.drv" [label = "sed-4.2.2", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/54wjl6dp6rp47r67f4nyfqyv8nh456yc-findutils-4.6.0.drv" [label = "findutils-4.6.0", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/k951w49yw74ikg19l4mmlwfrq9w7a7zd-gawk-4.1.4.drv" [label = "gawk-4.1.4", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/n48xdjkvhlhj5mgdzy59n0dpb9vn0v78-grep-2.25.drv" [label = "grep-2.25", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/i52csyja3036ns0zj6z85lkgz3wfyym7-coreutils-8.25.drv" [label = "coreutils-8.25", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/nv4mnbz3mpd4gv80djk7762wyvxpccqk-make-4.2.1.drv" [label = "make-4.2.1", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/2c60vlcvpj5dvmgklajkp7cpynhcqixr-bash-4.4.0.drv" [label = "bash-4.4.0", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/zhc5c4s0xvzizpgpq2za6x84vxv57iy6-ld-wrapper-0.drv" [label = "ld-wrapper-0", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/9k1js0kalh4s6q4hf0rgg2n0zdyrwi69-binutils-2.27.drv" [label = "binutils-2.27", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/hv3dl3my12mq0gkwvckmnqccnckn39l0-gcc-4.9.4.drv" [label = "gcc-4.9.4", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [label = "glibc-2.24", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [label = "glibc-utf8-locales-2.24", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" [label = "acl-2.2.52", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" -> "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" [color = darkgoldenrod];
|
||||
"/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" -> "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" [color = darkgoldenrod];
|
||||
"/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = darkgoldenrod];
|
||||
@@ -85,7 +85,7 @@ digraph "Guix bag-emerged" {
|
||||
"/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = darkgoldenrod];
|
||||
"/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = darkgoldenrod];
|
||||
"/gnu/store/ywmblv73pqa8lqqz368g46ysz65pnm0v-acl-2.2.52.drv" -> "/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" [color = darkgoldenrod];
|
||||
"/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" [label = "gettext-minimal-0.19.8.1", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" [label = "gettext-minimal-0.19.8.1", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = dimgrey];
|
||||
"/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = dimgrey];
|
||||
"/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" -> "/gnu/store/xx3hiqhqn0d94zz7b46hgggwsz3wjiiw-bzip2-1.0.6.drv" [color = dimgrey];
|
||||
@@ -106,7 +106,7 @@ digraph "Guix bag-emerged" {
|
||||
"/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = dimgrey];
|
||||
"/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = dimgrey];
|
||||
"/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" -> "/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" [color = dimgrey];
|
||||
"/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" [label = "expat-2.2.0", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" [label = "expat-2.2.0", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = darkviolet];
|
||||
"/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = darkviolet];
|
||||
"/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" -> "/gnu/store/xx3hiqhqn0d94zz7b46hgggwsz3wjiiw-bzip2-1.0.6.drv" [color = darkviolet];
|
||||
@@ -126,7 +126,7 @@ digraph "Guix bag-emerged" {
|
||||
"/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" -> "/gnu/store/hv3dl3my12mq0gkwvckmnqccnckn39l0-gcc-4.9.4.drv" [color = darkviolet];
|
||||
"/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = darkviolet];
|
||||
"/gnu/store/4dql1pzyivg87jwyfmmkwc6jll1vnizc-expat-2.2.0.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = darkviolet];
|
||||
"/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" [label = "attr-2.4.47", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" [label = "attr-2.4.47", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" -> "/gnu/store/nw68wjvbw505klgpsavq7dk195wg8ffj-gettext-minimal-0.19.8.1.drv" [color = peachpuff4];
|
||||
"/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = peachpuff4];
|
||||
"/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = peachpuff4];
|
||||
@@ -148,7 +148,7 @@ digraph "Guix bag-emerged" {
|
||||
"/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = peachpuff4];
|
||||
"/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = peachpuff4];
|
||||
"/gnu/store/gplx9i7c01f2r6qvm6d5w60iam73zmin-attr-2.4.47.drv" -> "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" [color = peachpuff4];
|
||||
"/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" [label = "gmp-6.1.1", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" [label = "gmp-6.1.1", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" -> "/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" [color = darkgoldenrod];
|
||||
"/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = darkgoldenrod];
|
||||
"/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = darkgoldenrod];
|
||||
@@ -169,7 +169,7 @@ digraph "Guix bag-emerged" {
|
||||
"/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" -> "/gnu/store/hv3dl3my12mq0gkwvckmnqccnckn39l0-gcc-4.9.4.drv" [color = darkgoldenrod];
|
||||
"/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = darkgoldenrod];
|
||||
"/gnu/store/7gqg2kmrm1bjgphnd70ps5c11gqml571-gmp-6.1.1.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = darkgoldenrod];
|
||||
"/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" [label = "m4-1.4.17", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" [label = "m4-1.4.17", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = cyan3];
|
||||
"/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = cyan3];
|
||||
"/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" -> "/gnu/store/xx3hiqhqn0d94zz7b46hgggwsz3wjiiw-bzip2-1.0.6.drv" [color = cyan3];
|
||||
@@ -189,7 +189,7 @@ digraph "Guix bag-emerged" {
|
||||
"/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" -> "/gnu/store/hv3dl3my12mq0gkwvckmnqccnckn39l0-gcc-4.9.4.drv" [color = cyan3];
|
||||
"/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" -> "/gnu/store/qbfynm50snyn31w2c3paiw2n6wvzksg8-glibc-2.24.drv" [color = cyan3];
|
||||
"/gnu/store/d1n7i55s1zcwzi21pnsxhamk3b1zf61d-m4-1.4.17.drv" -> "/gnu/store/ir0lq2x7h64g2z5mlqvnlysjk2bc9xka-glibc-utf8-locales-2.24.drv" [color = cyan3];
|
||||
"/gnu/store/ijv3y5l1fbbzwb77lc867r1qbsf147i8-libcap-2.24.drv" [label = "libcap-2.24", shape = box, fontname = "dejavu sans"];
|
||||
"/gnu/store/ijv3y5l1fbbzwb77lc867r1qbsf147i8-libcap-2.24.drv" [label = "libcap-2.24", shape = box, fontname = Helvetica];
|
||||
"/gnu/store/ijv3y5l1fbbzwb77lc867r1qbsf147i8-libcap-2.24.drv" -> "/gnu/store/jxcx1jcvzxb17dc69sfwb352vgwyr108-perl-5.24.0.drv" [color = blue];
|
||||
"/gnu/store/ijv3y5l1fbbzwb77lc867r1qbsf147i8-libcap-2.24.drv" -> "/gnu/store/7ijl8lybdx95kndajavdrpz05jdiwy9g-tar-1.29.drv" [color = blue];
|
||||
"/gnu/store/ijv3y5l1fbbzwb77lc867r1qbsf147i8-libcap-2.24.drv" -> "/gnu/store/0ykf3p023pzfcg2bw8ahjc7cvmc12zjq-gzip-1.8.drv" [color = blue];
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
digraph "Guix package" {
|
||||
"72851008" [label = "coreutils-8.25", shape = box, fontname = "dejavu sans"];
|
||||
"72851008" [label = "coreutils-8.25", shape = box, fontname = Helvetica];
|
||||
"72851008" -> "49728512" [color = darkseagreen];
|
||||
"72851008" -> "74872512" [color = darkseagreen];
|
||||
"72851008" -> "53180864" [color = darkseagreen];
|
||||
"72851008" -> "75199232" [color = darkseagreen];
|
||||
"49728512" [label = "perl-5.24.0", shape = box, fontname = "dejavu sans"];
|
||||
"74872512" [label = "acl-2.2.52", shape = box, fontname = "dejavu sans"];
|
||||
"49728512" [label = "perl-5.24.0", shape = box, fontname = Helvetica];
|
||||
"74872512" [label = "acl-2.2.52", shape = box, fontname = Helvetica];
|
||||
"74872512" -> "74873280" [color = red];
|
||||
"74872512" -> "49728512" [color = red];
|
||||
"74872512" -> "74872704" [color = red];
|
||||
"74873280" [label = "gettext-minimal-0.19.8.1", shape = box, fontname = "dejavu sans"];
|
||||
"74873280" [label = "gettext-minimal-0.19.8.1", shape = box, fontname = Helvetica];
|
||||
"74873280" -> "41550784" [color = cyan3];
|
||||
"41550784" [label = "expat-2.2.0", shape = box, fontname = "dejavu sans"];
|
||||
"74872704" [label = "attr-2.4.47", shape = box, fontname = "dejavu sans"];
|
||||
"41550784" [label = "expat-2.2.0", shape = box, fontname = Helvetica];
|
||||
"74872704" [label = "attr-2.4.47", shape = box, fontname = Helvetica];
|
||||
"74872704" -> "74873280" [color = cyan3];
|
||||
"74872704" -> "49728512" [color = cyan3];
|
||||
"53180864" [label = "gmp-6.1.1", shape = box, fontname = "dejavu sans"];
|
||||
"53180864" [label = "gmp-6.1.1", shape = box, fontname = Helvetica];
|
||||
"53180864" -> "50262784" [color = darkgoldenrod];
|
||||
"50262784" [label = "m4-1.4.17", shape = box, fontname = "dejavu sans"];
|
||||
"75199232" [label = "libcap-2.24", shape = box, fontname = "dejavu sans"];
|
||||
"50262784" [label = "m4-1.4.17", shape = box, fontname = Helvetica];
|
||||
"75199232" [label = "libcap-2.24", shape = box, fontname = Helvetica];
|
||||
"75199232" -> "49728512" [color = blue];
|
||||
"75199232" -> "74872704" [color = blue];
|
||||
|
||||
|
||||
@@ -1,79 +0,0 @@
|
||||
digraph "Guix package" {
|
||||
"139803511371136" [label = "gcc-core-mesboot0@2.95.3", shape = box, fontname = "dejavu sans"];
|
||||
"139803511371136" -> "139803511371312" [color = red];
|
||||
"139803511371136" -> "139803511372016" [color = red];
|
||||
"139803511371136" -> "139803511371488" [color = red];
|
||||
"139803511371136" -> "139803511371664" [color = red];
|
||||
"139803511371136" -> "139803511371840" [color = red];
|
||||
"139803511371136" -> "139803507105792" [color = red];
|
||||
"139803511371136" -> "139803511373600" [color = red];
|
||||
"139803511371136" -> "139803507105968" [color = red];
|
||||
"139803511371136" -> "139803749199472" [color = red];
|
||||
"139803511371312" [label = "binutils-mesboot0@2.20.1a", shape = box, fontname = "dejavu sans"];
|
||||
"139803511371312" -> "139803511372016" [color = dimgrey];
|
||||
"139803511371312" -> "139803511371488" [color = dimgrey];
|
||||
"139803511371312" -> "139803511371664" [color = dimgrey];
|
||||
"139803511371312" -> "139803511371840" [color = dimgrey];
|
||||
"139803511371312" -> "139803507105792" [color = dimgrey];
|
||||
"139803511371312" -> "139803511373600" [color = dimgrey];
|
||||
"139803511371312" -> "139803507105968" [color = dimgrey];
|
||||
"139803511371312" -> "139803749199472" [color = dimgrey];
|
||||
"139803511372016" [label = "gzip-mesboot@1.2.4", shape = box, fontname = "dejavu sans"];
|
||||
"139803511372016" -> "139803511372192" [color = magenta];
|
||||
"139803511372016" -> "139803507105792" [color = magenta];
|
||||
"139803511372016" -> "139803511373600" [color = magenta];
|
||||
"139803511372016" -> "139803507105968" [color = magenta];
|
||||
"139803511372016" -> "139803749199472" [color = magenta];
|
||||
"139803511372192" [label = "tcc-boot0@0.9.26-1136-g5bba73cc", shape = box, fontname = "dejavu sans"];
|
||||
"139803511372192" -> "139803511372368" [color = magenta];
|
||||
"139803511372192" -> "139803511372544" [color = magenta];
|
||||
"139803511372192" -> "139803507105792" [color = magenta];
|
||||
"139803511372192" -> "139803511373600" [color = magenta];
|
||||
"139803511372192" -> "139803507105968" [color = magenta];
|
||||
"139803511372192" -> "139803749199472" [color = magenta];
|
||||
"139803511372368" [label = "mes-boot@0.24", shape = box, fontname = "dejavu sans"];
|
||||
"139803511372368" -> "139803511372544" [color = darkviolet];
|
||||
"139803511372368" -> "139803507105792" [color = darkviolet];
|
||||
"139803511372368" -> "139803511373600" [color = darkviolet];
|
||||
"139803511372368" -> "139803507105968" [color = darkviolet];
|
||||
"139803511372368" -> "139803749199472" [color = darkviolet];
|
||||
"139803511372544" [label = "stage0-posix@1.4", shape = box, fontname = "dejavu sans"];
|
||||
"139803511372544" -> "139803511373072" [color = peachpuff4];
|
||||
"139803511372544" -> "139803507105792" [color = peachpuff4];
|
||||
"139803511372544" -> "139803511373600" [color = peachpuff4];
|
||||
"139803511372544" -> "139803507105968" [color = peachpuff4];
|
||||
"139803511372544" -> "139803749199472" [color = peachpuff4];
|
||||
"139803511373072" [label = "bootstrap-seeds@1.0.0", shape = ellipse, fontname = "dejavu sans"];
|
||||
"139803511373072" -> "139803507105968" [color = cyan3];
|
||||
"139803507105968" [label = "bootar@1b", shape = box, fontname = "dejavu sans"];
|
||||
"139803507105968" -> "139803749199472" [color = dimgrey];
|
||||
"139803749199472" [label = "guile-bootstrap@2.0", shape = ellipse, fontname = "dejavu sans"];
|
||||
"139803507105792" [label = "gash-boot@0.3.0", shape = box, fontname = "dejavu sans"];
|
||||
"139803507105792" -> "139803507105968" [color = darkviolet];
|
||||
"139803507105792" -> "139803749199472" [color = darkviolet];
|
||||
"139803511373600" [label = "gash-utils-boot@0.2.0", shape = box, fontname = "dejavu sans"];
|
||||
"139803511373600" -> "139803507105968" [color = red];
|
||||
"139803511373600" -> "139803507105792" [color = red];
|
||||
"139803511373600" -> "139803749199472" [color = red];
|
||||
"139803511371488" [label = "patch-mesboot@2.5.9", shape = box, fontname = "dejavu sans"];
|
||||
"139803511371488" -> "139803511371840" [color = darkseagreen];
|
||||
"139803511371488" -> "139803511372192" [color = darkseagreen];
|
||||
"139803511371488" -> "139803507105792" [color = darkseagreen];
|
||||
"139803511371488" -> "139803511373600" [color = darkseagreen];
|
||||
"139803511371488" -> "139803507105968" [color = darkseagreen];
|
||||
"139803511371488" -> "139803749199472" [color = darkseagreen];
|
||||
"139803511371840" [label = "make-mesboot0@3.80", shape = box, fontname = "dejavu sans"];
|
||||
"139803511371840" -> "139803511372192" [color = blue];
|
||||
"139803511371840" -> "139803507105792" [color = blue];
|
||||
"139803511371840" -> "139803511373600" [color = blue];
|
||||
"139803511371840" -> "139803507105968" [color = blue];
|
||||
"139803511371840" -> "139803749199472" [color = blue];
|
||||
"139803511371664" [label = "tcc-boot@0.9.27", shape = box, fontname = "dejavu sans"];
|
||||
"139803511371664" -> "139803511371840" [color = peachpuff4];
|
||||
"139803511371664" -> "139803511372192" [color = peachpuff4];
|
||||
"139803511371664" -> "139803507105792" [color = peachpuff4];
|
||||
"139803511371664" -> "139803511373600" [color = peachpuff4];
|
||||
"139803511371664" -> "139803507105968" [color = peachpuff4];
|
||||
"139803511371664" -> "139803749199472" [color = peachpuff4];
|
||||
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 24 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 54 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 35 KiB |
@@ -1,12 +1,12 @@
|
||||
digraph "Service Type Dependencies" {
|
||||
shepherd [shape = box, fontname = "dejavu sans"];
|
||||
pam [shape = box, fontname = "dejavu sans"];
|
||||
etc [shape = box, fontname = "dejavu sans"];
|
||||
profile [shape = box, fontname = "dejavu sans"];
|
||||
accounts [shape = box, fontname = "dejavu sans"];
|
||||
activation [shape = box, fontname = "dejavu sans"];
|
||||
boot [shape = box, fontname = "dejavu sans"];
|
||||
system [shape = house, fontname = "dejavu sans"];
|
||||
shepherd [shape = box, fontname = Helvetica];
|
||||
pam [shape = box, fontname = Helvetica];
|
||||
etc [shape = box, fontname = Helvetica];
|
||||
profile [shape = box, fontname = Helvetica];
|
||||
accounts [shape = box, fontname = Helvetica];
|
||||
activation [shape = box, fontname = Helvetica];
|
||||
boot [shape = box, fontname = Helvetica];
|
||||
system [shape = house, fontname = Helvetica];
|
||||
lshd -> shepherd;
|
||||
lshd -> pam;
|
||||
udev -> shepherd;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
digraph "Guix shepherd-service" {
|
||||
"user-file-systems" [label = "user-file-systems", shape = box, fontname = "dejavu sans"];
|
||||
"user-file-systems" [label = "user-file-systems", shape = box, fontname = Helvetica];
|
||||
"user-processes" -> "user-file-systems" [color = cyan3];
|
||||
"user-processes" [label = "user-processes", shape = box, fontname = "dejavu sans"];
|
||||
"user-processes" [label = "user-processes", shape = box, fontname = Helvetica];
|
||||
"nscd" -> "user-processes" [color = magenta];
|
||||
"guix-daemon" -> "user-processes" [color = blue];
|
||||
"urandom-seed" -> "user-processes" [color = dimgrey];
|
||||
@@ -13,45 +13,45 @@ digraph "Guix shepherd-service" {
|
||||
"term-tty2" -> "user-processes" [color = darkviolet];
|
||||
"term-tty1" -> "user-processes" [color = peachpuff4];
|
||||
"networking" -> "user-processes" [color = dimgrey];
|
||||
"nscd" [label = "nscd", shape = box, fontname = "dejavu sans"];
|
||||
"guix-daemon" [label = "guix-daemon", shape = box, fontname = "dejavu sans"];
|
||||
"urandom-seed" [label = "urandom-seed", shape = box, fontname = "dejavu sans"];
|
||||
"syslogd" [label = "syslogd", shape = box, fontname = "dejavu sans"];
|
||||
"nscd" [label = "nscd", shape = box, fontname = Helvetica];
|
||||
"guix-daemon" [label = "guix-daemon", shape = box, fontname = Helvetica];
|
||||
"urandom-seed" [label = "urandom-seed", shape = box, fontname = Helvetica];
|
||||
"syslogd" [label = "syslogd", shape = box, fontname = Helvetica];
|
||||
"ssh-daemon" -> "syslogd" [color = darkgoldenrod];
|
||||
"ssh-daemon" [label = "ssh-daemon", shape = box, fontname = "dejavu sans"];
|
||||
"term-tty6" [label = "term-tty6", shape = box, fontname = "dejavu sans"];
|
||||
"ssh-daemon" [label = "ssh-daemon", shape = box, fontname = Helvetica];
|
||||
"term-tty6" [label = "term-tty6", shape = box, fontname = Helvetica];
|
||||
"console-font-tty6" -> "term-tty6" [color = darkgoldenrod];
|
||||
"console-font-tty6" [label = "console-font-tty6", shape = box, fontname = "dejavu sans"];
|
||||
"term-tty5" [label = "term-tty5", shape = box, fontname = "dejavu sans"];
|
||||
"console-font-tty6" [label = "console-font-tty6", shape = box, fontname = Helvetica];
|
||||
"term-tty5" [label = "term-tty5", shape = box, fontname = Helvetica];
|
||||
"console-font-tty5" -> "term-tty5" [color = dimgrey];
|
||||
"console-font-tty5" [label = "console-font-tty5", shape = box, fontname = "dejavu sans"];
|
||||
"term-tty4" [label = "term-tty4", shape = box, fontname = "dejavu sans"];
|
||||
"console-font-tty5" [label = "console-font-tty5", shape = box, fontname = Helvetica];
|
||||
"term-tty4" [label = "term-tty4", shape = box, fontname = Helvetica];
|
||||
"console-font-tty4" -> "term-tty4" [color = darkviolet];
|
||||
"console-font-tty4" [label = "console-font-tty4", shape = box, fontname = "dejavu sans"];
|
||||
"term-tty3" [label = "term-tty3", shape = box, fontname = "dejavu sans"];
|
||||
"console-font-tty4" [label = "console-font-tty4", shape = box, fontname = Helvetica];
|
||||
"term-tty3" [label = "term-tty3", shape = box, fontname = Helvetica];
|
||||
"console-font-tty3" -> "term-tty3" [color = peachpuff4];
|
||||
"console-font-tty3" [label = "console-font-tty3", shape = box, fontname = "dejavu sans"];
|
||||
"term-tty2" [label = "term-tty2", shape = box, fontname = "dejavu sans"];
|
||||
"console-font-tty3" [label = "console-font-tty3", shape = box, fontname = Helvetica];
|
||||
"term-tty2" [label = "term-tty2", shape = box, fontname = Helvetica];
|
||||
"console-font-tty2" -> "term-tty2" [color = darkseagreen];
|
||||
"console-font-tty2" [label = "console-font-tty2", shape = box, fontname = "dejavu sans"];
|
||||
"term-tty1" [label = "term-tty1", shape = box, fontname = "dejavu sans"];
|
||||
"console-font-tty2" [label = "console-font-tty2", shape = box, fontname = Helvetica];
|
||||
"term-tty1" [label = "term-tty1", shape = box, fontname = Helvetica];
|
||||
"console-font-tty1" -> "term-tty1" [color = cyan3];
|
||||
"console-font-tty1" [label = "console-font-tty1", shape = box, fontname = "dejavu sans"];
|
||||
"networking" [label = "networking", shape = box, fontname = "dejavu sans"];
|
||||
"console-font-tty1" [label = "console-font-tty1", shape = box, fontname = Helvetica];
|
||||
"networking" [label = "networking", shape = box, fontname = Helvetica];
|
||||
"ssh-daemon" -> "networking" [color = darkgoldenrod];
|
||||
"root-file-system" [label = "root-file-system", shape = box, fontname = "dejavu sans"];
|
||||
"root-file-system" [label = "root-file-system", shape = box, fontname = Helvetica];
|
||||
"file-system-/dev/pts" -> "root-file-system" [color = peachpuff4];
|
||||
"file-system-/dev/shm" -> "root-file-system" [color = darkgoldenrod];
|
||||
"file-system-/gnu/store" -> "root-file-system" [color = blue];
|
||||
"user-processes" -> "root-file-system" [color = cyan3];
|
||||
"udev" -> "root-file-system" [color = darkseagreen];
|
||||
"file-system-/dev/pts" [label = "file-system-/dev/pts", shape = box, fontname = "dejavu sans"];
|
||||
"file-system-/dev/pts" [label = "file-system-/dev/pts", shape = box, fontname = Helvetica];
|
||||
"user-processes" -> "file-system-/dev/pts" [color = cyan3];
|
||||
"file-system-/dev/shm" [label = "file-system-/dev/shm", shape = box, fontname = "dejavu sans"];
|
||||
"file-system-/dev/shm" [label = "file-system-/dev/shm", shape = box, fontname = Helvetica];
|
||||
"user-processes" -> "file-system-/dev/shm" [color = cyan3];
|
||||
"file-system-/gnu/store" [label = "file-system-/gnu/store", shape = box, fontname = "dejavu sans"];
|
||||
"file-system-/gnu/store" [label = "file-system-/gnu/store", shape = box, fontname = Helvetica];
|
||||
"user-processes" -> "file-system-/gnu/store" [color = cyan3];
|
||||
"udev" [label = "udev", shape = box, fontname = "dejavu sans"];
|
||||
"udev" [label = "udev", shape = box, fontname = Helvetica];
|
||||
"term-tty6" -> "udev" [color = magenta];
|
||||
"term-tty5" -> "udev" [color = red];
|
||||
"term-tty4" -> "udev" [color = darkgoldenrod];
|
||||
@@ -59,13 +59,13 @@ digraph "Guix shepherd-service" {
|
||||
"term-tty2" -> "udev" [color = darkviolet];
|
||||
"term-tty1" -> "udev" [color = peachpuff4];
|
||||
"networking" -> "udev" [color = dimgrey];
|
||||
"host-name" [label = "host-name", shape = box, fontname = "dejavu sans"];
|
||||
"host-name" [label = "host-name", shape = box, fontname = Helvetica];
|
||||
"term-tty6" -> "host-name" [color = magenta];
|
||||
"term-tty5" -> "host-name" [color = red];
|
||||
"term-tty4" -> "host-name" [color = darkgoldenrod];
|
||||
"term-tty3" -> "host-name" [color = dimgrey];
|
||||
"term-tty2" -> "host-name" [color = darkviolet];
|
||||
"term-tty1" -> "host-name" [color = peachpuff4];
|
||||
"loopback" [label = "loopback", shape = box, fontname = "dejavu sans"];
|
||||
"loopback" [label = "loopback", shape = box, fontname = Helvetica];
|
||||
|
||||
}
|
||||
|
||||
+57
-174
@@ -1,13 +1,10 @@
|
||||
# GNU Guix --- Functional package management for GNU
|
||||
# Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
|
||||
# Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
|
||||
# Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
|
||||
# Copyright © 2013 Andreas Enge <andreas@enge.fr>
|
||||
# Copyright © 2016 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
|
||||
# Copyright © 2016, 2018 Mathieu Lirzin <mthl@gnu.org>
|
||||
# Copyright © 2018, 2021 Julien Lepiller <julien@lepiller.eu>
|
||||
# Copyright © 2019 Timothy Sample <samplet@ngyro.com>
|
||||
# Copyright © 2024, 2026 Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||
# Copyright © 2024 gemmaro <gemmaro.dev@gmail.com>
|
||||
# Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
|
||||
#
|
||||
# This file is part of GNU Guix.
|
||||
#
|
||||
@@ -24,39 +21,11 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# If adding a language, update the following variables, and info_TEXINFOS.
|
||||
MANUAL_LANGUAGES = de es fr it pt_BR ru zh_CN
|
||||
COOKBOOK_LANGUAGES = de es fr it ko pt_BR ru sk sv ta zh_CN
|
||||
|
||||
# Arg1: A list of languages codes.
|
||||
# Arg2: The file name stem.
|
||||
lang_to_texinfo = $(foreach lang,$(1),$(srcdir)/%D%/$(2).$(lang).texi)
|
||||
|
||||
# Automake does not understand GNU Make non-standard extensions,
|
||||
# unfortunately, so we cannot use the above patsubst-based function here.
|
||||
info_TEXINFOS = %D%/guix.texi \
|
||||
%D%/guix.de.texi \
|
||||
%D%/guix.es.texi \
|
||||
%D%/guix.fr.texi \
|
||||
%D%/guix.it.texi \
|
||||
%D%/guix.pt_BR.texi \
|
||||
%D%/guix.ru.texi \
|
||||
%D%/guix.zh_CN.texi \
|
||||
%D%/guix-cookbook.texi \
|
||||
%D%/guix-cookbook.de.texi \
|
||||
%D%/guix-cookbook.es.texi \
|
||||
%D%/guix-cookbook.fr.texi \
|
||||
%D%/guix-cookbook.it.texi \
|
||||
%D%/guix-cookbook.ko.texi \
|
||||
%D%/guix-cookbook.pt_BR.texi \
|
||||
%D%/guix-cookbook.ru.texi \
|
||||
%D%/guix-cookbook.sk.texi \
|
||||
%D%/guix-cookbook.sv.texi \
|
||||
%D%/guix-cookbook.ta.texi \
|
||||
%D%/guix-cookbook.zh_CN.texi
|
||||
info_TEXINFOS = %D%/guix.texi \
|
||||
%D%/guix.fr.texi \
|
||||
%D%/guix.de.texi
|
||||
|
||||
%C%_guix_TEXINFOS = \
|
||||
$(OS_CONFIG_EXAMPLES_TEXI) \
|
||||
%D%/contributing.texi \
|
||||
%D%/fdl-1.3.texi
|
||||
|
||||
@@ -65,7 +34,6 @@ DOT_FILES = \
|
||||
%D%/images/bootstrap-packages.dot \
|
||||
%D%/images/coreutils-graph.dot \
|
||||
%D%/images/coreutils-bag-graph.dot \
|
||||
%D%/images/gcc-core-mesboot0-graph.dot \
|
||||
%D%/images/service-graph.dot \
|
||||
%D%/images/shepherd-graph.dot
|
||||
|
||||
@@ -79,87 +47,71 @@ EXTRA_DIST += \
|
||||
$(DOT_VECTOR_GRAPHICS) \
|
||||
%D%/images/coreutils-size-map.eps \
|
||||
%D%/environment-gdb.scm \
|
||||
%D%/package-hello.scm \
|
||||
%D%/package-hello.json
|
||||
%D%/package-hello.scm
|
||||
|
||||
OS_CONFIG_EXAMPLES_TEXI = \
|
||||
%D%/os-config-bare-bones.texi \
|
||||
%D%/os-config-desktop.texi \
|
||||
%D%/os-config-lightweight-desktop.texi \
|
||||
%D%/he-config-bare-bones.scm
|
||||
%D%/os-config-lightweight-desktop.texi
|
||||
|
||||
TRANSLATED_INFO = \
|
||||
$(call lang_to_texinfo,$(MANUAL_LANGUAGES),guix) \
|
||||
$(call lang_to_texinfo,$(MANUAL_LANGUAGES),contributing) \
|
||||
$(call lang_to_texinfo,$(COOKBOOK_LANGUAGES),guix-cookbook)
|
||||
TRANSLATED_INFO = \
|
||||
%D%/guix.de.texi \
|
||||
%D%/guix.fr.texi \
|
||||
%D%/contributing.de.texi \
|
||||
%D%/contributing.fr.texi
|
||||
|
||||
# Bundle this file so that makeinfo finds it in out-of-source-tree builds.
|
||||
BUILT_SOURCES += $(OS_CONFIG_EXAMPLES_TEXI) $(TRANSLATED_INFO)
|
||||
EXTRA_DIST += $(OS_CONFIG_EXAMPLES_TEXI) $(TRANSLATED_INFO)
|
||||
MAINTAINERCLEANFILES = $(OS_CONFIG_EXAMPLES_TEXI) $(TRANSLATED_INFO)
|
||||
|
||||
PO4A_PARAMS := -M UTF-8 -L UTF-8 #master and localized encoding
|
||||
PO4A_PARAMS += -k 0 # produce an output even if the translation is not complete
|
||||
PO4A_PARAMS += -f texinfo # texinfo format
|
||||
|
||||
# When a change to guix.texi occurs, it is not translated immediately.
|
||||
# Because @pxref and @xref commands are references to sections by name, they
|
||||
# Because @pxref and @xref commands are reference to a section by name, they
|
||||
# should be translated. If a modification adds a reference to a section, this
|
||||
# reference is not translated, which means it references a section that does not
|
||||
# exist.
|
||||
# This command loops through the translated files looking for references. For
|
||||
# each of these references, it tries to find the translation and replaces the
|
||||
# reference name, even in untranslated strings.
|
||||
# The last sed is a multiline sed because some references span multiple lines.
|
||||
define xref_command
|
||||
$(top_builddir)/pre-inst-env $(GUILE) --no-auto-compile \
|
||||
"$(top_srcdir)/build-aux/convert-xref.scm" \
|
||||
$@.tmp $<
|
||||
cat "$@.tmp" | egrep '@p?x?ref' -A1 | sed 'N;s|--\n||g;P;D' | sed 's|^| |g' | \
|
||||
tr -d '\012' | sed 's|\(@p\?x\?ref\)|\n\1|g' | egrep '@p?x?ref' | \
|
||||
sed 's|^.*@p\?x\?ref{\([^,}]*\).*$$|\1|g' | sort | uniq | while read e; do \
|
||||
line=$$(grep -n "^msgid \"$$e\"" "$<" | cut -f1 --delimiter=":") ;\
|
||||
((line++)) ;\
|
||||
if [ "$$line" != "1" ]; then \
|
||||
translation=$$(head -n $$line "$<" | tail -1 | grep msgstr | sed 's|msgstr "\(.*\)"|\1|') ;\
|
||||
if [ "$$translation" != "" ]; then \
|
||||
sed "N;s@\(p\?x\?ref\){$$(echo $$e | sed 's| |[\\n ]|g')\(,\|}\)@\1{$$translation\2@g;P;D" -i "$@.tmp" ;\
|
||||
fi ;\
|
||||
fi ;\
|
||||
done
|
||||
endef
|
||||
|
||||
# If /dev/null is used for this POT file path, a warning will be issued
|
||||
# because the path extension is not 'pot'.
|
||||
dummy_pot = $(shell mktemp --suffix=.pot)
|
||||
|
||||
$(srcdir)/%D%/guix.%.texi: po/doc/guix-manual.%.po $(srcdir)/%D%/contributing.%.texi guix/build/po.go
|
||||
-$(AM_V_PO4A)$(PO4A) --no-update \
|
||||
--variable localized="$@.tmp" \
|
||||
--variable master="$(srcdir)/%D%/guix.texi" \
|
||||
--variable po="$<" \
|
||||
--variable pot=$(dummy_pot) \
|
||||
$(srcdir)/po/doc/po4a.cfg
|
||||
$(srcdir)/%D%/guix.%.texi: po/doc/guix-manual.%.po $(srcdir)/%D%/contributing.%.texi
|
||||
-$(AM_V_PO4A)$(PO4A_TRANSLATE) $(PO4A_PARAMS) -m "%D%/guix.texi" -p "$<" -l "$@.tmp"
|
||||
-sed -i "s|guix\.info|$$(basename "$@" | sed 's|texi$$|info|')|" "$@.tmp"
|
||||
-$(AM_V_POXREF)LC_ALL=en_US.UTF-8 $(xref_command)
|
||||
-$(AM_V_POXREF)$(xref_command)
|
||||
-mv "$@.tmp" "$@"
|
||||
|
||||
$(srcdir)/%D%/guix-cookbook.%.texi: po/doc/guix-cookbook.%.po guix/build/po.go
|
||||
-$(AM_V_PO4A)$(PO4A) --no-update \
|
||||
--variable localized="$@.tmp" \
|
||||
--variable master="$(srcdir)/%D%/guix-cookbook.texi" \
|
||||
--variable po="$<" \
|
||||
--variable pot=$(dummy_pot) \
|
||||
$(srcdir)/po/doc/po4a.cfg
|
||||
-sed -i "s|guix-cookbook\.info|$$(basename "$@" | sed 's|texi$$|info|')|" "$@.tmp"
|
||||
-$(AM_V_POXREF)LC_ALL=en_US.UTF-8 $(xref_command)
|
||||
-mv "$@.tmp" "$@"
|
||||
|
||||
$(srcdir)/%D%/contributing.%.texi: po/doc/guix-manual.%.po guix/build/po.go
|
||||
-$(AM_V_PO4A)$(PO4A) --no-update \
|
||||
--variable localized="$@.tmp" \
|
||||
--variable master="$(srcdir)/%D%/contributing.texi" \
|
||||
--variable po="$<" \
|
||||
--variable pot=$(dummy_pot) \
|
||||
$(srcdir)/po/doc/po4a.cfg
|
||||
-$(AM_V_POXREF)LC_ALL=en_US.UTF-8 $(xref_command)
|
||||
$(srcdir)/%D%/contributing.%.texi: po/doc/guix-manual.%.po
|
||||
-$(AM_V_PO4A)$(PO4A_TRANSLATE) $(PO4A_PARAMS) -m "%D%/contributing.texi" -p "$<" -l "$@.tmp"
|
||||
-$(AM_V_POXREF)$(xref_command)
|
||||
-mv "$@.tmp" "$@"
|
||||
|
||||
%D%/os-config-%.texi: gnu/system/examples/%.tmpl
|
||||
$(AM_V_GEN)$(MKDIR_P) "`dirname $@`"; \
|
||||
sed -e s,@,@@,g "$<" > "$@"
|
||||
cp "$<" "$@"
|
||||
|
||||
infoimagedir = $(infodir)/images
|
||||
dist_infoimage_DATA = \
|
||||
$(DOT_FILES:%.dot=%.png) \
|
||||
%D%/images/coreutils-size-map.png \
|
||||
%D%/images/installer-network.png \
|
||||
%D%/images/installer-partitions.png \
|
||||
%D%/images/installer-resume.png
|
||||
|
||||
# Ask for warnings about cross-referenced manuals that are not listed in
|
||||
# htmlxref.cnf.
|
||||
AM_MAKEINFOHTMLFLAGS = --set-customization-variable CHECK_HTMLXREF=true
|
||||
%D%/images/coreutils-size-map.png
|
||||
|
||||
# Try hard to obtain an image size and aspect that's reasonable for inclusion
|
||||
# in an Info or PDF document.
|
||||
@@ -168,25 +120,20 @@ DOT_OPTIONS = \
|
||||
-Nfontsize=9 -Nheight=.1 -Nwidth=.1
|
||||
|
||||
.dot.png:
|
||||
$(AM_V_DOT)$(DOT) -Tpng $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
|
||||
$(AM_V_at)mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
|
||||
$(AM_V_DOT)$(DOT) -Tpng $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"; \
|
||||
mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
|
||||
|
||||
.dot.pdf:
|
||||
$(AM_V_DOT)set -e; export TZ=UTC0; \
|
||||
$(DOT) -Tpdf $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
|
||||
$(AM_V_at)sed -ri \
|
||||
-e 's,(/CreationDate \(D:).*\),\119700101000000),' \
|
||||
"$(srcdir)/$@.tmp"
|
||||
$(AM_V_at)mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
|
||||
$(AM_V_DOT)$(DOT) -Tpdf $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"; \
|
||||
mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
|
||||
|
||||
.dot.eps:
|
||||
$(AM_V_DOT)$(DOT) -Teps $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"
|
||||
$(AM_v_at)! grep -q %%CreationDate "$(srcdir)/$@.tmp"
|
||||
$(AM_V_at)mv "$(srcdir)/$@.tmp" "$@"
|
||||
$(AM_V_DOT)$(DOT) -Teps $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"; \
|
||||
mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
|
||||
|
||||
.png.eps:
|
||||
$(AM_V_GEN)convert "$<" "$@-tmp.eps"
|
||||
$(AM_V_at)mv "$@-tmp.eps" "$@"
|
||||
$(AM_V_GEN)convert "$<" "$@-tmp.eps"; \
|
||||
mv "$@-tmp.eps" "$@"
|
||||
|
||||
# We cannot add new dependencies to `%D%/guix.pdf' & co. (info "(automake)
|
||||
# Extending"). Using the `-local' rules is imperfect, because they may be
|
||||
@@ -211,55 +158,29 @@ sub_commands_mans = \
|
||||
$(srcdir)/%D%/guix-archive.1 \
|
||||
$(srcdir)/%D%/guix-build.1 \
|
||||
$(srcdir)/%D%/guix-challenge.1 \
|
||||
$(srcdir)/%D%/guix-container.1 \
|
||||
$(srcdir)/%D%/guix-deploy.1 \
|
||||
$(srcdir)/%D%/guix-describe.1 \
|
||||
$(srcdir)/%D%/guix-download.1 \
|
||||
$(srcdir)/%D%/guix-edit.1 \
|
||||
$(srcdir)/%D%/guix-environment.1 \
|
||||
$(srcdir)/%D%/guix-gc.1 \
|
||||
$(srcdir)/%D%/guix-git.1 \
|
||||
$(srcdir)/%D%/guix-graph.1 \
|
||||
$(srcdir)/%D%/guix-hash.1 \
|
||||
$(srcdir)/%D%/guix-home.1 \
|
||||
$(srcdir)/%D%/guix-import.1 \
|
||||
$(srcdir)/%D%/guix-lint.1 \
|
||||
$(srcdir)/%D%/guix-offload.1 \
|
||||
$(srcdir)/%D%/guix-pack.1 \
|
||||
$(srcdir)/%D%/guix-package.1 \
|
||||
$(srcdir)/%D%/guix-processes.1 \
|
||||
$(srcdir)/%D%/guix-publish.1 \
|
||||
$(srcdir)/%D%/guix-pull.1 \
|
||||
$(srcdir)/%D%/guix-refresh.1 \
|
||||
$(srcdir)/%D%/guix-repl.1 \
|
||||
$(srcdir)/%D%/guix-shell.1 \
|
||||
$(srcdir)/%D%/guix-size.1 \
|
||||
$(srcdir)/%D%/guix-style.1 \
|
||||
$(srcdir)/%D%/guix-system.1 \
|
||||
$(srcdir)/%D%/guix-time-machine.1 \
|
||||
$(srcdir)/%D%/guix-weather.1
|
||||
|
||||
if HAVE_GUILE_SSH
|
||||
sub_commands_mans += $(srcdir)/%D%/guix-copy.1
|
||||
endif HAVE_GUILE_SSH
|
||||
|
||||
# Assume that cross-compiled commands cannot be executed.
|
||||
if !CROSS_COMPILING
|
||||
$(srcdir)/%D%/guix-system.1
|
||||
|
||||
dist_man1_MANS = \
|
||||
$(srcdir)/%D%/guix.1 \
|
||||
$(sub_commands_mans)
|
||||
|
||||
endif
|
||||
|
||||
gen_man = \
|
||||
LANGUAGE= $(top_builddir)/pre-inst-env $(HELP2MAN) \
|
||||
$(HELP2MANFLAGS)
|
||||
|
||||
HELP2MANFLAGS = --source=GNU --info-page=$(PACKAGE_TARNAME)
|
||||
# help2man reproducibility
|
||||
SOURCE_DATE_EPOCH = $(shell git show HEAD --format=%ct --no-patch 2>/dev/null || echo 1)
|
||||
export SOURCE_DATE_EPOCH
|
||||
|
||||
$(srcdir)/%D%/guix.1: scripts/guix.in $(sub_commands_mans)
|
||||
-$(AM_V_HELP2MAN)$(gen_man) --output="$@" `basename "$@" .1`
|
||||
@@ -267,57 +188,19 @@ $(srcdir)/%D%/guix.1: scripts/guix.in $(sub_commands_mans)
|
||||
# The 'case' ensures the man pages are only generated if the corresponding
|
||||
# source script (the first prerequisite) has been changed. The $(GOBJECTS)
|
||||
# prerequisite is solely meant to force these docs to be made only after all
|
||||
# Guile modules have been compiled. We also need the guix script to exist.
|
||||
$(srcdir)/%D%/guix-%.1: guix/scripts/%.scm $(GOBJECTS) scripts/guix
|
||||
-@case '$?' in \
|
||||
*$<*) $(AM_V_HELP2MAN:@%=%)$(gen_man) --output="$@" "guix $*";; \
|
||||
*) : ;; \
|
||||
# Guile modules have been compiled.
|
||||
$(srcdir)/%D%/guix-%.1: guix/scripts/%.scm $(GOBJECTS)
|
||||
-@case '$?' in \
|
||||
*$<*) $(AM_V_P) && set -x || echo " HELP2MAN $@"; \
|
||||
$(gen_man) --output="$@" "guix $*";; \
|
||||
*) : ;; \
|
||||
esac
|
||||
|
||||
if BUILD_DAEMON
|
||||
if !CROSS_COMPILING
|
||||
|
||||
dist_man1_MANS += $(srcdir)/%D%/guix-daemon.1
|
||||
|
||||
$(srcdir)/%D%/guix-daemon.1: guix-daemon$(EXEEXT)
|
||||
$(srcdir)/%D%/guix-daemon.1: nix/nix-daemon/guix-daemon.cc
|
||||
-$(AM_V_HELP2MAN)$(gen_man) --output="$@" `basename "$@" .1`
|
||||
|
||||
endif
|
||||
endif
|
||||
|
||||
# Reproducible tarball
|
||||
|
||||
DIST_CONFIGURE_FLAGS = \
|
||||
--localstatedir=/var \
|
||||
--sysconfdir=/etc
|
||||
|
||||
# Delete all Autotools-generated files and rerun configure to ensure
|
||||
# a clean cache and distributing reproducible versions.
|
||||
auto-clean: maintainer-clean-vti doc-clean
|
||||
rm -f ABOUT-NLS INSTALL
|
||||
rm -f aclocal.m4 configure libtool Makefile.in
|
||||
if test -e .git; then \
|
||||
git clean -fdx -- '.am*' build-aux m4 po; \
|
||||
else \
|
||||
rm -rf .am*; \
|
||||
$(MAKE) -C po/guix maintainer-clean; \
|
||||
$(MAKE) -C po/packages maintainer-clean; \
|
||||
fi
|
||||
rm -f guile
|
||||
rm -f guix-daemon nix/nix-daemon/guix_daemon-guix-daemon.o
|
||||
# Automake fails if guix-cookbook-LANG.texi stubs are missing; running
|
||||
# autoreconf -vif is not enough.
|
||||
./bootstrap
|
||||
# The dependency chain for the guix-cookbook-LANG.texi was cut on purpose;
|
||||
# they must be deleted to ensure a rebuild.
|
||||
rm -f $(filter-out %D%/guix.texi %D%/guix-cookbook.texi, $(info_TEXINFOS))
|
||||
./configure $(DIST_CONFIGURE_FLAGS)
|
||||
|
||||
# Delete all generated doc files to ensure a clean cache and distributing
|
||||
# reproducible versions.
|
||||
doc-clean:
|
||||
rm -f $(srcdir)/doc/*.1
|
||||
rm -f $(srcdir)/doc/stamp*
|
||||
rm -f $(DOT_FILES:%.dot=%.png)
|
||||
rm -f $(DOT_VECTOR_GRAPHICS)
|
||||
rm -f doc/images/coreutils-size-map.eps
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "myhello",
|
||||
"version": "2.10",
|
||||
"source": "mirror://gnu/hello/hello-2.10.tar.gz",
|
||||
"build-system": "gnu",
|
||||
"arguments": {
|
||||
"tests?": false
|
||||
},
|
||||
"home-page": "https://www.gnu.org/software/hello/",
|
||||
"synopsis": "Hello, GNU world: An example GNU package",
|
||||
"description": "GNU Hello prints a greeting.",
|
||||
"license": "GPL-3.0+",
|
||||
"native-inputs": ["gettext"]
|
||||
},
|
||||
{
|
||||
"name": "greeter",
|
||||
"version": "1.0",
|
||||
"source": "mirror://gnu/hello/hello-2.10.tar.gz",
|
||||
"build-system": "gnu",
|
||||
"arguments": {
|
||||
"test-target": "foo",
|
||||
"parallel-build?": false
|
||||
},
|
||||
"home-page": "https://example.com/",
|
||||
"synopsis": "Greeter using GNU Hello",
|
||||
"description": "This is a wrapper around GNU Hello.",
|
||||
"license": "GPL-3.0+",
|
||||
"inputs": ["myhello", "hello"]
|
||||
}
|
||||
]
|
||||
@@ -1,12 +0,0 @@
|
||||
abi <abi/4.0>,
|
||||
|
||||
include <tunables/global>
|
||||
include <tunables/guix>
|
||||
|
||||
# There’s no point in confining the guix executable, since it can run
|
||||
# any user code and so everything is expected. We just need to
|
||||
# explicitly enable userns for systems with the
|
||||
# kernel.apparmor_restrict_unprivileged_userns sysctl.
|
||||
profile guix @{guix_storedir}/{*-guix-command,*-guix-*/bin/guix} flags=(unconfined) {
|
||||
userns,
|
||||
}
|
||||
@@ -1,88 +0,0 @@
|
||||
abi <abi/4.0>,
|
||||
|
||||
include <tunables/global>
|
||||
include <tunables/guix>
|
||||
|
||||
profile guix-daemon @{guix_storedir}/*-{guix-daemon,guix}-*/bin/guix-daemon flags=(enforce,attach_disconnected.path=/disconnected) {
|
||||
include <abstractions/base>
|
||||
|
||||
userns,
|
||||
signal,
|
||||
capability sys_admin,
|
||||
capability net_admin,
|
||||
capability sys_chroot,
|
||||
capability setgid,
|
||||
capability chown,
|
||||
network dgram,
|
||||
umount,
|
||||
mount,
|
||||
pivot_root,
|
||||
# Paths inside build chroot
|
||||
/real-root/ w,
|
||||
/ w,
|
||||
|
||||
@{guix_localstatedir}/guix/** rwk,
|
||||
/var/log/guix/** w,
|
||||
owner @{PROC}/@{pid}/{fd/,environ} r,
|
||||
owner @{PROC}/@{pid}/oom_score_adj w,
|
||||
owner @{PROC}/@{pid}/uid_map rw,
|
||||
owner @{PROC}/@{pid}/gid_map rw,
|
||||
owner @{PROC}/@{pid}/setgroups w,
|
||||
@{guix_storedir}/ r,
|
||||
@{guix_storedir}/** rwlmk,
|
||||
@{guix_storedir}/*/bin/guile cx -> guix-builder,
|
||||
@{guix_storedir}/*-guix-command cx -> guix-helper,
|
||||
@{guix_storedir}/*-guix-*/bin/guix cx -> guix-helper,
|
||||
@{etc_rw}/nsswitch.conf r,
|
||||
@{etc_rw}/passwd r,
|
||||
@{etc_rw}/group r,
|
||||
owner /tmp/** rwl,
|
||||
owner /var/tmp/** rwl,
|
||||
|
||||
/usr/bin/newgidmap Ux,
|
||||
|
||||
# Site-specific additions and overrides. See local/README for details.
|
||||
include if exists <local/guix-daemon>
|
||||
|
||||
profile guix-builder flags=(enforce,attach_disconnected.path=/disconnected) {
|
||||
include <abstractions/base>
|
||||
|
||||
signal (receive),
|
||||
|
||||
@{guix_storedir}/** rwlmkux,
|
||||
|
||||
owner /tmp/** rwux,
|
||||
|
||||
@{PROC}/@{pid}/fd/ r,
|
||||
|
||||
/disconnected/** rw,
|
||||
}
|
||||
|
||||
# This is for any time guix is called by the daemon as a helper:
|
||||
# - guix download
|
||||
# - guix discover
|
||||
# - guix gc --list-busy
|
||||
# - probably more?
|
||||
profile guix-helper flags=(enforce,attach_disconnected.path=/disconnected) {
|
||||
include <abstractions/base>
|
||||
include <abstractions/nameservice>
|
||||
|
||||
signal (receive),
|
||||
ptrace (read) peer=guix-daemon,
|
||||
|
||||
/disconnected/run/dbus/system_bus_socket rw,
|
||||
dbus (send, receive),
|
||||
@{guix_localstatedir}/guix/discover/ rw,
|
||||
@{guix_localstatedir}/guix/discover/* rw,
|
||||
|
||||
@{guix_localstatedir}/guix/substitute/ rw,
|
||||
@{guix_localstatedir}/guix/substitute/** rwk,
|
||||
|
||||
@{guix_sysconfdir}/guix/** r,
|
||||
|
||||
@{guix_storedir}/** rwlmix,
|
||||
|
||||
@{PROC}/ r,
|
||||
owner @{PROC}/@{pid}/{fd/,environ} r,
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
@{guix_storedir} = @storedir@
|
||||
@{guix_sysconfdir} = @guix_sysconfdir@
|
||||
@{guix_localstatedir} = @guix_localstatedir@
|
||||
|
||||
include if exists <tunables/guix.d>
|
||||
@@ -1,484 +0,0 @@
|
||||
#!@GUILE@ \
|
||||
--no-auto-compile -s
|
||||
!#
|
||||
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2020, 2021, 2022, 2023 Ricardo Wurmus <rekado@elephly.net>
|
||||
;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
|
||||
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
|
||||
;;; Copyright © 2022 Maxim Cournoyer <maxim@guixotic.coop>
|
||||
;;;
|
||||
;;; 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/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This script stages and commits changes to package definitions.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(use-modules ((sxml xpath) #:prefix xpath:)
|
||||
(srfi srfi-1)
|
||||
(srfi srfi-2)
|
||||
(srfi srfi-9)
|
||||
(srfi srfi-11)
|
||||
(srfi srfi-26)
|
||||
(ice-9 format)
|
||||
(ice-9 popen)
|
||||
(ice-9 match)
|
||||
(ice-9 rdelim)
|
||||
(ice-9 regex)
|
||||
(ice-9 textual-ports)
|
||||
(guix gexp))
|
||||
|
||||
(define* (break-string str #:optional (max-line-length 70))
|
||||
"Break the string STR into lines that are no longer than MAX-LINE-LENGTH.
|
||||
Return a single string."
|
||||
(define (restore-line words)
|
||||
(string-join (reverse words) " "))
|
||||
(if (<= (string-length str) max-line-length)
|
||||
str
|
||||
(let ((words+lengths (map (lambda (word)
|
||||
(cons word (string-length word)))
|
||||
(string-tokenize str))))
|
||||
(match (fold (match-lambda*
|
||||
(((word . length)
|
||||
(count current lines))
|
||||
(let ((new-count (+ count length 1)))
|
||||
(if (< new-count max-line-length)
|
||||
(list new-count
|
||||
(cons word current)
|
||||
lines)
|
||||
(list length
|
||||
(list word)
|
||||
(cons (restore-line current) lines))))))
|
||||
'(0 () ())
|
||||
words+lengths)
|
||||
((_ last-words lines)
|
||||
(string-join (reverse (cons (restore-line last-words) lines))
|
||||
"\n"))))))
|
||||
|
||||
(define* (break-string-with-newlines str #:optional (max-line-length 70))
|
||||
"Break the lines of string STR into lines that are no longer than
|
||||
MAX-LINE-LENGTH. Return a single string."
|
||||
(string-join (map (cut break-string <> max-line-length)
|
||||
(string-split str #\newline))
|
||||
"\n"))
|
||||
|
||||
(define (read-excursion port)
|
||||
"Read an expression from PORT and reset the port position before returning
|
||||
the expression."
|
||||
(let ((start (ftell port))
|
||||
(result (read port)))
|
||||
(seek port start SEEK_SET)
|
||||
result))
|
||||
|
||||
(define (lines+offsets-with-opening-parens port)
|
||||
"Record all line numbers (and their offsets) where an opening parenthesis is
|
||||
found in column 0. The resulting list is in reverse order."
|
||||
(let loop ((acc '())
|
||||
(number 0))
|
||||
(let ((line (read-line port)))
|
||||
(cond
|
||||
((eof-object? line) acc)
|
||||
((string-prefix? "(" line)
|
||||
(loop (cons (cons number ;line number
|
||||
(- (ftell port)
|
||||
(string-length line) 1)) ;offset
|
||||
acc)
|
||||
(1+ number)))
|
||||
(else (loop acc (1+ number)))))))
|
||||
|
||||
(define (surrounding-sexp port target-line-no)
|
||||
"Return the top-level S-expression surrounding the change at line number
|
||||
TARGET-LINE-NO in PORT."
|
||||
(let* ((line-numbers+offsets
|
||||
(lines+offsets-with-opening-parens port))
|
||||
(closest-offset
|
||||
(or (and=> (list-index (match-lambda
|
||||
((line-number . offset)
|
||||
(< line-number target-line-no)))
|
||||
line-numbers+offsets)
|
||||
(lambda (index)
|
||||
(match (list-ref line-numbers+offsets index)
|
||||
((line-number . offset) offset))))
|
||||
(error "Could not find surrounding S-expression for line"
|
||||
target-line-no))))
|
||||
(seek port closest-offset SEEK_SET)
|
||||
(read port)))
|
||||
|
||||
;;; Whether the hunk contains a newly added package (definition), a removed
|
||||
;;; package (removal) or something else (#false).
|
||||
(define hunk-types '(addition removal #false))
|
||||
|
||||
(define-record-type <hunk>
|
||||
(make-hunk file-name
|
||||
old-line-number
|
||||
new-line-number
|
||||
diff-lines
|
||||
type)
|
||||
hunk?
|
||||
(file-name hunk-file-name)
|
||||
;; Line number before the change
|
||||
(old-line-number hunk-old-line-number)
|
||||
;; Line number after the change
|
||||
(new-line-number hunk-new-line-number)
|
||||
;; The full diff to be used with "git apply --cached"
|
||||
(diff-lines hunk-diff-lines)
|
||||
;; Does this hunk add or remove a package?
|
||||
(type hunk-type)) ;one of 'hunk-types'
|
||||
|
||||
(define* (hunk->patch hunk #:optional (port (current-output-port)))
|
||||
(let ((file-name (hunk-file-name hunk)))
|
||||
(format port
|
||||
"diff --git a/~a b/~a~%--- a/~a~%+++ b/~a~%~a"
|
||||
file-name file-name file-name file-name
|
||||
(string-join (hunk-diff-lines hunk) ""))))
|
||||
|
||||
(define (diff-info)
|
||||
"Read the diff and return a list of <hunk> values."
|
||||
(let ((port (open-pipe* OPEN_READ
|
||||
"git" "diff-files"
|
||||
"--no-prefix"
|
||||
;; Only include one context line to avoid lumping in
|
||||
;; new definitions with changes to existing
|
||||
;; definitions.
|
||||
"--unified=1"
|
||||
"--" "gnu")))
|
||||
(define (extract-line-number line-tag)
|
||||
(abs (string->number
|
||||
(car (string-split line-tag #\,)))))
|
||||
(define (read-hunk)
|
||||
(let loop ((lines '())
|
||||
(type #false))
|
||||
(let ((line (read-line port 'concat)))
|
||||
(cond
|
||||
((eof-object? line)
|
||||
(values (reverse lines) type))
|
||||
((or (string-prefix? "@@ " line)
|
||||
(string-prefix? "diff --git" line))
|
||||
(unget-string port line)
|
||||
(values (reverse lines) type))
|
||||
(else
|
||||
(loop (cons line lines)
|
||||
(or type
|
||||
(cond
|
||||
((string-prefix? "+(define" line)
|
||||
'addition)
|
||||
((string-prefix? "-(define" line)
|
||||
'removal)
|
||||
(else #false)))))))))
|
||||
(define info
|
||||
(let loop ((acc '())
|
||||
(file-name #f))
|
||||
(let ((line (read-line port)))
|
||||
(cond
|
||||
((eof-object? line) acc)
|
||||
((string-prefix? "--- " line)
|
||||
(match (string-split line #\space)
|
||||
((_ file-name)
|
||||
(loop acc file-name))))
|
||||
((string-prefix? "@@ " line)
|
||||
(match (string-split line #\space)
|
||||
((_ old-start new-start . _)
|
||||
(let-values
|
||||
(((diff-lines type) (read-hunk)))
|
||||
(loop (cons (make-hunk file-name
|
||||
(extract-line-number old-start)
|
||||
(extract-line-number new-start)
|
||||
(cons (string-append line "\n")
|
||||
diff-lines)
|
||||
type) acc)
|
||||
file-name)))))
|
||||
(else (loop acc file-name))))))
|
||||
(close-pipe port)
|
||||
info))
|
||||
|
||||
(define (lines-to-first-change hunk)
|
||||
"Return the number of diff lines until the first change."
|
||||
(1- (count (lambda (line)
|
||||
((negate char-set-contains?)
|
||||
(char-set #\+ #\-)
|
||||
(string-ref line 0)))
|
||||
(hunk-diff-lines hunk))))
|
||||
|
||||
(define %original-file-cache
|
||||
(make-hash-table))
|
||||
|
||||
(define (read-original-file file-name)
|
||||
"Return the contents of FILE-NAME prior to any changes."
|
||||
(let* ((port (open-pipe* OPEN_READ
|
||||
"git" "cat-file" "-p" (string-append
|
||||
"HEAD:" file-name)))
|
||||
(contents (get-string-all port)))
|
||||
(close-pipe port)
|
||||
contents))
|
||||
|
||||
(define (read-original-file* file-name)
|
||||
"Caching variant of READ-ORIGINAL-FILE."
|
||||
(or (hashv-ref %original-file-cache file-name)
|
||||
(let ((value (read-original-file file-name)))
|
||||
(hashv-set! %original-file-cache file-name value)
|
||||
value)))
|
||||
|
||||
(define (old-sexp hunk)
|
||||
"Using the diff information in HUNK return the unmodified S-expression
|
||||
corresponding to the top-level definition containing the staged changes."
|
||||
;; TODO: We can't seek with a pipe port...
|
||||
(call-with-input-string (read-original-file* (hunk-file-name hunk))
|
||||
(lambda (port)
|
||||
(surrounding-sexp port
|
||||
(+ (lines-to-first-change hunk)
|
||||
(hunk-old-line-number hunk))))))
|
||||
|
||||
(define (new-sexp hunk)
|
||||
"Using the diff information in HUNK return the modified S-expression
|
||||
corresponding to the top-level definition containing the staged changes."
|
||||
(call-with-input-file (hunk-file-name hunk)
|
||||
(lambda (port)
|
||||
(surrounding-sexp port
|
||||
(+ (lines-to-first-change hunk)
|
||||
(hunk-new-line-number hunk))))))
|
||||
|
||||
(define* (change-commit-message file-name old new #:optional (port (current-output-port)))
|
||||
"Print ChangeLog commit message for changes between OLD and NEW."
|
||||
(define (get-values expr field)
|
||||
(match ((xpath:node-or
|
||||
(xpath:sxpath `(*any* *any* package ,field quasiquote *))
|
||||
;; For let binding
|
||||
(xpath:sxpath `(*any* *any* (*any*) package ,field quasiquote *)))
|
||||
(cons '*TOP* expr))
|
||||
(()
|
||||
;; New-style plain lists
|
||||
(match ((xpath:node-or
|
||||
(xpath:sxpath `(*any* *any* package ,field list *))
|
||||
;; For let binding
|
||||
(xpath:sxpath `(*any* *any* (*any*) package ,field list *)))
|
||||
(cons '*TOP* expr))
|
||||
((inner) inner)
|
||||
(_ '())))
|
||||
;; Old-style labelled inputs
|
||||
((first . rest)
|
||||
(map cadadr first))))
|
||||
(define (listify items)
|
||||
(match items
|
||||
((one) one)
|
||||
((one two)
|
||||
(string-append one " and " two))
|
||||
((one two . more)
|
||||
(string-append (string-join (drop-right items 1) ", ")
|
||||
", and " (first (take-right items 1))))))
|
||||
(define variable-name
|
||||
(second old))
|
||||
(define version
|
||||
(match ((xpath:node-or
|
||||
(xpath:sxpath '(*any* *any* package version *any*))
|
||||
;; For let binding
|
||||
(xpath:sxpath '(*any* *any* (*any*) package version *any*)))
|
||||
(cons '*TOP* new))
|
||||
(() #f)
|
||||
((version . rest) version)))
|
||||
(if version
|
||||
(format port
|
||||
"gnu: ~a: Update to ~a.~%~%* ~a (~a): Update to ~a.~%"
|
||||
variable-name version file-name variable-name version)
|
||||
(format port
|
||||
"gnu: ~a: Update.~%~%* ~a (~a): Update.~%"
|
||||
variable-name file-name variable-name))
|
||||
(for-each (lambda (field)
|
||||
(let ((old-values (get-values old field))
|
||||
(new-values (get-values new field)))
|
||||
(or (equal? old-values new-values)
|
||||
(let ((removed (lset-difference equal? old-values new-values))
|
||||
(added (lset-difference equal? new-values old-values)))
|
||||
(unless (and (null? added) (null? removed))
|
||||
(format port
|
||||
"[~a]: ~a~%" field
|
||||
(break-string
|
||||
;; A dependency can be a list of (pkg output).
|
||||
(match (list (map object->string removed)
|
||||
(map object->string added))
|
||||
((() added)
|
||||
(format #f "Add ~a."
|
||||
(listify added)))
|
||||
((removed ())
|
||||
(format #f "Remove ~a."
|
||||
(listify removed)))
|
||||
((removed added)
|
||||
(format #f "Remove ~a; add ~a."
|
||||
(listify removed)
|
||||
(listify added)))))))))))
|
||||
'(inputs propagated-inputs native-inputs)))
|
||||
|
||||
(define* (add-commit-message file-name variable-name
|
||||
#:optional (port (current-output-port)))
|
||||
"Print ChangeLog commit message for a change to FILE-NAME adding a
|
||||
definition."
|
||||
(format port "gnu: Add ~a.~%~%* ~a (~a): New variable.~%"
|
||||
variable-name file-name variable-name))
|
||||
|
||||
(define* (remove-commit-message file-name variable-name
|
||||
#:optional (port (current-output-port)))
|
||||
"Print ChangeLog commit message for a change to FILE-NAME removing a
|
||||
definition."
|
||||
(format port "gnu: Remove ~a.~%~%* ~a (~a): Delete variable.~%"
|
||||
variable-name file-name variable-name))
|
||||
|
||||
(define* (custom-commit-message file-name variable-name message changelog
|
||||
#:optional (port (current-output-port)))
|
||||
"Print custom commit message for a change to VARIABLE-NAME in FILE-NAME, using
|
||||
MESSAGE as the commit message and CHANGELOG as the body of the ChangeLog
|
||||
entry. If CHANGELOG is #f, the commit message is reused. If CHANGELOG already
|
||||
contains ': ', no colon is inserted between the location and body of the
|
||||
ChangeLog entry."
|
||||
(define (trim msg)
|
||||
(string-trim-right (string-trim-both msg) (char-set #\.)))
|
||||
|
||||
(define (changelog-has-location? changelog)
|
||||
(->bool (string-match "^[[:graph:]]+:[[:blank:]]" changelog)))
|
||||
|
||||
(let* ((message (trim message))
|
||||
(changelog (if changelog (trim changelog) message))
|
||||
(message/f (format #f "gnu: ~a: ~a." variable-name message))
|
||||
(changelog/f (if (changelog-has-location? changelog)
|
||||
(format #f "* ~a (~a)~a."
|
||||
file-name variable-name changelog)
|
||||
(format #f "* ~a (~a): ~a."
|
||||
file-name variable-name changelog))))
|
||||
(format port
|
||||
"~a~%~%~a~%"
|
||||
(break-string-with-newlines message/f 72)
|
||||
(break-string-with-newlines changelog/f 72))))
|
||||
|
||||
(define (add-copyright-line line)
|
||||
"Add the copyright line on LINE to the previous commit."
|
||||
(let ((author (match:substring
|
||||
(string-match "^\\+;;; Copyright ©[^[:alpha:]]+(.*)$" line)
|
||||
1)))
|
||||
(format
|
||||
(current-output-port) "Amend and add copyright line for ~a~%" author)
|
||||
(system* "git" "commit" "--amend" "--no-edit")))
|
||||
|
||||
(define (group-hunks-by-sexp hunks)
|
||||
"Return a list of pairs associating all hunks with the S-expression they are
|
||||
modifying."
|
||||
(fold (lambda (sexp hunk acc)
|
||||
(match acc
|
||||
(((previous-sexp . hunks) . rest)
|
||||
(if (equal? sexp previous-sexp)
|
||||
(cons (cons previous-sexp
|
||||
(cons hunk hunks))
|
||||
rest)
|
||||
(cons (cons sexp (list hunk))
|
||||
acc)))
|
||||
(_
|
||||
(cons (cons sexp (list hunk))
|
||||
acc))))
|
||||
'()
|
||||
(map new-sexp hunks)
|
||||
hunks))
|
||||
|
||||
(define (new+old+hunks hunks)
|
||||
(map (match-lambda
|
||||
((new . hunks)
|
||||
(cons* new (old-sexp (first hunks)) hunks)))
|
||||
(group-hunks-by-sexp hunks)))
|
||||
|
||||
(define %delay 1000)
|
||||
|
||||
(define (main . args)
|
||||
(define* (change-commit-message* file-name old new #:rest rest)
|
||||
(let ((changelog #f))
|
||||
(match args
|
||||
((or (message changelog) (message))
|
||||
(apply custom-commit-message
|
||||
file-name (second old) message changelog rest))
|
||||
(_
|
||||
(apply change-commit-message file-name old new rest)))))
|
||||
|
||||
(read-disable 'positions)
|
||||
(match (diff-info)
|
||||
(()
|
||||
(display "Nothing to be done.\n" (current-error-port)))
|
||||
(hunks
|
||||
(let-values (((definitions changes) (partition hunk-type hunks)))
|
||||
;; Additions/removals.
|
||||
(for-each
|
||||
(lambda (hunk)
|
||||
(and-let* ((define-line (find (cut string-match "(\\+|-)\\(define" <>)
|
||||
(hunk-diff-lines hunk)))
|
||||
(variable-name (and=> (string-tokenize define-line)
|
||||
second))
|
||||
(commit-message-proc (match (hunk-type hunk)
|
||||
('addition add-commit-message)
|
||||
('removal remove-commit-message))))
|
||||
(commit-message-proc (hunk-file-name hunk) variable-name)
|
||||
(let ((port (open-pipe* OPEN_WRITE
|
||||
"git" "apply"
|
||||
"--cached"
|
||||
"--unidiff-zero")))
|
||||
(hunk->patch hunk port)
|
||||
(unless (eqv? 0 (status:exit-val (close-pipe port)))
|
||||
(error "Cannot apply")))
|
||||
|
||||
(let ((port (open-pipe* OPEN_WRITE "git" "commit" "-F" "-")))
|
||||
(commit-message-proc (hunk-file-name hunk) variable-name port)
|
||||
(usleep %delay)
|
||||
(unless (eqv? 0 (status:exit-val (close-pipe port)))
|
||||
(error "Cannot commit"))))
|
||||
(usleep %delay))
|
||||
definitions)
|
||||
|
||||
;; Changes.
|
||||
(for-each
|
||||
(match-lambda
|
||||
((new old . hunks)
|
||||
(for-each (lambda (hunk)
|
||||
(let ((port (open-pipe* OPEN_WRITE
|
||||
"git" "apply"
|
||||
"--cached"
|
||||
"--unidiff-zero")))
|
||||
(hunk->patch hunk port)
|
||||
(unless (eqv? 0 (status:exit-val (close-pipe port)))
|
||||
(error "Cannot apply")))
|
||||
(usleep %delay))
|
||||
hunks)
|
||||
(define copyright-line
|
||||
(any (lambda (line) (and=> (string-prefix? "+;;; Copyright ©" line)
|
||||
(const line)))
|
||||
(hunk-diff-lines (first hunks))))
|
||||
(cond
|
||||
(copyright-line
|
||||
(add-copyright-line copyright-line))
|
||||
(else
|
||||
(let ((port (open-pipe* OPEN_WRITE "git" "commit" "-F" "-")))
|
||||
(change-commit-message* (hunk-file-name (first hunks))
|
||||
old new)
|
||||
(change-commit-message* (hunk-file-name (first hunks))
|
||||
old new
|
||||
port)
|
||||
(usleep %delay)
|
||||
(unless (eqv? 0 (status:exit-val (close-pipe port)))
|
||||
(error "Cannot commit")))))))
|
||||
(new+old+hunks (match definitions
|
||||
('() changes) ;reuse
|
||||
(_
|
||||
;; XXX: we recompute the hunks here because previous
|
||||
;; insertions lead to offsets.
|
||||
(let-values (((definitions changes)
|
||||
(partition hunk-type (diff-info))))
|
||||
changes)))))))))
|
||||
|
||||
(apply main (cdr (command-line)))
|
||||
+72
-217
@@ -1,6 +1,5 @@
|
||||
# GNU Guix --- Functional package management for GNU
|
||||
# Copyright © 2015-2022 Ludovic Courtès <ludo@gnu.org>
|
||||
# Copyright © 2021 Tobias Geerinck-Rice <me@tobias.gr>
|
||||
# Copyright © 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
|
||||
#
|
||||
# This file is part of GNU Guix.
|
||||
#
|
||||
@@ -20,21 +19,6 @@
|
||||
# Bash completion for Guix commands.
|
||||
|
||||
declare _guix_available_packages
|
||||
declare _guix_commands
|
||||
|
||||
_guix_complete_command ()
|
||||
{
|
||||
local word_at_point="${COMP_WORDS[$COMP_CWORD]}"
|
||||
if [ -z "$_guix_commands" ]
|
||||
then
|
||||
# Cache the list of commands to speed things up.
|
||||
_guix_commands="$(${COMP_WORDS[0]} --help 2> /dev/null \
|
||||
| grep '^ ' \
|
||||
| sed '-es/^ *\([a-z-]\+\).*$/\1/g')"
|
||||
fi
|
||||
|
||||
COMPREPLY+=($(compgen -W "$_guix_commands" -- "$word_at_point"))
|
||||
}
|
||||
|
||||
_guix_complete_subcommand ()
|
||||
{
|
||||
@@ -42,7 +26,7 @@ _guix_complete_subcommand ()
|
||||
local subcommands="$(${COMP_WORDS[0]} $command --help 2> /dev/null \
|
||||
| grep '^ [a-z]' \
|
||||
| sed -e's/^ \+\([a-z-]\+\).*$/\1/g')"
|
||||
COMPREPLY+=($(compgen -W "$subcommands" -- "${COMP_WORDS[$COMP_CWORD]}"))
|
||||
COMPREPLY=($(compgen -W "$subcommands" -- "${COMP_WORDS[$COMP_CWORD]}"))
|
||||
}
|
||||
|
||||
_guix_complete_available_package ()
|
||||
@@ -55,7 +39,7 @@ _guix_complete_available_package ()
|
||||
_guix_available_packages="$(${COMP_WORDS[0]} package -A 2> /dev/null \
|
||||
| cut -f1)"
|
||||
fi
|
||||
COMPREPLY+=($(compgen -W "$_guix_available_packages" -- "$prefix"))
|
||||
COMPREPLY=($(compgen -W "$_guix_available_packages" -- "$prefix"))
|
||||
}
|
||||
|
||||
_guix_complete_installed_package ()
|
||||
@@ -65,40 +49,36 @@ _guix_complete_installed_package ()
|
||||
local prefix="$1"
|
||||
local packages="$(${COMP_WORDS[0]} package -I "^$prefix" 2> /dev/null \
|
||||
| cut -f1)"
|
||||
COMPREPLY+=($(compgen -W "$packages" -- "$prefix"))
|
||||
COMPREPLY=($(compgen -W "$packages" -- "$prefix"))
|
||||
}
|
||||
|
||||
_guix_complete_option ()
|
||||
{
|
||||
local command="${COMP_WORDS[$1]}"
|
||||
local subcommand="${COMP_WORDS[$(($1 + 1))]}"
|
||||
|
||||
if [ $1 -eq 0 ]
|
||||
then
|
||||
command=""
|
||||
subcommand=""
|
||||
elif _guix_is_option "$subcommand"
|
||||
then
|
||||
subcommand=""
|
||||
fi
|
||||
|
||||
local options="$(${COMP_WORDS[0]} $command $subcommand --help 2> /dev/null \
|
||||
local subcommand
|
||||
case "${COMP_WORDS[2]}" in
|
||||
-*) subcommand="";;
|
||||
[a-z]*) subcommand="${COMP_WORDS[2]}";;
|
||||
esac
|
||||
local options="$(${COMP_WORDS[0]} ${COMP_WORDS[1]} $subcommand --help 2> /dev/null \
|
||||
| grep '^ \+-' \
|
||||
| sed -e's/^.*--\([a-zA-Z0-9_-]\+\)\(=\?\).*/--\1\2/g')"
|
||||
compopt -o nospace
|
||||
COMPREPLY+=($(compgen -W "$options" -- "$2"))
|
||||
COMPREPLY=($(compgen -W "$options" -- "${COMP_WORDS[${#COMP_WORDS[*]} - 1]}"))
|
||||
}
|
||||
|
||||
_guix_is_option ()
|
||||
_guix_is_command ()
|
||||
{
|
||||
case "$1" in
|
||||
-*)
|
||||
true
|
||||
;;
|
||||
*)
|
||||
false
|
||||
;;
|
||||
esac
|
||||
local word
|
||||
local result="false"
|
||||
for word in ${COMP_WORDS[*]}
|
||||
do
|
||||
if [ "$word" = "$1" ]
|
||||
then
|
||||
result=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
$result
|
||||
}
|
||||
|
||||
_guix_is_removing ()
|
||||
@@ -117,60 +97,22 @@ _guix_is_removing ()
|
||||
$result
|
||||
}
|
||||
|
||||
_guix_is_short_option ()
|
||||
{
|
||||
case "${COMP_WORDS[$COMP_CWORD - 1]}" in
|
||||
--*) false;;
|
||||
-*$1) true ;;
|
||||
*) false ;;
|
||||
esac
|
||||
}
|
||||
|
||||
_guix_is_long_option ()
|
||||
{
|
||||
# Don't handle (non-GNU?) ‘--long-option VALUE’, as Guix doesn't either.
|
||||
case "${COMP_WORDS[$COMP_CWORD]}" in
|
||||
--$1=*) true ;;
|
||||
*) false ;;
|
||||
esac
|
||||
}
|
||||
|
||||
_guix_is_dash_f ()
|
||||
{
|
||||
_guix_is_short_option f ||
|
||||
_guix_is_long_option file ||
|
||||
_guix_is_long_option install-from-file ||
|
||||
_guix_is_long_option whole-file
|
||||
}
|
||||
|
||||
_guix_is_dash_l ()
|
||||
{
|
||||
_guix_is_short_option l ||
|
||||
_guix_is_long_option load
|
||||
}
|
||||
|
||||
_guix_is_dash_L ()
|
||||
{
|
||||
_guix_is_short_option L ||
|
||||
_guix_is_long_option load-path
|
||||
[ "${COMP_WORDS[$COMP_CWORD - 1]}" = "-L" ] \
|
||||
|| { case "${COMP_WORDS[$COMP_CWORD]}" in
|
||||
--load-path=*) true;;
|
||||
*) false;;
|
||||
esac }
|
||||
}
|
||||
|
||||
_guix_is_dash_m ()
|
||||
{
|
||||
_guix_is_short_option m ||
|
||||
_guix_is_long_option manifest
|
||||
}
|
||||
|
||||
_guix_is_dash_C ()
|
||||
{
|
||||
_guix_is_short_option C ||
|
||||
_guix_is_long_option channels
|
||||
}
|
||||
|
||||
_guix_is_dash_p ()
|
||||
{
|
||||
_guix_is_short_option p ||
|
||||
_guix_is_long_option profile
|
||||
[ "${COMP_WORDS[$COMP_CWORD - 1]}" = "-m" ] \
|
||||
|| { case "${COMP_WORDS[$COMP_CWORD]}" in
|
||||
--manifest=*) true;;
|
||||
*) false;;
|
||||
esac }
|
||||
}
|
||||
|
||||
_guix_complete_file ()
|
||||
@@ -180,69 +122,43 @@ _guix_complete_file ()
|
||||
COMPREPLY=()
|
||||
}
|
||||
|
||||
_guix_complete_available_package_or_store_file ()
|
||||
{
|
||||
_guix_complete_available_package "$@"
|
||||
|
||||
# The current _guix_complete_file implementation doesn't compose (append to
|
||||
# COMPREPLY), so we suggest file names only if no package names matched.
|
||||
if [[ -z "$COMPREPLY" ]]
|
||||
then
|
||||
_guix_complete_file # TODO: restrict to store files
|
||||
fi
|
||||
}
|
||||
|
||||
_guix_complete_pid ()
|
||||
{
|
||||
local pids="$(cd /proc; echo [0-9]*)"
|
||||
COMPREPLY+=($(compgen -W "$pids" -- "$1"))
|
||||
COMPREPLY=($(compgen -W "$pids" -- "$1"))
|
||||
}
|
||||
|
||||
declare _guix_subcommands
|
||||
|
||||
_guix_complete ()
|
||||
{
|
||||
local word_count=${#COMP_WORDS[*]}
|
||||
local word_at_point="${COMP_WORDS[$COMP_CWORD]}"
|
||||
|
||||
# Find the innermost command at point, e.g. "build" in the case of
|
||||
# "guix time-machine OPTIONS -- build<Tab>" -- but "time-machine" if
|
||||
# point is moved before "build".
|
||||
local command_index=0
|
||||
local command
|
||||
local word_index=0
|
||||
local word
|
||||
local expect_command="true"
|
||||
while [[ $((++word_index)) -le COMP_CWORD ]]
|
||||
do
|
||||
word="${COMP_WORDS[$word_index]}"
|
||||
if $expect_command
|
||||
then
|
||||
command_index=$word_index
|
||||
command="$word"
|
||||
expect_command="false"
|
||||
continue
|
||||
fi
|
||||
if [[ "$word" = "--" ]]
|
||||
then
|
||||
case "$command" in
|
||||
environment|shell)
|
||||
break
|
||||
;;
|
||||
time-machine)
|
||||
expect_command="true"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
if [ "$COMP_CWORD" -gt 1 ]
|
||||
then
|
||||
case "$word_at_point" in
|
||||
-*)
|
||||
_guix_complete_option "$word_at_point"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
case $COMP_CWORD in
|
||||
$command_index)
|
||||
_guix_complete_command
|
||||
_guix_complete_option 0 "$word_at_point"
|
||||
1)
|
||||
if [ -z "$_guix_subcommands" ]
|
||||
then
|
||||
# Cache the list of subcommands to speed things up.
|
||||
_guix_subcommands="$(guix --help 2> /dev/null \
|
||||
| grep '^ ' | cut -c 2-)"
|
||||
fi
|
||||
COMPREPLY=($(compgen -W "$_guix_subcommands" -- "$word_at_point"))
|
||||
;;
|
||||
*)
|
||||
if [[ "$command" = "package" ]]
|
||||
if _guix_is_command "package"
|
||||
then
|
||||
if _guix_is_dash_L || _guix_is_dash_m || _guix_is_dash_p || _guix_is_dash_f
|
||||
if _guix_is_dash_L || _guix_is_dash_m
|
||||
then
|
||||
_guix_complete_file
|
||||
elif _guix_is_removing
|
||||
@@ -251,108 +167,47 @@ _guix_complete ()
|
||||
else
|
||||
_guix_complete_available_package "$word_at_point"
|
||||
fi
|
||||
elif [[ "$command" = "install" ]]
|
||||
then
|
||||
if _guix_is_dash_L || _guix_is_dash_m || _guix_is_dash_p
|
||||
then
|
||||
_guix_complete_file
|
||||
else
|
||||
_guix_complete_available_package "$word_at_point"
|
||||
fi
|
||||
elif [[ "$command" = "upgrade" || "$command" = "remove" ]]
|
||||
then
|
||||
if _guix_is_dash_L || _guix_is_dash_m || _guix_is_dash_p
|
||||
then
|
||||
_guix_complete_file
|
||||
else
|
||||
_guix_complete_installed_package "$word_at_point"
|
||||
fi
|
||||
elif [[ "$command" = "build" ]]
|
||||
elif _guix_is_command "build"
|
||||
then
|
||||
if _guix_is_dash_L || _guix_is_dash_m || _guix_is_dash_f
|
||||
if _guix_is_dash_L
|
||||
then
|
||||
_guix_complete_file
|
||||
else
|
||||
_guix_complete_available_package_or_store_file "$word_at_point"
|
||||
fi
|
||||
elif [[ "$command" = "environment" || "$command" = "shell" ]]
|
||||
then
|
||||
if _guix_is_dash_f && [[ "$command" = "shell" ]]
|
||||
then
|
||||
# The otherwise identical ‘guix environment’ lacks the ‘-f’ option.
|
||||
_guix_complete_file
|
||||
elif _guix_is_dash_L || _guix_is_dash_m || _guix_is_dash_p || _guix_is_dash_l
|
||||
then
|
||||
_guix_complete_file
|
||||
elif _guix_is_option "$word_at_point"
|
||||
then
|
||||
_guix_complete_option "$command_index" "$word_at_point"
|
||||
else
|
||||
_guix_complete_available_package "$word_at_point"
|
||||
fi
|
||||
elif [[ "$command" = "download" || "$command" = "gc" || "$command" = "hash" ]]
|
||||
fi
|
||||
elif _guix_is_command "download"
|
||||
then
|
||||
_guix_complete_file
|
||||
elif [[ "$command" = "size" ]]
|
||||
_guix_complete_file
|
||||
elif _guix_is_command "system"
|
||||
then
|
||||
_guix_complete_available_package_or_store_file "$word_at_point"
|
||||
elif [[ "$command" = "system" || "$command" = "home" ]]
|
||||
then
|
||||
case $((COMP_CWORD - command_index)) in
|
||||
1) _guix_complete_subcommand;;
|
||||
case $COMP_CWORD in
|
||||
2) _guix_complete_subcommand;;
|
||||
*) _guix_complete_file;; # TODO: restrict to *.scm
|
||||
esac
|
||||
elif [[ "$command" = "pull" ]]
|
||||
then
|
||||
if _guix_is_dash_C || _guix_is_dash_p
|
||||
then
|
||||
_guix_complete_file
|
||||
fi
|
||||
elif [[ "$command" = "time-machine" ]]
|
||||
then
|
||||
if _guix_is_dash_C
|
||||
then
|
||||
_guix_complete_file
|
||||
else
|
||||
_guix_complete_option "$command_index" "$word_at_point"
|
||||
fi
|
||||
elif [[ "$command" = "container" ]]
|
||||
elif _guix_is_command "container"
|
||||
then
|
||||
case $((COMP_CWORD - command_index)) in
|
||||
1) _guix_complete_subcommand;;
|
||||
2) _guix_complete_pid "$word_at_point";;
|
||||
case $COMP_CWORD in
|
||||
2) _guix_complete_subcommand;;
|
||||
3) _guix_complete_pid "$word_at_point";;
|
||||
*) _guix_complete_file;;
|
||||
esac
|
||||
elif [[ "$command" = "import" ]]
|
||||
elif _guix_is_command "import"
|
||||
then
|
||||
_guix_complete_subcommand
|
||||
elif [[ "$command" = "weather" ]]
|
||||
elif _guix_is_command "hash" || _guix_is_command "gc"
|
||||
then
|
||||
_guix_complete_file
|
||||
elif _guix_is_command "weather"
|
||||
then
|
||||
if _guix_is_dash_m
|
||||
then
|
||||
_guix_complete_file
|
||||
else
|
||||
_guix_complete_available_package "$word_at_point"
|
||||
fi
|
||||
elif [[ "$command" = "style" ]]
|
||||
then
|
||||
if _guix_is_dash_f
|
||||
then
|
||||
_guix_complete_file
|
||||
else
|
||||
_guix_complete_available_package "$word_at_point"
|
||||
fi
|
||||
else
|
||||
_guix_complete_available_package "$word_at_point"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [[ -z "$COMPREPLY" && COMP_CWORD -gt command_index ]] &&
|
||||
_guix_is_option "$word_at_point"
|
||||
then
|
||||
_guix_complete_option "$command_index" "$word_at_point"
|
||||
fi
|
||||
}
|
||||
|
||||
complete -F _guix_complete guix
|
||||
|
||||
+490
-992
File diff suppressed because it is too large
Load Diff
+106
-313
@@ -2,8 +2,6 @@
|
||||
#
|
||||
# GNU Guix --- Functional package management for GNU
|
||||
# Copyright © 2016 Eric Le Bihan <eric.le.bihan.dev@free.fr>
|
||||
# Copyright © 2021 Noah Evans <noah@nevans.me>
|
||||
# Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
|
||||
#
|
||||
# This file is part of GNU Guix.
|
||||
#
|
||||
@@ -58,7 +56,6 @@ _guix_list_available_packages()
|
||||
if ( [[ ${+_guix_available_packages} -eq 0 ]] || _cache_invalid GUIX_AVAILABLE_PACKAGES ) \
|
||||
&& ! _retrieve_cache GUIX_AVAILABLE_PACKAGES; then
|
||||
_guix_available_packages=(${${(f)"$(guix package -A | cut -f1)"}})
|
||||
_guix_available_packages=("${_guix_available_packages[@]// /}")
|
||||
_store_cache GUIX_AVAILABLE_PACKAGES _guix_available_packages
|
||||
fi
|
||||
}
|
||||
@@ -71,37 +68,34 @@ _guix_list_installed_packages()
|
||||
(( $+functions[_guix_build] )) || _guix_build()
|
||||
{
|
||||
_arguments \
|
||||
{-e,--expression=}'[build the package or derivation EXPR evaluates to]:EXPR' \
|
||||
{-f,--file=}'[build the package or derivation that the code within FILE evaluates to]:FILE:_files' \
|
||||
{-m,--manifest=}'[build the packages that the manifest given in FILE evaluates to]:FILE:_files' \
|
||||
{-S,--source}'[build the packages source derivations]' \
|
||||
'--sources=[build source derivations]:TYPE:(package all transitive)' \
|
||||
{-s,--system=}'[attempt to build for SYSTEM (e.g. "i686-linux")]:SYSTEM' \
|
||||
'--expression=[build the package matching EXPR]:EXPR' \
|
||||
'--file=[build the package matching code evaluated from FILE]:FILE:_files' \
|
||||
'--source[build the packages source derivations]' \
|
||||
'--sources=[build source derivations]:TYPE:(all package transitive)' \
|
||||
'--system=[attempt to build for SYSTEM (e.g. "i686-linux")]:SYSTEM' \
|
||||
'--target=[cross-build for TRIPLET (e.g. "armel-linux-gnu")]:TRIPLET' \
|
||||
{-d,--derivations}'[return the derivation paths of the given packages]' \
|
||||
'--derivations[return the derivation paths of the given packages]' \
|
||||
'--check[rebuild items to check for non-determinism issues]' \
|
||||
'--repair[repair the specified items]' \
|
||||
{-r,--root=}'[make FILE a symlink to the result, and register it as a GC root]:FILE:_files' \
|
||||
{-v,--verbosity=}'[use the given verbosity LEVEL]:LEVEL' \
|
||||
{-q,--quiet}'[do not show the build log]' \
|
||||
'--root=[symlink result to FILE and register it as GC root]:FILE:_files' \
|
||||
'--quiet[do not show the build log]' \
|
||||
'--log-file[return the log file names for the given derivations]' \
|
||||
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -\' \
|
||||
{-K,--keep-failed}'[keep build tree of failed builds]' \
|
||||
{-k,--keep-going}'[keep going when some of the derivations fail]' \
|
||||
{-n,--dry-run}'[do not build the derivations]' \
|
||||
'--load-path=[prepend DIR to the package module search path]:DIR:_dirs' \
|
||||
'--keep-failed[keep build tree of failed builds]' \
|
||||
'--keep-going[keep going when some of the derivations fail]' \
|
||||
'--dry-run[do not build the derivations]' \
|
||||
'--fallback[fall back to building when the substituter fails]' \
|
||||
'--no-substitutes[build instead of resorting to pre-built substitutes]' \
|
||||
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
|
||||
'--no-grafts[do not graft packages]' \
|
||||
'--no-offload[do not attempt to offload builds]' \
|
||||
'--no-build-hook[do not attempt to offload builds via the build hook]' \
|
||||
'--max-silent-time=[mark the build as failed after SECONDS of silence]:SECONDS' \
|
||||
'--timeout=[mark the build as failed after SECONDS of activity]:SECONDS' \
|
||||
'--verbosity=[use the given verbosity LEVEL]:LEVEL' \
|
||||
'--rounds=[build N times in a row to detect non-determinism]:N' \
|
||||
{-c,--cores=}'[allow the use of up to N CPU cores for the build]:N' \
|
||||
{-M,--max-jobs=}'[allow at most N build jobs]:N' \
|
||||
'--debug=[produce debugging output at LEVEL]:LEVEL' \
|
||||
'--help-transform[list package transformation options not shown here]' \
|
||||
{-V,--version}'[display version information and exit]' \
|
||||
'--cores=[allow the use of up to N CPU cores for the build]:N' \
|
||||
'--max-jobs=[allow at most N build jobs]:N' \
|
||||
'--with-source=[use SOURCE when building the corresponding package]:SOURCE' \
|
||||
'--with-input=[replace dependency PACKAGE by REPLACEMENT]:PACKAGE=REPLACEMENT' \
|
||||
'*:package:->packages'
|
||||
|
||||
if [[ "$state" = packages ]]; then
|
||||
@@ -113,10 +107,7 @@ _guix_list_installed_packages()
|
||||
(( $+functions[_guix_challenge] )) || _guix_challenge()
|
||||
{
|
||||
_arguments \
|
||||
'--substitute-urls=[compare build results with those at URLS]:URLS:_urls' \
|
||||
'--diff=[show differences according to MODE]:MODE' \
|
||||
{-v,--verbose}'[show details about successful comparisons]' \
|
||||
{-V,--version}'[display version information and exit]' \
|
||||
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URL:_urls' \
|
||||
'*:package:->packages'
|
||||
|
||||
if [[ "$state" = packages ]]; then
|
||||
@@ -135,11 +126,7 @@ _guix_list_installed_packages()
|
||||
(( $+functions[_guix_download] )) || _guix_download()
|
||||
{
|
||||
_arguments \
|
||||
{-f,--format=}'[write the hash in the given format]:FMT:(nix-base32 base16 base32 hex)' \
|
||||
{-H,--hash=}'[use the given hash ALGORITHM]:ALGORITHM' \
|
||||
'--no-check-certificate[do not validate the certificate of HTTPS servers ]' \
|
||||
{-o,--output=}'[download to FILE]:FILE:_files' \
|
||||
{-V,--version}'[display version information and exit]' \
|
||||
'--format=[write the hash in the given format]:FMT:(nix-base32 base16 base32 hex)' \
|
||||
'1:URL:_urls'
|
||||
}
|
||||
|
||||
@@ -152,42 +139,32 @@ _guix_list_installed_packages()
|
||||
(( $+functions[_guix_environment] )) || _guix_environment()
|
||||
{
|
||||
_arguments \
|
||||
{-e,--expression=}'[create environment for the package that EXPR evaluates to]:EXPR' \
|
||||
{-l,--load=}'[create environment for the package that the code within FILE evaluates to]:FILE:_files' \
|
||||
{-m,--manifest=}'[create environment with the manifest from FILE]:FILE:_files' \
|
||||
{-p,--profile=}'[create environment from profile at PATH]:PATH:_files -/' \
|
||||
'--ad-hoc[include all specified packages in the environment instead of only their inputs]' \
|
||||
'--expression=[create environment for the package evaluated from EXPR]:EXPR' \
|
||||
'--load=[create environment for the package evaluated from FILE]:FILE:_files' \
|
||||
'--ad-hoc[include all specified packages, not only their inputs]' \
|
||||
'--pure[unset existing environment variables]' \
|
||||
{-E,--preserve=}'[preserve environment variables that match REGEXP]:REGEXP' \
|
||||
'--search-paths[display needed environment variable definitions]' \
|
||||
{-s,--system=}'[attempt to build for SYSTEM (e.g. "i686-linux")]:SYSTEM' \
|
||||
{-r,--root=}'[make FILE a symlink to the result, and register it as a GC root]:FILE:_files' \
|
||||
{-C,--container}'[run command within an isolated container]' \
|
||||
{-N,--network}'[allow containers to access the network]' \
|
||||
{-P,--link-profile}'[link environment profile to ~/.guix-profile within an isolated container]' \
|
||||
{-u,--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]:USER:_users' \
|
||||
'--no-cwd[do not share current working directory with an isolated container]' \
|
||||
'--share=[for containers, share writable host file system according to SPEC]:SPEC' \
|
||||
'--expose=[for containers, expose read-only host file system according to SPEC]:SPEC' \
|
||||
{-v,--verbosity=}'[use the given verbosity LEVEL]:LEVEL' \
|
||||
'--system=[attempt to build for SYSTEM (e.g. "i686-linux")]:SYSTEM' \
|
||||
'--container[run command within an isolated container]' \
|
||||
'--network[allow containers to access the network]' \
|
||||
'--share=[share writable host file system according to SPEC]:SPEC' \
|
||||
'--expose=[expose read-only host file system according to SPEC]:SPEC' \
|
||||
'--bootstrap[use bootstrap binaries to build the environment]' \
|
||||
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -/' \
|
||||
{-K,--keep-failed}'[keep build tree of failed builds]' \
|
||||
{-k,--keep-going}'[keep going when some of the derivations fail]' \
|
||||
{-n,--dry-run}'[do not build the derivations]' \
|
||||
'--load-path=[prepend DIR to the package module search path]:DIR:_dirs' \
|
||||
'--keep-failed[keep build tree of failed builds]' \
|
||||
'--keep-going[keep going when some of the derivations fail]' \
|
||||
'--dry-run[do not build the derivations]' \
|
||||
'--fallback[fall back to building when the substituter fails]' \
|
||||
'--no-substitutes[build instead of resorting to pre-built substitutes]' \
|
||||
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
|
||||
'--no-grafts[do not graft packages]' \
|
||||
'--no-offload[do not attempt to offload builds]' \
|
||||
'--no-build-hook[do not attempt to offload builds via the build hook]' \
|
||||
'--max-silent-time=[mark the build as failed after SECONDS of silence]:SECONDS' \
|
||||
'--timeout=[mark the build as failed after SECONDS of activity]:SECONDS' \
|
||||
'--verbosity=[use the given verbosity LEVEL]:LEVEL' \
|
||||
'--rounds=[build N times in a row to detect non-determinism]:N' \
|
||||
{-c,--cores=}'[allow the use of up to N CPU cores for the build]:N' \
|
||||
{-M,--max-jobs=}'[allow at most N build jobs]:N' \
|
||||
'--debug=[produce debugging output at LEVEL]:LEVEL' \
|
||||
'--help-transform[list package transformation options not shown here]' \
|
||||
{-V,--version}'[display version information and exit]' \
|
||||
'--cores=[allow the use of up to N CPU cores for the build]:N' \
|
||||
'--max-jobs=[allow at most N build jobs]:N' \
|
||||
'*:package:->packages'
|
||||
|
||||
if [[ "$state" = packages ]]; then
|
||||
@@ -200,39 +177,27 @@ _guix_list_installed_packages()
|
||||
(( $+functions[_guix_gc] )) || _guix_gc()
|
||||
{
|
||||
_arguments \
|
||||
{-C,--collect-garbage=}'[collect at least MIN bytes of garbage]:MIN' \
|
||||
{-F,--free-space=}'[attempt to reach FREE available space in the store]:FREE' \
|
||||
{-d,--delete-generations=}'[delete profile generations matching PATTERN]:PATTERN' \
|
||||
{-D,--delete}'[attempt to delete PATHS]' \
|
||||
'--list-roots[list the users GC roots]' \
|
||||
'--list-busy[list store items used by running processes]' \
|
||||
'--collect-garbage=[collect at least MIN bytes of garbage]:MIN' \
|
||||
'--free-space=[attempt to reach FREE available space in the store]:FREE' \
|
||||
'--delete[attempt to delete PATHS]' \
|
||||
'--optimize[optimize the store by deduplicating identical files]' \
|
||||
'--list-dead[list dead paths]' \
|
||||
'--list-live[list live paths]' \
|
||||
'--references[list the references of PATHS]' \
|
||||
{-R,--requisites}'[list the requisites of PATHS]' \
|
||||
'--requisites[list the requisites of PATHS]' \
|
||||
'--referrers[list the referrers of PATHS]' \
|
||||
'--derivers[list the derivers of PATHS]' \
|
||||
'--verify=[verify the integrity of the store]:OPTS:(contents repair)' \
|
||||
'--list-failures[list cached build failures]' \
|
||||
'--clear-failures[remove PATHS from the set of cached failures]' \
|
||||
{-V,--version}'[display version information and exit]:V' \
|
||||
'1:PATH:_files -/'
|
||||
'1:PATH:_dirs'
|
||||
}
|
||||
|
||||
(( $+functions[_guix_graph] )) || _guix_graph()
|
||||
{
|
||||
_arguments \
|
||||
{-b,--backend=}'[produce a graph with the given backend TYPE]:TYPE:->types' \
|
||||
'--list-backends[list the available graph backends]' \
|
||||
{-t,--type=}'[represent nodes of the given TYPE]:TYPE:->types' \
|
||||
'--type=[represent nodes of the given TYPE]:TYPE:->types' \
|
||||
'--list-types[list the available graph types]' \
|
||||
'--path[display the shortest path between the given nodes]' \
|
||||
{-e,--expression=}'[consider the package EXPR evaluates to]:EXPR' \
|
||||
{-s,--system=}'[consider the graph for SYSTEM (e.g. "i686-linux")]:SYSTEM' \
|
||||
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -/' \
|
||||
'--help-transform[list package transformation options not shown here]' \
|
||||
{-V,--version}'[display version information and exit]' \
|
||||
'--expression=[consider the package EXPR evaluates to]:EXPR' \
|
||||
'1:PACKAGE:->packages'
|
||||
|
||||
case "$state" in
|
||||
@@ -251,18 +216,14 @@ _guix_list_installed_packages()
|
||||
(( $+functions[_guix_hash] )) || _guix_hash()
|
||||
{
|
||||
_arguments \
|
||||
{-x,--exclude-vcs}'[exclude version control directories]' \
|
||||
{-H,--hash=}'[use the given hash ALGORITHM]:ALGORITHM' \
|
||||
{-f,--format=}'[write the hash in the given format]:FMT:(nix-base32 base16 base32 hex)' \
|
||||
{-r,--recursive}'[compute the hash on FILE recursively]' \
|
||||
{-V,--version}'[display version information and exit]' \
|
||||
'--format=[write the hash in the given format]:FMT:(nix-base32 base16 base32 hex)' \
|
||||
'--recursive[compute the hash on FILE recursively]'\
|
||||
'1:FILE:_files'
|
||||
}
|
||||
|
||||
(( $+functions[_guix_import] )) || _guix_import()
|
||||
{
|
||||
_arguments \
|
||||
{-V,--version}'[display version information and exit]' \
|
||||
'1:IMPORTER:->importer' \
|
||||
'*:args:'
|
||||
|
||||
@@ -275,12 +236,8 @@ _guix_list_installed_packages()
|
||||
(( $+functions[_guix_lint] )) || _guix_lint()
|
||||
{
|
||||
_arguments \
|
||||
{-c,--checkers=}'[only run the specified checkers]:CHECKERS:->checkers' \
|
||||
{-x,--exclude=}'[exclude the specified checkers]:CHECKERSS:->checkers' \
|
||||
{-n,--no-network}'[only run checkers that do not access the network]' \
|
||||
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -/' \
|
||||
{-l,--list-checkers}'[display the list of available lint checkers]' \
|
||||
{-V,--version}'[display version information and exit]' \
|
||||
'--checkers=[only run the specified checkers]:CHECKERS:->checkers' \
|
||||
'--list-checkers[display the list of available lint checkers]' \
|
||||
'1:PACKAGE:->packages'
|
||||
|
||||
case "$state" in
|
||||
@@ -298,46 +255,42 @@ _guix_list_installed_packages()
|
||||
(( $+functions[_guix_package] )) || _guix_package()
|
||||
{
|
||||
_arguments \
|
||||
{-i,--install}'[install one or more packages]: :->install' \
|
||||
{-e,--install-from-expression=}'[install the package EXP evaluates to]:EXP' \
|
||||
{-f,--install-from-file=}'[install the package evaluated from FILE]:FILE:_files' \
|
||||
{-r,--remove}'[remove one or more packages]: :->remove' \
|
||||
{-u,--upgrade=}'[upgrade all the installed packages matching REGEXP]:REGEXP' \
|
||||
{-m,--manifest=}'[create a new profile generation from FILE]:FILE:_files' \
|
||||
'--install[install one or more packages]: :->install' \
|
||||
'--install-from-expression=[install the package EXP evaluates to]:EXP' \
|
||||
'--install-from-file=[install the package evaluated from FILE]:FILE:_files' \
|
||||
'--remove[remove one or more packages]: :->remove' \
|
||||
'--upgrade=[upgrade all the installed packages matching REGEXP]:REGEXP' \
|
||||
'--manifest=[create a new profile generation from FILE]:FILE:_files' \
|
||||
'--do-not-upgrade=[do not upgrade any packages matching REGEXP]:REGEXP' \
|
||||
'--roll-back[roll back to the previous generation]' \
|
||||
'--search-paths=[display needed environment variable definitions]:KINDS' \
|
||||
{-l,--list-generations=}'[list generations matching PATTERN]:PATTERN' \
|
||||
{-d,--delete-generations=}'[delete generations matching PATTERN]:PATTERN' \
|
||||
{-S,--switch-generation=}'[switch to a generation matching PATTERN]:PATTERN' \
|
||||
'--export-manifest[print a manifest for the chosen profile]' \
|
||||
'--export-channels[print channels for the chosen profile]' \
|
||||
{-p,--profile}'[use PROFILE instead of the default profile]:PROFILE:_files -/' \
|
||||
'--list-profiles[list the profiles]' \
|
||||
'--allow-collisions[do not treat collisions in the profile as an error]' \
|
||||
'--list-generations=[list generations matching PATTERN]:PATTERN' \
|
||||
'--delete-generations=[delete generations matching PATTERN]:PATTERN' \
|
||||
'--switch-generation=[switch to a generation matching PATTERN]:PATTERN' \
|
||||
'--profile=[use PROFILE instead of the default profile]:PROFILE' \
|
||||
'--bootstrap[use the bootstrap Guile to build the profile]' \
|
||||
{-s,--search=}'[search in synopsis and description using REGEXP]:REGEXP' \
|
||||
{-I,--list-installed=}'[list installed packages matching REGEXP]:REGEXP' \
|
||||
{-A,--list-available=}'[list available packages matching REGEXP]:REGEXP' \
|
||||
'--verbose[produce verbose output]' \
|
||||
'--search=[search in synopsis and description using REGEXP]:REGEXP' \
|
||||
'--list-installed=[list installed packages matching REGEXP]:REGEXP' \
|
||||
'--list-available=[list available packages matching REGEXP]:REGEXP' \
|
||||
'--show=[show details about a package]: :->show' \
|
||||
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -/' \
|
||||
{-K,--keep-failed}'[keep build tree of failed builds]' \
|
||||
{-k,--keep-going}'[keep going when some of the derivations fail]' \
|
||||
{-n,--dry-run}'[do not build the derivations]' \
|
||||
'--load-path=[prepend DIR to the package module search path]:DIR:_dirs' \
|
||||
'--keep-failed[keep build tree of failed builds]' \
|
||||
'--keep-going[keep going when some of the derivations fail]' \
|
||||
'--dry-run[do not build the derivations]' \
|
||||
'--fallback[fall back to building when the substituter fails]' \
|
||||
'--no-substitutes[build instead of resorting to pre-built substitutes]' \
|
||||
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
|
||||
'--no-grafts[do not graft packages]' \
|
||||
'--no-offload[do not attempt to offload builds]' \
|
||||
'--no-build-hook[do not attempt to offload builds via the build hook]' \
|
||||
'--max-silent-time=[mark the build as failed after SECONDS of silence]:SECONDS' \
|
||||
'--timeout=[mark the build as failed after SECONDS of activity]:SECONDS' \
|
||||
'--verbosity=[use the given verbosity LEVEL]:LEVEL' \
|
||||
'--rounds=[build N times in a row to detect non-determinism]:N' \
|
||||
{-c,--cores=}'[allow the use of up to N CPU cores for the build]:N' \
|
||||
{-M,--max-jobs=}'[allow at most N build jobs]:N' \
|
||||
'--debug=[produce debugging output at LEVEL]' \
|
||||
'--help-transform[list package transformation options not shown here]' \
|
||||
{-v,--verbosity=}'[use the given verbosity LEVEL]' \
|
||||
{-V,--version}'[display version information and exit]'
|
||||
'--cores=[allow the use of up to N CPU cores for the build]:N' \
|
||||
'--max-jobs=[allow at most N build jobs]:N' \
|
||||
'--with-source=[use SOURCE when building the corresponding package]:SOURCE' \
|
||||
'--with-input=[replace dependency PACKAGE by REPLACEMENT]:PACKAGE=REPLACEMENT'
|
||||
|
||||
case "$state" in
|
||||
install|show)
|
||||
@@ -351,165 +304,37 @@ _guix_list_installed_packages()
|
||||
esac
|
||||
}
|
||||
|
||||
(( $+functions[_guix_install] )) || _guix_install()
|
||||
{
|
||||
_arguments \
|
||||
{-p,--profile=}'[use PROFILE instead of the users default profile]:PROFILE:_files -/' \
|
||||
{-v,--verbosity=}'[use the given verbosity LEVEL]:LEVEL' \
|
||||
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -/' \
|
||||
{-K,--keep-failed}'[keep build tree of failed builds]' \
|
||||
{-k,--keep-going}'[keep going when some of the derivations fail]' \
|
||||
{-n,--dry-run}'[do not build the derivations]' \
|
||||
'--fallback[fall back to building when the substituter fails]' \
|
||||
'--no-substitutes[build instead of resorting to pre-built substitutes]' \
|
||||
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
|
||||
'--no-grafts[do not graft packages]' \
|
||||
'--no-offload[do not attempt to offload builds]' \
|
||||
'--max-silent-time=[mark the build as failed after SECONDS of silence]:SECONDS' \
|
||||
'--timeout=[mark the build as failed after SECONDS of activity]:SECONDS' \
|
||||
'--rounds=[build N times in a row to detect non-determinism]:N' \
|
||||
{-c,--cores=}'[allow the use of up to N CPU cores for the build]:N' \
|
||||
{-M,--max-jobs=}'[allow at most N build jobs]:N' \
|
||||
'--debug=[produce debugging output at LEVEL]:LEVEL' \
|
||||
'--help-transform[list package transformation options not shown here]' \
|
||||
{-V,--version}'[display version information and exit]' \
|
||||
'*:package:->packages'
|
||||
|
||||
if [[ "$state" = packages ]]; then
|
||||
_guix_list_available_packages
|
||||
compadd -a -- _guix_available_packages
|
||||
fi
|
||||
}
|
||||
|
||||
(( $+functions[_guix_remove] )) || _guix_remove()
|
||||
{
|
||||
_arguments \
|
||||
{-p,--profile=}'[use PROFILE instead of the users default profile]:PROFILE:_files -/' \
|
||||
{-v,--verbosity=}'[use the given verbosity LEVEL]:LEVEL' \
|
||||
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -/' \
|
||||
{-K,--keep-failed}'[keep build tree of failed builds]' \
|
||||
{-k,--keep-going}'[keep going when some of the derivations fail]' \
|
||||
{-n,--dry-run}'[do not build the derivations]' \
|
||||
'--fallback[fall back to building when the substituter fails]' \
|
||||
'--no-substitutes[build instead of resorting to pre-built substitutes]' \
|
||||
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
|
||||
'--no-grafts[do not graft packages]' \
|
||||
'--no-offload[do not attempt to offload builds]' \
|
||||
'--max-silent-time=[mark the build as failed after SECONDS of silence]:SECONDS' \
|
||||
'--timeout=[mark the build as failed after SECONDS of activity]:SECONDS' \
|
||||
'--rounds=[build N times in a row to detect non-determinism]:N' \
|
||||
{-c,--cores=}'[allow the use of up to N CPU cores for the build]:N' \
|
||||
{-M,--max-jobs=}'[allow at most N build jobs]:N' \
|
||||
'--debug=[produce debugging output at LEVEL]:LEVEL' \
|
||||
{-V,--version}'[display version information and exit]' \
|
||||
'*:package:->packages'
|
||||
|
||||
if [[ "$state" = packages ]]; then
|
||||
_guix_list_installed_packages
|
||||
compadd -a -- _guix_installed_packages
|
||||
fi
|
||||
}
|
||||
|
||||
(( $+functions[_guix_upgrade] )) || _guix_upgrade()
|
||||
{
|
||||
_arguments \
|
||||
{-p,--profile=}'[use PROFILE instead of the users default profile]:PROFILE:_files -/' \
|
||||
{-v,--verbosity=}'[use the given verbosity LEVEL]:LEVEL' \
|
||||
'--do-not-upgrade=[do not upgrade any packages matching REGEXP]:REGEXP' \
|
||||
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -/' \
|
||||
{-K,--keep-failed}'[keep build tree of failed builds]' \
|
||||
{-k,--keep-going}'[keep going when some of the derivations fail]' \
|
||||
{-n,--dry-run}'[do not build the derivations]' \
|
||||
'--fallback[fall back to building when the substituter fails]' \
|
||||
'--no-substitutes[build instead of resorting to pre-built substitutes]' \
|
||||
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
|
||||
'--no-grafts[do not graft packages]' \
|
||||
'--no-offload[do not attempt to offload builds]' \
|
||||
'--max-silent-time=[mark the build as failed after SECONDS of silence]:SECONDS' \
|
||||
'--timeout=[mark the build as failed after SECONDS of activity]:SECONDS' \
|
||||
'--rounds=[build N times in a row to detect non-determinism]:N' \
|
||||
{-c,--cores=}'[allow the use of up to N CPU cores for the build]:N' \
|
||||
{-M,--max-jobs=}'[allow at most N build jobs]:N' \
|
||||
'--debug=[produce debugging output at LEVEL]:LEVEL' \
|
||||
'--help-transform[list package transformation options not shown here]' \
|
||||
{-V,--version}'[display version information and exit]' \
|
||||
'*:regexp'
|
||||
}
|
||||
|
||||
(( $+functions[_guix_publish] )) || _guix_publish()
|
||||
{
|
||||
_arguments \
|
||||
{-p,--port=}'[listen on PORT]:PORT' \
|
||||
'--listen=[listen on the network interface for HOST]:HOST_hosts' \
|
||||
{-u,--user=}'[change privileges to USER as soon as possible]:USER_users' \
|
||||
{-a,--advertise}'[advertise on the local network]' \
|
||||
{-C,--compression=}'[compress archives with METHOD at LEVEL]:METHOD' \
|
||||
{-c,--cache=}'[cache published items to DIRECTORY]:DIRECTORY:_files -/' \
|
||||
'--cache-bypass-threshold=[serve store items below SIZE even when not cached]:SIZE' \
|
||||
'--workers=[use N workers to bake items]:N' \
|
||||
'--port=[listen on PORT]:PORT:' \
|
||||
'--listen=[listen on the network interface for HOST]:HOST:_hosts' \
|
||||
'--user=[change privileges to USER as soon as possible]:USER:_users' \
|
||||
'--compression=[compress archives at LEVEL]:LEVEL' \
|
||||
'--ttl=[announce narinfos can be cached for TTL seconds]:TTL' \
|
||||
'--negative-ttl=[announce missing narinfos can be cached for TTL seconds]:TTL' \
|
||||
'--nar-path=[use PATH as the prefix for nar URLs]:PATH' \
|
||||
'--public-key=[use FILE as the public key for signatures]:FILE:_files' \
|
||||
'--private-key=[use FILE as the private key for signatures]:FILE:_files' \
|
||||
{-r,--repl=}'[spawn REPL server on PORT]:PORT' \
|
||||
{-V,--version}'[display version information and exit]' \
|
||||
'--repl=[spawn REPL server on PORT]:PORT'
|
||||
}
|
||||
|
||||
(( $+functions[_guix_pull] )) || _guix_pull()
|
||||
{
|
||||
_arguments \
|
||||
{-C,--channels=}'[deploy the channels defined in FILE]:FILE:_files' \
|
||||
'--url=[download from the Git repository at URL]:URL:_urls' \
|
||||
'--commit=[download the specified COMMIT]:COMMIT' \
|
||||
'--branch=[download the tip of the specified BRANCH]:BRANCH' \
|
||||
'--allow-downgrades[allow downgrades to earlier channel revisions]' \
|
||||
'--disable-authentication[disable channel authentication]' \
|
||||
{-N,--news}'[display news compared to the previous generation]' \
|
||||
{-l,--list-generations=}'[list generations matching PATTERN]:PATTERN' \
|
||||
'--roll-back[roll back to the previous generation]' \
|
||||
{-d,--delete-generations=}'[delete generations matching PATTERN]:PATTERN' \
|
||||
{-S,--switch-generation=}'[switch to a generation matching PATTERN]:PATTERN' \
|
||||
{-p,--profile=}'[use PROFILE instead of ~/.config/guix/current]:PROFILE:_files -/' \
|
||||
{-v,--verbosity=}'[use the given verbosity LEVEL]:LEVEL' \
|
||||
{-s,--system=}'[attempt to build for SYSTEM (e.g. "i686-linux")]:SYSTEM' \
|
||||
'--bootstrap[use the bootstrap Guile to build the new Guix]' \
|
||||
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -/' \
|
||||
{-K,--keep-failed}'[keep build tree of failed builds]' \
|
||||
{-k,--keep-going}'[keep going when some of the derivations fail]' \
|
||||
{-n,--dry-run}'[do not build the derivations]' \
|
||||
'--fallback[fall back to building when the substituter fails]' \
|
||||
'--no-substitutes[build instead of resorting to pre-built substitutes]' \
|
||||
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
|
||||
'--no-grafts[do not graft packages]' \
|
||||
'--no-offload[do not attempt to offload builds]' \
|
||||
'--max-silent-time=[mark the build as failed after SECONDS of silence]:SECONDS' \
|
||||
'--timeout=[mark the build as failed after SECONDS of activity]:SECONDS' \
|
||||
'--rounds=[build N times in a row to detect non-determinism]:N' \
|
||||
{-c,--cores=}'[allow the use of up to N CPU cores for the build]:N' \
|
||||
{-M,--max-jobs=}'[allow at most N build jobs]:N' \
|
||||
'--debug=[produce debugging output at LEVEL]:LEVEL' \
|
||||
{-V,--version}'[display version information and exit]'
|
||||
'--verbose[produce verbose output]' \
|
||||
'--url=[download the Guix tarball from URL]:URL:_urls' \
|
||||
'--bootstrap[use the bootstrap Guile to build the new Guix]'
|
||||
}
|
||||
|
||||
(( $+functions[_guix_refresh] )) || _guix_refresh()
|
||||
{
|
||||
_arguments \
|
||||
{-e,--expression=}'[consider the package EXPR evaluates to]:EXPR' \
|
||||
{-u,--update}'[update source files in place]' \
|
||||
{-s,--select=}'[select all the packages in SUBSET, one of]:SUBSET:(core non-core)' \
|
||||
{-m,--manifest=}'[select all the packages from the manifest in FILE]:FILE:_files' \
|
||||
{-t,--type=}'[restrict to updates from the specified updaters]:UPDATER:-.updaters' \
|
||||
{-L,--list-updaters}'[list available updaters and exit]' \
|
||||
{-l,--list-dependent}'[list top-level dependent packages that would need to be rebuilt as a result of upgrading PACKAGE...]' \
|
||||
{-r,--recursive}'[check the PACKAGE and its inputs for upgrades]' \
|
||||
'--list-transitive[list all the packages that PACKAGE depends on]' \
|
||||
'--keyring=[use FILE as the keyring of upstream OpenPGP keys]:FILE:_files' \
|
||||
'--key-server=[use HOST as the OpenPGP key server]:HOST_hosts' \
|
||||
'--expression=[consider the package EXPR evaluates to]:EXPR' \
|
||||
'--update[update source files in place]' \
|
||||
'--select=[select all the packages in SUBSET]:SUBSET:(core non-core)' \
|
||||
'--type=[restrict to updates from the specified updaters]:UPDATER:->updaters' \
|
||||
'--list-updaters[list available updaters and exit]' \
|
||||
'--list-dependent[list top-level dependent packages]' \
|
||||
'--key-server=[use HOST as the OpenPGP key server]:HOST:_hosts' \
|
||||
'--gpg=[use COMMAND as the GnuPG 2.x command]:COMMAND' \
|
||||
'--key-download=[handle missing OpenPGP keys according to POLICY:]:POLICY:(always auto interactive never)' \
|
||||
'--load-path=[prepend DIR to the package module search path]:DIR:_files -/' \
|
||||
{-V,--version}'[display version information and exit]' \
|
||||
'--key-download=[policy to handle missing OpenPGP keys]:POLICY:(always interactive never)' \
|
||||
'*:package:->packages'
|
||||
|
||||
case "$state" in
|
||||
@@ -527,12 +352,9 @@ _guix_list_installed_packages()
|
||||
(( $+functions[_guix_size] )) || _guix_size()
|
||||
{
|
||||
_arguments \
|
||||
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
|
||||
{-s,--system=}'[consider packages for SYSTEM (e.g. "i686-linux")]:SYSTEM' \
|
||||
'--sort=[sort according to KEY]:KEY:(closure self)' \
|
||||
{-m,--map-file=}'[write to FILE a graphical map of disk usage]:FILE:_files' \
|
||||
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -/' \
|
||||
{-V,--version}'[display version information and exit]' \
|
||||
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URL:_urls' \
|
||||
'-system=[consider packages for SYSTEM--e.g., "i686-linux"]:SYSTEM' \
|
||||
'--map-file=[write to FILE a graphical map of disk usage]:FILE:_files' \
|
||||
'*:package:->packages'
|
||||
|
||||
if [[ "$state" = packages ]]; then
|
||||
@@ -544,42 +366,28 @@ _guix_list_installed_packages()
|
||||
(( $+functions[_guix_system] )) || _guix_system()
|
||||
{
|
||||
_arguments \
|
||||
{-L,--load-path=}'[prepend DIR to the package module search path]:DIR:_files -/' \
|
||||
{-K,--keep-failed}'[keep build tree of failed builds]' \
|
||||
{-k,--keep-going}'[keep going when some of the derivations fail]' \
|
||||
{-n,--dry-run}'[do not build the derivations]' \
|
||||
'--load-path=[prepend DIR to the package module search path]:DIR:_dirs' \
|
||||
'--keep-failed[keep build tree of failed builds]' \
|
||||
'--keep-going[keep going when some of the derivations fail]' \
|
||||
'--dry-run[do not build the derivations]' \
|
||||
'--fallback[fall back to building when the substituter fails]' \
|
||||
'--no-substitutes[build instead of resorting to pre-built substitutes]' \
|
||||
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
|
||||
'--substitute-urls=[fetch substitute from URLS if they are authorized]:URL:_urls' \
|
||||
'--no-grafts[do not graft packages]' \
|
||||
'--no-offload[do not attempt to offload builds]' \
|
||||
'--no-build-hook[do not attempt to offload builds via the build hook]' \
|
||||
'--max-silent-time=[mark the build as failed after SECONDS of silence]:SECONDS' \
|
||||
'--timeout=[mark the build as failed after SECONDS of activity]:SECONDS' \
|
||||
'--verbosity=[use the given verbosity LEVEL]:LEVEL' \
|
||||
'--rounds=[build N times in a row to detect non-determinism]:N' \
|
||||
{-c,--cores=}'[allow the use of up to N CPU cores for the build]:N' \
|
||||
{-M,--max-jobs=}'[allow at most N build jobs]:N' \
|
||||
'--debug=[produce debugging output at LEVEL]:LEVEL' \
|
||||
{-d,--derivation}'[return the derivation of the given system]' \
|
||||
{-e,--expression=}'[consider the operating-system EXPR evaluates to instead of reading FILE, when applicable]:EXPR' \
|
||||
'--allow-downgrades[for reconfigure, allow downgrades to earlier channel revisions]' \
|
||||
'--on-error=[apply STRATEGY when an error occurs while reading FILE]:STRATEGY:(nothing-special backtrace debug)' \
|
||||
'--list-image-types[list available image types]' \
|
||||
{-t,--image-type=}'[for image, produce an image of TYPE]:TYPE' \
|
||||
'--image-size=[for image, produce an image of SIZE]:SIZE' \
|
||||
'--no-bootloader[for init, do not install a bootloader]' \
|
||||
'--volatile[for image, make the root file system volatile]' \
|
||||
'--label=[for image, label disk image with LABEL]:LABEL' \
|
||||
'--save-provenance[save provenance information]' \
|
||||
'--share=[for vm and container, share host file system with read/write access according to SPEC]:SPEC' \
|
||||
'--expose=[for vm and container, expose host file system directory as read-only according to SPEC]:SPEC' \
|
||||
{-N,--network}'[for container, allow containers to access the network]' \
|
||||
{-r,--root=}'[for vm, image, container and build, make FILE a symlink to the result, and register it as a GC root]:FILE:_files' \
|
||||
'--full-boot[for vm, make a full boot sequence]' \
|
||||
'--skip-checks[skip file system and initrd module safety checks]' \
|
||||
'--target=[cross-build for TRIPLET (e.g. "armel-linux-gnu")]:TRIPLET' \
|
||||
{-v,--verbosity=}'[use the given verbosity LEVEL]:LEVEL' \
|
||||
'--graph-backend=[use BACKEND for extension-graphs and shepherd-graph]:BACKEND' \
|
||||
{-V,--version}'[display version information and exit]' \
|
||||
'--cores=[allow the use of up to N CPU cores for the build]:N' \
|
||||
'--max-jobs=[allow at most N build jobs]:N' \
|
||||
'--derivation[return the derivation of the given system]' \
|
||||
'--on-error=[apply STRATEGY when an error occurs while reading FILE]:STRATEGY' \
|
||||
'--image-size=[for "vm-image", produce an image of SIZE]:SIZE' \
|
||||
'--no-grub[for "init", do not install GRUB]' \
|
||||
'--share=[for "vm", share host file system according to SPEC]:SPEC' \
|
||||
'--expose=[for "vm", expose host file system according to SPEC]:SPEC' \
|
||||
'--full-boot[for "vm", make a full boot sequence]' \
|
||||
'1:action:->actions' \
|
||||
'*:file:_files'
|
||||
|
||||
@@ -597,35 +405,20 @@ _guix_list_installed_packages()
|
||||
"build:Build a given package"
|
||||
"challenge:Challenge the substitutes for a package"
|
||||
"container:Build and manipulate Linux containers"
|
||||
"copy:Copy store items remotely over SSH"
|
||||
"deploy:Deploy operating systems on a set of machines"
|
||||
"describe:Describe the channel revisions currently used"
|
||||
"download:Download the file at given URL and add it to the store"
|
||||
"edit:Edit the definitions of a package"
|
||||
"environment:Build an environment with a package and its dependencies"
|
||||
"gc:Invoke the garbage collector"
|
||||
"git:Operate on Git repositories"
|
||||
"graph:Emit a DOT representation of the dependencies of a package"
|
||||
"hash:Return the cryptographic hash of a file"
|
||||
"import:Run an importer"
|
||||
"install:Install packages"
|
||||
"lint:Run a set of checkers on a package"
|
||||
"offload:Set up and operate build offloading"
|
||||
"pack:Create application bundles"
|
||||
"package:Install, remove, or upgrade packages"
|
||||
"processes:List currently running sessions"
|
||||
"publish:Publish /gnu/store over HTTP."
|
||||
"pull:Download and deploy the latest version of Guix"
|
||||
"refresh:Update package definitions to match the latest version"
|
||||
"remove:Remove packages"
|
||||
"repl:Read-eval-print loop (REPL) for interactive programming"
|
||||
"search:Search for packages"
|
||||
"show:Show information about packages"
|
||||
"size:Report the size of a package and its dependencies"
|
||||
"system:Build the operating system"
|
||||
"time-machine:Run commands from a different revision"
|
||||
"upgrade:Upgrade packages"
|
||||
"weather:Report on the availability of pre-built package binaries"
|
||||
)
|
||||
|
||||
if (( CURRENT == 1 )); then
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
;;; copyright.el --- Insert a Guix copyright. -*- lexical-binding: t; -*-
|
||||
|
||||
;; Copyright © 2020 Oleg Pykhalov <go.wigust@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 package provides skeleton to insert a copyright with `guix-copyright'.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(define-skeleton guix-copyright
|
||||
"Insert a copyright by $USER notice at cursor."
|
||||
"FULL_NAME <MAIL_ADDRESS>: "
|
||||
comment-start
|
||||
";; Copyright © " `(format-time-string "%Y") " "
|
||||
(or (format "%s <%s>" user-full-name user-mail-address) str)
|
||||
comment-end)
|
||||
|
||||
;;; copyright.el ends here
|
||||
@@ -1,124 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Part of Gerrit Code Review (https://www.gerritcodereview.com/)
|
||||
#
|
||||
# Copyright (C) 2009 The Android Open Source Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
### Guix modifications start
|
||||
COMMIT_MSG_MAGIC=VGhpcyBpcyB0aGUgY29tbWl0LW1zZyBob29rIG9mIEd1aXg=
|
||||
top=$(git rev-parse --show-toplevel)
|
||||
if test -d "$top/.git/hooks/commit-msg.d/"; then
|
||||
for msg_hook in "$top/.git/hooks/commit-msg.d/"*; do
|
||||
if ! sh "$msg_hook"; then
|
||||
echo "error while running $msg_hook"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
fi
|
||||
### Guix modifications end
|
||||
|
||||
set -u
|
||||
|
||||
# avoid [[ which is not POSIX sh.
|
||||
if test "$#" != 1 ; then
|
||||
echo "$0 requires an argument."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test ! -f "$1" ; then
|
||||
echo "file does not exist: $1"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Do not create a change id if requested
|
||||
case "$(git config --get gerrit.createChangeId)" in
|
||||
false)
|
||||
exit 0
|
||||
;;
|
||||
always)
|
||||
;;
|
||||
*)
|
||||
# Do not create a change id for squash/fixup commits.
|
||||
if head -n1 "$1" | LC_ALL=C grep -q '^[a-z][a-z]*! '; then
|
||||
exit 0
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
if git rev-parse --verify HEAD >/dev/null 2>&1; then
|
||||
refhash="$(git rev-parse HEAD)"
|
||||
else
|
||||
refhash="$(git hash-object -t tree /dev/null)"
|
||||
fi
|
||||
|
||||
random=$({ git var GIT_COMMITTER_IDENT ; echo "$refhash" ; cat "$1"; } | git hash-object --stdin)
|
||||
dest="$1.tmp.${random}"
|
||||
|
||||
trap 'rm -f "$dest" "$dest-2"' EXIT
|
||||
|
||||
if ! sed -e '/>8/q' "$1" | git stripspace --strip-comments > "${dest}" ; then
|
||||
echo "cannot strip comments from $1"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test ! -s "${dest}" ; then
|
||||
echo "file is empty: $1"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
reviewurl="$(git config --get gerrit.reviewUrl)"
|
||||
if test -n "${reviewurl}" ; then
|
||||
token="Link"
|
||||
value="${reviewurl%/}/id/I$random"
|
||||
pattern=".*/id/I[0-9a-f]\{40\}"
|
||||
else
|
||||
token="Change-Id"
|
||||
value="I$random"
|
||||
pattern=".*"
|
||||
fi
|
||||
|
||||
if git interpret-trailers --no-divider --parse < "$1" | grep -q "^$token: $pattern$" ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# There must be a Signed-off-by trailer for the code below to work. Insert a
|
||||
# sentinel at the end to make sure there is one.
|
||||
# Avoid the --in-place option which only appeared in Git 2.8
|
||||
if ! git interpret-trailers \
|
||||
--no-divider \
|
||||
--trailer "Signed-off-by: SENTINEL" < "$1" > "$dest-2" ; then
|
||||
echo "cannot insert Signed-off-by sentinel line in $1"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Make sure the trailer appears before any Signed-off-by trailers by inserting
|
||||
# it as if it was a Signed-off-by trailer and then use sed to remove the
|
||||
# Signed-off-by prefix and the Signed-off-by sentinel line.
|
||||
# Avoid the --in-place option which only appeared in Git 2.8
|
||||
# Avoid the --where option which only appeared in Git 2.15
|
||||
if ! git -c trailer.where=before interpret-trailers \
|
||||
--no-divider \
|
||||
--trailer "Signed-off-by: $token: $value" < "$dest-2" |
|
||||
sed -e "s/^Signed-off-by: \($token: \)/\1/" \
|
||||
-e "/^Signed-off-by: SENTINEL/d" > "$dest" ; then
|
||||
echo "cannot insert $token line in $1"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! mv "${dest}" "$1" ; then
|
||||
echo "cannot mv ${dest} to $1"
|
||||
exit 1
|
||||
fi
|
||||
@@ -1,26 +0,0 @@
|
||||
[diff "scheme"]
|
||||
xfuncname = "^(\\(define.*)$"
|
||||
|
||||
[diff "texinfo"]
|
||||
xfuncname = "^@node[[:space:]]+([^,]+).*$"
|
||||
|
||||
[format]
|
||||
forceinbodyfrom = true # help preserve commit authorship
|
||||
thread = shallow
|
||||
useAutoBase = whenAble
|
||||
|
||||
[pull]
|
||||
rebase = true
|
||||
|
||||
[sendemail]
|
||||
to = guix-patches@gnu.org
|
||||
headerCmd = etc/teams.scm cc-members-header-cmd
|
||||
thread = no
|
||||
|
||||
[b4]
|
||||
attestation-check-dkim = off
|
||||
attestation-policy = off
|
||||
shazam-am-flags = --signoff --3way
|
||||
linkmask = https://yhetil.org/guix/%s
|
||||
linktrailermask = https://yhetil.org/guix/%s
|
||||
midmask = https://yhetil.org/guix/%s
|
||||
@@ -1,9 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Authenticate the repo upon 'git pull' and similar.
|
||||
if ! git config guix.authentication.introduction-commit; then
|
||||
exec guix git authenticate 9edb3f66fd807b096b48283debdcddccfea34bad \
|
||||
"BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA" \
|
||||
-k origin/keyring
|
||||
else
|
||||
exec guix git authenticate
|
||||
fi
|
||||
+41
-53
@@ -1,9 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
# This hook script prevents the user from pushing to the project's Git repo if
|
||||
# any of the new commits' OpenPGP signatures cannot be verified, if a commit is
|
||||
# signed with an unauthorized key, or if the channel news file is malformed
|
||||
# (which would break the build).
|
||||
# This hook script prevents the user from pushing to Savannah if any of the new
|
||||
# commits' OpenPGP signatures cannot be verified.
|
||||
|
||||
# Called by "git push" after it has checked the remote status, but before
|
||||
# anything has been pushed. If this script exits with a non-zero status nothing
|
||||
@@ -21,61 +19,51 @@
|
||||
#
|
||||
# <local ref> <local sha1> <remote ref> <remote sha1>
|
||||
|
||||
# This is the "empty hash" used by Git when pushing a branch deletion.
|
||||
z40=0000000000000000000000000000000000000000
|
||||
|
||||
perform_checks() {
|
||||
set -e
|
||||
guix git authenticate
|
||||
exec make check-channel-news
|
||||
exit 127
|
||||
}
|
||||
# Only use the hook when pushing to Savannah.
|
||||
case "$2" in
|
||||
*git.sv.gnu.org*)
|
||||
break
|
||||
;;
|
||||
*)
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
main() {
|
||||
while read local_ref local_hash remote_ref remote_hash
|
||||
while read local_ref local_sha remote_ref remote_sha
|
||||
do
|
||||
# When deleting a remote branch, no commits are pushed to the remote,
|
||||
# and thus there are no signatures or news updates to be verified.
|
||||
if [ "$local_hash" != $z40 ]
|
||||
then
|
||||
# Skip the hook when performing a pull-request...
|
||||
case "$remote_ref" in
|
||||
refs/for/*)
|
||||
exit 0
|
||||
;;
|
||||
# ... or when pushing a new PGP key to the keyring branch,
|
||||
# as this branch doesn't share ancestry with the master
|
||||
# branch and fails the 'guix git authenticate' check.
|
||||
refs/heads/keyring)
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
if [ "$local_sha" = $z40 ]
|
||||
then
|
||||
# Handle delete
|
||||
:
|
||||
else
|
||||
if [ "$remote_sha" = $z40 ]
|
||||
then
|
||||
# We are pushing a new branch. To prevent wasting too
|
||||
# much time for this relatively rare case, we examine
|
||||
# all commits since the first signed commit, rather than
|
||||
# the full history. This check *will* fail, and the user
|
||||
# will need to temporarily disable the hook to push the
|
||||
# new branch.
|
||||
range="e3d0fcbf7e55e8cbe8d0a1c5a24d73f341d7243b..$local_sha"
|
||||
else
|
||||
# Update to existing branch, examine new commits
|
||||
range="$remote_sha..$local_sha"
|
||||
fi
|
||||
|
||||
# Only perform checks when pushing to upstream.
|
||||
case "$2" in
|
||||
*savannah.gnu.org*)
|
||||
printf "ERROR: The repositories on Savannah are read-only mirrors of our repos at <https://codeberg.org/guix>.\n" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
*.gnu.org*)
|
||||
perform_checks
|
||||
;;
|
||||
# HTTPS Git remote.
|
||||
*codeberg.org/guix/*)
|
||||
perform_checks
|
||||
;;
|
||||
# SSH Git remote.
|
||||
*codeberg.org:guix/*)
|
||||
perform_checks
|
||||
;;
|
||||
*)
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
# Verify the signatures of all commits being pushed.
|
||||
ret=0
|
||||
for commit in $(git rev-list $range)
|
||||
do
|
||||
if ! git verify-commit $commit >/dev/null 2>&1
|
||||
then
|
||||
printf "%s failed signature check\n" $commit
|
||||
ret=1
|
||||
fi
|
||||
done
|
||||
exit $ret
|
||||
fi
|
||||
done
|
||||
|
||||
exit 0
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
[Unit]
|
||||
Description=Read-only @storedir@ for GNU Guix
|
||||
DefaultDependencies=no
|
||||
ConditionPathExists=@storedir@
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
[Mount]
|
||||
What=@storedir@
|
||||
Where=@storedir@
|
||||
Type=none
|
||||
Options=bind,ro
|
||||
+27
-256
@@ -1,8 +1,6 @@
|
||||
; -*- lisp -*-
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2018, 2022 Ricardo Wurmus <rekado@elephly.net>
|
||||
;;; Copyright © 2020 Daniel Brooks <db48x@db48x.net>
|
||||
;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
|
||||
;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -23,46 +21,27 @@
|
||||
;; Intermediate Language (CIL). It refers to types that must be defined in
|
||||
;; the system's base policy.
|
||||
|
||||
;; If you, like me, need advice about fixing an SELinux policy, I recommend
|
||||
;; reading https://danwalsh.livejournal.com/55324.html
|
||||
|
||||
;; In particular, you can run semanage permissive -a guix_daemon.guix_daemon_t
|
||||
;; to allow guix-daemon to do whatever it wants. SELinux will still check its
|
||||
;; permissions, and when it doesn't have permission it will still send an
|
||||
;; audit message to your system logs. This lets you know what permissions it
|
||||
;; ought to have. Use ausearch --raw to find the permissions violations, then
|
||||
;; pipe that to audit2allow to generate an updated policy. You'll still need
|
||||
;; to translate that policy into CIL in order to update this file, but that's
|
||||
;; fairly straight-forward. Annoying, but easy.
|
||||
|
||||
(block guix_daemon
|
||||
;; Require existing types
|
||||
(typeattributeset cil_gen_require domain)
|
||||
(typeattributeset cil_gen_require init_t)
|
||||
(typeattributeset cil_gen_require init_var_run_t)
|
||||
(typeattributeset cil_gen_require nscd_var_run_t)
|
||||
(typeattributeset cil_gen_require system_dbusd_var_run_t)
|
||||
(typeattributeset cil_gen_require tmp_t)
|
||||
(typeattributeset cil_gen_require nscd_var_run_t)
|
||||
(typeattributeset cil_gen_require var_log_t)
|
||||
(typeattributeset cil_gen_require domain)
|
||||
|
||||
;; Declare own types
|
||||
(type guix_daemon_t)
|
||||
(roletype object_r guix_daemon_t)
|
||||
(type guix_daemon_conf_t)
|
||||
(roletype object_r guix_daemon_conf_t)
|
||||
(typeattributeset file_type guix_daemon_conf_t)
|
||||
(type guix_daemon_exec_t)
|
||||
(roletype object_r guix_daemon_exec_t)
|
||||
(typeattributeset file_type guix_daemon_exec_t)
|
||||
(type guix_daemon_socket_t)
|
||||
(roletype object_r guix_daemon_socket_t)
|
||||
(typeattributeset file_type guix_daemon_socket_t)
|
||||
(type guix_store_content_t)
|
||||
(roletype object_r guix_store_content_t)
|
||||
(typeattributeset file_type guix_store_content_t)
|
||||
(type guix_profiles_t)
|
||||
(roletype object_r guix_profiles_t)
|
||||
(typeattributeset file_type guix_profiles_t)
|
||||
|
||||
;; These types are domains, thereby allowing process rules
|
||||
(typeattributeset domain (guix_daemon_t guix_daemon_exec_t))
|
||||
@@ -76,33 +55,6 @@
|
||||
(typetransition guix_store_content_t guix_daemon_exec_t
|
||||
process guix_daemon_t)
|
||||
|
||||
(roletype system_r guix_daemon_t)
|
||||
|
||||
;; allow init_t to read and execute guix files
|
||||
(allow init_t
|
||||
guix_profiles_t
|
||||
(lnk_file (read)))
|
||||
(allow init_t
|
||||
guix_daemon_exec_t
|
||||
(file (execute)))
|
||||
(allow init_t
|
||||
guix_daemon_t
|
||||
(process (transition)))
|
||||
(allow init_t
|
||||
guix_store_content_t
|
||||
(lnk_file (read)))
|
||||
(allow init_t
|
||||
guix_store_content_t
|
||||
(file (open read execute)))
|
||||
(allow init_t
|
||||
guix_profiles_t
|
||||
(dir (setattr)))
|
||||
|
||||
;; guix-daemon needs to know the names of users
|
||||
(allow guix_daemon_t
|
||||
passwd_file_t
|
||||
(file (getattr open read)))
|
||||
|
||||
;; Permit communication with NSCD
|
||||
(allow guix_daemon_t
|
||||
nscd_var_run_t
|
||||
@@ -119,46 +71,25 @@
|
||||
(allow guix_daemon_t
|
||||
nscd_t
|
||||
(unix_stream_socket (connectto)))
|
||||
(allow guix_daemon_t nscd_t
|
||||
(nscd (getgrp gethost getpwd getserv shmemgrp shmemhost shmempwd shmemserv)))
|
||||
|
||||
;; permit downloading packages via HTTP(s)
|
||||
(allow guix_daemon_t http_port_t
|
||||
(tcp_socket (name_connect)))
|
||||
(allow guix_daemon_t ftp_port_t
|
||||
(tcp_socket (name_connect)))
|
||||
(allow guix_daemon_t ephemeral_port_t
|
||||
(tcp_socket (name_connect)))
|
||||
|
||||
;; Permit logging and temp file access
|
||||
(allow guix_daemon_t
|
||||
tmp_t
|
||||
(lnk_file (create rename setattr unlink)))
|
||||
(lnk_file (setattr unlink)))
|
||||
(allow guix_daemon_t
|
||||
tmp_t
|
||||
(file (link
|
||||
rename create execute execute_no_trans write
|
||||
unlink setattr map relabelto relabelfrom)))
|
||||
(allow guix_daemon_t
|
||||
tmp_t
|
||||
(fifo_file (open read write create getattr ioctl setattr unlink)))
|
||||
(allow guix_daemon_t
|
||||
tmp_t
|
||||
(dir (create rename
|
||||
rmdir relabelto relabelfrom reparent
|
||||
(dir (create
|
||||
rmdir
|
||||
add_name remove_name
|
||||
open read write
|
||||
getattr setattr
|
||||
search)))
|
||||
(allow guix_daemon_t
|
||||
tmp_t
|
||||
(sock_file (create getattr setattr unlink write)))
|
||||
(allow guix_daemon_t
|
||||
var_log_t
|
||||
(file (create getattr open write)))
|
||||
(allow guix_daemon_t
|
||||
var_log_t
|
||||
(dir (getattr create write add_name)))
|
||||
(dir (getattr write add_name)))
|
||||
(allow guix_daemon_t
|
||||
var_run_t
|
||||
(lnk_file (read)))
|
||||
@@ -169,29 +100,15 @@
|
||||
;; Spawning processes, execute helpers
|
||||
(allow guix_daemon_t
|
||||
self
|
||||
(process (fork execmem setrlimit setpgid setsched)))
|
||||
(process (fork)))
|
||||
(allow guix_daemon_t
|
||||
guix_daemon_exec_t
|
||||
(file (execute
|
||||
execute_no_trans read write open entrypoint map
|
||||
getattr link unlink)))
|
||||
;; Needed to execute the 'newgidmap' helper.
|
||||
(allow guix_daemon_t
|
||||
bin_t
|
||||
(file (execute execute_no_trans map)))
|
||||
|
||||
;; Remounting /gnu/store read-write.
|
||||
(allow guix_daemon_t
|
||||
fs_t
|
||||
(filesystem (remount)))
|
||||
(file (execute execute_no_trans read open)))
|
||||
|
||||
;; TODO: unknown
|
||||
(allow guix_daemon_t
|
||||
root_t
|
||||
(dir (mounton)))
|
||||
(allow init_t
|
||||
guix_daemon.guix_store_content_t
|
||||
(dir (mounton)))
|
||||
(allow guix_daemon_t
|
||||
fs_t
|
||||
(filesystem (getattr)))
|
||||
@@ -202,54 +119,38 @@
|
||||
;; Build isolation
|
||||
(allow guix_daemon_t
|
||||
guix_store_content_t
|
||||
(file (ioctl mounton)))
|
||||
(file (mounton)))
|
||||
(allow guix_store_content_t
|
||||
fs_t
|
||||
(filesystem (associate)))
|
||||
(allow guix_daemon_t
|
||||
guix_store_content_t
|
||||
(dir (read mounton)))
|
||||
(dir (mounton)))
|
||||
(allow guix_daemon_t
|
||||
guix_daemon_t
|
||||
(capability (net_admin
|
||||
fsetid fowner
|
||||
chown setuid setgid
|
||||
dac_override dac_read_search
|
||||
sys_chroot
|
||||
sys_admin)))
|
||||
sys_chroot)))
|
||||
(allow guix_daemon_t
|
||||
fs_t
|
||||
(filesystem (unmount)))
|
||||
(allow guix_daemon_t
|
||||
devpts_t
|
||||
(dir (search)))
|
||||
(allow guix_daemon_t
|
||||
devpts_t
|
||||
(filesystem (mount)))
|
||||
(allow guix_daemon_t
|
||||
devpts_t
|
||||
(chr_file (ioctl open read write setattr getattr)))
|
||||
(chr_file (setattr getattr)))
|
||||
(allow guix_daemon_t
|
||||
tmpfs_t
|
||||
(filesystem (getattr mount)))
|
||||
(filesystem (mount)))
|
||||
(allow guix_daemon_t
|
||||
tmpfs_t
|
||||
(file (create open read unlink write)))
|
||||
(allow guix_daemon_t ;same as above, but with tmp_t
|
||||
tmp_t
|
||||
(file (create open read unlink write)))
|
||||
(allow guix_daemon_t
|
||||
tmpfs_t
|
||||
(dir (getattr add_name remove_name write)))
|
||||
(dir (getattr)))
|
||||
(allow guix_daemon_t
|
||||
proc_t
|
||||
(file (getattr open read)))
|
||||
(allow guix_daemon_t
|
||||
proc_t
|
||||
(dir (read)))
|
||||
(allow guix_daemon_t
|
||||
proc_t
|
||||
(filesystem (associate mount)))
|
||||
(filesystem (mount)))
|
||||
(allow guix_daemon_t
|
||||
null_device_t
|
||||
(chr_file (getattr open read write)))
|
||||
@@ -278,7 +179,7 @@
|
||||
search rename
|
||||
add_name remove_name
|
||||
open write
|
||||
rmdir relabelfrom)))
|
||||
rmdir)))
|
||||
(allow guix_daemon_t
|
||||
guix_store_content_t
|
||||
(file (create
|
||||
@@ -288,8 +189,7 @@
|
||||
link unlink
|
||||
map
|
||||
rename
|
||||
append
|
||||
open read write relabelfrom)))
|
||||
open read write)))
|
||||
(allow guix_daemon_t
|
||||
guix_store_content_t
|
||||
(lnk_file (create
|
||||
@@ -297,50 +197,30 @@
|
||||
link unlink
|
||||
read
|
||||
rename)))
|
||||
(allow guix_daemon_t
|
||||
guix_store_content_t
|
||||
(fifo_file (create getattr open read unlink write)))
|
||||
(allow guix_daemon_t
|
||||
guix_store_content_t
|
||||
(sock_file (create getattr setattr unlink write)))
|
||||
|
||||
;; Access to run state directories
|
||||
(allow guix_daemon_t
|
||||
system_dbusd_var_run_t
|
||||
(dir (search)))
|
||||
(allow guix_daemon_t
|
||||
init_var_run_t
|
||||
(dir (search)))
|
||||
|
||||
;; Access to configuration files and directories
|
||||
(allow guix_daemon_t
|
||||
guix_daemon_conf_t
|
||||
(dir (search create
|
||||
(dir (search
|
||||
setattr getattr
|
||||
add_name remove_name
|
||||
open read write)))
|
||||
(allow guix_daemon_t
|
||||
guix_daemon_conf_t
|
||||
(file (create rename
|
||||
(file (create
|
||||
lock
|
||||
map
|
||||
getattr setattr
|
||||
unlink
|
||||
open read write append)))
|
||||
open read write)))
|
||||
(allow guix_daemon_t
|
||||
guix_daemon_conf_t
|
||||
(lnk_file (create getattr rename unlink read)))
|
||||
(allow guix_daemon_t net_conf_t
|
||||
(file (getattr open read)))
|
||||
(allow guix_daemon_t net_conf_t
|
||||
(lnk_file (read)))
|
||||
(allow guix_daemon_t NetworkManager_var_run_t
|
||||
(dir (search)))
|
||||
(lnk_file (create getattr rename unlink)))
|
||||
|
||||
;; Access to profiles
|
||||
(allow guix_daemon_t
|
||||
guix_profiles_t
|
||||
(dir (search getattr setattr read write open create add_name)))
|
||||
(dir (getattr setattr read open)))
|
||||
(allow guix_daemon_t
|
||||
guix_profiles_t
|
||||
(lnk_file (read getattr)))
|
||||
@@ -353,33 +233,8 @@
|
||||
(allow guix_daemon_t
|
||||
user_home_t
|
||||
(dir (search)))
|
||||
(allow guix_daemon_t
|
||||
cache_home_t
|
||||
(dir (search)))
|
||||
(allow guix_daemon_t
|
||||
cache_home_t
|
||||
(lnk_file (getattr read)))
|
||||
|
||||
;; self upgrades
|
||||
(allow guix_daemon_t
|
||||
self
|
||||
(dir (add_name write)))
|
||||
(allow guix_daemon_t
|
||||
self
|
||||
(netlink_route_socket (bind create getattr nlmsg_read read write getopt)))
|
||||
|
||||
;; Allow use of user namespaces
|
||||
(allow guix_daemon_t
|
||||
self
|
||||
(cap_userns (setgid sys_admin net_admin sys_chroot)))
|
||||
(allow guix_daemon_t
|
||||
self
|
||||
(user_namespace (create)))
|
||||
|
||||
;; Socket operations
|
||||
(allow guix_daemon_t
|
||||
guix_daemon_socket_t
|
||||
(sock_file (unlink write)))
|
||||
(allow guix_daemon_t
|
||||
init_t
|
||||
(fd (use)))
|
||||
@@ -391,103 +246,19 @@
|
||||
(unix_stream_socket (listen)))
|
||||
(allow guix_daemon_t
|
||||
guix_daemon_conf_t
|
||||
(sock_file (create unlink write)))
|
||||
(sock_file (create unlink)))
|
||||
(allow guix_daemon_t
|
||||
self
|
||||
(unix_stream_socket (create
|
||||
read write
|
||||
connect bind accept
|
||||
getopt setopt)))
|
||||
(allow guix_daemon_t
|
||||
self
|
||||
(tcp_socket (accept listen bind connect create setopt getopt getattr ioctl read write shutdown)))
|
||||
(allow guix_daemon_t
|
||||
unreserved_port_t
|
||||
(tcp_socket (name_bind name_connect accept listen)))
|
||||
(allow guix_daemon_t
|
||||
self
|
||||
(udp_socket (connect getattr bind getopt setopt read write)))
|
||||
(allow guix_daemon_t
|
||||
self
|
||||
(fifo_file (write read)))
|
||||
(allow guix_daemon_t
|
||||
self
|
||||
(udp_socket (ioctl create)))
|
||||
(allow guix_daemon_t
|
||||
self
|
||||
(unix_stream_socket (connectto)))
|
||||
(allow guix_daemon_t
|
||||
self
|
||||
(unix_dgram_socket (create bind connect sendto read write)))
|
||||
|
||||
;; For some esoteric build jobs (i.e. running PostgreSQL, etc).
|
||||
(allow guix_daemon_t
|
||||
self
|
||||
(capability (kill)))
|
||||
(allow guix_daemon_t
|
||||
node_t
|
||||
(tcp_socket (node_bind)))
|
||||
(allow guix_daemon_t
|
||||
node_t
|
||||
(udp_socket (node_bind)))
|
||||
(allow guix_daemon_t
|
||||
port_t
|
||||
(tcp_socket (name_connect)))
|
||||
(allow guix_daemon_t
|
||||
tmpfs_t
|
||||
(file (map read write link getattr)))
|
||||
(allow guix_daemon_t
|
||||
usermodehelper_t
|
||||
(file (read)))
|
||||
(allow guix_daemon_t
|
||||
hugetlbfs_t
|
||||
(file (map read write)))
|
||||
(allow guix_daemon_t
|
||||
proc_net_t
|
||||
(file (read)))
|
||||
(allow guix_daemon_t
|
||||
postgresql_port_t
|
||||
(tcp_socket (name_connect name_bind)))
|
||||
(allow guix_daemon_t
|
||||
rtp_media_port_t
|
||||
(udp_socket (name_bind)))
|
||||
(allow guix_daemon_t
|
||||
vnc_port_t
|
||||
(tcp_socket (name_bind)))
|
||||
|
||||
;; 'guix gc' needs to go through /proc entries for all processes that are
|
||||
;; running. Strictly speaking, it means guix-daemon needs access to all
|
||||
;; process types in the SELinux policy. In practice, only processes from
|
||||
;; programs in the /gnu/store are relevant for finding roots for garbage
|
||||
;; collection. Since Guix currently doesn't install any SELinux policy for
|
||||
;; its packages, we can assume that all the processes it needs to access run
|
||||
;; as unconfined_t.
|
||||
;;
|
||||
;; FIXME: This doesn't stop 'guix gc' from generating a lot of unnecessary
|
||||
;; AVC denied audit messages. Perhaps guix-daemon could test whether it has
|
||||
;; access to the proc entry before trying to access it?
|
||||
(allow guix_daemon_t
|
||||
unconfined_t
|
||||
(dir (search)))
|
||||
(allow guix_daemon_t
|
||||
unconfined_t
|
||||
(file (read)))
|
||||
(allow guix_daemon_t
|
||||
unconfined_t
|
||||
(lnk_file (read)))
|
||||
|
||||
;; I guess sometimes it needs random numbers
|
||||
(allow guix_daemon_t
|
||||
random_device_t
|
||||
(chr_file (read)))
|
||||
|
||||
;; guix system vm
|
||||
(allow guix_daemon_t
|
||||
kvm_device_t
|
||||
(chr_file (ioctl open read write)))
|
||||
(allow guix_daemon_t
|
||||
kernel_t
|
||||
(system (ipc_info)))
|
||||
|
||||
;; Label file system
|
||||
(filecon "@guix_sysconfdir@/guix(/.*)?"
|
||||
@@ -504,11 +275,11 @@
|
||||
any (unconfined_u object_r guix_store_content_t (low low)))
|
||||
(filecon "@prefix@/bin/guix-daemon"
|
||||
file (system_u object_r guix_daemon_exec_t (low low)))
|
||||
(filecon "@guix_localstatedir@/guix/profiles/per-user/[^/]+/current-guix/bin/guix-daemon"
|
||||
file (system_u object_r guix_daemon_exec_t (low low)))
|
||||
(filecon "@storedir@/.+-(guix-.+|profile)/bin/guix-daemon"
|
||||
file (system_u object_r guix_daemon_exec_t (low low)))
|
||||
(filecon "@storedir@/[a-z0-9]+-guix-daemon"
|
||||
(filecon "@storedir@/.+-(guix-.+|profile)/libexec/guix-authenticate"
|
||||
file (system_u object_r guix_daemon_exec_t (low low)))
|
||||
(filecon "@storedir@/.+-(guix-.+|profile)/libexec/guix/(.*)?"
|
||||
any (system_u object_r guix_daemon_exec_t (low low)))
|
||||
(filecon "@guix_localstatedir@/guix/daemon-socket/socket"
|
||||
any (system_u object_r guix_daemon_socket_t (low low))))
|
||||
|
||||
@@ -7,4 +7,4 @@ start on runlevel [2345]
|
||||
|
||||
stop on runlevel [016]
|
||||
|
||||
exec @localstatedir@/guix/profiles/per-user/root/current-guix/bin/guix-daemon --build-users-group=guixbuild --discover=no --substitute-urls='@GUIX_SUBSTITUTE_URLS@'
|
||||
exec @localstatedir@/guix/profiles/per-user/root/current-guix/bin/guix-daemon --build-users-group=guixbuild
|
||||
|
||||
@@ -5,51 +5,12 @@
|
||||
[Unit]
|
||||
Description=Build daemon for GNU Guix
|
||||
|
||||
# Start before 'gnu-store.mount' to get a writable view of the store.
|
||||
Before=gnu-store.mount
|
||||
|
||||
[Service]
|
||||
ExecStart=@localstatedir@/guix/profiles/per-user/root/current-guix/bin/guix-daemon \
|
||||
--discover=no \
|
||||
--substitute-urls='@GUIX_SUBSTITUTE_URLS@'
|
||||
Environment='GUIX_STATE_DIRECTORY=@localstatedir@/guix' 'GUIX_LOCPATH=@localstatedir@/guix/profiles/per-user/root/guix-profile/lib/locale' LC_ALL=en_US.utf8
|
||||
|
||||
# Stop the gnu-store.mount so that the daemon can capture the store as
|
||||
# read-write in its private mount namespace.
|
||||
# See <https://codeberg.org/guix/guix/issues/4744>.
|
||||
ExecStartPre=-+systemctl stop gnu-store.mount
|
||||
ExecStartPost=-+systemctl start gnu-store.mount --no-block
|
||||
|
||||
# Run under a dedicated unprivileged user account.
|
||||
User=guix-daemon
|
||||
|
||||
# Bind-mount the store read-write in a private namespace, to counter the
|
||||
# effect of 'gnu-store.mount'.
|
||||
PrivateMounts=true
|
||||
BindPaths=@storedir@
|
||||
# Disable host file system mount propagation to keep service view of the
|
||||
# store read-write after 'gnu-store.mount' makes it read-only system-wide.
|
||||
MountFlags=private
|
||||
# Mitigate race condition between guix-daemon and 'gnu-store.mount'.
|
||||
# Dependent units will only start after daemon binary is started AND THUS
|
||||
# the mount point is acquired in a private namespace.
|
||||
Type=exec
|
||||
|
||||
# Provide the CAP_CHOWN capability so that guix-daemon can create and chown
|
||||
# /var/guix/profiles/per-user/$USER and also chown failed build directories
|
||||
# when using '--keep-failed'. Note that guix-daemon explicitly drops ambient
|
||||
# capabilities before executing build processes so they don't inherit them.
|
||||
AmbientCapabilities=CAP_CHOWN
|
||||
|
||||
StandardOutput=journal
|
||||
StandardError=journal
|
||||
|
||||
# Work around a nasty systemd ‘feature’ that kills the entire process tree
|
||||
# (including the daemon!) if any child, such as cc1plus, runs out of memory.
|
||||
OOMPolicy=continue
|
||||
|
||||
# Despite the name, this is rate-limited: a broken daemon will eventually fail.
|
||||
Restart=always
|
||||
ExecStart=@localstatedir@/guix/profiles/per-user/root/current-guix/bin/guix-daemon --build-users-group=guixbuild
|
||||
Environment=GUIX_LOCPATH=@localstatedir@/guix/profiles/per-user/root/guix-profile/lib/locale
|
||||
RemainAfterExit=yes
|
||||
StandardOutput=syslog
|
||||
StandardError=syslog
|
||||
|
||||
# See <https://lists.gnu.org/archive/html/guix-devel/2016-04/msg00608.html>.
|
||||
# Some package builds (for example, go@1.8.1) may require even more than
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
# This is a "service unit file" for the systemd init system to perform a
|
||||
# one-shot 'guix gc' operation. It is meant to be triggered by a timer.
|
||||
# Drop it in /etc/systemd/system or similar together with 'guix-gc.timer'
|
||||
# to set it up.
|
||||
|
||||
[Unit]
|
||||
Description=Discard unused Guix store items
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
# Customize the 'guix gc' arguments to fit your needs.
|
||||
ExecStart=@localstatedir@/guix/profiles/per-user/root/current-guix/bin/guix gc -d 1m -F 10G
|
||||
PrivateDevices=yes
|
||||
PrivateNetwork=yes
|
||||
PrivateUsers=no
|
||||
ProtectKernelTunables=yes
|
||||
ProtectKernelModules=yes
|
||||
ProtectControlGroups=yes
|
||||
MemoryDenyWriteExecute=yes
|
||||
SystemCallFilter=@default @file-system @basic-io @system-service
|
||||
@@ -1,15 +0,0 @@
|
||||
# This is a "timer unit file" for the systemd init system to trigger
|
||||
# 'guix-gc.service' periodically. Drop it in /etc/systemd/system or similar
|
||||
# together with 'guix-gc.service' to set it up.
|
||||
|
||||
[Unit]
|
||||
Description=Discard unused Guix store items
|
||||
|
||||
[Timer]
|
||||
OnCalendar=weekly
|
||||
AccuracySec=1h
|
||||
Persistent=true
|
||||
RandomizedDelaySec=6000
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
+140
-855
File diff suppressed because it is too large
Load Diff
@@ -4,18 +4,13 @@
|
||||
|
||||
[Unit]
|
||||
Description=Publish the GNU Guix store
|
||||
Requires=guix-daemon.service
|
||||
PartOf=guix-daemon.service
|
||||
After=guix-daemon.service
|
||||
|
||||
[Service]
|
||||
ExecStart=@localstatedir@/guix/profiles/per-user/root/current-guix/bin/guix publish --user=nobody --port=8181
|
||||
Environment='GUIX_LOCPATH=@localstatedir@/guix/profiles/per-user/root/guix-profile/lib/locale' LC_ALL=en_US.utf8
|
||||
StandardOutput=journal
|
||||
StandardError=journal
|
||||
|
||||
# Despite the name, this is rate-limited: a broken daemon will eventually fail.
|
||||
Restart=always
|
||||
Environment=GUIX_LOCPATH=@localstatedir@/guix/profiles/per-user/root/guix-profile/lib/locale
|
||||
RemainAfterExit=yes
|
||||
StandardOutput=syslog
|
||||
StandardError=syslog
|
||||
|
||||
# See <https://lists.gnu.org/archive/html/guix-devel/2016-04/msg00608.html>.
|
||||
TasksMax=1024
|
||||
|
||||
@@ -1,179 +0,0 @@
|
||||
;; List of "historical" committers---people once authorized committers before
|
||||
;; the '.guix-authorizations' file was created.
|
||||
;;
|
||||
;; This file is provided for historical and auditing purposes. It is known
|
||||
;; good starting at least at 'v1.0.0'.
|
||||
;;
|
||||
;; The format is the same as for '.guix-authorizations'. User names are those
|
||||
;; found on <https://savannah.gnu.org/project/memberlist.php?group=guix> along
|
||||
;; with the fingerprint of the signing (sub)key.
|
||||
|
||||
(authorizations
|
||||
(version 0)
|
||||
|
||||
(("AD17 A21E F8AE D8F1 CC02 DBD9 F7D5 C9BF 765C 61E3"
|
||||
(name "andreas"))
|
||||
("2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5"
|
||||
(name "ajgrf"))
|
||||
("306F CB8F 2C01 C25D 29D3 0556 61EF 502E F602 52F2"
|
||||
(name "alexvong1995"))
|
||||
("4FB9 9F49 2B12 A365 7997 E664 8246 0C08 2A0E E98F"
|
||||
(name "alezost"))
|
||||
("50F3 3E2E 5B0C 3D90 0424 ABE8 9BDC F497 A4BB CC7F"
|
||||
(name "ambrevar"))
|
||||
("27D5 86A4 F890 0854 329F F09F 1260 E464 82E6 3562"
|
||||
(name "apteryx"))
|
||||
("7F73 0343 F2F0 9F3C 77BF 79D3 2E25 EE8B 6180 2BB3"
|
||||
(name "arunisaac"))
|
||||
(;; primary: "3B12 9196 AE30 0C3C 0E90 A26F A715 5567 3271 9948"
|
||||
"9A2B 401E D001 0650 1584 BAAC 8BC4 F447 6E8A 8E00"
|
||||
(name "atheia"))
|
||||
(;; primary: "BE62 7373 8E61 6D6D 1B3A 08E8 A21A 0202 4881 6103"
|
||||
"39B3 3C8D 9448 0D2D DCC2 A498 8B44 A0CD C7B9 56F2"
|
||||
(name "bandali"))
|
||||
(;; primary: "34FF 38BC D151 25A6 E340 A0B5 3453 2F9F AFCA 8B8E"
|
||||
"A0C5 E352 2EF8 EF5C 64CD B7F0 FD73 CAC7 19D3 2566"
|
||||
(name "bavier"))
|
||||
("3774 8024 880F D3FF DCA2 C9AB 5893 6E0E 2F1B 5A4C"
|
||||
(name "beffa"))
|
||||
("BCF8 F737 2CED 080A 67EB 592D 2A6A D9F4 AAC2 0DF6"
|
||||
(name "benwoodcroft"))
|
||||
("45CC 63B8 5258 C9D5 5F34 B239 D37D 0EA7 CECC 3912"
|
||||
(name "biscuolo"))
|
||||
("7988 3B9F 7D6A 4DBF 3719 0367 2506 A96C CF63 0B21"
|
||||
(name "boskovits"))
|
||||
("DFC0 C7F7 9EE6 0CA7 AE55 5E19 6722 43C4 A03F 0EEE"
|
||||
(name "brettgilio"))
|
||||
(;; primary: "0401 7A2A 6D9A 0CCD C81D 8EC2 96AB 007F 1A7E D999"
|
||||
"09CD D25B 5244 A376 78F6 EEA8 0CC5 2153 1979 91A5"
|
||||
(name "carl"))
|
||||
("3E89 EEE7 458E 720D 9754 E0B2 5E28 A33B 0B84 F577"
|
||||
(name "cbaines"))
|
||||
("3CE4 6455 8A84 FDC6 9DB4 0CFB 090B 1199 3D9A EBB5"
|
||||
(name "civodul"))
|
||||
("510A 8628 E2A7 7678 8F8C 709C 4BC0 2592 5FF8 F4D3"
|
||||
(name "cwebber"))
|
||||
(;; primary: "295A F991 6F46 F8A1 34B0 29DA 8086 3842 F0FE D83B"
|
||||
"76CE C6B1 7274 B465 C02D B3D9 E71A 3554 2C30 BAA5"
|
||||
(name "dannym"))
|
||||
("B3C0 DB4D AD73 BA5D 285E 19AE 5143 0234 CEFD 87C3"
|
||||
(name "davexunit"))
|
||||
( ;FIXME: to be confirmed!
|
||||
"8CCB A7F5 52B9 CBEA E1FB 2915 8328 C747 0FF1 D807"
|
||||
(name "davexunit (2nd)"))
|
||||
("53C4 1E6E 41AA FE55 335A CA5E 446A 2ED4 D940 BF14"
|
||||
(name "daviwil"))
|
||||
("6909 6DFD D702 8BED ACC5 884B C5E0 51C7 9C0B ECDB"
|
||||
(name "dvc"))
|
||||
("5F43 B681 0437 2F4B A898 A64B 33B9 E9FD E28D 2C23"
|
||||
(name "dvc (old)"))
|
||||
("A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351"
|
||||
(name "efraim"))
|
||||
("9157 41FE B22F A4E3 3B6E 8F8D F4C1 D391 7EAC EE93"
|
||||
(name "efraim (old)"))
|
||||
(;; primary: "2453 02B1 BAB1 F867 FDCA 96BC 8F3F 861F 82EB 7A9A"
|
||||
"CBC5 9C66 EC27 B971 7940 6B3E 6BE8 208A DF21 FE3F"
|
||||
(name "glv"))
|
||||
("2219 43F4 9E9F 276F 9499 3382 BF28 6CB6 593E 5FFD"
|
||||
(name "hoebjo"))
|
||||
("B943 509D 633E 80DD 27FC 4EED 634A 8DFF D3F6 31DF"
|
||||
(name "htgoebel"))
|
||||
("7440 26BA 7CA3 C668 E940 1D53 0B43 1E98 3705 6942"
|
||||
(name "ipetkov"))
|
||||
(;; primary: "66A5 6D9C 9A98 BE7F 719A B401 2652 5665 AE72 7D37"
|
||||
"0325 78A6 8298 94E7 2AA2 66F5 D415 BF25 3B51 5976"
|
||||
(name "iyzsong"))
|
||||
|
||||
;; https://lists.gnu.org/archive/html/guix-devel/2018-04/msg00229.html
|
||||
("DB34 CB51 D25C 9408 156F CDD6 A12F 8797 8D70 1B99"
|
||||
(name "janneke (old)"))
|
||||
("1A85 8392 E331 EAFD B8C2 7FFB F3C1 A0D9 C1D6 5273"
|
||||
(name "janneke"))
|
||||
|
||||
(;; primary: "1BA4 08C5 8BF2 0EA7 3179 635A 865D C0A3 DED9 B5D0"
|
||||
"E31D 9DDE EBA5 4A14 8A20 4550 DA45 97F9 47B4 1025"
|
||||
(name "jlicht"))
|
||||
("8797 A26D 0854 2EAB 0285 A290 8A67 719C 2DE8 27B3"
|
||||
(name "jmd"))
|
||||
("83B6 703A DCCA 3B69 4BCE 2DA6 E6A5 EE3C 1946 7A0D"
|
||||
(name "kkebreau"))
|
||||
("45E5 75FA 53EA 8BD6 1BCE 0B4E 3ADC 75F0 13D6 78F9"
|
||||
(name "leungbk"))
|
||||
(;; primary: "4F71 6F9A 8FA2 C80E F1B5 E1BA 5E35 F231 DE1A C5E0"
|
||||
"B051 5948 F1E7 D3C1 B980 38A0 2646 FA30 BACA 7F08"
|
||||
(name "lfam"))
|
||||
("2AE3 1395 932B E642 FC0E D99C 9BED 6EDA 32E5 B0BC"
|
||||
(name "lsl88"))
|
||||
("CBF5 9755 CBE7 E7EF EF18 3FB1 DD40 9A15 D822 469D"
|
||||
(name "marusich"))
|
||||
("BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"
|
||||
(name "mbakke"))
|
||||
("D919 0965 CE03 199E AF28 B3BE 7CEF 2984 7562 C516"
|
||||
(name "mhw"))
|
||||
("4008 6A7E 0252 9B60 31FB 8607 8354 7635 3176 9CA6"
|
||||
(name "mothacehe"))
|
||||
("F2A3 8D7E EB2B 6640 5761 070D 0ADE E100 9460 4D37"
|
||||
(name "mthl"))
|
||||
(;; primary: "F5BC 5534 C36F 0087 B39D 36EF 1C9D C4FE B9DB 7C4B"
|
||||
"F5DA 2032 4B87 3D0B 7A38 7672 0DB0 FF88 4F55 6D79"
|
||||
(name "nckx"))
|
||||
(;; primary: "F5BC 5534 C36F 0087 B39D 36EF 1C9D C4FE B9DB 7C4B"
|
||||
"7E8F AED0 0944 78EF 72E6 4D16 D889 B0F0 18C5 493C"
|
||||
(name "nckx (revoked; not compromised)"))
|
||||
("E576 BFB2 CF6E B13D F571 33B9 E315 A758 4613 1564"
|
||||
(name "niedzejkob"))
|
||||
("ED0E F1C8 E126 BA83 1B48 5FE9 DA00 B4F0 48E9 2F2D"
|
||||
(name "ngz"))
|
||||
("CEF4 CB91 4856 BA38 0A20 A7E2 3008 88CB 39C6 3817"
|
||||
(name "pelzflorian"))
|
||||
(;; primary: "B68B DF22 73F9 DA0E 63C1 8A32 515B F416 9242 D600"
|
||||
"C699 ED09 E51B CE89 FD1D A078 AAC7 E891 896B 568A"
|
||||
(name "pgarlick"))
|
||||
("3A86 380E 58A8 B942 8D39 60E1 327C 1EF3 8DF5 4C32"
|
||||
(name "phant0mas"))
|
||||
("74D6 A930 F44B 9B84 9EA5 5606 C166 AA49 5F7F 189C"
|
||||
(name "reepca"))
|
||||
("BCA6 89B6 3655 3801 C3C6 2150 197A 5888 235F ACAC"
|
||||
(name "rekado"))
|
||||
("0154 E1B9 1CC9 D9EF 7764 8DE7 F3A7 27DB 44FC CA36"
|
||||
(name "rhelling"))
|
||||
("17CB 2812 EB63 3DFF 2C7F 0452 C3EC 1DCA 8430 72E1"
|
||||
(name "roelj (old)"))
|
||||
(;; From commit cc51c03ff867d4633505354819c6d88af88bf919 (March 2020).
|
||||
;; See <https://lists.gnu.org/archive/html/guix-devel/2020-03/msg00070.html>.
|
||||
"F556 FD94 FB8F 8B87 79E3 6832 CBD0 CD51 38C1 9AFC"
|
||||
(name "roelj"))
|
||||
("B5FA E628 5B41 3728 B2A0 FAED 4311 1F45 2008 6A0C"
|
||||
(name "roptat (old)"))
|
||||
(;; From commit 2cbede5935eb6a40173bbdf30a9ad22bf7574c22 (Jan. 2020). See
|
||||
;; <https://lists.gnu.org/archive/html/guix-devel/2020-01/msg00499.html>.
|
||||
"1EFB 0909 1F17 D28C CBF9 B13A 53D4 57B2 D636 EE82"
|
||||
(name "roptat"))
|
||||
(;; primary: "D6B0 C593 DA8C 5EDC A44C 7A58 C336 91F7 1188 B004"
|
||||
"A02C 2D82 0EF4 B25B A6B5 1D90 2AC6 A5EC 1C35 7C59"
|
||||
(name "samplet"))
|
||||
("77DD AD2D 97F5 31BB C0F3 C7FD DFB5 EB09 AA62 5423"
|
||||
(name "sleep_walker"))
|
||||
("F494 72F4 7A59 00D5 C235 F212 89F9 6D48 08F3 59C7"
|
||||
(name "snape"))
|
||||
("4E26 CCE9 578E 0828 9855 BDD4 1C79 95D2 D5A3 8336"
|
||||
(name "steap"))
|
||||
("9ADE 9ECF 2B19 C180 9C99 5CEA A1F4 CFCC 5283 6BAC"
|
||||
(name "taylanub"))
|
||||
|
||||
;; https://lists.gnu.org/archive/html/guix-devel/2017-03/msg00826.html
|
||||
(;; primary: "1DD1 681F E285 E07F 11DC 0C59 2E15 A6BC D77D 54FD"
|
||||
"3D2C DA58 819C 08C2 A649 D43D 5C3B 064C 724A 5726"
|
||||
(name "thomasd"))
|
||||
("A5C5 92EA 606E 7106 A6A3 BC08 98B2 1575 91E1 2B08"
|
||||
(name "thomasd (old)"))
|
||||
|
||||
("D712 1D73 A40A 7264 9E43 ED7D F284 6B1A 0D32 C442"
|
||||
(name "toothbrush"))
|
||||
("6580 7361 3BFC C5C7 E2E4 5D45 DC51 8FC8 7F97 16AA"
|
||||
(name "vagrantc"))
|
||||
(;; primary: "C955 CC5D C048 7FB1 7966 40A9 199A F6A3 67E9 4ABB"
|
||||
"7238 7123 8EAC EB63 4548 5857 167F 8EA5 001A FA9C"
|
||||
(name "wigust"))
|
||||
("FF47 8FB2 64DE 32EC 2967 25A3 DDC0 F535 8812 F8F2"
|
||||
(name "wingo"))))
|
||||
Executable
+114
@@ -0,0 +1,114 @@
|
||||
#!@EMACS@ --script
|
||||
;;; indent-code.el --- Run Emacs to indent a package definition.
|
||||
|
||||
;; Copyright © 2017 Alex Kost <alezost@gmail.com>
|
||||
;; Copyright © 2017 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This scripts indents the given file or package definition in the specified
|
||||
;; file using Emacs.
|
||||
|
||||
;;; Code:
|
||||
|
||||
;; Load Scheme indentation rules from ".dir-locals.el".
|
||||
(with-temp-buffer
|
||||
(scheme-mode)
|
||||
(let ((default-directory (file-name-as-directory load-file-name))
|
||||
(enable-local-variables :all))
|
||||
(hack-dir-local-variables)
|
||||
(hack-local-variables-apply)))
|
||||
|
||||
;; Add indentation info for Scheme constructs that are not Guix-specific.
|
||||
;; This is normally provided by Geiser but this file is for people who may not
|
||||
;; be running Geiser, so we just copy it here (from 'geiser-syntax.el').
|
||||
(defmacro guix-syntax--scheme-indent (&rest pairs)
|
||||
`(progn ,@(mapcar (lambda (p)
|
||||
`(put ',(car p) 'scheme-indent-function ',(cadr p)))
|
||||
pairs)))
|
||||
|
||||
(guix-syntax--scheme-indent
|
||||
(and-let* 1)
|
||||
(case-lambda 0)
|
||||
(catch defun)
|
||||
(class defun)
|
||||
(dynamic-wind 0)
|
||||
(guard 1)
|
||||
(let*-values 1)
|
||||
(let-values 1)
|
||||
(let/ec 1)
|
||||
(letrec* 1)
|
||||
(match 1)
|
||||
(match-lambda 0)
|
||||
(match-lambda* 0)
|
||||
(match-let scheme-let-indent)
|
||||
(match-let* 1)
|
||||
(match-letrec 1)
|
||||
(opt-lambda 1)
|
||||
(parameterize 1)
|
||||
(parameterize* 1)
|
||||
(receive 2)
|
||||
(require-extension 0)
|
||||
(syntax-case 2)
|
||||
(test-approximate 1)
|
||||
(test-assert 1)
|
||||
(test-eq 1)
|
||||
(test-equal 1)
|
||||
(test-eqv 1)
|
||||
(test-group-with-cleanup 1)
|
||||
(test-runner-on-bad-count! 1)
|
||||
(test-runner-on-bad-end-name! 1)
|
||||
(test-runner-on-final! 1)
|
||||
(test-runner-on-group-begin! 1)
|
||||
(test-runner-on-group-end! 1)
|
||||
(test-runner-on-test-begin! 1)
|
||||
(test-runner-on-test-end! 1)
|
||||
(test-with-runner 1)
|
||||
(unless 1)
|
||||
(when 1)
|
||||
(while 1)
|
||||
(with-exception-handler 1)
|
||||
(with-syntax 1))
|
||||
|
||||
|
||||
(pcase command-line-args-left
|
||||
(`(,file-name ,package-name)
|
||||
;; Indent the definition of PACKAGE-NAME in FILE-NAME.
|
||||
(find-file file-name)
|
||||
(goto-char (point-min))
|
||||
(if (re-search-forward (concat "^(define\\(-public\\) +"
|
||||
package-name)
|
||||
nil t)
|
||||
(let ((indent-tabs-mode nil))
|
||||
(beginning-of-defun)
|
||||
(indent-sexp)
|
||||
(save-buffer)
|
||||
(message "Done!"))
|
||||
(error "Package '%s' not found in '%s'"
|
||||
package-name file-name)))
|
||||
(`(,file-name)
|
||||
;; Indent all of FILE-NAME.
|
||||
(find-file file-name)
|
||||
(let ((indent-tabs-mode nil))
|
||||
(indent-region (point-min) (point-max))
|
||||
(save-buffer)
|
||||
(message "Done!")))
|
||||
(x
|
||||
(error "Usage: indent-code.el FILE [PACKAGE]")))
|
||||
|
||||
;;; indent-code.el ends here
|
||||
@@ -1,80 +0,0 @@
|
||||
#!/bin/bash
|
||||
### BEGIN INIT INFO
|
||||
# Provides: guix-daemon
|
||||
# Required-Start: $remote_fs $syslog
|
||||
# Required-Stop: $remote_fs $syslog
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: Guix build daemon
|
||||
# Description: Provides a daemon that does builds for Guix
|
||||
### END INIT INFO
|
||||
|
||||
set -e
|
||||
mkdir -p "/var/run"
|
||||
if [ ! -f "@localstatedir@/guix/profiles/per-user/root/current-guix/bin/guix-daemon" ]
|
||||
then
|
||||
exit 5
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
if [ -f "/var/run/guix-daemon.pid" ]
|
||||
then
|
||||
if pgrep -F "/var/run/guix-daemon.pid" guix-daemon
|
||||
then
|
||||
exit 0
|
||||
else
|
||||
echo "guix-daemon has a stale pid file" >&2
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
daemonize \
|
||||
-a \
|
||||
-e "/var/log/guix-daemon-stderr.log" \
|
||||
-o "/var/log/guix-daemon-stdout.log" \
|
||||
-E GUIX_LOCPATH=@localstatedir@/guix/profiles/per-user/root/guix-profile/lib/locale \
|
||||
-E LC_ALL=en_US.utf8 \
|
||||
-p "/var/run/guix-daemon.pid" \
|
||||
@localstatedir@/guix/profiles/per-user/root/current-guix/bin/guix-daemon \
|
||||
--build-users-group=guixbuild --discover=no \
|
||||
--substitute-urls='@GUIX_SUBSTITUTE_URLS@'
|
||||
|
||||
fi
|
||||
;;
|
||||
stop)
|
||||
if [ -f "/var/run/guix-daemon.pid" ]
|
||||
then
|
||||
pkill -F "/var/run/guix-daemon.pid" guix-daemon || {
|
||||
exit 1
|
||||
}
|
||||
rm -f "/var/run/guix-daemon.pid"
|
||||
exit 0
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
;;
|
||||
status)
|
||||
if [ -f "/var/run/guix-daemon.pid" ]
|
||||
then
|
||||
if pgrep -F "/var/run/guix-daemon.pid" guix-daemon
|
||||
then
|
||||
echo "guix-daemon is running"
|
||||
exit 0
|
||||
else
|
||||
echo "guix-daemon has a stale pid file"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "guix-daemon is not running"
|
||||
exit 3
|
||||
fi
|
||||
;;
|
||||
restart|force-reload)
|
||||
"$0" stop
|
||||
"$0" start
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 (start|stop|status|restart|force-reload)"
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
@@ -1,170 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2020-2022, 2024 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2020, 2026 Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||
;;; Copyright © 2023 Andreas Enge <andreas@enge.fr>
|
||||
;;; Copyright © 2025 Efraim Flashner <efraim@flashner.co.il>
|
||||
;;;
|
||||
;;; 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 returns a manifest containing packages which should all cross-compile.
|
||||
;;; We use the packages included by default in an OS configuration since that is
|
||||
;;; (probably) the most likely install method for some architectures.
|
||||
|
||||
(use-modules (gnu packages)
|
||||
(guix packages)
|
||||
(guix profiles)
|
||||
(guix platform)
|
||||
((gnu services xorg) #:select (%default-xorg-modules))
|
||||
((gnu system) #:prefix gnu-system:
|
||||
#:select (%base-packages %base-packages-linux))
|
||||
(guix utils)
|
||||
(guix gexp)
|
||||
(srfi srfi-1)
|
||||
(srfi srfi-26))
|
||||
|
||||
(define* (package->manifest-entry* package system
|
||||
#:key target)
|
||||
"Return a manifest entry for PACKAGE on SYSTEM, optionally cross-compiled to
|
||||
TARGET."
|
||||
(manifest-entry
|
||||
(inherit (package->manifest-entry package))
|
||||
(name (string-append (package-name package) "." system
|
||||
(if target
|
||||
(string-append "." target)
|
||||
"'")))
|
||||
(item (with-parameters ((%current-system system)
|
||||
(%current-target-system target))
|
||||
package))))
|
||||
|
||||
(define %base-packages
|
||||
;; Packages that must be substitutable on all the platforms Guix supports.
|
||||
;; Use the %base-packages from (gnu system) since they are included by default
|
||||
;; in the packages field of the operating system configuration.
|
||||
(cons* (specification->package "guix")
|
||||
gnu-system:%base-packages))
|
||||
|
||||
(define %base-packages/hurd
|
||||
;; Remove the packages from %base-packages-linux and some of the packages
|
||||
;; from the other package sets.
|
||||
(fold delete %base-packages
|
||||
(append (map specification->package
|
||||
'("kbd" "iproute2" "iw" "wireless-tools"))
|
||||
%base-packages-linux)))
|
||||
|
||||
(define %system-packages
|
||||
;; Key packages proposed by the Guix System installer.
|
||||
(map specification->package
|
||||
'("openssh" "tor" "ntp" "gpm"
|
||||
"connman" "network-manager" "wpa-supplicant" "isc-dhcp" "cups"
|
||||
"linux-libre" "grub-hybrid")))
|
||||
|
||||
(define (%system-gui-packages target)
|
||||
;; Key packages proposed by the Guix System installer.
|
||||
(append (map specification->package
|
||||
'(;; build system `python' does not support cross builds
|
||||
;"gnome" "xfce" "mate" "openbox"
|
||||
"awesome"
|
||||
"i3-wm" "i3status" "dmenu" "st"
|
||||
"ratpoison" "xterm"
|
||||
;; build system `emacs' does not support cross builds
|
||||
;"emacs-exwm" "emacs-desktop-environment"
|
||||
"emacs"))
|
||||
;; NOTE: %default-xorg-modules depends on system.
|
||||
(parameterize
|
||||
((%current-target-system target))
|
||||
%default-xorg-modules)))
|
||||
|
||||
(define %packages-to-cross-build
|
||||
;; Packages that must be cross-buildable from x86_64-linux.
|
||||
;; FIXME: Add (@ (gnu packages gcc) gcc) when <https://bugs.gnu.org/40463>
|
||||
;; is fixed.
|
||||
(append (list (@ (gnu packages guile) guile-3.0/pinned))
|
||||
(map specification->package
|
||||
'("coreutils" "grep" "sed" "findutils" "diffutils" "patch"
|
||||
"gawk" "gettext" "gzip" "xz" "zstd"
|
||||
"hello" "zlib"))))
|
||||
|
||||
(define %packages-to-cross-build-for-mingw
|
||||
;; Many things don't build for MinGW. Restrict to what's known to work
|
||||
;; to test that the cross-compiler itself works.
|
||||
(map specification->package '("hello")))
|
||||
|
||||
|
||||
;;;
|
||||
;;; Manifests.
|
||||
;;;
|
||||
|
||||
;; As per the Guix Survey of 2024 we only worry about cross compiling from
|
||||
;; x86_64-linux (98% of users) and not from others (aarch64 with 19%).
|
||||
(define %cross-manifest
|
||||
(manifest
|
||||
(append-map (lambda (target)
|
||||
(map (cut package->manifest-entry* <> "x86_64-linux"
|
||||
#:target target)
|
||||
(if (target-mingw? target)
|
||||
%packages-to-cross-build-for-mingw
|
||||
%packages-to-cross-build)))
|
||||
(fold delete (targets)
|
||||
'(;; Disable cross-compilation to self:
|
||||
"x86_64-linux-gnu"
|
||||
|
||||
;; mips64el commonly targets a different architecture
|
||||
;; revision than we targeted in Guix.
|
||||
"mips64el-linux-gnu"
|
||||
|
||||
;; Ignore bare-metal targets.
|
||||
"avr"
|
||||
"or1k-elf"
|
||||
"xtensa-ath9k-elf")))))
|
||||
|
||||
(define %cross-system
|
||||
(manifest
|
||||
(cons*
|
||||
;; Include a couple of extra kernels that are commonly used:
|
||||
(package->manifest-entry* (@ (gnu packages linux)
|
||||
linux-libre-arm64-generic)
|
||||
"x86_64-linux"
|
||||
#:target "aarch64-linux-gnu")
|
||||
(package->manifest-entry* (@ (gnu packages linux)
|
||||
linux-libre-arm-generic)
|
||||
"x86_64-linux"
|
||||
#:target "arm-linux-gnueabihf")
|
||||
(package->manifest-entry* (@ (gnu packages linux)
|
||||
linux-libre-riscv64-generic)
|
||||
"x86_64-linux"
|
||||
#:target "riscv64-linux-gnu")
|
||||
(append-map (lambda (target)
|
||||
(map (cut package->manifest-entry* <> "x86_64-linux"
|
||||
#:target target)
|
||||
(append %base-packages
|
||||
%system-packages
|
||||
;; With a graphical environment:
|
||||
(if (or (target-x86-32? target)
|
||||
(target-aarch64? target))
|
||||
;; %system-gui-packages depends on the system.
|
||||
(%system-gui-packages target)
|
||||
'()))))
|
||||
(fold delete (map platform-system->target (systems))
|
||||
'(;; Disable cross-compilation to self:
|
||||
"x86_64-linux-gnu"
|
||||
|
||||
;; Ignore obsolete systems, as in (gnu ci).
|
||||
"mips64el-linux-gnu"
|
||||
"powerpc-linux-gnu"))))))
|
||||
|
||||
;; Return the union of all the manifests.
|
||||
(concatenate-manifests (list %cross-manifest
|
||||
%cross-system))
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user