Próximo: , Anterior: , Acima: Desenvolvimento de software X   [Conteúdo][Índice]


7.2 Nível 1: Construindo com Guix

Agora que temos uma definição de pacote (veja Começando), por que não tirar vantagem dela também para que possamos construir o Guile com o Guix? Deixamos o campo source vazio, porque o guix shell acima só se importa com as inputs do nosso pacote—para que ele possa configurar o ambiente de desenvolvimento—não com o pacote em si.

Para construir o pacote com Guix, precisaremos preencher o campo source, desta forma:

(use-modules (guix)
             (guix git-download)  ;para ‘git-predicate’
             )

(define vcs-file?
  ;; Retorna verdadeiro se o arquivo fornecido estiver sob controle de versão.
  (or (git-predicate (current-source-directory))
      (const #t)))                                ;não em um checkout do Git

(package
  (name "guile")
  (version "3.0.99-git")                          ;número da versão funky
  (source (local-file "." "guile-checkout"
                      #:recursive? #t
                      #:select? vcs-file?))
  )

Aqui está o que mudamos em comparação à seção anterior:

  1. Adicionamos (guix git-download) ao nosso conjunto de módulos importados, para que possamos usar seu procedimento git-predicate.
  2. Definimos vcs-file? como um procedimento que retorna true quando passado um arquivo que está sob controle de versão. Para uma boa medida, adicionamos um caso de fallback para quando não estamos em um checkout do Git: sempre retorna true.
  3. Definimos source como um local-file—uma cópia recursiva do diretório atual ("."), limitado a arquivos sob controle de versão (o bit #:select?).

A partir daí, nosso arquivo guix.scm serve a um segundo propósito: ele nos permite construir o software com Guix. O ponto principal de construir com Guix é que é uma construção “limpa” — você pode ter certeza de que nada da sua árvore de trabalho ou sistema interfere no resultado da construção — e ele permite que você teste uma variedade de coisas. Primeiro, você pode fazer uma construção nativa simples:

guix build -f guix.scm

Mas você também pode compilar para outro sistema (possivelmente após configurar veja offloading em GNU Guix Reference Manual ou veja emulação transparente em Manual de referência do GNU Guix):

guix build -f guix.scm -s aarch64-linux -s riscv64-linux

… ou compilação cruzada:

guix build -f guix.scm --target=x86_64-w64-mingw32

Você também pode usar transformações de pacotes para testar variantes de pacotes (veja Opções de transformação de pacote em Manual de referência do GNU Guix):

# E se construíssemos com Clang em vez de GCC?
guix build -f guix.scm \
--with-c-toolchain=guile@3.0.99-git=clang-toolchain

# E quanto ao sinalizador configure pouco testado?
guix build -f guix.scm \
  --with-configure-flag=guile@3.0.99-git=--disable-networking

Útil!


Próximo: Nível 2: O Repositório como Canal, Anterior: Começando, Acima: Desenvolvimento de software X   [Conteúdo][Índice]