4.7. Dependências

Muitos ports dependem de outros ports. Há cinco variáveis que você pode usar para assegurar de que todos necessários bits estarão na máquina do usuário. Há também algum variáveis da dependencia pre-suportadas para casos comuns, mais alguns mais para controlar o comportamento das dependências.

4.7.1. LIB_DEPENDS

Esta variável especifica as bibliotecas que compartilhadas este port depende. É uma lista de lib:dir[:target] tuples onde lib é o nome da biblioteca compartilhada, dir é o diretório em qual escontrará caso não está disponível, e target é o target para chamar naquele diretório. Por exemplo,

 LIB_DEPENDS=
              jpeg.9:${PORTSDIR}/graphics/jpeg:install
verificará para ver se há uma biblioteca compartilhada jpeg com versão principal 9, e desceer dentro do subdiretório graphics/jpeg da sua árvore do ports para construir e instala-lo se não se encontrar. The target part pode ser omitida se for igual a DEPENDS_TARGET (qual defaults para instalar).

Nota: A parte lib é um argumento dado ao ldconfig -r | grep -wF. Não haverá nenhumas expressões regulares nesta variável.

A dependência é verificada duas vezes, uma vez dentro do extract target e então dentro do install target. Também, o nome da dependência é colocado dentro do pacote assim que pkg_add(1) o instalará automaticamente se não estiver no sistema do usuário.

4.7.2. RUN_DEPENDS

Esta variável especifica executáveis ou arquivos que este port depende durante o tempo-de-execução. É uma lista de path:dir[:target] tuples onde path é o nome do executável ou arquivo, dir é o diretório em qual encontrará-lo em caso que não está disponível, e target é o target para chamar naquele diretório. Se o path começar com uma barra (/), ele é tratado como um arquivo e sua existencia é testada com test -e; otherwise, it is assumed ser um executável, e which -s é usado para determinar se o programa existe no path de busca do usuário.

Por exemplo,

RUN_DEPENDS=   ${LOCALBASE}/etc/innd:${PORTSDIR}/news/inn \
               wish8.0:${PORTSDIR}/x11-toolkits/tk80

verificará se o arquivo ou o diretório /usr/local/etc/innd existe, e construir e instala-lo do subdiretório news/inn da arvore ports se ele não é encontrado. Verá também se um executével chamado wish8.0 está em seu path de procura, e descerá dentro do subdiretório x11-toolkits/tk80 da sua arvore ports para construir e instala-lo se ele não é encontrado.

Nota: Neste caso, innd é realmente um executável; se um executável estiver em um lugar que não esperado estra em um path normal de procura de usuário, você deve usar o pathname completo.

TA dependência é verificada dentro do install target. Também, o nome da dependência é colocado dentro do pacote assim que pkg_add(1) o instalará automaticamente se ele não estiver no sistema do usuário. A parte target pode ser omitida se for a mesma que DEPENDS_TARGET.

4.7.3. BUILD_DEPENDS

Esta variável especifica executáveis ou arquivos que este port necessita para construir. Como RUN_DEPENDS, é uma lista de path:dir[:target] tuples. Por exemplo,

 BUILD_DEPENDS=
              unzip:${PORTSDIR}/archivers/unzip
verificará para ver se há um executável chamado unzip, e descerá dentro do subdiretório archivers/unzip da sua arvore ports para construir e instala-lo se ele não for encontrado.

Nota: ``build'' aqui significa tudo da extração a compilação. A dependência é verificada dentro do extract target. A parte target pode ser omitida se for a mesma que DEPENDS_TARGET

4.7.4. FETCH_DEPENDS

Esta variável especifica executáveis ou arquivos que este port necessita para buscar. Como os dois anteriores, é uma lista de path:dir[:target] tuples. Por exemplo,

 FETCH_DEPENDS=
              ncftp2:${PORTSDIR}/net/ncftp2
verificará por um executável chamado ncftp2, e descerá dentro do subdiretório net/ncftp2 de sua arvore ports para construir e instala-lo se ele não for encontrado.

A dependência é verificada dentro do fetch target. A parte target pode ser omitida se for a mesma que DEPENDS_TARGET.

4.7.5. DEPENDS

Se há uma dependência em que não caia das quatro categorias acima, ou seu port necessita ter o fonte dos outros port extraídos em adição para te-lo instalado, então use esta variável. Esta é a lista de dir[:target], assim não há nada para verificar, ao contrário das quatro anteriores. A parte target pode ser omitida se ele for o mesmo que DEPENDS_TARGET.

4.7.6. USE_*

Um número de variáveis existem em ordem para encapsular dependências em comum que muitos ports tem.

Tabela 4-1. As variáveis USE_*

