Próximo: Referência do origin
, Acima: Definindo pacotes [Conteúdo][Índice]
package
Esta seção resume todas as opções disponíveis nas declarações package
(veja Definindo pacotes).
Este é o tipo de dado que representa uma receita de pacote.
name
The name of the package, as a string.
version
The version of the package, as a string. Veja Números de versão, for guidelines.
source
Um objeto que diz como o código-fonte do pacote deve ser adquirido. Na
maioria das vezes, este é um objeto origin
, que denota um arquivo
obtido da Internet (veja Referência do origin
). Também pode ser qualquer
outro objeto “tipo arquivo”, como um local-file
, que denota um
arquivo do sistema de arquivos local (veja local-file
).
build-system
O sistema de compilação que deve ser usado para compilar o pacote (veja Sistemas de compilação).
arguments
(padrão: '()
)Os argumentos que devem ser passados para o sistema de compilação (veja Sistemas de compilação). Esta é uma lista, normalmente contendo pares sequenciais de palavra-chave-valor, como neste exemplo:
(package
(name "example")
;; several fields omitted
(arguments
(list #:tests? #f ;skip tests
#:make-flags #~'("VERBOSE=1") ;pass flags to 'make'
#:configure-flags #~'("--enable-frobbing"))))
O conjunto exato de palavras-chave suportadas depende do sistema de
compilação (veja Sistemas de compilação), mas você verá que quase todas elas
honram #:configure-flags
, #:make-flags
, #:tests?
e
#:phases
. A palavra-chave #:phases
em particular permite que
você modifique o conjunto de fases de compilação para seu pacote
(veja Fases de construção).
O REPL tem comandos dedicados para inspecionar interativamente os valores de alguns desses argumentos, como um auxílio de depuração conveniente (veja Usando Guix interativamente).
Nota de compatibilidade: Até a versão 1.3.0, o campo
arguments
normalmente usariaquote
('
) ouquasiquote
(`
) e nenhuma expressão G, assim:(package ;; several fields omitted (arguments ;old-style quoted arguments '(#:tests? #f #:configure-flags '("--enable-frobbing"))))
Para converter esse estilo para o mostrado acima, você pode executar
guix style -S arguments pacote
(veja Invokingguix style
).
inputs
(padrão: '()
) ¶native-inputs
(padrão: '()
)propagated-inputs
(padrão: '()
)Esses campos listam dependências do pacote. Cada elemento dessas listas é um pacote, origem ou outro “objeto tipo arquivo” (veja Expressões-G); para especificar a saída desse objeto tipo arquivo que deve ser usado, passe uma lista de dois elementos onde o segundo elemento é a saída (veja Pacotes com múltiplas saídas, para mais informações sobre saídas de pacotes). Por exemplo, a lista abaixo especifica três entradas:
(list libffi libunistring `(,glib "bin")) ;a saída "bin" de GLib
No exemplo acima, a saída "out"
de libffi
e
libunistring
é usada.
Nota de compatibilidade: Até a versão 1.3.0, as listas de entrada eram uma lista de tuplas, onde cada tupla tem um rótulo para a entrada (uma string) como seu primeiro elemento, um pacote, origem ou derivação como seu segundo elemento e, opcionalmente, o nome da saída que deve ser usada, cujo padrão é
"out"
. Por exemplo, a lista abaixo é equivalente à acima, mas usando o antigo estilo de entrada:;; Estilo de entrada antigo (obsoleto). `(("libffi" ,libffi) ("libunistring" ,libunistring) ("glib:bin" ,glib "bin")) ;a saída "bin" do GLibEste estilo agora está obsoleto; ele ainda é suportado, mas o suporte será removido em uma versão futura. Ele não deve ser usado para novas definições de pacote. Veja Invoking
guix style
, sobre como migrar para o novo estilo.
A distinção entre native-inputs
e inputs
é necessária ao
considerar a compilação cruzada. Ao compilar cruzadamente, as dependências
listadas em inputs
são construídas para a arquitetura target
(alvo); inversamente, as dependências listadas em native-inputs
são
construídas para a arquitetura da máquina build.
native-inputs
é normalmente usado para listar ferramentas necessárias
no momento da compilação, mas não no momento da execução, como Autoconf,
Automake, pkg-config, Gettext ou Bison. guix lint
pode relatar
prováveis erros nesta área (veja Invocando guix lint
).
Por fim, propagated-inputs
é semelhante a inputs
, mas os
pacotes especificados serão instalados automaticamente nos perfis
(veja a função dos perfis no Guix) junto com o pacote ao qual
pertencem (veja guix package
,
para obter informações sobre como guix package
lida com entradas
propagadas).
Por exemplo, isso é necessário ao empacotar uma biblioteca C/C++ que precisa
de cabeçalhos de outra biblioteca para compilar, ou quando um arquivo
pkg-config faz referência a outro por meio de seu campo Requires
.
Outro exemplo em que propagated-inputs
é útil é para linguagens que
não têm um recurso para registrar o caminho de pesquisa em tempo de execução
semelhante ao RUNPATH
de arquivos ELF; isso inclui Guile, Python,
Perl e mais. Ao empacotar bibliotecas escritas nessas linguagens, garanta
que elas possam encontrar o código da biblioteca do qual dependem em tempo
de execução listando as dependências em tempo de execução em
propagated-inputs
em vez de inputs
.
outputs
(padrão: '("out")
)A lista de nomes de saída do pacote. Veja Pacotes com múltiplas saídas, para usos típicos de saídas adicionais.
native-search-paths
(padrão: '()
)search-paths
(padrão: '()
)Uma lista de objetos search-path-specification
descrevendo variáveis
de ambiente do caminho de pesquisa respeitadas pelo pacote. Veja Caminhos de pesquisa, para mais informações sobre especificações do caminho de pesquisa.
Quanto às entradas, a distinção entre native-search-paths
e
search-paths
só importa quando há compilação cruzada. Em um contexto
de compilação cruzada, native-search-paths
se aplica exclusivamente a
entradas nativas, enquanto search-paths
se aplica somente a entradas
de host.
Pacotes como compiladores cruzados se importam com entradas de destino —
por exemplo, nosso compilador cruzado GCC (modificado) tem
CROSS_C_INCLUDE_PATH
em search-paths
, o que permite que ele
escolha arquivos .h para o sistema de destino e não aqueles de
entradas nativas. Para a maioria dos pacotes, porém, apenas
native-search-paths
faz sentido.
replacement
(padrão: #f
)Deve ser #f
ou um objeto de pacote que será usado como um
substituição para este pacote. Veja enxertos, para
detalhes.
synopsis
Uma descrição de uma linha do pacote.
description
Uma descrição mais elaborada do pacote, como uma string na sintaxe Texinfo.
license
¶A licença do pacote; um valor de (guix licenses)
, ou uma lista de
tais valores.
home-page
A URL para a página inicial do pacote, como uma string.
supported-systems
(padrão: %supported-systems
)A lista de sistemas suportados pelo pacote, como strings do formato
arquitetura-kernel
, por exemplo "x86_64-linux"
.
location
(padrão: localização de origem do formulário package
)O local de origem do pacote. É útil sobrescrever isso ao herdar de outro pacote, em cujo caso esse campo não é corrigido automaticamente.
Quando usado no escopo lexical de uma definição de campo de pacote, esse identificador é resolvido para o pacote que está sendo definido.
O exemplo abaixo mostra como adicionar um pacote como uma entrada nativa de si mesmo durante a compilação cruzada:
(package
(name "guile")
;; ...
;; Quando compilado de forma cruzada, Guile, por exemplo, depende de
;; uma versão nativa de si mesmo. Adicione aqui.
(native-inputs (if (%current-target-system)
(list this-package)
'())))
É um erro fazer referência a this-package
fora de uma definição de
pacote.
Os seguintes procedimentos auxiliares são fornecidos para ajudar a lidar com entradas de pacotes.
Procure nome entre as entradas de pacote (ou entradas nativas,
propagadas ou diretas). Retorne-o se encontrado, #f
caso contrário.
name is the name of a package or the file name of an origin depended on. Here’s how you might use it:
(use-modules (guix packages) (gnu packages base)) (lookup-package-direct-input coreutils "gmp") ⇒ #<package gmp@6.2.1 …>
Neste exemplo, obtemos o pacote gmp
que está entre as entradas
diretas de coreutils
.
When looking up an origin, use the name that appears in the origin’s
file-name
field or its default file name—e.g.,
"foo-1.2.tar.gz"
.
Às vezes, você vai querer obter a lista de entradas necessárias para
desenvolver um pacote—todas as entradas que são visíveis quando o
pacote é compilado. É isso que o procedimento
package-development-inputs
retorna.
Retorna a lista de entradas necessárias para pacote para fins de
desenvolvimento em sistema. Quando target é verdadeiro, retorna
as entradas necessárias para compilar cruzadamente pacote de
sistema para o alvo target, onde target é um tripleto como
"aarch64-linux-gnu"
.
Note que o resultado inclui entradas explícitas e entradas
implícitas—entradas adicionadas automaticamente pelo sistema de construção
(veja Sistemas de compilação). Vamos pegar o pacote hello
para ilustrar
isso:
(use-modules (gnu packages base) (guix packages)) hello ⇒ #<package hello@2.10 gnu/packages/base.scm:79 7f585d4f6790> (package-direct-inputs hello) ⇒ () (package-development-inputs hello) ⇒ (("source" …) ("tar" #<package tar@1.32 …>) …)
Neste exemplo, package-direct-inputs
retorna a lista vazia, porque
hello
tem zero dependências explícitas. Por outro lado,
package-development-inputs
inclui entradas adicionadas implicitamente
por gnu-build-system
que são necessárias para construir hello
:
tar, gzip, GCC, libc, Bash e mais. Para visualizá-lo, guix graph
hello
mostraria entradas explícitas, enquanto guix graph -t bag
hello
incluiria entradas implícitas (veja Invocando guix graph
).
Como os pacotes são objetos Scheme regulares que capturam um grafo de dependência completo e procedimentos de construção associados, geralmente é útil escrever procedimentos que pegam um pacote e retornam uma versão modificada dele de acordo com alguns parâmetros. Abaixo estão alguns exemplos.
Retorna uma variante de pacote que usa cadeia de ferramentas em
vez da cadeia de ferramentas padrão GNU C/C++. cadeia deve ser uma
lista de entradas (tuplas de rótulo/pacote) que fornecem funcionalidade
equivalente, como o pacote gcc-toolchain
.
O exemplo abaixo retorna uma variante do pacote hello
criado com
GCC 10.x e o restante da cadeia de ferramentas GNU (Binutils e a
Biblioteca C GNU) em vez da cadeia de ferramentas padrão:
(let ((toolchain (specification->package "gcc-toolchain@10")))
(package-with-c-toolchain hello `(("toolchain" ,toolchain))))
A cadeia de ferramentas de construção é parte das entradas implícitas dos pacotes—geralmente não é listada como parte dos vários campos “entradas” e, em vez disso, é puxada pelo sistema de construção. Consequentemente, esse procedimento funciona alterando o sistema de construção de pacote para que ele puxe cadeia de ferramentas em vez dos padrões. Veja Sistemas de compilação, para mais informações sobre sistemas de construção.
Próximo: Referência do origin
, Acima: Definindo pacotes [Conteúdo][Índice]