build: Check the availability of i686-linux binaries.
[jackhill/guix/guix.git] / doc / guix.texi
CommitLineData
568717fd
LC
1\input texinfo
2@c -*-texinfo-*-
3
4@c %**start of header
5@setfilename guix.info
6@documentencoding UTF-8
f8348b91 7@settitle GNU Guix Reference Manual
568717fd
LC
8@c %**end of header
9
10@include version.texi
58db733e 11@set YEARS 2012, 2013
568717fd 12
eeaf4427 13@dircategory Package management
568717fd
LC
14@direntry
15* guix: (guix). Guix, the functional package manager.
e49951eb 16* guix package: (guix)Invoking guix package
eeaf4427 17 Managing packages with Guix.
e49951eb 18* guix build: (guix)Invoking guix build
568717fd
LC
19 Building packages with Guix.
20@end direntry
568717fd
LC
21
22@titlepage
7730d112
LC
23@title GNU Guix Reference Manual
24@subtitle Using the GNU Guix Functional Package Manager
568717fd 25@author Ludovic Courtès
acc08466 26@author Nikita Karetnikov
568717fd
LC
27
28@page
29@vskip 0pt plus 1filll
30Edition @value{EDITION} @*
31@value{UPDATED} @*
32
58db733e 33Copyright @copyright{} @value{YEARS} Ludovic Court@`es
568717fd
LC
34
35@quotation
36Permission is granted to copy, distribute and/or modify this document
37under the terms of the GNU Free Documentation License, Version 1.3 or
38any later version published by the Free Software Foundation; with no
39Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
40copy of the license is included in the section entitled ``GNU Free
41Documentation License''.
42@end quotation
43@end titlepage
44
45@copying
f8348b91 46This manual documents GNU Guix version @value{VERSION}.
568717fd 47
58db733e 48Copyright @copyright{} @value{YEARS} Ludovic Courtès
568717fd
LC
49
50Permission is granted to copy, distribute and/or modify this document
51under the terms of the GNU Free Documentation License, Version 1.3 or
52any later version published by the Free Software Foundation; with no
53Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
54copy of the license is included in the section entitled ``GNU Free
55Documentation License.''
56@end copying
57
58@contents
59
60@c *********************************************************************
61@node Top
f8348b91 62@top GNU Guix
568717fd 63
f8348b91
LC
64This document describes GNU Guix version @value{VERSION}, a functional
65package management tool written for the GNU system.
568717fd 66
58db733e
LC
67@quotation
68Copyright @copyright{} @value{YEARS} Ludovic Courtès
69
70Permission is granted to copy, distribute and/or modify this document
71under the terms of the GNU Free Documentation License, Version 1.3 or
72any later version published by the Free Software Foundation; with no
73Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
74copy of the license is included in the section entitled ``GNU Free
75Documentation License.''
76@end quotation
77
568717fd
LC
78@menu
79* Introduction:: What is Guix about?
bd5e766b 80* Installation:: Installing Guix.
eeaf4427 81* Package Management:: Package installation, upgrade, etc.
568717fd
LC
82* Programming Interface:: Using Guix in Scheme.
83* Utilities:: Package management commands.
a1ba8475 84* GNU Distribution:: Software for your friendly GNU system.
9bf3c1a7 85* Contributing:: Your help needed!
568717fd
LC
86
87* Acknowledgments:: Thanks!
88* GNU Free Documentation License:: The license of this manual.
89* Concept Index:: Concepts.
90* Function Index:: Functions.
91@end menu
92
93@c *********************************************************************
94@node Introduction
95@chapter Introduction
96
c80e7e55
LC
97GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks''
98using the international phonetic alphabet (IPA).} is a functional
99package management tool for the GNU system. Package management consists
4bfc4ea3
NK
100of all activities that relate to building packages from sources,
101honoring their build-time and run-time dependencies,
c80e7e55
LC
102installing packages in user environments, upgrading installed packages
103to new versions or rolling back to a previous set, removing unused
104software packages, etc.
568717fd
LC
105
106@cindex functional package management
107The term @dfn{functional} refers to a specific package management
108discipline. In Guix, the package build and installation process is seen
4bfc4ea3
NK
109as a function, in the mathematical sense. That function takes inputs,
110such as build scripts, a compiler, and libraries, and
111returns an installed package. As a pure function, its result depends
568717fd
LC
112solely on its inputs---for instance, it cannot refer to software or
113scripts that were not explicitly passed as inputs. A build function
4bfc4ea3
NK
114always produces the same result when passed a given set of inputs. It
115cannot alter the system's environment in
568717fd
LC
116any way; for instance, it cannot create, modify, or delete files outside
117of its build and installation directories. This is achieved by running
4bfc4ea3
NK
118build processes in isolated environments (or @dfn{chroots}), where only their
119explicit inputs are visible.
568717fd 120
e531ac2a 121@cindex store
568717fd 122The result of package build functions is @dfn{cached} in the file
e531ac2a
LC
123system, in a special directory called @dfn{the store} (@pxref{The
124Store}). Each package is installed in a directory of its own, in the
568717fd
LC
125store---by default under @file{/nix/store}. The directory name contains
126a hash of all the inputs used to build that package; thus, changing an
127input yields a different directory name.
128
129This approach is the foundation of Guix's salient features: support for
4bfc4ea3 130transactional package upgrade and rollback, per-user installation, and
eeaf4427 131garbage collection of packages (@pxref{Features}).
568717fd 132
4bfc4ea3 133Guix has a command-line interface, which allows users to build, install,
568717fd 134upgrade, and remove packages, as well as a Scheme programming interface.
568717fd 135
a1ba8475
LC
136Last but not least, Guix is used to build a distribution of the GNU
137system, with many GNU and non-GNU free software packages. @xref{GNU
138Distribution}.
139
bd5e766b
LC
140@c *********************************************************************
141@node Installation
142@chapter Installation
143
48febeb8
LC
144GNU Guix is available for download from its website at
145@url{http://www.gnu.org/software/guix/}. This section describes the
146software requirements of Guix, as well as how to install it and get
147ready to use it.
bd5e766b 148
b22a12fd 149The build procedure for Guix is the same as for other GNU software, and
1da983b9 150is not covered here. Please see the files @file{README} and
b22a12fd
LC
151@file{INSTALL} in the Guix source tree for additional details.
152
bd5e766b
LC
153@menu
154* Requirements:: Software needed to build and run Guix.
155* Setting Up the Daemon:: Preparing the build daemon's environment.
156* Invoking guix-daemon:: Running the build daemon.
157@end menu
158
159@node Requirements
160@section Requirements
161
162GNU Guix depends on the following packages:
163
164@itemize
4a328f73 165@item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.5 or later;
bd5e766b
LC
166@item @url{http://gnupg.org/, GNU libgcrypt}
167@end itemize
168
169Unless @code{--disable-daemon} was passed to @command{configure}, the
170following packages are also needed:
171
172@itemize
173@item @url{http://sqlite.org, SQLite 3}
174@item @url{http://www.bzip.org, libbz2}
175@item @url{http://gcc.gnu.org, GCC's g++}
176@end itemize
177
4bfc4ea3
NK
178When a working installation of @url{http://nixos.org/nix/, the Nix package
179manager} is available, you
bd5e766b 180can instead configure Guix with @code{--disable-daemon}. In that case,
4bfc4ea3 181Nix replaces the three dependencies above.
bd5e766b 182
b22a12fd
LC
183Guix is compatible with Nix, so it is possible to share the same store
184between both. To do so, you must pass @command{configure} not only the
185same @code{--with-store-dir} value, but also the same
4bfc4ea3
NK
186@code{--localstatedir} value. The latter is essential because it
187specifies where the database that stores metadata about the store is
188located, among other things. The default values are
b22a12fd 189@code{--with-store-dir=/nix/store} and @code{--localstatedir=/nix/var}.
4bfc4ea3
NK
190Note that @code{--disable-daemon} is not required if
191your goal is to share the store with Nix.
b22a12fd 192
bd5e766b
LC
193@node Setting Up the Daemon
194@section Setting Up the Daemon
195
196@cindex daemon
197Operations such as building a package or running the garbage collector
198are all performed by a specialized process, the @dfn{Guix daemon}, on
199behalf of clients. Only the daemon may access the store and its
200associated database. Thus, any operation that manipulates the store
201goes through the daemon. For instance, command-line tools such as
e49951eb 202@command{guix package} and @command{guix build} communicate with the
bd5e766b
LC
203daemon (@i{via} remote procedure calls) to instruct it what to do.
204
205In a standard multi-user setup, Guix and its daemon---the
206@command{guix-daemon} program---are installed by the system
207administrator; @file{/nix/store} is owned by @code{root} and
208@command{guix-daemon} runs as @code{root}. Unprivileged users may use
209Guix tools to build packages or otherwise access the store, and the
210daemon will do it on their behalf, ensuring that the store is kept in a
211consistent state, and allowing built packages to be shared among users.
212
213@cindex build users
214When @command{guix-daemon} runs as @code{root}, you may not want package
215build processes themselves to run as @code{root} too, for obvious
216security reasons. To avoid that, a special pool of @dfn{build users}
217should be created for use by build processes started by the daemon.
218These build users need not have a shell and a home directory: they will
219just be used when the daemon drops @code{root} privileges in build
220processes. Having several such users allows the daemon to launch
221distinct build processes under separate UIDs, which guarantees that they
222do not interfere with each other---an essential feature since builds are
223regarded as pure functions (@pxref{Introduction}).
224
225On a GNU/Linux system, a build user pool may be created like this (using
226Bash syntax and the @code{shadow} commands):
227
091196b3
LC
228@c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
229@c for why `-G' is needed.
bd5e766b
LC
230@example
231# groupadd guix-builder
232# for i in `seq 1 10`;
233 do
091196b3
LC
234 useradd -g guix-builder -G guix-builder \
235 -d /var/empty -s `which nologin` \
80ba8cc0 236 -c "Guix build user $i" guix-builder$i;
bd5e766b
LC
237 done
238@end example
239
240@noindent
241The @code{guix-daemon} program may then be run as @code{root} with:
242
243@example
244# guix-daemon --build-users-group=guix-builder
245@end example
246
247Guix may also be used in a single-user setup, with @command{guix-daemon}
1da983b9 248running as an unprivileged user. However, to maximize non-interference
bd5e766b
LC
249of build processes, the daemon still needs to perform certain operations
250that are restricted to @code{root} on GNU/Linux: it should be able to
251run build processes in a chroot, and to run them under different UIDs.
252To that end, the @command{nix-setuid-helper} program is provided; it is
253a small C program (less than 300 lines) that, if it is made setuid
254@code{root}, can be executed by the daemon to perform these operations
255on its behalf. The @code{root}-owned @file{/etc/nix-setuid.conf} file
256is read by @command{nix-setuid-helper}; it should contain exactly two
257words: the user name under which the authorized @command{guix-daemon}
258runs, and the name of the build users group.
259
260If you are installing Guix as an unprivileged user and do not have the
261ability to make @file{nix-setuid-helper} setuid-@code{root}, it is still
262possible to run @command{guix-daemon}. However, build processes will
263not be isolated from one another, and not from the rest of the system.
264Thus, build processes may interfere with each other, and may access
265programs, libraries, and other files available on the system---making it
266much harder to view them as @emph{pure} functions.
267
268@node Invoking guix-daemon
269@section Invoking @command{guix-daemon}
270
271The @command{guix-daemon} program implements all the functionality to
272access the store. This includes launching build processes, running the
273garbage collector, querying the availability of a build result, etc. It
274is normally run as @code{root} like this:
275
276@example
277# guix-daemon --build-users-group=guix-builder
278@end example
279
280@noindent
281For details on how to set it up, @ref{Setting Up the Daemon}.
282
283By default, @command{guix-daemon} launches build processes under
284different UIDs, taken from the build group specified with
285@code{--build-users-group}. In addition, each build process is run in a
286chroot environment that only contains the subset of the store that the
287build process depends on, as specified by its derivation
288(@pxref{Programming Interface, derivation}), plus a set of specific
289system directories. By default, the latter contains @file{/dev} and
290@file{/dev/pts}.
291
292The following command-line options are supported:
293
294@table @code
295@item --build-users-group=@var{group}
296Take users from @var{group} to run build processes (@pxref{Setting Up
297the Daemon, build users}).
298
6858f9d1
LC
299@item --no-substitutes
300Do not use substitutes for build products. That is, always build things
301locally instead of allowing downloads of pre-built binaries.
302
bd5e766b
LC
303@item --cache-failures
304Cache build failures. By default, only successful builds are cached.
305
306@item --cores=@var{n}
307@itemx -c @var{n}
308Use @var{n} CPU cores to build each derivation; @code{0} means as many
309as available.
310
311The default value is @code{1}, but it may be overridden by clients, such
e49951eb
MW
312as the @code{--cores} option of @command{guix build} (@pxref{Invoking
313guix build}).
bd5e766b
LC
314
315The effect is to define the @code{NIX_BUILD_CORES} environment variable
316in the build process, which can then use it to exploit internal
317parallelism---for instance, by running @code{make -j$NIX_BUILD_CORES}.
318
319@item --max-jobs=@var{n}
320@itemx -M @var{n}
321Allow at most @var{n} build jobs in parallel. The default value is
322@code{1}.
323
324@item --debug
325Produce debugging output.
326
327This is useful to debug daemon start-up issues, but then it may be
328overridden by clients, for example the @code{--verbosity} option of
e49951eb 329@command{guix build} (@pxref{Invoking guix build}).
bd5e766b
LC
330
331@item --chroot-directory=@var{dir}
332Add @var{dir} to the build chroot.
333
334Doing this may change the result of build processes---for instance if
335they use optional dependencies found in @var{dir} when it is available,
336and not otherwise. For that reason, it is not recommended to do so.
337Instead, make sure that each derivation declares all the inputs that it
338needs.
339
340@item --disable-chroot
341Disable chroot builds.
342
343Using this option is not recommended since, again, it would allow build
344processes to gain access to undeclared dependencies.
345
346@item --disable-log-compression
347Disable compression of the build logs.
348
1da983b9
LC
349Unless @code{--lose-logs} is used, all the build logs are kept in the
350@var{localstatedir}. To save space, the daemon automatically compresses
351them with bzip2 by default. This option disables that.
352
bd5e766b
LC
353@item --disable-store-optimization
354Disable automatic file ``deduplication'' in the store.
355
1da983b9
LC
356By default, files added to the store are automatically ``deduplicated'':
357if a newly added file is identical as another one found in the store,
358the daemon makes the new file a hard link to the other file. This
359slightly increases the input/output load at the end of a build process.
360This option disables this.
361
bd5e766b
LC
362@item --impersonate-linux-2.6
363On Linux-based systems, impersonate Linux 2.6. This means that the
364kernel's @code{uname} system call will report 2.6 as the release number.
365
366This might be helpful to build programs that (usually wrongfully) depend
367on the kernel version number.
368
369@item --lose-logs
370Do not keep build logs. By default they are kept under
371@code{@var{localstatedir}/nix/log}.
372
373@item --system=@var{system}
374Assume @var{system} as the current system type. By default it is the
375architecture/kernel pair found at configure time, such as
376@code{x86_64-linux}.
b8d2aa26
LC
377
378@item --listen=@var{socket}
379Listen for connections on @var{socket}, the file name of a Unix-domain
380socket. The default socket is
381@file{@var{localstatedir}/daemon-socket/socket}. This option is only
382useful in exceptional circumstances, such as if you need to run several
383daemons on the same machine.
bd5e766b
LC
384@end table
385
386
eeaf4427
LC
387@c *********************************************************************
388@node Package Management
389@chapter Package Management
390
f8348b91 391The purpose of GNU Guix is to allow users to easily install, upgrade, and
eeaf4427
LC
392remove software packages, without having to know about their build
393procedure or dependencies. Guix also goes beyond this obvious set of
394features.
395
396This chapter describes the main features of Guix, as well as the package
397management tools it provides.
398
399@menu
400* Features:: How Guix will make your life brighter.
e49951eb 401* Invoking guix package:: Package installation, removal, etc.
6e721c4d 402* Packages with Multiple Outputs:: Single source package, multiple outputs.
e49951eb 403* Invoking guix gc:: Running the garbage collector.
f651b477 404* Invoking guix pull:: Fetching the latest Guix and distribution.
eeaf4427
LC
405@end menu
406
407@node Features
408@section Features
409
410When using Guix, each package ends up in the @dfn{package store}, in its
411own directory---something that resembles
412@file{/nix/store/xxx-package-1.2}, where @code{xxx} is a base32 string.
413
414Instead of referring to these directories, users have their own
415@dfn{profile}, which points to the packages that they actually want to
821b0015
LC
416use. These profiles are stored within each user's home directory, at
417@code{$HOME/.guix-profile}.
eeaf4427 418
821b0015 419For example, @code{alice} installs GCC 4.7.2. As a result,
eeaf4427 420@file{/home/alice/.guix-profile/bin/gcc} points to
821b0015
LC
421@file{/nix/store/@dots{}-gcc-4.7.2/bin/gcc}. Now, on the same machine,
422@code{bob} had already installed GCC 4.8.0. The profile of @code{bob}
423simply continues to point to
424@file{/nix/store/@dots{}-gcc-4.8.0/bin/gcc}---i.e., both versions of GCC
425coexist on the same system without any interference.
eeaf4427 426
e49951eb
MW
427The @command{guix package} command is the central tool to manage
428packages (@pxref{Invoking guix package}). It operates on those per-user
821b0015 429profiles, and can be used @emph{with normal user privileges}.
eeaf4427
LC
430
431The command provides the obvious install, remove, and upgrade
432operations. Each invocation is actually a @emph{transaction}: either
ba55b1cb 433the specified operation succeeds, or nothing happens. Thus, if the
e49951eb 434@command{guix package} process is terminated during the transaction,
eeaf4427
LC
435or if a power outage occurs during the transaction, then the user's
436profile remains in its previous state, and remains usable.
437
438In addition, any package transaction may be @emph{rolled back}. So, if,
439for example, an upgrade installs a new version of a package that turns
440out to have a serious bug, users may roll back to the previous instance
441of their profile, which was known to work well.
442
443All those packages in the package store may be @emph{garbage-collected}.
444Guix can determine which packages are still referenced by the user
fe8ff028 445profiles, and remove those that are provably no longer referenced
e49951eb 446(@pxref{Invoking guix gc}). Users may also explicitly remove old
fe8ff028
LC
447generations of their profile so that the packages they refer to can be
448collected.
eeaf4427
LC
449
450Finally, Guix takes a @dfn{purely functional} approach to package
451management, as described in the introduction (@pxref{Introduction}).
452Each @file{/nix/store} package directory name contains a hash of all the
453inputs that were used to build that package---compiler, libraries, build
454scripts, etc. This direct correspondence allows users to make sure a
455given package installation matches the current state of their
a1ba8475 456distribution, and helps maximize @dfn{reproducibility}.
eeaf4427
LC
457
458This foundation allows Guix to support @dfn{transparent binary/source
3b78d1ea 459deployment}. When a pre-built binary for a @file{/nix/store} path is
eeaf4427
LC
460available from an external source, Guix just downloads it; otherwise, it
461builds the package from source, locally.
462
e49951eb
MW
463@node Invoking guix package
464@section Invoking @command{guix package}
eeaf4427 465
e49951eb 466The @command{guix package} command is the tool that allows users to
eeaf4427
LC
467install, upgrade, and remove packages, as well as rolling back to
468previous configurations. It operates only on the user's own profile,
469and works with normal user privileges (@pxref{Features}). Its syntax
470is:
471
472@example
e49951eb 473guix package @var{options}
eeaf4427
LC
474@end example
475
ba55b1cb 476Primarily, @var{options} specifies the operations to be performed during
eeaf4427
LC
477the transaction. Upon completion, a new profile is created, but
478previous generations of the profile remain available, should the user
479want to roll back.
480
b9e5c0a9 481For each user, a symlink to the user's default profile is automatically
0ec1af59 482created in @file{$HOME/.guix-profile}. This symlink always points to the
b9e5c0a9
LC
483current generation of the user's default profile. Thus, users can add
484@file{$HOME/.guix-profile/bin} to their @code{PATH} environment
485variable, and so on.
486
0ec1af59
LC
487In a multi-user setup, user profiles must be stored in a place
488registered as a @dfn{garbage-collector root}, which
e49951eb 489@file{$HOME/.guix-profile} points to (@pxref{Invoking guix gc}). That
0ec1af59
LC
490directory is normally
491@code{@var{localstatedir}/profiles/per-user/@var{user}}, where
492@var{localstatedir} is the value passed to @code{configure} as
493@code{--localstatedir}, and @var{user} is the user name. It must be
494created by @code{root}, with @var{user} as the owner. When it does not
70c43291
LC
495exist, or is not owned by @var{user}, @command{guix package} emits an
496error about it.
0ec1af59
LC
497
498The @var{options} can be among the following:
499
eeaf4427
LC
500@table @code
501
502@item --install=@var{package}
51c8d790 503@itemx -i @var{package}
eeaf4427
LC
504Install @var{package}.
505
506@var{package} may specify either a simple package name, such as
507@code{guile}, or a package name followed by a hyphen and version number,
dc5669cd
MW
508such as @code{guile-1.8.8}. If no version number is specified, the
509newest available version will be selected. In addition, @var{package}
510may contain a colon, followed by the name of one of the outputs of the
6e721c4d
LC
511package, as in @code{gcc:doc} or @code{binutils-2.22:lib}
512(@pxref{Packages with Multiple Outputs}).
eeaf4427 513
461572cc
LC
514@cindex propagated inputs
515Sometimes packages have @dfn{propagated inputs}: these are dependencies
516that automatically get installed along with the required package.
517
518An example is the GNU MPC library: its C header files refer to those of
519the GNU MPFR library, which in turn refer to those of the GMP library.
520Thus, when installing MPC, the MPFR and GMP libraries also get installed
521in the profile; removing MPC also removes MPFR and GMP---unless they had
522also been explicitly installed independently.
523
5924080d
LC
524Besides, packages sometime rely on the definition of environment
525variables for their search paths (see explanation of
526@code{--search-paths} below.) Any missing or possibly incorrect
527environment variable definitions are reported here.
528
ef010c0f 529@c XXX: keep me up-to-date
5924080d 530Finally, when installing a GNU package, the tool reports the
ef010c0f
LC
531availability of a newer upstream version. In the future, it may provide
532the option of installing directly from the upstream version, even if
533that version is not yet in the distribution.
534
5d4b411f
LC
535@item --install-from-expression=@var{exp}
536@itemx -e @var{exp}
537Install the package @var{exp} evaluates to.
538
539@var{exp} must be a Scheme expression that evaluates to a
540@code{<package>} object. This option is notably useful to disambiguate
541between same-named variants of a package, with expressions such as
542@code{(@@ (gnu packages base) guile-final)}.
543
544Note that this option installs the first output of the specified
545package, which may be insufficient when needing a specific output of a
546multiple-output package.
547
eeaf4427
LC
548@item --remove=@var{package}
549@itemx -r @var{package}
550Remove @var{package}.
551
acb6ba25
CR
552@item --upgrade[=@var{regexp}]
553@itemx -u [@var{regexp}]
554Upgrade all the installed packages. When @var{regexp} is specified, upgrade
555only installed packages whose name matches @var{regexp}.
eeaf4427 556
f651b477
LC
557Note that this upgrades package to the latest version of packages found
558in the distribution currently installed. To update your distribution,
559you should regularly run @command{guix pull} (@pxref{Invoking guix
560pull}).
561
24e262f0
LC
562@item --roll-back
563Roll back to the previous @dfn{generation} of the profile---i.e., undo
564the last transaction.
565
566When combined with options such as @code{--install}, roll back occurs
567before any other actions.
568
d9307267
LC
569When rolling back from the first generation that actually contains
570installed packages, the profile is made to point to the @dfn{empty
571profile}, also known as @dfn{profile zero}---i.e., it contains no files
572apart from its own meta-data.
573
82fe08ed
LC
574Installing, removing, or upgrading packages from a generation that has
575been rolled back to overwrites previous future generations. Thus, the
576history of a profile's generations is always linear.
577
5924080d
LC
578@item --search-paths
579@cindex search paths
580Report environment variable definitions, in Bash syntax, that may be
581needed in order to use the set of installed packages. These environment
582variables are used to specify @dfn{search paths} for files used by some
583of the installed packages.
584
585For example, GCC needs the @code{CPATH} and @code{LIBRARY_PATH}
586environment variables to be defined so it can look for headers and
587libraries in the user's profile (@pxref{Environment Variables,,, gcc,
588Using the GNU Compiler Collection (GCC)}). If GCC and, say, the C
589library are installed in the profile, then @code{--search-paths} will
590suggest setting these variables to @code{@var{profile}/include} and
591@code{@var{profile}/lib}, respectively.
592
eeaf4427
LC
593@item --profile=@var{profile}
594@itemx -p @var{profile}
595Use @var{profile} instead of the user's default profile.
596
597@item --dry-run
598@itemx -n
599Show what would be done without actually doing it.
600
56b1f4b7
LC
601@item --fallback
602When substituting a pre-built binary fails, fall back to building
603packages locally.
604
3b824605 605@item --no-substitutes
969e678e
LC
606@itemx --max-silent-time=@var{seconds}
607Same as for @command{guix build} (@pxref{Invoking guix build}).
3b824605 608
70915c1a
LC
609@item --verbose
610Produce verbose output. In particular, emit the environment's build log
611on the standard error port.
612
eeaf4427
LC
613@item --bootstrap
614Use the bootstrap Guile to build the profile. This option is only
615useful to distribution developers.
616
617@end table
618
e49951eb 619In addition to these actions @command{guix package} supports the
733b4130
LC
620following options to query the current state of a profile, or the
621availability of packages:
eeaf4427 622
733b4130
LC
623@table @option
624
acc08466
NK
625@item --search=@var{regexp}
626@itemx -s @var{regexp}
627List the available packages whose synopsis or description matches
299112d3
LC
628@var{regexp}. Print all the meta-data of matching packages in
629@code{recutils} format (@pxref{Top, GNU recutils databases,, recutils,
630GNU recutils manual}).
acc08466 631
299112d3
LC
632This allows specific fields to be extracted using the @command{recsel}
633command, for instance:
634
635@example
e49951eb 636$ guix package -s malloc | recsel -p name,version
299112d3
LC
637name: glibc
638version: 2.17
639
640name: libgc
641version: 7.2alpha6
642@end example
acc08466 643
733b4130
LC
644@item --list-installed[=@var{regexp}]
645@itemx -I [@var{regexp}]
646List currently installed packages in the specified profile. When
647@var{regexp} is specified, list only installed packages whose name
648matches @var{regexp}.
649
650For each installed package, print the following items, separated by
651tabs: the package name, its version string, the part of the package that
652is installed (for instance, @code{out} for the default output,
653@code{include} for its headers, etc.), and the path of this package in
654the store.
655
64fc89b6
LC
656@item --list-available[=@var{regexp}]
657@itemx -A [@var{regexp}]
a1ba8475
LC
658List packages currently available in the software distribution
659(@pxref{GNU Distribution}). When @var{regexp} is specified, list only
660installed packages whose name matches @var{regexp}.
64fc89b6
LC
661
662For each package, print the following items separated by tabs: its name,
6e721c4d
LC
663its version string, the parts of the package (@pxref{Packages with
664Multiple Outputs}), and the source location of its definition.
64fc89b6 665
733b4130 666@end table
eeaf4427 667
6e721c4d
LC
668@node Packages with Multiple Outputs
669@section Packages with Multiple Outputs
670
671@cindex multiple-output packages
672@cindex package outputs
673
674Often, packages defined in Guix have a single @dfn{output}---i.e., the
675source package leads exactly one directory in the store. When running
676@command{guix package -i glibc}, one installs the default output of the
677GNU libc package; the default output is called @code{out}, but its name
678can be omitted as shown in this command. In this particular case, the
679default output of @code{glibc} contains all the C header files, shared
680libraries, static libraries, Info documentation, and other supporting
681files.
682
683Sometimes it is more appropriate to separate the various types of files
684produced from a single source package into separate outputs. For
685instance, the GLib C library (used by GTK+ and related packages)
686installs more than 20 MiB of reference documentation as HTML pages.
687To save space for users who do not need it, the documentation goes to a
688separate output, called @code{doc}. To install the main GLib output,
689which contains everything but the documentation, one would run:
690
691@example
692guix package -i glib
693@end example
694
695The command to install its documentation is:
696
697@example
698guix package -i glib:doc
699@end example
700
701Some packages install programs with different ``dependency footprints''.
702For instance, the WordNet package install both command-line tools and
703graphical user interfaces (GUIs). The former depend solely on the C
704library, whereas the latter depend on Tcl/Tk and the underlying X
705libraries. In this case, we leave the command-line tools in the default
706output, whereas the GUIs are in a separate output. This allows users
707who do not need the GUIs to save space.
708
709There are several such multiple-output packages in the GNU distribution.
91ef73d4
LC
710Other conventional output names include @code{lib} for libraries and
711possibly header files, @code{bin} for stand-alone programs, and
712@code{debug} for debugging information (@pxref{Installing Debugging
713Files}). The outputs of a packages are listed in the third column of
714the output of @command{guix package --list-available} (@pxref{Invoking
715guix package}).
6e721c4d 716
eeaf4427 717
e49951eb
MW
718@node Invoking guix gc
719@section Invoking @command{guix gc}
fe8ff028
LC
720
721@cindex garbage collector
722Packages that are installed but not used may be @dfn{garbage-collected}.
e49951eb 723The @command{guix gc} command allows users to explicitly run the garbage
fe8ff028
LC
724collector to reclaim space from the @file{/nix/store} directory.
725
726The garbage collector has a set of known @dfn{roots}: any file under
727@file{/nix/store} reachable from a root is considered @dfn{live} and
728cannot be deleted; any other file is considered @dfn{dead} and may be
729deleted. The set of garbage collector roots includes default user
e49951eb
MW
730profiles, and may be augmented with @command{guix build --root}, for
731example (@pxref{Invoking guix build}).
fe8ff028 732
e49951eb 733The @command{guix gc} command has three modes of operation: it can be
fe8ff028
LC
734used to garbage-collect any dead files (the default), to delete specific
735files (the @code{--delete} option), or to print garbage-collector
736information. The available options are listed below:
737
738@table @code
739@item --collect-garbage[=@var{min}]
740@itemx -C [@var{min}]
741Collect garbage---i.e., unreachable @file{/nix/store} files and
742sub-directories. This is the default operation when no option is
743specified.
744
745When @var{min} is given, stop once @var{min} bytes have been collected.
746@var{min} may be a number of bytes, or it may include a unit as a
747suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes.
748
749When @var{min} is omitted, collect all the garbage.
750
751@item --delete
752@itemx -d
753Attempt to delete all the store files and directories specified as
754arguments. This fails if some of the files are not in the store, or if
755they are still live.
756
757@item --list-dead
758Show the list of dead files and directories still present in the
759store---i.e., files and directories no longer reachable from any root.
760
761@item --list-live
762Show the list of live store files and directories.
ba8b732d
LC
763
764@end table
765
766In addition, the references among existing store files can be queried:
767
768@table @code
769
770@item --references
771@itemx --referrers
772List the references (respectively, the referrers) of store files given
773as arguments.
774
8e59fdd5
LC
775@item --requisites
776@itemx -R
777List the requisites of the store files passed as arguments. Requisites
778include the store files themselves, their references, and the references
779of these, recursively. In other words, the returned list is the
780@dfn{transitive closure} of the store files.
781
fe8ff028
LC
782@end table
783
eeaf4427 784
f651b477
LC
785@node Invoking guix pull
786@section Invoking @command{guix pull}
787
788Packages are installed or upgraded to the latest version available in
789the distribution currently available on your local machine. To update
790that distribution, along with the Guix tools, you must run @command{guix
791pull}: the command downloads the latest Guix source code and package
792descriptions, and deploys it.
793
794On completion, @command{guix package} will use packages and package
795versions from this just-retrieved copy of Guix. Not only that, but all
796the Guix commands and Scheme modules will also be taken from that latest
797version. New @command{guix} sub-commands added by the update also
798become available.
799
800The @command{guix pull} command is usually invoked with no arguments,
801but it supports the following options:
802
803@table @code
804@item --verbose
805Produce verbose output, writing build logs to the standard error output.
806
807@item --bootstrap
808Use the bootstrap Guile to build the latest Guix. This option is only
809useful to Guix developers.
810@end table
811
568717fd
LC
812@c *********************************************************************
813@node Programming Interface
814@chapter Programming Interface
815
3dc1970d
LC
816GNU Guix provides several Scheme programming interfaces (APIs) to
817define, build, and query packages. The first interface allows users to
818write high-level package definitions. These definitions refer to
819familiar packaging concepts, such as the name and version of a package,
820its build system, and its dependencies. These definitions can then be
821turned into concrete build actions.
822
ba55b1cb 823Build actions are performed by the Guix daemon, on behalf of users. In a
3dc1970d
LC
824standard setup, the daemon has write access to the store---the
825@file{/nix/store} directory---whereas users do not. The recommended
826setup also has the daemon perform builds in chroots, under a specific
827build users, to minimize interference with the rest of the system.
828
829@cindex derivation
830Lower-level APIs are available to interact with the daemon and the
831store. To instruct the daemon to perform a build action, users actually
832provide it with a @dfn{derivation}. A derivation is a low-level
833representation of the build actions to be taken, and the environment in
834which they should occur---derivations are to package definitions what
835assembly is to C programs.
836
837This chapter describes all these APIs in turn, starting from high-level
838package definitions.
839
568717fd
LC
840@menu
841* Defining Packages:: Defining new packages.
842* The Store:: Manipulating the package store.
843* Derivations:: Low-level interface to package derivations.
844@end menu
845
846@node Defining Packages
847@section Defining Packages
848
3dc1970d
LC
849The high-level interface to package definitions is implemented in the
850@code{(guix packages)} and @code{(guix build-system)} modules. As an
851example, the package definition, or @dfn{recipe}, for the GNU Hello
852package looks like this:
853
854@example
b22a12fd
LC
855(use-modules (guix packages)
856 (guix download)
857 (guix build-system gnu)
858 (guix licenses))
859
3dc1970d
LC
860(define hello
861 (package
862 (name "hello")
863 (version "2.8")
864 (source (origin
865 (method url-fetch)
866 (uri (string-append "mirror://gnu/hello/hello-" version
867 ".tar.gz"))
868 (sha256
869 (base32 "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"))))
870 (build-system gnu-build-system)
871 (inputs `(("gawk" ,gawk)))
872 (synopsis "GNU Hello")
873 (description "Yeah...")
874 (home-page "http://www.gnu.org/software/hello/")
b22a12fd 875 (license gpl3+)))
3dc1970d
LC
876@end example
877
878@noindent
879Without being a Scheme expert, the reader may have guessed the meaning
880of the various fields here. This expression binds variable @var{hello}
881to a @code{<package>} object, which is essentially a record
882(@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}).
883This package object can be inspected using procedures found in the
884@code{(guix packages)} module; for instance, @code{(package-name hello)}
885returns---surprise!---@code{"hello"}.
886
887There are a few points worth noting in the above package definition:
888
889@itemize
890@item
891The @code{source} field of the package is an @code{<origin>} object.
892Here, the @code{url-fetch} method from @code{(guix download)} is used,
893meaning that the source is a file to be downloaded over FTP or HTTP.
894
895The @code{mirror://gnu} prefix instructs @code{url-fetch} to use one of
896the GNU mirrors defined in @code{(guix download)}.
897
898The @code{sha256} field specifies the expected SHA256 hash of the file
899being downloaded. It is mandatory, and allows Guix to check the
900integrity of the file. The @code{(base32 @dots{})} form introduces the
6c365eca 901base32 representation of the hash. You can obtain this information with
210cc920
LC
902@code{guix download} (@pxref{Invoking guix download}) and @code{guix
903hash} (@pxref{Invoking guix hash}).
3dc1970d
LC
904
905@item
906@cindex GNU Build System
907The @code{build-system} field is set to @var{gnu-build-system}. The
908@var{gnu-build-system} variable is defined in the @code{(guix
909build-system gnu)} module, and is bound to a @code{<build-system>}
910object.
911
912Naturally, @var{gnu-build-system} represents the familiar GNU Build
913System, and variants thereof (@pxref{Configuration, configuration and
914makefile conventions,, standards, GNU Coding Standards}). In a
ba55b1cb 915nutshell, packages using the GNU Build System may be configured, built,
3dc1970d
LC
916and installed with the usual @code{./configure && make && make check &&
917make install} command sequence. This is what @var{gnu-build-system}
918does.
919
920In addition, @var{gnu-build-system} ensures that the ``standard''
921environment for GNU packages is available. This includes tools such as
922GCC, Coreutils, Bash, Make, Diffutils, and Patch.
923
924@item
925The @code{inputs} field specifies inputs to the build process---i.e.,
926build-time or run-time dependencies of the package. Here, we define an
927input called @code{"gawk"} whose value is that of the @var{gawk}
928variable; @var{gawk} is itself bound to a @code{<package>} object.
929
930Note that GCC, Coreutils, Bash, and other essential tools do not need to
931be specified as inputs here. Instead, @var{gnu-build-system} takes care
932of ensuring that they are present.
933
934However, any other dependencies need to be specified in the
935@code{inputs} field. Any dependency not specified here will simply be
936unavailable to the build process, possibly leading to a build failure.
937@end itemize
938
939There are other fields that package definitions may provide. Of
940particular interest is the @code{arguments} field. When specified, it
941must be bound to a list of additional arguments to be passed to the
942build system. For instance, the above definition could be augmented
943with the following field initializer:
944
945@example
946 (arguments `(#:tests? #f
947 #:configure-flags '("--enable-silent-rules")))
948@end example
949
950@noindent
951These are keyword arguments (@pxref{Optional Arguments, keyword
952arguments in Guile,, guile, GNU Guile Reference Manual}). They are
953passed to @var{gnu-build-system}, which interprets them as meaning ``do
954not run @code{make check}'', and ``run @file{configure} with the
874e6874
LC
955@code{--enable-silent-rules} flag''. The value of these keyword
956parameters is actually evaluated in the @dfn{build stratum}---i.e., by a
957Guile process launched by the daemon (@pxref{Derivations}).
3dc1970d
LC
958
959Once a package definition is in place@footnote{Simple package
960definitions like the one above may be automatically converted from the
e49951eb
MW
961Nixpkgs distribution using the @command{guix import} command.}, the
962package may actually be built using the @code{guix build} command-line
37166310
LC
963tool (@pxref{Invoking guix build}). Eventually, updating the package
964definition to a new upstream version can be partly automated by the
965@command{guix refresh} command (@pxref{Invoking guix refresh}).
3dc1970d
LC
966
967Behind the scenes, a derivation corresponding to the @code{<package>}
968object is first computed by the @code{package-derivation} procedure.
969That derivation is stored in a @code{.drv} file under @file{/nix/store}.
ba55b1cb 970The build actions it prescribes may then be realized by using the
3dc1970d
LC
971@code{build-derivations} procedure (@pxref{The Store}).
972
973@deffn {Scheme Procedure} package-derivation @var{store} @var{package} [@var{system}]
e509d152
LC
974Return the derivation path and corresponding @code{<derivation>} object
975of @var{package} for @var{system} (@pxref{Derivations}).
3dc1970d
LC
976
977@var{package} must be a valid @code{<package>} object, and @var{system}
978must be a string denoting the target system type---e.g.,
979@code{"x86_64-linux"} for an x86_64 Linux-based GNU system. @var{store}
980must be a connection to the daemon, which operates on the store
981(@pxref{The Store}).
982@end deffn
568717fd 983
9c1edabd
LC
984@noindent
985@cindex cross-compilation
986Similarly, it is possible to compute a derivation that cross-builds a
987package for some other system:
988
989@deffn {Scheme Procedure} package-cross-derivation @var{store} @
990 @var{package} @var{target} [@var{system}]
991Return the derivation path and corresponding @code{<derivation>} object
992of @var{package} cross-built from @var{system} to @var{target}.
993
994@var{target} must be a valid GNU triplet denoting the target hardware
995and operating system, such as @code{"mips64el-linux-gnu"}
996(@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
997Configure and Build System}).
998@end deffn
999
1000
568717fd
LC
1001@node The Store
1002@section The Store
1003
e531ac2a
LC
1004@cindex store
1005@cindex store paths
1006
1007Conceptually, the @dfn{store} is where derivations that have been
1008successfully built are stored---by default, under @file{/nix/store}.
1009Sub-directories in the store are referred to as @dfn{store paths}. The
1010store has an associated database that contains information such has the
1011store paths referred to by each store path, and the list of @emph{valid}
1012store paths---paths that result from a successful build.
1013
1014The store is always accessed by the daemon on behalf of its clients
1015(@pxref{Invoking guix-daemon}). To manipulate the store, clients
1016connect to the daemon over a Unix-domain socket, send it requests, and
1017read the result---these are remote procedure calls, or RPCs.
1018
1019The @code{(guix store)} module provides procedures to connect to the
1020daemon, and to perform RPCs. These are described below.
1021
1022@deffn {Scheme Procedure} open-connection [@var{file}] [#:reserve-space? #t]
1023Connect to the daemon over the Unix-domain socket at @var{file}. When
1024@var{reserve-space?} is true, instruct it to reserve a little bit of
1025extra space on the file system so that the garbage collector can still
1026operate, should the disk become full. Return a server object.
1027
1028@var{file} defaults to @var{%default-socket-path}, which is the normal
1029location given the options that were passed to @command{configure}.
1030@end deffn
1031
1032@deffn {Scheme Procedure} close-connection @var{server}
1033Close the connection to @var{server}.
1034@end deffn
1035
1036@defvr {Scheme Variable} current-build-output-port
1037This variable is bound to a SRFI-39 parameter, which refers to the port
1038where build and error logs sent by the daemon should be written.
1039@end defvr
1040
1041Procedures that make RPCs all take a server object as their first
1042argument.
1043
1044@deffn {Scheme Procedure} valid-path? @var{server} @var{path}
1045Return @code{#t} when @var{path} is a valid store path.
1046@end deffn
1047
1048@deffn {Scheme Procedure} add-text-to-store @var{server} @var{name} @var{text} @var{references}
1049Add @var{text} under file @var{name} in the store, and return its store
1050path. @var{references} is the list of store paths referred to by the
1051resulting store path.
1052@end deffn
1053
874e6874
LC
1054@deffn {Scheme Procedure} build-derivations @var{server} @var{derivations}
1055Build @var{derivations} (a list of derivation paths), and return when
1056the worker is done building them. Return @code{#t} on success.
1057@end deffn
1058
e531ac2a
LC
1059@c FIXME
1060@i{This section is currently incomplete.}
568717fd
LC
1061
1062@node Derivations
1063@section Derivations
1064
874e6874
LC
1065@cindex derivations
1066Low-level build actions and the environment in which they are performed
1067are represented by @dfn{derivations}. A derivation contain the
1068following pieces of information:
1069
1070@itemize
1071@item
1072The outputs of the derivation---derivations produce at least one file or
1073directory in the store, but may produce more.
1074
1075@item
1076The inputs of the derivations, which may be other derivations or plain
1077files in the store (patches, build scripts, etc.)
1078
1079@item
1080The system type targeted by the derivation---e.g., @code{x86_64-linux}.
1081
1082@item
1083The file name of a build script in the store, along with the arguments
1084to be passed.
1085
1086@item
1087A list of environment variables to be defined.
1088
1089@end itemize
1090
1091@cindex derivation path
1092Derivations allow clients of the daemon to communicate build actions to
1093the store. They exist in two forms: as an in-memory representation,
1094both on the client- and daemon-side, and as files in the store whose
1095name end in @code{.drv}---these files are referred to as @dfn{derivation
1096paths}. Derivations paths can be passed to the @code{build-derivations}
1097procedure to perform the build actions they prescribe (@pxref{The
1098Store}).
1099
1100The @code{(guix derivations)} module provides a representation of
1101derivations as Scheme objects, along with procedures to create and
1102otherwise manipulate derivations. The lowest-level primitive to create
1103a derivation is the @code{derivation} procedure:
1104
1105@deffn {Scheme Procedure} derivation @var{store} @var{name} @var{system} @var{builder} @var{args} @var{env-vars} @var{inputs} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] [#:hash-mode #f]
1106Build a derivation with the given arguments. Return the resulting store
1107path and @code{<derivation>} object.
1108
1109When @var{hash}, @var{hash-algo}, and @var{hash-mode} are given, a
1110@dfn{fixed-output derivation} is created---i.e., one whose result is
1111known in advance, such as a file download.
1112@end deffn
1113
1114@noindent
1115Here's an example with a shell script as its builder, assuming
1116@var{store} is an open connection to the daemon, and @var{bash} points
1117to a Bash executable in the store:
1118
1119@lisp
1120(use-modules (guix utils)
1121 (guix store)
1122 (guix derivations))
1123
1124(call-with-values
1125 (lambda ()
1126 (let ((builder ; add the Bash script to the store
1127 (add-text-to-store store "my-builder.sh"
1128 "echo hello world > $out\n" '())))
1129 (derivation store "foo" (%current-system)
1130 bash `("-e" ,builder)
1131 '(("HOME" . "/homeless")) '())))
1132 list)
1133@result{} ("/nix/store/@dots{}-foo.drv" #<<derivation> @dots{}>)
1134@end lisp
1135
1136As can be guessed, this primitive is cumbersome to use directly. An
1137improved variant is @code{build-expression->derivation}, which allows
1138the caller to directly pass a Guile expression as the build script:
1139
1140@deffn {Scheme Procedure} build-expression->derivation @var{store} @var{name} @var{system} @var{exp} @var{inputs} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] [#:env-vars '()] [#:modules '()] [#:guile-for-build #f]
1141Return a derivation that executes Scheme expression @var{exp} as a
1142builder for derivation @var{name}. @var{inputs} must be a list of
1143@code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted,
1144@code{"out"} is assumed. @var{modules} is a list of names of Guile
1145modules from the current search path to be copied in the store,
1146compiled, and made available in the load path during the execution of
1147@var{exp}---e.g., @code{((guix build utils) (guix build
1148gnu-build-system))}.
1149
1150@var{exp} is evaluated in an environment where @code{%outputs} is bound
1151to a list of output/path pairs, and where @code{%build-inputs} is bound
1152to a list of string/output-path pairs made from @var{inputs}.
1153Optionally, @var{env-vars} is a list of string pairs specifying the name
1154and value of environment variables visible to the builder. The builder
1155terminates by passing the result of @var{exp} to @code{exit}; thus, when
1156@var{exp} returns @code{#f}, the build is considered to have failed.
1157
1158@var{exp} is built using @var{guile-for-build} (a derivation). When
1159@var{guile-for-build} is omitted or is @code{#f}, the value of the
1160@code{%guile-for-build} fluid is used instead.
1161@end deffn
1162
1163@noindent
1164Here's an example of a single-output derivation that creates a directory
1165containing one file:
1166
1167@lisp
1168(let ((builder '(let ((out (assoc-ref %outputs "out")))
1169 (mkdir out) ; create /nix/store/@dots{}-goo
1170 (call-with-output-file (string-append out "/test")
1171 (lambda (p)
1172 (display '(hello guix) p))))))
1173 (build-expression->derivation store "goo" (%current-system)
1174 builder '()))
1175
1176@result{} "/nix/store/@dots{}-goo.drv"
1177@result{} #<<derivation> @dots{}>
1178@end lisp
1179
1180@cindex strata of code
1181Remember that the build expression passed to
1182@code{build-expression->derivation} is run by a separate Guile process
1183than the one that calls @code{build-expression->derivation}: it is run
1184by a Guile process launched by the daemon, typically in a chroot. So,
1185while there is a single language for both the @dfn{host} and the build
1186side, there are really two @dfn{strata} of code: the host-side, and the
1187build-side code@footnote{The term @dfn{stratum} in this context was
1188coined by Manuel Serrano et al. in the context of their work on Hop.}.
1189This distinction is important to keep in mind, notably when using
1190higher-level constructs such as @var{gnu-build-system} (@pxref{Defining
1191Packages}). For this reason, Guix modules that are meant to be used in
1192the build stratum are kept in the @code{(guix build @dots{})} name
1193space.
568717fd
LC
1194
1195@c *********************************************************************
1196@node Utilities
1197@chapter Utilities
1198
210cc920
LC
1199This section describes tools primarily targeted at developers and users
1200who write new package definitions. They complement the Scheme
1201programming interface of Guix in a convenient way.
1202
568717fd 1203@menu
37166310 1204* Invoking guix build:: Building packages from the command line.
210cc920 1205* Invoking guix download:: Downloading a file and printing its hash.
37166310
LC
1206* Invoking guix hash:: Computing the cryptographic hash of a file.
1207* Invoking guix refresh:: Updating package definitions.
568717fd
LC
1208@end menu
1209
e49951eb
MW
1210@node Invoking guix build
1211@section Invoking @command{guix build}
568717fd 1212
e49951eb 1213The @command{guix build} command builds packages or derivations and
6798a8e4
LC
1214their dependencies, and prints the resulting store paths. Note that it
1215does not modify the user's profile---this is the job of the
e49951eb 1216@command{guix package} command (@pxref{Invoking guix package}). Thus,
6798a8e4
LC
1217it is mainly useful for distribution developers.
1218
1219The general syntax is:
c78bd12b
LC
1220
1221@example
e49951eb 1222guix build @var{options} @var{package-or-derivation}@dots{}
c78bd12b
LC
1223@end example
1224
1225@var{package-or-derivation} may be either the name of a package found in
5401dd75
LC
1226the software distribution such as @code{coreutils} or
1227@code{coreutils-8.20}, or a derivation such as
1228@file{/nix/store/@dots{}-coreutils-8.19.drv}. Alternatively, the
c78bd12b
LC
1229@code{--expression} option may be used to specify a Scheme expression
1230that evaluates to a package; this is useful when disambiguation among
1231several same-named packages or package variants is needed.
1232
1233The @var{options} may be zero or more of the following:
1234
1235@table @code
1236
1237@item --expression=@var{expr}
1238@itemx -e @var{expr}
1239Build the package @var{expr} evaluates to.
1240
5401dd75 1241For example, @var{expr} may be @code{(@@ (gnu packages guile)
c78bd12b
LC
1242guile-1.8)}, which unambiguously designates this specific variant of
1243version 1.8 of Guile.
1244
1245@item --source
1246@itemx -S
1247Build the packages' source derivations, rather than the packages
1248themselves.
1249
e49951eb 1250For instance, @code{guix build -S gcc} returns something like
6798a8e4 1251@file{/nix/store/@dots{}-gcc-4.7.2.tar.bz2}, which is GCC's source tarball.
c78bd12b
LC
1252
1253@item --system=@var{system}
1254@itemx -s @var{system}
1255Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
1256the host's system type.
1257
1258An example use of this is on Linux-based systems, which can emulate
1259different personalities. For instance, passing
1260@code{--system=i686-linux} on an @code{x86_64-linux} system allows users
1261to build packages in a complete 32-bit environment.
1262
e55ec43d
LC
1263@item --target=@var{triplet}
1264@cindex cross-compilation
1265Cross-build for @var{triplet}, which must be a valid GNU triplet, such
1266as @code{"mips64el-linux-gnu"} (@pxref{Configuration Names, GNU
1267configuration triplets,, configure, GNU Configure and Build System}).
1268
c78bd12b
LC
1269@item --derivations
1270@itemx -d
1271Return the derivation paths, not the output paths, of the given
1272packages.
1273
1274@item --keep-failed
1275@itemx -K
1276Keep the build tree of failed builds. Thus, if a build fail, its build
1277tree is kept under @file{/tmp}, in a directory whose name is shown at
1278the end of the build log. This is useful when debugging build issues.
1279
1280@item --dry-run
1281@itemx -n
1282Do not build the derivations.
1283
56b1f4b7
LC
1284@item --fallback
1285When substituting a pre-built binary fails, fall back to building
1286packages locally.
1287
c78bd12b
LC
1288@item --no-substitutes
1289Build instead of resorting to pre-built substitutes.
1290
969e678e
LC
1291@item --max-silent-time=@var{seconds}
1292When the build or substitution process remains silent for more than
1293@var{seconds}, terminate it and report a build failure.
1294
c78bd12b
LC
1295@item --cores=@var{n}
1296@itemx -c @var{n}
1297Allow the use of up to @var{n} CPU cores for the build. The special
1298value @code{0} means to use as many CPU cores as available.
1299
1300@item --root=@var{file}
1301@itemx -r @var{file}
1302Make @var{file} a symlink to the result, and register it as a garbage
1303collector root.
07ab4bf1
LC
1304
1305@item --verbosity=@var{level}
1306Use the given verbosity level. @var{level} must be an integer between 0
1307and 5; higher means more verbose output. Setting a level of 4 or more
1308may be helpful when debugging setup issues with the build daemon.
1309
c78bd12b
LC
1310@end table
1311
e49951eb 1312Behind the scenes, @command{guix build} is essentially an interface to
c78bd12b
LC
1313the @code{package-derivation} procedure of the @code{(guix packages)}
1314module, and to the @code{build-derivations} procedure of the @code{(guix
1315store)} module.
1316
210cc920
LC
1317@node Invoking guix download
1318@section Invoking @command{guix download}
1319
1320When writing a package definition, developers typically need to download
1321the package's source tarball, compute its SHA256 hash, and write that
1322hash in the package definition (@pxref{Defining Packages}). The
1323@command{guix download} tool helps with this task: it downloads a file
1324from the given URI, adds it to the store, and prints both its file name
1325in the store and its SHA256 hash.
1326
1327The fact that the downloaded file is added to the store saves bandwidth:
1328when the developer eventually tries to build the newly defined package
1329with @command{guix build}, the source tarball will not have to be
1330downloaded again because it is already in the store. It is also a
1331convenient way to temporarily stash files, which may be deleted
1332eventually (@pxref{Invoking guix gc}).
1333
1334The @command{guix download} command supports the same URIs as used in
1335package definitions. In particular, it supports @code{mirror://} URIs.
1336@code{https} URIs (HTTP over TLS) are supported @emph{provided} the
1337Guile bindings for GnuTLS are available in the user's environment; when
1338they are not available, an error is raised.
1339
1340The following option is available:
1341
1342@table @code
1343@item --format=@var{fmt}
1344@itemx -f @var{fmt}
1345Write the hash in the format specified by @var{fmt}. For more
1346information on the valid values for @var{fmt}, @ref{Invoking guix hash}.
1347@end table
1348
6c365eca
NK
1349@node Invoking guix hash
1350@section Invoking @command{guix hash}
1351
210cc920 1352The @command{guix hash} command computes the SHA256 hash of a file.
6c365eca
NK
1353It is primarily a convenience tool for anyone contributing to the
1354distribution: it computes the cryptographic hash of a file, which can be
1355used in the definition of a package (@pxref{Defining Packages}).
1356
1357The general syntax is:
1358
1359@example
1360guix hash @var{option} @var{file}
1361@end example
1362
1363@command{guix hash} has the following option:
1364
1365@table @code
1366
1367@item --format=@var{fmt}
1368@itemx -f @var{fmt}
210cc920 1369Write the hash in the format specified by @var{fmt}.
6c365eca
NK
1370
1371Supported formats: @code{nix-base32}, @code{base32}, @code{base16}
1372(@code{hex} and @code{hexadecimal} can be used as well).
1373
1374If the @option{--format} option is not specified, @command{guix hash}
1375will output the hash in @code{nix-base32}. This representation is used
1376in the definitions of packages.
1377
1378@end table
1379
37166310
LC
1380@node Invoking guix refresh
1381@section Invoking @command{guix refresh}
1382
1383The primary audience of the @command{guix refresh} command is developers
1384of the GNU software distribution. By default, it reports any packages
1385provided by the distribution that are outdated compared to the latest
1386upstream version, like this:
1387
1388@example
1389$ guix refresh
1390gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
1391gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0
1392@end example
1393
1394It does so by browsing each package's FTP directory and determining the
1395highest version number of the source tarballs
1396therein@footnote{Currently, this only works for GNU packages.}.
1397
1398When passed @code{--update}, it modifies distribution source files to
1399update the version numbers and source tarball hashes of those packages'
1400recipes (@pxref{Defining Packages}). This is achieved by downloading
1401each package's latest source tarball and its associated OpenPGP
1402signature, authenticating the downloaded tarball against its signature
1403using @command{gpg}, and finally computing its hash. When the public
1404key used to sign the tarball is missing from the user's keyring, an
1405attempt is made to automatically retrieve it from a public key server;
1406when it's successful, the key is added to the user's keyring; otherwise,
1407@command{guix refresh} reports an error.
1408
1409The following options are supported:
1410
1411@table @code
1412
1413@item --update
1414@itemx -u
1415Update distribution source files (package recipes) in place.
1416@ref{Defining Packages}, for more information on package definitions.
1417
1418@item --select=[@var{subset}]
1419@itemx -s @var{subset}
1420Select all the packages in @var{subset}, one of @code{core} or
1421@code{non-core}.
1422
1423The @code{core} subset refers to all the packages at the core of the
1424distribution---i.e., packages that are used to build ``everything
1425else''. This includes GCC, libc, Binutils, Bash, etc. Usually,
1426changing one of these packages in the distribution entails a rebuild of
1427all the others. Thus, such updates are an inconvenience to users in
1428terms of build time or bandwidth used to achieve the upgrade.
1429
1430The @code{non-core} subset refers to the remaining packages. It is
1431typically useful in cases where an update of the core packages would be
1432inconvenient.
1433
1434@end table
1435
1436In addition, @command{guix refresh} can be passed one or more package
1437names, as in this example:
1438
1439@example
1440guix refresh -u emacs idutils
1441@end example
1442
1443@noindent
1444The command above specifically updates the @code{emacs} and
1445@code{idutils} packages. The @code{--select} option would have no
1446effect in this case.
1447
f9230085
LC
1448The following options can be used to customize GnuPG operation:
1449
1450@table @code
1451
1452@item --key-server=@var{host}
1453Use @var{host} as the OpenPGP key server when importing a public key.
1454
1455@item --gpg=@var{command}
1456Use @var{command} as the GnuPG 2.x command. @var{command} is searched
1457for in @code{$PATH}.
1458
1459@end table
1460
37166310 1461
a1ba8475
LC
1462@c *********************************************************************
1463@node GNU Distribution
1464@chapter GNU Distribution
1465
1466Guix comes with a distribution of free software@footnote{The term
1467``free'' here refers to the
1468@url{http://www.gnu.org/philosophy/free-sw.html,freedom provided to
1469users of that software}.} that form the basis of the GNU system. This
1470includes core GNU packages such as GNU libc, GCC, and Binutils, as well
1471as many GNU and non-GNU applications. The complete list of available
e49951eb
MW
1472packages can be seen by running @command{guix package} (@pxref{Invoking
1473guix package}):
a1ba8475
LC
1474
1475@example
e49951eb 1476guix package --list-available
a1ba8475
LC
1477@end example
1478
401c53c4
LC
1479Our goal is to build a practical 100% free software distribution of
1480Linux-based and other variants of GNU, with a focus on the promotion and
1481tight integration of GNU components, and an emphasis on programs and
1482tools that help users exert that freedom.
1483
1484@menu
b208a005 1485* Packaging Guidelines:: What goes into the distribution.
91ef73d4 1486* Installing Debugging Files:: Feeding the debugger.
401c53c4
LC
1487* Package Modules:: Packages from the programmer's viewpoint.
1488* Bootstrapping:: GNU/Linux built from scratch.
8b315a6d 1489* Porting:: Targeting another platform or kernel.
401c53c4
LC
1490@end menu
1491
1492Building this distribution is a cooperative effort, and you are invited
1493to join! @ref{Contributing}, for information about how you can help.
1494
b208a005
LC
1495@node Packaging Guidelines
1496@section Packaging Guidelines
1497
1498@c Adapted from http://www.gnu.org/philosophy/philosophy.html.
1499
1500The GNU operating system has been developed so that users can have
1501freedom in their computing. GNU is @dfn{free software}, meaning that
1502users have the @url{http://www.gnu.org/philosophy/free-sw.html,four
1503essential freedoms}: to run the program, to study and change the program
1504in source code form, to redistribute exact copies, and to distribute
1505modified versions. Packages found in the GNU distribution provide only
1506software that conveys these four freedoms.
1507
1508In addition, the GNU distribution follow the
1509@url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
1510software distribution guidelines}. Among other things, these guidelines
1511reject non-free firmware, recommendations of non-free software, and
1512discuss ways to deal with trademarks and patents.
1513
1514
91ef73d4
LC
1515@node Installing Debugging Files
1516@section Installing Debugging Files
1517
1518Program binaries, as produced by the GCC compilers for instance, are
1519typically written in the ELF format, with a section containing
1520@dfn{debugging information}. Debugging information is what allows the
1521debugger, GDB, to map binary code to source code; it is required to
1522debug a compiled program in good conditions.
1523
1524The problem with debugging information is that is takes up a fair amount
1525of disk space. For example, debugging information for the GNU C Library
1526weighs in at more than 60 MiB. Thus, as a user, keeping all the
1527debugging info of all the installed programs is usually not an option.
1528Yet, space savings should not come at the cost of an impediment to
1529debugging---especially in the GNU system, which should make it easier
1530for users to exert their computing freedom (@pxref{GNU Distribution}).
1531
1532Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
1533mechanism that allows users to get the best of both worlds: debugging
1534information can be stripped from the binaries and stored in separate
1535files. GDB is then able to load debugging information from those files,
1536when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
1537with GDB}).
1538
1539The GNU distribution takes advantage of this by storing debugging
1540information in the @code{lib/debug} sub-directory of a separate package
1541output unimaginatively called @code{debug} (@pxref{Packages with
1542Multiple Outputs}). Users can choose to install the @code{debug} output
1543of a package when they need it. For instance, the following command
1544installs the debugging information for the GNU C Library and for GNU
1545Guile:
1546
1547@example
1548guix package -i glibc:debug -i guile:debug
1549@end example
1550
1551GDB must then be told to look for debug files in the user's profile, by
1552setting the @code{debug-file-directory} variable (consider setting it
1553from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
1554GDB}):
1555
1556@example
1557(gdb) set debug-file-directory ~/.guix-profile/lib/debug
1558@end example
1559
1560From there on, GDB will pick up debugging information from the
1561@code{.debug} files under @file{~/.guix-profile/lib/debug}.
1562
1563@c XXX: keep me up-to-date
1564The @code{debug} output mechanism in Guix is implemented by the
1565@code{gnu-build-system} (@pxref{Defining Packages}). Currently, it is
1566opt-in---debugging information is available only for those packages
1567whose definition explicitly declares a @code{debug} output. This may be
1568changed to opt-out in the future, if our build farm servers can handle
1569the load. To check whether a package has a @code{debug} output, use
1570@command{guix package --list-available} (@pxref{Invoking guix package}).
1571
1572
401c53c4
LC
1573@node Package Modules
1574@section Package Modules
1575
1576From a programming viewpoint, the package definitions of the
1577distribution are provided by Guile modules in the @code{(gnu packages
1578...)} name space---for instance, the @code{(gnu packages emacs)} module
1579exports a variable named @code{emacs}, which is bound to a
1580@code{<package>} object (@pxref{Defining Packages}). The @code{(gnu
1581packages)} module provides facilities for searching for packages.
a1ba8475
LC
1582
1583The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
1584each package is built based solely on other packages in the
1585distribution. The root of this dependency graph is a small set of
1586@dfn{bootstrap binaries}, provided by the @code{(gnu packages
401c53c4
LC
1587bootstrap)} module. More on this in the next section.
1588
1589
1590@node Bootstrapping
1591@section Bootstrapping
1592
1593@c Adapted from the ELS 2013 paper.
1594
1595@cindex bootstrapping
1596
1597Bootstrapping in our context refers to how the distribution gets built
1598``from nothing''. Remember that the build environment of a derivation
1599contains nothing but its declared inputs (@pxref{Introduction}). So
1600there's an obvious chicken-and-egg problem: how does the first package
1601get built? How does the first compiler get compiled? Note that this is
1602a question of interest only to the curious hacker, not to the regular
1603user, so you can shamelessly skip this section if you consider yourself
1604a ``regular user''.
1605
1606@cindex bootstrap binaries
1607The GNU system is primarily made of C code, with libc at its core. The
1608GNU build system itself assumes the availability of a Bourne shell and
1609command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
1610`grep'. Furthermore, build programs---programs that run
1611@code{./configure}, @code{make}, etc.---are written in Guile Scheme
1612(@pxref{Derivations}). Consequently, to be able to build anything at
1613all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
1614Binutils, libc, and the other packages mentioned above---the
1615@dfn{bootstrap binaries}.
1616
1617These bootstrap binaries are ``taken for granted'', though we can also
1618re-create them if needed (more on that later.)
1619
1620@unnumberedsubsec Preparing to Use the Bootstrap Binaries
1621
1622@c As of Emacs 24.3, Info-mode displays the image, but since it's a
1623@c large image, it's hard to scroll. Oh well.
1624@image{images/bootstrap-graph,,,Dependency graph of the early bootstrap derivations}
1625
1626The figure above shows the very beginning of the dependency graph of the
1627distribution, corresponding to the package definitions of the @code{(gnu
1628packages bootstrap)} module. At this level of detail, things are
1629slightly complex. First, Guile itself consists of an ELF executable,
1630along with many source and compiled Scheme files that are dynamically
1631loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz}
1632tarball shown in this graph. This tarball is part of Guix's ``source''
1633distribution, and gets inserted into the store with @code{add-to-store}
1634(@pxref{The Store}).
a1ba8475 1635
401c53c4
LC
1636But how do we write a derivation that unpacks this tarball and adds it
1637to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
1638derivation---the first one that gets built---uses @code{bash} as its
1639builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
1640@code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar},
1641@file{xz}, and @file{mkdir} are statically-linked binaries, also part of
1642the Guix source distribution, whose sole purpose is to allow the Guile
1643tarball to be unpacked.
1644
1645Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
1646Guile that can be used to run subsequent build programs. Its first task
1647is to download tarballs containing the other pre-built binaries---this
1648is what the @code{.tar.xz.drv} derivations do. Guix modules such as
1649@code{ftp-client.scm} are used for this purpose. The
1650@code{module-import.drv} derivations import those modules in a directory
1651in the store, using the original layout. The
1652@code{module-import-compiled.drv} derivations compile those modules, and
1653write them in an output directory with the right layout. This
1654corresponds to the @code{#:modules} argument of
1655@code{build-expression->derivation} (@pxref{Derivations}).
1656
1657Finally, the various tarballs are unpacked by the
1658derivations @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv},
1659etc., at which point we have a working C tool chain.
1660
1661
1662@unnumberedsubsec Building the Build Tools
1663
1664@c TODO: Add a package-level dependency graph generated from (gnu
1665@c packages base).
1666
1667Bootstrapping is complete when we have a full tool chain that does not
1668depend on the pre-built bootstrap tools discussed above. This
1669no-dependency requirement is verified by checking whether the files of
1670the final tool chain contain references to the @file{/nix/store}
1671directories of the bootstrap inputs. The process that leads to this
1672``final'' tool chain is described by the package definitions found in
1673the @code{(gnu packages base)} module.
1674
1675@c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
1676The first tool that gets built with the bootstrap binaries is
1677GNU Make, which is a prerequisite for all the following packages.
1678From there Findutils and Diffutils get built.
1679
1680Then come the first-stage Binutils and GCC, built as pseudo cross
1681tools---i.e., with @code{--target} equal to @code{--host}. They are
1682used to build libc. Thanks to this cross-build trick, this libc is
1683guaranteed not to hold any reference to the initial tool chain.
1684
1685From there the final Binutils and GCC are built. GCC uses @code{ld}
1686from the final Binutils, and links programs against the just-built libc.
1687This tool chain is used to build the other packages used by Guix and by
1688the GNU Build System: Guile, Bash, Coreutils, etc.
1689
1690And voilà! At this point we have the complete set of build tools that
1691the GNU Build System expects. These are in the @code{%final-inputs}
1692variables of the @code{(gnu packages base)} module, and are implicitly
1693used by any package that uses @code{gnu-build-system} (@pxref{Defining
1694Packages}).
1695
1696
1697@unnumberedsubsec Building the Bootstrap Binaries
1698
1699Because the final tool chain does not depend on the bootstrap binaries,
1700those rarely need to be updated. Nevertheless, it is useful to have an
1701automated way to produce them, should an update occur, and this is what
1702the @code{(gnu packages make-bootstrap)} module provides.
1703
1704The following command builds the tarballs containing the bootstrap
1705binaries (Guile, Binutils, GCC, libc, and a tarball containing a mixture
1706of Coreutils and other basic command-line tools):
a1ba8475 1707
401c53c4
LC
1708@example
1709guix build bootstrap-tarballs
1710@end example
1711
1712The generated tarballs are those that should be referred to in the
1713@code{(gnu packages bootstrap)} module mentioned at the beginning of
1714this section.
1715
1716Still here? Then perhaps by now you've started to wonder: when do we
1717reach a fixed point? That is an interesting question! The answer is
1718unknown, but if you would like to investigate further (and have
1719significant computational and storage resources to do so), then let us
1720know.
a1ba8475 1721
8b315a6d
LC
1722@node Porting
1723@section Porting to a New Platform
1724
1725As discussed above, the GNU distribution is self-contained, and
1726self-containment is achieved by relying on pre-built ``bootstrap
1727binaries'' (@pxref{Bootstrapping}). These binaries are specific to an
1728operating system kernel, CPU architecture, and application binary
1729interface (ABI). Thus, to port the distribution to a platform that is
1730not yet supported, one must build those bootstrap binaries, and update
1731the @code{(gnu packages bootstrap)} module to use them on that platform.
1732
1733Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
1734When everything goes well, and assuming the GNU tool chain supports the
1735target platform, this can be as simple as running a command like this
1736one:
1737
1738@example
1739guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
1740@end example
1741
1742In practice, there may be some complications. First, it may be that the
1743extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
1744above) is not recognized by all the GNU tools. Typically, glibc
1745recognizes some of these, whereas GCC uses an extra @code{--with-abi}
1746configure flag (see @code{gcc.scm} for examples of how to handle this.)
1747Second, some of the required packages could fail to build for that
1748platform. Lastly, the generated binaries could be broken for some
1749reason.
1750
9bf3c1a7
LC
1751
1752@c *********************************************************************
1753@node Contributing
1754@chapter Contributing
1755
1756This project is a cooperative effort, and we need your help to make it
63f6004b 1757grow! Please get in touch with us on @email{guix-devel@@gnu.org}. We
a1ba8475
LC
1758welcome ideas, bug reports, patches, and anything that may be helpful to
1759the project.
1760
9bf3c1a7
LC
1761Please see the
1762@url{http://git.savannah.gnu.org/cgit/guix.git/tree/HACKING,
1763@file{HACKING} file} that comes with the Guix source code for practical
1764details about contributions.
1765
c78bd12b 1766
568717fd
LC
1767@c *********************************************************************
1768@node Acknowledgments
1769@chapter Acknowledgments
1770
1771Guix is based on the Nix package manager, which was designed and
1772implemented by Eelco Dolstra. Nix pioneered functional package
1773management, and promoted unprecedented features, such as transactional
1774package upgrades and rollbacks, per-user profiles, and referentially
1775transparent build processes. Without this work, Guix would not exist.
1776
1777The Nix-based software distributions, Nixpkgs and NixOS, have also been
1778an inspiration for Guix.
1779
1780@c *********************************************************************
1781@node GNU Free Documentation License
1782@appendix GNU Free Documentation License
1783
1784@include fdl-1.3.texi
1785
1786@c *********************************************************************
1787@node Concept Index
1788@unnumbered Concept Index
1789@printindex cp
1790
1791@node Function Index
1792@unnumbered Function Index
1793@printindex fn
1794
1795@bye
1796
1797@c Local Variables:
1798@c ispell-local-dictionary: "american";
1799@c End: