Next: Level 2: The Repository as a Channel, Previous: 시작하기, Up: Software Development [Contents][Index]
Now that we have a package definition (see 시작하기), why not
also take advantage of it so we can build Guile with Guix? We had left the
source
field empty, because guix shell
above only cares
about the inputs of our package—so it can set up the development
environment—not about the package itself.
To build the package with Guix, we’ll need to fill out the source
field, along these lines:
(use-modules (guix) (guix git-download) ;for ‘git-predicate’ …) (define vcs-file? ;; Return true if the given file is under version control. (or (git-predicate (current-source-directory)) (const #t))) ;not in a Git checkout (package (name "guile") (version "3.0.99-git") ;funky version number (source (local-file "." "guile-checkout" #:recursive? #t #:select? vcs-file?)) …)
Here’s what we changed compared to the previous section:
(guix git-download)
to our set of imported modules, so we
can use its git-predicate
procedure.
vcs-file?
as a procedure that returns true when passed a
file that is under version control. For good measure, we add a fallback case
for when we’re not in a Git checkout: always return true.
source
to a
local-file
—a
recursive copy of the current directory ("."
), limited to files under
version control (the #:select?
bit).
From there on, our guix.scm file serves a second purpose: it lets us build the software with Guix. The whole point of building with Guix is that it’s a “clean” build—you can be sure nothing from your working tree or system interferes with the build result—and it lets you test a variety of things. First, you can do a plain native build:
guix build -f guix.scm
But you can also build for another system (possibly after setting up see offloading in GNU Guix Reference Manual or see transparent emulation in GNU Guix Reference Manual):
guix build -f guix.scm -s aarch64-linux -s riscv64-linux
… or cross-compile:
guix build -f guix.scm --target=x86_64-w64-mingw32
You can also use package transformations to test package variants (see Package Transformation Options in GNU Guix Reference Manual):
# What if we built with Clang instead of GCC? guix build -f guix.scm \ --with-c-toolchain=guile@3.0.99-git=clang-toolchain # What about that under-tested configure flag? guix build -f guix.scm \ --with-configure-flag=guile@3.0.99-git=--disable-networking
Handy!
Next: Level 2: The Repository as a Channel, Previous: 시작하기, Up: Software Development [Contents][Index]