Next: The Perfect Setup, Previous: Building from Git, Up: Contributing [Contents][Index]
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.
To that end, all the command-line tools can be used even if you have not
run make install
. To do that, you first need to have an
environment with all the dependencies available (see Building from Git), and then simply prefix each command with ./pre-inst-env
(the pre-inst-env script lives in the top build tree of Guix; it
is generated by running ./bootstrap
followed by
./configure
). As an example, here is how you would build the
hello
package as defined in your working tree (this assumes
guix-daemon
is already running on your system; it’s OK if it’s
a different version):
$ ./pre-inst-env guix build hello
Similarly, an example for a Guile session using the Guix modules:
$ ./pre-inst-env guile -c '(use-modules (guix utils)) (pk (%current-system))' ;;; ("x86_64-linux")
… and for a REPL (see Using Guile Interactively in Guile Reference Manual):
$ ./pre-inst-env guile scheme@(guile-user)> ,use(guix) scheme@(guile-user)> ,use(gnu) scheme@(guile-user)> (define snakes (fold-packages (lambda (package lst) (if (string-prefix? "python" (package-name package)) (cons package lst) lst)) '())) scheme@(guile-user)> (length snakes) $1 = 361
If you are hacking on the daemon and its supporting code or if
guix-daemon
is not already running on your system, you can
launch it straight from the build tree38:
$ sudo -E ./pre-inst-env guix-daemon --build-users-group=guixbuild
The pre-inst-env
script sets up all the environment variables
necessary to support this, including PATH
and GUILE_LOAD_PATH
.
Note that ./pre-inst-env guix pull
does not upgrade the
local source tree; it simply updates the ~/.config/guix/current
symlink (see Invoking guix pull). Run git pull
instead if
you want to upgrade your local source tree.
Sometimes, especially if you have recently updated your repository,
running ./pre-inst-env
will print a message similar to the
following example:
;;; note: source file /home/user/projects/guix/guix/progress.scm ;;; newer than compiled /home/user/projects/guix/guix/progress.go
This is only a note and you can safely ignore it. You can get rid of
the message by running make -j4
. Until you do, Guile will run
slightly slower because it will interpret the code instead of using
prepared Guile object (.go) files.
You can run make
automatically as you work using
watchexec
from the watchexec
package. For example,
to build again each time you update a package file, you can run
‘watchexec -w gnu/packages make -j4’.
The -E flag to
sudo
guarantees that GUILE_LOAD_PATH
is correctly set
such that guix-daemon
and the tools it uses can find the Guile
modules they need.
Next: The Perfect Setup, Previous: Building from Git, Up: Contributing [Contents][Index]