Variável Significado
USE_BZIP2 Os tarballs do port são comprimidos com bzip2.
USE_ZIP Os tarballs do port são comprimidos com zip.
USE_GMAKE O port necessita gmake para construir.
USE_PERL5 O port necessita perl 5 para construir e instalar. Veja Seção 5.3 para as variáveis adicionais que podem ser definidas relacionando ao perl.
USE_X_PREFIX O port instala na X11BASE melhor que PREFIX. Veja Seção 5.4 para as variáveis adicionais que podem ser definidas relacionando ao X11.
USE_AUTOMAKE O port usa GNU automake como parte de seu processo de construção. Veja Seção 5.5 para as variáveis adicionais que podem ser definidas relacionando ao automake.
USE_AUTOCONF O port usa GNU autoconf como parte de seu processo de construção. Veja Seção 5.5 para as variáveis adicionais que podem ser definidas relacionando ao autoconf.
USE_LIBTOOL O port usa GNU libtool como parte its build process. See Seção 5.5 para as variáveis adicionais que podem ser definidas relacionando ao libtool.
GMAKE O path completo para gmake se não está no PATH.
USE_BISON O port usa bison para construção.
NO_INSTALL_MANPAGES Não usa o install.man target.

Defina USE_XLIB=yes se seu port necessita o X Window System para ser instalado (é implicado pelo USE_IMAKE). Defina USE_GMAKE=yes se seu port necessita GNU make ao invés do BSD make. Define USE_AUTOCONF=yes se seu port necessita GNU autoconf para ser executado. Define USE_QT=yes se seu port usa o ultimo qt toolkit. Use USE_PERL5=yes se seu port necessita versão 5 da linguagem perl. (O ultimo é especialmente importante desde que algumas versões do FreeBSD tem perl5 como parte da base do sistema enquanto outras não.)

4.7.7. Notas em dependências

Como mencionado acima, o target padrão para chamar quando uma dependência é necessária é DEPENDS_TARGET. It defaults to install. Esta é uma variável do usuário; nunca é definida em um Makefile do port. Se seu port necessita um meio especial para manusear uma dependência, use a parte :target do the *_DEPENDS variables instead of redefining DEPENDS_TARGET.

Quando você digita make clean, suas dependências estão automaticamente limpadas também. Se você não deseja que isto aconteça, defina a variável NOCLEANDEPENDS em seu ambiente.

Depender de um outro port incondicionalmente, use a variável ${NONEXISTENT} assim o primeiro campo do BUILD_DEPENDS ou RUN_DEPENDS. Use isto somente quando você necessita obter o fonte de outro port. Você pode frequentemente economizar tempo de compilação especificando a target também. Por exemplo

BUILD_DEPENDS=   ${NONEXISTENT}:${PORTSDIR}/graphics/jpeg:extract
will always descend to the jpeg port and extract it.

Não use DEPENDS a menos que não há nenhum outro meio que o comportamento que você quer possa ser realizado. Causará a outro port ser sempre construido (e instalado, por padrão), e a dependência entrará nos pacotes também. Se isto for realmente o que você necessita, você deve provavelmente escrevê-lo assim BUILD_DEPENDS e RUN_DEPENDS ao invés -- ao memos a intenção será limpar.

4.7.8. Dependências opcionais

Algumas aplicações grandes podem ser construídas em um número de configurações, adicionando a funcionalidade se one of a number of bibliotecas ou de aplicações estiver disponível. Desde que não todos os usuários querem aquelas bibliotecas ou aplicações, o sistema de ports fornece os ganchos que o autor do port possa usar se decidir qual configuração deve ser construída. Suportando isto corretamente fará usuários felizes, e fornece eficazmente 2 ou mais ports pelo preço de um.

O mais fácil deste para usar é WITHOUT_X11. Se o port puder ser construído ambos com e sem suporte ao X, então ele deve normalmente ser construído com suporte ao X. Se WITHOUT_X11 é definido, então a versão que não tem suporte ao X deve ser construida.

Várias partes do GNOME têm tais botões, embora são ligeiramente mais difíceis de se usar. As variáveis para usar no Makefile são WANT_* e HAVE_*. Se a aplicação possa ser construida ambos com ou sem uma das dependências listadas abaixo, então o Makefile deve definir WANT_PKG, e deve construir a versão que usa PKG se HAVE_PKG for definido.

A variável WANT_* atualmente suporta esta maneira são WANT_GLIB, WANT_GTK, WANT_ESOUND, WANT_IMLIB, e WANT_GNOME.

For questions about the FreeBSD ports system, e-mail <ports@FreeBSD.org>.
For questions about this documentation, e-mail <doc@FreeBSD.org>.