gnu: doc: Allow documentation to be translated.
* po/doc/contributing.pot: New file. * po/doc/guix.pot: New file. * po/doc/local.mk: New file. * Makefile.am: Include it. Add gettext command. Add silent rules for po4a. * configure.ac: Look for po4a-translate and po4a-updatepo. * doc/local.mk: Add rules to generate translated texi files. (TRANSLATED_INFO): New variable. (BUILT_SOURCES, EXTRA_DIST, MAINTAINERCLEANFILES): Add it. * .gitignore: Add generated files.
This commit is contained in:
parent
9490c411f0
commit
b9fe8fd662
|
@ -28,6 +28,21 @@
|
||||||
/configure
|
/configure
|
||||||
/doc/*.1
|
/doc/*.1
|
||||||
/doc/.dirstamp
|
/doc/.dirstamp
|
||||||
|
/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.aux
|
||||||
/doc/guix.cp
|
/doc/guix.cp
|
||||||
/doc/guix.cps
|
/doc/guix.cps
|
||||||
|
@ -47,6 +62,7 @@
|
||||||
/doc/os-config-desktop.texi
|
/doc/os-config-desktop.texi
|
||||||
/doc/stamp-vti
|
/doc/stamp-vti
|
||||||
/doc/version.texi
|
/doc/version.texi
|
||||||
|
/doc/version-*.texi
|
||||||
/etc/guix-daemon.cil
|
/etc/guix-daemon.cil
|
||||||
/etc/guix-daemon.conf
|
/etc/guix-daemon.conf
|
||||||
/etc/guix-daemon.service
|
/etc/guix-daemon.service
|
||||||
|
@ -79,6 +95,7 @@
|
||||||
/nix/scripts/list-runtime-roots
|
/nix/scripts/list-runtime-roots
|
||||||
/nix/scripts/offload
|
/nix/scripts/offload
|
||||||
/nix/scripts/substitute
|
/nix/scripts/substitute
|
||||||
|
/po/doc/*.mo
|
||||||
/po/guix/*.gmo
|
/po/guix/*.gmo
|
||||||
/po/guix/*.insert-header
|
/po/guix/*.insert-header
|
||||||
/po/guix/*.mo
|
/po/guix/*.mo
|
||||||
|
|
10
Makefile.am
10
Makefile.am
|
@ -10,6 +10,7 @@
|
||||||
# Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
|
# Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
|
||||||
# Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
|
# Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
|
||||||
# Copyright © 2018 Nils Gillmann <ng0@n0.is>
|
# Copyright © 2018 Nils Gillmann <ng0@n0.is>
|
||||||
|
# Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
|
||||||
#
|
#
|
||||||
# This file is part of GNU Guix.
|
# This file is part of GNU Guix.
|
||||||
#
|
#
|
||||||
|
@ -26,6 +27,8 @@
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
# along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
MSGMERGE_UPDATE = @MSGMERGE@ --update
|
||||||
|
|
||||||
bin_SCRIPTS = scripts/guix
|
bin_SCRIPTS = scripts/guix
|
||||||
|
|
||||||
# Handle substitution of fully-expanded Autoconf variables.
|
# Handle substitution of fully-expanded Autoconf variables.
|
||||||
|
@ -51,6 +54,7 @@ MODULES_NOT_COMPILED = \
|
||||||
guix/man-db.scm
|
guix/man-db.scm
|
||||||
|
|
||||||
include gnu/local.mk
|
include gnu/local.mk
|
||||||
|
include po/doc/local.mk
|
||||||
|
|
||||||
MODULES = \
|
MODULES = \
|
||||||
guix/base16.scm \
|
guix/base16.scm \
|
||||||
|
@ -454,7 +458,7 @@ dist_fishcompletion_DATA = etc/completion/fish/guix.fish
|
||||||
# SELinux policy
|
# SELinux policy
|
||||||
dist_selinux_policy_DATA = etc/guix-daemon.cil
|
dist_selinux_policy_DATA = etc/guix-daemon.cil
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST += \
|
||||||
HACKING \
|
HACKING \
|
||||||
ROADMAP \
|
ROADMAP \
|
||||||
TODO \
|
TODO \
|
||||||
|
@ -792,3 +796,7 @@ AM_V_DOT_0 = @echo " DOT " $@;
|
||||||
AM_V_HELP2MAN = $(AM_V_HELP2MAN_$(V))
|
AM_V_HELP2MAN = $(AM_V_HELP2MAN_$(V))
|
||||||
AM_V_HELP2MAN_ = $(AM_V_HELP2MAN_$(AM_DEFAULT_VERBOSITY))
|
AM_V_HELP2MAN_ = $(AM_V_HELP2MAN_$(AM_DEFAULT_VERBOSITY))
|
||||||
AM_V_HELP2MAN_0 = @echo " HELP2MAN" $@;
|
AM_V_HELP2MAN_0 = @echo " HELP2MAN" $@;
|
||||||
|
|
||||||
|
AM_V_PO4A = $(AM_V_PO4A_$(V))
|
||||||
|
AM_V_PO4A_ = $(AM_V_PO4A_$(AM_DEFAULT_VERBOSITY))
|
||||||
|
AM_V_PO4A_0 = @echo " PO4A" $@;
|
||||||
|
|
|
@ -263,6 +263,10 @@ AM_MISSING_PROG([DOT], [dot])
|
||||||
dnl Manual pages.
|
dnl Manual pages.
|
||||||
AM_MISSING_PROG([HELP2MAN], [help2man])
|
AM_MISSING_PROG([HELP2MAN], [help2man])
|
||||||
|
|
||||||
|
dnl Documentation translation.
|
||||||
|
AM_MISSING_PROG([PO4A_TRANSLATE], [po4a-translate])
|
||||||
|
AM_MISSING_PROG([PO4A_UPDATEPO], [po4a-updatepo])
|
||||||
|
|
||||||
dnl Emacs (optional), for 'etc/indent-package.el'.
|
dnl Emacs (optional), for 'etc/indent-package.el'.
|
||||||
AC_PATH_PROG([EMACS], [emacs], [/usr/bin/emacs])
|
AC_PATH_PROG([EMACS], [emacs], [/usr/bin/emacs])
|
||||||
AC_SUBST([EMACS])
|
AC_SUBST([EMACS])
|
||||||
|
|
48
doc/local.mk
48
doc/local.mk
|
@ -4,6 +4,7 @@
|
||||||
# Copyright © 2013 Andreas Enge <andreas@enge.fr>
|
# Copyright © 2013 Andreas Enge <andreas@enge.fr>
|
||||||
# Copyright © 2016 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
|
# Copyright © 2016 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
|
||||||
# Copyright © 2016, 2018 Mathieu Lirzin <mthl@gnu.org>
|
# Copyright © 2016, 2018 Mathieu Lirzin <mthl@gnu.org>
|
||||||
|
# Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
|
||||||
#
|
#
|
||||||
# This file is part of GNU Guix.
|
# This file is part of GNU Guix.
|
||||||
#
|
#
|
||||||
|
@ -51,10 +52,51 @@ OS_CONFIG_EXAMPLES_TEXI = \
|
||||||
%D%/os-config-desktop.texi \
|
%D%/os-config-desktop.texi \
|
||||||
%D%/os-config-lightweight-desktop.texi
|
%D%/os-config-lightweight-desktop.texi
|
||||||
|
|
||||||
|
TRANSLATED_INFO =
|
||||||
|
|
||||||
# Bundle this file so that makeinfo finds it in out-of-source-tree builds.
|
# Bundle this file so that makeinfo finds it in out-of-source-tree builds.
|
||||||
BUILT_SOURCES += $(OS_CONFIG_EXAMPLES_TEXI)
|
BUILT_SOURCES += $(OS_CONFIG_EXAMPLES_TEXI) $(TRANSLATED_INFO)
|
||||||
EXTRA_DIST += $(OS_CONFIG_EXAMPLES_TEXI)
|
EXTRA_DIST += $(OS_CONFIG_EXAMPLES_TEXI) $(TRANSLATED_INFO)
|
||||||
MAINTAINERCLEANFILES = $(OS_CONFIG_EXAMPLES_TEXI)
|
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 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
|
||||||
|
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
|
||||||
|
|
||||||
|
$(srcdir)/%D%/guix.%.texi: po/doc/guix.%.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"
|
||||||
|
-$(xref_command)
|
||||||
|
-mv "$@.tmp" "$@"
|
||||||
|
|
||||||
|
$(srcdir)/%D%/contributing.%.texi: po/doc/guix.%.po po/doc/contributing.%.po
|
||||||
|
-$(AM_V_PO4A)$(PO4A_TRANSLATE) $(PO4A_PARAMS) -m "%D%/contributing.texi" -p "$(word 2,$^)" -l "$@.tmp"
|
||||||
|
-$(xref_command)
|
||||||
|
-mv "$@.tmp" "$@"
|
||||||
|
|
||||||
%D%/os-config-%.texi: gnu/system/examples/%.tmpl
|
%D%/os-config-%.texi: gnu/system/examples/%.tmpl
|
||||||
$(AM_V_GEN)$(MKDIR_P) "`dirname $@`"; \
|
$(AM_V_GEN)$(MKDIR_P) "`dirname $@`"; \
|
||||||
|
|
|
@ -0,0 +1,962 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE
|
||||||
|
# Copyright (C) YEAR Ludovic Courtès
|
||||||
|
# This file is distributed under the same license as the guix package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: guix 0.14.0.4279-63c2a\n"
|
||||||
|
"Report-Msgid-Bugs-To: ludo@gnu.org\n"
|
||||||
|
"POT-Creation-Date: 2018-04-19 21:17+0200\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"Language: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#. type: chapter
|
||||||
|
#: doc/contributing.texi:1 doc/contributing.texi:2
|
||||||
|
#, no-wrap
|
||||||
|
msgid "Contributing"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:9
|
||||||
|
msgid ""
|
||||||
|
"This project is a cooperative effort, and we need your help to make it grow! "
|
||||||
|
"Please get in touch with us on @email{guix-devel@@gnu.org} and @code{#guix} "
|
||||||
|
"on the Freenode IRC network. We welcome ideas, bug reports, patches, and "
|
||||||
|
"anything that may be helpful to the project. We particularly welcome help "
|
||||||
|
"on packaging (@pxref{Packaging Guidelines})."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: cindex
|
||||||
|
#: doc/contributing.texi:10
|
||||||
|
#, no-wrap
|
||||||
|
msgid "code of conduct, of contributors"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: cindex
|
||||||
|
#: doc/contributing.texi:11
|
||||||
|
#, no-wrap
|
||||||
|
msgid "contributor covenant"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:17
|
||||||
|
msgid ""
|
||||||
|
"We want to provide a warm, friendly, and harassment-free environment, so "
|
||||||
|
"that anyone can contribute to the best of their abilities. To this end our "
|
||||||
|
"project uses a ``Contributor Covenant'', which was adapted from "
|
||||||
|
"@url{http://contributor-covenant.org/}. You can find a local version in the "
|
||||||
|
"@file{CODE-OF-CONDUCT} file in the source tree."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:21
|
||||||
|
msgid ""
|
||||||
|
"Contributors are not required to use their legal name in patches and on-line "
|
||||||
|
"communication; they can use any name or pseudonym of their choice."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: section
|
||||||
|
#: doc/contributing.texi:28 doc/contributing.texi:30 doc/contributing.texi:31
|
||||||
|
#, no-wrap
|
||||||
|
msgid "Building from Git"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: menuentry
|
||||||
|
#: doc/contributing.texi:28
|
||||||
|
msgid "The latest and greatest."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: section
|
||||||
|
#: doc/contributing.texi:28 doc/contributing.texi:102 doc/contributing.texi:103
|
||||||
|
#, no-wrap
|
||||||
|
msgid "Running Guix Before It Is Installed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: menuentry
|
||||||
|
#: doc/contributing.texi:28
|
||||||
|
msgid "Hacker tricks."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: section
|
||||||
|
#: doc/contributing.texi:28 doc/contributing.texi:169 doc/contributing.texi:170
|
||||||
|
#, no-wrap
|
||||||
|
msgid "The Perfect Setup"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: menuentry
|
||||||
|
#: doc/contributing.texi:28
|
||||||
|
msgid "The right tools."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: section
|
||||||
|
#: doc/contributing.texi:28 doc/contributing.texi:228 doc/contributing.texi:229
|
||||||
|
#, no-wrap
|
||||||
|
msgid "Coding Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: menuentry
|
||||||
|
#: doc/contributing.texi:28
|
||||||
|
msgid "Hygiene of the contributor."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: section
|
||||||
|
#: doc/contributing.texi:28 doc/contributing.texi:319 doc/contributing.texi:320
|
||||||
|
#, no-wrap
|
||||||
|
msgid "Submitting Patches"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: menuentry
|
||||||
|
#: doc/contributing.texi:28
|
||||||
|
msgid "Share your work."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:35
|
||||||
|
msgid ""
|
||||||
|
"If you want to hack Guix itself, it is recommended to use the latest version "
|
||||||
|
"from the Git repository:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: example
|
||||||
|
#: doc/contributing.texi:38
|
||||||
|
#, no-wrap
|
||||||
|
msgid "git clone https://git.savannah.gnu.org/git/guix.git\n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:43
|
||||||
|
msgid ""
|
||||||
|
"When building Guix from a checkout, the following packages are required in "
|
||||||
|
"addition to those mentioned in the installation instructions "
|
||||||
|
"(@pxref{Requirements})."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: item
|
||||||
|
#: doc/contributing.texi:45
|
||||||
|
#, no-wrap
|
||||||
|
msgid "@url{http://gnu.org/software/autoconf/, GNU Autoconf};"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: item
|
||||||
|
#: doc/contributing.texi:46
|
||||||
|
#, no-wrap
|
||||||
|
msgid "@url{http://gnu.org/software/automake/, GNU Automake};"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: item
|
||||||
|
#: doc/contributing.texi:47
|
||||||
|
#, no-wrap
|
||||||
|
msgid "@url{http://gnu.org/software/gettext/, GNU Gettext};"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: item
|
||||||
|
#: doc/contributing.texi:48
|
||||||
|
#, no-wrap
|
||||||
|
msgid "@url{http://gnu.org/software/texinfo/, GNU Texinfo};"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: item
|
||||||
|
#: doc/contributing.texi:49
|
||||||
|
#, no-wrap
|
||||||
|
msgid "@url{http://www.graphviz.org/, Graphviz};"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: item
|
||||||
|
#: doc/contributing.texi:50
|
||||||
|
#, no-wrap
|
||||||
|
msgid "@url{http://www.gnu.org/software/help2man/, GNU Help2man (optional)}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:57
|
||||||
|
msgid ""
|
||||||
|
"The easiest way to set up a development environment for Guix is, of course, "
|
||||||
|
"by using Guix! The following command starts a new shell where all the "
|
||||||
|
"dependencies and appropriate environment variables are set up to hack on "
|
||||||
|
"Guix:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: example
|
||||||
|
#: doc/contributing.texi:60
|
||||||
|
#, no-wrap
|
||||||
|
msgid "guix environment guix\n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:64
|
||||||
|
msgid ""
|
||||||
|
"@xref{Invoking guix environment}, for more information on that command. "
|
||||||
|
"Extra dependencies can be added with @option{--ad-hoc}:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: example
|
||||||
|
#: doc/contributing.texi:67
|
||||||
|
#, no-wrap
|
||||||
|
msgid "guix environment guix --ad-hoc help2man git strace\n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:71
|
||||||
|
msgid ""
|
||||||
|
"Run @command{./bootstrap} to generate the build system infrastructure using "
|
||||||
|
"Autoconf and Automake. If you get an error like this one:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: example
|
||||||
|
#: doc/contributing.texi:74
|
||||||
|
#, no-wrap
|
||||||
|
msgid "configure.ac:46: error: possibly undefined macro: PKG_CHECK_MODULES\n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:83
|
||||||
|
msgid ""
|
||||||
|
"it probably means that Autoconf couldn’t find @file{pkg.m4}, which is "
|
||||||
|
"provided by pkg-config. Make sure that @file{pkg.m4} is available. The "
|
||||||
|
"same holds for the @file{guile.m4} set of macros provided by Guile. For "
|
||||||
|
"instance, if you installed Automake in @file{/usr/local}, it wouldn’t look "
|
||||||
|
"for @file{.m4} files in @file{/usr/share}. In that case, you have to invoke "
|
||||||
|
"the following command:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: example
|
||||||
|
#: doc/contributing.texi:86
|
||||||
|
#, no-wrap
|
||||||
|
msgid "export ACLOCAL_PATH=/usr/share/aclocal\n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:90
|
||||||
|
msgid ""
|
||||||
|
"@xref{Macro Search Path,,, automake, The GNU Automake Manual}, for more "
|
||||||
|
"information."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:95
|
||||||
|
msgid ""
|
||||||
|
"Then, run @command{./configure} as usual. Make sure to pass "
|
||||||
|
"@code{--localstatedir=@var{directory}} where @var{directory} is the "
|
||||||
|
"@code{localstatedir} value used by your current installation (@pxref{The "
|
||||||
|
"Store}, for information about this)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:100
|
||||||
|
msgid ""
|
||||||
|
"Finally, you have to invoke @code{make check} to run tests (@pxref{Running "
|
||||||
|
"the Test Suite}). If anything fails, take a look at installation "
|
||||||
|
"instructions (@pxref{Installation}) or send a message to the "
|
||||||
|
"@email{guix-devel@@gnu.org, mailing list}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:109
|
||||||
|
msgid ""
|
||||||
|
"In order to keep a sane working environment, you will find it useful to test "
|
||||||
|
"the changes made in your local source tree checkout without actually "
|
||||||
|
"installing them. So that you can distinguish between your ``end-user'' hat "
|
||||||
|
"and your ``motley'' costume."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:117
|
||||||
|
msgid ""
|
||||||
|
"To that end, all the command-line tools can be used even if you have not run "
|
||||||
|
"@code{make install}. To do that, prefix each command with "
|
||||||
|
"@command{./pre-inst-env} (the @file{pre-inst-env} script lives in the top "
|
||||||
|
"build tree of Guix), 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.}:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: example
|
||||||
|
#: doc/contributing.texi:121
|
||||||
|
#, no-wrap
|
||||||
|
msgid ""
|
||||||
|
"$ sudo -E ./pre-inst-env guix-daemon --build-users-group=guixbuild\n"
|
||||||
|
"$ ./pre-inst-env guix build hello\n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:125
|
||||||
|
msgid "Similarly, for a Guile session using the Guix modules:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: example
|
||||||
|
#: doc/contributing.texi:128
|
||||||
|
#, no-wrap
|
||||||
|
msgid ""
|
||||||
|
"$ ./pre-inst-env guile -c '(use-modules (guix utils)) (pk "
|
||||||
|
"(%current-system))'\n"
|
||||||
|
"\n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: example
|
||||||
|
#: doc/contributing.texi:130
|
||||||
|
#, no-wrap
|
||||||
|
msgid ";;; (\"x86_64-linux\")\n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: cindex
|
||||||
|
#: doc/contributing.texi:133
|
||||||
|
#, no-wrap
|
||||||
|
msgid "REPL"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: cindex
|
||||||
|
#: doc/contributing.texi:134
|
||||||
|
#, no-wrap
|
||||||
|
msgid "read-eval-print loop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:137
|
||||||
|
msgid ""
|
||||||
|
"@dots{} and for a REPL (@pxref{Using Guile Interactively,,, guile, Guile "
|
||||||
|
"Reference Manual}):"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: example
|
||||||
|
#: doc/contributing.texi:152
|
||||||
|
#, no-wrap
|
||||||
|
msgid ""
|
||||||
|
"$ ./pre-inst-env guile\n"
|
||||||
|
"scheme@@(guile-user)> ,use(guix)\n"
|
||||||
|
"scheme@@(guile-user)> ,use(gnu)\n"
|
||||||
|
"scheme@@(guile-user)> (define snakes\n"
|
||||||
|
" (fold-packages\n"
|
||||||
|
" (lambda (package lst)\n"
|
||||||
|
" (if (string-prefix? \"python\"\n"
|
||||||
|
" (package-name package))\n"
|
||||||
|
" (cons package lst)\n"
|
||||||
|
" lst))\n"
|
||||||
|
" '()))\n"
|
||||||
|
"scheme@@(guile-user)> (length snakes)\n"
|
||||||
|
"$1 = 361\n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:156
|
||||||
|
msgid ""
|
||||||
|
"The @command{pre-inst-env} script sets up all the environment variables "
|
||||||
|
"necessary to support this, including @env{PATH} and @env{GUILE_LOAD_PATH}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:167
|
||||||
|
msgid ""
|
||||||
|
"Note that @command{./pre-inst-env guix pull} does @emph{not} upgrade the "
|
||||||
|
"local source tree; it simply updates the @file{~/.config/guix/latest} "
|
||||||
|
"symlink (@pxref{Invoking guix pull}). Run @command{git pull} instead if you "
|
||||||
|
"want to upgrade your local source tree.@footnote{If you would like to set up "
|
||||||
|
"@command{guix} to use your Git checkout, you can point the "
|
||||||
|
"@file{~/.config/guix/latest} symlink to your Git checkout directory. If you "
|
||||||
|
"are the sole user of your system, you may also consider pointing the "
|
||||||
|
"@file{/root/.config/guix/latest} symlink to point to "
|
||||||
|
"@file{~/.config/guix/latest}; this way it will always use the same "
|
||||||
|
"@command{guix} as your user does.}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:177
|
||||||
|
msgid ""
|
||||||
|
"The Perfect Setup to hack on Guix is basically the perfect setup used for "
|
||||||
|
"Guile hacking (@pxref{Using Guile in Emacs,,, guile, Guile Reference "
|
||||||
|
"Manual}). First, you need more than an editor, you need "
|
||||||
|
"@url{http://www.gnu.org/software/emacs, Emacs}, empowered by the wonderful "
|
||||||
|
"@url{http://nongnu.org/geiser/, Geiser}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:185
|
||||||
|
msgid ""
|
||||||
|
"Geiser allows for interactive and incremental development from within Emacs: "
|
||||||
|
"code compilation and evaluation from within buffers, access to on-line "
|
||||||
|
"documentation (docstrings), context-sensitive completion, @kbd{M-.} to jump "
|
||||||
|
"to an object definition, a REPL to try out your code, and more "
|
||||||
|
"(@pxref{Introduction,,, geiser, Geiser User Manual}). For convenient Guix "
|
||||||
|
"development, make sure to augment Guile’s load path so that it finds source "
|
||||||
|
"files from your checkout:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: lisp
|
||||||
|
#: doc/contributing.texi:190
|
||||||
|
#, no-wrap
|
||||||
|
msgid ""
|
||||||
|
";; @r{Assuming the Guix checkout is in ~/src/guix.}\n"
|
||||||
|
"(with-eval-after-load 'geiser-guile\n"
|
||||||
|
" (add-to-list 'geiser-guile-load-path \"~/src/guix\"))\n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:198
|
||||||
|
msgid ""
|
||||||
|
"To actually edit the code, Emacs already has a neat Scheme mode. But in "
|
||||||
|
"addition to that, you must not miss "
|
||||||
|
"@url{http://www.emacswiki.org/emacs/ParEdit, Paredit}. It provides "
|
||||||
|
"facilities to directly operate on the syntax tree, such as raising an "
|
||||||
|
"s-expression or wrapping it, swallowing or rejecting the following "
|
||||||
|
"s-expression, etc."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: cindex
|
||||||
|
#: doc/contributing.texi:199
|
||||||
|
#, no-wrap
|
||||||
|
msgid "code snippets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: cindex
|
||||||
|
#: doc/contributing.texi:200
|
||||||
|
#, no-wrap
|
||||||
|
msgid "templates"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: cindex
|
||||||
|
#: doc/contributing.texi:201
|
||||||
|
#, no-wrap
|
||||||
|
msgid "reducing boilerplate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:208
|
||||||
|
msgid ""
|
||||||
|
"We also provide templates for common git commit messages and package "
|
||||||
|
"definitions in the @file{etc/snippets} directory. These templates can be "
|
||||||
|
"used with @url{http://joaotavora.github.io/yasnippet/, YASnippet} to expand "
|
||||||
|
"short trigger strings to interactive text snippets. You may want to add the "
|
||||||
|
"snippets directory to the @var{yas-snippet-dirs} variable in Emacs."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: lisp
|
||||||
|
#: doc/contributing.texi:213
|
||||||
|
#, no-wrap
|
||||||
|
msgid ""
|
||||||
|
";; @r{Assuming the Guix checkout is in ~/src/guix.}\n"
|
||||||
|
"(with-eval-after-load 'yasnippet\n"
|
||||||
|
" (add-to-list 'yas-snippet-dirs \"~/src/guix/etc/snippets\"))\n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:220
|
||||||
|
msgid ""
|
||||||
|
"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."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:226
|
||||||
|
msgid ""
|
||||||
|
"The main snippet for @code{scheme-mode} is triggered by typing "
|
||||||
|
"@code{package...} followed by @kbd{TAB}. This snippet also inserts the "
|
||||||
|
"trigger string @code{origin...}, which can be expanded further. The "
|
||||||
|
"@code{origin} snippet in turn may insert other trigger strings ending on "
|
||||||
|
"@code{...}, which also can be expanded further."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:234
|
||||||
|
msgid ""
|
||||||
|
"In general our code follows the GNU Coding Standards (@pxref{Top,,, "
|
||||||
|
"standards, GNU Coding Standards}). However, they do not say much about "
|
||||||
|
"Scheme, so here are some additional rules."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: subsection
|
||||||
|
#: doc/contributing.texi:240 doc/contributing.texi:242 doc/contributing.texi:243
|
||||||
|
#, no-wrap
|
||||||
|
msgid "Programming Paradigm"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: menuentry
|
||||||
|
#: doc/contributing.texi:240
|
||||||
|
msgid "How to compose your elements."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: subsection
|
||||||
|
#: doc/contributing.texi:240 doc/contributing.texi:249 doc/contributing.texi:250
|
||||||
|
#, no-wrap
|
||||||
|
msgid "Modules"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: menuentry
|
||||||
|
#: doc/contributing.texi:240
|
||||||
|
msgid "Where to store your code?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: subsection
|
||||||
|
#: doc/contributing.texi:240 doc/contributing.texi:260 doc/contributing.texi:261
|
||||||
|
#, no-wrap
|
||||||
|
msgid "Data Types and Pattern Matching"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: menuentry
|
||||||
|
#: doc/contributing.texi:240
|
||||||
|
msgid "Implementing data structures."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: subsection
|
||||||
|
#: doc/contributing.texi:240 doc/contributing.texi:274 doc/contributing.texi:275
|
||||||
|
#, no-wrap
|
||||||
|
msgid "Formatting Code"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: menuentry
|
||||||
|
#: doc/contributing.texi:240
|
||||||
|
msgid "Writing conventions."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:248
|
||||||
|
msgid ""
|
||||||
|
"Scheme code in Guix is written in a purely functional style. One exception "
|
||||||
|
"is code that involves input/output, and procedures that implement low-level "
|
||||||
|
"concepts, such as the @code{memoize} procedure."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:256
|
||||||
|
msgid ""
|
||||||
|
"Guile modules that are meant to be used on the builder side must live in the "
|
||||||
|
"@code{(guix build @dots{})} name space. They must not refer to other Guix "
|
||||||
|
"or GNU modules. However, it is OK for a ``host-side'' module to use a "
|
||||||
|
"build-side module."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:259
|
||||||
|
msgid ""
|
||||||
|
"Modules that deal with the broader GNU system should be in the @code{(gnu "
|
||||||
|
"@dots{})} name space rather than @code{(guix @dots{})}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:268
|
||||||
|
msgid ""
|
||||||
|
"The tendency in classical Lisp is to use lists to represent everything, and "
|
||||||
|
"then to browse them ``by hand'' using @code{car}, @code{cdr}, @code{cadr}, "
|
||||||
|
"and co. There are several problems with that style, notably the fact that "
|
||||||
|
"it is hard to read, error-prone, and a hindrance to proper type error "
|
||||||
|
"reports."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:273
|
||||||
|
msgid ""
|
||||||
|
"Guix code should define appropriate data types (for instance, using "
|
||||||
|
"@code{define-record-type*}) rather than abuse lists. In addition, it should "
|
||||||
|
"use pattern matching, via Guile’s @code{(ice-9 match)} module, especially "
|
||||||
|
"when matching lists."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: cindex
|
||||||
|
#: doc/contributing.texi:277
|
||||||
|
#, no-wrap
|
||||||
|
msgid "formatting code"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: cindex
|
||||||
|
#: doc/contributing.texi:278
|
||||||
|
#, no-wrap
|
||||||
|
msgid "coding style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:285
|
||||||
|
msgid ""
|
||||||
|
"When writing Scheme code, we follow common wisdom among Scheme programmers. "
|
||||||
|
"In general, we follow the @url{http://mumble.net/~campbell/scheme/style.txt, "
|
||||||
|
"Riastradh's Lisp Style Rules}. This document happens to describe the "
|
||||||
|
"conventions mostly used in Guile’s code too. It is very thoughtful and well "
|
||||||
|
"written, so please do read it."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:292
|
||||||
|
msgid ""
|
||||||
|
"Some special forms introduced in Guix, such as the @code{substitute*} macro, "
|
||||||
|
"have special indentation rules. These are defined in the "
|
||||||
|
"@file{.dir-locals.el} file, which Emacs automatically uses. Also note that "
|
||||||
|
"Emacs-Guix provides @code{guix-devel-mode} mode that indents and highlights "
|
||||||
|
"Guix code properly (@pxref{Development,,, emacs-guix, The Emacs-Guix "
|
||||||
|
"Reference Manual})."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: cindex
|
||||||
|
#: doc/contributing.texi:293
|
||||||
|
#, no-wrap
|
||||||
|
msgid "indentation, of code"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: cindex
|
||||||
|
#: doc/contributing.texi:294
|
||||||
|
#, no-wrap
|
||||||
|
msgid "formatting, of code"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:297
|
||||||
|
msgid ""
|
||||||
|
"If you do not use Emacs, please make sure to let your editor knows these "
|
||||||
|
"rules. To automatically indent a package definition, you can also run:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: example
|
||||||
|
#: doc/contributing.texi:300
|
||||||
|
#, no-wrap
|
||||||
|
msgid "./etc/indent-code.el gnu/packages/@var{file}.scm @var{package}\n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:306
|
||||||
|
msgid ""
|
||||||
|
"This automatically indents the definition of @var{package} in "
|
||||||
|
"@file{gnu/packages/@var{file}.scm} by running Emacs in batch mode. To "
|
||||||
|
"indent a whole file, omit the second argument:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: example
|
||||||
|
#: doc/contributing.texi:309
|
||||||
|
#, no-wrap
|
||||||
|
msgid "./etc/indent-code.el gnu/services/@var{file}.scm\n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:314
|
||||||
|
msgid ""
|
||||||
|
"We require all top-level procedures to carry a docstring. This requirement "
|
||||||
|
"can be relaxed for simple private procedures in the @code{(guix build "
|
||||||
|
"@dots{})} name space, though."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:317
|
||||||
|
msgid ""
|
||||||
|
"Procedures should not have more than four positional parameters. Use "
|
||||||
|
"keyword parameters for procedures that take more than four parameters."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:326
|
||||||
|
msgid ""
|
||||||
|
"Development is done using the Git distributed version control system. Thus, "
|
||||||
|
"access to the repository is not strictly necessary. We welcome "
|
||||||
|
"contributions in the form of patches as produced by @code{git format-patch} "
|
||||||
|
"sent to the @email{guix-patches@@gnu.org} mailing list."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:333
|
||||||
|
msgid ""
|
||||||
|
"This mailing list is backed by a Debbugs instance accessible at "
|
||||||
|
"@uref{https://bugs.gnu.org/guix-patches}, which allows us to keep track of "
|
||||||
|
"submissions. Each message sent to that mailing list gets a new tracking "
|
||||||
|
"number assigned; people can then follow up on the submission by sending "
|
||||||
|
"email to @code{@var{NNN}@@debbugs.gnu.org}, where @var{NNN} is the tracking "
|
||||||
|
"number (@pxref{Sending a Patch Series})."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:337
|
||||||
|
msgid ""
|
||||||
|
"Please write commit logs in the ChangeLog format (@pxref{Change Logs,,, "
|
||||||
|
"standards, GNU Coding Standards}); you can check the commit history for "
|
||||||
|
"examples."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:340
|
||||||
|
msgid ""
|
||||||
|
"Before submitting a patch that adds or modifies a package definition, please "
|
||||||
|
"run through this check list:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: enumerate
|
||||||
|
#: doc/contributing.texi:347
|
||||||
|
msgid ""
|
||||||
|
"If the authors of the packaged software provide a cryptographic signature "
|
||||||
|
"for the release tarball, make an effort to verify the authenticity of the "
|
||||||
|
"archive. For a detached GPG signature file this would be done with the "
|
||||||
|
"@code{gpg --verify} command."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: enumerate
|
||||||
|
#: doc/contributing.texi:351
|
||||||
|
msgid ""
|
||||||
|
"Take some time to provide an adequate synopsis and description for the "
|
||||||
|
"package. @xref{Synopses and Descriptions}, for some guidelines."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: enumerate
|
||||||
|
#: doc/contributing.texi:356
|
||||||
|
msgid ""
|
||||||
|
"Run @code{guix lint @var{package}}, where @var{package} is the name of the "
|
||||||
|
"new or modified package, and fix any errors it reports (@pxref{Invoking guix "
|
||||||
|
"lint})."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: enumerate
|
||||||
|
#: doc/contributing.texi:360
|
||||||
|
msgid ""
|
||||||
|
"Make sure the package builds on your platform, using @code{guix build "
|
||||||
|
"@var{package}}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: cindex
|
||||||
|
#: doc/contributing.texi:362
|
||||||
|
#, no-wrap
|
||||||
|
msgid "bundling"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: enumerate
|
||||||
|
#: doc/contributing.texi:365
|
||||||
|
msgid ""
|
||||||
|
"Make sure the package does not use bundled copies of software already "
|
||||||
|
"available as separate packages."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: enumerate
|
||||||
|
#: doc/contributing.texi:374
|
||||||
|
msgid ""
|
||||||
|
"Sometimes, packages include copies of the source code of their dependencies "
|
||||||
|
"as a convenience for users. However, as a distribution, we want to make "
|
||||||
|
"sure that such packages end up using the copy we already have in the "
|
||||||
|
"distribution, if there is one. This improves resource usage (the dependency "
|
||||||
|
"is built and stored only once), and allows the distribution to make "
|
||||||
|
"transverse changes such as applying security updates for a given software "
|
||||||
|
"package in a single place and have them affect the whole system---something "
|
||||||
|
"that bundled copies prevent."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: enumerate
|
||||||
|
#: doc/contributing.texi:381
|
||||||
|
msgid ""
|
||||||
|
"Take a look at the profile reported by @command{guix size} (@pxref{Invoking "
|
||||||
|
"guix size}). This will allow you to notice references to other packages "
|
||||||
|
"unwillingly retained. It may also help determine whether to split the "
|
||||||
|
"package (@pxref{Packages with Multiple Outputs}), and which optional "
|
||||||
|
"dependencies should be used."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: enumerate
|
||||||
|
#: doc/contributing.texi:386
|
||||||
|
msgid ""
|
||||||
|
"For important changes, check that dependent package (if applicable) are not "
|
||||||
|
"affected by the change; @code{guix refresh --list-dependent @var{package}} "
|
||||||
|
"will help you do that (@pxref{Invoking guix refresh})."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: cindex
|
||||||
|
#: doc/contributing.texi:388
|
||||||
|
#, no-wrap
|
||||||
|
msgid "branching strategy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: cindex
|
||||||
|
#: doc/contributing.texi:389
|
||||||
|
#, no-wrap
|
||||||
|
msgid "rebuild scheduling strategy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: enumerate
|
||||||
|
#: doc/contributing.texi:392
|
||||||
|
msgid ""
|
||||||
|
"Depending on the number of dependent packages and thus the amount of "
|
||||||
|
"rebuilding induced, commits go to different branches, along these lines:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: item
|
||||||
|
#: doc/contributing.texi:394
|
||||||
|
#, no-wrap
|
||||||
|
msgid "300 dependent packages or less"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: table
|
||||||
|
#: doc/contributing.texi:396
|
||||||
|
msgid "@code{master} branch (non-disruptive changes)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: item
|
||||||
|
#: doc/contributing.texi:397
|
||||||
|
#, no-wrap
|
||||||
|
msgid "between 300 and 1,200 dependent packages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: table
|
||||||
|
#: doc/contributing.texi:402
|
||||||
|
msgid ""
|
||||||
|
"@code{staging} branch (non-disruptive changes). This branch is intended to "
|
||||||
|
"be merged in @code{master} every 3 weeks or so. Topical changes (e.g., an "
|
||||||
|
"update of the GNOME stack) can instead go to a specific branch (say, "
|
||||||
|
"@code{gnome-updates})."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: item
|
||||||
|
#: doc/contributing.texi:403
|
||||||
|
#, no-wrap
|
||||||
|
msgid "more than 1,200 dependent packages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: table
|
||||||
|
#: doc/contributing.texi:407
|
||||||
|
msgid ""
|
||||||
|
"@code{core-updates} branch (may include major and potentially disruptive "
|
||||||
|
"changes). This branch is intended to be merged in @code{master} every 2.5 "
|
||||||
|
"months or so."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: enumerate
|
||||||
|
#: doc/contributing.texi:414
|
||||||
|
msgid ""
|
||||||
|
"All these branches are 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."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: cindex
|
||||||
|
#: doc/contributing.texi:416
|
||||||
|
#, no-wrap
|
||||||
|
msgid "determinism, of build processes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: cindex
|
||||||
|
#: doc/contributing.texi:417
|
||||||
|
#, no-wrap
|
||||||
|
msgid "reproducible builds, checking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: enumerate
|
||||||
|
#: doc/contributing.texi:421
|
||||||
|
msgid ""
|
||||||
|
"Check whether the package's build process is deterministic. This typically "
|
||||||
|
"means checking whether an independent build of the package yields the exact "
|
||||||
|
"same result that you obtained, bit for bit."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: enumerate
|
||||||
|
#: doc/contributing.texi:424
|
||||||
|
msgid ""
|
||||||
|
"A simple way to do that is by building the same package several times in a "
|
||||||
|
"row on your machine (@pxref{Invoking guix build}):"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: example
|
||||||
|
#: doc/contributing.texi:427
|
||||||
|
#, no-wrap
|
||||||
|
msgid "guix build --rounds=2 my-package\n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: enumerate
|
||||||
|
#: doc/contributing.texi:431
|
||||||
|
msgid ""
|
||||||
|
"This is enough to catch a class of common non-determinism issues, such as "
|
||||||
|
"timestamps or randomly-generated output in the build result."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: enumerate
|
||||||
|
#: doc/contributing.texi:441
|
||||||
|
msgid ""
|
||||||
|
"Another option is to use @command{guix challenge} (@pxref{Invoking guix "
|
||||||
|
"challenge}). You may run it once the package has been committed and built "
|
||||||
|
"by @code{hydra.gnu.org} to check whether it obtains the same result as you "
|
||||||
|
"did. Better yet: Find another machine that can build it and run "
|
||||||
|
"@command{guix publish}. Since the remote build machine is likely different "
|
||||||
|
"from yours, this can catch non-determinism issues related to the "
|
||||||
|
"hardware---e.g., use of different instruction set extensions---or to the "
|
||||||
|
"operating system kernel---e.g., reliance on @code{uname} or @file{/proc} "
|
||||||
|
"files."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: enumerate
|
||||||
|
#: doc/contributing.texi:447
|
||||||
|
msgid ""
|
||||||
|
"When writing documentation, please use gender-neutral wording when referring "
|
||||||
|
"to people, such as @uref{https://en.wikipedia.org/wiki/Singular_they, "
|
||||||
|
"singular ``they''@comma{} ``their''@comma{} ``them''}, and so forth."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: enumerate
|
||||||
|
#: doc/contributing.texi:451
|
||||||
|
msgid ""
|
||||||
|
"Verify that your patch contains only one set of related changes. Bundling "
|
||||||
|
"unrelated changes together makes reviewing harder and slower."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: enumerate
|
||||||
|
#: doc/contributing.texi:454
|
||||||
|
msgid ""
|
||||||
|
"Examples of unrelated changes include the addition of several packages, or a "
|
||||||
|
"package update along with fixes to that package."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: enumerate
|
||||||
|
#: doc/contributing.texi:459
|
||||||
|
msgid ""
|
||||||
|
"Please follow our code formatting rules, possibly running the "
|
||||||
|
"@command{etc/indent-code.el} script to do that automatically for you "
|
||||||
|
"(@pxref{Formatting Code})."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:469
|
||||||
|
msgid ""
|
||||||
|
"When posting a patch to the mailing list, use @samp{[PATCH] @dots{}} as a "
|
||||||
|
"subject. You may use your email client or the @command{git send-email} "
|
||||||
|
"command (@pxref{Sending a Patch Series}). We prefer to get patches in plain "
|
||||||
|
"text messages, either inline or as MIME attachments. You are advised to pay "
|
||||||
|
"attention if your email client changes anything like line breaks or "
|
||||||
|
"indentation which could potentially break the patches."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:472
|
||||||
|
msgid ""
|
||||||
|
"When a bug is resolved, please close the thread by sending an email to "
|
||||||
|
"@email{@var{NNN}-done@@debbugs.gnu.org}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: anchor{#1}
|
||||||
|
#: doc/contributing.texi:473 doc/contributing.texi:475
|
||||||
|
#, no-wrap
|
||||||
|
msgid "Sending a Patch Series"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: cindex
|
||||||
|
#: doc/contributing.texi:475
|
||||||
|
#, no-wrap
|
||||||
|
msgid "patch series"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: code{#1}
|
||||||
|
#: doc/contributing.texi:476
|
||||||
|
#, no-wrap
|
||||||
|
msgid "git send-email"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: code{#1}
|
||||||
|
#: doc/contributing.texi:477
|
||||||
|
#, no-wrap
|
||||||
|
msgid "git-send-email"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. type: Plain text
|
||||||
|
#: doc/contributing.texi:485
|
||||||
|
msgid ""
|
||||||
|
"When sending a patch series (e.g., using @code{git send-email}), please "
|
||||||
|
"first send one message to @email{guix-patches@@gnu.org}, and then send "
|
||||||
|
"subsequent patches to @email{@var{NNN}@@debbugs.gnu.org} to make sure they "
|
||||||
|
"are kept together. See @uref{https://debbugs.gnu.org/Advanced.html, the "
|
||||||
|
"Debbugs documentation} for more information."
|
||||||
|
msgstr ""
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,75 @@
|
||||||
|
# GNU Guix --- Functional package management for GNU
|
||||||
|
# Copyright © 2018 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/>.
|
||||||
|
|
||||||
|
EXTRA_DIST =
|
||||||
|
|
||||||
|
POT_OPTIONS = --package-name "guix" --package-version "$(VERSION)" \
|
||||||
|
--copyright-holder "Ludovic Courtès" \
|
||||||
|
--msgid-bugs-address "ludo@gnu.org"
|
||||||
|
|
||||||
|
$(srcdir)/po/doc/guix.%.po: $(srcdir)/po/doc/guix.pot
|
||||||
|
@lang=`echo $$(basename "$@") | sed -e 's|^guix.||' -e 's|.po$$||'` ;\
|
||||||
|
if test -f "$@"; then \
|
||||||
|
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
|
||||||
|
echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $@ $<"; \
|
||||||
|
cd $(srcdir) \
|
||||||
|
&& { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
|
||||||
|
'' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
|
||||||
|
$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $@ $<;; \
|
||||||
|
*) \
|
||||||
|
$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $@ $<;; \
|
||||||
|
esac; \
|
||||||
|
}; \
|
||||||
|
touch "$@"; \
|
||||||
|
else \
|
||||||
|
echo "File $@ does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
$(srcdir)/po/doc/contributing.%.po: $(srcdir)/po/doc/contributing.pot
|
||||||
|
@lang=`echo $$(basename "$@") | sed -e 's|^contributing.||' -e 's|.po$$||'` ;\
|
||||||
|
if test -f "$@"; then \
|
||||||
|
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
|
||||||
|
echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $@ $<"; \
|
||||||
|
cd $(srcdir) \
|
||||||
|
&& { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
|
||||||
|
'' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
|
||||||
|
$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $@ $<;; \
|
||||||
|
*) \
|
||||||
|
$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $@ $<;; \
|
||||||
|
esac; \
|
||||||
|
}; \
|
||||||
|
touch "$@"; \
|
||||||
|
else \
|
||||||
|
echo "File $@ does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
$(srcdir)/po/doc/contributing.pot-update: doc/contributing.texi
|
||||||
|
$(AM_V_PO4A)$(PO4A_UPDATEPO) -M UTF-8 -f texinfo -m "$<" \
|
||||||
|
-p "$$(echo $@ | sed 's|-update||')" $(POT_OPTIONS)
|
||||||
|
@touch "$$(echo $@ | sed 's|-update||')"
|
||||||
|
|
||||||
|
$(srcdir)/po/doc/guix.pot-update: doc/guix.texi
|
||||||
|
$(AM_V_PO4A)$(PO4A_UPDATEPO) -M UTF-8 -f texinfo -m "$<" \
|
||||||
|
-p "$$(echo $@ | sed 's|-update||')" $(POT_OPTIONS)
|
||||||
|
@touch "$$(echo $@ | sed 's|-update||')"
|
||||||
|
|
||||||
|
doc-pot-update:
|
||||||
|
$(MAKE) $(srcdir)/po/doc/guix.pot-update
|
||||||
|
$(MAKE) $(srcdir)/po/doc/contributing.pot-update
|
Loading…
Reference in New Issue