                           FreeBSD Porter's Handbook

  Projeto de Documentac,ao do FreeBSD

   Revisao: 1a1b7f770e

   Copyright (c) 2000-2020 Projeto de Documentac,ao do FreeBSD

   Copyright

   Redistribution and use in source (XML DocBook) and 'compiled' forms (XML,
   HTML, PDF, PostScript, RTF and so forth) with or without modification, are
   permitted provided that the following conditions are met:

    1. Redistributions of source code (XML DocBook) must retain the above
       copyright notice, this list of conditions and the following disclaimer
       as the first lines of this file unmodified.

    2. Redistributions in compiled form (transformed to other DTDs, converted
       to PDF, PostScript, RTF and other formats) must reproduce the above
       copyright notice, this list of conditions and the following disclaimer
       in the documentation and/or other materials provided with the
       distribution.

  Importante:

   THIS DOCUMENTATION IS PROVIDED BY THE FREEBSD DOCUMENTATION PROJECT "AS
   IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
   THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FREEBSD DOCUMENTATION
   PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

   FreeBSD is a registered trademark of the FreeBSD Foundation.

   UNIX is a registered trademark of The Open Group in the United States and
   other countries.

   Sun, Sun Microsystems, Java, Java Virtual Machine, JDK, JRE, JSP, JVM,
   Netra, OpenJDK, Solaris, StarOffice, SunOS and VirtualBox are trademarks
   or registered trademarks of Sun Microsystems, Inc. in the United States
   and other countries.

   Many of the designations used by manufacturers and sellers to distinguish
   their products are claimed as trademarks. Where those designations appear
   in this document, and the FreeBSD Project was aware of the trademark
   claim, the designations have been followed by the "(TM)" or the "(R)"
   symbol.

   2020-11-22 21:02:43 +0000 por Danilo G. Baio.
   [ Documento HTML em partes / Documento HTML completo ]

     ----------------------------------------------------------------------

   Indice

   1. Introduc,ao

   2. Criando um Novo Port

   3. Port Rapido

                3.1. Escrevendo o Makefile

                3.2. Escrevendo os Arquivos de Descric,ao

                3.3. Criando o Arquivo Checksum

                3.4. Testando o Port

                3.5. Verificando o Port com portlint

                3.6. Enviando o Novo Port

   4. Port Lento

                4.1. Como as Coisas Funcionam

                4.2. Obtendo os Fontes Originais

                4.3. Modificando o Port

                4.4. Patching

                4.5. Configurando

                4.6. Manipulando a Entrada do Usuario

   5. Configurando o Makefile

                5.1. O Codigo Fonte Original

                5.2. Nomeando

                5.3. Categorizac,ao

                5.4. Os Arquivos de Distribuic,ao

                5.5. MAINTAINER

                5.6. COMMENT

                5.7. Licenc,as

                5.8. PORTSCOUT

                5.9. Dependencias

                5.10. Ports Slaves e MASTERDIR

                5.11. Paginas de Manual

                5.12. Arquivos de Informac,ao

                5.13. Opc,oes do Makefile

                5.14. Especificando o Diretorio de Trabalho

                5.15. Manipulando Conflitos

                5.16. Instalando Arquivos

                5.17. Use BINARY_ALIAS para Renomear Comandos Em Vez de
                Aplicar Patch na Compilac,ao

   6. Considerac,oes Especiais

                6.1. Staging

                6.2. Bibliotecas Empacotadas (Bundled)

                6.3. Bibliotecas Compartilhadas

                6.4. Ports com Restric,oes de Distribuic,ao ou Preocupac,oes
                Legais

                6.5. Mecanismos de Compilac,ao

                6.6. Usando o GNU Autotools

                6.7. Usando o GNU gettext

                6.8. Usando Perl

                6.9. Usando o X11

                6.10. Usando o GNOME

                6.11. Componentes GNOME

                6.12. Usando o Qt

                6.13. Usando o KDE

                6.14. Usando o LXQt

                6.15. Usando Java

                6.16. Aplicac,oes Web, Apache e PHP

                6.17. Usando Python

                6.18. Usando Tcl/Tk

                6.19. Usando Ruby

                6.20. Usando SDL

                6.21. Usando wxWidgets

                6.22. Usando Lua

                6.23. Usando iconv

                6.24. Usando o Xfce

                6.25. Usando Bancos de Dados

                6.26. Iniciando e Parando Servic,os (com scripts rc)

                6.27. Adicionando Usuarios e Grupos

                6.28. Ports que Dependem dos Fontes do kernel

                6.29. Bibliotecas Go

                6.30. Bibliotecas Haskell

                6.31. Arquivos Shell Completion

   7. Flavors

                7.1. Uma Introduc,ao aos Flavors

                7.2. Usando FLAVORS

                7.3. USES=php e Flavors

                7.4. USES=python e Flavors

                7.5. USES=lua e Flavors

   8. Praticas Avanc,adas de pkg-plist

                8.1. Alterando o pkg-plist Baseado em Variaveis Make

                8.2. Diretorios Vazios

                8.3. Arquivos de Configurac,ao

                8.4. Lista de Pacotes Estatica versus Dinamica

                8.5. Criac,ao Automatizada da Lista de Pacotes

                8.6. Expandindo a Lista de Pacotes com Keywords

   9. pkg-*

                9.1. pkg-message

                9.2. pkg-install

                9.3. pkg-deinstall

                9.4. Mudando os nomes dos pkg-*

                9.5. Fazendo uso de SUB_FILES e SUB_LIST

   10. Testando o Port

                10.1. Executando make describe

                10.2. Portlint

                10.3. Ferramentas do Ports

                10.4. PREFIX e DESTDIR

                10.5. Poudriere

   11. Atualizando um Port

                11.1. Usando o Subversion para Criar Patches

                11.2. UPDATE e MOVED

   12. Seguranc,a

                12.1. Por Que Seguranc,a e Tao Importante

                12.2. Corrigindo Vulnerabilidades de Seguranc,a

                12.3. Mantendo a Comunidade Informada

   13. O Que Fazer e Nao Fazer

                13.1. Introduc,ao

                13.2. WRKDIR

                13.3. WRKDIRPREFIX

                13.4. Diferenciando Sistemas Operacionais e Versoes de OS

                13.5. Escrevendo Algo Depois do bsd.port.mk

                13.6. Uso de Declarac,oes exec em Wrapper Scripts

                13.7. Fac,a as Coisas Racionalmente

                13.8. Respeite Ambos CC e CXX

                13.9. Respeite CFLAGS

                13.10. Logs de Compilac,ao Detalhados

                13.11. Feedback

                13.12. README.html

                13.13. Marcando um Port nao Instalavel com a variavel BROKEN,
                FORBIDDEN ou IGNORE

                13.14. Considerac,oes Arquitetonicas

                13.15. Marcando um Port para Remoc,ao com DEPRECATED ou
                EXPIRATION_DATE

                13.16. Evite o Uso do Construtor .error

                13.17. Uso de sysctl

                13.18. Atualizando Distfiles

                13.19. Uso de Padroes POSIX

                13.20. Miscelanea

   14. Um Exemplo de Makefile

   15. Ordem das Variaveis &#8203;&#8203;nos Makefiles de Port

                15.1. Bloco PORTNAME

                15.2. Bloco PATCHFILES

                15.3. Bloco MAINTAINER

                15.4. Bloco LICENSE

                15.5. Mensagens Genericas BROKEN/IGNORE/DEPRECATED

                15.6. O Bloco de Dependencias

                15.7. Flavors

                15.8. USES e USE_x

                15.9. Variaveis &#8203;&#8203;Padrao bsd.port.mk

                15.10. Opc,oes e Assistentes

                15.11. O Restante das Variaveis

                15.12. Os Targets

   16. Mantendo-se Atualizado

                16.1. FreshPorts

                16.2. A interface Web para o Repositorio do Codigo Fonte

                16.3. A Lista de Discussao de Ports do FreeBSD

                16.4. O Cluster de Compilac,ao de Ports do FreeBSD

                16.5. Portscout: o Scanner de Distfile de Ports do FreeBSD

                16.6. O Sistema de Monitoramento de Ports do FreeBSD

   17. Usando Macros USES

                17.1. Uma introduc,ao ao USES

                17.2. 7z

                17.3. ada

                17.4. autoreconf

                17.5. blaslapack

                17.6. bdb

                17.7. bison

                17.8. cabal

                17.9. cargo

                17.10. charsetfix

                17.11. cmake

                17.12. compiler

                17.13. cpe

                17.14. cran

                17.15. desktop-file-utils

                17.16. desthack

                17.17. display

                17.18. dos2unix

                17.19. drupal

                17.20. fakeroot

                17.21. fam

                17.22. firebird

                17.23. fonts

                17.24. fortran

                17.25. fuse

                17.26. gem

                17.27. gettext

                17.28. gettext-runtime

                17.29. gettext-tools

                17.30. ghostscript

                17.31. gl

                17.32. gmake

                17.33. gnome

                17.34. go

                17.35. gperf

                17.36. grantlee

                17.37. groff

                17.38. gssapi

                17.39. horde

                17.40. iconv

                17.41. imake

                17.42. kde

                17.43. kmod

                17.44. lha

                17.45. libarchive

                17.46. libedit

                17.47. libtool

                17.48. linux

                17.49. localbase

                17.50. lua

                17.51. lxqt

                17.52. makeinfo

                17.53. makeself

                17.54. mate

                17.55. meson

                17.56. metaport

                17.57. mysql

                17.58. mono

                17.59. motif

                17.60. ncurses

                17.61. ninja

                17.62. objc

                17.63. openal

                17.64. pathfix

                17.65. pear

                17.66. perl5

                17.67. pgsql

                17.68. php

                17.69. pkgconfig

                17.70. pure

                17.71. pyqt

                17.72. python

                17.73. qmail

                17.74. qmake

                17.75. qt

                17.76. qt-dist

                17.77. readline

                17.78. samba

                17.79. scons

                17.80. shared-mime-info

                17.81. shebangfix

                17.82. sqlite

                17.83. ssl

                17.84. tar

                17.85. tcl

                17.86. terminfo

                17.87. tk

                17.88. uidfix

                17.89. uniquefiles

                17.90. varnish

                17.91. webplugin

                17.92. xfce

                17.93. xorg

                17.94. xorg-cat

                17.95. zip

   18. Valores __FreeBSD_version

                18.1. Versoes do FreeBSD 13

                18.2. Versoes do FreeBSD 12

                18.3. Versoes do FreeBSD 11

                18.4. Versoes do FreeBSD 10

                18.5. Versoes do FreeBSD 9

                18.6. Versoes do FreeBSD 8

                18.7. Versoes do FreeBSD 7

                18.8. Versoes do FreeBSD 6

                18.9. Versoes do FreeBSD 5

                18.10. Versoes do FreeBSD 4

                18.11. Versoes do FreeBSD 3

                18.12. Versoes do FreeBSD 2.2

                18.13. FreeBSD 2 Antes das Versoes 2.2-RELEASE

   Lista de Tabelas

   5.1. Exemplos de DISTVERSION e de Derivac,oes PORTVERSION

   5.2. Exemplos de Nomes de Pacotes

   5.3. Atalhos para Macros MASTER_SITE_*

   5.4. Macros Magicas de MASTER_SITES

   5.5. USE_GITHUBDescric,ao

   5.6. USE_GITLAB Descric,ao

   5.7. Lista de Licenc,as Predefinidas

   5.8. USE_*

   6.1. Variaveis &#8203;&#8203;para ports que usam o configure

   6.2. Variaveis &#8203;&#8203;para ports que usam o cmake

   6.3. Variaveis &#8203;&#8203;que os usuarios podem definir para
   compilac,oes com cmake

   6.4. Variaveis &#8203;&#8203;que os Usuarios Podem Configurar para
   Compilar cargo

   6.5. Variaveis &#8203;&#8203;para ports que usam o meson

   6.6. Variaveis &#8203;&#8203;Somente Leitura para Ports Que Usam Perl

   6.7. Variaveis &#8203;&#8203;para Ports Que Usam X

   6.8. Componentes GNOME

   6.9. Componentes Macro do GNOME

   6.10. Componentes Legados do GNOME

   6.11. Componentes Obsoletos: Nao Use

   6.12. Variaveis &#8203;&#8203;Fornecidas aos Ports Que Usam o Qt

   6.13. Componentes da Biblioteca Qt Disponiveis

   6.14. Componentes Disponiveis da Ferramenta Qt

   6.15. Componentes Disponiveis de Plugin Qt

   6.16. Argumentos Possiveis para USES= qmake

   6.17. Variaveis &#8203;&#8203;para Ports Que Usam o qmake

   6.18. Componentes Disponiveis do KDE

   6.19. Componentes disponiveis do LXQt

   6.20. Variaveis &#8203;&#8203;Que Podem ser Definidas por Ports Que Usam
   Java

   6.21. Variaveis &#8203;&#8203;Fornecidas para Ports que Usam Java

   6.22. Constantes definidas para os ports que usam Java

   6.23. Variaveis &#8203;&#8203;para Ports Que Usam o Apache

   6.24. Variaveis &#8203;&#8203;Uteis para Portar Modulos do Apache

   6.25. Variaveis uteis para Ports que usam Python

   6.26. Assistentes do Modulo de Dependencias do Python

   6.27. As variaveis read only muito uteis para Ports que usam Tcl/Tk

   6.28. Variaveis &#8203;&#8203;Uteis para Ports Que Usam Ruby

   6.29. Variaveis &#8203;&#8203;Somente Leitura Selecionadas para Ports Que
   Usam Ruby

   6.30. Variaveis &#8203;&#8203;para Selecionar as Versoes do wxWidgets

   6.31. Versoes Disponiveis do wxWidgets

   6.32. Especificac,oes de Versao do wxWidgets

   6.33. Variaveis para selecionar as versoes preferidas do wxWidgets

   6.34. Componentes wxWidgets Disponiveis

   6.35. Tipos de Dependencias wxWidgets Disponiveis

   6.36. Tipos de Dependencia Padrao do wxWidgets

   6.37. Variaveis &#8203;&#8203;definidas para ports que usam wxWidgets

   6.38. Valores Legais para WX_CONF_ARGS

   6.39. Variaveis &#8203;&#8203;Definidas para Ports Que Usam Lua

   6.40. Variaveis Definidas para Ports de Modulos Lua

   6.41. Banco de Dados de Macros USES

   6.42. Caminhos dos arquivos shell completion

   11.1. Prefixos de Atualizac,ao de Arquivos do Subversion

   17.1. Componentes Disponiveis do X.Org

   18.1. Valores do __FreeBSD_version para o FreeBSD 13

   18.2. Valores do __FreeBSD_version para o FreeBSD 12

   18.3. Valores do __FreeBSD_version para o FreeBSD 11

   18.4. Valores do __FreeBSD_version para o FreeBSD 10

   18.5. Valores do __FreeBSD_version para o FreeBSD 9

   18.6. Valores do __FreeBSD_version para o FreeBSD 8

   18.7. Valores do __FreeBSD_version para o FreeBSD 7

   18.8. Valores do __FreeBSD_version para o FreeBSD 6

   18.9. Valores do __FreeBSD_version para o FreeBSD 5

   18.10. Valores do __FreeBSD_version para o FreeBSD 4

   18.11. Valores do __FreeBSD_version para o FreeBSD 3

   18.12. Valores do __FreeBSD_version para o FreeBSD 2.2

   18.13. Valores do __FreeBSD_version para o FreeBSD 2 de antes da
   2.2-RELEASE

   Lista de Exemplos

   3.1. Criando um .diff para um Novo Port

   3.2. Criando um .shar para um Novo Port

   4.1. Aplicando um Patch para uma Versao Especifica do FreeBSD

   4.2. Aplicando Opcionalmente um Patch

   4.3. Usando EXTRA_PATCHES Com um Diretorio

   5.1. Usando pkg-version(8) para comparar versoes.

   5.2. Usando DISTVERSION

   5.3. Usando DISTVERSION Quando a Versao Comec,a com uma Letra ou um
   Prefixo

   5.4. Usando DISTVERSION Quando a Versao Contem Letras Significando
   "alpha", "beta" ou "pre-release"

   5.5. Nao use DISTVERSION Quando a Versao Contem Letras que Significam
   "Nivel de Patch"

   5.6. Derivando PORTVERSION Manualmente

   5.7. Derivar DISTNAME a partir de PORTVERSION

   5.8. Caso Exotico 1

   5.9. Caso Exotico 2

   5.10. Uso Simples de USE_GITHUB

   5.11. Uso Mais Completo de USE_GITHUB

   5.12. Uso de USE_GITHUB com DISTVERSIONPREFIX

   5.13. Usando USE_GITHUB Quando o Upstream Nao Usa Versoes

   5.14. Usando USE_GITHUB para Acessar um Commit Entre Duas Versoes

   5.15. Uso de USE_GITHUB com Varios Arquivos de Distribuic,ao

   5.16. Uso de USE_GITHUB com Varios Arquivos de Distribuic,ao Usando
   GH_TUPLE

   5.17. Como Usar USE_GITHUB com Submodulos Git?

   5.18. Uso Simples de USE_GITLAB

   5.19. Uso Mais Completo de USE_GITLAB

   5.20. Uso de USE_GITLAB com Varios Arquivos de Distribuic,ao

   5.21. Uso de USE_GITLAB com Varios Arquivos de Distribuic,ao Usando
   GL_TUPLE

   5.22. Uso Simplificado de MASTER_SITES:n com Um Arquivo Por Site

   5.23. Uso Simplificado de MASTER_SITES:n com Mais de Um Arquivo Por Site

   5.24. Uso Detalhado de MASTER_SITES:n no MASTER_SITE_SUBDIR

   5.25. Uso Detalhado de MASTER_SITES:n com Virgula, Varios Arquivos, Varios
   Sites e Varios Subdiretorios

   5.26. Uso Detalhado de MASTER_SITES:n com SourceForge (SF)

   5.27. Uso Simplificado de MASTER_SITES:n com PATCH_SITES

   5.28. Uso Mais Simples, Licenc,as Predefinidas

   5.29. Licenc,a Nao Padrao

   5.30. Licenc,as Padrao e Nao Padrao

   5.31. LICENSE_NAME

   5.32. LICENSE_FILE

   5.33. LICENSE_TEXT

   5.34. LICENSE_DISTFILES

   5.35. Licenc,as Duplas

   5.36. Multiplas Licenc,as

   5.37. Declarac,ao Errada de uma Dependencia Opcional

   5.38. Declarac,ao Correta de uma Dependencia Opcional

   5.39. Uso Simples de OPTIONS

   5.40. Verificar OPTIONS Desmacadas

   5.41. Uso Pratico de OPTIONS

   5.42. Manipulac,ao Incorreta de uma Opc,ao

   5.43. Manuseio Correto de uma Opc,ao

   5.44. Uso Simples de OPT_IMPLIES

   5.45. Uso Simples de OPT_PREVENTS

   5.46. Uso basico de CONFLICTS*

   5.47. Usando CONFLICTS* Com Globs.

   5.48. Usando BINARY_ALIAS para Deixar gsed Disponivel como sed

   5.49. Usando BINARY_ALIAS Para Fornecer Aliases para Comandos python3
   Codificado

   6.1. Crie Links Simbolicos Relativos Automaticamente

   6.2. Exemplo de USES=cmake

   6.3. CMAKE_ON and CMAKE_OFF

   6.4. Criando um Port para uma Aplicac,ao Simples em Rust

   6.5. Ativando Recursos Adicionais do Aplicativo

   6.6. Features de Codificac,ao de Aplicativos como Opc,oes de Port

   6.7. Listando Licenc,as Crate

   6.8. Exemplo de USES=meson

   6.9. Criando um Port para uma Aplicac,ao Baseada em Modulos Go

   6.10. Definindo o Nome do Binario ou o Caminho da Instalac,ao

   6.11. Criando um Port para uma Aplicac,ao Hackage-hosted Haskell

   6.12. Exemplo de Dependencia Perl

   6.13. Um Port Que Requer Perl Apenas para Compilar

   6.14. Um Port Que Tambem Requer Perl Para Patch

   6.15. Um Modulo Perl Que Precisa de ExtUtils::MakeMaker para Compilar

   6.16. Um Modulo Perl Que Precisa Modulo::Build para Compilar

   6.17. Exemplo USE_XORG

   6.18. Usando Variaveis &#8203;&#8203;Relacionadas ao X11

   6.19. Selecionando Componentes do Qt 5

   6.20. Exemplo USES= qmake

   6.21. Exemplo USE_KDE

   6.22. Exemplo USE_LXQT

   6.23. Exemplo de Makefile para Classes PEAR

   6.24. Exemplo de Makefile para Modulos Horde

   6.25. Makefile para um Modulo Python Simples

   6.26. Selecionando Componentes wxWidgets

   6.27. Detectando as versoes instaladas wxWidgets e seus componentes

   6.28. Usando Variaveis &#8203;&#8203;nos Comandos wxWidgets

   6.29. Makefile para uma aplicac,ao que utiliza Lua

   6.30. Makefile para modulo simples de Lua

   6.31. Simples uso do iconv

   6.32. Uso do iconv com configure

   6.33. Corrigindo Hardcoded -liconv

   6.34. Verificando Disponibilidade do iconv Nativo

   6.35. Exemplo de USES=xfce

   6.36. Usando os Proprios Widgets GTK2 do Xfce

   6.37. Usando o Berkeley DB 6

   6.38. Usando MySQL

   6.39. Usando PostgreSQL

   6.40. Usando SQLite 3

   7.1. Uso Basico de Flavors

   7.2. Outro Uso Basico de Flavors

   7.3. Uso Mais Complexo de Flavors

   7.4. Flavor Especifico PKGNAME

   7.5. Extensao Simples USES=php

   7.6. Adicionando Flavors em uma Aplicac,ao PHP

   7.7. Simples USES=python

   7.8. USES=python com Requisitos de Versao

   7.9. Para um port que nao usa distutils

   8.1. Usando PLIST_SUB com Expressoes Regulares

   8.2. Exemplo de uma Keyword @dirrmtryecho

   8.3. Exemplo na vida real, como o @sample e implementado

   9.1. Strings Curtas UCL

   9.2. Strings de Multiplas Linhas UCL

   9.3. Exibir uma Mensagem na Instalac,ao/Desinstalac,ao

   9.4. Exibir uma Mensagem na Atualizac,ao

   10.1. Usando make.conf para Alterar o Perl Padrao

   13.1. Como Evitar o Uso de .error

   15.1. Exemplo de Ordenamento das Variaveis &#8203;&#8203;de Opc,oes

   17.1. Usando Varios Valores

   17.2. Adicionando um Argumento

   17.3. Adicionando Varios Argumentos

   17.4. Entrelac,ando Tudo Isso Junto

   17.5. Uso Tipico

   17.6. Compilando Componentes do Qt 5

   17.7. Compilando Componentes do Qt 5 com Nomes Diferentes

   17.8. Adicionando outro interpretadoror para USES=shebangfix

   17.9. Especificando todos os Caminhos ao Adicionar um Interpretador para
   USES=shebangfix

   17.10. Adicionando uma Localizac,ao Estranha para um Interpretador

   17.11. USES=shebangfix com a variavel SHEBANG_REGEX

   17.12. USES=shebangfix com a variavel SHEBANG_GLOB

   17.13. USES=shebangfix com a variavel SHEBANG_FILES

                            Capitulo 1. Introduc,ao

   A Colec,ao de Ports do FreeBSD e a maneira como quase todo mundo instala
   aplicativos ("ports") no FreeBSD. Como tudo no FreeBSD, e principalmente
   um esforc,o voluntario. E importante ter isso em mente ao ler este
   documento.

   No FreeBSD, qualquer um pode enviar um novo port ou ser voluntario para
   manter um port que esteja sem mantenedor. Nenhum privilegio de commit e
   necessario.

                        Capitulo 2. Criando um Novo Port

   Interessado em fazer um novo port ou atualizar os ports existentes? Otimo!

   O que segue sao algumas instruc,oes para criar um novo port para o
   FreeBSD. Para atualizar um port existente, leia este documento e depois
   leia o Capitulo 11, Atualizando um Port.

   Quando este documento nao for suficientemente detalhado, consulte
   /usr/ports/Mk/bsd.port.mk, que e incluido por todos os Makefiles dos
   ports. Mesmo aqueles que nao estao hackeando os Makefiles diariamente
   podem ganhar muito conhecimento com isso. Alem disso, perguntas
   especificas podem ser enviadas `a Lista de discussao do ports do FreeBSD.

  Nota:

   Apenas uma frac,ao das variaveis &#8203;&#8203;(VAR) que podem ser
   sobrepostas sao mencionados neste documento. A maioria (se nao todas)
   estao documentadas no inicio do /usr/ports/Mk/bsd.port.mk; as outras
   provavelmente deveriam estar tambem. Observe que esse arquivo usa uma
   configurac,ao de tabulac,ao nao padrao: O Emacs e o Vim irao reconhecer a
   configurac,ao ao carregar o arquivo. Ambos vi(1) e ex(1) podem ser
   configurados para usar o valor correto digitando :set tabstop=4 uma vez
   que o arquivo foi carregado.

   Procurando algo facil para comec,ar? De uma olhada na lista de ports
   desejados e veja se voce pode trabalhar em um (ou mais de um).

                            Capitulo 3. Port Rapido

   Indice

   3.1. Escrevendo o Makefile

   3.2. Escrevendo os Arquivos de Descric,ao

   3.3. Criando o Arquivo Checksum

   3.4. Testando o Port

   3.5. Verificando o Port com portlint

   3.6. Enviando o Novo Port

   Esta sec,ao descreve como criar rapidamente um novo port. Para aplicativos
   em que esse metodo rapido nao for adequado, o processo "Slow Porting" esta
   descrito no Capitulo 4, Port Lento.

   Primeiro, obtenha o tarball original e coloque-o em DISTDIR, que por
   padrao e o diretorio /usr/ports/distfiles.

  Nota:

   Estas etapas assumem que o software foi compilado de forma simples
   (out-of-the-box). Em outras palavras, nao foi necessaria absolutamente
   nenhuma mudanc,a para o aplicativo funcionar em um sistema FreeBSD. Se
   alguma coisa teve que ser alterada, por favor consulte o Capitulo 4, Port
   Lento.

  Nota:

   Recomenda-se definir a variavel DEVELOPER do make(1) em /etc/make.conf
   antes de comec,ar o trabalho com os ports.

 # echo DEVELOPER=yes >> /etc/make.conf

   Esta configurac,ao habilita o "modo de desenvolvedor" que exibe avisos
   sobre a descontinuidade de comandos e ativa algumas verificac,oes de
   qualidade adicionais nas execuc,oes do comando make.

3.1. Escrevendo o Makefile

   O Makefile minimo seria algo assim:

 # $FreeBSD$

 PORTNAME=       oneko
 DISTVERSION=    1.1b
 CATEGORIES=     games
 MASTER_SITES=   ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/

 MAINTAINER=     youremail@example.com
 COMMENT=        Cat chasing a mouse all over the screen

 .include <bsd.port.mk>

  Nota:

   Em alguns casos, o Makefile de um port existente pode conter linhas
   adicionais no cabec,alho, como o nome do port e a data em que foi criado.
   Esta informac,ao adicional foi declarada obsoleta e esta sendo eliminada.

   Tente entender o exemplo. Nao se preocupe com o conteudo da linha
   $FreeBSD$, ela sera preenchida automaticamente pelo Subversion quando o
   port for importado para nossa arvore de ports principais. Um exemplo mais
   detalhado e mostrado na sec,ao exemplo de Makefile.

3.2. Escrevendo os Arquivos de Descric,ao

   Existem dois arquivos de descric,ao que sao necessarios para qualquer
   port, independente deles estarem empacotados ou nao. Eles sao o pkg-descr
   e o pkg-plist. Seus prefixos pkg- distingue-os de outros arquivos.

  3.2.1. pkg-descr

   Esta e uma descric,ao mais longa do port. Um ou alguns paragrafos que
   explicam o que o port faz e suficiente.

  Nota:

   Isto nao e um manual ou uma descric,ao detalhada sobre como usar ou
   compilar o port! Por favor, tenha cuidado ao copiar do README ou manpage .
   Muitas vezes, eles nao sao uma descric,ao concisa do port ou estao em um
   formato estranho. Por exemplo, as paginas de manual tem espac,amento
   justificado, o que parece particularmente ruim com fontes monoespac,adas.

   Por outro lado, o conteudo de pkg-descr deve ser mais longo que a linha
   COMMENT do Makefile. Ele deve explicar com mais profundidade o que e o
   port.

   Um pkg-descr bem escrito descreve o port completamente o suficiente para
   que os usuarios nao precisem consultar a documentac,ao ou visitar o site
   para entender o que o software faz, como ele pode ser util ou quais
   recursos particularmente legais &#8203;&#8203;ele possui. A menc,ao de
   certos requisitos, como um kit de ferramentas grafico, dependencias
   pesadas, ambiente de runtime ou linguagens de implementac,ao, ajuda os
   usuarios a decidir se este port funcionara para eles.

   Inclua uma URL para a pagina Web oficial. Prefixe um dos sites (escolha o
   mais comum) com WWW: (seguido por um unico espac,o) para que as
   ferramentas automatizadas funcionem corretamente. Se a URI e a raiz do
   site ou diretorio, ele deve ser terminado com uma barra.

  Nota:

   Se a pagina web listada para um port nao estiver disponivel, tente
   pesquisar na Internet primeiro para ver se o site oficial foi movido, foi
   renomeado ou se esta hospedado em outro lugar.

   Este exemplo mostra como parece o pkg-descr:

 This is a port of oneko, in which a cat chases a poor mouse all over
 the screen.
  :
 (etc.)

 WWW: http://www.oneko.org/

  3.2.2. pkg-plist

   Este arquivo lista todos os arquivos instalados pelo port. Ele tambem e
   chamado de "packing list" (lista de empacotamento) porque o pacote e
   gerado empacotando os arquivos listados aqui. Os pathnames sao relativos
   ao prefixo de instalac,ao (geralmente /usr/local).

   Aqui esta um pequeno exemplo:

 bin/oneko
 man/man1/oneko.1.gz
 lib/X11/app-defaults/Oneko
 lib/X11/oneko/cat1.xpm
 lib/X11/oneko/cat2.xpm
 lib/X11/oneko/mouse.xpm

   Consulte a manpage do pkg-create(8) para detalhes sobre a lista de
   empacotamento.

  Nota:

   E recomendado manter todos os nomes de arquivos neste arquivo
   classificados em ordem alfabetica. Isso tornara muito mais facil verificar
   as alterac,oes ao atualizar o port.

  Dica:

   Criar uma lista de packing manualmente pode ser uma tarefa muito tediosa.
   Se o port instalar um grande numero de arquivos, criar a lista de
   empacotamento automaticamente pode economizar tempo.

   Ha apenas um caso em que o pkg-plist pode ser omitido de um port. Se o
   port instalar apenas alguns arquivos, liste-os em PLIST_FILES, dentro do
   Makefile do port. Por exemplo, poderiamos passar sem o pkg-plist no port
   oneko acima, adicionando estas linhas para no Makefile:

 PLIST_FILES=    bin/oneko \
                 man/man1/oneko.1.gz \
                 lib/X11/app-defaults/Oneko \
                 lib/X11/oneko/cat1.xpm \
                 lib/X11/oneko/cat2.xpm \
                 lib/X11/oneko/mouse.xpm

  Nota:

   Uso de PLIST_FILES nao deve ser abusado. Ao procurar pela origem de um
   arquivo, as pessoas geralmente tentam usar o grep atraves do pkg-plist nos
   arquivos na arvore de ports. Listar os arquivos na variavel PLIST_FILES
   dentro do Makefile torna esta busca mais dificil.

  Dica:

   Se um port precisar criar um diretorio vazio, ou criar diretorios fora do
   ${PREFIX} durante a instalac,ao, consulte Sec,ao 8.2.1, "Limpando
   Diretorios Vazios" para maiores informac,oes.

  Dica:

   Como PLIST_FILES e uma variavel do make(1), qualquer entrada com espac,os
   deve ser envolvida por aspas. Por exemplo, se estiver usando
   palavras-chave descritas em pkg-create(8) e na Sec,ao 8.6, "Expandindo a
   Lista de Pacotes com Keywords", a entrada deve ser citada.

 PLIST_FILES=    "@sample ${ETCDIR}/oneko.conf.sample"

   Mais tarde vamos ver como o pkg-plist e a PLIST_FILES podem ser utilizados
   para executar tarefas mais sofisticadas.

3.3. Criando o Arquivo Checksum

   Apenas digite make makesum. O framework do ports ira gerar automaticamente
   o distinfo. Nao tente gerar o arquivo manualmente.

3.4. Testando o Port

   Certifique-se de que as regras do port fac,am exatamente o que e desejado,
   incluindo o empacotamento do port. Estes sao os pontos importantes a serem
   verificados:

     * pkg-plist nao contem nada nao instalado pelo port.

     * pkg-plist contem tudo o que e instalado pelo port.

     * O port pode ser instalado usando o target install. Isso verifica se o
       script de instalac,ao esta funcionando corretamente.

     * O port pode ser desinstalado adequadamente usando o target deinstall.
       Isso verifica se o script de desinstalac,ao funciona corretamente.

     * O port so tem acesso aos recursos de rede durante a fase target fetch.
       Isto e importante para os construtores de pacotes, tais como o
       ports-mgmt/poudriere.

     * Certifique-se de que o comando make package pode ser executado como um
       usuario normal (ou seja, nao como root). Se isso falhar, talvez seja
       necessario corrigir o software. Veja a Sec,ao 17.20, "fakeroot" e
       tambem a Sec,ao 17.88, "uidfix".

   Procedimento 3.1. Ordem Recomendada de Teste
    1. make stage

    2. make stage-qa

    3. make package

    4. make install

    5. make deinstall

    6. make package (como usuario)

   Certifique-se de que nenhum aviso e exibido em nenhum dos estagios.

   Testes automatizados completos podem ser feitos com o ports-mgmt/poudriere
   da colec,ao do Ports, veja a Sec,ao 10.5, "Poudriere" para maiores
   informac,oes. Ele mantem jails onde todas as etapas mostradas acima podem
   ser testadas sem afetar o estado do sistema host.

3.5. Verificando o Port com portlint

   Por favor, use o portlint para ver se o port esta de acordo com as nossas
   diretrizes. O programa ports-mgmt/portlint faz parte da colec,ao de ports.
   Em particular, ele verifica se o Makefile esta correto e se o pacote esta
   nomeado apropriadamente.

  Importante:

   Nao siga cegamente a saida do portlint. Ela e uma ferramenta de lint
   estatica e `as vezes comete erros.

3.6. Enviando o Novo Port

   Antes de enviar o novo port, leia a sec,ao sobre o que fazer e o que nao
   fazer.

   Uma vez feliz com o port, a unica coisa que resta e coloca-lo na arvore
   principal do FreeBSD e deixar todo mundo feliz tambem.

  Importante:

   Nos nao precisamos do diretorio work ou do pacote pkgname.tgz, entao
   exclua-os agora.

   Em seguida, crie um patch(1). Assumindo que o port e chamado oneko e esta
   na categoria games.

   Exemplo 3.1. Criando um .diff para um Novo Port

   Adicione todos os arquivos com svn add. Utilize o cd e va para a base da
   arvore de ports, para que os caminhos completos dos arquivos alterados
   sejam incluidos no diff, entao gere o diff com svn diff. Por exemplo:

 % svn add .
 % cd ../..
 % svn diff games/oneko > oneko.diff

  Importante:

   Para ser mais facil para os committers aplicarem o patch em sua copia de
   trabalho da arvore de ports, por favor, gere o .diff da base da sua arvore
   de ports.

   Envie o oneko.diff com o formulario de submissao de bugs. Use product
   "Ports & Packages", component "Individual Port(s)" e siga as diretrizes
   mostradas la. Adicione uma breve descric,ao do programa ao campo
   Description do PR (talvez uma versao curta do COMMENT), e lembre-se de
   adicionar o oneko.diff como um anexo.

  Nota:

   Dar uma boa descric,ao no resumo do relatorio de problema facilita muito o
   trabalho dos commiters de ports. Preferimos algo como "New port:
   category/portname breve descric,ao do port" para novos ports. Usar este
   esquema torna mais facil e rapido comec,ar o trabalho para fazer o commit
   de um novo port.

   Depois de enviar o port, por favor, seja paciente. O tempo necessario para
   incluir um novo port no FreeBSD pode variar de alguns dias ate alguns
   meses. Um formulario simples de pesquisa no banco de dados do Relatorio de
   Problemas esta disponivel em https://bugs.freebsd.org/bugzilla/query.cgi.

   Para obter uma listagem dos PRs abertos para os ports, selecione Open e
   Ports & Packages no formulario de pesquisa, clique em [ Search ].

   Depois de analisar o novo port, nos responderemos se necessario, e iremos
   adiciona-lo a arvore. O nome do remetente tambem sera adicionado `a lista
   de Contribuidores Adicionais do FreeBSD e outros arquivos.

   Tambem e possivel enviar ports usando um arquivo shar(1). Usando o exemplo
   anterior com o port oneko acima.

   Exemplo 3.2. Criando um .shar para um Novo Port

   va para o diretorio acima, onde o diretorio do port esta localizado, e use
   tar para criar o arquivo shar:

 % cd ..
 % tar cf oneko.shar --format shar oneko

   oneko.shar pode ser enviado da mesma maneira que oneko.diff acima.

                             Capitulo 4. Port Lento

   Indice

   4.1. Como as Coisas Funcionam

   4.2. Obtendo os Fontes Originais

   4.3. Modificando o Port

   4.4. Patching

   4.5. Configurando

   4.6. Manipulando a Entrada do Usuario

   Certo, entao nao foi tao simples e o port precisou de algumas
   modificac,oes para poder funcionar. Nesta sec,ao, vamos explicar passo a
   passo como modifica-lo para que funcione com o paradigma do ports.

4.1. Como as Coisas Funcionam

   Primeiro, esta e a sequencia de eventos que ocorre quando o usuario
   executa make no diretorio do port. Ter o bsd.port.mk aberto em outra
   janela enquanto le esta sec,ao realmente ira ajudar a entender melhor.

   Mas nao se preocupe, nao sao muitas as pessoas que entendem exatamente
   como o bsd.port.mk funciona...:-)

    1. O target fetch e executado. O target fetch e responsavel por garantir
       que o tarball exista localmente em DISTDIR. Se o fetch nao puder
       encontrar os arquivos necessarios no DISTDIR ele procurara a URL na
       variavel MASTER_SITES, definida no Makefile, assim como nos nossos
       mirrors FTP nos quais colocamos os distfiles como backup. Em seguida,
       ele tentara buscar o arquivo de distribuic,ao nomeado com FETCH,
       assumindo que o site solicitante tem acesso direto `a Internet. Se
       isso for bem sucedido, ele salvara o arquivo em DISTDIR para uso
       futuro e continuara.

    2. O target extract e executado. Ele procura pelo arquivo de
       distribuic,ao do port (normalmente um tarball compactado) em DISTDIR e
       ira descompacta-lo em um subdiretorio temporario especificado por
       WRKDIR (padrao e work).

    3. O target patch e executado. Primeiro, quaisquer patches definidos em
       PATCHFILES sao aplicados. Segundo, se arquivos de patch nomeados
       patch-* forem encontrados em PATCHDIR (padrao para o subdiretorio
       files), eles serao aplicados neste momento em ordem alfabetica.

    4. O target configure e executado. Ele pode fazer qualquer uma de muitas
       coisas diferentes.

         1. Se existir, scripts/configure e executado.

         2. E se HAS_CONFIGURE ou GNU_CONFIGURE esta definido,
            WRKSRC/configure e executado.

    5. O target build e executado. Ele e responsavel por mudar para o
       diretorio de trabalho privado do port (WRKSRC) e compila-lo.

    6. O target stage e executado. Este coloca o conjunto final de arquivos
       construidos em um diretorio temporario (STAGEDIR, Veja Sec,ao 6.1,
       "Staging"). A hierarquia deste diretorio espelha a do sistema no qual
       o pacote sera instalado.

    7. O target package e executado. Ele cria um pacote usando os arquivos do
       diretorio temporario criado durante o target stage e o pkg-plist do
       port.

    8. O target install e executado. Este instala o pacote criado durante o
       target package no host.

   As ac,oes acima sao padrao. Alem disso, defina os targets pre-something ou
   post-something, ou insira scripts com esses nomes no subdiretorio scripts,
   e eles serao executados antes ou depois das ac,oes padrao serem
   executadas.

   Por exemplo, se houver um target post-extract definido no Makefile e um
   arquivo pre-build no subdiretorio scripts, o target post-extract sera
   chamado apos as ac,oes de extrac,ao regulares e pre-build sera executado
   antes que as regras de compilac,ao padrao sejam feitas. Recomenda-se usar
   targets no Makefile se as ac,oes forem simples, porque sera mais facil
   para alguem descobrir que tipo de ac,ao nao padrao o port necessita.

   As ac,oes padrao sao feitas pelos targets do-something do bsd.port.mk. Por
   exemplo, os comandos para extrair um port estao no target do-extract. Se o
   target padrao nao fizer o trabalho direito, redefina o target do-something
   no Makefile.

  Nota:

   O target "principal" (por exemplo, extract, configure, etc.) fazem nada
   mais do que certificar-se de que todos os estagios ate aquele estao
   concluidos e chamar os targets ou scripts reais, e eles nao pretendem ser
   alterados. Para consertar a extrac,ao, corrija do-extract, mas nunca mude
   a forma como extract opera! Alem disso, o target post-deinstall e invalido
   e nao e executado pela infraestrutura de ports.

   Agora que o que acontece quando o usuario digita make install e melhor
   entendido, vamos seguir as etapas recomendadas para criar o port perfeito.

4.2. Obtendo os Fontes Originais

   Obtenha os fontes originais (normalmente) como um tarball compactado
   (foo.tar.gz ou foo.tar.bz2) e copie-o para DISTDIR. Use fontes do
   mainstream sempre que possivel.

   Definir a variavel MASTER_SITES para refletir onde o tarball original
   reside. Existem definic,oes abreviadas para a maioria dos sites mainstream
   em bsd.sites.mk. Por favor, use esses sites - e as definic,oes
   associadas-se for possivel, para ajudar a evitar o problema de ter as
   mesmas informac,oes repetidas varias vezes na base de origem. Como esses
   sites tendem a mudar com o tempo, isso se torna um pesadelo de manutenc,ao
   para todos os envolvidos. Veja Sec,ao 5.4.2, "MASTER_SITES" para detalhes.

   Se nao houver nenhum site FTP/HTTP bem conectado `a rede ou se puder
   encontrar apenas sites com formatos irritantemente nao-padrao, coloque uma
   copia em um servidor FTP ou HTTP confiavel (por exemplo, uma home page).

   Se um lugar conveniente e confiavel para colocar o distfile nao puder ser
   encontrado, nos podemos "hospedar" em ftp.FreeBSD.org; no entanto, esta e
   a soluc,ao menos preferida. O distfile deve ser colocado em
   ~/public_distfiles/ da conta freefall de alguem. Pec,a para a pessoa que
   for fazer o commit do port para realizer isso. Essa pessoa tambem ira
   definir MASTER_SITES para LOCAL/username onde username e o seu login do
   cluster do FreeBSD.

   Se o distfile do port mudar o tempo todo sem nenhum tipo de atualizac,ao
   de versao pelo autor, considere colocar o distfile em uma pagina pessoal e
   liste-a como o MASTER_SITES primario. Tente falar com o autor do port para
   parar de fazer isso; Isso realmente ajuda a estabelecer algum tipo de
   controle de codigo-fonte. Hospedar uma versao especifica impedira que os
   usuarios obtenham erros de checksum mismatch, e tambem ira reduzir a carga
   de trabalho dos mantenedores do nosso site FTP. Alem disso, se houver
   apenas um site master para o port, recomenda-se armazenar um backup em uma
   home page e lista-lo como o MASTER_SITES secundario.

   Se o port exigir patches adicionais disponiveis na Internet, baixe-os
   tambem e coloque-os em DISTDIR. Nao se preocupe se eles vierem de um site
   diferente de onde vem o tarball do codigo fonte principal, temos uma
   maneira de lidar com essas situac,oes (veja a descric,ao PATCHFILES
   abaixo).

4.3. Modificando o Port

   Desempacote uma copia do tarball em um diretorio privado e fac,a as
   alterac,oes necessarias para que o port compile corretamente sob a versao
   atual do FreeBSD. Atenc,ao dobrada nessas etapas, pois elas serao
   necessarias para automatizar o processo em breve. Tudo, incluindo a
   exclusao, adic,ao ou modificac,ao de arquivos, devem ser realizados usando
   um script automatizado ou um arquivo patch quando o port estiver
   finalizado.

   Se o port exigir interac,ao/customizac,ao significativa do usuario para
   compilar ou instalar, de uma olhada em um dos scripts Configure classicos
   de Larry Wall e talvez fac,a algo semelhante. O objetivo da nova colec,ao
   de ports e fazer com que cada port seja "plug-and-play" o quanto possivel
   para o usuario final, usando um minimo de espac,o em disco.

  Nota:

   A menos que explicitamente declarado, os arquivos de patch, scripts e
   outros arquivos criados e contribuidos para a colec,ao de ports do FreeBSD
   sao assumidos como cobertos pelas condic,oes de copyright padrao do BSD.

4.4. Patching

   Na preparac,ao do port, arquivos que forem adicionados ou alterados podem
   ser gravados com diff(1) para posterior inclusao em um patch(1). Fazer
   isso com um arquivo tipico envolve salvar uma copia do arquivo original
   antes de fazer qualquer alterac,ao usando um sufixo .orig.

 % cp file file.orig

   Depois que todas as alterac,oes forem realizadas, cd de volta ao diretorio
   do port. Execute make makepatch para gerar arquivos de patch atualizados
   no diretorio files.

  Dica:

   Usar BINARY_ALIAS para substituir comandos codificados durante a
   compilac,ao e para evitar patching de arquivos de compilac,ao. Veja
   Sec,ao 5.17, "Use BINARY_ALIAS para Renomear Comandos Em Vez de Aplicar
   Patch na Compilac,ao" para maiores informac,oes.

  4.4.1. Regras Gerais para Patching

   Arquivos patch sao armazenados em PATCHDIR, geralmente files/, de onde
   serao aplicados automaticamente. Todas os patches devem ser relativos ao
   WRKSRC. Tipicamente WRKSRC e um subdiretorio de WRKDIR, o diretorio onde o
   distfile e extraido. Execute make -V WRKSRC para ver o caminho real. Os
   nomes dos patches devem seguir estas regras:

     * Evite ter mais de um patch modificando o mesmo arquivo. Por exemplo,
       ter os dois patch-foobar.c e patch-foobar.c2 fazendo alterac,oes em
       ${WRKSRC}/foobar.c torna-os frageis e dificeis de serem depurados.

     * Ao criar nomes para arquivos de patch, substitua cada underline (_)
       com dois underlines (__) e cada barra (/) com um underline (_). Por
       exemplo, para corrigir um arquivo chamado src/freeglut_joystick.c
       nomeie o patch correspondente patch-src_freeglut__joystick.c. Nao
       nomeie patches como patch-aa ou patch-ab. Sempre use o caminho e o
       nome do arquivo nos nomes dos patches. O make makepatch gera
       automaticamente os nomes corretos.

     * Um patch pode modificar varios arquivos se as alterac,oes estiverem
       relacionadas e o patch tiver o nome apropriado. Por exemplo,
       patch-add-missing-stdlib.h.

     * Use apenas caracteres [-+._ a-zA-Z0-9] para nomear patches. Em
       particular, nao use :: como um separador de path, use _ no lugar.

   Minimize a quantidade de mudanc,as de espac,o em branco nao funcionais em
   patches. E comum no mundo Open Source para projetos compartilhar grandes
   quantidades de uma base de codigo, mas obedecer a regras de recuo e estilo
   diferentes. Ao usar uma funcionalidade funcional de um projeto para
   consertar areas similares em outra, por favor, tenha cuidado: o patch
   resultante pode estar cheio de mudanc,as nao-funcionais. Ele nao so
   aumenta o tamanho do repositorio do ports, mas torna dificil descobrir o
   que exatamente causou o problema e o que foi alterado em todos.

   Se um arquivo precisar ser excluido, fac,a-o no target post-extract em vez
   de como parte do patch.

  4.4.2. Gerac,ao Manual de Patches

  Nota:

   A criac,ao manual de patches geralmente nao e necessaria. A gerac,ao
   automatica de patches, conforme descrito anteriormente nesta sec,ao, e o
   metodo preferido. No entanto, patches manuais podem ser necessarios
   ocasionalmente.

   Patches sao salvos em arquivos nomeados como patch-* onde * indica o nome
   do caminho do arquivo que esta sendo feito o patch, como patch-imakefile
   ou patch-src-config.h.

   Depois que o arquivo foi modificado, diff(1) e usado para registrar as
   diferenc,as entre a versao original e a modificada. -u faz com que o
   diff(1) produza diffs "unificados", a forma preferida.

 % diff -u file.orig file > patch-pathname-file

   Ao gerar patches para novos arquivos adicionados, -N e usado para dizer ao
   diff(1) para tratar o arquivo original inexistente como se existisse, mas
   estava vazio:

 % diff -u -N newfile.orig newfile > patch-pathname-newfile

   Nao adicione Strings RCS $FreeBSD$ em patches. Quando os patches sao
   adicionados ao repositorio Subversion com svn add, a propriedade
   fbsd:nokeywords e definida para yes automaticamente para que as keywords
   no patch nao sejam modificadas no commit. A propriedade pode ser
   adicionada manualmente svn propset fbsd:nokeywords yes files....

   Usar a opc,ao (-r) do diff(1) para gerar patches e razoavel, mas por
   favor, analise os patches resultantes para se certificar de que nao ha
   nenhum lixo desnecessario neles. Em particular, diffs entre dois arquivos
   de backup, quando o port usa Imake ou GNU configure, etc., diffs de
   Makefiles sao desnecessarios e devem ser eliminados. Se for necessario
   editar o configure.in e executar o autoconf para regerar o configure, nao
   gere diffs do configure (ele geralmente cresce para algumas milhares de
   linhas!). Em vez disso, defina USES=autoreconf e gere os diffs no
   configure.in.

  4.4.3. Substituic,oes Automaticas Simples

   Substituic,oes simples podem ser realizadas diretamente do Makefile do
   port usando o modo in-loco do sed(1). Isso e util quando as alterac,oes
   usam o valor de uma variavel:

 post-patch:
         @${REINPLACE_CMD} -e 's|/usr/local|${PREFIX}|g' ${WRKSRC}/Makefile

  Importante:

   Use o sed(1) apenas para substituir conteudo de variaveis. Voce deve usar
   arquivos patch em vez do sed(1) para substituir conteudo estatico.

   Muitas vezes, o software sendo portado usa a convenc,ao CR/LF nos arquivos
   fonte. Isso pode causar problemas com correc,oes adicionais, avisos do
   compilador ou execuc,ao de scripts (como /bin/sh^M nao encontrado.) Para
   converter rapidamente todos os arquivos de CR/LF para apenas LF, adicione
   essa entrada ao Makefile do port:

 USES=   dos2unix

   Uma lista de arquivos especificos para conversao pode ser informada:

 USES=   dos2unix
 DOS2UNIX_FILES= util.c util.h

   Use DOS2UNIX_REGEX para converter um grupo de arquivos em subdiretorios.
   Seu argumento e um find(1) compativel com expressao regular. Mais sobre o
   formato esta em re_format(7). Esta opc,ao e util para converter todos os
   arquivos de uma determinada extensao. Por exemplo, converta todos os
   arquivos de codigo-fonte, deixando os arquivos binarios intactos:

 USES=   dos2unix
 DOS2UNIX_REGEX= .*\.([ch]|cpp)

   Uma opc,ao similar e DOS2UNIX_GLOB, que executa o find para cada elemento
   listado nele.

 USES=   dos2unix
 DOS2UNIX_GLOB=  *.c *.cpp *.h

   O diretorio base para a conversao pode ser definido. Isso e util quando ha
   varios distfiles e varios arquivos contidos que requerem conversao de fim
   de linha.

 USES=   dos2unix
 DOS2UNIX_WRKSRC=        ${WRKDIR}

  4.4.4. Corrigindo Condicionalmente

   Alguns ports precisam de patches que sao aplicados apenas para versoes
   especificas do FreeBSD ou quando uma determinada opc,ao e ativada ou
   desativada. Os patches condicionais sao especificados colocando-se os
   caminhos completos para os arquivos de patch emEXTRA_PATCHES.

   Exemplo 4.1. Aplicando um Patch para uma Versao Especifica do FreeBSD

 .include <bsd.port.options.mk>

 # Patch in the iconv const qualifier before this
 .if ${OPSYS} == FreeBSD && ${OSVERSION} < 1100069
 EXTRA_PATCHES=  ${PATCHDIR}/extra-patch-fbsd10
 .endif

 .include <bsd.port.mk>

   Exemplo 4.2. Aplicando Opcionalmente um Patch

   Quando um option requer um patch, useopt_EXTRA_PATCHES e
   opt_EXTRA_PATCHES_OFF para fazer o patch condicional na opc,ao opt. Veja
   Sec,ao 5.13.3.11, "Substituic,ao de Variaveis &#8203;&#8203;Genericas,
   OPT_VARIABLE e OPT_VARIABLE_OFF" Para maiores informac,oes.

 OPTIONS_DEFINE=   FOO BAR
 FOO_EXTRA_PATCHES=  ${PATCHDIR}/extra-patch-foo
 BAR_EXTRA_PATCHES_OFF=  ${PATCHDIR}/extra-patch-bar.c \
                 ${PATCHDIR}/extra-patch-bar.h

   Exemplo 4.3. Usando EXTRA_PATCHES Com um Diretorio

   As vezes, existem muitos patches que sao necessarios para um recurso,
   neste caso, e possivel apontar EXTRA_PATCHES para um diretorio, e ele
   aplicara automaticamente todos os arquivos nomeados como patch* nele.

   Crie um subdiretorio em ${PATCHDIR}, e mova os patches para ele. Por
   exemplo:

 % ls -l files/foo-patches
 -rw-r--r--  1 root  wheel    350 Jan 16 01:27 patch-Makefile.in
 -rw-r--r--  1 root  wheel   3084 Jan 18 15:37 patch-configure

   Entao adicione isso ao Makefile:

 OPTIONS_DEFINE= FOO
 FOO_EXTRA_PATCHES=      ${PATCHDIR}/foo-patches

   O framework ira entao usar todos os arquivos nomeados patch* nesse
   diretorio.

4.5. Configurando

   Inclua quaisquer comandos de personalizac,ao adicionais no script
   configure e salve-o no subdiretorio scripts. Como mencionado acima, tambem
   e possivel fazer isso com targets no Makefile e/ou scripts com o nome
   pre-configure ou post-configure.

4.6. Manipulando a Entrada do Usuario

   Se o port requer intervenc,ao do usuario para build, configure ou install,
   defina IS_INTERACTIVE no Makefile. Isso fara com que os "overnight builds"
   pulem ele. Se o usuario definir a variavel BATCH em seu ambiente (e se o
   usuario definir a variavel INTERATIVE, entao apenas aqueles ports que
   requerem interac,ao serao compilados). Isso economizara muito tempo
   perdido no conjunto de maquinas que continuamente compilam ports (veja
   abaixo).

   Tambem e recomendado que, se houver respostas padrao razoaveis
   &#8203;&#8203;para as perguntas, PACKAGE_BUILDING pode usado para
   desativar a intervenc,ao do usuario quando o mesmo estiver definido. Isso
   nos permitira compilar os pacotes para CDROMs e FTP.

                      Capitulo 5. Configurando o Makefile

   Indice

   5.1. O Codigo Fonte Original

   5.2. Nomeando

   5.3. Categorizac,ao

   5.4. Os Arquivos de Distribuic,ao

   5.5. MAINTAINER

   5.6. COMMENT

   5.7. Licenc,as

   5.8. PORTSCOUT

   5.9. Dependencias

   5.10. Ports Slaves e MASTERDIR

   5.11. Paginas de Manual

   5.12. Arquivos de Informac,ao

   5.13. Opc,oes do Makefile

   5.14. Especificando o Diretorio de Trabalho

   5.15. Manipulando Conflitos

   5.16. Instalando Arquivos

   5.17. Use BINARY_ALIAS para Renomear Comandos Em Vez de Aplicar Patch na
   Compilac,ao

   Configurar o Makefile e bastante simples e, novamente, sugerimos examinar
   os exemplos existentes antes de comec,ar. Alem disso, ha um Makefile de
   exemplo neste manual, entao de uma olhada e por favor siga a ordem das
   variaveis &#8203;&#8203;e sec,oes naquele modelo para tornar o port mais
   facil para os outros lerem.

   Considere estes problemas em sequencia durante o projeto do novo Makefile:

5.1. O Codigo Fonte Original

   Ele esta em DISTDIR como um tarball gzip e e chamado de algo como
   foozolix-1.2.tar.gz? Se assim for, va para o proximo passo. Caso
   contrario, o formato do arquivo de distribuic,ao pode necessitar da
   substituic,ao de uma ou mais das variaveis DISTVERSION, DISTNAME,
   EXTRACT_CMD, EXTRACT_BEFORE_ARGS, EXTRACT_AFTER_ARGS, EXTRACT_SUFX ou
   DISTFILES.

   Na pior das hipoteses, crie um target personalizado do-extract para
   substituir o padrao. Isso raramente e necessario.

5.2. Nomeando

   A primeira parte do Makefile do port o nomeia, descreve seu numero de
   versao e o lista na categoria correta.

  5.2.1. PORTNAME

   Setar PORTNAME ao nome base do software. Isso e usado como base para o
   pacote do FreeBSD, e para o DISTNAME.

  Importante:

   O nome do pacote deve ser unico em toda a arvore de ports. Certifique-se
   de que o PORTNAME ja nao esta em uso por um port existente, e que nenhum
   outro port ja tem o mesmo PKGBASE. Se o nome ja tiver sido usado, adicione
   PKGNAMEPREFIX ou PKGNAMESUFFIX.

  5.2.2. Versoes, DISTVERSION ou PORTVERSION

   Setar DISTVERSION para o numero da versao do software.

   PORTVERSION e a versao usada para o pacote do FreeBSD. Sera
   automaticamente derivado de DISTVERSION para ser compativel com o esquema
   de versionamento de pacotes do FreeBSD. Se a versao contiver letras, pode
   ser necessario definir PORTVERSIONe nao DISTVERSION.

  Importante:

   Nao e possivel utilizar PORTVERSION e DISTVERSION juntos, deve ser ser
   definido um de cada vez.

   De tempos em tempos, alguns softwares usam um esquema de versao que nao e
   compativel em como o DISTVERSION traduz a versao no PORTVERSION.

  Dica:

   Ao atualizar um port, e possivel usar o pkg-version(8) -t para verificar
   se a nova versao e maior ou menor do que antes. Veja Exemplo 5.1, "Usando
   pkg-version(8) para comparar versoes.".

   Exemplo 5.1. Usando pkg-version(8) para comparar versoes.

   pkg version -t recebe duas versoes como argumentos, respondera com <, = ou
   > se a primeira versao for menor, igual ou maior que a segunda versao,
   respectivamente.

 % pkg version -t 1.2 1.3
 < 1
 % pkg version -t 1.2 1.2
 = 2
 % pkg version -t 1.2 1.2.0
 = 3
 % pkg version -t 1.2 1.2.p1
 > 4
 % pkg version -t 1.2.a1 1.2.b1
 < 5
 % pkg version -t 1.2 1.2p1
 < 6

   1 1.2 e menor que 1.3.                                                     
   3 1.2 e 1.2 sao iguais, pois tem a mesma versao.                           
   3 1.2 e 1.2.0 sao iguais, pois valor vazio e igual a zero.                 
   4 1.2 e maior que 1.2.p1 por causa do .p1, pense em "pre-release 1".       
   4 1.2.a1 e menor que 1.2.b1, pense em "alfa" e "beta" e a e menor que b.   
   6 1.2 e menor que 1.2p1 por causa do 2p1, pense em "2, nivel de patch 1"   
     que e uma versao depois de qualquer 2.X mas antes de 3.                  

  Nota:

   Aqui, a, b e p sao usados &#8203;&#8203;como se significassem "alfa",
   "beta" ou "pre-release" e "nivel de patch", mas elas sao apenas letras e
   sao classificados por ordem alfabetica, portanto, qualquer letra pode ser
   utilizada, e elas serao ordenadas de forma adequada.

   Tabela 5.1. Exemplos de DISTVERSION e de Derivac,oes PORTVERSION

   DISTVERSION PORTVERSION 
   0.7.1d      0.7.1.d     
   10Alpha3    10.a3       
   3Beta7-pre2 3.b7.p2     
   8:f_17      8f.17       

   Exemplo 5.2. Usando DISTVERSION

   Quando a versao contem apenas numeros separados por pontos, trac,os ou
   sublinhados, use DISTVERSION.

 PORTNAME=   nekoto
 DISTVERSION=    1.2-4

   Isso ira gerar um PORTVERSION 1.2.4.

   Exemplo 5.3. Usando DISTVERSION Quando a Versao Comec,a com uma Letra ou
   um Prefixo

   Quando a versao comec,a ou termina com uma letra, um prefixo ou um sufixo
   que nao faz parte da versao, use DISTVERSIONPREFIX, DISTVERSION e
   DISTVERSIONSUFFIX.

   Se a versao for v1.2-4:

 PORTNAME=   nekoto
 DISTVERSIONPREFIX=  v
 DISTVERSION=    1_2_4

   Algumas vezes, projetos usando GitHub usara seu nome em suas versoes. Por
   exemplo, a versao pode ser nekoto-1.2-4:

 PORTNAME=   nekoto
 DISTVERSIONPREFIX=  nekoto-
 DISTVERSION=    1.2_4

   Esses projetos tambem usam algumas strings no final da versao, por
   exemplo,1.2-4_RELEASE:

 PORTNAME=   nekoto
 DISTVERSION=    1.2-4
 DISTVERSIONSUFFIX=  _RELEASE

   Ou eles fazem ambos, por exemplo,nekoto-1.2-4_RELEASE:

 PORTNAME=   nekoto
 DISTVERSIONPREFIX=  nekoto-
 DISTVERSION=    1.2-4
 DISTVERSIONSUFFIX=  _RELEASE

   DISTVERSIONPREFIX e DISTVERSIONSUFFIX nao serao usados durante a
   construc,ao do PORTVERSION, mas usado apenas em DISTNAME.

   Todos exemplos irao gerar um PORTVERSION com valor 1.2.4.

   Exemplo 5.4. Usando DISTVERSION Quando a Versao Contem Letras Significando
   "alpha", "beta" ou "pre-release"

   Quando a versao contem numeros separados por pontos, trac,os ou
   underlines, e letras sao usadas para significar "alpha", "beta" ou
   "pre-release", no sentido de que vem antes das versoes sem letras, use
   DISTVERSION.

 PORTNAME=   nekoto
 DISTVERSION=    1.2-pre4

 PORTNAME=   nekoto
 DISTVERSION=    1.2p4

   Ambos irao gerar um PORTVERSION com valor 1.2.p4 que e menor do que 1.2.
   pkg-version(8) pode ser usado para verificar esse fato:

 % pkg version -t 1.2.p4 1.2
 <

   Exemplo 5.5. Nao use DISTVERSION Quando a Versao Contem Letras que
   Significam "Nivel de Patch"

   Quando a versao contem letras que nao significam "alpha", "beta" ou "pre",
   e estao mais para um "nivel de patch", no sentido de que vem depois da
   versao sem as letras, use PORTVERSION.

 PORTNAME=   nekoto
 PORTVERSION=    1.2p4

   Neste caso, usar DISTVERSION nao e possivel porque geraria uma versao
   1.2.p4 o que seria menor que 1.2 e nao maior.pkg-version(8) ira constatar
   isso:

 % pkg version -t 1.2 1.2.p4
 > 1
 % pkg version -t 1.2 1.2p4
 < 2

   1   1.2 e maior que 1.2.p4, o que e errado nesse caso.  
   2   1.2 e menor que 1.2p4, que e o que era necessario.  

   Para alguns exemplos mais avanc,ados de configurac,ao do PORTVERSION,
   quando a versao do software nao e realmente compativel com o FreeBSD, ou
   DISTNAME quando o arquivo de distribuic,ao nao contem a versao em si,
   consulte Sec,ao 5.4.1, "DISTNAME".

  5.2.3. PORTREVISION e PORTEPOCH

    5.2.3.1. PORTREVISION

   PORTREVISION e um valor monotonicamente crescente que e redefinido para 0
   com cada incremento de DISTVERSION, normalmente toda vez que houver uma
   nova versao oficial do fornecedor. E se PORTREVISION e diferente de zero,
   o valor e anexado ao nome do pacote. Mudanc,as em PORTREVISION sao usadas
   &#8203;&#8203;por ferramentas automatizadas como pkg-version(8) para
   determinar se um novo pacote esta disponivel.

   PORTREVISION deve ser incrementado toda vez que uma alterac,ao for feita
   no port onde se altera o pacote gerado de alguma forma. Isso inclui
   alterac,oes que afetam apenas um pacote compilado com options nao padrao.

   Exemplos de quando PORTREVISION deve ser alterado:

     * Adic,ao de correc,oes para corrigir vulnerabilidades de seguranc,a,
       bugs ou para adicionar novas funcionalidades ao port.

     * Alterac,oes no Makefile do port para ativar ou desativar as opc,oes de
       tempo de compilac,ao no pacote.

     * Alterac,oes na lista de empacotamento ou no comportamento de tempo de
       instalac,ao do pacote. Por exemplo, uma alterac,ao em um script que
       gera dados iniciais para o pacote, como chaves de host ssh(1).

     * Bump de versao da dependencia de biblioteca compartilhada de um port
       (nesse caso, alguem tentando instalar o pacote antigo depois de
       instalar uma versao mais nova da dependencia falhara, pois procurara a
       libfoo.x antiga em vez da libfoo.(x+1)).

     * Mudanc,as silenciosas no distfile do port que possuem diferenc,as
       funcionais significativas. Por exemplo, mudanc,as no distfile que
       requerem uma correc,ao para distinfo sem alterac,ao correspondente
       para DISTVERSION, onde umdiff -ru das versoes antiga e nova mostra
       mudanc,as nao triviais no codigo.

   Exemplos de alterac,oes que nao requerem uma alterac,ao no PORTREVISION:

     * Mudanc,as de estilo no esqueleto do port sem alterac,ao funcional ao
       que aparece no pacote resultante.

     * Mudanc,as para MASTER_SITES ou outras alterac,oes funcionais no port
       que nao afetem o pacote resultante.

     * Patches triviais para o distfile, como correc,ao de erros de
       digitac,ao, que nao sao importantes o suficiente para que os usuarios
       do pacote tenham que se dar ao trabalho de atualizar.

     * Correc,oes de compilac,ao que fazem com que um pacote se torne
       compilavel onde antes estava falhando. Desde que as alterac,oes nao
       introduzam nenhuma mudanc,a funcional em nenhuma outra plataforma na
       qual o port tenha sido compilado anteriormente. PORTREVISION reflete o
       conteudo do pacote, se o pacote nao foi compilado anteriormente, entao
       nao ha necessidade de incrementar o PORTREVISION para registrar uma
       mudanc,a.

   Uma regra geral e decidir se a mudanc,a em um port e algo que algumas
   pessoas se beneficiariam em ter. Por causa de um aprimoramento, conserto
   ou em virtude de que o novo pacote funcione de fato. Em seguida, pondere
   que, de fato, isso fara com que todos que regularmente atualizam sua
   arvore de ports sejam obrigados a atualiza-lo. Se sim, PORTREVISION deve
   ser incrementado.

  Nota:

   Pessoas usando pacotes binarios nunca verao a atualizac,ao se PORTREVISION
   nao for incrementado. Sem incrementar PORTREVISION, os package builders
   nao tem como detectar a alterac,ao e, portanto, nao irao recompilar o
   pacote.

    5.2.3.2. PORTEPOCH

   De tempos em tempos, um fornecedor de software ou um mantenedor de port do
   FreeBSD fazem algo tolo e lanc,am uma versao de seu software que e
   numericamente menor que a versao anterior. Um exemplo disso e um port que
   vai de foo-20000801 para foo-1.0 ( o primeiro sera incorretamente tratado
   como uma versao mais nova, ja que 20000801 e um valor numericamente maior
   que 1).

  Dica:

   Os resultados das comparac,oes de numeros de versao nem sempre sao obvios.
   pkg version (veja pkg-version(8)) pode ser usado para testar a comparac,ao
   de duas sequencias de numeros de versao. Por exemplo:

 % pkg version -t 0.031 0.29
 >

   A saida > indica que a versao 0.031 e considerada maior que a versao 0.29,
   o que pode nao ter sido obvio para o mantenedor do port.

   Em situac,oes como essa, PORTEPOCH deve ser incrementado. E se PORTEPOCH e
   diferente de zero, ele e anexado ao nome do pacote conforme descrito na
   sec,ao 0 acima. PORTEPOCH nunca deve ser diminuido ou redefinido para
   zero, porque isso faria com que a comparac,ao com um pacote de uma epoca
   anterior falhasse. Por exemplo, o pacote nao seria detectado como
   desatualizado. O novo numero da versao, 1.0.1 no exemplo acima, ainda e
   numericamente menor que a versao anterior, 20000801, mas o sufixo 1 e
   tratado especialmente por ferramentas automatizadas e considerado maior
   que o sufixo 0 implicito no pacote anterior.

   Remover ou resetar o PORTEPOCH incorretamente conduz ao luto eterno. Se a
   discussao acima nao foi clara o suficiente, por favor consulte a Lista de
   discussao de ports do FreeBSD.

   E esperado que PORTEPOCH nao seja utilizado na maioria dos ports, e que
   seja feito o uso sensato do DISTVERSION, ou que o PORTVERSION seja usado
   com cuidado tambem, isso muitas vezes pode evitar que uma versao futura do
   software altere a estrutura da versao. No entanto, e necessario que os
   porters do FreeBSD tenham cuidado quando uma versao do fornecedor e feita
   sem um numero de versao oficial - como um codigo de release "snapshot". A
   tentac,ao e rotular a release com a data de lanc,amento, o que causara
   problemas como no exemplo acima, quando um novo release "oficial" e feito.

   Por exemplo, se um snapshot de release e feito na data 20000917 e a versao
   anterior do software era a versao 1.2, nao use 20000917 no DISTVERSION. A
   maneira correta e um DISTVERSION com valor 1.2.20000917, ou similar, para
   que a proxima versao, digamos 1.3, ainda seja um valor numericamente
   maior.

    5.2.3.3. Exemplo de Uso PORTREVISION e PORTEPOCH

   O port gtkmumble, versao0.10 esta comitado na colec,ao de ports:

 PORTNAME=       gtkmumble
 DISTVERSION=    0.10

   PKGNAME torna-se gtkmumble-0.10.

   Uma falha de seguranc,a e descoberta, o que requer um patch local do
   FreeBSD. PORTREVISION e alterado de acordo.

 PORTNAME=       gtkmumble
 DISTVERSION=    0.10
 PORTREVISION=   1

   PKGNAME torna-se gtkmumble-0.10_1

   Uma nova versao e lanc,ada pelo fornecedor, numerada como 0.2 (acontece
   que o autor realmente pretendia que 0.10 significa-se realmente 0.1.0, nao
   "o que vem depois de 0.9" - oops, tarde demais agora). Como a nova versao
   secundaria 2 e numericamente menor que a versao anterior 10, PORTEPOCH
   deve ser incrementado para forc,ar manualmente que o novo pacote seja
   detectado como "mais recente". Como e uma nova versao do fornecedor,
   PORTREVISION e redefinido para 0 (ou removido doMakefile).

 PORTNAME=       gtkmumble
 DISTVERSION=    0.2
 PORTEPOCH=      1

   PKGNAME torna-se gtkmumble-0.2,1

   O proximo lanc,amento e 0.3. Desde que PORTEPOCH nunca diminua, as
   variaveis &#8203;&#8203;de versao sao agora:

 PORTNAME=       gtkmumble
 DISTVERSION=    0.3
 PORTEPOCH=      1

   PKGNAME torna-se gtkmumble-0.3,1

  Nota:

   E se PORTEPOCH for redefinido para 0 com esta atualizac,ao, alguem que
   instalou o gtkmumble-0.10_1 nao detectaria o gtkmumble-0.3 como pacote
   mais novo, desde que 3 ainda e numericamente menor que 10. Lembre-se, este
   e o ponto principal de PORTEPOCH em primeiro lugar.

  5.2.4. PKGNAMEPREFIX e PKGNAMESUFFIX

   Duas variaveis &#8203;&#8203;opcionais, PKGNAMEPREFIX e PKGNAMESUFFIX, sao
   combinadas com PORTNAME e PORTVERSION para formar PKGNAME como
   ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}. Certifique-se
   de que isto esta de acordo com as nossas diretrizes para um bom nome de
   pacote. Em particular, o uso de um hifen (-) dentro de PORTVERSION nao e
   permitido. Alem disso, se o nome do pacote tiver o language- ou a parte
   -compiled.specifics (veja abaixo), use PKGNAMEPREFIX e PKGNAMESUFFIX,
   respectivamente. Nao os fac,a parte de PORTNAME.

  5.2.5. Convenc,oes de Nomenclatura de Pacotes

   Estas sao as convenc,oes a serem seguidas ao nomear pacotes. Isso e para
   facilitar a varredura do diretorio de pacotes, ja que existem milhares de
   pacotes e os usuarios irao pegar ranc,o se eles machucarem seus olhos!

   Nomes de pacotes tomam a forma de
   language_region-name-compiled.specifics-version.numbers.

   O nome do pacote e definido como
   ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}. Certifique-se
   de definir as variaveis &#8203;&#8203;para estar em conformidade com esse
   formato.

   language_region-

           O FreeBSD se esforc,a para suportar a linguagem nativa de seus
           usuarios. A parte language- e uma abreviac,ao de duas letras da
           linguagem natural definida pela ISO-639 quando o port e especifico
           para um determinado idioma. Exemplos sao ja para japones, ru para
           russo,vi para vietnamita, zh para o chines, ko para coreano e de
           para alemao.

           Se o port for especifico de uma determinada regiao dentro da area
           de idioma, adicione tambem o codigo do pais de duas letras.
           Exemplos sao en_US para Ingles dos EUA e fr_CH para o Frances
           Suic,o.

           A parte language- e definida em PKGNAMEPREFIX.

   name

           Certifique-se de que o nome e a versao do port estejam claramente
           separados e colocados em PORTNAME e DISTVERSION. A unica razao
           para PORTNAME conter uma parte da versao e se a distribuic,ao
           upstream e realmente chamada dessa forma, como no textproc/libxml2
           ou japanese/kinput2-freewnn. De outra forma, PORTNAME nao pode
           conter informac,oes especificas da versao. E normal que varios
           ports tenham o mesmo PORTNAME, como os ports www/apache * fazem;
           Nesse caso, versoes diferentes (e entradas de indice diferentes)
           sao distinguidas por valores PKGNAMEPREFIX e PKGNAMESUFFIX.

           Ha uma tradic,ao de nomear modulos Perl 5 com sufixo p5- e
           convertendo o separador de dois pontos para um hifen. Por exemplo,
           o modulo Data::Dumper torna-se p5-Data-Dumper.

   -compiled.specifics

           Se o port pode ser construido com diferentes padroes codificados
           (geralmente parte do nome do diretorio em uma familia de ports), a
           parte -compiled.specifics indica os padroes compilados. O hifen e
           opcional. Exemplos sao tamanho de papel e unidades de fonte.

           A parte -compiled.specifics e definida em PKGNAMESUFFIX.

   -version.numbers

           A string da versao segue um hifen (-) e e uma lista separada por
           pontos de numeros inteiros e letras minusculas. Em particular, nao
           e permitido ter outro hifen dentro da string de versao. A unica
           excec,ao e a string pl (significando "patchlevel"), que pode ser
           usado apenas quando nao ha numeros de versao maiores e menores no
           software. Se a versao do software tiver sequencias como "alpha",
           "beta", "rc" ou "pre", use a primeira letra e coloque
           imediatamente apos um ponto. Se a sequencia da versao continuar
           apos esses nomes, os numeros seguirao o alfabeto simples sem um
           ponto extra entre eles (por exemplo,1.0b2).

           A ideia e facilitar a classificac,ao dos ports observando a string
           de versao. Em particular, certifique-se de que os componentes do
           numero da versao estejam sempre delimitados por um ponto e, se a
           data fizer parte da string, use o formato dyyyy.mm.dd, nao
           dd.mm.yyyy ou o nao compativel com o formato Y2K yy.mm.dd. E
           importante prefixar a versao com uma letra, aquid (para data), no
           caso de uma versao com um numero de versao real, que seria
           numericamente inferior a yyyy.

  Importante:

   O nome do pacote deve ser unico entre todos os ports, verifique se ainda
   nao existe um port com o mesmo PORTNAME e se houver, adicione um dos
   PKGNAMEPREFIX ou PKGNAMESUFFIX.

   Aqui estao alguns exemplos (reais) de como converter o nome como chamado
   pelos autores do software para um nome de pacote adequado, para cada
   linha, apenas um dos DISTVERSION ou PORTVERSION esta definido, dependendo
   de qual seria usado no Makefile:

   Tabela 5.2. Exemplos de Nomes de Pacotes

    Nome da     PKGNAMEPREFIX PORTNAME PKGNAMESUFFIX DISTVERSION PORTVERSION  Razao ou   
 Distribuic,ao                                                               comentario  
                                                                             Nenhuma     
mule-2.2.2      (vazio)       mule     (vazio)       2.2.2                   alterac,ao  
                                                                             e           
                                                                             necessaria  
                                                                             Esta e a    
                                                                             versao 1 do 
mule-1.0.1      (vazio)       mule     1             1.0.1                   mule e a    
                                                                             versao 2 ja 
                                                                             existe      
                                                                             Sem nomes   
                                                                             em          
EmiClock-1.0.2  (vazio)       emiclock (vazio)       1.0.2                   maiusculas  
                                                                             para        
                                                                             programas   
                                                                             individuais 
rdist-1.3alpha  (vazio)       rdist    (vazio)       1.3alfa                 Versao sera 
                                                                             1.3.a       
es-0.9-beta1    (vazio)       es       (vazio)       0.9-beta1               Versao sera 
                                                                             0.9.b1      
mailman-2.0rc3  (vazio)       mailman  (vazio)       2.0rc3                  Versao      
                                                                             sera2.0.r3  
                                                                             O que       
v3.3beta021.src (vazio)       tiff     (vazio)                   3.3         diabos foi  
                                                                             isso        
                                                                             afinal?     
                                                                             Nenhuma     
                                                                             versao no   
                                                                             nome do     
tvtwm           (vazio)       tvtwm    (vazio)                   p11         arquivo,    
                                                                             use o que o 
                                                                             upstream    
                                                                             diz que e   
                                                                             Nenhuma     
                                                                             versao no   
                                                                             nome do     
piewm           (vazio)       piewm    (vazio)       1.0                     arquivo,    
                                                                             use o que o 
                                                                             upstream    
                                                                             diz que e   
                                                                             Nesse       
                                                                             caso,pl1    
                                                                             significa   
                                                                             nivel de    
xvgr-2.10pl1    (vazio)       xvgr     (vazio)                   2.10.pl1    patch,      
                                                                             entao usar  
                                                                             DISTVERSION 
                                                                             nao e       
                                                                             possivel.   
gawk-2.15.6     ja-           gawk     (vazio)       2.15.6                  Versao em   
                                                                             japones     
                                                                             Tamanho do  
                                                                             papel       
psutils-1.13    (vazio)       psutils  -letter       1.13                    codificado  
                                                                             no tempo de 
                                                                             compilac,ao 
                                                                             do pacote   
                                                                             Pacote para 
pkfonts         (vazio)       pkfonts  300           1.0                     fontes de   
                                                                             300dpi      

   Se nao houver absolutamente nenhum rastro de informac,oes de versao co
   codigo fonte original e e improvavel que o autor original va liberar outra
   versao, basta definir a string de versao para 1.0 (como o exemplo piewm
   acima). Caso contrario, pergunte ao autor original ou use a string de data
   com valor de quando a codigo fonte foi lanc,ado como (dyyyy.mm.dd ou
   dyyyymmdd) como a versao.

  Dica:

   Use qualquer letra. Aqui,d significa data, se o codigo for um repositorio
   do Git, g seguido pela data de commit e normalmente utilizado, s para
   snapshot tambem e comum.

5.3. Categorizac,ao

  5.3.1. CATEGORIES

   Quando um pacote e criado, ele e colocado em /usr/ports/packages/All e
   links sao feitos de um ou mais subdiretorios de /usr/ports/packages. Os
   nomes desses subdiretorios sao especificados pela variavel CATEGORIES. O
   objetivo e facilitar a vida do usuario quando ele estiver vasculhando a
   pilha de pacotes no site FTP ou no CD-ROM. Por favor, de uma olhada na
   lista atual de categorias e escolha as que sao adequadas para o port.

   Esta lista tambem determina de onde, na arvore de ports, o port sera
   importado. Se houver mais de uma categoria aqui, os arquivos do port devem
   ser colocados no subdiretorio com o nome da primeira categoria. Veja
   abaixo para mais informac,ao sobre como escolher as categorias certas.

  5.3.2. Lista Atual de Categorias

   Aqui esta a lista atual de categorias de ports. As marcadas com um
   asterisco (*) sao categorias virtuais - aquelas que nao possuem um
   subdiretorio correspondente na arvore de ports. Elas sao usadas
   &#8203;&#8203;apenas como categorias secundarias e apenas para fins de
   pesquisa.

  Nota:

   Para categorias nao virtuais, ha uma descric,ao de uma linha em COMMENT no
   Makefile desse subdiretorio.

       Categoria             Descric,ao                    Notas              
                      Ports para ajudar                                       
   accessibility      usuarios com              
                      deficiencias.            
                      Ports para apoiar o                                     
   afterstep *        gerenciador de janelas    
                      AfterStep.               
   arabic             Suporte ao idioma                                       
                      arabe".                  
   archivers          Ferramentas de                                          
                      arquivamento.            
   astro              Ports astronomicos.                                     
   audio              Suporte de som.                                         
   benchmarks         Utilitarios de                                          
                      benchmarking.            
   biology            Software relacionado `a                                 
                      biologia.                
                      Ferramentas de desenho                                  
   cad                assistidas por            
                      computador.              
   chinese            Suporte ao idioma                                       
                      chines.                  
   comms              Software de              Principalmente software para   
                      comunicac,ao.            falar com o port serial.       
   converters         Conversores de codigo de                                
                      caracteres.              
   databases          Bancos de dados.                                        
                      Coisas que costumavam                                   
                      estar na area de         
   deskutils          trabalho antes dos        
                      computadores serem       
                      inventados.              
                                               Nao coloque bibliotecas aqui   
                                               so porque sao bibliotecas.     
   devel              Utilitarios de           Elas nao deveriam estar nesta  
                      desenvolvimento.         categoria, a menos que elas    
                                               realmente nao pertenc,am a     
                                               nenhum outro lugar.            
   dns                Software relacionado ao                                 
                      DNS.                     
                      Meta-ports para                                         
   docs *             documentac,ao do          
                      FreeBSD.                 
                                               Editores especializados entram 
                                               na sec,ao para essas           
   editors            Editores gerais.         ferramentas. Por exemplo, um   
                                               editor de formula matematica   
                                               math, e tem editores como uma  
                                               segunda categoria.             
   elisp *            Emacs-lisp ports.                                       
                                               Emuladores de terminal nao     
                                               estao aqui. Os baseados em X   
   emulators          Emuladores para outros   vao para o x11 e baseados em   
                      sistemas operacionais.   texto para qualquer comms ou   
                                               misc, dependendo da            
                                               funcionalidade exata.          
                      Ports relacionados com o                                
   enlightenment *    gerenciador de janelas    
                      Enlightenment.           
                      Aplicac,oes monetarias,                                 
   finance            financeiras e             
                      relacionadas.            
   french             Suporte ao idioma                                       
                      frances.                 
                      Utilitarios de cliente e Se o port fala com FTP e HTTP, 
   ftp                servidor deFTP.          coloque-o em ftp com uma       
                                               categoria secundaria de www.   
   games              Jogos.                                                  
   geography *        Software relacionado `a                                 
                      geografia.               
   german             Suporte ao idioma                                       
                      alemao.                  
   gnome *            Ports do ProjetoGNOME.                                  
                      Software relacionado ao                                 
   gnustep *          ambiente de desktop       
                      GNUstep.                 
   graphics           Utilitarios graficos.                                   
   hamradio *         Software para radio                                     
                      amador.                  
   haskell *          Software relacionado `a                                 
                      linguagem Haskell.       
   hebrew             Suporte ao idioma                                       
                      hebraico.                
   hungarian          Suporte de idioma                                       
                      hungaro.                 
   irc                Utilitarios do Internet                                 
                      Relay Chat.              
   japanese           Suporte ao idioma                                       
                      japones.                 
                                               A categoria Java nao deve ser  
                                               unica para um port. Salvo para 
                                               ports diretamente relacionadas 
   java               Software relacionado `a  `a linguagem Java, os          
                      linguagem Java(TM).      mantenedores de ports tambem   
                                               sao encorajados a nao usar     
                                               Java como a principal          
                                               categoria de um port.          
   kde *              Ports do Projeto KDE                                    
                      (generico).              
   kde-applications * Aplicac,oes do Projeto                                  
                      KDE.                     
                      Bibliotecas add-on do                                   
   kde-frameworks *   Projeto KDE para          
                      programac,ao com Qt.     
   kde-plasma *       Desktop do Projeto KDE.                                 
   kld *              Modulos carregaveis                                     
                      &#8203;&#8203;do kernel. 
   korean             Suporte ao idioma                                       
                      coreano.                 
   lang               Linguagens de                                           
                      programac,ao.            
   linux *            Aplicac,oes Linux e                                     
                      utilitarios de suporte.  
   lisp *             Software relacionado `a                                 
                      linguagem Lisp.          
   mail               Mail software.                                          
                      Ports relacionado ao                                    
   mate *             ambiente de desktop       
                      MATE, um fork do GNOME   
                      2.                       
                      Software de computac,ao                                 
   math               numerica e outras         
                      utilidades para          
                      matematica.              
   mbone *            Aplicac,oes MBone.                                      
                                               Coisas que nao pertencem em    
                                               nenhum outro lugar. Se         
                                               possivel, tente encontrar uma  
   misc               Utilitarios diversos     categoria melhor para o port   
                                               do que misc, como os ports     
                                               tendem a ser negligenciados    
                                               aqui.                          
   multimedia         Software multimidia.                                    
   net                Software de rede                                        
                      diversos.                
   net-im             Software de mensagens                                   
                      instantaneas.            
   net-mgmt           Software de                                             
                      gerenciamento de rede.   
   net-p2p            Aplicativos de rede peer                                
                      to peer.                 
   net-vpn *          Aplicativos de Rede                                     
                      Privada Virtual.         
   news               Software de noticias                                    
                      USENET.                  
                      Aplicativos que lidam                                   
   parallel *         com o paralelismo na      
                      computac,ao.             
   pear *             Ports relacionados ao                                   
                      framework PHP Pear.      
   perl5 *            Ports que exigem Perl                                   
                      versao 5 para rodar.     
   plan9 *            Varios programas de                                     
                      Plan9.                   
   polish             Suporte ao idioma                                       
                      polones".                
                      Ports para gerenciar,                                   
   ports-mgmt         instalar e desenvolver    
                      ports e pacotes do       
                      FreeBSD.                 
   portuguese         Suporte ao idioma                                       
                      Portugues.               
                                               As ferramentas de editorac,ao  
   print              Software de Impressao.   eletronica (pre-visualizadores 
                                               etc.) tambem pertencem aqui.   
   python *           Software relacionado a                                  
                      linguagemPython.         
   ruby *             Software relacionado a                                  
                      linguagemRuby.           
   rubygems *         Ports de pacotes                                        
                      RubyGems.                
   russian            Suporte de idioma russo.                                
   scheme *           Software relacionado `a                                 
                      linguagem Scheme.        
                      Ports cientificos que                                   
                      nao se encaixam em       
   science            outras categorias, como   
                      astro, biologia e        
                      matematica.              
   security           Utilitarios de                                          
                      seguranc,a.              
   shells             Linha de comando do                                     
                      shell.                   
   spanish *          Suporte ao idioma                                       
                      espanhol.                
   sysutils           Utilidades do sistema.                                  
   tcl *              Ports que usam o Tcl                                    
                      para rodar.              
                      Utilitarios de           Nao inclui ferramentas de      
   textproc           processamento de texto.  editorac,ao eletronica, que    
                                               vao para print.                
   tk *               Ports que usam o Tk para                                
                      rodar.                   
   ukrainian          Suporte de idioma                                       
                      Ucraniano.               
   vietnamese         Suporte de idioma                                       
                      Vietnamita.              
                      Ports para suportar o                                   
   wayland *          servidor de display       
                      Wayland.                 
                      Ports para suportar o                                   
   windowmaker *      gerenciador de janelas    
                      do WindowMaker.          
   www                Software relacionado `a  O suporte ao idioma HTML       
                      World Wide Web.          tambem pertence aqui.          
                                               Esta categoria e apenas para   
                                               software que suporta           
                                               diretamente o sistema de       
   x11                O X Window System e seus janelas. Nao coloque           
                      amigos.                  aplicativos regulares do X     
                                               aqui. A maioria deles e usada  
                                               em outras categorias x11- *    
                                               (veja abaixo).                 
   x11-clocks         X11 relogios.                                           
   x11-drivers        Drivers X11.                                            
   x11-fm             Gerentes de arquivos                                    
                      X11.                     
   x11-fonts          Fontes X11 e utilitarios                                
                      de fonte.                
   x11-servers        Servidores X11.                                         
   x11-themes         X11 temas.                                              
   x11-toolkits       Kits de ferramentas X11.                                
   x11-wm             Gerentes de janela do                                   
                      X11.                     
                      Ports relacionados com o                                
   xfce *             ambiente de trabalho      
                      Xfce.                    
   zope *             Zope suporte.                                           

  5.3.3. Escolhendo a Categoria Correta

   Como muitas das categorias se sobrepoem, escolher qual das categorias sera
   a principal categoria do port pode ser entediante. Existem varias regras
   que governam essa questao. Aqui esta a lista de prioridades, em ordem
   decrescente de precedencia:

     * A primeira categoria deve ser uma categoria fisica (veja acima). Isso
       e necessario para o empacotamento funcionar. Categorias virtuais e
       categorias fisicas podem ser misturadas depois disso.

     * As categorias especificas de idioma sempre vem em primeiro lugar. Por
       exemplo, se o port instalar fontes X11 em japones, a linha CATEGORIES
       deve ser japanese x11-fonts.

     * Categorias especificas sao listadas antes de outras menos especificas.
       Por exemplo, um editor de HTML e listado como www editors, e nao ao
       contrario. Alem disso, nao insira net quando o port pertencer a
       qualquer uma das categorias irc, mail, news, security ou www, pois net
       esta incluida implicitamente.

     * x11 e usado como uma categoria secundaria somente quando a categoria
       principal e uma linguagem natural. Em particular, nao coloque x11 na
       linha de categoria em aplicac,oes X.

     * Os modes Emacs sao colocados na mesma categoria de ports que a
       aplicac,ao suportada pelo mode, e nao em editors. Por exemplo, um mode
       Emacs para editar codigo fonte de alguma linguagem de programac,ao
       entra em lang.

     * Ports que instalam modulos do kernel carregaveis &#8203;&#8203;tambem
       tem a categoria virtual kld na sua linha CATEGORIES. Esta e uma das
       coisas tratadas automaticamente adicionando USES=kmod.

     * misc nao aparece com nenhuma outra categoria nao virtual. Se houver
       misc com outra categoria na linha CATEGORIES, isso significa que misc
       pode ser seguramente excluido e o port colocado apenas no outro
       subdiretorio.

     * Se o port realmente nao pertencer em nenhum outro lugar, coloque-o em
       misc.

   Se a categoria nao estiver claramente definida, por favor, insira um
   comentario sobre isso na submissao do port no banco de dados de bugs, para
   que possamos discuti-lo antes de importa-lo. Como committer, envie uma
   mensagem para a lista de discussao de ports do FreeBSD, para podermos
   discutir isso primeiro. Com muita frequencia, novos ports sao importados
   na categoria errada, e depois sao movidos imediatamente para a categoria
   correta.

  5.3.4. Propondo uma Nova Categoria

   Como a Colec,ao de Ports vem crescendo com o tempo, varias novas
   categorias tambem sao adicionadas. Novas categorias podem ser categorias
   virtuais- aquelas que nao possuem um subdiretorio correspondente na arvore
   de ports - ou fisicas - aquelas que possuem. Esta sec,ao discute os
   problemas envolvidos na criac,ao de uma nova categoria fisica. Leia
   atentamente antes de propor uma nova.

   Nossa pratica atual tem sido a de evitar a criac,ao de uma nova categoria
   fisica, a menos que um grande numero de ports logicamente pertenc,am a
   ela, ou os ports que pertenceriam a ela sejam um grupo logicamente
   distinto de interesse geral limitado (por exemplo, categorias relacionadas
   com as linguas humanas faladas), ou de preferencia ambas.

   A razao para isto e que tal mudanc,a cria uma quantidade grande de
   trabalho tanto para os committers quanto para todos os usuarios que
   rastreiam alterac,oes na colec,ao de ports. Alem disso, propostas de
   alterac,ao de categorias parecem naturalmente atrair controversias.
   (Talvez isso seja porque nao ha um consenso claro sobre quando uma
   categoria e "grande o suficiente", nem quando as categorias devem ser
   apenas para propositos de busca (e, portanto, qual numero de categorias
   seria um numero ideal), e assim por diante.)

   Aqui esta o procedimento:

    1. Proponha a nova categoria na lista de discussao de ports do FreeBSD.
       Inclua uma justificativa detalhada para a nova categoria, incluindo
       por que as categorias existentes nao sao suficientes, e a lista de
       ports existentes propostos para a mudanc,a. (Se houver novos ports
       pendentes no Bugzilla que caberia nessa categoria, liste-os tambem.)
       Se voce for o mantenedor e/ou o apresentador, respectivamente,
       mencione isso, pois isso pode ajudar no caso.

    2. Participe da discussao.

    3. Se parecer que ha apoio o suficiente para a ideia, registre um PR que
       inclua a logica e a lista de ports existentes que precisam ser
       movidos. O ideal e que este PR tambem inclua essas alterac,oes:

          * Makefiles para os novos ports, uma vez que sejam recopiados

          * Makefile para a nova categoria

          * Makefile para as categorias dos ports antigos

          * Makefiles para ports que dependem dos ports antigos

          * (para credito extra, inclua os outros arquivos que precisam ser
            alterados, conforme o procedimento no Guia do Committer.)

    4. Como isso afeta a infraestrutura do ports e envolve a movimentac,ao e
       alterac,ao de varios ports, pode ser necessario executar testes de
       regressao no cluster de build, e portanto, atribua o PR para a Equipe
       de Gerenciamento de Ports <portmgr@FreeBSD.org>.

    5. Se esse PR for aprovado, um committer precisara seguir o restante do
       procedimento que e descrito no Guia do Committer.

   A proposta de uma nova categoria virtual e semelhante `a acima, mas muito
   menos trabalhoso, ja que nenhum port tera que ser movido. Nesse caso, os
   unicos patches a serem incluidos no PR serao aqueles para adicionar a nova
   categoria na linha CATEGORIES dos ports afetados.

  5.3.5. Propondo Reorganizar Todas as Categorias

   Ocasionalmente alguem propoe reorganizar as categorias com uma estrutura
   de dois niveis, ou algum outro tipo de estrutura de palavras-chave. Ate o
   momento, nada vem de nenhuma dessas propostas porque, embora sejam muito
   faceis de fazer, o esforc,o envolvido com qualquer readequac,ao de toda a
   colec,ao de ports existente e assustadora, para se dizer o minimo. Por
   favor, leia o historico dessas propostas nos arquivos da lista de
   discussao antes de postar essa ideia. Alem disso, esteja preparado para
   ser desafiado a oferecer um prototipo funcional.

5.4. Os Arquivos de Distribuic,ao

   A segunda parte do Makefile descreve os arquivos que devem ser baixados
   para compilar o port e onde eles podem ser baixados.

  5.4.1. DISTNAME

   DISTNAME e o nome do port, conforme chamado pelos autores do software.
   DISTNAME e derivado de
   ${PORTNAME}-${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}, e se
   nao estiver definido, DISTVERSION e derivado de ${PORTVERSION}, portanto
   altere DISTNAME somente se necessario. DISTNAME e usado apenas em dois
   lugares. Primeiro, na lista de arquivos de distribuic,ao (DISTFILES)
   padrao para ${DISTNAME}${EXTRACT_SUFX}. Em segundo lugar, espera-se que o
   arquivo de distribuic,ao seja extraido em um subdiretorio denominado
   WRKSRC, cujo padrao e work/${DISTNAME}.

   Alguns nomes de distribuic,ao de fornecedores que nao se encaixam no
   ${PORTNAME}-${PORTVERSION}-scheme podem ser tratados automaticamente
   configurando DISTVERSIONPREFIX, DISTVERSION e DISTVERSIONSUFFIX.
   PORTVERSION sera derivado de DISTVERSION automaticamente.

  Importante:

   Apenas um dos PORTVERSION e DISTVERSION pode ser definido de cada vez. E
   se DISTVERSION nao derivar um PORTVERSION correto, nao use DISTVERSION.

   Se o esquema de versao upstream puder ser derivado em um esquema de versao
   compativel com o ports, defina uma variavel para a versao upstream, nao
   use DISTVERSION como o nome da variavel. Defina PORTVERSION para a versao
   computada com base na variavel criada, e defina DISTNAME adequadamente.

   Se o esquema de versao upstream nao puder ser facilmente configurado para
   um valor compativel com o ports, defina PORTVERSION para um valor sensato,
   e defina DISTNAME com PORTNAME com a versao literal do upstream.

   Exemplo 5.6. Derivando PORTVERSION Manualmente

   BIND9 usa um esquema de versao que nao e compativel com as versoes de
   ports (tem - em suas versoes) e nao pode ser derivado usando DISTVERSION
   porque apos a versao 9.9.9, sera lanc,ado "patchlevels" na forma 9.9.9-P1.
   DISTVERSION iria traduzir isso para 9.9.9.p1, que no esquema de
   versionamento de ports significa 9.9.9 pre-release 1, que vem antes de
   9.9.9 e nao depois. Assim PORTVERSION e derivado manualmente de uma
   variavel ISCVERSION para retornar 9.9.9p1.

   A ordem na qual o framework do ports e o pkg ordenara as versoes, e
   verificada usando o argumento -t do pkg-version(8):

 % pkg version -t 9.9.9 9.9.9.p1
 > 1
 % pkg version -t 9.9.9 9.9.9p1
 < 2

   1 O sinal > significa que o primeiro argumento passado em -t e maior que o 
     segundo argumento. 9.9.9 e maior que 9.9.9.p1.                           
   2 O sinal < significa que o primeiro argumento passado em -t e menor que o 
     segundo argumento. 9.9.9 e menor que 9.9.9p1.                            

   No Makefile do port, por exemplo dns/bind99, e alcanc,ado por:

 PORTNAME=       bind
 PORTVERSION=    ${ISCVERSION:S/-P/P/:S/b/.b/:S/a/.a/:S/rc/.rc/} 1
 CATEGORIES=     dns net
 MASTER_SITES=   ISC/bind9/${ISCVERSION} 2
 PKGNAMESUFFIX=  99
 DISTNAME=       ${PORTNAME}-${ISCVERSION} 3

 MAINTAINER=     mat@FreeBSD.org
 COMMENT=        BIND DNS suite with updated DNSSEC and DNS64

 LICENSE=        ISCL

 # ISC releases things like 9.8.0-P1 or 9.8.1rc1, which our versioning does not like
 ISCVERSION=     9.9.9-P6 4

   4 Defina a versao upstream em ISCVERSION, com um comentario dizendo porque 
     e necessario.                                                            
   1 Use ISCVERSION para obter um PORTVERSION compativel com o ports.         
   2 Use ISCVERSION diretamente para obter a URL correta para baixar o        
     arquivo de distribuic,ao.                                                
   3 Use ISCVERSION diretamente para nomear o arquivo de distribuic,ao.       

   Exemplo 5.7. Derivar DISTNAME a partir de PORTVERSION

   De tempos em tempos, o nome do arquivo de distribuic,ao tem pouca ou
   nenhuma relac,ao com a versao do software.

   No comms/kermit, apenas o ultimo elemento da versao esta presente no
   arquivo de distribuic,ao:

 PORTNAME=       kermit
 PORTVERSION=    9.0.304
 CATEGORIES=     comms ftp net
 MASTER_SITES=   ftp://ftp.kermitproject.org/kermit/test/tar/
 DISTNAME=       cku${PORTVERSION:E}-dev20 1

   1 O modificador :E make(1) retorna o sufixo da variavel, neste caso, 304.  
     O arquivo de distribuic,ao cku304-dev20.tar.gz e gerado corretamente.    

   Exemplo 5.8. Caso Exotico 1

   As vezes, nao ha relac,ao entre o nome do software, sua versao e o arquivo
   de distribuic,ao no qual ele e distribuido.

   Do audio/libworkman:

 PORTNAME=       libworkman
 PORTVERSION=    1.4
 CATEGORIES=     audio
 MASTER_SITES=   LOCAL/jim
 DISTNAME=       ${PORTNAME}-1999-06-20

   Exemplo 5.9. Caso Exotico 2

   No comms/librs232, o arquivo de distribuic,ao nao e versionado, portanto,
   DIST_SUBDIR e necessario:

 PORTNAME=       librs232
 PORTVERSION=    20160710
 CATEGORIES=     comms
 MASTER_SITES=   http://www.teuniz.net/RS-232/
 DISTNAME=       RS-232
 DIST_SUBDIR=    ${PORTNAME}-${PORTVERSION}

  Nota:

   PKGNAMEPREFIX e PKGNAMESUFFIX nao afetam o DISTNAME. Observe tambem que se
   WRKSRC for igual a ${WRKDIR}/${DISTNAME} enquanto o arquivo fonte original
   e nomeado para algo diferente de
   ${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}, deixe DISTNAME sozinho- definir
   apenas DISTFILES e mais facil que ambos DISTNAME e WRKSRC (e possivelmente
   EXTRACT_SUFX).

  5.4.2. MASTER_SITES

   Grave a parte do diretorio do FTP/HTTP-URL apontando para o tarball
   original em MASTER_SITES. Nao esquec,a a barra final (/)!

   A macro make ira tentar usar esta especificac,ao para baixar o arquivo de
   distribuic,ao com FETCH se nao for possivel encontra-lo ja no sistema.

   Recomenda-se que varios sites sejam incluidos nesta lista, de preferencia
   em diferentes continentes. Isso ira proteger contra problemas de rede
   amplos.

  Importante:

   MASTER_SITES nao deve estar em branco. Ele deve apontar para o site real
   que hospeda os arquivos de distribuic,ao. Ele nao pode apontar para web
   archives ou para os sites de cache dos arquivos de distribuic,ao do
   FreeBSD. A unica excec,ao a essa regra sao ports que nao possuem arquivos
   de distribuic,ao. Por exemplo, meta-ports nao possuem arquivos de
   distribuic,ao, assim o MASTER_SITES nao precisa ser definido.

    5.4.2.1. Usando Variaveis MASTER_SITE_*&#8203;&#8203;

   Abreviac,oes de atalhos estao disponiveis para arquivos populares como o
   SourceForge (SOURCEFORGE), GNU (GNU), ou Perl CPAN (PERL_CPAN).
   MASTER_SITES pode usa-los diretamente:

 MASTER_SITES=   GNU/make

   O antigo formato expandido ainda funciona, mas todos os ports foram
   convertidos para o formato compacto. O formato expandido se parece com
   isto:

 MASTER_SITES=           ${MASTER_SITE_GNU}
 MASTER_SITE_SUBDIR=     make

   Estes valores e variaveis &#8203;&#8203;sao definidos em Mk/bsd.sites.mk.
   Novas entradas sao adicionadas com frequencia, portanto, verifique a
   versao mais recente deste arquivo antes de enviar um port.

  Dica:

   Para qualquer variavel MASTER_SITE_FOO , a versao abreviada FOO pode ser
   utilizada. Por exemplo, use:

 MASTER_SITES=   FOO

   E se MASTER_SITE_SUBDIR for necessario, use isso:

 MASTER_SITES=   FOO/bar

  Nota:

   Alguns nomes MASTER_SITE_* sao bastante longos e, para facilitar o uso,
   foram definidos atalhos:

   Tabela 5.3. Atalhos para Macros MASTER_SITE_*

        Macro      Atalho 
   PERL_CPAN       CPAN   
   GITHUB          GH     
   GITHUB_CLOUD    GHC    
   LIBREOFFICE_DEV LODEV  
   NETLIB          NL     
   RUBYGEMS        RG     
   SOURCEFORGE     SF     

    5.4.2.2. Macros Magicas de MASTER_SITES

   Varias macros "magicas" existem para sites populares com uma estrutura de
   diretorios previsivel. Para isso, basta usar a abreviac,ao e o sistema
   escolhera um subdiretorio automaticamente. Para um port nomeado Stardict,
   de versao 1.2.3 e hospedado no SourceForge, adicione esta linha:

 MASTER_SITES=   SF

   Implica em um subdiretorio chamado /project/stardict/stardict/1.2.3. Se o
   diretorio estiver incorreto, ele podera ser substituido:

 MASTER_SITES=   SF/stardict/WyabdcRealPeopleTTS/${PORTVERSION}

   Isso tambem pode ser escrito como

 MASTER_SITES=   SF
 MASTER_SITE_SUBDIR=     stardict/WyabdcRealPeopleTTS/${PORTVERSION}

   Tabela 5.4. Macros Magicas de MASTER_SITES

         Macro                              Subdiretorio deduzido                     
APACHE_COMMONS_BINARIES ${PORTNAME:S,commons-,,}                                      
APACHE_COMMONS_SOURCE   ${PORTNAME:S,commons-,,}                                      
APACHE_JAKARTA          ${PORTNAME:S,-,/,}/source                                     
BERLIOS                 ${PORTNAME:tl}.berlios                                        
CHEESESHOP              source/${DISTNAME:C/(.).*/\1/}/${DISTNAME:C/(.*)-[0-9].*/\1/} 
CPAN                    ${PORTNAME:C/-.*//}                                           
DEBIAN                  pool/main/${PORTNAME:C/^((lib)?.).*$/\1/}/${PORTNAME}         
FARSIGHT                ${PORTNAME}                                                   
FESTIVAL                ${PORTREVISION}                                               
GCC                     releases/${DISTNAME}                                          
GENTOO                  distfiles                                                     
GIMP                    ${PORTNAME}/${PORTVERSION:R}/                                 
GH                      ${GH_ACCOUNT}/${GH_PROJECT}/tar.gz/${GH_TAGNAME}?dummy=/      
GHC                     ${GH_ACCOUNT}/${GH_PROJECT}/                                  
GNOME                   sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/}  
GNU                     ${PORTNAME}                                                   
GNUPG                   ${PORTNAME}                                                   
GNU_ALPHA               ${PORTNAME}                                                   
HORDE                   ${PORTNAME}                                                   
LODEV                   ${PORTNAME}                                                   
MATE                    ${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/}                      
MOZDEV                  ${PORTNAME:tl}                                                
NL                      ${PORTNAME}                                                   
QT                      archive/qt/${PORTVERSION:R}                                   
SAMBA                   ${PORTNAME}                                                   
SAVANNAH                ${PORTNAME:tl}                                                
SF                      ${PORTNAME:tl}/${PORTNAME:tl}/${PORTVERSION}                  

  5.4.3. USE_GITHUB

   Se o arquivo de distribuic,ao vier de um commit ou tag especifico no
   GitHub para o qual nao ha arquivo lanc,ado oficialmente, ha uma maneira
   facil de definir o DISTNAME e MASTER_SITES corretos automaticamente. Estas
   variaveis &#8203;&#8203;estao disponiveis:

   Tabela 5.5. USE_GITHUBDescric,ao

+-----------------------------------------------------------------------------------------------------------+
| Variavel |               Descric,ao                |                        Padrao                        |
|----------+-----------------------------------------+------------------------------------------------------|
|GH_ACCOUNT|Nome da conta do usuario do GitHub que   |${PORTNAME}                                           |
|          |hospeda o projeto                        |                                                      |
|----------+-----------------------------------------+------------------------------------------------------|
|GH_PROJECT|Nome do projeto no GitHub                |${PORTNAME}                                           |
|----------+-----------------------------------------+------------------------------------------------------|
|          |Nome da tag para download (2.0.1, hash,  |                                                      |
|GH_TAGNAME|...) Usar o nome de uma branch aqui e    |${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}|
|          |errado. Tambem e possivel usar o hash de |                                                      |
|          |um ID de commit para gerar um snapshot.  |                                                      |
|----------+-----------------------------------------+------------------------------------------------------|
|          |Quando o software precisa que um arquivo |                                                      |
|          |de distribuic,ao adicional seja extraido |                                                      |
|          |em ${WRKSRC}, esta variavel pode ser     |                                                      |
|GH_SUBDIR |usada. Veja os exemplos em               |(none)                                                |
|          |Sec,ao 5.4.3.1, "Baixando Multiplos      |                                                      |
|          |Arquivos do GitHub" para maiores         |                                                      |
|          |informac,oes.                            |                                                      |
|----------+-----------------------------------------+------------------------------------------------------|
|          |GH_TUPLE permite colocar GH_ACCOUNT,     |                                                      |
|          |GH_PROJECT, GH_TAGNAME e GH_SUBDIR em uma|                                                      |
|          |unica variavel. O formato e              |                                                      |
|GH_TUPLE  |conta:projeto:tagname:grupo/subdiretorio.|                                                      |
|          |O /subdiretorio e opcional. Isso e util  |                                                      |
|          |quando mais de um projeto no GitHub      |                                                      |
|          |precisa ser utilizado.                   |                                                      |
+-----------------------------------------------------------------------------------------------------------+

  Importante:

   Nao use GH_TUPLE para o arquivo de distribuic,ao padrao, ja que nao tem
   nenhum padrao.

   Exemplo 5.10. Uso Simples de USE_GITHUB

   Ao tentar fazer um port para a versao 1.2.7 do pkg do usuario FreeBSD no
   github, em https://github.com/freebsd/pkg, O Makefile acabaria ficando
   assim (levemente simplificado para o exemplo):

 PORTNAME=       pkg
 DISTVERSION=    1.2.7

 USE_GITHUB=     yes
 GH_ACCOUNT=     freebsd

   MASTER_SITES sera automaticamente definido como GH GHC e WRKSRC para
   ${WRKDIR}/pkg-1.2.7.

   Exemplo 5.11. Uso Mais Completo de USE_GITHUB

   Ao tentar fazer um port para uma versao de desenvolvimento do pkg do
   usuario FreeBSD no github, em https://github.com/freebsd/pkg, o Makefile
   acaba ficando assim (levemente simplificado para o exemplo):

 PORTNAME=       pkg-devel
 DISTVERSION=    1.3.0.a.20140411

 USE_GITHUB=     yes
 GH_ACCOUNT=     freebsd
 GH_PROJECT=     pkg
 GH_TAGNAME=     6dbb17b

   MASTER_SITES sera automaticamente definido para GH GHC e WRKSRC para
   ${WRKDIR}/pkg-6dbb17b.

  Dica:

   20140411 e a data do commit referenciada em GH_TAGNAME, nao a data em que
   e editado o Makefile, ou a data em que o commit e feito.

   Exemplo 5.12. Uso de USE_GITHUB com DISTVERSIONPREFIX

   De tempos em tempos, GH_TAGNAME e uma ligeira variac,ao de DISTVERSION.
   Por exemplo, se a versao for 1.0.2, e a tag v1.0.2. Nesses casos, e
   possivel usar DISTVERSIONPREFIX ou DISTVERSIONSUFFIX:

 PORTNAME=       foo
 DISTVERSIONPREFIX=      v
 DISTVERSION=    1.0.2

 USE_GITHUB=     yes

   GH_TAGNAME sera automaticamente definido para v1.0.2, enquanto WRKSRC sera
   mantido como ${WRKDIR} /foo-1.0.2.

   Exemplo 5.13. Usando USE_GITHUB Quando o Upstream Nao Usa Versoes

   Se nunca houve uma versao upstream, nao invente uma como 0.1 ou 1.0. Crie
   o port com um DISTVERSION de gYYYYMMDD, onde g e para Git e YYYYMMDD
   representa a data em que o commit e referenciado em GH_TAGNAME.

 PORTNAME=       bar
 DISTVERSION=    g20140411

 USE_GITHUB=     yes
 GH_TAGNAME=     c472d66b

   Isso cria um esquema de controle de versao que e incrementado com o tempo
   e que ainda e menor do que a versao 0 (veja Exemplo 5.1, "Usando
   pkg-version(8) para comparar versoes." para mais informac,oes do
   pkg-version(8)):

 % pkg version -t g20140411 0
 <

   Isso significa que nao sera necessario usar o PORTEPOCH caso o upstream
   decida lanc,ar versoes no futuro.

   Exemplo 5.14. Usando USE_GITHUB para Acessar um Commit Entre Duas Versoes

   Se a versao atual do software usa uma tag Git, e o port precisa ser
   atualizado para uma versao mais recente e intermediaria, sem uma tag, use
   git-describe(1) para descobrir a versao a ser utilizada:

 % git describe --tags f0038b1
 v0.7.3-14-gf0038b1

   v0.7.3-14-gf0038b1pode ser dividido em tres partes:

   v0.7.3

           Este e a ultima tag Git que aparece no historico de commits antes
           do commit solicitado.

   -14

           Isso significa que o commit solicitado, f0038b1, e o 14-o commit
           apos a tag v0.7.3.

   -gf0038b1

           O -g significa "Git", e o f0038b1 e o commit hash referenciado.

 PORTNAME=       bar
 DISTVERSIONPREFIX=  v
 DISTVERSION=    0.7.3-14
 DISTVERSIONSUFFIX=  -gf0038b1

 USE_GITHUB=     yes

   Isso cria um esquema de versionamento que e incrementado com o tempo (bem,
   em cima de commits), e nao entra em conflito com a criac,ao de uma versao
   0.7.4. (Veja Exemplo 5.1, "Usando pkg-version(8) para comparar versoes."
   para detalhes do pkg-version(8)):

 % pkg version -t 0.7.3 0.7.3.14
 <
 % pkg version -t 0.7.3.14 0.7.4
 <

  Nota:

   Se o commit solicitado e o mesmo que uma tag, uma descric,ao mais curta e
   mostrada por padrao. A versao mais longa e equivalente:

 % git describe --tags c66c71d
 v0.7.3
 % git describe --tags --long c66c71d
 v0.7.3-0-gc66c71d

    5.4.3.1. Baixando Multiplos Arquivos do GitHub

   O framework USE_GITHUB tambem suporta a obtenc,ao de varios arquivos de
   distribuic,ao de diferentes locais no GitHub. Ele funciona de uma forma
   muito semelhante ao Sec,ao 5.4.9, "Multiplos Arquivos de Distribuic,ao ou
   Patches de Varios Locais".

   Varios valores sao adicionados a GH_ACCOUNT, GH_PROJECT e GH_TAGNAME. Cada
   valor diferente e atribuido a um grupo. O valor principal pode nao ter
   nenhum grupo ou grupo :DEFAULT. Um valor pode ser omitido se for o mesmo
   que o padrao listado em Tabela 5.5, "USE_GITHUBDescric,ao".

   GH_TUPLE tambem pode ser usado quando ha muitos arquivos de distribuic,ao.
   Isso ajuda a manter as informac,oes de conta, projeto, tagname e grupo no
   mesmo lugar.

   Para cada grupo, uma variavel auxiliar ${WRKSRC_group} e criada, contendo
   o diretorio no qual o arquivo foi extraido. As variaveis ${WRKSRC_group}
   &#8203;&#8203;podem ser usadas para mover diretorios durante o
   post-extract, ou para serem adicionadas em CONFIGURE_ARGS, ou o que for
   necessario para que o software seja compilado corretamente.

  Cuidado:

   A parte do :group deve ser usada para apenas um arquivo de distribuic,ao.
   Ela e usado como uma chave unica e usa-la mais de uma vez ira sobrescrever
   os valores anteriores.

  Nota:

   Como isso e apenas modificac,oes de DISTFILES e MASTER_SITES, os nomes dos
   grupos devem obedecer `as restric,oes de nomes de grupos descritas em
   Sec,ao 5.4.9, "Multiplos Arquivos de Distribuic,ao ou Patches de Varios
   Locais"

   Ao buscar varios arquivos do GitHub, `as vezes o arquivo de distribuic,ao
   padrao nao e buscado no GitHub. Para desabilitar a busca da distribuic,ao
   padrao, defina:

 USE_GITHUB=     nodefault

  Importante:

   Ao utilizar USE_GITHUB=nodefault, o Makefile deve ter DISTFILES em seu
   bloco inicial. A definic,ao deve ser:

 DISTFILES=    ${DISTNAME}${EXTRACT_SUFX}

   Exemplo 5.15. Uso de USE_GITHUB com Varios Arquivos de Distribuic,ao

   De tempos em tempos e necessario baixar mais de um arquivo de
   distribuic,ao. Por exemplo, quando o repositorio git do upstream usa
   submodulos. Isso pode ser feito facilmente usando grupos nas variaveis
   GH_*:

 PORTNAME=       foo
 DISTVERSION=    1.0.2

 USE_GITHUB=     yes
 GH_ACCOUNT=     bar:icons,contrib
 GH_PROJECT=     foo-icons:icons foo-contrib:contrib
 GH_TAGNAME=     1.0:icons fa579bc:contrib
 GH_SUBDIR=      ext/icons:icons

 CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}

   Isso ira baixar tres arquivos de distribuic,ao do github. O padrao vem de
   foo/foo versao 1.0.2. O segundo, com o grupo icons, vem de bar/foo-icons
   versao 1.0. O terceiro vem de bar/foo-contrib e usa o commit do
   Gitfa579bc. Os arquivos de distribuic,ao sao nomeados
   foo-foo-1.0.2_GH0.tar.gz, bar-foo-icons-1.0_GH0.tar.gz e
   bar-foo-contrib-fa579bc_GH0.tar.gz.

   Todos os arquivos de distribuic,ao sao extraidos em ${WRKDIR} em seus
   respectivos subdiretorios. O arquivo padrao ainda e extraido em ${WRKSRC},
   nesse caso, ${WRKDIR}/foo-1.0.2. Cada arquivo de distribuic,ao adicional e
   extraido em ${WRKSRC_group}. Aqui, para o grupo icons, chamado de
   ${WRKSRC_icons}, sera ${WRKDIR}/foo-icons-1.0. O arquivo com o grupo
   contrib e chamado de ${WRKSRC_contrib} e contem
   ${WRKDIR}/foo-contrib-fa579bc.

   O sistema de compilac,ao do software espera encontrar os icones em um
   subdiretorio ext/icons em seus fontes, entao GH_SUBDIR e usado. GH_SUBDIR
   garante que ext exista, mas nao que ext/icons tambem exista. Entao isso
   acontece:

 post-extract:
       @${MV} ${WRKSRC_icons} ${WRKSRC}/ext/icons

   Exemplo 5.16. Uso de USE_GITHUB com Varios Arquivos de Distribuic,ao
   Usando GH_TUPLE

   Isto e funcionalmente equivalente a Exemplo 5.15, "Uso de USE_GITHUB com
   Varios Arquivos de Distribuic,ao" mas usando GH_TUPLE:

 PORTNAME=       foo
 DISTVERSION=    1.0.2

 USE_GITHUB=     yes
 GH_TUPLE=       bar:foo-icons:1.0:icons/ext/icons \
                 bar:foo-contrib:fa579bc:contrib

 CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}

   Agrupamento foi usado no exemplo anterior com bar:icons, contrib. Algumas
   informac,oes redundantes estao presentes com GH_TUPLE porque o uso de
   agrupamento nao e possivel.

   Exemplo 5.17. Como Usar USE_GITHUB com Submodulos Git?

   Ports com o GitHub como um repositorio upstream `as vezes usam submodulos.
   Veja git-submodule(1) para maiores informac,oes.

   O problema com submodulos e que cada um e um repositorio separado. Como
   tal, cada um deve ser buscado separadamente.

   Usando finances/moneymanagerex como exemplo, seu repositorio GitHub e
   https://github.com/moneymanagerex/moneymanagerex. Tem um arquivo
   .gitmodules na raiz. Este arquivo descreve todos os sub modulos usados
   neste repositorio e lista os repositorios adicionais necessarios. Este
   arquivo ira dizer quais repositorios adicionais sao necessarios:

 [submodule "lib/wxsqlite3"]
         path = lib/wxsqlite3
         url = https://github.com/utelle/wxsqlite3.git
 [submodule "3rd/mongoose"]
         path = 3rd/mongoose
         url = https://github.com/cesanta/mongoose.git
 [submodule "3rd/LuaGlue"]
         path = 3rd/LuaGlue
         url = https://github.com/moneymanagerex/LuaGlue.git
 [submodule "3rd/cgitemplate"]
         path = 3rd/cgitemplate
         url = https://github.com/moneymanagerex/html-template.git
 [...]

   A unica informac,ao que falta nesse arquivo e a hash ou tag de commit para
   usar na versao. Esta informac,ao e encontrada apos a clonagem do
   repositorio:

 % git clone --recurse-submodules https://github.com/moneymanagerex/moneymanagerex.git
 Cloning into 'moneymanagerex'...
 remote: Counting objects: 32387, done.
 [...]
 Submodule '3rd/LuaGlue' (https://github.com/moneymanagerex/LuaGlue.git) registered for path '3rd/LuaGlue'
 Submodule '3rd/cgitemplate' (https://github.com/moneymanagerex/html-template.git) registered for path '3rd/cgitemplate'
 Submodule '3rd/mongoose' (https://github.com/cesanta/mongoose.git) registered for path '3rd/mongoose'
 Submodule 'lib/wxsqlite3' (https://github.com/utelle/wxsqlite3.git) registered for path 'lib/wxsqlite3'
 [...]
 Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/LuaGlue'...
 Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/cgitemplate'...
 Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/mongoose'...
 Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/lib/wxsqlite3'...
 [...]
 Submodule path '3rd/LuaGlue': checked out 'c51d11a247ee4d1e9817dfa2a8da8d9e2f97ae3b'
 Submodule path '3rd/cgitemplate': checked out 'cd434eeeb35904ebcd3d718ba29c281a649b192c'
 Submodule path '3rd/mongoose': checked out '2140e5992ab9a3a9a34ce9a281abf57f00f95cda'
 Submodule path 'lib/wxsqlite3': checked out 'fb66eb230d8aed21dec273b38c7c054dcb7d6b51'
 [...]
 % cd moneymanagerex
 % git submodule status
  c51d11a247ee4d1e9817dfa2a8da8d9e2f97ae3b 3rd/LuaGlue (heads/master)
  cd434eeeb35904ebcd3d718ba29c281a649b192c 3rd/cgitemplate (cd434ee)
  2140e5992ab9a3a9a34ce9a281abf57f00f95cda 3rd/mongoose (6.2-138-g2140e59)
  fb66eb230d8aed21dec273b38c7c054dcb7d6b51 lib/wxsqlite3 (v3.4.0)
 [...]

   Tambem pode ser encontrado no GitHub. Cada subdiretorio que e um submodulo
   e mostrado como diretorio @ hash, por exemplo,mongoose @ 2140e59.

  Nota:

   Embora a obtenc,ao das informac,oes pelo GitHub parec,a mais facil, as
   informac,oes encontradas usando git submodule status fornecera
   informac,oes mais significativas. Por exemplo, o commit hash de
   lib/wxsqlite3 fb66eb2 corresponde a v3.4.0. Ambos podem ser usados, mas
   quando uma tag estiver disponivel, use-a.

   Agora que todas as informac,oes necessarias foram reunidas, o Makefile
   pode ser escrito (somente as linhas relacionadas ao GitHub sao mostradas):

 PORTNAME=       moneymanagerex
 DISTVERSIONPREFIX=      v
 DISTVERSION=    1.3.0

 USE_GITHUB=     yes
 GH_TUPLE=       utelle:wxsqlite3:v3.4.0:wxsqlite3/lib/wxsqlite3 \
                 moneymanagerex:LuaGlue:c51d11a:lua_glue/3rd/LuaGlue \
                 moneymanagerex:html-template:cd434ee:html_template/3rd/cgitemplate \
                 cesanta:mongoose:2140e59:mongoose/3rd/mongoose \
                 [...]

  5.4.4. USE_GITLAB

   Semelhante ao GitHub, se o arquivo de distribuic,ao vier de gitlab.com ou
   se estiver hospedado com o software GitLab, essas variaveis estao
   disponiveis para uso e talvez precisem ser definidas.

   Tabela 5.6. USE_GITLAB Descric,ao

   +---------------------------------------------------------------------------+
   | Variavel |                 Descric,ao                  |      Padrao      |
   |----------+---------------------------------------------+------------------|
   |GL_SITE   |Nome do site que hospeda o projeto GitLab    |https://gitlab.com|
   |----------+---------------------------------------------+------------------|
   |GL_ACCOUNT|Nome da conta do usuario do GitLab hospedando|${PORTNAME}       |
   |          |o projeto                                    |                  |
   |----------+---------------------------------------------+------------------|
   |GL_PROJECT|Nome do projeto em GitLab                    |${PORTNAME}       |
   |----------+---------------------------------------------+------------------|
   |          |O hash de commit para download. Deve ser o   |                  |
   |GL_COMMIT |hash hex sha1 completo de 160 bits e 40      |(none)            |
   |          |caracteres. Essa e uma variavel obrigatoria  |                  |
   |          |para GitLab.                                 |                  |
   |----------+---------------------------------------------+------------------|
   |          |Quando o software precisa de um arquivo de   |                  |
   |          |distribuic,ao adicional para ser extraido com|                  |
   |GL_SUBDIR |${WRKSRC}, esta variavel pode ser usada. Veja|(none)            |
   |          |os exemplos em Sec,ao 5.4.4.1, "Baixando     |                  |
   |          |Multiplos Arquivos do GitLab" para maiores   |                  |
   |          |informac,oes.                                |                  |
   |----------+---------------------------------------------+------------------|
   |          |GL_TUPLE permite colocar GL_SITE, GL_ACCOUNT,|                  |
   |          |GL_PROJECT, GL_COMMIT, e GL_SUBDIR dentro de |                  |
   |          |uma unica variavel. O formato e              |                  |
   |GL_TUPLE  |site:conta:projeto:commit:grupo/subdiretorio.|                  |
   |          |O site: e /subdiretorio sao opcionais. Isso  |                  |
   |          |ajuda quando e necessario baixar arquivos de |                  |
   |          |mais de um projeto GitLab.                   |                  |
   +---------------------------------------------------------------------------+

   Exemplo 5.18. Uso Simples de USE_GITLAB

   Ao tentar fazer um port para a versao 1.14 do libsignon-glib do usuario
   accounts-sso do gitlab.com, em
   https://gitlab.com/accounts-sso/libsignon-glib, O Makefile acabaria
   ficando assim para buscar os arquivos de distribuic,ao:

 PORTNAME=       libsignon-glib
 DISTVERSION=    1.14

 USE_GITLAB=     yes
 GL_ACCOUNT=     accounts-sso
 GL_COMMIT=      e90302e342bfd27bc8c9132ab9d0ea3d8723fd03

   Ele tera automaticamente MASTER_SITES definido como gitlab.com e WRKSRC
   para
   ${WRKDIR}/libsignon-glib-e90302e342bfd27bc8c9132ab9d0ea3d8723fd03-e90302e342bfd27bc8c9132ab9d0ea3d8723fd03.

   Exemplo 5.19. Uso Mais Completo de USE_GITLAB

   Um uso mais completo do exemplo acima e se o port nao tiver controle de
   versao e foobar do usuario foo no projeto bar em um GitLab auto hospedado
   em https://gitlab.example.com, o Makefile acaba ficando assim para buscar
   os arquivos de distribuic,ao:

 PORTNAME=       foobar
 DISTVERSION=    g20170906

 USE_GITLAB=     yes
 GL_SITE=        https://gitlab.example.com
 GL_ACCOUNT=     foo
 GL_PROJECT=     bar
 GL_COMMIT=      9c1669ce60c3f4f5eb43df874d7314483fb3f8a6

   Tera MASTER_SITES definido como "https://gitlab.example.com" e WRKSRC para
   ${WRKDIR}/bar-9c1669ce60c3f4f5eb43df874d7314483fb3f8a6-9c1669ce60c3f4f5eb43df874d7314483fb3f8a6.

  Dica:

   20170906 e a data do commit referenciada em GL_COMMIT, nao a data em que o
   Makefile e editado, ou a data em que o commit para a arvore de ports do
   FreeBSD e feito.

  Nota:

   O protocolo, porta e webroot do GL_SITE podem ser modificados na mesma
   variavel.

    5.4.4.1. Baixando Multiplos Arquivos do GitLab

   O framework USE_GITLAB tambem suporta a busca de varios arquivos de
   distribuic,ao de diferentes locais de GitLab e sites hospedados no GitLab.
   Ele funciona de uma forma muito semelhante ao Sec,ao 5.4.9, "Multiplos
   Arquivos de Distribuic,ao ou Patches de Varios Locais" e Sec,ao 5.4.4.1,
   "Baixando Multiplos Arquivos do GitLab".

   Varios valores sao adicionados a GL_SITE, GL_ACCOUNT, GL_PROJECT e
   GL_COMMIT. Cada valor diferente e atribuido a um grupo. Tabela 5.6,
   "USE_GITLAB Descric,ao".

   GL_TUPLE tambem pode ser usado quando ha muitos arquivos de distribuic,ao.
   Isso ajuda a manter as informac,oes de site, conta, projeto, commit e
   grupo no mesmo local.

   Para cada grupo, uma variavel auxiliar ${WRKSRC_group} e criada, contendo
   o diretorio no qual o arquivo foi extraido. As variaveis ${WRKSRC_group}
   &#8203;&#8203;podem ser usadas para mover diretorios durante o
   post-extract, ou para serem adicionadas em CONFIGURE_ARGS, ou o que for
   necessario para que o software seja compilado corretamente.

  Cuidado:

   A parte do :group deve ser usada para apenas um arquivo de distribuic,ao.
   Ela e usado como uma chave unica e usa-la mais de uma vez ira sobrescrever
   os valores anteriores.

  Nota:

   Como isso e apenas modificac,oes de DISTFILES e MASTER_SITES, os nomes dos
   grupos devem obedecer `as restric,oes de nomes de grupos descritas em
   Sec,ao 5.4.9, "Multiplos Arquivos de Distribuic,ao ou Patches de Varios
   Locais"

   Ao buscar varios arquivos usando GitLab, `as vezes, o arquivo de
   distribuic,ao padrao nao e obtido de um GitLab. Para desativar a busca do
   arquivo de distribuic,ao padrao, defina:

 USE_GITLAB=     nodefault

  Importante:

   Ao utilizar USE_GITLAB=nodefault, o Makefile deve ter DISTFILES em seu
   bloco inicial. A definic,ao deve ser:

 DISTFILES=    ${DISTNAME}${EXTRACT_SUFX}

   Exemplo 5.20. Uso de USE_GITLAB com Varios Arquivos de Distribuic,ao

   De tempos em tempos, e necessario buscar mais de um arquivo de
   distribuic,ao. Por exemplo, quando o repositorio git do upstream usa
   submodulos. Isso pode ser feito facilmente usando grupos nas variaveis
   GL_*:

 PORTNAME=       foo
 DISTVERSION=    1.0.2

 USE_GITLAB=     yes
 GL_SITE=        https://gitlab.example.com:9434/gitlab:icons
 GL_ACCOUNT=     bar:icons,contrib
 GL_PROJECT=     foo-icons:icons foo-contrib:contrib
 GL_COMMIT=      c189207a55da45305c884fe2b50e086fcad4724b ae7368cab1ca7ca754b38d49da064df87968ffe4:icons 9e4dd76ad9b38f33fdb417a4c01935958d5acd2a:contrib
 GL_SUBDIR=      ext/icons:icons

 CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}

   Isso ira buscar dois arquivos de distribuic,ao do gitlab.com e um de
   gitlab.example.com hospedado com GitLab. O padrao vem de
   https://gitlab.com/foo/foo e o commit e
   c189207a55da45305c884fe2b50e086fcad4724b. O segundo, com o grupo icons,
   vem de https://gitlab.example.com:9434/gitlab/bar/foo-icons e o commit e
   ae7368cab1ca7ca754b38d49da064df87968ffe4. O terceiro vem de
   https://gitlab.com/bar/foo-contrib e o commit e
   9e4dd76ad9b38f33fdb417a4c01935958d5acd2a. Os arquivos de distribuic,ao sao
   nomeados foo-foo-c189207a55da45305c884fe2b50e086fcad4724b_GL0.tar.gz,
   bar-foo-icons-ae7368cab1ca7ca754b38d49da064df87968ffe4_GL0.tar.gz e
   bar-foo-contrib-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a_GL0.tar.gz.

   Todos os arquivos de distribuic,ao sao extraidos no ${WRKDIR} em seus
   respectivos subdiretorios. O arquivo padrao ainda e extraido no ${WRKSRC},
   nesse caso,
   ${WRKDIR}/foo-c189207a55da45305c884fe2b50e086fcad4724b-c189207a55da45305c884fe2b50e086fcad4724b.
   Cada arquivo de distribuic,ao adicional e extraido em ${WRKSRC_group}.
   Aqui, para o grupo icons, e chamado ${WRKSRC_icons} e contem
   ${WRKDIR}/foo-icons-ae7368cab1ca7ca754b38d49da064df87968ffe4-ae7368cab1ca7ca754b38d49da064df87968ffe4.
   O arquivo com o grupo contrib e chamado ${WRKSRC_contrib} e contem
   ${WRKDIR}/foo-contrib-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a.

   O sistema de compilac,ao do software espera encontrar os icones em um
   subdiretorio ext/icons em seus fontes, entao GL_SUBDIR e usado.GL_SUBDIR
   garante que ext existe, mas nao que ext/icons tambem exista. Entao isso
   acontece:

 post-extract:
         @${MV} ${WRKSRC_icons} ${WRKSRC}/ext/icons

   Exemplo 5.21. Uso de USE_GITLAB com Varios Arquivos de Distribuic,ao
   Usando GL_TUPLE

   Isto e funcionalmente equivalente a Exemplo 5.20, "Uso de USE_GITLAB com
   Varios Arquivos de Distribuic,ao" mas usando GL_TUPLE:

 PORTNAME=       foo
 DISTVERSION=    1.0.2

 USE_GITLAB=     yes
 GL_COMMIT=      c189207a55da45305c884fe2b50e086fcad4724b
 GL_TUPLE=       https://gitlab.example.com:9434/gitlab:bar:foo-icons:ae7368cab1ca7ca754b38d49da064df87968ffe4:icons/ext/icons \
                 bar:foo-contrib:9e4dd76ad9b38f33fdb417a4c01935958d5acd2a:contrib

 CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}

   Agrupamento foi usado no exemplo anterior com bar:icons,contrib. Algumas
   informac,oes redundantes estao presentes com GL_TUPLE porque o uso de
   agrupamento nao e possivel.

  5.4.5. EXTRACT_SUFX

   Se houver um arquivo de distribuic,ao e ele usar um sufixo diferente para
   indicar o mecanismo de compactac,ao, defina EXTRACT_SUFX.

   Por exemplo, se o arquivo de distribuic,ao foi nomeado foo.tar.gzip em vez
   do mais comum foo.tar.gz, escreva:

 DISTNAME=       foo
 EXTRACT_SUFX=   .tar.gzip

   O USES=tar[:xxx], USES=lha ou USES=zip define automaticamente EXTRACT_SUFX
   com as extensoes de arquivo mais comuns, conforme necessario, consulte
   Capitulo 17, Usando Macros USES para mais detalhes. Se nenhum destes
   estiver definido, o EXTRACT_SUFX padrao e .tar.gz.

  Nota:

   Como EXTRACT_SUFX e usado apenas em DISTFILES, apenas defina um deles..

  5.4.6. DISTFILES

   As vezes os nomes dos arquivos a serem baixados nao tem semelhanc,a com o
   nome do port. Por exemplo, pode ser chamado source.tar.gz ou similar. Em
   outros casos, o codigo-fonte do aplicativo pode estar em varios arquivos
   diferentes, e todos eles devem ser baixados.

   Se este for o caso, defina DISTFILES para ser uma lista separada por
   espac,os de todos os arquivos que devem ser baixados.

 DISTFILES=      source1.tar.gz source2.tar.gz

   Se nao for definido explicitamente, o DISTFILES padrao e
   ${DISTNAME}${EXTRACT_SUFX}.

  5.4.7. EXTRACT_ONLY

   Se apenas alguns dos DISTFILES devem ser extraidos- por exemplo, um deles
   e o codigo-fonte, enquanto outro e um documento nao compactado - liste os
   nomes dos arquivos que devem ser extraidos em EXTRACT_ONLY.

 DISTFILES=      source.tar.gz manual.html
 EXTRACT_ONLY=   source.tar.gz

   Quando nenhum dos DISTFILES precisam ser descompactados, deixe vazio o
   EXTRACT_ONLY.

 EXTRACT_ONLY=

  5.4.8. PATCHFILES

   Se o port requer alguns patches adicionais que estao disponiveis por FTP
   ou HTTP, defina PATCHFILES para os nomes dos arquivos e PATCH_SITES para a
   URL do diretorio que os contem (o formato e o mesmo do MASTER_SITES).

   Se o patch nao for relativo ao inicio da arvore do codigo fonte (isto e,
   WRKSRC) porque contem alguns pathnames extras, defina PATCH_DIST_STRIP
   adequadamente. Por exemplo, se todos os pathnames no patch tiverem um
   foozolix-1.0 / extra na frente dos nomes dos arquivos, entao defina
   PATCH_DIST_STRIP=-p1.

   Nao se preocupe se os patches estiverem compactados; eles serao
   descompactados automaticamente se os nomes dos arquivos terminarem com .Z,
   .gz, .bz2 ou .xz.

   Se o patch for distribuido com alguns outros arquivos, como documentac,ao,
   em um arquivo compactado, o uso de PATCHFILES nao sera possivel. Se for
   esse o caso, adicione o nome e a localizac,ao do arquivo do patch em
   DISTFILES e MASTER_SITES. Entao, use EXTRA_PATCHES para apontar para esses
   arquivos e o bsd.port.mk ira aplica-los automaticamente. Em particular,
   nao copie os arquivos de patch em ${PATCHDIR}. Esse diretorio pode nao ter
   permissao de escrita.

  Dica:

   Se houver varios patches e eles precisarem de valores mistos para o
   parametro strip, ele podera ser adicionado ao lado do nome do patch em
   PATCHFILES, por exemplo:

 PATCHFILES=     patch1 patch2:-p1

   Isto nao entra em conflito com o recurso de agrupamento de sites
   principais, adicionando um grupo tambem funciona:

 PATCHFILES=     patch2:-p1:source2

  Nota:

   O arquivo sera extraido junto com o arquivo de codigo fonte, entao nao ha
   necessidade de explicitamente extrai-lo se ele for um arquivo compactado
   normal. Tome cuidado extra para nao sobrescrever algo que ja existe nesse
   diretorio caso fac,a a extrac,ao manualmente. Tambem nao se esquec,a de
   adicionar um comando para remover o patch copiado no target pre-clean.

  5.4.9. Multiplos Arquivos de Distribuic,ao ou Patches de Varios Locais

   (Considere isto como um "topico avanc,ado"; a principio, aqueles que sao
   novos neste documento podem desejar pular esta sec,ao).

   Esta sec,ao contem informac,oes sobre o mecanismo de busca conhecido como
   MASTER_SITES:n e MASTER_SITES_NN. Vamos nos referir a este mecanismo como
   MASTER_SITES:n.

   Um pouco de background primeiro. O OpenBSD tem um otimo recurso dentro do
   DISTFILES e PATCHFILES que permite que arquivos e pacthes sejam pos
   fixados com identificadores :n. Aqui, n pode ser qualquer palavra que
   contenha [0-9a-zA-Z_] e signifique uma designac,ao de grupo. Por exemplo:

 DISTFILES=      alpha:0 beta:1

   No OpenBSD, arquivo de distribuic,ao alpha sera associado com a variavel
   MASTER_SITES0 em vez da nossa comum MASTER_SITES e beta com MASTER_SITES1.

   Esta e uma caracteristica muito interessante que pode diminuir a busca sem
   fim pelo site de download correto.

   Apenas imagine 2 arquivos em DISTFILES e 20 sites em MASTER_SITES, os
   sites sao extremamente lentos e beta e hospedado em todas as entradas do
   MASTER_SITES e alfa so pode ser encontrado no 20-o site. Seria um
   desperdicio checar todos eles se o mantenedor soubesse isso de antemao,
   nao seria? Nao e um bom comec,o para aquele lindo fim de semana!

   Agora que voce ja tem uma ideia, imagine mais DISTFILES e mais
   MASTER_SITES. Certamente nosso "distfiles survey meister" ira ser
   apreciado pelo alivio nas conexoes de rede que isso trara.

   Nas proximas sec,oes, as informac,oes seguirao a implementac,ao do FreeBSD
   desta ideia. Nos melhoramos um pouco o conceito do OpenBSD.

  Importante:

   Os nomes dos grupos nao podem ter trac,os neles (-), na verdade, eles nao
   podem ter nenhum caractere fora do range [a-zA-Z0-9_]. Isso porque,
   enquanto make(1) esta ok com nomes de variaveis &#8203;&#8203;contendo
   trac,os, sh(1)nao.

    5.4.9.1. Informac,ao Simplificada

   Esta sec,ao explica como preparar rapidamente a busca de varios arquivos
   de distribuic,ao e patches de diferentes sites e subdiretorios.
   Descrevemos aqui um caso de uso de MASTER_SITES:n. Isso sera suficiente
   para a maioria dos cenarios. Informac,oes mais detalhadas estao
   disponiveis em Sec,ao 5.4.9.2, "Informac,ao Detalhada".

   Alguns aplicativos consistem em varios arquivos de distribuic,ao que devem
   ser baixados de varios sites diferentes. Por exemplo, Ghostscript consiste
   no nucleo do programa e, em seguida, um grande numero de arquivos de
   driver que sao usados dependendo da impressora do usuario. Alguns desses
   arquivos de driver sao fornecidos com o nucleo, mas muitos outros devem
   ser baixados de uma variedade de sites diferentes.

   Para suportar isso, cada entrada no DISTFILES pode ser seguida por dois
   pontos e um "nome de grupo". Cada site listado em MASTER_SITES e entao
   seguido por dois pontos, e o grupo que indica quais arquivos de
   distribuic,ao sao baixados deste site.

   Por exemplo, considere um aplicativo com a divisao do codigo fonte em duas
   partes, source1.tar.gz e source2.tar.gz, que deve ser baixado de dois
   sites diferentes. O Makefile do port incluiria linhas como Exemplo 5.22,
   "Uso Simplificado de MASTER_SITES:n com Um Arquivo Por Site".

   Exemplo 5.22. Uso Simplificado de MASTER_SITES:n com Um Arquivo Por Site

 MASTER_SITES=   ftp://ftp1.example.com/:source1 \
                 http://www.example.com/:source2
 DISTFILES=      source1.tar.gz:source1 \
                 source2.tar.gz:source2

   Varios arquivos de distribuic,ao podem ter o mesmo grupo. Continuando o
   exemplo anterior, suponha que houvesse um terceiro distfile,
   source3.tar.gz, que e baixado do ftp.example2.com. O Makefile seria entao
   escrito como Exemplo 5.23, "Uso Simplificado de MASTER_SITES:n com Mais de
   Um Arquivo Por Site".

   Exemplo 5.23. Uso Simplificado de MASTER_SITES:n com Mais de Um Arquivo
   Por Site

 MASTER_SITES=   ftp://ftp.example.com/:source1 \
                 http://www.example.com/:source2
 DISTFILES=      source1.tar.gz:source1 \
                 source2.tar.gz:source2 \
                 source3.tar.gz:source2

    5.4.9.2. Informac,ao Detalhada

   Ok, entao o exemplo anterior nao refletiu as necessidades do novo port?
   Nesta sec,ao vamos explicar em detalhes como o mecanismo de busca
   avanc,ado MASTER_SITES:n funciona e como ele pode ser usado.

    1. Elementos podem ser pos-fixados com :n onde n e [^:,]+, isso e, n
       poderia conceitualmente ser qualquer string alfanumerica, mas vamos
       limita-lo a [a-zA-Z_][0-9a-zA-Z_]+ por enquanto.

       Alem disso, a verificac,ao de strings e case sensitive, ou seja, n e
       diferente de N.

       No entanto, essas palavras nao podem ser usadas para finalidades de
       pos-fixac,ao, pois elas produzem um significado especial: default, all
       e ALL (estes sao usados &#8203;&#8203;internamente no item ii). Alem
       disso, DEFAULT e uma palavra de proposito especial (verifique o item
       3).

    2. Elementos pos-fixados com :n pertence ao grupo n, :m pertence ao grupo
       m e assim por diante.

    3. Elementos que nao estao pos-fixados sao desagrupados, todos eles
       pertencem ao grupo especial DEFAULT. Quaisquer elementos pos-fixados
       com DEFAULT estao apenas sendo redundantes, a menos que um elemento
       pertenc,a a ambos DEFAULT e outros grupos ao mesmo tempo (verifique o
       item 5).

       Esses exemplos sao equivalentes, mas o primeiro e o preferido:

 MASTER_SITES=   alpha

 MASTER_SITES=   alpha:DEFAULT

    4. Grupos nao sao exclusivos, um elemento pode pertencer a varios grupos
       diferentes ao mesmo tempo e um grupo pode ter varios elementos
       diferentes ou nenhum.

    5. Quando um elemento pertence a varios grupos ao mesmo tempo, use uma
       virgula (, ).

       Em vez de repetir isso varias vezes, cada vez com uma pos-fixac,ao
       diferente, podemos listar varios grupos de uma vez em uma unica
       pos-fixac,ao. Por exemplo, :m,n,o marca um elemento que pertence ao
       grupo m, n e o.

       Todos esses exemplos sao equivalentes, mas o ultimo e o preferido:

 MASTER_SITES=   alpha alpha:SOME_SITE

 MASTER_SITES=   alpha:DEFAULT alpha:SOME_SITE

 MASTER_SITES=   alpha:SOME_SITE,DEFAULT

 MASTER_SITES=   alpha:DEFAULT,SOME_SITE

    6. Todos os sites dentro de um determinado grupo sao ordernados de acordo
       com MASTER_SORT_AWK. Todos os grupos dentro de MASTER_SITES e
       PATCH_SITES sao ordenados tambem.

    7. A semantica de grupo pode ser usada em qualquer uma das variaveis
       MASTER_SITES, PATCH_SITES, MASTER_SITE_SUBDIR, PATCH_SITE_SUBDIR,
       DISTFILES e PATCHFILES de acordo com esta sintaxe:

         a. Todos elementos MASTER_SITES, PATCH_SITES, MASTER_SITE_SUBDIR e
            PATCH_SITE_SUBDIR devem ser terminados com o caractere barra /.
            Se algum elemento pertencer a algum grupo, o grupo de
            pos-fixac,ao :n deve vir logo apos o terminador /. O mecanismo
            MASTER_SITES:n depende da existencia do terminador / para evitar
            confundir elementos onde um :n e uma parte valida do elemento com
            ocorrencias em que :n denota grupo n. Para fins de
            compatibilidade, uma vez que o terminador / nao for necessario
            antes em ambos elementos MASTER_SITE_SUBDIR e PATCH_SITE_SUBDIR,
            se o caractere precedente imediato da pos-fixac,ao nao for /
            entao :n sera considerada uma parte valida do elemento em vez de
            uma pos-fixac,ao de grupo, mesmo que um elemento n seja
            pos-fixado. Veja ambos Exemplo 5.24, "Uso Detalhado de
            MASTER_SITES:n no MASTER_SITE_SUBDIR" e Exemplo 5.25, "Uso
            Detalhado de MASTER_SITES:n com Virgula, Varios Arquivos, Varios
            Sites e Varios Subdiretorios".

            Exemplo 5.24. Uso Detalhado de MASTER_SITES:n no
            MASTER_SITE_SUBDIR

 MASTER_SITE_SUBDIR=     old:n new/:NEW

               * Diretorios dentro do grupo DEFAULT -> old:n

               * Diretorios dentro do grupo NEW -> new

            Exemplo 5.25. Uso Detalhado de MASTER_SITES:n com Virgula, Varios
            Arquivos, Varios Sites e Varios Subdiretorios

 MASTER_SITES=   http://site1/%SUBDIR%/http://site2/:DEFAULT \
                 http://site3/:group3 http://site4/:group4 \
                 http://site5/:group5 http://site6/:group6 \
                 http://site7/:DEFAULT,group6 \
                 http://site8/%SUBDIR%/:group6,group7 \
                 http://site9/:group8
 DISTFILES=      file1 file2:DEFAULT file3:group3 \
                 file4:group4,group5,group6 file5:grouping \
                 file6:group7
 MASTER_SITE_SUBDIR=     directory-trial:1 directory-n/:groupn \
                 directory-one/:group6,DEFAULT \
                 directory

            O exemplo anterior resulta em uma busca detalhada. Os sites sao
            listados na ordem exata em que serao usados.

               * arquivo1 sera obtido a partir de

                    * MASTER_SITE_OVERRIDE

                    * http://site1/directory-trial:1/

                    * http://site1/directory-one/

                    * http://site1/directory/

                    * http://site2/

                    * http://site7/

                    * MASTER_SITE_BACKUP

               * arquivo2 sera baixado exatamente como o arquivo1 ja que
                 ambos pertencem ao mesmo grupo

                    * MASTER_SITE_OVERRIDE

                    * http://site1/directory-trial:1/

                    * http://site1/directory-one/

                    * http://site1/directory/

                    * http://site2/

                    * http://site7/

                    * MASTER_SITE_BACKUP

               * arquivo3 sera obtido a partir de

                    * MASTER_SITE_OVERRIDE

                    * http://site3/

                    * MASTER_SITE_BACKUP

               * arquivo4 sera obtido a partir de

                    * MASTER_SITE_OVERRIDE

                    * http://site4/

                    * http://site5/

                    * http://site6/

                    * http://site7/

                    * http://site8/directory-one/

                    * MASTER_SITE_BACKUP

               * arquivo5 sera obtido a partir de

                    * MASTER_SITE_OVERRIDE

                    * MASTER_SITE_BACKUP

               * file6 sera obtido a partir de

                    * MASTER_SITE_OVERRIDE

                    * http://site8/

                    * MASTER_SITE_BACKUP

    8. Como posso agrupar uma das macros especiais de bsd.sites.mk, por
       exemplo, SourceForge (SF)?

       Isso foi simplificado o maximo possivel. Veja Exemplo 5.26, "Uso
       Detalhado de MASTER_SITES:n com SourceForge (SF)".

       Exemplo 5.26. Uso Detalhado de MASTER_SITES:n com SourceForge (SF)

 MASTER_SITES=   http://site1/SF/something/1.0:sourceforge,TEST
 DISTFILES=      something.tar.gz:sourceforge

       something.tar.gz sera obtido por todos os sites do SourceForge.

    9. Como eu uso isso com PATCH*?

       Todos os exemplos foram feitos com MASTER* mas eles funcionam
       exatamente da mesma forma com PATCH* como pode ser visto em
       Exemplo 5.27, "Uso Simplificado de MASTER_SITES:n com PATCH_SITES".

       Exemplo 5.27. Uso Simplificado de MASTER_SITES:n com PATCH_SITES

 PATCH_SITES=    http://site1/ http://site2/:test
 PATCHFILES=     patch1:test

    5.4.9.3. O que Muda para os Ports? O que Nao Funciona?

   i. Todos os ports atuais permanecem os mesmos. A feature MASTER_SITES:n so
      e ativada se houver elementos pos-fixados com :n como elementos de
      acordo com as regras de sintaxe acima, especialmente como mostrado no
      item 7.

   ii. Os targets de port permanecem os mesmos: checksum, makesum, patch,
       configure, build, etc. Com as excec,oes obvias de do-fetch,
       fetch-list, master-sites e patch-sites.

          * do-fetch: implementa o novo agrupamento pos-fixado DISTFILES e
            PATCHFILES com seus elementos de grupo correspondentes dentro de
            ambos MASTER_SITES e PATCH_SITES que usam elementos de grupo
            correspondentes dentro de ambos MASTER_SITE_SUBDIR e
            PATCH_SITE_SUBDIR. Verifique Exemplo 5.25, "Uso Detalhado de
            MASTER_SITES:n com Virgula, Varios Arquivos, Varios Sites e
            Varios Subdiretorios".

          * fetch-list: funciona como o antigo fetch-list, com a excec,ao de
            que faz agrupamentos exatamente como o do-fetch.

          * master-sites e patch-sites: (incompativel com versoes mais
            antigas) somente retorna os elementos do grupo DEFAULT; na
            verdade, eles executam os targets master-sites-default e
            patch-sites-default respectivamente.

            Alem disso, usar o target master-sites-all ou patch-sites-all e o
            preferido para verificar diretamente MASTER_SITES ou PATCH_SITES.
            Alem disso, nao e garantido que a checagem direta funcione em
            versoes futuras. Veja B para obter mais informac,oes sobre esses
            novos tagets de port.

   iii. Novos Targets de Port

          A. Existem targets master-sites-n e patch-sites-n que listarao os
             elementos do respectivo grupo n dentro de MASTER_SITES e
             PATCH_SITES respectivamente. Por exemplo, ambos
             master-sites-DEFAULT e patch-sites-DEFAULT retornarao os
             elementos do grupo DEFAULT, master-sites-test e patch-sites-test
             do grupo test.

          B. Ha novos targets master-sites-all e patch-sites-all que fazem o
             trabalho dos antigos master-sites e patch-sites. Eles retornam
             os elementos de todos os grupos como se todos pertencessem ao
             mesmo grupo, com a ressalva de que lista tantos
             MASTER_SITE_BACKUP e MASTER_SITE_OVERRIDE como existem grupos
             definidos dentro de qualquer DISTFILES ou PATCHFILES;
             respectivamente para master-sites-all e patch-sites-all.

  5.4.10. DIST_SUBDIR

   Nao deixe o /usr/ports/distfiles bagunc,ado. Se um port exigir que muitos
   arquivos sejam baixados, ou que contenha um arquivo que tenha um nome que
   possa entrar em conflito com outros ports (por exemplo, Makefile), defina
   DIST_SUBDIR com o nome do port (${PORTNAME} ou
   ${PKGNAMEPREFIX}${PORTNAME}). Isso vai mudar o DISTDIR do padrao
   /usr/ports/distfiles para /usr/ports/distfiles/${DIST_SUBDIR},e assim,
   sera colocado tudo o que e necessario para o port nesse subdiretorio.

   Ele tambem examinara o subdiretorio com o mesmo nome no site principal de
   backup em http://distcache.FreeBSD.org (Configurar o DISTDIR
   explicitamente no Makefile nao fara isso funcionar, entao por favor use
   DIST_SUBDIR.)

  Nota:

   Isso nao afeta o MASTER_SITES definido no Makefile.

5.5. MAINTAINER

   Defina seu enderec,o de email aqui. Por favor. :-)

   Apenas um unico enderec,o sem a parte de comentario e permitido como um
   valor para MAINTAINER. O formato usado e user@hostname.domain. Por favor,
   nao inclua nenhum texto descritivo, como um nome nesta entrada. Isso
   confunde a infraestrutura do Ports e a maioria das ferramentas que a usam.

   O mantenedor e responsavel por manter o port atualizado e garantir que elo
   funcione corretamente. Para obter uma descric,ao detalhada das
   responsabilidades de um mantenedor de port, consulte O desafio para os
   mantenedores de port.

  Nota:

   Um mantenedor se voluntaria para manter um port em bom estado de
   funcionamento. Os mantenedores tem a responsabilidade primaria por seus
   ports, mas nao possuem propriedade exclusiva. Os ports existem para o
   beneficio da comunidade e, na realidade, pertencem `a comunidade. O que
   isso significa e que outras pessoas alem do mantenedor, tambem podem fazer
   alterac,oes em um port. Grandes mudanc,as na Colec,ao de Ports podem
   exigir mudanc,as em muitos ports. A Equipe de Gerenciamento do Ports do
   FreeBSD ou membros de outras equipes podem modificar ports para corrigir
   problemas de dependencia ou outros problemas, como um bump de versao para
   uma atualizac,ao de biblioteca compartilhada.

   Alguns tipos de correc,oes tem "aprovac,ao implicita" da Equipe de
   Gerenciamento do Ports <portmgr@FreeBSD.org>, permitindo que qualquer
   committer conserte essas categorias de problemas em qualquer port. Essas
   correc,oes nao precisam da aprovac,ao do mantenedor.

   Aprovac,ao implicita para a maioria dos ports se aplicam para correc,oes
   como mudanc,as de infraestrutura, trivialidades e correc,oes testadas de
   compilac,ao e execuc,ao. A lista atual esta disponibilizada em Sec,ao
   Ports do Guia dos Committers.

   Outras alterac,oes no port serao enviadas ao mantenedor para revisao e
   aprovac,ao antes de se fazer o commit. Se o mantenedor nao responder a uma
   solicitac,ao de atualizac,ao apos duas semanas (excluindo os principais
   feriados), isso sera considerado como timeout do mantenedor, e a
   atualizac,ao podera ser feita sem a aprovac,ao explicita do mesmo. Se o
   mantenedor nao responder dentro de tres meses, ou se houver tres timeouts
   consecutivos, entao o mantenedor e considerado ausente, e todas os seus
   ports podem ser atribuidos de volta para `a comunidade. Excec,oes para
   isso sao quaisquer ports mantidos pela Equipe de Gerenciamento de Ports
   <portmgr@FreeBSD.org> ou pela Equipe de Oficias de Seguranc,a
   <security-officer@FreeBSD.org>. Nenhum commit nao autorizado pode ser
   feito em ports mantidos por esses grupos.

   Reservamo-nos o direito de modificar as submissoes do mantenedor para
   melhor adequar as politicas e os estilos existentes da Colec,ao de Ports
   sem aprovac,ao explicita do remetente ou do mantenedor. Alem disso,
   grandes alterac,oes de infraestrutura podem resultar na modificac,ao de um
   port sem o consentimento do mantenedor. Estes tipos de alterac,oes nunca
   irao afetar a funcionalidade do port.

   A Equipe de Gerenciamento de Ports <portmgr@FreeBSD.org> reserva o direito
   de revogar ou substituir a propriedade de mantenedor de qualquer pessoa
   por qualquer motivo, e a Equipe de Oficiais de Seguranc,a
   <security-officer@FreeBSD.org> reserva o direito de revogar ou substituir
   a propriedade de mantenedor por razoes de seguranc,a.

5.6. COMMENT

   O comentario e uma descric,ao de uma linha de um port mostrada por pkg
   info. Por favor, siga estas regras ao compor:

    1. A string COMMENT deve ter 70 caracteres ou menos.

    2. Nao inclua o nome do pacote ou o numero da versao do software.

    3. O comentario deve comec,ar com uma letra maiuscula e terminar sem um
       ponto final.

    4. Nao comece com um artigo indefinido (isto e, A ou Um).

    5. Capitalize nomes como Apache, JavaScript ou Perl.

    6. Use uma virgula serial para listas de palavras: "verde, vermelho, e
       azul."

    7. Verifique erros de ortografia.

   Aqui esta um exemplo:

 COMMENT=        Cat chasing a mouse all over the screen

   A variavel COMMENT vem depois da variavel MAINTAINER no Makefile.

5.7. Licenc,as

   Cada port deve documentar a licenc,a sob a qual esta disponivel. Se nao
   for uma licenc,a aprovada pelo OSI, tambem deve documentar quaisquer
   restric,oes `a redistribuic,ao.

  5.7.1. LICENSE

   Um nome abreviado para a licenc,a ou licenc,as se mais de uma licenc,a for
   aplicada.

   Se for uma das licenc,as listadas no Tabela 5.7, "Lista de Licenc,as
   Predefinidas", apenas as variaveis LICENSE_FILE e LICENSE_DISTFILES podem
   ser definidas.

   Se esta for uma licenc,a que nao tenha sido definida na infraestrutura de
   ports (veja Tabela 5.7, "Lista de Licenc,as Predefinidas"), LICENSE_PERMS
   e LICENSE_NAME devem ser definidos, juntamente com LICENSE_FILE ou
   LICENSE_TEXT. LICENSE_DISTFILES e LICENSE_GROUPS tambem podem ser
   definidos, mas nao e necessario.

   As licenc,as pre-definidas sao mostradas em Tabela 5.7, "Lista de
   Licenc,as Predefinidas". A lista atual esta sempre disponivel em
   Mk/bsd.licenses.db.mk.

   Exemplo 5.28. Uso Mais Simples, Licenc,as Predefinidas

   Quando o README de algum software diz "This software is under the terms of
   the GNU Lesser General Public License as published by the Free Software
   Foundation; either version 2.1 of the License, or (at your option) any
   later version." mas nao fornece o arquivo de licenc,a, use isto:

 LICENSE=        LGPL21+

   Quando o software fornece o arquivo de licenc,a, use isto:

 LICENSE=        LGPL21+
 LICENSE_FILE=   ${WRKSRC}/COPYING

   Para as licenc,as predefinidas, as permissoes padrao sao dist-mirror
   dist-sell pkg-mirror pkg-sell auto-accept.

   Tabela 5.7. Lista de Licenc,as Predefinidas

     Nome Curto                    Nome                   Grupo   Permissoes  
   AGPLv3          GNU Affero General Public License     FSF GPL  (padrao)    
                   version 3                             OSI      
   AGPLv3+         GNU Affero General Public License     FSF GPL  (padrao)    
                   version 3 (ou maior)                  OSI      
   APACHE10        Apache License 1.0                    FSF      (padrao)    
   APACHE11        Apache License 1.1                    FSF OSI  (padrao)    
   APACHE20        Apache License 2.0                    FSF OSI  (padrao)    
   ART10           Artistic License version 1.0          OSI      (padrao)    
   ART20           Artistic License version 2.0          FSF GPL  (padrao)    
                                                         OSI      
   ARTPERL10       Artistic License (perl) version 1.0   OSI      (padrao)    
   BSD             BSD license Generic Version           FSF OSI  (padrao)    
                   (deprecated)                          COPYFREE 
   BSD2CLAUSE      BSD 2-clause "Simplified" License     FSF OSI  (padrao)    
                                                         COPYFREE 
   BSD3CLAUSE      BSD 3-clause "New" or "Revised"       FSF OSI  (padrao)    
                   License                               COPYFREE 
   BSD4CLAUSE      BSD 4-clause "Original" or "Old"      FSF      (padrao)    
                   License                               
   BSL             Boost Software License                FSF OSI  (padrao)    
                                                         COPYFREE 
   CC-BY-1.0       Creative Commons Attribution 1.0               (padrao)    
   CC-BY-2.0       Creative Commons Attribution 2.0               (padrao)    
   CC-BY-2.5       Creative Commons Attribution 2.5               (padrao)    
   CC-BY-3.0       Creative Commons Attribution 3.0               (padrao)    
   CC-BY-4.0       Creative Commons Attribution 4.0               (padrao)    
                   Creative Commons Attribution Non               dist-mirror 
   CC-BY-NC-1.0    Commercial 1.0                                 pkg-mirror  
                                                                  auto-accept 
                   Creative Commons Attribution Non               dist-mirror 
   CC-BY-NC-2.0    Commercial 2.0                                 pkg-mirror  
                                                                  auto-accept 
                   Creative Commons Attribution Non               dist-mirror 
   CC-BY-NC-2.5    Commercial 2.5                                 pkg-mirror  
                                                                  auto-accept 
                   Creative Commons Attribution Non               dist-mirror 
   CC-BY-NC-3.0    Commercial 3.0                                 pkg-mirror  
                                                                  auto-accept 
                   Creative Commons Attribution Non               dist-mirror 
   CC-BY-NC-4.0    Commercial 4.0                                 pkg-mirror  
                                                                  auto-accept 
                   Creative Commons Attribution Non               dist-mirror 
   CC-BY-NC-ND-1.0 Commercial No Derivatives 1.0                  pkg-mirror  
                                                                  auto-accept 
                   Creative Commons Attribution Non               dist-mirror 
   CC-BY-NC-ND-2.0 Commercial No Derivatives 2.0                  pkg-mirror  
                                                                  auto-accept 
                   Creative Commons Attribution Non               dist-mirror 
   CC-BY-NC-ND-2.5 Commercial No Derivatives 2.5                  pkg-mirror  
                                                                  auto-accept 
                   Creative Commons Attribution Non               dist-mirror 
   CC-BY-NC-ND-3.0 Commercial No Derivatives 3.0                  pkg-mirror  
                                                                  auto-accept 
                   Creative Commons Attribution Non               dist-mirror 
   CC-BY-NC-ND-4.0 Commercial No Derivatives 4.0                  pkg-mirror  
                                                                  auto-accept 
                   Creative Commons Attribution Non               dist-mirror 
   CC-BY-NC-SA-1.0 Commercial Share Alike 1.0                     pkg-mirror  
                                                                  auto-accept 
                   Creative Commons Attribution Non               dist-mirror 
   CC-BY-NC-SA-2.0 Commercial Share Alike 2.0                     pkg-mirror  
                                                                  auto-accept 
                   Creative Commons Attribution Non               dist-mirror 
   CC-BY-NC-SA-2.5 Commercial Share Alike 2.5                     pkg-mirror  
                                                                  auto-accept 
                   Creative Commons Attribution Non               dist-mirror 
   CC-BY-NC-SA-3.0 Commercial Share Alike 3.0                     pkg-mirror  
                                                                  auto-accept 
                   Creative Commons Attribution Non               dist-mirror 
   CC-BY-NC-SA-4.0 Commercial Share Alike 4.0                     pkg-mirror  
                                                                  auto-accept 
   CC-BY-ND-1.0    Creative Commons Attribution No                (padrao)    
                   Derivatives 1.0                       
   CC-BY-ND-2.0    Creative Commons Attribution No                (padrao)    
                   Derivatives 2.0                       
   CC-BY-ND-2.5    Creative Commons Attribution No                (padrao)    
                   Derivatives 2.5                       
   CC-BY-ND-3.0    Creative Commons Attribution No                (padrao)    
                   Derivatives 3.0                       
   CC-BY-ND-4.0    Creative Commons Attribution No                (padrao)    
                   Derivatives 4.0                       
   CC-BY-SA-1.0    Creative Commons Attribution Share             (padrao)    
                   Alike 1.0                             
   CC-BY-SA-2.0    Creative Commons Attribution                   (padrao)    
                   Compartilhar Alike 2.0                
   CC-BY-SA-2.5    Creative Commons Attribution Share             (padrao)    
                   Alike 2.5                             
   CC-BY-SA-3.0    Creative Commons Attribution Share             (padrao)    
                   Alike 3.0                             
   CC-BY-SA-4.0    Creative Commons Attribution Share             (padrao)    
                   Alike 4.0                             
   CC0-1.0         Creative Commons Zero v1.0 Universal  FSF GPL  (padrao)    
                                                         COPYFREE 
   CDDL            Common Development and Distribution   FSF OSI  (padrao)    
                   License                               
   CPAL-1.0        Common Public Attribution License     FSF OSI  (padrao)    
   ClArtistic      Clarified Artistic License            FSF GPL  (padrao)    
                                                         OSI      
   EPL             Eclipse Public License                FSF OSI  (padrao)    
   GFDL            GNU Free Documentation License        FSF      (padrao)    
   GMGPL           GNAT Modified General Public License  FSF GPL  (padrao)    
                                                         OSI      
   GPLv1           GNU General Public License version 1  FSF GPL  (padrao)    
                                                         OSI      
   GPLv1+          GNU General Public License version 1  FSF GPL  (padrao)    
                   (or later)                            OSI      
   GPLv2           GNU General Public License version 2  FSF GPL  (padrao)    
                                                         OSI      
   GPLv2+          GNU General Public License version 2  FSF GPL  (padrao)    
                   (or later)                            OSI      
   GPLv3           GNU General Public License version 3  FSF GPL  (padrao)    
                                                         OSI      
   GPLv3+          GNU General Public License version 3  FSF GPL  (padrao)    
                   (or later)                            OSI      
   GPLv3RLE        GNU GPL version 3 Runtime Library     FSF GPL  (padrao)    
                   Exception                             OSI      
   GPLv3RLE+       GNU GPL version 3 Runtime Library     FSF GPL  (padrao)    
                   Exception (or later)                  OSI      
                                                         FSF GPL              
   ISCL            Internet Systems Consortium License   OSI      (padrao)
                                                         COPYFREE 
   LGPL20          GNU Library General Public License    FSF GPL  (padrao)    
                   version 2.0                           OSI      
   LGPL20+         GNU Library General Public License    FSF GPL  (padrao)    
                   version 2.0 (or later)                OSI      
   LGPL21          GNU Lesser General Public License     FSF GPL  (padrao)    
                   version 2.1                           OSI      
   LGPL21+         GNU Lesser General Public License     FSF GPL  (padrao)    
                   version 2.1 (or later)                OSI      
   LGPL3           GNU Lesser General Public License     FSF GPL  (padrao)    
                   version 3                             OSI      
   LGPL3+          GNU Lesser General Public License     FSF GPL  (padrao)    
                   version 3 (or later)                  OSI      
   LPPL10          LaTeX Project Public License version  FSF OSI  dist-mirror 
                   1.0                                            dist-sell   
   LPPL11          LaTeX Project Public License version  FSF OSI  dist-mirror 
                   1.1                                            dist-sell   
   LPPL12          LaTeX Project Public License version  FSF OSI  dist-mirror 
                   1.2                                            dist-sell   
   LPPL13          LaTeX Project Public License version  FSF OSI  dist-mirror 
                   1.3                                            dist-sell   
   LPPL13a         LaTeX Project Public License version  FSF OSI  dist-mirror 
                   1.3a                                           dist-sell   
   LPPL13b         LaTeX Project Public License version  FSF OSI  dist-mirror 
                   1.3b                                           dist-sell   
   LPPL13c         LaTeX Project Public License version  FSF OSI  dist-mirror 
                   1.3c                                           dist-sell   
                                                         COPYFREE             
   MIT             MIT license / X11 license             FSF GPL  (padrao)
                                                         OSI      
   MPL10           Mozilla Public License version 1.0    FSF OSI  (padrao)    
   MPL11           Mozilla Public License version 1.1    FSF OSI  (padrao)    
   MPL20           Mozilla Public License version 2.0    FSF OSI  (padrao)    
                   University of Illinois/NCSA Open      COPYFREE             
   NCSA            Source License                        FSF GPL  (padrao)
                                                         OSI      
   NONE            No license specified                           none        
   OFL10           SIL Open Font License version 1.0     FONTS    (padrao)    
                   (http://scripts.sil.org/OFL)          
   OFL11           SIL Open Font License version 1.1     FONTS    (padrao)    
                   (http://scripts.sil.org/OFL)          
   OWL             Open Works License (owl.apotheon.org) COPYFREE (padrao)    
   OpenSSL         Licenc,a OpenSSL                      FSF      (padrao)    
   PD              Public Domain                         GPL      (padrao)    
                                                         COPYFREE 
   PHP202          PHP License version 2.02              FSF OSI  (padrao)    
   PHP30           PHP License version 3.0               FSF OSI  (padrao)    
   PHP301          PHP License versao 3.01               FSF OSI  (padrao)    
   PSFL            Python Software Foundation License    FSF GPL  (padrao)    
                                                         OSI      
                                                         FSF GPL              
   PostgreSQL      PostgreSQL License                    OSI      (padrao)
                                                         COPYFREE 
   RUBY            Ruby License                          FSF      (padrao)    
   UNLICENSE       The Unlicense                         COPYFREE (padrao)    
                                                         FSF GPL  
   WTFPL           Do What the Fuck You Want To Public   GPL FSF  (padrao)    
                   License version 2                     COPYFREE 
   WTFPL1          Do What the Fuck You Want To Public   GPL FSF  (padrao)    
                   License version 1                     COPYFREE 
   ZLIB            zlib License                          GPL FSF  (padrao)    
                                                         OSI      
   ZPL21           Zope Public License version 2.1       GPL OSI  (padrao)    

  5.7.2. LICENSE_PERMS e LICENSE_PERMS_NAME

   Permissoes. Use none se vazio.

   Lista de Permissoes de Licenc,a

   dist-mirror

           A redistribuic,ao dos arquivos de distribuic,ao e permitida. Os
           arquivos de distribuic,ao serao adicionados ao FreeBSD CDN
           MASTER_SITE_BACKUP.

   no-dist-mirror

           A redistribuic,ao dos arquivos de distribuic,ao e proibida. Isso e
           equivalente a RESTRICT. Os arquivos de distribuic,ao nao serao
           adicionados ao FreeBSD CDN MASTER_SITE_BACKUP.

   dist-sell

           A venda de arquivos de distribuic,ao e permitida. Os arquivos de
           distribuic,ao estarao presentes nas imagens do instalador.

   no-dist-sell

           A venda de arquivos de distribuic,ao e proibida. Isso e
           equivalente a NO_CDROM.

   pkg-mirror

           E permitida a redistribuic,ao gratuita do pacote. O pacote sera
           distribuido na CDN de pacotes do FreeBSD https://pkg.freebsd.org/.

   no-pkg-mirror

           E proibida a redistribuic,ao gratuita do pacote. Equivalente `a
           definir NO_PACKAGE. O pacote nao sera distribuido a partir da CDN
           de pacotes do FreeBSD https://pkg.freebsd.org/.

   pkg-sell

           A venda do pacote e permitida. O pacote estara presente nas
           imagens do instalador.

   no-pkg-sell

           A venda de pacotes e proibida. Isso e equivalente a definir
           NO_CDROM. O pacote nao estara presente nas imagens do instalador.

   auto-accept

           A licenc,a e aceita por padrao. Os prompts para aceitar uma
           licenc,a nao sao exibidos a menos que o usuario tenha definido
           LICENSES_ASK. Use isto, a menos que a licenc,a indique que o
           usuario deve aceitar os termos da licenc,a.

   no-auto-accept

           A licenc,a nao e aceita por padrao. O usuario sempre sera
           solicitado a confirmar a aceitac,ao desta licenc,a. Isso deve ser
           usado se a licenc,a declarar que o usuario deve aceitar seus
           termos.

   Quando ambos permission e no-permission estiverem presentes o
   no-permission vai cancelar a permission.

   Quando permission nao estiver presente, e considerado uma no-permission.

  Atenc,ao:

   Algumas permissoes que estiverem faltando, impedirao que um port (e todos
   os ports dependendo dele) sejam utilizados pelos usuarios do pacote:

   Um port sem a permissao auto-accept nunca sera compilado e todos os ports
   dependendo dele serao ignorados.

   Um port sem a permissao pkg-mirror sera removido, assim como todos os
   ports que dependam dele, isso depois da compilac,ao e entao eles nunca
   serao distribuidos.

   Exemplo 5.29. Licenc,a Nao Padrao

   Leia os termos da licenc,a e traduza-os usando as permissoes disponiveis.

 LICENSE=        UNKNOWN
 LICENSE_NAME=   unknown
 LICENSE_TEXT=   Esse programa NAO e de dominio publico.\
                 pode ser distribuido livremente para propositos nao comerciais apenas,\
                 e NAO HA GARANTIA PARA ESSE PROGRAMA.
 LICENSE_PERMS=  dist-mirror no-dist-sell pkg-mirror no-pkg-sell auto-accept

   Exemplo 5.30. Licenc,as Padrao e Nao Padrao

   Leia os termos da licenc,a e expresse-os usando as permissoes disponiveis.
   Em caso de duvida, pec,a orientac,ao na lista de discussao de ports do
   FreeBSD.

 LICENSE=        WARSOW GPLv2
 LICENSE_COMB=   multi
 LICENSE_NAME_WARSOW=    Warsow Content License
 LICENSE_FILE_WARSOW=    ${WRKSRC}/docs/license.txt
 LICENSE_PERMS_WARSOW=   dist-mirror pkg-mirror auto-accept

   Quando as permissoes das licenc,as GPLv2 e UNKNOWN sao misturadas, o port
   termina com dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
   dist-mirror no-dist-sell pkg-mirror no-pkg-sell auto-accept. O
   no-permissions cancela as permissions. A lista resultante de permissoes e
   dist-mirror pkg-mirror auto-accept. Os arquivos de distribuic,ao e os
   pacotes nao estarao disponiveis nas imagens do instalador.

  5.7.3. LICENSE_GROUPS e LICENSE_GROUPS_NAME

   Grupos que a licenc,a pertence.

   Lista de Grupos de Licenc,as Predefinidas

   FSF

           Aprovada pela Free Software Foundation, veja FSF Licensing &
           Compliance Team.

   GPL

           Compativel com GPL

   OSI

           Aprovado pelo OSI, veja a pagina Open Source Initiative Open
           Source Licenses.

   COPYFREE

           Segue a Copyfree Standard Definition, consulte a pagina Copyfree
           Licenses.

   FONTS

           Licenc,as de fonte

  5.7.4. LICENSE_NAME e LICENSE_NAME_NAME

   Nome completo da licenc,a.

   Exemplo 5.31. LICENSE_NAME

 LICENSE=        UNRAR
 LICENSE_NAME=   UnRAR License
 LICENSE_FILE=   ${WRKSRC}/license.txt
 LICENSE_PERMS=  dist-mirror dist-sell pkg-mirror pkg-sell auto-accept

  5.7.5. LICENSE_FILE e LICENSE_FILE_NOME

   Caminho completo para o arquivo que contem o texto da licenc,a, geralmente
   ${WRKSRC}/some/file. Se o arquivo nao estiver no distfile e seu conteudo
   for muito longo para ser colocado em LICENSE_TEXT, insira o texto em um
   novo arquivo em ${FILESDIR}.

   Exemplo 5.32. LICENSE_FILE

 LICENSE=        GPLv3+
 LICENSE_FILE=   ${WRKSRC}/COPYING

  5.7.6. LICENSE_TEXT e LICENSE_TEXT_NAME

   Texto para usar como uma licenc,a. Util quando a licenc,a nao esta nos
   arquivos de distribuic,ao e seu texto e curto.

   Exemplo 5.33. LICENSE_TEXT

 LICENSE=        UNKNOWN
 LICENSE_NAME=   unknown
 LICENSE_TEXT=   This program is NOT in public domain.\
                 It can be freely distributed for non-commercial purposes only,\
                 and THERE IS NO WARRANTY FOR THIS PROGRAM.
 LICENSE_PERMS=  dist-mirror no-dist-sell pkg-mirror no-pkg-sell auto-accept

  5.7.7. LICENSE_DISTFILES e LICENSE_DISTFILES_NAME

   Os arquivos de distribuic,ao aos quais as licenc,as se aplicam. O padrao e
   para todos os arquivos de distribuic,ao.

   Exemplo 5.34. LICENSE_DISTFILES

   Usado quando os arquivos de distribuic,ao nao possuem a mesma licenc,a.
   Por exemplo, um possui uma licenc,a de codigo e outro possui alguns
   trabalhos de arte que nao podem ser redistribuidos:

 MASTER_SITES=   SF/some-game
 DISTFILES=      ${DISTNAME}${EXTRACT_SUFX} artwork.zip

 LICENSE=        BSD3CLAUSE ARTWORK
 LICENSE_COMB=   dual
 LICENSE_NAME_ARTWORK=      The game artwork license
 LICENSE_TEXT_ARTWORK=      The README says that the files cannot be redistributed
 LICENSE_PERMS_ARTWORK=     pkg-mirror pkg-sell auto-accept
 LICENSE_DISTFILES_BSD3CLAUSE=   ${DISTNAME}${EXTRACT_SUFX}
 LICENSE_DISTFILES_ARTWORK= artwork.zip

  5.7.8. LICENSE_COMB

   Defina como multi se todas as licenc,as se aplicarem. Defina como dual se
   qualquer uma das licenc,as se aplica. O padrao e definido para single.

   Exemplo 5.35. Licenc,as Duplas

   Quando um port diz "This software may be distributed under the GNU General
   Public License or the Artistic License">, isso significa que qualquer
   licenc,a pode ser usada. Use isto:

 LICENSE=        ART10 GPLv1
 LICENSE_COMB=   dual

   Se os arquivos de licenc,a forem fornecidos, use assim:

 LICENSE=        ART10 GPLv1
 LICENSE_COMB=   dual
 LICENSE_FILE_ART10=     ${WRKSRC}/Artistic
 LICENSE_FILE_GPLv1=     ${WRKSRC}/Copying

   Exemplo 5.36. Multiplas Licenc,as

   Quando parte de um port tem uma licenc,a, e outra parte tem uma licenc,a
   diferente, use multi:

 LICENSE=        GPLv2 LGPL21+
 LICENSE_COMB=   multi

5.8. PORTSCOUT

   Portscout e um utilitario de verificac,ao de distfile automatizado para a
   Colec,ao de Ports do FreeBSD, descrito em detalhes em Sec,ao 16.5,
   "Portscout: o Scanner de Distfile de Ports do FreeBSD".

   PORTSCOUT define condic,oes especiais dentro das quais o scanner distfile
   do Portscout e restrito.

   Situac,oes em que o PORTSCOUT e configurado:

     * Quando distfiles precisam ser ignorados, seja para versoes
       especificas, ou para pequenas revisoes especificas. Por exemplo, para
       excluir a versao 8.2 das verificac,oes de versao de distfile porque e
       conhecido por estar quebrado, adicione:

 PORTSCOUT=      ignore:8.2

     * Quando versoes especificas ou revisoes maiores e menores especificas
       de um distfile devem ser verificadas. Por exemplo, se somente a versao
       0.6.4 deve ser monitorado porque versoes mais recentes tem problemas
       de compatibilidade com o FreeBSD, adicione:

 PORTSCOUT=      limit:^0\.6\.4

     * Quando os URLs que listam as versoes disponiveis diferem dos URLs de
       download. Por exemplo, para limitar as verificac,oes de versao do
       arquivo distfile `a pagina de download para o port databases/pgtune,
       adicione:

 PORTSCOUT=      site:http://pgfoundry.org/frs/?group_id=1000416

5.9. Dependencias

   Muitos ports dependem de outros ports. Esta e uma caracteristica muito
   conveniente da maioria dos sistemas operacionais Unix-like, incluindo
   FreeBSD. Varios ports podem compartilhar uma dependencia comum, ao inves
   de agrupar essa dependencia com cada port ou pacote que precisa dela. Ha
   sete variaveis &#8203;&#8203;que podem ser usadas para garantir que todos
   os bits necessarios estejam na maquina do usuario. Existem tambem algumas
   variaveis &#8203;&#8203;de dependencia pre-suportadas para casos comuns,
   alem de algumas outras para controlar o comportamento das dependencias.

  Importante:

   Quando o software possui dependencias extras que fornecem recursos extras,
   as dependencias basicas listadas em *_DEPENDS devem incluir as
   dependencias extras que beneficiariam a maioria dos usuarios. As
   dependencias basicas nunca devem ser um conjunto de dependencias "minima".
   O objetivo nao e incluir todas as dependencias possiveis. Inclua apenas
   aquelas que beneficiarao a maioria das pessoas.

  5.9.1. LIB_DEPENDS

   Esta variavel especifica as bibliotecas compartilhadas das quais este port
   depende. E uma lista de tuplas lib:dir onde lib e o nome da biblioteca
   compartilhada, dir e o diretorio no qual encontra-lo, caso nao esteja
   disponivel. Por exemplo,

 LIB_DEPENDS=   libjpeg.so:graphics/jpeg

   ira verificar se ha uma biblioteca jpeg compartilhada com qualquer versao
   no subdiretorio graphics/jpeg da arvore de ports para compilar e instalar
   se nao for encontrado.

   A dependencia e verificada duas vezes, uma vez dentro do target build e
   depois dentro do target install. Alem disso, o nome da dependencia e
   colocado no pacote para que o pkg-install (veja pkg-install(8)) a instale
   automaticamente se a mesma nao estiver no sistema do usuario.

  5.9.2. RUN_DEPENDS

   Esta variavel especifica arquivos executaveis ou arquivos para os quais
   este port depende durante o tempo de execuc,ao. E uma lista de tuplas
   path:dir[:target] onde path e o nome do executavel ou arquivo,dir e o
   diretorio no qual encontra-lo, caso nao esteja disponivel, e o target e o
   target para chamar nesse diretorio. E se o path comec,ar com uma barra
   (/), ele sera tratado como um arquivo e sua existencia e testada com test
   -e; caso contrario, e assumido como um executavel e which -s e usado para
   determinar se o programa existe no caminho de pesquisa.

   Por exemplo,

 RUN_DEPENDS=    ${LOCALBASE}/news/bin/innd:news/inn \
                 xmlcatmgr:textproc/xmlcatmgr

   ira verificar se o arquivo ou diretorio /usr/local/news/bin/innd existe, e
   compilar e instala-lo a partir do subdiretorio news/inn da arvore de
   ports, caso nao seja encontrado. Ele tambem vera se um executavel chamado
   xmlcatmgr esta no caminho de pesquisa em textproc/xmlcatmgr para compilar
   e instalar se nao for encontrado.

  Nota:

   Nesse caso, innd e na verdade um executavel; se um executavel estiver em
   um local que nao deve estar no caminho de pesquisa, use o nome do caminho
   completo.

  Nota:

   A pesquisa oficial PATH usado no cluster de construc,ao de ports e

 /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin

   A dependencia e verificada a partir do target install. Alem disso, o nome
   da dependencia e colocado no pacote para que o pkg-install (veja
   pkg-install(8)) a instale automaticamente se a mesma nao estiver no
   sistema do usuario. A parte target pode ser omitida se for igual a
   DEPENDS_TARGET.

   Uma situac,ao bastante comum e quando RUN_DEPENDS e literalmente o mesmo
   que BUILD_DEPENDS, especialmente se o software portado e escrito em uma
   linguagem de script ou se requer o mesmo ambiente de compilac,ao e tempo
   de execuc,ao. Neste caso, e tentador e intuitivo atribuir diretamente um
   ao outro:

 RUN_DEPENDS=    ${BUILD_DEPENDS}

   No entanto, essa atribuic,ao pode poluir as dependencias de tempo de
   execuc,ao com entradas nao definidas no BUILD_DEPENDS original do port.
   Isso acontece por causa de uma avaliac,ao preguic,osa de atribuic,ao de
   variaveis do make(1). Considere um Makefile com USES_*, que sao
   processados &#8203;&#8203;por ports/Mk/bsd.*.mk para aumentar as
   dependencias iniciais de compilac,ao. Por exemplo, USES=gmake adiciona
   devel/gmake para BUILD_DEPENDS. Para evitar que essas dependencias
   adicionais poluam RUN_DEPENDS, crie outra variavel com o conteudo atual de
   BUILD_DEPENDS e atribua-a para ambos BUILD_DEPENDS e RUN_DEPENDS:

 MY_DEPENDS=     some:devel/some \
                 other:lang/other
 BUILD_DEPENDS=  ${MY_DEPENDS}
 RUN_DEPENDS=    ${MY_DEPENDS}

  Importante:

   Nao use := para atribuir BUILD_DEPENDS para RUN_DEPENDS ou vice-versa.
   Todas as variaveis &#8203;&#8203;sao expandidas imediatamente, o que e
   exatamente a coisa errada a fazer e quase sempre um fracasso.

  5.9.3. BUILD_DEPENDS

   Esta variavel especifica executaveis &#8203;&#8203;ou arquivos que este
   port requer para ser compilado. Como RUN_DEPENDS, ela e uma lista de
   tuplas path:dir[:target]. Por exemplo,

 BUILD_DEPENDS=  unzip:archivers/unzip

   ira procurar por um executavel chamado unzip, e ir para o subdiretorio
   archivers/unzip da arvore de ports para compilar e instalar se nao for
   encontrado.

  Nota:

   "build" aqui significa tudo, desde a extrac,ao ate a compilac,ao. A
   dependencia e verificada a partir do target extract. A parte do target
   pode ser omitida se for igual a DEPENDS_TARGET

  5.9.4. FETCH_DEPENDS

   Esta variavel especifica executaveis &#8203;&#8203;ou arquivos que este
   port requer para fazer os downloads. Como os dois anteriores, e uma lista
   de tuplas path:dir[:target]. Por exemplo,

 FETCH_DEPENDS=  ncftp2:net/ncftp2

   ira procurar por um executavel chamado ncftp2 e ir para o subdiretorio
   net/ncftp2 da arvore de ports para compilar e instalar se nao for
   encontrado.

   A dependencia e verificada a partir do target fetch. A parte target pode
   ser omitida se for igual a DEPENDS_TARGET.

  5.9.5. EXTRACT_DEPENDS

   Esta variavel especifica executaveis &#8203;&#8203;ou arquivos que este
   port requer para extrac,ao. Como no anterior, e uma lista de tuplas
   path:dir[:target]. Por exemplo,

 EXTRACT_DEPENDS=        unzip:archivers/unzip

   ira procurar por um executavel chamado unzip, e ir para o subdiretorio
   archivers/unzip da arvore de ports para compilar e instalar se nao for
   encontrado.

   A dependencia e verificada a partir do target extract. A parte target pode
   ser omitida se for igual a DEPENDS_TARGET.

  Nota:

   Use esta variavel somente se a extrac,ao ainda nao funcionar (o padrao usa
   tar) e nao funciona com USES=tar, USES=lha ou USES=zip descrito em
   Capitulo 17, Usando Macros USES.

  5.9.6. PATCH_DEPENDS

   Esta variavel especifica executaveis &#8203;&#8203;ou arquivos que este
   port requer para aplicar patches. Como no anterior, e uma lista de
   path:dir[:target]. Por exemplo,

 PATCH_DEPENDS=  ${NONEXISTENT}:java/jfc:extract

   vai descer para o subdiretorio java/jfc da arvore de ports para extrai-lo.

   A dependencia e verificada a partir do target patch. A parte target pode
   ser omitida se for igual a DEPENDS_TARGET.

  5.9.7. USES

   Parametros podem ser adicionados para definir diferentes recursos e
   dependencias usados &#8203;&#8203;pelo port. Eles sao especificados
   adicionando esta linha ao Makefile:

 USES= feature[:arguments]

   Para a lista completa de valores, por favor veja o Capitulo 17, Usando
   Macros USES.

  Atenc,ao:

   USES nao pode ser atribuido apos a inclusao de bsd.port.pre.mk.

  5.9.8. USE_*

   Diversas variaveis &#8203;&#8203;existem para definir dependencias comuns
   compartilhadas por muitos ports. O uso e opcional, mas ajuda a reduzir a
   verbosidade dos Makefiles de port . Cada um deles e denominado como
   USES_*. Essas variaveis &#8203;&#8203;podem ser usadas apenas no Makefile
   do port e ports/Mk/bsd.*.mk. Elas nao sao destinadas a opc,oes
   configuraveis &#8203;&#8203;pelo usuario - use PORT_OPTIONS para esse
   proposito.

  Nota:

   E sempre incorreto definir qualquer USE_* dentro de /etc/make.conf. Por
   exemplo, definindo

 USE_GCC=X.Y

   (onde XY e o numero da versao) adicionaria uma dependencia do gccXY para
   cada port, incluindo lang/gccXY em si!

   Tabela 5.8. USE_*

   Variavel                             Significa                             
            O port requer GCC (gcc ou g++) para compilar. Alguns ports        
            precisam de qualquer versao do GCC, algumas exigem versoes        
            modernas e recentes. Normalmente, e configurado para qualquer     
            (neste caso, o GCC da base seria usado em versoes do FreeBSD que  
            ainda o possuem, ou o port lang/gcc seria instalado quando o      
            compilador C/C++ padrao for o Clang); ou yes (significa usar      
            sempre GCC estavel e moderno do port lang/gcc). A versao exata    
            tambem pode ser especificada, com um valor como 4.7. A versao     
   USE_GCC  minima exigida pode ser especificada como 4.6+. O GCC do sistema  
            base e usado quando satisfaz a versao solicitada, caso contrario, 
            um compilador apropriado e compilado a partir do port, e CC e CXX 
            sao ajustados em conformidade.                                    
                                                                              
              Nota:                                                           
                                                                              
            USE_GCC ira registrar uma dependencia de tempo de compilac,ao e   
            uma de tempo de execuc,ao.                                        

   Variaveis &#8203;&#8203;relacionadas ao gmake e configure sao descritos em
   Sec,ao 6.5, "Mecanismos de Compilac,ao", enquanto autoconf, automake e
   libtool sao descritos em Sec,ao 6.6, "Usando o GNU Autotools". Variaveis
   relacionadas ao Perl &#8203;sao descritas em Sec,ao 6.8, "Usando Perl".
   Variaveis &#8203;&#8203;X11 sao listadas em Sec,ao 6.9, "Usando o X11".
   Sec,ao 6.10, "Usando o GNOME" lida com o GNOME e Sec,ao 6.13, "Usando o
   KDE" com variaveis &#8203;&#8203;relacionadas ao KDE. Sec,ao 6.15, "Usando
   Java" documenta variaveis &#8203;&#8203;Java, enquanto Sec,ao 6.16,
   "Aplicac,oes Web, Apache e PHP" contem informac,oes sobre Apache, PHP e
   modulos PEAR. Python e discutido em Sec,ao 6.17, "Usando Python", e Ruby
   em Sec,ao 6.19, "Usando Ruby". Sec,ao 6.20, "Usando SDL" fornece variaveis
   &#8203;&#8203;usadas para aplicac,oes SDL e, finalmente, Sec,ao 6.24,
   "Usando o Xfce" contem informac,oes sobre o Xfce.

  5.9.9. Versao Minima de uma Dependencia

   Uma versao minima de uma dependencia pode ser especificada em qualquer
   *_DEPENDS, exceto LIB_DEPENDS, usando esta sintaxe:

 p5-Spiffy>=0.26:devel/p5-Spiffy

   O primeiro campo contem um nome de pacote dependente, que deve
   corresponder `a entrada no banco de dados de pacotes, um sinal de
   comparac,ao e uma versao do pacote. A dependencia e satisfeita se o
   p5-Spiffy-0.26 ou mais recente estiver instalado na maquina.

  5.9.10. Notas sobre Dependencias

   Como mencionado acima, o target padrao para chamar quando uma dependencia
   e necessaria e o DEPENDS_TARGET. Seu padrao e o install. Esta e uma
   variavel de usuario; nunca e definido em um Makefile de port. Se o port
   precisar de uma maneira especial de lidar com uma dependencia, use a parte
   :target de *_DEPENDS em vez de redefinir DEPENDS_TARGET.

   Quando rodar make clean, as dependencias de port tambem sao limpas
   automaticamente. Se isso nao for desejavel, defina NOCLEANDEPENDS no
   ambiente. Isto pode ser particularmente desejavel se o port tiver algo que
   demore muito tempo para recompilar em sua lista de dependencias, como o
   KDE, o GNOME ou o Mozilla.

   Para depender de outro port incondicionalmente, use a variavel
   ${NONEXISTENT} no primeiro campo do BUILD_DEPENDS ou RUN_DEPENDS. Use isto
   somente quando o codigo fonte do outro port for necessario. Tempo de
   compilac,ao pode ser economizado especificando o target tambem. Por
   exemplo

 BUILD_DEPENDS=  ${NONEXISTENT}:graphics/jpeg:extract

   sempre descera para o port jpeg e extrai-lo.

  5.9.11. Dependencias Circulares sao Fatais

  Importante:

   Nao insira nenhuma dependencia circular na arvore de ports!

   A tecnologia de compilac,ao de ports nao tolera dependencias circulares.
   Se uma for inserida, alguem, em algum lugar do mundo, tera sua instalac,ao
   do FreeBSD quebrada quase que imediatamente, e muitos outros rapidamente
   terao o mesmo problema. Estes erros podem ser realmente dificeis de serem
   detectados. Em caso de duvida, antes de fazer qualquer alterac,ao,
   certifique-se de executar: cd /usr/ports; make index. Esse processo pode
   ser muito lento em maquinas mais antigas, mas pode evitar dor de cabec,a
   para um grande numero de pessoas, incluindo voce.

  5.9.12. Problemas Causados &#8203;&#8203;por Dependencias Automaticas

   Dependencias devem ser declaradas explicitamente ou usando o framework
   OPTIONS. Usar outros metodos, como a detecc,ao automatica, dificulta a
   indexac,ao, o que causa problemas para o gerenciamento de ports e pacotes.

   Exemplo 5.37. Declarac,ao Errada de uma Dependencia Opcional

 .include <bsd.port.pre.mk>

 .if exists(${LOCALBASE}/bin/foo)
 LIB_DEPENDS=    libbar.so:foo/bar
 .endif

   O problema em tentar adicionar dependencias automaticamente e que os
   arquivos e configurac,oes fora de um port individual podem ser alterados a
   qualquer momento. Por exemplo: um indice e construido, depois um lote de
   ports e instalado. Mas um dos ports instala o arquivo testado. O indice
   entao fica incorreto, porque um port instalado inesperadamente tem uma
   nova dependencia. O indice ainda pode estar errado mesmo apos a
   recriac,ao, se outros ports tambem determinarem a necessidade de
   dependencias com base na existencia de outros arquivos.

   Exemplo 5.38. Declarac,ao Correta de uma Dependencia Opcional

 OPTIONS_DEFINE= BAR
 BAR_DESC=       Calling cellphones via bar

 BAR_LIB_DEPENDS=        libbar.so:foo/bar

   Testar variaveis &#8203;&#8203;de opc,oes e o metodo correto. Ele nao
   causara inconsistencias no indice de um lote de ports, desde que as
   opc,oes tenham sido definidas antes da construc,ao do indice. Scripts
   simples podem ser usados &#8203;&#8203;para automatizar a compilac,ao,
   instalac,ao e atualizac,ao desses ports e seus pacotes.

5.10. Ports Slaves e MASTERDIR

   Se o port precisar criar versoes ligeiramente diferentes de pacotes
   fazendo com que uma variavel (por exemplo, resoluc,ao ou tamanho de papel)
   assuma valores diferentes, crie um subdiretorio por pacote para facilitar
   aos usuarios a visualizac,ao do que fazer, mas tente compartilhar o maximo
   possivel de arquivos entre os ports. Normalmente, usando variaveis
   &#8203;&#8203;inteligentemente, apenas um Makefile bem curto sera
   necessario em todos, exceto em um dos diretorios. No Makefile solitario,
   use MASTERDIR para especificar o diretorio onde o restante dos arquivos
   estao. Alem disso, use uma variavel como parte de PKGNAMESUFFIX para que
   os pacotes tenham nomes diferentes.

   Isso sera melhor demonstrado por um exemplo. Isso e parte de
   print/pkfonts300/Makefile;

 PORTNAME=       pkfonts${RESOLUTION}
 PORTVERSION=    1.0
 DISTFILES=      pk${RESOLUTION}.tar.gz

 PLIST=          ${PKGDIR}/pkg-plist.${RESOLUTION}

 .if !defined(RESOLUTION)
 RESOLUTION=     300
 .else
 .if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \
         ${RESOLUTION} != 300 && ${RESOLUTION} != 360 && \
         ${RESOLUTION} != 400 && ${RESOLUTION} != 600
 .BEGIN:
         @${ECHO_MSG} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\""
         @${ECHO_MSG} "Possible values are: 118, 240, 300, 360, 400 and 600."
         @${FALSE}
 .endif
 .endif

   print/pkfonts300 tambem tem todos os patches, arquivos de pacotes, etc.
   Rodando make nele, sera assumido o valor padrao para a resoluc,ao (300) e
   o port sera compilado normalmente.

   Quanto `as outras resoluc,oes, este e o print/pkfonts360/Makefile
   completo:

 RESOLUTION=     360
 MASTERDIR=      ${.CURDIR}/../pkfonts300

 .include        "${MASTERDIR}/Makefile"

   (print/pkfonts118/Makefile, print/pkfonts600/Makefile, e todos os outros
   sao semelhantes). A definic,ao de MASTERDIR diz ao bsd.port.mk que o
   conjunto regular de subdiretorios como FILESDIR e SCRIPTDIR podem ser
   encontrados em pkfonts300. A linha RESOLUTION=360 ira substituir a linha
   RESOLUTION=300 em pkfonts300/Makefile e o port sera compilado com a
   resoluc,ao definida para 360.

5.11. Paginas de Manual

   Se o port instala a sua arvore de manuais em outro lugar diferente de
   PREFIX, use MANDIRS para especificar esses diretorios. Note que os
   arquivos correspondentes `as paginas de manual devem ser colocados no
   pkg-plist junto com o resto dos arquivos. O proposito do MANDIRS e ativar
   a compactac,ao automatica de paginas de manual, portanto, os nomes dos
   arquivos sao sufixados com .gz.

5.12. Arquivos de Informac,ao

   Se o pacote precisar instalar arquivos de informac,oes GNU, liste-os na
   variavel INFO (sem o sufixo .info), uma entrada por documento. Presume-se
   que esses arquivos estejam instalados em PREFIX/INFO_PATH. Mude INFO_PATH
   se o pacote usa um local diferente. Contudo, isto nao e recomendado. Essas
   entradas contem apenas o caminho relativo para PREFIX/INFO_PATH. Por
   exemplo, lang/gcc34 instala arquivos de informac,oes em
   PREFIX/INFO_PATH/gcc34 e INFO sera algo assim:

 INFO=   gcc34/cpp gcc34/cppinternals gcc34/g77 ...

   O codigo apropriado de instalac,ao/desinstalac,ao sera automaticamente
   adicionado ao arquivo pkg-plist temporario antes do registro do pacote.

5.13. Opc,oes do Makefile

   Muitas aplicac,oes podem ser compiladas com configurac,oes opcionais ou
   diferentes. Exemplos podem ser a escolha de linguagem natural (humana),
   GUI versus linha de comando ou qual tipo de banco de dados sera suportado.
   Os usuarios podem precisar de uma configurac,ao diferente do padrao,
   portanto o sistema de ports fornece ganchos em que o autor do port pode
   usar para controlar qual variante sera compilada. Suportar essas opc,oes
   corretamente fara com que os usuarios fiquem felizes, e efetivamente
   fornec,a dois ou mais ports pelo prec,o de um.

  5.13.1. OPTIONS

    5.13.1.1. Background

   OPTIONS_* fornece ao usuario que esta instalando o port uma caixa de
   dialogo mostrando as opc,oes disponiveis e, em seguida, salva essas
   opc,oes em ${PORT_DBDIR}/${OPTIONS_NAME}/options. Na proxima vez que o
   port for compilado, as opc,oes serao reutilizadas. O padrao de PORT_DBDIR
   e /var/db/ports. OPTIONS_NAME e a origem do port com um underline como o
   separador de espac,o, por exemplo, dns/bind99 sera dns_bind99.

   Quando o usuario executa make config (ou executa make build pela primeira
   vez), o framework verifica ${PORT_DBDIR}/${OPTIONS_NAME}/options. Se esse
   arquivo nao existir, os valores de OPTIONS_* sao usados &#8203;&#8203;e
   uma caixa de dialogo e exibida onde as opc,oes podem ser ativadas ou
   desativadas. Entao as options sao salvas e as variaveis
   &#8203;&#8203;configuradas sao utilizadas ao compilar o port.

   Se uma nova versao do port adicionar novas OPTIONS, a caixa de dialogo
   sera apresentada ao usuario, ja preenchido com os valores salvos das
   antigas OPTIONS.

   make showconfig mostra a configurac,ao salva. Use make rmconfig para
   remover a configurac,ao salva.

    5.13.1.2. Sintaxe

   OPTIONS_DEFINE contem uma lista de OPTIONS para serem utilizadas. Elas sao
   independentes umas das outras e nao sao agrupadas:

 OPTIONS_DEFINE= OPT1 OPT2

   Uma vez definido, as OPTIONS sao descritas (opcionalmente, mas fortemente
   recomendado):

 OPT1_DESC=      Describe OPT1
 OPT2_DESC=      Describe OPT2
 OPT3_DESC=      Describe OPT3
 OPT4_DESC=      Describe OPT4
 OPT5_DESC=      Describe OPT5
 OPT6_DESC=      Describe OPT6

   ports/Mk/bsd.options.desc.mk possui descric,oes para muitas OPTIONS
   comuns. Geralmente sao uteis, mas podem ser substituas se a descric,ao for
   insuficiente para o port.

  Dica:

   Ao descrever as opc,oes, visualize-as da perspectiva do usuario: "Qual
   funcionalidade ela muda?" e "Por que eu iria querer habilitar ela?" Nao
   repita apenas o nome. Por exemplo, descrever a opc,ao NLS como "incluir
   suporte NLS" nao ajuda o usuario, que ja pode ver o nome da opc,ao, mas
   pode nao saber o que isso significa. Descrevendo-a como "Suporte a idiomas
   nativos por meio de utilitarios gettext" e muito mais util.

  Importante:

   Os nomes das opc,oes sao sempre em letras maiusculas. Nao podem estar
   misturadas ou apenas em minusculo.

   OPTIONS podem ser agrupadas como opc,oes radio, onde apenas uma escolha de
   cada grupo e permitida:

 OPTIONS_SINGLE=         SG1
 OPTIONS_SINGLE_SG1=     OPT3 OPT4

  Atenc,ao:

   Deve estar sempre selecionada uma de cada OPTIONS_SINGLE para as opc,oes
   serem validas. Uma opc,ao de cada grupo deve ser adicionada a
   OPTIONS_DEFAULT.

   OPTIONS podem ser agrupadas como opc,oes radio, onde nenhuma ou apenas uma
   escolha de cada grupo e permitida:

 OPTIONS_RADIO=          RG1
 OPTIONS_RADIO_RG1=      OPT7 OPT8

   OPTIONS tambem pode ser agrupadas como listas de "multipla-escolha", onde
   pelo menos uma opc,ao deve estar habilitada:

 OPTIONS_MULTI=          MG1
 OPTIONS_MULTI_MG1=      OPT5 OPT6

   OPTIONS tambem pode ser agrupadas como listas de "multipla-escolha", onde
   nenhuma ou qualquer opc,ao pode ser ativada:

 OPTIONS_GROUP=          GG1
 OPTIONS_GROUP_GG1=      OPT9 OPT10

   OPTIONS sao desativadas por padrao, a menos que estejam listadas em
   OPTIONS_DEFAULT:

 OPTIONS_DEFAULT=        OPT1 OPT3 OPT6

   Definic,oes de OPTIONS devem aparecer antes da inclusao de
   bsd.port.options.mk. Valores de PORT_OPTIONS so podem ser testados apos a
   inclusao de bsd.port.options.mk. Inclusao de bsd.port.pre.mk pode ser
   usado tambem, e ainda e amplamente usado em ports escritos antes da
   introduc,ao de bsd.port.options.mk. Mas esteja ciente de que algumas
   variaveis nao funcionarao como esperado apos a inclusao de
   bsd.port.pre.mk, tipicamente algumas flags USE_*.

   Exemplo 5.39. Uso Simples de OPTIONS

 OPTIONS_DEFINE= FOO BAR
 OPTIONS_DEFAULT=FOO

 FOO_DESC=       Option foo support
 BAR_DESC=       Feature bar support

 # Will add --with-foo / --without-foo
 FOO_CONFIGURE_WITH=     foo
 BAR_RUN_DEPENDS=        bar:bar/bar

 .include <bsd.port.mk>

   Exemplo 5.40. Verificar OPTIONS Desmacadas

 .if ! ${PORT_OPTIONS:MEXAMPLES}
 CONFIGURE_ARGS+=--without-examples
 .endif

   O formato acima nao e recomendado. O metodo preferido e usar um configure
   knob para realmente ativar e desativar o recurso coincidindo com a opc,ao:

 # Will add --with-examples / --without-examples
 EXAMPLES_CONFIGURE_WITH=        examples

   Exemplo 5.41. Uso Pratico de OPTIONS

 OPTIONS_DEFINE=         EXAMPLES
 OPTIONS_DEFAULT=        PGSQL LDAP SSL

 OPTIONS_SINGLE=         BACKEND
 OPTIONS_SINGLE_BACKEND= MYSQL PGSQL BDB

 OPTIONS_MULTI=          AUTH
 OPTIONS_MULTI_AUTH=     LDAP PAM SSL

 EXAMPLES_DESC=          Install extra examples
 MYSQL_DESC=             Use MySQL as backend
 PGSQL_DESC=             Use PostgreSQL as backend
 BDB_DESC=               Use Berkeley DB as backend
 LDAP_DESC=              Build with LDAP authentication support
 PAM_DESC=               Build with PAM support
 SSL_DESC=               Build with OpenSSL support

 # Will add USE_PGSQL=yes
 PGSQL_USE=      pgsql=yes
 # Will add --enable-postgres / --disable-postgres
 PGSQL_CONFIGURE_ENABLE= postgres

 ICU_LIB_DEPENDS=        libicuuc.so:devel/icu

 # Will add --with-examples / --without-examples
 EXAMPLES_CONFIGURE_WITH=        examples

 # Check other OPTIONS

 .include <bsd.port.mk>

    5.13.1.3. Opc,oes Padrao

   Essas opc,oes estao sempre ativadas por padrao.

     * DOCS - build and install documentation.

     * NLS - Native Language Support.

     * EXAMPLES - build and install examples.

     * IPV6 - IPv6 protocol support.

  Nota:

   Nao ha necessidade de adiciona-las em OPTIONS_DEFAULT. Para ativa-las e
   mostra-las na caixa de dialogo de selec,ao de opc,oes, elas devem ser
   adicionadas em OPTIONS_DEFINE.

  5.13.2. Feature de Ativac,ao Automatica

   Ao usar um script configure GNU, fique de olho em quais recursos opcionais
   sao ativados por detecc,ao automatica. Desative explicitamente os recursos
   opcionais que nao sao necessarios, adicionando --without-xxx ou
   --disable-xxx em CONFIGURE_ARGS.

   Exemplo 5.42. Manipulac,ao Incorreta de uma Opc,ao

 .if ${PORT_OPTIONS:MFOO}
 LIB_DEPENDS+=           libfoo.so:devel/foo
 CONFIGURE_ARGS+=        --enable-foo
 .endif

   No exemplo acima, imagine que uma biblioteca libfoo esta instalada no
   sistema. O usuario nao quer que este aplicativo use libfoo, entao ele
   desabilitou a opc,ao na caixa de dialogo do make config. Mas o script
   configure do aplicativo detecta a biblioteca presente no sistema e inclui
   seu suporte no executavel resultante. Agora, quando o usuario decide
   remover libfoo do sistema, o sistema de ports nao protesta (nenhuma
   dependencia de libfoo foi registrada), e entao o aplicativo quebra.

   Exemplo 5.43. Manuseio Correto de uma Opc,ao

 FOO_LIB_DEPENDS=                libfoo.so:devel/foo
 # Will add --enable-foo / --disable-foo
 FOO_CONFIGURE_ENABLE=   foo

  Nota:

   Sob algumas circunstancias, a sintaxe condicional abreviada pode causar
   problemas com construc,oes complexas. Os erros sao geralmente Malformed
   conditional, e uma sintaxe alternativa pode ser usada.

 .if !empty(VARIABLE:MVALUE)

   como uma alternativa para

 .if ${VARIABLE:MVALUE}

  5.13.3. Assistentes de Opc,oes

   Existem algumas macros para ajudar a simplificar valores condicionais que
   diferem com base nas opc,oes definidas. Para facilitar o acesso, e
   fornecida uma lista abrangente:

   PLIST_SUB, SUB_LIST

           Para gerac,ao automatica de %%OPT%% e %%NO_OPT%%, veja
           Sec,ao 5.13.3.1, "OPTIONS_SUB".

           Para uso mais complexo, veja Sec,ao 5.13.3.11, "Substituic,ao de
           Variaveis &#8203;&#8203;Genericas, OPT_VARIABLE e
           OPT_VARIABLE_OFF".

   CONFIGURE_ARGS

           Para --enable-x e --disable-x, veja Sec,ao 5.13.3.3.1,
           "OPT_CONFIGURE_ENABLE".

           Para --with-x e --without-x, veja Sec,ao 5.13.3.3.2,
           "OPT_CONFIGURE_WITH".

           Para todos os outros casos, veja Sec,ao 5.13.3.3.3,
           "OPT_CONFIGURE_ON e OPT_CONFIGURE_OFF".

   CMAKE_ARGS

           Para argumentos que sao booleanos (on, off, true, false, 0, 1)
           veja Sec,ao 5.13.3.4.2, "OPT_CMAKE_BOOL e OPT_CMAKE_BOOL_OFF".

           Para todos os outros casos, veja Sec,ao 5.13.3.4.1, "OPT_CMAKE_ON
           e OPT_CMAKE_OFF".

   MESON_ARGS

           Para argumentos que precisam de true ou false, veja
           Sec,ao 5.13.3.5.2, "OPT_MESON_TRUE e OPT_MESON_FALSE".

           Para argumentos que precisam de yes ou no, use Sec,ao 5.13.3.5.3,
           "OPT_MESON_YES e OPT_MESON_NO".

           Para argumentos que precisam de true ou false, veja
           Sec,ao 5.13.3.5.4, "OPT_MESON_ENABLED e OPT_MESON_DISABLED".

           Para todos os outros casos, use Sec,ao 5.13.3.5.1, "OPT_MESON_ON e
           OPT_MESON_OFF".

   QMAKE_ARGS

           Veja Sec,ao 5.13.3.6, "OPT_QMAKE_ON e OPT_QMAKE_OFF".

   USE_*

           Veja Sec,ao 5.13.3.2, "OPT_USE e OPT_USE_OFF".

   *_DEPENDS

           Veja Sec,ao 5.13.3.10, "Dependencias, OPT_DEPTYPE e
           OPT_DEPTYPE_OFF".

   * (Qualquer variavel)

           As variaveis &#8203;&#8203;mais usadas possuem assistentes
           diretos, veja Sec,ao 5.13.3.11, "Substituic,ao de Variaveis
           &#8203;&#8203;Genericas, OPT_VARIABLE e OPT_VARIABLE_OFF".

           Para qualquer variavel sem um assistente especifico, veja
           Sec,ao 5.13.3.9, "OPT_VARS e OPT_VARS_OFF".

   Dependencias de opc,oes

           Quando uma opc,ao precisa de outra opc,ao para funcionar, veja
           Sec,ao 5.13.3.7, "OPT_IMPLIES".

   Conflitos de opc,oes

           Quando uma opc,ao nao funciona se outra tambem estiver ativada,
           consulte Sec,ao 5.13.3.8, "OPT_PREVENTS e OPT_PREVENTS_MSG".

   Targets para Build

           Quando uma opc,ao precisa de algum processamento extra, veja
           Sec,ao 5.13.3.12, "Targets Adicionais de Compilac,ao,
           target-OPT-on e target-OPT-off".

    5.13.3.1. OPTIONS_SUB

   Se OPTIONS_SUB esta definido com yes entao cada uma das opc,oes
   adicionadas a OPTIONS_DEFINE sera adicionada em PLIST_SUB e SUB_LIST, por
   exemplo:

 OPTIONS_DEFINE= OPT1
 OPTIONS_SUB=    yes

   e equivalente a:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 PLIST_SUB+=     OPT1="" NO_OPT1="@comment "
 SUB_LIST+=      OPT1="" NO_OPT1="@comment "
 .else
 PLIST_SUB+=     OPT1="@comment " NO_OPT1=""
 SUB_LIST+=      OPT1="@comment " NO_OPT1=""
 .endif

  Nota:

   O valor de OPTIONS_SUB e ignorado. Definindo-o com qualquer valor ira
   adicionar entradas PLIST_SUB e SUB_LIST para todas as opc,oes.

    5.13.3.2. OPT_USE e OPT_USE_OFF

   Quando a opc,ao OPT e selecionada, para cada par key=value em OPT_USE,
   value e anexado ao USE_KEY correspondente. E se value tiver espac,os,
   substitua-os por virgulas e eles serao alterados de volta para espac,os
   durante o processamento. OPT_USE_OFF funciona da mesma maneira, quando OPT
   nao for selecionada. Por exemplo:

 OPTIONS_DEFINE= OPT1
 OPT1_USES=      xorg
 OPT1_USE=       mysql=yes xorg=x11,xextproto,xext,xrandr
 OPT1_USE_OFF=   openssl=yes

   e equivalente a:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 USE_MYSQL=      yes
 USES+=          xorg
 USE_XORG=       x11 xextproto xext xrandr
 .else
 USE_OPENSSL=    yes
 .endif

    5.13.3.3. Assistentes CONFIGURE_ARGS

      5.13.3.3.1. OPT_CONFIGURE_ENABLE

   Quando a opc,ao OPT e selecionada, para cada valor em
   OPT_CONFIGURE_ENABLE, --enable-valor sera anexado a CONFIGURE_ARGS. Quando
   a opc,ao OPT nao for selecionada, --disable-valor sera anexado a
   CONFIGURE_ARGS. Um argumento opcional pode ser especificado com um simbolo
   =. Este argumento e apenas anexado na entrada de opc,ao do script
   configure --enable-valor. Por exemplo:

 OPTIONS_DEFINE= OPT1 OPT2
 OPT1_CONFIGURE_ENABLE=  test1 test2
 OPT2_CONFIGURE_ENABLE=  test2=exhaustive

   e equivalente a:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 CONFIGURE_ARGS+=        --enable-test1 --enable-test2
 .else
 CONFIGURE_ARGS+=        --disable-test1 --disable-test2
 .endif

 .if ${PORT_OPTIONS:MOPT2}
 CONFIGURE_ARGS+=        --enable-test2=exhaustive
 .else
 CONFIGURE_ARGS+=        --disable-test2
 .endif

      5.13.3.3.2. OPT_CONFIGURE_WITH

   Quando a opc,ao OPT e selecionada, para cada valor em OPT_CONFIGURE_WITH,
   --with-valor sera anexado a CONFIGURE_ARGS. Quando a opc,ao OPT nao for
   selecionada, --without-valor sera anexado a CONFIGURE_ARGS. Um argumento
   opcional pode ser especificado com um simbolo =. Este argumento e apenas
   anexado na entrada de opc,ao do script configure --with-valor. Por
   exemplo:

 OPTIONS_DEFINE= OPT1 OPT2
 OPT1_CONFIGURE_WITH=    test1
 OPT2_CONFIGURE_WITH=    test2=exhaustive

   e equivalente a:

 OPTIONS_DEFINE= OPT1 OPT2

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 CONFIGURE_ARGS+=        --with-test1
 .else
 CONFIGURE_ARGS+=        --without-test1
 .endif

 .if ${PORT_OPTIONS:MOPT2}
 CONFIGURE_ARGS+=        --with-test2=exhaustive
 .else
 CONFIGURE_ARGS+=        --without-test2
 .endif

      5.13.3.3.3. OPT_CONFIGURE_ON e OPT_CONFIGURE_OFF

   Quando a opc,ao OPT e selecionada, o valor de OPT_CONFIGURE_ON, se
   definido, e anexado a CONFIGURE_ARGS. OPT_CONFIGURE_OFF funciona da mesma
   maneira, quando OPTnao for selecionada. Por exemplo:

 OPTIONS_DEFINE= OPT1
 OPT1_CONFIGURE_ON=      --add-test
 OPT1_CONFIGURE_OFF=     --no-test

   e equivalente a:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 CONFIGURE_ARGS+=        --add-test
 .else
 CONFIGURE_ARGS+=        --no-test
 .endif

  Dica:

   Na maioria das vezes, os assistentes em Sec,ao 5.13.3.3.1,
   "OPT_CONFIGURE_ENABLE" e Sec,ao 5.13.3.3.2, "OPT_CONFIGURE_WITH" fornecem
   uma funcionalidade mais curta e abrangente.

    5.13.3.4. Assistentes CMAKE_ARGS

      5.13.3.4.1. OPT_CMAKE_ON e OPT_CMAKE_OFF

   Quando a opc,ao OPT e selecionada, o valor de OPT_CMAKE_ON, se definido, e
   anexado a CMAKE_ARGS. OPT_CMAKE_OFF funciona da mesma maneira, mas quando
   OPT nao for selecionada. Por exemplo:

 OPTIONS_DEFINE= OPT1
 OPT1_CMAKE_ON=  -DTEST:BOOL=true -DDEBUG:BOOL=true
 OPT1_CMAKE_OFF= -DOPTIMIZE:BOOL=true

   e equivalente a:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 CMAKE_ARGS+=    -DTEST:BOOL=true -DDEBUG:BOOL=true
 .else
 CMAKE_ARGS+=    -DOPTIMIZE:BOOL=true
 .endif

  Dica:

   Veja Sec,ao 5.13.3.4.2, "OPT_CMAKE_BOOL e OPT_CMAKE_BOOL_OFF" para um
   assistente mais curto quando o valor for booleano.

      5.13.3.4.2. OPT_CMAKE_BOOL e OPT_CMAKE_BOOL_OFF

   Quando a opc,ao OPT e selecionada, para cada valor em OPT_CMAKE_BOOL,
   -Dvalor:BOOL=true sera anexado a CMAKE_ARGS. Quando a opc,ao OPT nao for
   selecionada, -Dvalor:BOOL=false sera anexado a CONFIGURE_ARGS. O
   OPT_CMAKE_BOOL_OFF e o oposto, -Dvalor:BOOL=false sera anexado a
   CMAKE_ARGS quando a opc,ao e selecionada, e a entrada -Dvalor:BOOL=true
   quando a opc,ao nao for selecionada. Por exemplo:

 OPTIONS_DEFINE= OPT1
 OPT1_CMAKE_BOOL=        TEST DEBUG
 OPT1_CMAKE_BOOL_OFF=    OPTIMIZE

   e equivalente a:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 CMAKE_ARGS+=    -DTEST:BOOL=true -DDEBUG:BOOL=true \
                 -DOPTIMIZE:BOOL=false
 .else
 CMAKE_ARGS+=    -DTEST:BOOL=false -DDEBUG:BOOL=false \
                 -DOPTIMIZE:BOOL=true
 .endif

    5.13.3.5. Assistentes MESON_ARGS

      5.13.3.5.1. OPT_MESON_ON e OPT_MESON_OFF

   Quando a opc,ao OPT e selecionada, o valor de OPT_MESON_ON, se definido, e
   anexado a MESON_ARGS. OPT_MESON_OFF funciona da mesma maneira, quando OPT
   nao for selecionada. Por exemplo:

 OPTIONS_DEFINE= OPT1
 OPT1_MESON_ON=  -Dopt=1
 OPT1_MESON_OFF= -Dopt=2

   e equivalente a:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 MESON_ARGS+=    -Dopt=1
 .else
 MESON_ARGS+=    -Dopt=2
 .endif

      5.13.3.5.2. OPT_MESON_TRUE e OPT_MESON_FALSE

   Quando a opc,ao OPT e selecionada, para cada valor em OPT_MESON_TRUE,
   -Dvalor=true sera anexado a MESON_ARGS. Quando a opc,ao OPT nao for
   selecionada, -Dvalor=false sera anexado a MESON_ARGS. O OPT_MESON_FALSE e
   o oposto, a entrada -Dvalor=false sera anexado a MESON_ARGS quando a
   opc,ao for selecionada e a entrada -Dvalor=true quando a opc,ao nao for
   selecionada. Por exemplo:

 OPTIONS_DEFINE= OPT1
 OPT1_MESON_TRUE=        test debug
 OPT1_MESON_FALSE=       optimize

   e equivalente a:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 MESON_ARGS+=    -Dtest=true -Ddebug=true \
                 -Doptimize=false
 .else
 MESON_ARGS+=    -Dtest=false -Ddebug=false \
                 -Doptimize=true
 .endif

      5.13.3.5.3. OPT_MESON_YES e OPT_MESON_NO

   Quando a opc,ao OPT e selecionada, para cada entrada dentro da variavel
   OPT_MESON_YES a entrada -D=yes e anexada a variavel MESON_ARGS. Quando a
   opc,ao OPTnao e selecionada, entao a entrada -D=no e anexada a variavel
   MESON_ARGS. O OPT_MESON_NO e o oposto, a entrada -D=no e anexada a
   variavel MESON_ARGS quando a opc,ao e selecionada e a entrada -D=yes
   quando a opc,ao nao e selecionada. Por exemplo:

 OPTIONS_DEFINE= OPT1
 OPT1_MESON_YES= test debug
 OPT1_MESON_NO=  optimize

   e equivalente a:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 MESON_ARGS+=    -Dtest=yes -Ddebug=yes \
                 -Doptimize=no
 .else
 MESON_ARGS+=    -Dtest=no -Ddebug=no \
                 -Doptimize=yes
 .endif

      5.13.3.5.4. OPT_MESON_ENABLED e OPT_MESON_DISABLED

   Quando a opc,ao OPT e selecionada, para cada valor em OPT_MESON_ENABLED,
   -Dvalor=enabled sera anexado a MESON_ARGS. Quando a opc,ao OPT nao for
   selecionada, -Dvalor=disabled sera anexado a MESON_ARGS. O
   OPT_MESON_DISABLED e o oposto, a entrada -Dvalor=disabled sera anexado a
   MESON_ARGS quando a opc,ao for selecionada e a entrada -Dvalor=enabled
   quando a opc,ao nao for selecionada. Por exemplo:

 OPTIONS_DEFINE= OPT1
 OPT1_MESON_ENABLED=     test
 OPT1_MESON_DISABLED=    debug

   e equivalente a:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 MESON_ARGS+=    -Dtest=enabled -Ddebug=disabled
 .else
 MESON_ARGS+=    -Dtest=disabled -Ddebug=enabled
 .endif

    5.13.3.6. OPT_QMAKE_ON e OPT_QMAKE_OFF

   Quando a opc,ao OPT e selecionada, o valor de OPT_QMAKE_ON, se definido, e
   anexado a QMAKE_ARGS. OPT_QMAKE_OFF funciona da mesma maneira, quando OPT
   nao for selecionada. Por exemplo:

 OPTIONS_DEFINE= OPT1
 OPT1_QMAKE_ON=  -DTEST:BOOL=true
 OPT1_QMAKE_OFF= -DPRODUCTION:BOOL=true

   e equivalente a:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 QMAKE_ARGS+=    -DTEST:BOOL=true
 .else
 QMAKE_ARGS+=    -DPRODUCTION:BOOL=true
 .endif

    5.13.3.7. OPT_IMPLIES

   Fornece uma maneira de adicionar dependencias entre as opc,oes.

   Quando OPT for selecionada, todas as opc,oes listadas nesta variavel
   tambem serao selecionadas. Usando o OPT_CONFIGURE_ENABLE descrito
   anteriormente para demonstrar:

 OPTIONS_DEFINE= OPT1 OPT2
 OPT1_IMPLIES=   OPT2

 OPT1_CONFIGURE_ENABLE=  opt1
 OPT2_CONFIGURE_ENABLE=  opt2

   E equivalente a:

 OPTIONS_DEFINE= OPT1 OPT2

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 CONFIGURE_ARGS+=        --enable-opt1
 .else
 CONFIGURE_ARGS+=        --disable-opt1
 .endif

 .if ${PORT_OPTIONS:MOPT2} || ${PORT_OPTIONS:MOPT1}
 CONFIGURE_ARGS+=        --enable-opt2
 .else
 CONFIGURE_ARGS+=        --disable-opt2
 .endif

   Exemplo 5.44. Uso Simples de OPT_IMPLIES

   Este port tem uma opc,ao X11 e uma opc,ao GNOME que precisa da opc,ao X11
   selecionada para poder compilar.

 OPTIONS_DEFINE= X11 GNOME
 OPTIONS_DEFAULT=        X11

 X11_USES=       xorg
 X11_USE=        xorg=xi,xextproto
 GNOME_USE=      gnome=gtk30
 GNOME_IMPLIES=  X11

    5.13.3.8. OPT_PREVENTS e OPT_PREVENTS_MSG

   Fornece uma maneira de adicionar conflitos entre as opc,oes.

   Quando OPT for selecionada, todas as opc,oes listadas em OPT_PREVENTS
   devem estar desmarcadas. Se OPT_PREVENTS_MSG estiver definido e um
   conflito for acionado, seu conteudo sera exibido explicando o por que do
   conflito. Por exemplo:

 OPTIONS_DEFINE= OPT1 OPT2
 OPT1_PREVENTS=  OPT2
 OPT1_PREVENTS_MSG=      OPT1 and OPT2 enable conflicting options

   E aproximadamente equivalente a:

 OPTIONS_DEFINE= OPT1 OPT2

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT2} && ${PORT_OPTIONS:MOPT1}
 BROKEN= Option OPT1 conflicts with OPT2 (select only one)
 .endif

   A unica diferenc,a e que o primeiro ira apresentar um erro depois de
   executar make config, sugerindo alterar as opc,oes selecionadas.

   Exemplo 5.45. Uso Simples de OPT_PREVENTS

   Este port tem as opc,oes X509 e SCTP. Ambas as opc,oes adicionam patches,
   mas os patches entram em conflito uns com os outros, entao eles nao podem
   ser selecionados ao mesmo tempo.

 OPTIONS_DEFINE= X509 SCTP

 SCTP_PATCHFILES=        ${PORTNAME}-6.8p1-sctp-2573.patch.gz:-p1
 SCTP_CONFIGURE_WITH=    sctp

 X509_PATCH_SITES=       http://www.roumenpetrov.info/openssh/x509/:x509
 X509_PATCHFILES=        ${PORTNAME}-7.0p1+x509-8.5.diff.gz:-p1:x509
 X509_PREVENTS=          SCTP
 X509_PREVENTS_MSG=      X509 and SCTP patches conflict

    5.13.3.9. OPT_VARS e OPT_VARS_OFF

   Fornece uma maneira generica de definir e acrescentar valores em
   variaveis.

  Atenc,ao:

   Antes de usar OPT_VARS e OPT_VARS_OFF, veja se ja nao existe um assistente
   mais especifico disponivel em Sec,ao 5.13.3.11, "Substituic,ao de
   Variaveis &#8203;&#8203;Genericas, OPT_VARIABLE e OPT_VARIABLE_OFF".

   Quando a opc,ao OPT esta selecionada e OPT_VARS definido, os pares
   chave=valor e chave+=valor sao avaliados a partir da variavel OPT_VARS. Um
   = sobrescreve o valor existente da CHAVE, um += acrescenta o valor a
   chave. OPT_VARS_OFF funciona da mesma maneira, quando a opc,ao OPT nao for
   selecionada.

 OPTIONS_DEFINE= OPT1 OPT2 OPT3
 OPT1_VARS=      also_build+=bin1
 OPT2_VARS=      also_build+=bin2
 OPT3_VARS=      bin3_build=yes
 OPT3_VARS_OFF=  bin3_build=no

 MAKE_ARGS=      ALSO_BUILD="${ALSO_BUILD}" BIN3_BUILD="${BIN3_BUILD}"

   e equivalente a:

 OPTIONS_DEFINE= OPT1 OPT2

 MAKE_ARGS=      ALSO_BUILD="${ALSO_BUILD}" BIN3_BUILD="${BIN3_BUILD}"

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 ALSO_BUILD+=    bin1
 .endif

 .if ${PORT_OPTIONS:MOPT2}
 ALSO_BUILD+=    bin2
 .endif

 .if ${PORT_OPTIONS:MOPT2}
 BIN3_BUILD=     yes
 .else
 BIN3_BUILD=     no
 .endif

  Importante:

   Valores contendo espac,os em branco devem ser colocados entre aspas:

 OPT_VARS=       foo="bar baz"

   Isso se deve ao jeito que a variavel de expansao make(1) lida com espac,o
   em branco. Quando a opc,ao OPT_VARS=foo=bar baz e expandida, a variavel
   acaba contendo duas strings, foo=bar e baz. Mas quem esta submetendo o
   codigo provavelmente pretendia que houvesse apenas uma string, foo=bar
   baz. Inserir o valor entre aspas impede que o espac,o em branco seja usado
   como um delimitador.

   Alem disso, nao adicione espac,os extras apos o simbolo var= e antes do
   valor, pois assim tambem seria dividido o valor em duas strings. Isso nao
   ira funcionar:

 OPT_VARS=       foo=    bar

    5.13.3.10. Dependencias, OPT_DEPTYPE e OPT_DEPTYPE_OFF

   Para qualquer um desses tipos de dependencia:

     * PKG_DEPENDS

     * EXTRACT_DEPENDS

     * PATCH_DEPENDS

     * FETCH_DEPENDS

     * BUILD_DEPENDS

     * LIB_DEPENDS

     * RUN_DEPENDS

   Quando opc,ao OPT e selecionada, o valor de OPT_DEPTYPE, se definido, e
   anexado a DEPTYPE. OPT_DEPTYPE_OFF funciona da mesma forma, quando OPT nao
   for selecionada. Por exemplo:

 OPTIONS_DEFINE= OPT1
 OPT1_LIB_DEPENDS=       liba.so:devel/a
 OPT1_LIB_DEPENDS_OFF=   libb.so:devel/b

   e equivalente a:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 LIB_DEPENDS+=   liba.so:devel/a
 .else
 LIB_DEPENDS+=   libb.so:devel/b
 .endif

    5.13.3.11. Substituic,ao de Variaveis &#8203;&#8203;Genericas, OPT_VARIABLE
    e OPT_VARIABLE_OFF

   Para qualquer uma destas variaveis:

     * ALL_TARGET

     * BINARY_ALIAS

     * BROKEN

     * CATEGORIES

     * CFLAGS

     * CONFIGURE_ENV

     * CONFLICTS

     * CONFLICTS_BUILD

     * CONFLICTS_INSTALL

     * CPPFLAGS

     * CXXFLAGS

     * DESKTOP_ENTRIES

     * DISTFILES

     * EXTRACT_ONLY

     * EXTRA_PATCHES

     * GH_ACCOUNT

     * GH_PROJECT

     * GH_SUBDIR

     * GH_TAGNAME

     * GH_TUPLE

     * GL_ACCOUNT

     * GL_COMMIT

     * GL_PROJECT

     * GL_SITE

     * GL_SUBDIR

     * GL_TUPLE

     * IGNORE

     * INFO

     * INSTALL_TARGET

     * LDFLAGS

     * LIBS

     * MAKE_ARGS

     * MAKE_ENV

     * MASTER_SITES

     * PATCHFILES

     * PATCH_SITES

     * PLIST_DIRS

     * PLIST_FILES

     * PLIST_SUB

     * PORTDOCS

     * PORTEXAMPLES

     * SUB_FILES

     * SUB_LIST

     * TEST_TARGET

     * USES

   Quando a opc,ao OPT e selecionada, o valor da variavel OPT_ABOVEVARIABLE,
   se definido, e anexado a ABOVEVARIABLE. OPT_ABOVEVARIABLE_OFF funciona da
   mesma maneira, quando OPT nao for selecionada. Por exemplo:

 OPTIONS_DEFINE= OPT1
 OPT1_USES=      gmake
 OPT1_CFLAGS_OFF=        -DTEST

   e equivalente a:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 USES+=          gmake
 .else
 CFLAGS+=        -DTEST
 .endif

  Nota:

   Algumas variaveis &#8203;&#8203;nao estao nesta lista, em particular
   PKGNAMEPREFIX e PKGNAMESUFFIX. Isso e intencional. Um port nao deve mudar
   seu nome quando alguma de suas opc,oes forem alteradas.

  Atenc,ao:

   Algumas dessas variaveis, pelo menos ALL_TARGET, DISTFILES e
   INSTALL_TARGET, tem seus valores padrao definidos depois das opc,oes serem
   processadas.

   Com estas linhas no Makefile:

 ALL_TARGET=     all

 DOCS_ALL_TARGET=        doc

   Se a opc,ao DOCS estiver ativada, ALL_TARGET tera o valor all doc; se a
   opc,ao estiver desativada, ela tera o valor all.

   Com apenas a linha do assistente de opc,oes no Makefile:

 DOCS_ALL_TARGET=        doc

   Se a opc,ao DOCS estiver ativada, ALL_TARGET tera o valor doc; se a opc,ao
   estiver desativada, ela tera o valor all.

    5.13.3.12. Targets Adicionais de Compilac,ao, target-OPT-on e target-OPT-off

   Estes targets de Makefile podem aceitar targets extras de compilac,ao:

     * pre-fetch

     * do-fetch

     * post-fetch

     * pre-extract

     * do-extract

     * post-extract

     * pre-patch

     * do-patch

     * post-patch

     * pre-configure

     * do-configure

     * post-configure

     * pre-build

     * do-build

     * post-build

     * pre-install

     * do-install

     * post-install

     * post-stage

     * pre-package

     * do-package

     * post-package

   Quando a opc,ao OPT e selecionada, o target TARGET-OPT-on, se definido, e
   executado apos TARGET. TARGET-OPT-off funciona da mesma maneira, quando
   OPT nao for selecionada. Por exemplo:

 OPTIONS_DEFINE= OPT1

 post-patch-OPT1-on:
         @${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${EXAMPLESDIR}/|' ${WRKSRC}/Makefile

 post-patch-OPT1-off:
         @${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${PREFIX}/bin/|' ${WRKSRC}/Makefile

   e equivalente a:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 post-patch:
 .if ${PORT_OPTIONS:MOPT1}
         @${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${EXAMPLESDIR}/|' ${WRKSRC}/Makefile
 .else
         @${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${PREFIX}/bin/|' ${WRKSRC}/Makefile
 .endif

5.14. Especificando o Diretorio de Trabalho

   Cada port e extraido em um diretorio de trabalho, que deve ter permissao
   de escrita. O sistema de ports tem por padrao os DISTFILES descompactado
   em um diretorio chamado ${DISTNAME}. Em outras palavras, se o Makefile
   tem:

 PORTNAME=       foo
 DISTVERSION=    1.0

   entao os arquivos de distribuic,ao do port contem um diretorio de nivel
   superior, foo-1.0, e o resto dos arquivos estao localizados nesse
   diretorio.

   Diversas variaveis &#8203;&#8203;podem ser substituidas se nao for esse o
   caso.

  5.14.1. WRKSRC

   A variavel lista o nome do diretorio que e criado quando os distfiles do
   aplicativo sao extraidos. Se o exemplo anterior for extraido em um
   diretorio chamado foo (e nao foo-1.0) escreva:

 WRKSRC= ${WRKDIR}/foo

   ou possivelmente

 WRKSRC= ${WRKDIR}/${PORTNAME}

  5.14.2. WRKSRC_SUBDIR

   Se o codigo fonte necessario para o port estiver em um subdiretorio do
   arquivo de distribuic,ao extraido, defina WRKSRC_SUBDIR para esse
   diretorio.

 WRKSRC_SUBDIR=  src

  5.14.3. NO_WRKSUBDIR

   Se o port nao extrair para nenhum subdiretorio, entao configure
   NO_WRKSUBDIR para indicar isso.

 NO_WRKSUBDIR=   yes

  Nota:

   Porque WRKDIR e o unico diretorio que deve ter permissao de escrita
   durante a compilac,ao e e usado para armazenar muitos arquivos que
   registram o status da compilac,ao, a extrac,ao do port sera forc,ada para
   um subdiretorio.

5.15. Manipulando Conflitos

   Existem tres variaveis &#8203;&#8203;diferentes para registrar um conflito
   entre pacotes e ports: CONFLICTS, CONFLICTS_INSTALL e CONFLICTS_BUILD.

  Nota:

   As variaveis &#8203;&#8203;de conflito definem automaticamente a variavel
   IGNORE, que e mais amplamente documentada em Sec,ao 13.13, "Marcando um
   Port nao Instalavel com a variavel BROKEN, FORBIDDEN ou IGNORE".

   Ao remover um dos varios ports conflitados, e aconselhavel reter CONFLICTS
   nos outros ports por alguns meses para atender usuarios que apenas fazem
   atualizac,oes de vez em quando.

   CONFLICTS_INSTALL

           Se o pacote nao puder coexistir com outros pacotes (devido a
           conflitos de arquivos, incompatibilidades de tempo de execuc,ao,
           etc.). A checagem CONFLICTS_INSTALL e feita apos o estagio de
           compilac,ao e antes do estagio de instalac,ao.

   CONFLICTS_BUILD

           Se o port nao puder ser compilado quando outros ports especificos
           ja estiverem instalados. Conflitos de compilac,ao nao serao
           registrados no pacote final.

   CONFLICTS

           Se o port nao puder ser compilado quando um certo port estiver
           instalado e o pacote final nao puder coexistir com o outro pacote.
           A checagem CONFLICTS e feita antes do estagio de compilac,ao e
           antes do estagio de instalac,ao.

   O conteudo mais comum de uma dessas variaveis &#8203;&#8203;e o pacote
   base de outro port. O pacote base e o nome do pacote sem a versao, ele
   pode ser obtido executando make -V PKGBASE.

   Exemplo 5.46. Uso basico de CONFLICTS*

   dns/bind99 nao pode ser instalado se dns/bind910 esta presente porque eles
   instalam os mesmos arquivos. Primeiro, reuna o pacote base para usar:

 % make -C dns/bind99 -V PKGBASE
 bind99
 % make -C dns/bind910 -V PKGBASE
 bind910

   Entao adicione ao Makefile do dns/bind99:

 CONFLICTS_INSTALL=      bind910

   E adicione ao Makefile do dns/bind910:

 CONFLICTS_INSTALL=      bind99

   As vezes, apenas uma versao de outro port e incompativel, neste caso, use
   o nome completo do pacote, com a versao, e use shell globs, como * e ?
   para garantir que todas as versoes possiveis sejam correspondidas.

   Exemplo 5.47. Usando CONFLICTS* Com Globs.

   Nas versoes 2.0 ate 2.4.1_2, deskutils/gnotime instalava uma versao
   integrada de databases/qof.

   Para refletir este passado, o Makefile do database/qof contem:

 CONFLICTS_INSTALL=      gnotime-2.[0-3]* \
                         gnotime-2.4.0* gnotime-2.4.1 \
                         gnotime-2.4.1_[12]

   As primeira entrada corresponde as versoes 2.0 ate 2.3, a segunda
   corresponde todas as revisoes de 2.4.0, a terceira corresponde a versao
   exata 2.4.1, e a ultima corresponde a primeira e segunda revisao da versao
   2.4.1.

   deskutils/gnotime nao possui nenhuma linha de conflitos porque sua versao
   atual nao conflita com mais nada.

5.16. Instalando Arquivos

  Importante:

   O estagio install e muito importante para o usuario final porque ele
   adiciona arquivos ao sistema. Todos os comandos adicionais de estagios
   *-install dos Makefile's de port devem ser mostrados na tela. Nao silencie
   esses comandos com @ ou .SILENT.

  5.16.1. Macros INSTALL_*

   Use as macros fornecidas em bsd.port.mk para garantir a propriedade
   correta dos arquivos nos targets *-install do port. Defina a propriedade
   diretamente em pkg-plist com as entradas correspondentes, como
   @(owner,group,), @owner owner, e @group group. Esses operadores funcionam
   ate serem substituidos, ou ate o final do pkg-plist, lembre-se de
   redefini-los depois que eles nao forem mais necessarios. O valor de
   propriedade padrao e root:wheel. Veja Sec,ao 8.6.13, "Keywords Basicas"
   para maiores informac,oes.

     * INSTALL_PROGRAM e um comando para instalar executaveis
       &#8203;&#8203;binarios.

     * INSTALL_SCRIPT e um comando para instalar scripts executaveis.

     * INSTALL_LIB e um comando para instalar bibliotecas compartilhadas (mas
       nao bibliotecas estaticas).

     * INSTALL_KLD e um comando para instalar modulos carregaveis
       &#8203;&#8203;do kernel. Algumas arquiteturas nao gostam de ter os
       modulos otimizados (stripped), entao use este comando em vez de
       INSTALL_PROGRAM.

     * INSTALL_DATA e um comando para instalar dados compartilhaveis,
       incluindo bibliotecas estaticas.

     * INSTALL_MAN e um comando para instalar manpages e outras
       documentac,oes (ele nao realiza nenhuma compactac,ao).

   Estas variaveis &#8203;&#8203;parametrizam o comando install(1) com as
   flags apropriadas para cada situac,ao.

  Importante:

   Nao use INSTALL_LIB para instalar bibliotecas estaticas, porque
   otimiza-las (strip) torna-as sem utilidade. Use INSTALL_DATA neste caso.

  5.16.2. Otimizando (Stripping) Binarios e Bibliotecas Compartilhadas

   Os binarios instalados devem ser otimizados (stripped). Nao otimize
   (strip) os binarios manualmente, a menos que seja absolutamente
   necessario. A macro INSTALL_PROGRAM instala e otimiza (strip) o binario ao
   mesmo tempo. A macro INSTALL_LIB faz o mesmo com as bibliotecas
   compartilhadas.

   Quando um arquivo deve ser otimizado (stripped), mas as macros
   INSTALL_PROGRAM e INSTALL_LIB nao sao desejadas, ${STRIP_CMD} otimiza
   (strips) o programa ou a biblioteca compartilhada. Isso geralmente e feito
   no target post-install. Por exemplo:

 post-install:
         ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/xdl

   Quando varios arquivos precisam ser otimizados (stripped):

 post-install:
 .for l in geometry media body track world
         ${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/lib${PORTNAME}-${l}.so.0
 .endfor

   Use file(1) em um arquivo para determinar se ele foi otimizado (stripped).
   Binarios sao relatados por file(1) como stripped ou not stripped. Alem
   disso,strip(1) ira detectar programas que ja foram otimizados (stripped) e
   retornar o comando sem erros.

  Importante:

   Quando WITH_DEBUG estiver definido, os arquivos elf nao devem ser
   otimizados (stripped).

   As variaveis &#8203;&#8203;(STRIP_CMD, INSTALL_PROGRAM, INSTALL_LIB, ...)
   e USES fornecidas pelo framework lidam com isso automaticamente.

   Alguns softwares, adicionam -s em seus LDFLAGS, neste caso, ou remova o -s
   se WITH_DEBUG estiver definido, ou remova o incondicionalmente e use
   STRIP_CMD em post-install.

  5.16.3. Instalando uma Arvore Inteira de Arquivos

   As vezes, um grande numero de arquivos devem ser instalados preservando
   sua organizac,ao hierarquica. Por exemplo, copiando de uma arvore de
   diretorios inteira do WRKSRC para um diretorio de destino sob PREFIX.
   Observe que PREFIX, EXEMPLESDIR, DATADIR e outras variaveis
   &#8203;&#8203;de caminho sempre devem ser precedidas por STAGEDIR para
   respeitar o staging (ver Sec,ao 6.1, "Staging").

   Existem duas macros para essa situac,ao. A vantagem de usar essas macros
   em vez de cp e que elas garantem a propriedade e permissao adequada dos
   arquivos nos arquivos de destino. A primeira macro, COPYTREE_BIN, ira
   definir todos os arquivos instalados como sendo executaveis, sendo assim,
   adequado para instalac,oes em PREFIX/bin. A segunda macro,COPYTREE_SHARE,
   nao define permissoes de execuc,ao nos arquivos e, portanto, e adequado
   para instalar arquivos sob o destino PREFIX/share.

 post-install:
         ${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
         (cd ${WRKSRC}/examples && ${COPYTREE_SHARE} .${STAGEDIR}${EXAMPLESDIR})

   Este exemplo ira instalar o conteudo do diretorio exemples do distfile do
   fornecedor para o local de exemplos apropriado do port.

 post-install:
         ${MKDIR} ${STAGEDIR}${DATADIR}/summer
         (cd ${WRKSRC}/temperatures && ${COPYTREE_SHARE} "June July August" ${STAGEDIR}${DATADIR}/summer)

   E este exemplo ira instalar os dados dos meses de verao no subdiretorio
   summer de um DATADIR.

   Argumentos find adicionais podem ser passados atraves do terceiro
   argumento para COPYTREE_*. Por exemplo, para instalar todos os arquivos do
   primeiro exemplo, exceto Makefiles, e possivel usar esses comandos.

 post-install:
         ${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
         (cd ${WRKSRC}/examples && \
         ${COPYTREE_SHARE} .${STAGEDIR}${EXAMPLESDIR} "! -name Makefile")

   Essas macros nao adicionam os arquivos instalados em pkg-plist. Eles devem
   ser adicionados manualmente. Para documentac,ao opcional (PORTDOCS, veja
   Sec,ao 5.16.4, "Instalar Documentac,ao Adicional") e exemplos
   (PORTEXAMPLES), os prefixos %%PORTDOCS%% ou %%PORTEXAMPLES%% devem ser
   prefixados no pkg-plist.

  5.16.4. Instalar Documentac,ao Adicional

   Se o software tiver alguma documentac,ao diferente do manual padrao e
   paginas de informac,oes uteis para o usuario, instale-os em DOCSDIR. Isso
   pode ser feito como no item anterior, no target post-install.

   Crie um novo diretorio para o port. O nome do diretorio e DOCSDIR. Isso
   geralmente e igual a PORTNAME. No entanto, se o usuario desejar que
   versoes diferentes do port sejam instaladas ao mesmo tempo, PKGNAME pode
   ser usado.

   Ja que apenas os arquivos listados no pkg-plist sao instalados, e seguro
   sempre instalar documentac,oes no STAGEDIR (veja Sec,ao 6.1, "Staging").
   Por isso, blocos .if sao necessarios apenas quando os arquivos forem
   grandes o suficiente para causarem sobrecarga significativa de I/O.

 post-install:
         ${MKDIR} ${STAGEDIR}${DOCSDIR}
         ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${STAGEDIR}${DOCSDIR}

   Por outro lado, se houver uma opc,ao DOCS no port, instale a documentac,ao
   em um taget post-install-DOCS-on. Esses targets sao descritos em
   Sec,ao 5.13.3.12, "Targets Adicionais de Compilac,ao, target-OPT-on e
   target-OPT-off".

   Aqui estao algumas variaveis uteis e como elas sao expandidas por padrao
   quando usadas no Makefile:

     * DATADIR e expandido para PREFIX/share/PORTNAME.

     * DATADIR_REL e expandido para share/PORTNAME.

     * DOCSDIR e expandido para PREFIX/share/doc/PORTNAME.

     * DOCSDIR_REL e expandido para share/doc/PORTNAME.

     * EXEMPLESDIR e expandido para PREFIX/share/examples/PORTNAME.

     * EXAMPLESDIR_REL e expandido para share/examples/PORTNAME.

  Nota:

   A opc,ao DOCS controla apenas a documentac,ao adicional instalada em
   DOCSDIR. Nao se aplica a paginas de manual e paginas de informac,oes
   padrao. Arquivos instalados em EXEMPLESDIR sao controlados pela opc,ao
   EXEMPLES.

   Essas variaveis sao exportadas para PLIST_SUB. Quando possivel, seus
   valores aparecerao como nomes de caminho relativos ao PREFIX. Isso e, por
   padrao share/doc/PORTNAME sera substituido por %%DOCSDIR%% na lista de
   empacotamento e assim por diante. (Saiba mais sobre substituic,oes
   pkg-plist aqui.)

   Todos os arquivos e diretorios de documentac,ao instalados
   condicionalmente sao incluidos no pkg-plist com o prefixo %%PORTDOCS%%,
   por exemplo:

 %%PORTDOCS%%%%DOCSDIR%%/AUTHORS
 %%PORTDOCS%%%%DOCSDIR%%/CONTACT

   Como uma alternativa para listar os arquivos de documentac,ao em
   pkg-plist, um port pode definir a variavel PORTDOCS com uma lista de nomes
   de arquivo e padroes shell glob para adicionar `a lista de empacotamento
   final. Os nomes serao relativos a DOCSDIR. Portanto, um port que utiliza
   PORTDOCS e usa um local nao padrao para sua documentac,ao, deve definir
   DOCSDIR adequadamente. Se um diretorio estiver listado em PORTDOCS ou ser
   correspondido por um padrao glob dessa variavel, toda a sub arvore de
   arquivos e diretorios contidos serao registrados na lista final de
   empacotamento. Se a opc,ao DOCS estiver desmarcada, os arquivos e
   diretorios listados em PORTDOCS nao serao instalados ou adicionados `a
   lista de empacotamento do port. A instalac,ao da documentac,ao em PORTDOCS
   como mostrado acima fica a cargo do port. Um exemplo tipico de utilizac,ao
   PORTDOCS:

 PORTDOCS=       README.* ChangeLog docs/*

  Nota:

   O equivalente de PORTDOCS para arquivos instalados em DATADIR e
   EXEMPLESDIR sao PORTDATA e PORTEXAMPLES, respectivamente.

   O conteudo de pkg-message e exibido na instalac,ao. Veja a sec,ao sobre o
   uso do pkg-message para mais detalhes. pkg-message nao precisa ser
   adicionado ao pkg-plist.

  5.16.5. Subdiretorios Sob PREFIX

   Tente deixar o port colocar os arquivos nos subdiretorios corretos de
   PREFIX. Alguns ports juntam tudo e colocam os arquivos em um subdiretorio
   com o nome do port, o que e incorreto. Alem disso, muitos ports colocam
   todos arquivos, exceto binarios, arquivos header e paginas de manual, em
   um subdiretorio de lib, o que nao funciona bem com o paradigma BSD. Muitos
   dos arquivos devem ser movidos para um desses diretorios:
   etc(setup/arquivos de configurac,ao), libexec (executaveis
   &#8203;&#8203;iniciados internamente), sbin (executaveis
   &#8203;&#8203;para super-usuarios/gerentes), info (documentac,ao para o
   navegador de informac,oes) ou share (arquivos independentes de
   arquitetura). Veja hier(7) para detalhes; as regras que regem /usr
   praticamente se aplicam a /usr/local tambem. A excec,ao sao os ports que
   lidam com "noticias" USENET. Eles podem usar PREFIX/news como um destino
   para seus arquivos.

5.17. Use BINARY_ALIAS para Renomear Comandos Em Vez de Aplicar Patch na
Compilac,ao

   Quando BINARY_ALIAS e definido, ele criara links simbolicos dos comandos
   fornecidos, em um diretorio que sera prefixado para o PATH.

   Use-o para substituir comandos codificados na fase de compilac,ao sem ter
   aplicar nenhum patch nos arquivos de compilac,ao.

   Exemplo 5.48. Usando BINARY_ALIAS para Deixar gsed Disponivel como sed

   Alguns ports esperam que o sed se comporte como o GNU sed e utilizam
   recursos que o sed(1) nao possui. GNU sed esta disponivel em textproc/gsed
   no FreeBSD.

   Use BINARY_ALIAS para substituir sed com gsed durante a compilac,ao:

 BUILD_DEPENDS=  gsed:textproc/gsed
 ...
 BINARY_ALIAS=   sed=gsed

   Exemplo 5.49. Usando BINARY_ALIAS Para Fornecer Aliases para Comandos
   python3 Codificado

   Um port que possui uma referencia codificada para python3 em seus scripts
   de compilac,ao precisara ter ele disponivel no PATH em tempo de
   compilac,ao. Use BINARY_ALIAS para criar um alias que aponte para o
   binario certo do Python 3:

 USES=   python:3.4+,build
 ...
 BINARY_ALIAS=   python3=${PYTHON_CMD}

   Veja Sec,ao 6.17, "Usando Python" para mais informac,oes sobre
   USES=python.

  Nota:

   Aliases binarios sao criados apos as dependencias fornecidas via
   BUILD_DEPENDS e LIB_DEPENDS serem processadas e antes do target configure.
   Isso leva a varias limitac,oes. Por exemplo, os programas instalados via
   TEST_DEPENDS nao podem ser usados para criar um alias binario, pois as
   dependencias de teste especificadas desta forma sao processadas apos a
   criac,ao dos aliases binarios.

                      Capitulo 6. Considerac,oes Especiais

   Indice

   6.1. Staging

   6.2. Bibliotecas Empacotadas (Bundled)

   6.3. Bibliotecas Compartilhadas

   6.4. Ports com Restric,oes de Distribuic,ao ou Preocupac,oes Legais

   6.5. Mecanismos de Compilac,ao

   6.6. Usando o GNU Autotools

   6.7. Usando o GNU gettext

   6.8. Usando Perl

   6.9. Usando o X11

   6.10. Usando o GNOME

   6.11. Componentes GNOME

   6.12. Usando o Qt

   6.13. Usando o KDE

   6.14. Usando o LXQt

   6.15. Usando Java

   6.16. Aplicac,oes Web, Apache e PHP

   6.17. Usando Python

   6.18. Usando Tcl/Tk

   6.19. Usando Ruby

   6.20. Usando SDL

   6.21. Usando wxWidgets

   6.22. Usando Lua

   6.23. Usando iconv

   6.24. Usando o Xfce

   6.25. Usando Bancos de Dados

   6.26. Iniciando e Parando Servic,os (com scripts rc)

   6.27. Adicionando Usuarios e Grupos

   6.28. Ports que Dependem dos Fontes do kernel

   6.29. Bibliotecas Go

   6.30. Bibliotecas Haskell

   6.31. Arquivos Shell Completion

   Esta sec,ao explica as coisas mais comuns a se considerar ao criar um
   port.

6.1. Staging

   bsd.port.mk espera que os ports trabalhem com um "stage directory". Isso
   significa que um port nao deve instalar arquivos diretamente nos
   diretorios de destino regulares (isto e, sob o PREFIX, por exemplo), mas
   em um diretorio separado a partir do qual o pacote sera construido. Em
   muitos casos, isso nao requer privilegios de root, tornando possivel criar
   pacotes como um usuario nao privilegiado. Com o staging, o port e
   compilado e instalado no diretorio sde estagio, STAGEDIR. Um pacote e
   criado a partir do diretorio de estagio e, em seguida, instalado no
   sistema. As ferramentas Automake referem-se a este conceito como DESTDIR,
   mas no FreeBSD, DESTDIR tem um significado diferente (veja Sec,ao 10.4,
   "PREFIX e DESTDIR").

  Nota:

   Nenhum port realmente precisa de root. Ele pode ser evitado principalmente
   usando USES=uidfix. Se o port ainda executa comandos como chown(8),
   chgrp(1) ou forc,a o proprietario ou grupo com install(1) entao use
   USES=fakeroot para enganar essas chamadas. Algumas modificac,oes no
   Makefile do port serao necessarias.

   Os meta ports, ou ports que nao instalam arquivos por si mesmos e apenas
   dependem de outros ports, devem evitar extrair desnecessariamente mtree(8)
   para o diretorio de estagio. Este e o layout basico do diretorio do
   pacote, e estes diretorios vazios serao vistos como orfaos. Para prevenir
   extrac,ao do mtree(8), adicione esta linha:

 NO_MTREE=       yes

  Dica:

   Metaports devem usar USES=metaport. Ele configura padroes para ports que
   nao baixam, criam ou instalam nada.

   Staging e ativado pre-fixando a variavel STAGEDIR para caminhos usados
   &#8203;&#8203;nos targets pre-install, do-install e post-install (veja os
   exemplos no livro). Normalmente, isso inclui as variaveis PREFIX, ETCDIR,
   DATADIR, EXEMPLESDIR, MANPREFIX, DOCSDIR, e assim por diante. Os
   diretorios devem ser criados como parte do target post-install. Evite usar
   caminhos absolutos sempre que possivel.

  Dica:

   Ports que instalam modulos do kernel devem preceder a variavel STAGEDIR em
   seus destinos, padrao /boot/modules.

  6.1.1. Lidando com Links Simbolicos

   Ao criar um link simbolico, os links relativos sao fortemente
   recomendados. Use ${RLN} para criar links simbolicos relativos. Ele usa o
   install(1) por baixo dos panos para descobrir automaticamente o link
   relativo a ser criado.

   Exemplo 6.1. Crie Links Simbolicos Relativos Automaticamente

   ${RLN} usa o recurso simbolico relativo do install(1) que libera o
   mantenedor do port de computar o caminho relativo.

 ${RLN} ${STAGEDIR}${PREFIX}/lib/libfoo.so.42 ${STAGEDIR}${PREFIX}/lib/libfoo.so
 ${RLN} ${STAGEDIR}${PREFIX}/libexec/foo/bar ${STAGEDIR}${PREFIX}/bin/bar
 ${RLN} ${STAGEDIR}/var/cache/foo ${STAGEDIR}${PREFIX}/share/foo

   Ira gerar:

 % ls -lF ${STAGEDIR}${PREFIX}/lib
 lrwxr-xr-x  1 nobody  nobody    181 Aug  3 11:27 libfoo.so@ -> libfoo.so.42
 -rwxr-xr-x  1 nobody  nobody     15 Aug  3 11:24 libfoo.so.42*
 % ls -lF ${STAGEDIR}${PREFIX}/bin
 lrwxr-xr-x  1 nobody  nobody    181 Aug  3 11:27 bar@ -> ../libexec/foo/bar
 % ls -lF ${STAGEDIRDIR}${PREFIX}/share
 lrwxr-xr-x  1 nobody  nobody    181 Aug  3 11:27 foo@ -> ../../../var/cache/foo

6.2. Bibliotecas Empacotadas (Bundled)

   Esta sec,ao explica porque as dependencias agrupadas(bundled) sao
   consideradas ruins e o que fazer com elas.

  6.2.1. Por Que as Bibliotecas Agrupadas(Bundled) Sao Ruins

   Alguns softwares requerem que o mantenedor do port localize bibliotecas de
   terceiros e adicione as dependencias necessarias ao port. Outros softwares
   agrupam todas as bibliotecas necessarias no arquivo de distribuic,ao. A
   segunda abordagem parece mais facil no comec,o, mas ha algumas
   desvantagens serias:

   Esta lista e vagamente baseada nas wikis Fedora e Gentoo, ambas
   licenciadas sob CC-BY-SA 3.0.

   Seguranc,a

           Se vulnerabilidades forem encontradas na biblioteca e arrumadas no
           upstream, elas podem nao ser consertadas na biblioteca empacotada
           com o port. Uma razao pode ser que o autor nao esteja ciente do
           problema. Isto significa que o mantenedor do port deve
           conserta-las, ou atualizar para uma versao nao vulneravel e enviar
           um patch para o autor. Isso tudo leva tempo, o que resulta em
           software vulneravel por mais tempo do que o necessario. Isso, por
           sua vez, torna mais dificil coordenar uma correc,ao sem vazamento
           desnecessario de informac,oes sobre a vulnerabilidade.

   Bugs

           Esse problema e semelhante ao problema de seguranc,a no ultimo
           paragrafo, mas geralmente menos grave.

   Forking

           E mais facil para o autor criar um fork da biblioteca depois que
           ela e empacotada. Embora seja conveniente `a primeira vista, isso
           significa que o codigo diverge do upstream, dificultando o
           tratamento da seguranc,a ou outros problemas com o software. A
           razao para isso e que o patching se torna mais dificil.

           Outro problema de forking e que, como o codigo diverge do
           upstream, os bugs sao resolvidos repetidamente em vez de apenas
           uma vez em um local central. Isso, em primeiro lugar, anula a
           ideia de software de codigo aberto.

   Colisao de simbolo

           Quando uma biblioteca e instalada no sistema, ela pode colidir com
           a versao empacotada. Isso pode causar erros imediatos no tempo de
           compilac,ao ou link. Tambem pode causar erros ao executar o
           programa, o que pode ser mais dificil de rastrear. O ultimo
           problema poderia ser causado porque as versoes das duas
           bibliotecas sao incompativeis.

   Licenciamento

           Ao agrupar projetos de diferentes fontes, os problemas de licenc,a
           podem surgir com mais facilidade, especialmente quando as
           licenc,as sao incompativeis.

   Desperdicio de recursos

           Bibliotecas empacotadas desperdic,am recursos em varios niveis.
           Demora mais para compilar o aplicativo real, especialmente se
           essas bibliotecas ja estiverem presentes no sistema. Em tempo de
           execuc,ao, elas podem ocupar memoria desnecessaria quando a
           biblioteca do sistema ja esta carregada por um programa e a
           biblioteca agrupada e carregada por outro programa.

   Desperdicio de esforc,o

           Quando uma biblioteca precisa de patches para o FreeBSD, esses
           patches precisam ser duplicados novamente na biblioteca. Isso
           desperdic,a tempo do desenvolvedor porque os patches podem nao ser
           aplicados de forma limpa. Tambem pode ser dificil perceber que
           estes patches sao necessarios em primeiro lugar.

  6.2.2. O Que Fazer em Relac,ao `as Bibliotecas Agrupadas

   Sempre que possivel, use a versao separada da biblioteca adicionando um
   LIB_DEPENDS para o port. Se esse port ainda nao existir, considere
   cria-lo.

   Use bibliotecas agrupadas somente se o upstream tiver um bom historico de
   seguranc,a e se o uso de versoes nao agrupadas originarem patches
   excessivamente complexos.

  Nota:

   Em alguns casos muito especiais, por exemplo, emuladores, como o Wine, um
   port tem que agrupar bibliotecas, porque elas estao em uma arquitetura
   diferente ou foram modificadas para se adequarem ao uso do software. Nesse
   caso, essas bibliotecas nao devem ser expostas a outros ports para
   vinculac,ao. Adicione BUNDLE_LIBS=yes no Makefile do port. Isso vai dizer
   ao pkg(8) para nao computar as bibliotecas fornecidas. Pergunte sempre `a
   equipe de gerenciamento do ports <portmgr@FreeBSD.org> antes de adicionar
   isso a um port.

6.3. Bibliotecas Compartilhadas

   Se o port instalar uma ou mais bibliotecas compartilhadas, defina a
   variavel USE_LDCONFIG para o make , a qual ira instruir o bsd.port.mk para
   executar o ${LDCONFIG} -m no diretorio onde a nova biblioteca esta
   instalada (geralmente em PREFIX/lib) durante o target post-install para
   registra-la no cache da biblioteca compartilhada. Esta variavel, quando
   definida, tambem facilitara a adic,ao do par @exec /sbin/ldconfig -m e
   @unexec /sbin/ldconfig -R no pkg-plist, para que o usuario que instalou o
   pacote possa comec,ar a usar a biblioteca compartilhada imediatamente e
   para que a desinstalac,ao nao fac,a com que o sistema acredite que a
   biblioteca ainda esta la.

 USE_LDCONFIG=   yes

   O diretorio padrao pode ser substituido configurando a variavel
   USE_LDCONFIG para uma lista de diretorios nos quais as bibliotecas
   compartilhadas devem ser instaladas. Por exemplo, se o port instalar
   bibliotecas compartilhadas em PREFIX/lib/foo e PREFIXO/lib/bar utilize
   isso no Makefile:

 USE_LDCONFIG=   ${PREFIX}/lib/foo ${PREFIX}/lib/bar

   Por favor, verifique novamente, muitas vezes isso nao e necessario ou e
   algo que pode ser evitado atraves do uso da opc,ao -rpath ou da
   configurac,ao da variavel LD_RUN_PATH durante a fase de vinculac,ao
   (consulte lang/mosml para um exemplo), ou atraves de um shell-wrapper que
   defina o LD_LIBRARY_PATH antes de executar o binario, como por exemplo o
   www/seamonkey faz.

   Ao instalar bibliotecas de 32 bits em um sistema de 64 bits, use
   USE_LDCONFIG32 como alternativa.

   Se o software usa o autotools, e especificamente, o libtool, adicione
   USES=libtool.

   Quando o numero da versao da biblioteca principal aumenta na atualizac,ao
   para a nova versao do port, todos os outros ports que se vinculam `a
   biblioteca afetada devem ter seu PORTREVISION incrementado, para forc,ar a
   recompilac,ao com a nova versao da biblioteca.

6.4. Ports com Restric,oes de Distribuic,ao ou Preocupac,oes Legais

   As licenc,as variam e algumas delas impoem restric,oes sobre como o
   aplicativo pode ser empacotado, se pode ser vendido com fins lucrativos e
   assim por diante.

  Importante:

   E de responsabilidade de um mantenedor de um port ler os termos de
   licenciamento do software e certificar-se de que o projeto do FreeBSD nao
   sera responsabilizado por viola-los, redistribuindo o codigo fonte ou os
   binarios compilados via FTP/HTTP ou CD-ROM. Se estiver em duvida, entre em
   contato com a Lista de discussao de ports do FreeBSD.

   Em situac,oes como esta, as variaveis &#8203;&#8203;descritas nas proximas
   sec,oes podem ser definidas.

  6.4.1. NO_PACKAGE

   Esta variavel indica que nao podemos gerar um pacote binario da
   aplicac,ao. Por exemplo, a licenc,a pode proibir a redistribuic,ao
   binaria, ou pode proibir a distribuic,ao de pacotes criados a partir de
   codigo adaptado.

   No entanto, o DISTFILES do port pode ser livremente espelhado no FTP/HTTP.
   Eles tambem podem ser distribuidos em um CD-ROM (ou midia similar), a
   menos que a variavel NO_CDROM esteja definida tambem.

   Se o pacote binario geralmente nao e util, e o aplicativo sempre deve ser
   compilado a partir do codigo-fonte, use o NO_PACKAGE. Por exemplo, se o
   aplicativo tiver informac,oes de configurac,ao especificas do site
   codificadas nele em tempo de compilac,ao, defina o NO_PACKAGE.

   Defina a variavel NO_PACKAGE para uma string descrevendo o motivo pelo
   qual o pacote nao pode ser gerado.

  6.4.2. NO_CDROM

   Esta variavel sozinha indica que, embora tenhamos permissao para gerar
   pacotes binarios, nao podemos colocar nem esses pacotes nem o DISTFILES em
   um CD-ROM (ou midia similar) para revenda. No entanto, os pacotes binarios
   e os DISTFILES do ports ainda estarao disponiveis via FTP/HTTP.

   Se esta variavel for definida junto com NO_PACKAGE, entao apenas o
   DISTFILES do port estara disponivel e somente via FTP/HTTP.

   Defina a variavel NO_CDROM para uma string descrevendo o motivo pelo qual
   o port nao pode ser redistribuido em CD-ROM. Por exemplo, use isto se a
   licenc,a do port for somente para uso "nao comercial".

  6.4.3. NOFETCHFILES

   Arquivos definidos em NOFETCHFILES nao podem ser obtidos de nenhum dos
   MASTER_SITES. Um exemplo de tal tipo de arquivo e quando o arquivo e
   fornecido apenas em CD-ROM pelo fornecedor.

   Ferramentas que verificam a disponibilidade desses arquivos nos
   MASTER_SITES devem ignorar estes arquivos e nao informar nada sobre eles.

  6.4.4. RESTRICTED

   Defina esta variavel sozinha, se a licenc,a do aplicativo nao permitir o
   espelhamento do DISTFILES e nem a distribuic,ao do pacote binario de forma
   alguma.

   Nao defina as variaveis NO_CDROM ou NO_PACKAGE juntamente com a variavel
   RESTRICT, uma vez que esta ultima variavel implica as anteriores.

   Defina a variavel RESTRICTED para uma string que descreva o motivo pelo
   qual o port nao pode ser redistribuido. Normalmente, isso indica que o
   port contem software proprietario e que o usuario precisara baixar
   manualmente o DISTFILES, possivelmente apos se registrar para ter acesso
   ao software ou apos concordar em aceitar os termos de um EULA.

  6.4.5. RESTRICTED_FILES

   Quando a variavel RESTRICT ou a NO_CDROM esta definida, o valor padrao
   normalmente contem ${DISTFILES}${PATCHFILES} caso contrario, ela fica
   vazia. Se apenas alguns dos arquivos da distribuic,ao forem restritos,
   defina essa variavel para lista-los.

  6.4.6. LEGAL_TEXT

   Se o port tem preocupac,oes legais as quais nao foram abordadas pelas
   variaveis acima, defina a variavel LEGAL_TEXT para uma string explicando a
   preocupac,ao. Por exemplo, se o FreeBSD obteve uma permissao especial para
   redistribuir o binario, esta variavel deve indicar isso.

  6.4.7. /usr/ports/LEGAL e LEGAL

   Um port que defina qualquer uma das variaveis &#8203;&#8203;acima tambem
   devera ser adicionado ao /usr/ports/LEGAL. A primeira coluna e uma glob
   que corresponde aos distfiles restritos. A segunda coluna e a origem do
   port. A terceira coluna e a saida do comando make -VLEGAL.

  6.4.8. Exemplos

   A maneira preferida de declarar "os distfiles para este port devem ser
   obtidos manualmente" e a seguinte:

 .if !exists(${DISTDIR}/${DISTNAME}${EXTRACT_SUFX})
 IGNORE= may not be redistributed because of licensing reasons. Please visit some-website to accept their license and download ${DISTFILES} into ${DISTDIR}
 .endif

   Isso tanto informa o usuario, quanto define os metadados apropriados na
   maquina do usuario para uso por programas automatizados.

   Note que esta estrofe deve ser precedida por uma inclusao de
   bsd.port.pre.mk.

6.5. Mecanismos de Compilac,ao

  6.5.1. Compilando Ports em Paralelo

   O framework de ports do FreeBSD suporta compilac,ao paralela usando
   multiplos subprocessos do comando make, o que permite que os sistemas SMP
   utilizem todo o poder disponivel da CPU, permitindo que as compilac,oes
   dos ports sejam mais rapidas e eficazes.

   Isso e alcanc,ado passando-se a flag -jX para o make(1) executando no
   codigo do fornecedor. Este e o comportamento de compilac,ao padrao dos
   ports. Infelizmente, nem todos os ports lidam bem com compilac,oes
   paralelas e pode ser necessario desabilitar explicitamente esse recurso
   adicionando a variavel MAKE_JOBS_UNSAFE=yes. Ela e usada quando um port e
   conhecido por nao funcionar com a opc,ao -jX devido a race conditions e
   problemas de compilac,ao intermitentes.

  Importante:

   Ao definir a variavel MAKE_JOBS_UNSAFE, e muito importante explicar com um
   comentario no Makefile, ou pelo menos na mensagem de commit, porque o port
   nao pode ser compilado quando ela esta ativa. Caso contrario, e quase
   impossivel corrigir o problema ou testar se ele foi corrigido ao efetuar o
   commit de uma atualizac,ao em uma data posterior.

  6.5.2. make, gmake, e imake

   Existem varias implementac,oes diferentes do make. O software portado
   geralmente requer uma implementac,ao especifica, como o GNU make,
   conhecido no FreeBSD como gmake.

   Se o port usa o GNU make, adicione o gmake no USES.

   A variavel MAKE_CMD pode ser usada para referenciar o comando especifico
   configurado pelo USES no Makefile do port. Use o MAKE_CMD apenas dentro
   dos Makefiles do aplicativo no WRKSRC para chamar o comando make para a
   implementac,ao esperada pelo software portado.

   Se o port e um aplicativo X que usa o Imake para criar o Makefile do
   Imakefile, defina USES=imake. Veja a sec,ao sobre USES=imake no
   Capitulo 17, Usando Macros USES para mais detalhes.

   Se o Makefile do port tem algo diferente de all como o target de
   compilac,ao principal, defina a variavel ALL_TARGET adequadamente. O mesmo
   vale para install e INSTALL_TARGET.

  6.5.3. Script configure

   Se o port usa o script configure para gerar Makefiles a partir do
   Makefile.in defina GNU_CONFIGURE=yes. Para dar argumentos extras ao script
   configure (o argumento padrao e --prefix=${PREFIX}
   --infodir=${PREFIX}/${INFO_PATH} --mandir = ${MANPREFIX}/man --build =
   ${CONFIGURE_TARGET}), defina estes argumentos extras em CONFIGURE_ARGS.
   Variaveis &#8203;&#8203;de ambiente extras podem ser passadas usando
   CONFIGURE_ENV.

   Tabela 6.1. Variaveis &#8203;&#8203;para ports que usam o configure

       Variavel                             Significa                         
   GNU_CONFIGURE    O port usa o script configure para preparar a             
                    construc,ao.                                              
   HAS_CONFIGURE    Igual a GNU_CONFIGURE, exceto que o destino de            
                    configurac,ao padrao nao e adicionado a CONFIGURE_ARGS.   
   CONFIGURE_ARGS   Argumentos adicionais passados &#8203;&#8203;para o       
                    script configure.                                         
   CONFIGURE_ENV    Variaveis de ambiente adicionais a serem definidas para   
                    execuc,ao de script configure.                            
   CONFIGURE_TARGET Substitui o target de configurac,ao padrao. O valor       
                    padrao e ${MACHINE_ARCH}-portbld-freebsd${OSREL}.         

  6.5.4. Usando o cmake

   Para ports que usam CMake, defina USES=cmake.

   Tabela 6.2. Variaveis &#8203;&#8203;para ports que usam o cmake

       Variavel                             Significa                         
   CMAKE_ARGS        Flags do CMake especificas para o port a serem passadas  
                     para o binario do cmake.                                 
                     Para cada entrada em CMAKE_ON, um valor booleano ativado 
   CMAKE_ON          e adicionado ao CMAKE_ARGS. Veja Exemplo 6.3, "CMAKE_ON  
                     and CMAKE_OFF".                                          
                     Para cada entrada em CMAKE_OFF, um valor booleano        
   CMAKE_OFF         desativado e adicionado ao CMAKE_ARGS. Veja Exemplo 6.3, 
                     "CMAKE_ON and CMAKE_OFF".                                
                     Tipo de compilac,ao (perfis de compilac,ao predefinidos  
   CMAKE_BUILD_TYPE  para o CMake). O padrao e Release ou Debug se a variavel 
                     WITH_DEBUG estiver definida.                             
   CMAKE_SOURCE_PATH Caminho para o diretorio do fonte. O padrao e ${WRKSRC}. 
   CONFIGURE_ENV     Variaveis &#8203;&#8203;de ambiente adicionais a serem   
                     definidas para o binario do cmake.                       

   Tabela 6.3. Variaveis &#8203;&#8203;que os usuarios podem definir para
   compilac,oes com cmake

     Variavel                             Significa                           
                 Desativa o output colorido na compilac,ao. Nao e definido    
   CMAKE_NOCOLOR por padrao, a menos que BATCH ou PACKAGE_BUILDING esteja     
                 definido.                                                    

   CMake suporta estes perfis de construc,ao: Debug, Release, RelWithDebInfo
   e MinSizeRel. Debug e Release sistema de respeito de perfis *FLAGS,
   RelWithDebInfo e MinSizeRel ajustara CFLAGS para -O2 -g e -Os -DNDEBUG
   correspondentemente. O valor do involucro inferior CMAKE_BUILD_TYPE e
   exportado para PLIST_SUB e deve ser usado se o port for instalar *.cmake
   dependendo do tipo de compilac,ao (veja devel/kf5-kcrash por um exemplo).
   Por favor, note que alguns projetos podem definir seus proprios perfis de
   compilac,ao e/ou forc,ar um tipo especifico de compilac,ao
   CMAKE_BUILD_TYPE dentro de CMakeLists.txt. Para fazer um port para tal
   projeto respeite CFLAGS e WITH_DEBUG, as definic,oes CMAKE_BUILD_TYPE
   devem ser removidas desses arquivos.

   A maioria dos projetos baseados em CMake suportam um metodo de compilac,ao
   out-of-source. A compilac,ao out-of-source de um port e a configurac,ao
   padrao. Uma compilac,ao in-source pode ser executada usando-se o sufixo
   :insource. Em uma compilac,ao out-of-source, CONFIGURE_WRKSRC,
   BUILD_WRKSRC e INSTALL_WRKSRC serao definidos como ${WRKDIR}/.Build e esse
   diretorio sera usado para manter todos os arquivos gerados durante os
   estagios de configurac,ao e compilac,ao, deixando o diretorio de origem
   intacto.

   Exemplo 6.2. Exemplo de USES=cmake

   Este trecho demonstra o uso do CMake para um port. O CMAKE_SOURCE_PATH
   geralmente nao e necessario, mas pode ser definido quando os fontes nao
   estao localizados no diretorio superior ou se apenas um subconjunto do
   projeto for compilado pelo port.

 USES=                   cmake
 CMAKE_SOURCE_PATH=      ${WRKSRC}/subproject

   Exemplo 6.3. CMAKE_ON and CMAKE_OFF

   Ao adicionar valores booleanos a variavel CMAKE_ARGS, sera mais facil usar
   as variaveis CMAKE_ON e CMAKE_OFF &#8203;&#8203;em vez disso. Desta forma:

 CMAKE_ON=       VAR1 VAR2
 CMAKE_OFF=      VAR3

   E equivalente a:

 CMAKE_ARGS=     -DVAR1:BOOL=TRUE -DVAR2:BOOL=TRUE -DVAR3:BOOL=FALSE

  Importante:

   Isto e apenas para os valores padrao desativados do CMAKE_ARGS. Os helpers
   descritos em Sec,ao 5.13.3.4.2, "OPT_CMAKE_BOOL e OPT_CMAKE_BOOL_OFF" usam
   a mesma semantica, mas para valores opcionais.

  6.5.5. Usando scons

   Se o port usa SCons, definir USES=scons.

   Para fazer os SConstruct de terceiros respeitarem tudo o que e passado
   para SCons no ambiente (isto e, o mais importante,
   CC/CXX/CFLAGS/CXXFLAGS), altere o SConstruct para que o Evironment de
   compilac,ao fique da seguinte forma:

 env = Environment(**ARGUMENTS)

   Ele podera entao ser modificado com env.Append e env.Replace.

  6.5.6. Compilando Aplicac,oes Rust com cargo

   Para ports que usam Cargo, defina USES=cargo.

   Tabela 6.4. Variaveis &#8203;&#8203;que os Usuarios Podem Configurar para
   Compilar cargo

        Variavel              Padrao                    Descric,ao            
                                             Lista de crates que o port       
                                             depende. Cada entrada precisa    
                                             ter um formato como              
                                             cratename-semver por exemplo,    
                                             libc-0.2.40. Os mantenedores de  
   CARGO_CRATES                              ports podem gerar essa lista a   
                                             partir do Cargo.lock usando o    
                                             comando make cargo-crates. E     
                                             possivel alterar manualmente as  
                                             versoes dos crates, mas tenha em 
                                             mente as dependencias            
                                             transitivas.                     
                                             Lista de recursos do aplicativo  
                                             a serem compilados (lista        
                                             separada por espac,o). Para      
                                             desativar todos os recursos      
                                             padrao, adicione o token         
   CARGO_FEATURES                            especial --no-default-features   
                                             para CARGO_FEATURES. Passar      
                                             manualmente para                 
                                             CARGO_BUILD_ARGS,                
                                             CARGO_INSTALL_ARGS, e            
                                             CARGO_TEST_ARGS nao e            
                                             necessario.                      
   CARGO_CARGOTOML    ${WRKSRC}/Cargo.toml   O caminho para o Cargo.toml que  
                                             sera usado.                      
                                             O caminho para o Cargo.lock que  
                                             sera utilizado para o make       
   CARGO_CARGOLOCK    ${WRKSRC}/Cargo.lock   cargo-crates. E possivel         
                                             especificar mais de um arquivo   
                                             de bloqueio quando necessario.   
                                             Uma lista de variaveis           
   CARGO_ENV                                 &#8203;&#8203;de ambiente para   
                                             passar para o Cargo semelhante a 
                                             MAKE_ENV.                        
   RUSTFLAGS                                 Flags para passar para o         
                                             compilador Rust.                 
   CARGO_CONFIGURE    yes                    Use o padrao do-configure.       
                                             Argumentos extras para passar    
                                             para o Cargo durante a fase de   
   CARGO_UPDATE_ARGS                         configurac,ao. Os argumentos     
                                             validos podem ser consultados    
                                             com cargo update --help.         
   CARGO_BUILDDEP     yes                    Adiciona uma dependencia de      
                                             compilac,ao em lang/rust.        
   CARGO_CARGO_BIN    ${LOCALBASE}/bin/cargo Localizac,ao do binario do       
                                             cargo.                           
   CARGO_BUILD        yes                    Use o padrao do-build.           
                                             Argumentos extras para passar    
                                             para o Cargo durante a fase de   
   CARGO_BUILD_ARGS                          compilac,ao. Argumentos validos  
                                             podem ser consultados com cargo  
                                             buil --help.                     
   CARGO_INSTALL      yes                    Use o padrao do-install.         
                                             Argumentos extras para passar    
                                             para o Cargo durante a fase de   
   CARGO_INSTALL_ARGS                        instalac,ao. Os argumentos       
                                             validos podem ser consultados    
                                             com cargo isntall --help.        
                                             Caminho para o crate instalar.   
                                             Isto e passado para o cargo      
   CARGO_INSTALL_PATH .                      install via argumento --path.    
                                             Quando multiplos caminhos sao    
                                             informados, o cargo install e    
                                             executado multiplas vezes.       
   CARGO_TEST         yes                    Use o padrao do-test.            
                                             Argumentos extras para passar    
                                             para o Cargo durante a fase de   
   CARGO_TEST_ARGS                           teste. Os argumentos validos     
                                             podem ser consultados com cargo  
                                             test --help.                     
   CARGO_TARGET_DIR   ${WRKDIR}/target       Localizac,ao do diretorio de     
                                             saida do cargo.                  
                                             Diretorio relativo a DISTDIR     
   CARGO_DIST_SUBDIR  rust/crates            onde os arquivos de              
                                             distribuic,ao do crate serao     
                                             armazenados.                     
                                             Localizac,ao do diretorio do     
                                             fornecedor onde todas os crates  
   CARGO_VENDOR_DIR   ${WRKSRC}/cargo-crates serao extraidos. Tente manter    
                                             isto sob PATCH_WRKSRC, para que  
                                             os patches possam ser aplicados  
                                             facilmente.                      
                                             Ativa a busca de crates          
                                             bloqueadas para commits          
                                             especificos do Git no GitHub via 
                                             GH_TUPLE. Isso tentara modificar 
   CARGO_USE_GITHUB   no                     o Cargo.toml no WRKDIR para      
                                             apontar para os fontes offline,  
                                             em vez de busca-los em um        
                                             repositorio Git durante a        
                                             compilac,ao.                     
                                             O mesmo que CARGO_USE_GITHUB mas 
   CARGO_USE_GITLAB   no                     para instancias GitLab e         
                                             GL_TUPLE.                        

   Exemplo 6.4. Criando um Port para uma Aplicac,ao Simples em Rust

   Criar um port baseado em cargo e um processo de tres estagios. Primeiro,
   precisamos fornecer um modelo de port que busque o arquivo de
   distribuic,ao do aplicativo:

 PORTNAME=       tokei
 DISTVERSIONPREFIX=      v
 DISTVERSION=    7.0.2
 CATEGORIES=     devel

 MAINTAINER=     tobik@FreeBSD.org
 COMMENT=        Display statistics about your code

 USES=           cargo
 USE_GITHUB=     yes
 GH_ACCOUNT=     Aaronepower

 .include <bsd.port.mk>

   Gerar uma distinfo inicial:

 % make makesum
 => Aaronepower-tokei-v7.0.2_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
 => Attempting to fetch https://codeload.github.com/Aaronepower/tokei/tar.gz/v7.0.2?dummy=/Aaronepower-tokei-v7.0.2_GH0.tar.gz
 fetch: https://codeload.github.com/Aaronepower/tokei/tar.gz/v7.0.2?dummy=/Aaronepower-tokei-v7.0.2_GH0.tar.gz: size of remote file is not known
 Aaronepower-tokei-v7.0.2_GH0.tar.gz                     45 kB  239 kBps 00m00s

   Agora o arquivo de distribuic,ao esta pronto para uso e podemos ir em
   frente e extrair as dependencias crate do pacote Cargo.lock:

 % make cargo-crates
 CARGO_CRATES=   aho-corasick-0.6.4 \
                 ansi_term-0.11.0 \
                 arrayvec-0.4.7 \
                 atty-0.2.9 \
                 bitflags-1.0.1 \
                 byteorder-1.2.2 \
                 [...]

   A saida deste comando precisa ser colada diretamente no Makefile:

 PORTNAME=       tokei
 DISTVERSIONPREFIX=      v
 DISTVERSION=    7.0.2
 CATEGORIES=     devel

 MAINTAINER=     tobik@FreeBSD.org
 COMMENT=        Display statistics about your code

 USES=           cargo
 USE_GITHUB=     yes
 GH_ACCOUNT=     Aaronepower

 CARGO_CRATES=   aho-corasick-0.6.4 \
                 ansi_term-0.11.0 \
                 arrayvec-0.4.7 \
                 atty-0.2.9 \
                 bitflags-1.0.1 \
                 byteorder-1.2.2 \
                 [...]

 .include <bsd.port.mk>

   O distinfo precisa ser regenerado para conter todos os arquivos de
   distribuic,ao dos crates:

 % make makesum
 => rust/crates/aho-corasick-0.6.4.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
 => Attempting to fetch https://crates.io/api/v1/crates/aho-corasick/0.6.4/download?dummy=/rust/crates/aho-corasick-0.6.4.tar.gz
 rust/crates/aho-corasick-0.6.4.tar.gz         100% of   24 kB 6139 kBps 00m00s
 => rust/crates/ansi_term-0.11.0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
 => Attempting to fetch https://crates.io/api/v1/crates/ansi_term/0.11.0/download?dummy=/rust/crates/ansi_term-0.11.0.tar.gz
 rust/crates/ansi_term-0.11.0.tar.gz           100% of   16 kB   21 MBps 00m00s
 => rust/crates/arrayvec-0.4.7.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
 => Attempting to fetch https://crates.io/api/v1/crates/arrayvec/0.4.7/download?dummy=/rust/crates/arrayvec-0.4.7.tar.gz
 rust/crates/arrayvec-0.4.7.tar.gz             100% of   22 kB 3237 kBps 00m00s
 => rust/crates/atty-0.2.9.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
 => Attempting to fetch https://crates.io/api/v1/crates/atty/0.2.9/download?dummy=/rust/crates/atty-0.2.9.tar.gz
 rust/crates/atty-0.2.9.tar.gz                 100% of 5898  B   81 MBps 00m00s
 => rust/crates/bitflags-1.0.1.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
 [...]

   O port esta agora pronto para uma compilac,ao de teste e ajustes
   adicionais, como criar um plist, escrever uma descric,ao, adicionar
   informac,oes de licenc,a, opc,oes, etc. como e normal.

   Se voce nao estiver testando seu port em um ambiente limpo, como com o
   Poudriere, lembre-se de executar make clean antes de qualquer teste.

   Exemplo 6.5. Ativando Recursos Adicionais do Aplicativo

   Alguns aplicativos definem recursos adicionais em seus Cargo.toml. Eles
   podem ser compilados definindo a variavel CARGO_FEATURES no port.

   Aqui nos habilitamos as features Tokei's json e yaml:

 CARGO_FEATURES= json yaml

   Exemplo 6.6. Features de Codificac,ao de Aplicativos como Opc,oes de Port

   Um exemplo de sec,ao [features] no Cargo.toml pode parecer assim:

 [features]
 pulseaudio_backend = ["librespot-playback/pulseaudio-backend"]
 portaudio_backend = ["librespot-playback/portaudio-backend"]
 default = ["pulseaudio_backend"]

   pulseaudio_backend e uma feature padrao. Ela esta sempre ativada, a menos
   que desativemos explicitamente os recursos padrao adicionando
   --no-default-features para o CARGO_FEATURES. Aqui nos mudamos as features
   portaudio_backend e pulseaudio_backend em opc,oes de port:

 CARGO_FEATURES= --no-default-features

 OPTIONS_DEFINE= PORTAUDIO PULSEAUDIO

 PORTAUDIO_VARS=         CARGO_FEATURES+=portaudio_backend
 PULSEAUDIO_VARS=        CARGO_FEATURES+=pulseaudio_backend

   Exemplo 6.7. Listando Licenc,as Crate

   Os crates tem suas proprias licenc,as. E importante saber o que elas sao
   ao adicionar o bloco LICENSE para o port (verSec,ao 5.7, "Licenc,as"). O
   target auxiliar cargo-crates-licenses tentara listar todas as licenc,as de
   todos os crates definidos no CARGO_CRATES.

 % make cargo-crates-licenses
 aho-corasick-0.6.4  Unlicense/MIT
 ansi_term-0.11.0    MIT
 arrayvec-0.4.7      MIT/Apache-2.0
 atty-0.2.9          MIT
 bitflags-1.0.1      MIT/Apache-2.0
 byteorder-1.2.2     Unlicense/MIT
 [...]

  Nota:

   Os nomes das licenc,as geradas com make cargo-create-licenses sao
   expressoes de licenc,as do SPDX 2.1 que nao correspondem aos nomes de
   licenc,a definidos na estrutura de ports. Eles precisam ser traduzidos
   para os nomes de Tabela 5.7, "Lista de Licenc,as Predefinidas".

  6.5.7. Usando meson

   Para ports que usam Meson, defina USES=meson.

   Tabela 6.5. Variaveis &#8203;&#8203;para ports que usam o meson

      Variavel                             Descric,ao                         
   MESON_ARGS      Flags do Meson especificas para o port a serem passadas    
                   para o binario do meson.                                   
   MESON_BUILD_DIR Caminho para o diretorio de compilac,ao relativo ao        
                   WRKSRC. O padrao e _build.                                 

   Exemplo 6.8. Exemplo de USES=meson

   Este trecho demonstra o uso do Meson para um port.

 USES=           meson
 MESON_ARGS=     -Dfoo=enabled

  6.5.8. Compilando Aplicac,oes Go

   Para ports que usam Go, defina USES=go. Consulte Sec,ao 17.34, "go" para
   obter a lista de variaveis que podem ser configuradas para controlar o
   processo de compilac,ao.

   Exemplo 6.9. Criando um Port para uma Aplicac,ao Baseada em Modulos Go

   Criar um port baseado em Go e um processo de cinco estagios. Primeiro,
   precisamos fornecer um modelo de port que baixa o arquivo de distribuic,ao
   do aplicativo:

 PORTNAME=       ghq
 DISTVERSIONPREFIX=      v
 DISTVERSION=    0.12.5
 CATEGORIES=     devel

 MAINTAINER=     tobik@FreeBSD.org
 COMMENT=        Remote repository management made easy

 USES=           go:modules
 USE_GITHUB=     yes
 GH_ACCOUNT=     motemen

 .include <bsd.port.mk>

   Gerar uma distinfo inicial:

 % make makesum
 ===>  License MIT accepted by the user
 => motemen-ghq-v0.12.5_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
 => Attempting to fetch https://codeload.github.com/motemen/ghq/tar.gz/v0.12.5?dummy=/motemen-ghq-v0.12.5_GH0.tar.gz
 fetch: https://codeload.github.com/motemen/ghq/tar.gz/v0.12.5?dummy=/motemen-ghq-v0.12.5_GH0.tar.gz: size of remote file is not known
 motemen-ghq-v0.12.5_GH0.tar.gz                          32 kB  177 kBps    00s

   Agora o arquivo de distribuic,ao esta pronto para uso e podemos extrair as
   dependencias necessarias de modulos Go. Esta etapa requer a instalac,ao do
   ports-mgmt/modules2tuple:

 % make gomod-vendor
 [...]
 GH_TUPLE=       \
                 Songmu:gitconfig:v0.0.2:songmu_gitconfig/vendor/github.com/Songmu/gitconfig \
                 daviddengcn:go-colortext:186a3d44e920:daviddengcn_go_colortext/vendor/github.com/daviddengcn/go-colortext \
                 go-yaml:yaml:v2.2.2:go_yaml_yaml/vendor/gopkg.in/yaml.v2 \
                 golang:net:3ec191127204:golang_net/vendor/golang.org/x/net \
                 golang:sync:112230192c58:golang_sync/vendor/golang.org/x/sync \
                 golang:xerrors:3ee3066db522:golang_xerrors/vendor/golang.org/x/xerrors \
                 motemen:go-colorine:45d19169413a:motemen_go_colorine/vendor/github.com/motemen/go-colorine \
                 urfave:cli:v1.20.0:urfave_cli/vendor/github.com/urfave/cli

   A saida deste comando precisa ser colada diretamente no Makefile:

 PORTNAME=       ghq
 DISTVERSIONPREFIX=      v
 DISTVERSION=    0.12.5
 CATEGORIES=     devel

 MAINTAINER=     tobik@FreeBSD.org
 COMMENT=        Remote repository management made easy

 USES=           go:modules
 USE_GITHUB=     yes
 GH_ACCOUNT=     motemen
 GH_TUPLE=       Songmu:gitconfig:v0.0.2:songmu_gitconfig/vendor/github.com/Songmu/gitconfig \
                 daviddengcn:go-colortext:186a3d44e920:daviddengcn_go_colortext/vendor/github.com/daviddengcn/go-colortext \
                 go-yaml:yaml:v2.2.2:go_yaml_yaml/vendor/gopkg.in/yaml.v2 \
                 golang:net:3ec191127204:golang_net/vendor/golang.org/x/net \
                 golang:sync:112230192c58:golang_sync/vendor/golang.org/x/sync \
                 golang:xerrors:3ee3066db522:golang_xerrors/vendor/golang.org/x/xerrors \
                 motemen:go-colorine:45d19169413a:motemen_go_colorine/vendor/github.com/motemen/go-colorine \
                 urfave:cli:v1.20.0:urfave_cli/vendor/github.com/urfave/cli

 .include <bsd.port.mk>

   O distinfo precisa ser gerado novamente para conter todos os arquivos de
   distribuic,ao:

 % make makesum
 => Songmu-gitconfig-v0.0.2_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
 => Attempting to fetch https://codeload.github.com/Songmu/gitconfig/tar.gz/v0.0.2?dummy=/Songmu-gitconfig-v0.0.2_GH0.tar.gz
 fetch: https://codeload.github.com/Songmu/gitconfig/tar.gz/v0.0.2?dummy=/Songmu-gitconfig-v0.0.2_GH0.tar.gz: size of remote file is not known
 Songmu-gitconfig-v0.0.2_GH0.tar.gz                    5662  B  936 kBps    00s
 => daviddengcn-go-colortext-186a3d44e920_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
 => Attempting to fetch https://codeload.github.com/daviddengcn/go-colortext/tar.gz/186a3d44e920?dummy=/daviddengcn-go-colortext-186a3d44e920_GH0.tar.gz
 fetch: https://codeload.github.com/daviddengcn/go-colortext/tar.gz/186a3d44e920?dummy=/daviddengcn-go-colortext-186a3d44e920_GH0.tar.gz: size of remote file is not known
 daviddengcn-go-colortext-186a3d44e920_GH0.tar.        4534  B 1098 kBps    00s
 [...]

   O port esta agora pronto para uma compilac,ao de teste e ajustes
   adicionais, como criar um plist, escrever uma descric,ao, adicionar
   informac,oes de licenc,a, opc,oes, etc. como e normal.

   Se voce nao estiver testando seu port em um ambiente limpo, como com o
   Poudriere, lembre-se de executar make clean antes de qualquer teste.

   Exemplo 6.10. Definindo o Nome do Binario ou o Caminho da Instalac,ao

   Alguns ports precisam instalar o binario resultante com um nome diferente
   ou em um caminho diferente do padrao ${PREFIX}/bin. Isso pode ser feito
   usando a sintaxe de tupla GO_TARGET, por exemplo:

 GO_TARGET=  ./cmd/ipfs:ipfs-go

   ira instalar o binario ipfs como ${PREFIX}/bin/ipfs-go e

 GO_TARGET=  ./dnscrypt-proxy:${PREFIX}/sbin/dnscrypt-proxy

   ira instalar dnscrypt-proxy em ${PREFIX}/sbin.

  6.5.9. Compilando Aplicac,oes Haskell com cabal

   Para ports que usam Cabal, defina o sistema de compilac,ao USES=cabal.
   Consulte Sec,ao 17.8, "cabal" para obter a lista de variaveis que podem
   ser configuradas para controlar o processo de compilac,ao.

   Exemplo 6.11. Criando um Port para uma Aplicac,ao Hackage-hosted Haskell

   Ao preparar um port Haskell Cabal, o programa devel/hs-cabal-install e
   necessario, portanto, certifique-se de que esteja instalado previamente.
   Primeiro, precisamos definir variaveis de ports comuns que permitem ao
   cabal-install buscar o arquivo de distribuic,ao de pacotes:

 PORTNAME=       ShellCheck
 DISTVERSION=    0.6.0
 CATEGORIES=     devel

 MAINTAINER=     haskell@FreeBSD.org
 COMMENT=        Shell script analysis tool

 USES=           cabal

 .include <bsd.port.mk>

   Esse Makefile minimo nos permite baixar o arquivo de distribuic,ao:

 % make cabal-extract
 [...]
 Downloading the latest package list from hackage.haskell.org
 cabal get ShellCheck-0.6.0
 Downloading  ShellCheck-0.6.0
 Downloaded   ShellCheck-0.6.0
 Unpacking to ShellCheck-0.6.0/

   Agora, temos o arquivo de descric,ao do pacote ShellCheck.cabal, que
   permite baixar todas as dependencias do pacote, incluindo as transitivas:

 % make cabal-extract-deps
 [...]
 Resolving dependencies...
 Downloading  base-orphans-0.8.2
 Downloaded   base-orphans-0.8.2
 Downloading  primitive-0.7.0.0
 Starting     base-orphans-0.8.2 (lib)
 Building     base-orphans-0.8.2 (lib)
 Downloaded   primitive-0.7.0.0
 Downloading  dlist-0.8.0.7
 [...]

   Como efeito colateral, as dependencias do pacote tambem sao compiladas,
   portanto, o comando pode levar algum tempo. Uma vez feito, uma lista de
   dependencias necessarias pode ser gerada:

 % make make-use-cabal
 USE_CABAL=QuickCheck-2.12.6.1 \
 hashable-1.3.0.0 \
 integer-logarithms-1.0.3 \
 [...]

   Pacotes Haskell podem conter revisoes, assim como nos ports do FreeBSD. As
   revisoes podem afetar apenas os arquivos .cabal, mas ainda e importante
   extrai-los. Para verificar os itens USE_CABAL quanto a atualizac,oes de
   revisao disponiveis, execute o seguinte comando:

 % make make-use-cabal-revs
 USE_CABAL=QuickCheck-2.12.6.1_1 \
 hashable-1.3.0.0 \
 integer-logarithms-1.0.3_2 \
 [...]

   Observe os numeros de versao adicionais apos o simbolo _. Coloque a lista
   USE_CABAL recem-gerada em vez de uma antiga.

   Finalmente, o distinfo precisa ser gerado novamente para conter todos os
   arquivos de distribuic,ao:

 % make makesum
 => ShellCheck-0.6.0.tar.gz doesn't seem to exist in /usr/local/poudriere/ports/git/distfiles/cabal.
 => Attempting to fetch https://hackage.haskell.org/package/ShellCheck-0.6.0/ShellCheck-0.6.0.tar.gz
 ShellCheck-0.6.0.tar.gz                                136 kB  642 kBps    00s
 => QuickCheck-2.12.6.1/QuickCheck-2.12.6.1.tar.gz doesn't seem to exist in /usr/local/poudriere/ports/git/distfiles/cabal.
 => Attempting to fetch https://hackage.haskell.org/package/QuickCheck-2.12.6.1/QuickCheck-2.12.6.1.tar.gz
 QuickCheck-2.12.6.1/QuickCheck-2.12.6.1.tar.gz          65 kB  361 kBps    00s
 [...]

   O port esta agora pronto para uma compilac,ao de teste e ajustes
   adicionais, como criar um plist, escrever uma descric,ao, adicionar
   informac,oes de licenc,a, opc,oes, etc. como e normal.

   Se voce nao estiver testando seu port em um ambiente limpo, como com o
   Poudriere, lembre-se de executar make clean antes de qualquer teste.

6.6. Usando o GNU Autotools

   Se um port precisar de algum software GNU Autotools, adicione
   USES=autoreconf. Veja Sec,ao 17.4, "autoreconf" Para maiores informac,oes.

6.7. Usando o GNU gettext

  6.7.1. Uso Basico

   Se o port requer o gettext, defina USES=gettext, e o port herdara a
   dependencia libintl.so do devel/gettext. Outros valores para uso do
   gettext estao listados em USES=gettext.

   Um caso bastante comum e um port que utilize o gettext e o configure.
   Geralmente, o GNU configure deve ser capaz de localizar o gettext
   automaticamente.

 USES=   gettext
 GNU_CONFIGURE=  yes

   Se falhar, dicas da localizac,ao do gettext podem ser informados por meio
   do CPPFLAGS e LDFLAGS utilizando localbase do seguinte modo:

 USES=   gettext localbase:ldflags
 GNU_CONFIGURE=  yes

  6.7.2. Uso Opcional

   Alguns softwares permitem desabilitar o NLS. Por exemplo, passando
   --disable-nls para o configure. Nesse caso, o port deve usar gettext
   condicionalmente, dependendo do status da opc,ao NLS. Para ports de baixa
   a media complexidade, use este idioma:

 GNU_CONFIGURE=          yes

 OPTIONS_DEFINE=         NLS
 OPTIONS_SUB=            yes

 NLS_USES=               gettext
 NLS_CONFIGURE_ENABLE=   nls

 .include <bsd.port.mk>

   Ou usando a maneira antiga de usar opc,oes:

 GNU_CONFIGURE=          yes

 OPTIONS_DEFINE=         NLS

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MNLS}
 USES+=                  gettext
 PLIST_SUB+=             NLS=""
 .else
 CONFIGURE_ARGS+=        --disable-nls
 PLIST_SUB+=             NLS="@comment "
 .endif

 .include <bsd.port.mk>

   O proximo item na lista de tarefas a fazer e organizar de forma
   condicional os arquivos do catalogo de mensagens na lista de pacotes. A
   parte do Makefile desta tarefa ja e fornecida pela expressao idiomatica.
   Isto e explicado na sec,ao sobre praticas avanc,adas de pkg-plist. Em
   poucas palavras, cada ocorrencia de %%NLS%% dentro de pkg-plist sera
   substituido por "@comment" se o NLS estiver desativado ou por uma cadeia
   nula se o NLS estiver ativado. Consequentemente, as linhas prefixadas por
   %%NLS%% se tornarao meros comentarios na lista de empacotamento final se o
   NLS estiver desativado; caso contrario, o prefixo sera deixado de fora. Em
   seguida, insira %%NLS%% antes de cada caminho para um arquivo de catalogo
   de mensagens em pkg-plist. Por exemplo:

 %%NLS%%share/locale/fr/LC_MESSAGES/foobar.mo
 %%NLS%%share/locale/no/LC_MESSAGES/foobar.mo

   Em casos de alta complexidade, tecnicas mais avanc,adas podem ser
   necessarias, como gerac,ao dinamica de lista de empacotamento.

  6.7.3. Manipulando Diretorios do Catalogo de Mensagens

   Ha um ponto a ser observado sobre a instalac,ao de arquivos de catalogo de
   mensagens. Os diretorios de destino para eles, que residem em
   LOCALBASE/share/locale, nao devem ser criados e removidos por um port. Os
   idiomas mais populares tem seus respectivos diretorios listados em
   PORTSDIR/Templates/BSD.local.dist. Os diretorios para muitos outros
   idiomas sao governados pelo port devel/gettext. Consulte o seu pkg-plist e
   veja se o port vai instalar um arquivo de catalogo de mensagens para um
   idioma exclusivo.

6.8. Usando Perl

   E se o MASTER_SITES estiver configurado para CPAN, o subdiretorio correto
   e geralmente selecionado automaticamente. Se o subdiretorio padrao estiver
   errado, o CPAN/Module pode ser usado para altera-lo. O MASTER_SITES tambem
   pode ser definido para o antigo MASTER_SITE_PERL_CPAN, entao o valor
   preferido para o MASTER_SITE_SUBDIR e o nome da hierarquia de nivel
   superior. Por exemplo, o valor recomendado para p5-Module-Name e Module. A
   hierarquia de nivel superior pode ser examinada em cpan.org. Isso mantem o
   port funcionando quando o autor do modulo muda.

   A excec,ao a essa regra e quando o diretorio relevante nao existe ou o
   distfile nao existe neste diretorio. Neste caso, e permitido usar o id do
   autor como MASTER_SITE_SUBDIR. A macro CPAN: AUTOR pode ser usada, a qual
   sera traduzida para o diretorio de autor com hash. Por exemplo,CPAN: AUTOR
   sera convertido para autores/id/A/AU/AUTOR.

   Quando um port precisa de suporte a Perl, ele deve definir USES=perl5 com
   o opcional USE_PERL5 descrito em descric,ao do USES no perl5.

   Tabela 6.6. Variaveis &#8203;&#8203;Somente Leitura para Ports Que Usam
   Perl

   Variaveis &#8203;&#8203;Somente                 Significa                  
             de Leitura            
                                   O caminho completo do interpretador Perl   
                                   5, seja no sistema ou instalado a partir   
                                   de um port, mas sem o numero da versao.    
   PERL                            Use isso quando o software precisar do     
                                   caminho para o interpretador Perl. Para    
                                   substituir as linhas "#!" em scripts, use  
                                   USES=shebangfix.                           
   PERL_VERSION                    A versao completa do Perl instalada (por   
                                   exemplo, 5,8,9).                           
   PERL_LEVEL                      A versao do Perl instalada como um inteiro 
                                   no formato MNNNPP (por exemplo,500809).    
                                   Local no qual o Perl armazena as           
   PERL_ARCH                       bibliotecas dependentes da arquitetura. O  
                                   valor padrao aponta para ${ARCH}-freebsd.  
   PERL_PORT                       Nome do port Perl instalado (por           
                                   exemplo,perl5).                            
                                   Nome do diretorio para onde vao os pacotes 
   SITE_PERL                       Perl especificos do site. Esse valor e     
                                   adicionado a PLIST_SUB.                    

  Nota:

   Ports de Modulos Perl que nao possuem um site oficial devem linkar para
   cpan.org na linha WWW do pkg-descr. O formato preferido para a URL e
   http://search.cpan.org/dist/Module-Name/ (incluindo a barra final).

  Nota:

   Nao use ${SITE_PERL} em declarac,oes de dependencia. Faze-lo pressupoe que
   o perl5.mk foi incluido, o que nem sempre e verdade. Os ports que dependem
   desse port terao dependencias incorretas se os arquivos desse port forem
   movidos posteriormente em uma atualizac,ao. O caminho certo para declarar
   as dependencias do modulo Perl e mostrado no exemplo abaixo.

   Exemplo 6.12. Exemplo de Dependencia Perl

 p5-IO-Tee>=0.64:devel/p5-IO-Tee

   Para ports Perl que instalam paginas de manual, as macros PERL5_MAN3 e
   PERL5_MAN1 podem ser usadas dentro do pkg-plist. Por exemplo,

 lib/perl5/5.14/man/man1/event.1.gz
 lib/perl5/5.14/man/man3/AnyEvent::I3.3.gz

   pode &#8203;&#8203;ser substituido por

 %%PERL5_MAN1%%/event.1.gz
 %%PERL5_MAN3%%/AnyEvent::I3.3.gz

  Nota:

   Nao existem macros PERL5_MANx para as outras sec,oes (sendo x igual a 2 e
   de 4 ate 9) porque estes sao instalados nos diretorios comuns.

   Exemplo 6.13. Um Port Que Requer Perl Apenas para Compilar

   Como o valor padrao para USE_PERL5 e build e run, configure-o para:

 USES=           perl5
 USE_PERL5=      build

   Exemplo 6.14. Um Port Que Tambem Requer Perl Para Patch

   De tempos em tempos, o uso do sed(1) para patches se torna insuficiente.
   Quando usar perl(1) fica mais facil, para isso utilize:

 USES=           perl5
 USE_PERL5=      patch build run

   Exemplo 6.15. Um Modulo Perl Que Precisa de ExtUtils::MakeMaker para
   Compilar

   A maioria dos modulos Perl vem com um script configure Makefile.PL. Neste
   caso, defina:

 USES=           perl5
 USE_PERL5=      configure

   Exemplo 6.16. Um Modulo Perl Que Precisa Modulo::Build para Compilar

   Quando um modulo Perl vem com um script configure Build.PL, pode exigir
   Module:Build, nesse caso, defina

 USES=           perl5
 USE_PERL5=      modbuild

   Se for ao contrario, e exigir Module::Build::Tiny, defina

 USES=           perl5
 USE_PERL5=      modbuildtiny

6.9. Usando o X11

  6.9.1. Componentes X.Org

   A implementac,ao do X11 disponivel na Colec,ao de Ports e o X.Org. Se o
   aplicativo depender de componentes X, adicione USES= xorg e defina
   USE_XORG na lista de componentes necessarios. Uma lista completa pode ser
   encontrada em Sec,ao 17.93, "xorg".

   O Projeto Mesa e um esforc,o para fornecer implementac,ao gratuita do
   OpenGL. Para especificar uma dependencia em varios componentes deste
   projeto, use a variavel USE_GL. Veja Sec,ao 17.31, "gl" para a lista
   completa dos componentes disponiveis. Para compatibilidade com versoes
   anteriores, o valor yes direciona para glu.

   Exemplo 6.17. Exemplo USE_XORG

 USES=           gl xorg
 USE_GL=         glu
 USE_XORG=       xrender xft xkbfile xt xaw

   Tabela 6.7. Variaveis &#8203;&#8203;para Ports Que Usam X

   USES= imake O port usa imake.                                              
   XMKMF       Definir o caminho de xmkmf se nao no PATH. Padrao para xmkmf   
               -a.                                                            

   Exemplo 6.18. Usando Variaveis &#8203;&#8203;Relacionadas ao X11

 # Use some X11 libraries
 USES=           xorg
 USE_XORG=       x11 xpm

  6.9.2. Ports que Requerem Motif

   Se o port requer uma biblioteca Motif, defina USES=motif no Makefile. A
   implementac,ao padrao do Motif e x11-toolkits/open-motif. Os usuarios
   podem escolher o x11-toolkits/lesstif em vez disso, definindo WANT_LESSTIF
   no seu make.conf.

   O MOTIFLIB sera definido por motif.mk para referenciar a biblioteca Motif
   apropriada. Por favor, corrija o fonte do port para usar ${MOTIFLIB} onde
   quer que a biblioteca Motif seja referenciada no Makefile original ou no
   Imakefile.

   Existem dois casos comuns:

     * Se o port se referir `a biblioteca Motif como -lXm em seu Makefile ou
       Imakefile, substitua ${MOTIFLIB} por isso.

     * Se o port usa XmClientLibs em seu Imakefile, mude para ${MOTIFLIB}
       ${XTOOLLIB} ${XLIB}.

   Observe que o MOTIFLIB (geralmente) se expande para -L/usr/local/lib -lXm
   -lXp ou /usr/local/lib/libXm.a, entao nao ha necessidade de adicionar -L
   ou -l na frente.

  6.9.3. Fontes X11

   Se o port instalar fontes para o X Window System, coloque-as em
   LOCALBASE/lib/X11/fontes/local.

  6.9.4. Obtendo um DISPLAY Falso com Xvfb

   Algumas aplicac,oes requerem uma tela X11 funcional para que a compilac,ao
   seja bem-sucedida. Isso representa um problema para as maquinas que operam
   sem um monitor. Quando essa variavel e usada, a infraestrutura de
   compilac,ao iniciara o X virtual framebuffer. Um DISPLAY funcional e entao
   passado para a compilac,ao. Veja USES=exibic,ao para os possiveis
   argumentos.

 USES=   display

  6.9.5. Entradas de Desktop

   Entradas de desktop (um padrao Freedesktop) fornecem uma maneira de
   ajustar automaticamente os recursos do desktop quando um novo programa e
   instalado, sem a necessidade de intervenc,ao do usuario. Por exemplo,
   programas recem-instalados aparecem automaticamente nos menus de
   aplicativos de ambientes de desktop compativeis. Entradas de Desktop
   surgiram no ambiente de desktop GNOME, mas agora sao um padrao e tambem
   funcionam com o KDE e o Xfce. Esta pitada de automac,ao fornece um
   beneficio real para o usuario, e as entradas de desktop sao incentivadas
   para aplicativos que podem ser usados em um ambiente desktop.

    6.9.5.1. Usando Arquivos .desktop Pre-definidos

   Ports que incluem *.desktop pre-definidos devem incluir estes arquivos no
   pkg-plist e instala-los no diretorio $LOCALBASE/share/applications. A
   macro INSTALL_DATA e util para instalar esses arquivos.

    6.9.5.2. Atualizando o Banco de Dados do Desktop

   Se um port tiver uma entrada MimeType em seu portname.desktop, o banco de
   dados do desktop deve ser atualizado apos a instalac,ao e desinstalac,ao.
   Para fazer isso, defina USES= desktop-file-utils.

    6.9.5.3. Criando Entradas de Desktop com DESKTOP_ENTRIES

   As entradas desktop podem ser facilmente criadas para aplicativos usando
   DESKTOP_ENTRIES. Um arquivo chamado name.desktop sera criado, instalado e
   adicionado ao pkg-plist automaticamente. A sintaxe e:

 DESKTOP_ENTRIES=        "NAME" "COMMENT" "ICON" "COMMAND" "CATEGORY" StartupNotify

   A lista de possiveis categorias esta disponivel no Site Freedesktop.
   StartupNotify indica se a aplicac,ao e compativel com notificac,oes de
   inicializac,ao. Estes sao tipicamente um indicador grafico como um relogio
   que aparece no ponteiro do mouse, menu ou painel para dar ao usuario uma
   indicac,ao quando um programa esta sendo iniciado. Um programa que seja
   compativel com as notificac,oes de inicializac,ao limpa o indicador depois
   de iniciado. Programas que nao sao compativeis com as notificac,oes de
   inicializac,ao nunca limpariam o indicador (possivelmente confundindo e
   enfurecendo o usuario) e devem ter StartupNotify definido como false entao
   o indicador nao e mostrado.

   Exemplo:

 DESKTOP_ENTRIES=        "ToME" "Roguelike game based on JRR Tolkien's work" \
                         "${DATADIR}/xtra/graf/tome-128.png" \
                         "tome -v -g" "Application;Game;RolePlaying;" \
                         false

6.10. Usando o GNOME

  6.10.1. Introduc,ao

   Este capitulo explica a estrutura do framework GNOME utilizado pelos
   ports. O framework pode ser dividido livremente nos componentes base,
   componentes desktop GNOME e algumas macros especiais que simplificam o
   trabalho dos mantenedores dos ports.

  6.10.2. Usando USE_GNOME

   Adicionar esta variavel ao port permite o uso das macros e componentes
   definidos em bsd.gnome.mk. O codigo em bsd.gnome.mk adiciona as
   dependencias de tempo de compilac,ao, tempo de execuc,ao ou biblioteca
   necessarias ou o tratamento de arquivos especiais. Aplicativos GNOME sob o
   FreeBSD usam o framework USE_GNOME. Inclua todos os componentes
   necessarios como uma lista separada por espac,o. Os componentes USE_GNOME
   sao divididos nessas listas virtuais: componentes basicos, componentes do
   GNOME 3 e componentes legados. Se o port precisa apenas de bibliotecas
   GTK3, este e o caminho mais curto para defini-lo:

 USE_GNOME=      gtk30

   Componentes USE_GNOME adicionam automaticamente as dependencias de que
   precisam. Por favor, veja Sec,ao 6.11, "Componentes GNOME"para uma lista
   exaustiva de todos componentes USE_GNOME e quais outros componentes eles
   implicam e suas dependencias.

   Aqui esta um exemplo de Makefile para um port do GNOME que usa muitas das
   tecnicas descritas neste documento. Por favor, use-o como um guia para
   criar novos ports.

 # $FreeBSD$

 PORTNAME=       regexxer
 DISTVERSION=    0.10
 CATEGORIES=     devel textproc gnome
 MASTER_SITES=   GNOME

 MAINTAINER=     kwm@FreeBSD.org
 COMMENT=        Interactive tool for performing search and replace operations

 USES=           gettext gmake localbase:ldflags pathfix pkgconfig tar:xz
 GNU_CONFIGURE=  yes
 USE_GNOME=      gnomeprefix intlhack gtksourceviewmm3
 INSTALLS_ICONS= yes

 GLIB_SCHEMAS=   org.regexxer.gschema.xml

 .include <bsd.port.mk>

  Nota:

   A macro USE_GNOME se utilizada sem nenhum argumento nao ira adicionar
   nenhuma dependencia ao port. O USE_GNOME nao pode ser definido depois do
   bsd.port.pre.mk.

  6.10.3. Variaveis

   Esta sec,ao explica quais macros estao disponiveis e como elas sao usadas.
   Como elas sao usadas no exemplo acima. A Sec,ao 6.11, "Componentes GNOME"
   tem uma explicac,ao mais detalhada. A variavel USE_GNOME precisa ser
   definido para que essas macros sejam uteis.

   INSTALLS_ICONS

           Ports GTK+ que instalam icones de estilo Freedesktop em
           ${LOCALBASE}/share/icons deve usar essa macro para garantir que os
           icones sejam armazenados em cache e exibidos corretamente. O
           arquivo de cache e nomeado icon-theme.cache. Nao inclua esse
           arquivo em pkg-plist. Essa macro manipula isso automaticamente.
           Esta macro nao e necessaria para Qt, que usam um metodo interno.

   GLIB_SCHEMAS

           Lista de todos os arquivos de esquema de glib que o port instala.
           A macro adicionara os arquivos ao plist do port e manipulara o
           registro destes arquivos na instalac,ao e desinstalac,ao.

           Os arquivos de esquema do glib sao escritos em XML e terminam com
           a extensao gschema.xml. Eles estao instalados no diretorio
           share/glib-2.0/schemas/. Esses arquivos de esquema contem todos os
           valores de configurac,ao do aplicativo com as configurac,oes
           padrao. O banco de dados real usado pelos aplicativos e construido
           por glib-compile-schema, que e executado pela macro GLIB_SCHEMAS.

 GLIB_SCHEMAS=foo.gschema.xml

  Nota:

           Nao adicione esquemas simplificados ao pkg-plist. Se eles estao
           listados em pkg-plist, eles nao serao registrados e os aplicativos
           podem nao funcionar corretamente.

   GCONF_SCHEMAS

           Liste todos os arquivos do esquema gconf. A macro adicionara os
           arquivos de esquema ao plist do port e manipulara seu registro na
           instalac,ao e desinstalac,ao.

           O GConf e o banco de dados baseado em XML que praticamente todos
           os aplicativos GNOME usam para armazenar suas configurac,oes.
           Esses arquivos sao instalados no banco de dados no diretorio
           etc/gconf/schemas. Esse banco de dados e definido pelos arquivos
           de esquema instalados que sao usados para gerar os arquivos chave
           %gconf.xml. Para cada arquivo de esquema instalado pelo port, deve
           existir uma entrada no Makefile:

 GCONF_SCHEMAS=my_app.schemas my_app2.schemas my_app3.schemas

  Nota:

           Os esquemas do Gconf estao listados na macro GCONF_SCHEMAS em vez
           do pkg-plist. Se eles estiverem listados em pkg-plist, eles nao
           serao registrados e os aplicativos podem nao funcionar
           corretamente.

   INSTALLS_OMF

           Os arquivos do Open Source Metadata Framework (OMF) sao comumente
           usados &#8203;&#8203;pelos aplicativos GNOME 2. Esses arquivos
           contem as informac,oes do arquivo de ajuda do aplicativo e
           requerem processamento especial pelo ScrollKeeper/rarian. Para
           registrar adequadamente arquivos OMF ao instalar aplicativos GNOME
           a partir de pacotes, certifique-se de que os arquivos omf estao
           listados em pkg-plist e que o Makefile do port tem o INSTALLS_OMF
           definido:

 INSTALLS_OMF=yes

           Quando definido, bsd.gnome.mk digitaliza automaticamente o
           pkg-plist e adiciona diretivas @exec e @unexec para cada .omfpara
           rastrear no banco de dados de registro do OMF.

6.11. Componentes GNOME

   Para mais ajuda com um port GNOME, veja alguns dos ports existentes por
   exemplo. A pagina GNOME do FreeBSD tem informac,oes de contato, se
   precisar de mais ajuda. Os componentes sao divididos em componentes GNOME
   que estao atualmente em uso e componentes legados. Se o componente
   suportar argumento, eles serao listados entre parenteses na descric,ao. O
   primeiro e o padrao. "Ambos" sao mostrados se o componente usar como
   padrao a adic,ao `as dependencias de construc,ao e execuc,ao.

   Tabela 6.8. Componentes GNOME

   +---------------------------------------------------------------------------+
   |     Componente      |      Programa associado       |     Descric,ao      |
   |---------------------+-------------------------------+---------------------|
   |atk                  |accessibility/atk              |Kit de ferramentas de|
   |                     |                               |acessibilidade (ATK) |
   |---------------------+-------------------------------+---------------------|
   |atkmm                |accessibility/atkmm            |c++ bindings para atk|
   |---------------------+-------------------------------+---------------------|
   |                     |                               |Biblioteca de        |
   |cairo                |graphics/cairo                 |graficos vetoriais   |
   |                     |                               |com suporte a saida  |
   |                     |                               |entre dispositivos   |
   |---------------------+-------------------------------+---------------------|
   |cairomm              |graphics/cairomm               |c++ bindings para o  |
   |                     |                               |cairo                |
   |---------------------+-------------------------------+---------------------|
   |                     |                               |Sistema de banco de  |
   |dconf                |devel/dconf                    |dados de             |
   |                     |                               |configurac,ao (both, |
   |                     |                               |buil, run)           |
   |---------------------+-------------------------------+---------------------|
   |                     |                               |Backends de dados    |
   |evolutiondataserver3 |databases/evolution-data-server|para a suite mail/PIM|
   |                     |                               |integrada do         |
   |                     |                               |Evolution            |
   |---------------------+-------------------------------+---------------------|
   |gdkpixbuf2           |graphics/gdk-pixbuf2           |Biblioteca de        |
   |                     |                               |graficos para GTK+   |
   |---------------------+-------------------------------+---------------------|
   |glib20               |devel/glib20                   |Biblioteca core do   |
   |                     |                               |GNOMEglib20          |
   |---------------------+-------------------------------+---------------------|
   |glibmm               |devel/glibmm                   |c++ bindings para    |
   |                     |                               |glib20               |
   |---------------------+-------------------------------+---------------------|
   |gnomecontrolcenter3  |sysutils/gnome-control-center  |Centro de Controle do|
   |                     |                               |GNOME 3              |
   |---------------------+-------------------------------+---------------------|
   |                     |                               |Biblioteca de        |
   |gnomedesktop3        |x11/gnome-desktop              |interface do usuario |
   |                     |                               |do desktop GNOME 3   |
   |---------------------+-------------------------------+---------------------|
   |                     |                               |Biblioteca GObject   |
   |gsound               |audio/gsound                   |para reproduzir sons |
   |                     |                               |do sistema (both,    |
   |                     |                               |build, run)          |
   |---------------------+-------------------------------+---------------------|
   |                     |                               |Utilitario           |
   |gtk-update-icon-cache|graphics/gtk-update-icon-cache |Gtk-update-icon-cache|
   |                     |                               |do kit de ferramentas|
   |                     |                               |Gtk +                |
   |---------------------+-------------------------------+---------------------|
   |gtk20                |x11-toolkits/gtk20             |Kit de ferramentas   |
   |                     |                               |Gtk+ 2               |
   |---------------------+-------------------------------+---------------------|
   |gtk30                |x11-toolkits/gtk30             |Kit de ferramentas   |
   |                     |                               |Gtk+ 3               |
   |---------------------+-------------------------------+---------------------|
   |                     |                               |c++ bindings 2.0 para|
   |gtkmm20              |x11-toolkits/gtkmm20           |o kit de ferramentas |
   |                     |                               |gtk20                |
   |---------------------+-------------------------------+---------------------|
   |                     |                               |c++ bindings 2.4 para|
   |gtkmm24              |x11-toolkits/gtkmm24           |o kit de ferramentas |
   |                     |                               |gtk20                |
   |---------------------+-------------------------------+---------------------|
   |                     |                               |c++ bindings 3.0 para|
   |gtkmm30              |x11-toolkits/gtkmm30           |o kit de ferramentas |
   |                     |                               |gtk30                |
   |---------------------+-------------------------------+---------------------|
   |                     |                               |Widget que adiciona  |
   |gtksourceview2       |x11-toolkits/gtksourceview2    |destaque de sintaxe  |
   |                     |                               |para o GtkTextView   |
   |---------------------+-------------------------------+---------------------|
   |                     |                               |Widget de texto que  |
   |gtksourceview3       |x11-toolkits/gtksourceview3    |adiciona destaque de |
   |                     |                               |sintaxe ao widget    |
   |                     |                               |GtkTextView          |
   |---------------------+-------------------------------+---------------------|
   |                     |                               |c++ bindings para a  |
   |gtksourceviewmm3     |x11-toolkits/gtksourceviewmm3  |biblioteca           |
   |                     |                               |gtksourceview3       |
   |---------------------+-------------------------------+---------------------|
   |gvfs                 |devel/gvfs                     |Sistema de arquivos  |
   |                     |                               |virtual do GNOME     |
   |---------------------+-------------------------------+---------------------|
   |                     |                               |Ferramenta para      |
   |intltool             |textproc/intltool              |Internacionalizac,ao |
   |                     |                               |(veja tambem         |
   |                     |                               |intlhack)            |
   |---------------------+-------------------------------+---------------------|
   |                     |                               |Ligac,oes de         |
   |                     |                               |introspecc,ao e      |
   |                     |                               |ferramentas basicas  |
   |                     |                               |para gerar ligac,oes |
   |                     |                               |de introspecc,ao. Na |
   |                     |                               |maioria das vezes:   |
   |introspection        |devel/gobject-introspection    |build e suficiente, e|
   |                     |                               |:both/:run so e      |
   |                     |                               |necessario para      |
   |                     |                               |aplicativos que usam |
   |                     |                               |ligac,oes de         |
   |                     |                               |introspecc,ao. (both,|
   |                     |                               |build, run)          |
   |---------------------+-------------------------------+---------------------|
   |                     |                               |Fornece acesso       |
   |libgda5              |databases/libgda5              |uniforme a diferentes|
   |                     |                               |tipos de fontes de   |
   |                     |                               |dados                |
   |---------------------+-------------------------------+---------------------|
   |                     |                               |Biblioteca de        |
   |libgda5-ui           |databases/libgda5-ui           |interface do usuario |
   |                     |                               |da biblioteca libgda5|
   |---------------------+-------------------------------+---------------------|
   |libgdamm5            |databases/libgdamm5            |c++ bindings para a  |
   |                     |                               |biblioteca libgda5   |
   |---------------------+-------------------------------+---------------------|
   |                     |                               |Abstrac,ao extensivel|
   |libgsf               |devel/libgsf                   |de I/O para lidar com|
   |                     |                               |formatos de arquivo  |
   |                     |                               |estruturados         |
   |---------------------+-------------------------------+---------------------|
   |                     |                               |Biblioteca para      |
   |librsvg2             |graphics/librsvg2              |analisar e renderizar|
   |                     |                               |arquivos graficos    |
   |                     |                               |vetoriais SVG        |
   |---------------------+-------------------------------+---------------------|
   |libsigc++20          |devel/libsigc++20              |Framework de Callback|
   |                     |                               |para C++             |
   |---------------------+-------------------------------+---------------------|
   |libxml++26           |textproc/libxml++26            |c++ bindings para a  |
   |                     |                               |biblioteca libxml2   |
   |---------------------+-------------------------------+---------------------|
   |                     |                               |Biblioteca do parser |
   |libxml2              |textproc/libxml2               |XML (both, build,    |
   |                     |                               |run)                 |
   |---------------------+-------------------------------+---------------------|
   |libxslt              |textproc/libxslt               |Biblioteca XSLT C    |
   |                     |                               |(both, build, run)   |
   |---------------------+-------------------------------+---------------------|
   |metacity             |x11-wm/metacity                |Gerenciador de       |
   |                     |                               |janelas do GNOME     |
   |---------------------+-------------------------------+---------------------|
   |nautilus3            |x11-fm/nautilus                |Gerenciador de       |
   |                     |                               |arquivos GNOME       |
   |---------------------+-------------------------------+---------------------|
   |                     |                               |Estrutura de codigo  |
   |pango                |x11-toolkits/cave              |aberto para o layout |
   |                     |                               |e renderizac,ao do   |
   |                     |                               |texto i18n           |
   |---------------------+-------------------------------+---------------------|
   |pangomm              |x11-toolkits/pangomm           |c++ bindings para a  |
   |                     |                               |biblioteca pango     |
   |---------------------+-------------------------------+---------------------|
   |py3gobject3          |devel/py3-gobject3             |Python 3, GObject 3.0|
   |                     |                               |bindings             |
   |---------------------+-------------------------------+---------------------|
   |pygobject3           |devel/py-gobject3              |Python 2, GObject 3.0|
   |                     |                               |bindings             |
   |---------------------+-------------------------------+---------------------|
   |                     |                               |Widget de terminal   |
   |vte3                 |x11-toolkits/vte3              |com melhor           |
   |                     |                               |acessibilidade e     |
   |                     |                               |suporte I18N         |
   +---------------------------------------------------------------------------+

   Tabela 6.9. Componentes Macro do GNOME

   +------------------------------------------------------------------------+
   |  Componente   |                       Descric,ao                       |
   |---------------+--------------------------------------------------------|
   | gnomeprefix   | Fornec,a configure com alguns locais padrao.           |
   |---------------+--------------------------------------------------------|
   |               | O mesmo que intltool, porem com os patches necessarios |
   | intlhack      | para garantir o share/locale/. Por favor, use somente  |
   |               | quando intltool sozinho nao for suficiente.            |
   |---------------+--------------------------------------------------------|
   | referencehack | Esta macro existe para ajudar a dividir a API ou a     |
   |               | documentac,ao de referencia em seu proprio port.       |
   +------------------------------------------------------------------------+

   Tabela 6.10. Componentes Legados do GNOME

+----------------------------------------------------------------------------------+
|    Componente    |      Programa associado       |          Descric,ao           |
|------------------+-------------------------------+-------------------------------|
|                  |                               |Interface do Provedor de       |
|atspi             |accessibility/at-spi           |Servic,os de Tecnologia        |
|                  |                               |Assistiva                      |
|------------------+-------------------------------+-------------------------------|
|esound            |audio/esound                   |Pacote de som do Enlightenment |
|------------------+-------------------------------+-------------------------------|
|gal2              |x11-toolkits/gal2              |Colec,ao de widgets obtidos do |
|                  |                               |GNOME 2 gnumeric               |
|------------------+-------------------------------+-------------------------------|
|gconf2            |devel/gconf2                   |Sistema de banco de dados de   |
|                  |                               |configurac,ao para o GNOME 2   |
|------------------+-------------------------------+-------------------------------|
|gconfmm26         |devel/gconfmm26                |c++ bindings para o gconf2     |
|------------------+-------------------------------+-------------------------------|
|gdkpixbuf         |graphics/gdk-pixbuf            |Biblioteca de graficos para    |
|                  |                               |GTK+                           |
|------------------+-------------------------------+-------------------------------|
|glib12            |devel/glib12                   |biblioteca principal glib 1.2  |
|------------------+-------------------------------+-------------------------------|
|gnomedocutils     |textproc/gnome-doc-utils       |Utilitarios de documentac,ao   |
|                  |                               |para o GNOME                   |
|------------------+-------------------------------+-------------------------------|
|gnomemimedata     |misc/gnome-mime-data           |MIME e banco de dados de       |
|                  |                               |aplicativos para o GNOME 2     |
|------------------+-------------------------------+-------------------------------|
|gnomesharp20      |x11-toolkits/gnome-sharp20     |Interfaces do GNOME 2 para o   |
|                  |                               |tempo de execuc,ao do .NET     |
|------------------+-------------------------------+-------------------------------|
|gnomespeech       |accessibility/gnome-speech     |API de conversao de texto em   |
|                  |                               |voz do GNOME 2                 |
|------------------+-------------------------------+-------------------------------|
|gnomevfs2         |devel/gnome-vfs                |Sistema de Arquivos Virtual do |
|                  |                               |GNOME 2                        |
|------------------+-------------------------------+-------------------------------|
|gtk12             |x11-toolkits/gtk12             |Kit de ferramentas Gtk+ 1.2    |
|------------------+-------------------------------+-------------------------------|
|                  |                               |Mecanismo leve de              |
|gtkhtml3          |www/gtkhtml3                   |renderizac,ao/impressao/edic,ao|
|                  |                               |de HTML                        |
|------------------+-------------------------------+-------------------------------|
|                  |                               |Mecanismo leve de              |
|gtkhtml4          |www/gtkhtml4                   |renderizac,ao/impressao/edic,ao|
|                  |                               |de HTML                        |
|------------------+-------------------------------+-------------------------------|
|gtksharp20        |x11-toolkits/gtk-sharp20       |Interfaces GTK+ e GNOME 2 para |
|                  |                               |o runtime .NET                 |
|------------------+-------------------------------+-------------------------------|
|gtksourceview     |x11-toolkits/gtksourceview     |Widget que adiciona destaque de|
|                  |                               |sintaxe para o GtkTextView     |
|------------------+-------------------------------+-------------------------------|
|libartgpl2        |graphics/libart_lgpl           |Biblioteca para graficos 2D de |
|                  |                               |alto desempenho                |
|------------------+-------------------------------+-------------------------------|
|                  |                               |Componente e sistema de        |
|libbonobo         |devel/libbonobo                |documentos compostos para o    |
|                  |                               |GNOME 2                        |
|------------------+-------------------------------+-------------------------------|
|libbonoboui       |x11-toolkits/libbonoboui       |GUI frontend para o componente |
|                  |                               |libbonobo do GNOME 2           |
|------------------+-------------------------------+-------------------------------|
|                  |                               |Fornece acesso uniforme a      |
|libgda4           |databases/libgda4              |diferentes tipos de fontes de  |
|                  |                               |dados                          |
|------------------+-------------------------------+-------------------------------|
|libglade2         |devel/libglade2                |Biblioteca glade do GNOME 2    |
|------------------+-------------------------------+-------------------------------|
|libgnome          |x11/libgnome                   |Bibliotecas para o GNOME 2, um |
|                  |                               |ambiente de desktop GNU        |
|------------------+-------------------------------+-------------------------------|
|libgnomecanvas    |graphics/libgnomecanvas        |Biblioteca Grafica para o GNOME|
|                  |                               |2                              |
|------------------+-------------------------------+-------------------------------|
|libgnomekbd       |x11/libgnomekbd                |Biblioteca compartilhada de    |
|                  |                               |teclado do GNOME 2             |
|------------------+-------------------------------+-------------------------------|
|libgnomeprint     |print/libgnomeprint            |Biblioteca de suporte de       |
|                  |                               |impressao do Gnome 2           |
|------------------+-------------------------------+-------------------------------|
|libgnomeprintui   |x11-toolkits/libgnomeprintui   |Biblioteca de suporte de       |
|                  |                               |impressao do Gnome 2           |
|------------------+-------------------------------+-------------------------------|
|libgnomeui        |x11-toolkits/libgnomeui        |Bibliotecas para a GUI do GNOME|
|                  |                               |2, um ambiente de desktop GNU  |
|------------------+-------------------------------+-------------------------------|
|                  |                               |Mecanismo leve de              |
|libgtkhtml        |www/libgtkhtml                 |renderizac,ao/impressao/edic,ao|
|                  |                               |de HTML                        |
|------------------+-------------------------------+-------------------------------|
|libgtksourceviewmm|x11-toolkits/libgtksourceviewmm|c++ binding do GtkSourceView   |
|------------------+-------------------------------+-------------------------------|
|libidl            |devel/libIDL                   |Biblioteca para criac,ao de    |
|                  |                               |arvores de arquivo do CORBA IDL|
|------------------+-------------------------------+-------------------------------|
|libsigc++12       |devel/libsigc++12              |Framework de Callback para C++ |
|------------------+-------------------------------+-------------------------------|
|libwnck           |x11-toolkits/libwnck           |Biblioteca usada para escrever |
|                  |                               |pagers e listas de tarefas     |
|------------------+-------------------------------+-------------------------------|
|libwnck3          |x11-toolkits/libwnck3          |Biblioteca usada para escrever |
|                  |                               |pagers e listas de tarefas     |
|------------------+-------------------------------+-------------------------------|
|orbit2            |devel/ORBit2                   |CORBA ORB de alto desempenho   |
|                  |                               |com suporte para a linguagem C |
|------------------+-------------------------------+-------------------------------|
|pygnome2          |x11-toolkits/py-gnome2         |Python bindings para GNOME 2   |
|------------------+-------------------------------+-------------------------------|
|pygobject         |devel/py-gobject               |Python 2, GObject 2.0 bindings |
|------------------+-------------------------------+-------------------------------|
|pygtk2            |x11-toolkits/py-gtk2           |Conjunto de Python bindings    |
|                  |                               |para GTK+                      |
|------------------+-------------------------------+-------------------------------|
|pygtksourceview   |x11-toolkits/py-gtksourceview  |Python bindings para           |
|                  |                               |GtkSourceView 2                |
|------------------+-------------------------------+-------------------------------|
|vte               |x11-toolkits/vte               |Widget de terminal com melhor  |
|                  |                               |acessibilidade e suporte I18N  |
+----------------------------------------------------------------------------------+

   Tabela 6.11. Componentes Obsoletos: Nao Use

   +------------------------------------------------------------------------+
   |  Componente   |                       Descric,ao                       |
   |---------------+--------------------------------------------------------|
   | pangox-compat | O pangox-compatfoi descontinuado e separado do pacote  |
   |               | pango.                                                 |
   +------------------------------------------------------------------------+

6.12. Usando o Qt

  Nota:

   Para ports que fazem parte do Qt, veja Sec,ao 17.76, "qt-dist".

  6.12.1. Ports que requerem o Qt

   A colec,ao de ports fornece suporte para o Qt 5 com USES+=qt:5. Configure
   o USE_QT para a lista de componentes obrigatorios do Qt (bibliotecas,
   ferramentas, plugins).

   O framework Qt exporta um numero de variaveis &#8203;&#8203;que podem ser
   usadas por ports, algumas delas listadas abaixo:

   Tabela 6.12. Variaveis &#8203;&#8203;Fornecidas aos Ports Que Usam o Qt

   QMAKE        Caminho completo para o binario qmake.     
   LRELEASE     Caminho completo para utilitario Irelease. 
   MOC          Caminho completo para moc.                 
   RCC          Caminho completo para rcc.                 
   UIC          Caminho completo para uic.                 
   QT_INCDIR    Diretorio include Qt.                      
   QT_LIBDIR    Caminho das bibliotecas Qt.                
   QT_PLUGINDIR Caminho de plugins do Qt.                  

  6.12.2. Selec,ao de Componentes

   As dependencias individuais das ferramentas e da biblioteca Qt devem ser
   especificadas em USE_QT. Todo componente pode ser sufixado com _build ou
   _run, o sufixo indica se a dependencia no componente esta no tempo de
   compilac,ao ou no tempo de execuc,ao. Se um sufixo nao for usado, a
   dependencia do componente sera tanto em tempo de compilac,ao quanto em
   tempo de execuc,ao. Geralmente, os componentes da biblioteca sao
   especificados como unsuffixed, os componentes das ferramentas sao
   especificados com o sufixo _build e os componentes dos plugins sao
   especificados com o sufixo _run. Os componentes mais comumente usados
   estao listados abaixo (todos os componentes disponiveis estao listados em
   _USE_QT_ALL e _USE_QT5_ONLY em /usr/ports/Mk/Uses/qt.mk):

   Tabela 6.13. Componentes da Biblioteca Qt Disponiveis

         Nome                              Descric,ao                         
   3d               Modulo Qt3D                                               
   assistant        Navegador de documentac,ao do Qt 5                        
   canvas3d         Modulo Qt canvas3d                                        
   charts           Modulo de graficos Qt 5                                   
   concurrent       Modulo multi-threading Qt                                 
   connectivity     Modulo de conectividade Qt (Bluetooth/NFC)                
   core             Modulo nao-grafico do nucleo Qt                           
   datavis3d        Modulo de visualizac,ao de dados 3D Qt 5                  
   dbus             Modulo de comunicac,ao entre processos Qt D-Bus           
   declarative      Framework declarativo Qt para interfaces dinamicas de     
                    usuario                                                   
   designer         Designer grafico de interface de usuario do Qt 5          
   diag             Ferramenta para relatar informac,oes de diagnostico sobre 
                    o Qt e seu ambiente                                       
   doc              Documentac,ao do Qt 5                                     
   examples         Codigo-fonte dos exemplos do Qt 5                         
   gamepad          Modulo de Gamepad Qt 5                                    
   graphicaleffects Efeitos graficos rapidos do Qt                            
   gui              Modulo de interface grafica do usuario do Qt              
   help             Modulo de integrac,ao de ajuda on-line do Qt              
   l10n             Mensagens localizadas do Qt                               
   linguist         Ferramenta de traduc,ao do Qt 5                           
   location         Modulo de localizac,ao do Qt                              
   multimedia       Modulo de suporte de audio, video, radio e camera do Qt   
   network          Modulo de rede do Qt                                      
   networkauth      Modulo de autenticac,ao de rede do Qt                     
   opengl           Modulo de suporte OpenGL compativel com o Qt 5            
   paths            Cliente de linha de comando para QStandardPaths           
   phonon4          Framework de multimidia do KDE                            
   pixeltool        Lupa de tela do Qt 5                                      
   plugininfo       Dumper de metadados do plugin Qt5                         
   printsupport     Modulo de suporte de impressao do Qt                      
   qdbus            Interface de linha de comando do Qt para o D-Bus          
   qdbusviewer      Interface grafica do Qt 5 para o D-Bus                    
   qdoc             Gerador de documentac,ao do Qt                            
   qdoc-data        Arquivos de configurac,ao do QDoc                         
   qev              Ferramenta de introspecc,ao de eventos Qt QWidget         
   qmake            Gerador de Makefile do Qt                                 
   quickcontrols    Conjunto de controles para construir interfaces completas 
                    no Qt Quick                                               
   quickcontrols2   Conjunto de controles para construir interfaces completas 
                    no Qt Quick                                               
   remoteobjects    Modulo SXCML Qt5                                          
   script           Modulo de script compativel com Qt 4                      
   scripttools      Componentes adicionais do Qt Script                       
   scxml            Modulo SXCML Qt5                                          
   sensors          Modulo de sensores do Qt                                  
   serialbus        Func,oes do Qt para acessar sistemas de bus industriais   
   serialport       Func,oes do Qt para acessar portas seriais                
   speech           Recursos de acessibilidade para o Qt5                     
   sql              Modulo de integrac,ao a banco de dados SQL do Qt          
   sql-ibase        Plugin de banco de dados InterBase/Firebird do Qt         
   sql-mysql        Plugin de banco de dados MySQL do Qt                      
   sql-odbc         Plugin Qt para conectividade Open Database                
   sql-pgsql        Plugin de banco de dados do PostgreSQL do Qt              
   sql-sqlite2      Plugin de banco de dados SQLite 2 do Qt                   
   sql-sqlite3      Plugin de banco de dados SQLite 3 do Qt                   
   sql-tds          Plugin de conectividade ao banco de dados TDS do Qt       
   svg              Modulo de suporte SVT do Qt                               
   testlib          Modulo de teste unitario do Qt                            
   uiplugin         Interface de plug-in do Qt widget personalizado para o Qt 
                    Designer                                                  
   uitools          Modulo de suporte a formularios de interface de usuario   
                    do Qt Designer                                            
   virtualkeyboard  Modulo de teclado virtual do Qt 5                         
   wayland          Qt5 wrapper para o Wayland                                
   webchannel       Biblioteca Qt 5 para integrac,ao de C++/QML com clientes  
                    HTML/js                                                   
   webengine        Biblioteca Qt 5 para renderizar conteudo da web           
   webkit           QtWebKit com uma base de codigo WebKit mais moderna       
   websockets       Implementac,ao do protocolo WebSocket do Qt               
   websockets-qml   Implementac,ao do protocolo WebSocket do Qt (QML          
                    bindings)                                                 
   webview          Componente do Qt para exibir o conteudo da web            
   widgets          Modulo de widgets C++ do Qt                               
   x11extras        Recursos especificos da plataforma Qt para sistemas       
                    baseados em X11                                           
   xml              Implementac,oes SAX e DOM do Qt                           
   xmlpatterns      Suporte do Qt para XPath, XQuery, XSLT e XML Schema       

   Para determinar as bibliotecas das quais um aplicativo depende, execute o
   ldd no executavel principal apos uma compilac,ao bem sucedida.

   Tabela 6.14. Componentes Disponiveis da Ferramenta Qt

       Nome                               Descric,ao                          
   buildtools    Ferramentas de compilac,ao (moc, rcc), necessaria para quase 
                 todas as aplicac,oes do Qt.                                  
   linguisttools ferramentas de localizac,ao: Irelease, lupdate               
   qmake         Utilitario gerador/compilador de Makefile                    

   Tabela 6.15. Componentes Disponiveis de Plugin Qt

       Nome                       Descric,ao                    
   imageformats plugins para formatos de imagem TGA, TIFF e MNG 

   Exemplo 6.19. Selecionando Componentes do Qt 5

   Neste exemplo, o aplicativo portado usa a biblioteca de interface grafica
   do usuario do Qt 5, a biblioteca principal do Qt 5, todas as ferramentas
   de gerac,ao de codigo do Qt 5 e o gerador de Makefile do Qt 5. Uma vez que
   a biblioteca gui implica na dependencia da biblioteca principal, o core
   nao precisa ser especificado. As ferramentas de gerac,ao de codigo do Qt 5
   moc, uic e rcc, bem como o gerador de Makefile qmake sao necessarios
   apenas em tempo de compilac,ao, assim eles sao especificados com o sufixo
   _build:

 USES=   qt:5
 USE_QT= gui buildtools_build qmake_build

  6.12.3. Usando qmake

   Se o aplicativo fornecer um arquivo de projeto qmake (*.pro), defina
   USES=qmake junto com USE_QTx. Observe que USES=qmake ja implica uma
   dependencia de compilac,ao no qmake, portanto, o componente qmake pode ser
   omitido de USE_QT. Igual ao CMake, o qmake suporta compilac,oes
   out-of-source, que podem ser ativadas especificando o argumento outsource
   (verUSES=qmakeexemplo) .

   Tabela 6.16. Argumentos Possiveis para USES= qmake

     Variavel                            Descric,ao                           
                Nao adicione o target configure. Isso e implicito pelo        
                HAS_CONFIGURE=yes e GNU_CONFIGURE=yes. Isso e requerido       
   no_configure quando a compilac,ao apenas precisa do ambiente de setup do   
                USES= qmake, e dessa forma, executa-se o qmake por si         
                proprio.                                                      
                Suprime modificac,oes dos ambientes configure e make. E       
   no_env       necessario somente quando qmake e usado para configurar o     
                software e a compilac,ao falha em entender a configurac,ao do 
                ambiente pelo USES= qmake.                                    
   norecursive  Nao passe o argumento -recursive para o qmake.                
   outsource    Realiza uma compilac,ao out-of-source.                        

   Tabela 6.17. Variaveis &#8203;&#8203;para Ports Que Usam o qmake

       Variavel                             Descric,ao                        
   QMAKE_ARGS        Flags especificas do port qmake a serem passadas para o  
                     binario do qmake.                                        
   QMAKE_ENV         Variaveis &#8203;&#8203;de ambiente a serem definidas    
                     para o binario qmake. O padrao e ${CONFIGURE_ENV}.       
                     Caminho para os arquivos de projeto do qmake (.pro). O   
   QMAKE_SOURCE_PATH padrao e ${WRKSRC} se uma compilac,ao out-of-source for  
                     solicitada, caso contrario, deixe em branco.             

   Ao usar USES= qmake, estas configurac,oes sao implementadas:

 CONFIGURE_ARGS+=        --with-qt-includes=${QT_INCDIR} \
                         --with-qt-libraries=${QT_LIBDIR} \
                         --with-extra-libs=${LOCALBASE}/lib \
                         --with-extra-includes=${LOCALBASE}/include

 CONFIGURE_ENV+= QTDIR="${QT_PREFIX}" QMAKE="${QMAKE}" \
                 MOC="${MOC}" RCC="${RCC}" UIC="${UIC}" \
                 QMAKESPEC="${QMAKESPEC}"

 PLIST_SUB+=     QT_INCDIR=${QT_INCDIR_REL} \
                 QT_LIBDIR=${QT_LIBDIR_REL} \
                 QT_PLUGINDIR=${QT_PLUGINDIR_REL}

   Alguns scripts de configurac,ao nao suportam os argumentos acima. Para
   suprimir a modificac,ao de CONFIGURE_ENV e CONFIGURE_ARGS defina USES=
   qmake:no_env.

   Exemplo 6.20. Exemplo USES= qmake

   Este trecho demonstra o uso do qmake para um port Qt 5:

 USES=   qmake:outsource qt:5
 USE_QT= buildtools_build

   Aplicac,oes Qt sao frequentemente escritas para serem multi-plataforma e
   muitas vezes o X11/Unix nao e a plataforma em que sao desenvolvidas, o que
   por sua vez leva a certas pontas soltas, como:

     * Faltam caminhos de inclusao adicionais. Muitos aplicativos vem com
       suporte ao icone da bandeja do sistema, mas nao buscam inclusoes e/ou
       bibliotecas nos diretorios do X11. Para adicionar diretorios aos
       includes e bibliotecas de pesquisa do qmake atraves da linha de
       comando, use:

 QMAKE_ARGS+=    INCLUDEPATH+=${LOCALBASE}/include \
                 LIBS+=-L${LOCALBASE}/lib

     * Caminhos falsos de instalac,ao. As vezes, dados como icones ou
       arquivos .desktop sao instalados por padrao em diretorios que nao sao
       verificados por aplicativos compativeis com XDG. O editors/texmaker e
       um exemplo disso - veja patch-texmaker.pro no diretorio de arquivos
       desse port para um modelo sobre como remediar isso diretamente no
       arquivo de projeto qmake.

6.13. Usando o KDE

  6.13.1. Definic,oes de Variaveis &#8203;&#8203;do KDE

   Se a aplicac,ao depender do KDE, defina USES+=kde:5 e defina USE_KDE com a
   lista de componentes necessarios. Sufixos _build e _run podem ser usados
   &#8203;&#8203;para forc,ar o tipo de dependencia de componentes (por
   exemplo, baseapps_run). Se nenhum sufixo for definido, o tipo padrao de
   dependencia sera usado. Para forc,ar os dois tipos, adicione o componente
   duas vezes com os dois sufixos (por exemplo, ecm_build ecm_run). Os
   componentes disponiveis estao listados abaixo (os componentes atualizados
   tambem estao listados em /usr/ports/Mk/Uses/kde.mk):

   Tabela 6.18. Componentes Disponiveis do KDE

              Nome                               Descric,ao                   
   activities                  Biblioteca de tempo de execuc,ao do KF5 para   
                               organizar o trabalho em atividades separadas   
   activities-stats            Estatisticas do KF5 para atividades            
   activitymanagerd            Servic,o do sistema para gerenciar atividades  
                               do usuario, rastrear os padroes de uso         
   akonadi                     Servidor de armazenamento para o KDE-Pim       
   akonadicalendar             Integrac,ao de Calendario do Akonadi           
   akonadiconsole              Console de gerenciamento e depurac,ao do       
                               Akonadi                                        
   akonadicontacts             Bibliotecas e daemons para implementar o       
                               gerenciamento de contatos do Akonadi           
   akonadiimportwizard         Importa dados de outros clientes de email para 
                               o KMail                                        
   akonadimime                 Bibliotecas e daemons para implementar o       
                               tratamento basico de email                     
   akonadinotes                Biblioteca do KDE para acessar caixas postais  
                               no formato MBox                                
   akonadisearch               Bibliotecas e daemons para implementar buscas  
                               no Akonadi                                     
   akregator                   Um leitor de feeds do KDE                      
   alarmcalendar               API do KDE para alarmes do KAlarm              
   apidox                      Ferramentas de Documentac,ao da API KF5        
   archive                     Biblioteca KF5 que fornece classes para lidar  
                               com formatos de arquivo                        
   attica                      Biblioteca da API do Open Collaboration        
                               Services do KDE 5                              
   attica5                     Biblioteca da API do Open Collaboration        
                               Services do KDE 5                              
   auth                        Abstrac,ao do KF5 para funcionalidades de      
                               autenticac,ao e politicas do sistema           
   baloo                       KF5 Framework para pesquisar e gerenciar       
                               metadados do usuario                           
   baloo-widgets               Biblioteca BalooWidgets                        
   baloo5                      KF5 Framework para pesquisar e gerenciar       
                               metadados do usuario                           
   blog                        API do KDE para acesso ao weblogging           
   bookmarks                   Biblioteca KF5 para bookmarks e para o formato 
                               XBEL                                           
   breeze                      Arte, estilos e recursos do Plasma5 para o     
                               estilo visual Breeze                           
   breeze-gtk                  Estilo visual do Plasma5 Breeze para Gtk       
   breeze-icons                Tema de icones do Breeze para o KDE            
   calendarcore                Biblioteca de acesso ao calendario do KDE      
   calendarsupport             Bibliotecas de suporte de calendario para o    
                               KDEPim                                         
   calendarutils               Utilitario KDE e func,oes da interface do      
                               usuario para acessar o calendario              
   codecs                      Biblioteca KF5 para manipulac,ao de string     
   completion                  Assistentes e widgets de conclusao de texto do 
                               KF5                                            
   config                      Widgets do KF5 para dialogos de configurac,ao  
   configwidgets               Widgets do KF5 para dialogos de configurac,ao  
   contacts                    Api do KDE para gerenciar informac,oes de      
                               contato                                        
   coreaddons                  Complementos do KF5 para o QtCore              
   crash                       Biblioteca KF5 para lidar com analise de       
                               falhas e relatorio de erros de aplicativos     
   dbusaddons                  Complementos do KF5 para o QtDBus              
   decoration                  Biblioteca do Plasma5 para criar decorac,oes   
                               de janelas                                     
   designerplugin              Integrac,ao do KF5 para widgets de Framework   
                               no Qt Designer/Creator                         
   discover                    Ferramentas de gerenciamento de pacotes do     
                               Plasma5                                        
   dnssd                       Abstrac,ao do KF5 para os recursos do sistema  
                               DNSSD                                          
   doctools                    Gerac,ao de documentac,ao do KF5 a partir do   
                               docbook                                        
   drkonqi                     Manipulador de falhas do Plasma5               
   ecm                         Modulos e scripts extras para o CMake          
   emoticons                   Biblioteca KF5 para converter emoticons        
   eventviews                  Bibliotecas de visualizac,ao de eventos para o 
                               KDEPim                                         
   filemetadata                Biblioteca KF5 para extrair metadados de       
                               arquivos                                       
   frameworkintegration        Espac,o de trabalho e plugins de integrac,ao   
                               entre estruturas KF5                           
   gapi                        Biblioteca baseada no KDE para acessar         
                               servic,os do Google                            
   globalaccel                 Biblioteca KF5 para incluir suporte para       
                               atalhos do espac,o de trabalho global          
   grantlee-editor             Editor para os temas de Grantlee               
   grantleetheme               KDE PIM grantleetheme                          
   gravatar                    Biblioteca para suporte a gravatar             
   guiaddons                   Complementos do KF5 para o QtGui               
   holidays                    Biblioteca do KDE para feriados do calendario  
   hotkeys                     Biblioteca do Plasma5 para teclas de atalho    
   i18n                        Framework avanc,ado de internacionalizac,ao do 
                               KF5                                            
   iconthemes                  Biblioteca KF5 para manipular icones em        
                               aplicativos                                    
   identitymanagement          Identidades do KDE pim                         
   idletime                    Biblioteca KF5 para monitorar a atividade do   
                               usuario                                        
   imap                        API do KDE para suporte a IMAP                 
   incidenceeditor             Bibliotecas do editor de incidencias para o    
                               KDE Pim                                        
   infocenter                  Utilidade do Plasma5 fornecendo informac,oes   
                               do sistema                                     
   init                        Iniciador de processos KF5 para acelerar o     
                               lanc,amento de aplicativos do KDE              
   itemmodels                  Modelos KF5 para o sistema Qt Model / View     
   itemviews                   KF5 widget addons para Qt Model/View           
   jobwidgets                  Widgets do KF5 para rastrear a instancia do    
                               KJob                                           
   js                          Biblioteca KF5 que fornece um interpretador de 
                               script ECMA                                    
   jsembed                     Biblioteca KF5 para ligar objetos JavaScript a 
                               QObjects                                       
   kaddressbook                Gerenciador de contatos do KDE                 
   kalarm                      Agendador de alarmes pessoal                   
   kalarm                      Agendador de alarmes pessoal                   
   kate                        Framework basico do editor para o sistema KDE  
   kcmutils                    Utilitarios KF5 para trabalhar com KCModules   
   kde-cli-tools               Ferramentas nao interativas do sistema do      
                               Plasma5                                        
   kde-gtk-config              Configurador Plasma5 GTK2 e GTK3               
   kdeclarative                Biblioteca KF5 que prove a integrac,ao dos     
                               frameworks do QML e do KDE                     
   kded                        Daemon extensivel do KF5 para fornecer         
                               servic,os a nivel do sistema                   
   kdelibs4support             KF5 porting aid from KDELibs4                  
   kdepim-addons               Complementos do KDE PIM                        
   kdepim-apps-libs            Bibliotecas do KDE PIM relacionadas ao correio 
   kdepim-runtime5             Ferramentas e servic,os do KDE PIM             
   kdeplasma-addons            Complementos do Plasma 5 para melhorar a       
                               experiencia do Plasma                          
   kdesu                       Integrac,ao do KF5 com o su para privilegios   
                               elevados                                       
   kdewebkit                   Biblioteca KF5 que fornece a integrac,ao do    
                               QtWebKit                                       
   kgamma5                     Configurac,oes de gama do monitor Plasma5      
   khtml                       Motor de renderizac,ao KF5 KTHML               
   kimageformats               Biblioteca KF5 que fornece suporte para        
                               formatos de imagem adicionais                  
   kio                         Recurso e abstrac,ao de acesso `a rede do KF5  
   kirigami2                   Conjunto de componentes baseados em QtQuick    
   kitinerary                  Modelo de dados e sistema de extrac,ao para    
                               informac,oes de reservas de viagens            
   kmail                       Cliente de correio do KDE                      
   kmail                       Cliente de correio do KDE                      
   kmail-account-wizard        Assistente de conta de e-mail do KDE           
   kmenuedit                   Editor de menu do Plasma5                      
   knotes                      Notas pop-up                                   
   kontact                     Gerenciador de Informac,oes Pessoais do KDE    
   kontact                     Gerenciador de Informac,oes Pessoais do KDE    
   kontactinterface            Cola do KDE para incorporar KParts no Kontact  
   korganizer                  Programa de calendario e agendamento           
   kpimdav                     Uma implementac,ao do protocolo DAV com KJobs  
   kpkpass                     Biblioteca para lidar com pass files da Apple  
                               Wallet                                         
   kross                       Aplicac,ao de scripting multi-language do KF5  
   kscreen                     Biblioteca de gerenciamento de tela do Plasma5 
   kscreenlocker               Arquitetura de tela de bloqueio seguro do      
                               Plasma5                                        
   ksmtp                       Biblioteca job-based para enviar email atraves 
                               de um servidor SMTP                            
   ksshaskpass                 Frontend ssh-add do Plasma5                    
   ksysguard                   Utilitario Plasma5 para rastrear e controlar   
                               os processos em execuc,ao                      
   kwallet-pam                 Integrac,ao PAM do Plasma5 KWallet             
   kwayland-integration        Plugins de integrac,ao para um desktop baseado 
                               em Wayland                                     
   kwin                        Gerenciador de janelas do Plasma5              
   kwrited                     Daemon do Plasma5 para ouvir paredes e         
                               escrever mensagens                             
   ldap                        API de acesso LDAP para o KDE                  
   libkcddb                    Biblioteca KDE CDDB                            
   libkcompactdisc             Biblioteca do KDE para interfaceamento com CDs 
                               de audio                                       
   libkdcraw                   Interface LibRaw para o KDE                    
   libkdegames                 Bibliotecas usadas pelos jogos do KDE          
   libkdepim                   Bibliotecas KDE PIM                            
   libkeduvocdocument          Biblioteca para leitura e gravac,ao de         
                               arquivos de vocabulario                        
   libkexiv2                   Interface da biblioteca Exiv2 para o KDE       
   libkipi                     Interface de Plugin de Imagem do KDE           
   libkleo                     Gerenciador de certificados para o KDE         
   libksane                    Interface da biblioteca SANE para o KDE        
   libkscreen                  Biblioteca de gerenciamento de tela do Plasma5 
   libksieve                   Bibliotecas de inspec,ao para o KDEPim         
   libksysguard                Biblioteca do Plasma5 para rastrear e          
                               controlar processos em execuc,ao               
   mailcommon                  Bibliotecas comuns para o KDEPim               
   mailimporter                Importar arquivos mbox para o KMail            
   mailtransport               Biblioteca do KDE para gerenciar o transporte  
                               de correio                                     
   marble                      Globo virtual e atlas mundial para o KDE       
   mbox                        Biblioteca do KDE para acessar caixas postais  
                               no formato MBox                                
   mbox-importer               Importar arquivos mbox para o KMail            
   mediaplayer                 Interface de plug-in do KF5 para recursos do   
                               media player                                   
   messagelib                  Biblioteca para manipular mensagens            
   milou                       Plasma5 Plasmoide para pesquisa                
   mime                        Biblioteca para manipular dados MIME           
   newstuff                    Biblioteca KF5 para baixar aplicativos da rede 
   notifications               Abstrac,ao KF5 para notificac,oes do sistema   
   notifyconfig                Sistema de configurac,ao KF5 para o KNotify    
   okular                      Visualizador universal de documentos do KDE    
   oxygen                      Estilo Oxygen Plasma5                          
   oxygen-icons5               O tema de icones do Oxygen para o KDE          
   package                     Biblioteca KF5 para carregar e instalar        
                               pacotes                                        
   parts                       Sistema de plugin centrado em documentos KF5   
   people                      Biblioteca KF5 para fornecer acesso a contatos 
   pim-data-exporter           Importar e exportar configurac,oes do KDE PIM  
   pimcommon                   Bibliotecas comuns para o KDEPim               
   pimtextedit                 Biblioteca do KDE para utilitarios de edic,ao  
                               de texto especificos do PIM                    
   plasma-browser-integration  Componentes do Plasma5 para integrar           
                               navegadores na area de trabalho                
   plasma-desktop              Area de trabalho plasma Plasma5                
   plasma-framework            UI runtime baseado no plugin KF5 usado para    
                               escrever interfaces de usuarios                
   plasma-integration          Plugins de integrac,ao do Qt Platform Theme    
                               para os workspaces do Plasma                   
   plasma-pa                   Misturador de audio de pulso do Plasma5 Plasma 
   plasma-sdk                  Aplicac,oes do Plasma5 uteis para o            
                               desenvolvimento Plasma                         
   plasma-workspace            Workspace Plasma5 Plasma                       
   plasma-workspace-wallpapers Plasma5 wallpapers                             
   plotting                    Framework de plotagem leve KF5                 
   polkit-kde-agent-1          Daemon do Plasma5 que fornece uma interface de 
                               usuario de autenticac,ao do polkit             
   powerdevil                  Ferramenta Plasma5 para gerenciar as           
                               configurac,oes de consumo de energia           
   prison                      API para produzir codigos de barras            
   pty                         Abstrac,ao KF5 pty                             
   purpose                     Oferece ac,oes disponiveis para um proposito   
                               especifico                                     
   qqc2-desktop-style          Estilo Qt QuickControl2 para o KDE             
   runner                      Sistema de consulta paralelizado do KF5        
   service                     Plugin KF5 avanc,ado e servic,o de             
                               introspecc,ao                                  
   solid                       Integrac,ao e detecc,ao de hardware do KF5     
   sonnet                      Biblioteca de verificac,ao de ortografia       
                               baseada no plugin do KF5                       
   syndication                 Biblioteca de manipulac,ao de feeds do KDE     
   syntaxhighlighting          Mecanismo de destaque de sintaxe KF5 para      
                               texto e codigo estruturados                    
   systemsettings              Configurac,oes do sistema Plasma5              
   texteditor                  Editor avanc,ado de texto embutido do KF5      
   textwidgets                 Widgets avanc,ados do KF5 para edic,ao de      
                               texto                                          
   threadweaver                Complementos do KF5 para o QtDBus              
   tnef                        API do KDE para o tratamento de dados TNEF     
   unitconversion              Biblioteca KF5 para conversao de unidade       
   user-manager                Gerenciador de usuarios do Plasma5             
   wallet                      Conteiner KF5 seguro e unificado para senhas   
                               de usuarios                                    
   wayland                     Wrapper da biblioteca KF5 Cliente e Servidor   
                               para as bibliotecas Wayland                    
   widgetsaddons               Complementos do KF5 para o QtWidgets           
   windowsystem                Biblioteca KF5 para acesso ao sistema de       
                               janelas                                        
   xmlgui                      Janelas principais configuraveis pelo usuario  
                               do KF5                                         
   xmlrpcclient                Interac,ao KF5 com servic,os XMLRPC            

   Exemplo 6.21. Exemplo USE_KDE

   Este e um exemplo simples para um port do KDE. O USES= cmake instrui o
   port a utilizar o CMake, uma ferramenta de configurac,ao amplamente usada
   pelos projetos do KDE (veja Sec,ao 6.5.4, "Usando o cmake"para
   informac,oes detalhadas sobre o uso). O USE_KDE informa a dependencia das
   bibliotecas do KDE. Os componentes necessarios do KDE e outras
   dependencias podem ser determinadas atraves do log de configurac,ao. O
   USE_KDE nao implica no USE_QT. Se um port requer alguns componentes do Qt,
   especifique-os em USE_QT.

 USES=           cmake kde:5 qt:5
 USE_KDE=        ecm
 USE_QT=         core buildtools_build qmake_build

6.14. Usando o LXQt

   As aplicac,oes que dependem do LXQt devem definir USES+= lxqt e definir a
   variavel USE_LXQT para a lista de componentes necessarios da tabela abaixo

   Tabela 6.19. Componentes disponiveis do LXQt

      Nome                              Descric,ao                            
   buildtools Auxiliares para modulos CMake adicionais                        
   libfmqt    Libfm Qt bindings                                               
   lxqt       LXQt core library                                               
   qtxdg      Implementac,ao do Qt das especificac,oes do XDG do              
              freedesktop.org                                                 

   Exemplo 6.22. Exemplo USE_LXQT

   Este e um exemplo simples, USE_LXQT adiciona uma dependencia em
   bibliotecas LXQt. Os componentes necessarios do LXQt e outras dependencias
   podem ser determinados a partir do log de configurac,ao.

 USES=   cmake lxqt qt:5 tar:xz
 USE_QT=         core dbus widgets buildtools_build qmake_build
 USE_LXQT=       buildtools libfmqt

6.15. Usando Java

  6.15.1. Definic,oes de Variaveis

   Se o port precisar de um Java(TM) Development Kit (JDK) para compilar,
   executar ou ate mesmo extrair o distfile, entao defina USE_JAVA.

   Existem varios JDKs na colec,ao de ports, de varios fornecedores e em
   varias versoes. Se o port precisar usar uma versao especifica,
   especifique-a usando a variavel JAVA_VERSION. A versao mais atual e
   java/openjdk15, com java/openjdk14, java/openjdk13, java/openjdk12,
   java/openjdk11, java/openjdk8, e java/openjdk7 tambem disponiveis.

   Tabela 6.20. Variaveis &#8203;&#8203;Que Podem ser Definidas por Ports Que
   Usam Java

     Variavel                             Significa                           
   USE_JAVA     Defina para as variaveis &#8203;&#8203;restantes para ter     
                algum efeito.                                                 
                Lista das versoes Java adequadas separadas por espac,o para o 
   JAVA_VERSION port. Um opcional "+" permite especificar um intervalo de     
                versoes (valores permitidos: 7[+] 8[+] 11[+] 12[+] 13[+]      
                14[+] 15[+]).                                                 
                Lista de sistemas operacionais adequados do port JDK          
   JAVA_OS      separados por espac,o para o port (valores permitidos: native 
                linux).                                                       
                Lista de fornecedores adequados de ports JDK separados por    
   JAVA_VENDOR  espac,os para o port (valores permitidos: freebsd bsdjava sun 
                openjdk).                                                     
   JAVA_BUILD   Quando definido, adiciona o port JDK selecionado `as          
                dependencias de compilac,ao.                                  
   JAVA_RUN     Quando definido, adicione o port JDK selecionado `as          
                dependencias de execuc,ao.                                    
   JAVA_EXTRACT Quando definido, adicione o port JDK selecionado `as          
                dependencias de extrac,ao.                                    

   Abaixo esta a lista de todas as configurac,oes que um port recebera apos a
   configurac,ao de USE_JAVA:

   Tabela 6.21. Variaveis &#8203;&#8203;Fornecidas para Ports que Usam Java

          Variavel                                   Valor                         
JAVA_PORT                    O nome do port do JDK (por exemplo,java/openjdk6).    
                             A versao completa do port do JDK (por exemplo,1.6.0). 
JAVA_PORT_VERSION            Somente os dois primeiros digitos deste numero de     
                             versao sao necessarios, use                           
                             ${JAVA_PORT_VERSION:C/^([0-9])\.([0-9])(.*)$/\1.\2/}. 
JAVA_PORT_OS                 O sistema operacional usado pelo port do JDK (por     
                             exemplo, 'native').                                   
JAVA_PORT_VENDOR             O fornecedor do port JDK (por exemplo,'openjdk').     
JAVA_PORT_OS_DESCRIPTION     Descric,ao do sistema operacional usado pelo port JDK 
                             (por exemplo, 'Native').                              
JAVA_PORT_VENDOR_DESCRIPTION Descric,ao do fornecedor do port JDK (por             
                             exemplo,'OpenJDK BSD Porting Team').                  
JAVA_HOME                    Caminho para o diretorio de instalac,ao do JDK (por   
                             exemplo, '/usr/local/openjdk6').                      
JAVAC                        Caminho para o compilador Java (por exemplo,          
                             '/usr/local/openjdk6/bin/javac').                     
                             Caminho para ferramenta jar a ser usada (por exemplo, 
JAR                          '/usr/local/openjdk6/bin/jar' ou                      
                             '/usr/local/bin/fastjar').                            
APPLETVIEWER                 Caminho para o utilitario appletviewer (por           
                             exemplo,'/usr/local/openjdk6/bin/appletviewer').      
                             Caminho para o executavel Java. Use isto para         
JAVA                         executar programas Java (por exemplo,                 
                             '/usr/local/openjdk6/bin/java').                      
JAVADOC                      Caminho para o utilitario javadoc.                    
JAVAH                        Caminho para o programa javah.                        
JAVAP                        Caminho para o programa javap.                        
JAVA_KEYTOOL                 Caminho para o utilitario keytool.                    
JAVA_N2A                     Caminho para a ferramenta native2ascii.               
JAVA_POLICYTOOL              Caminho para o programa policytool.                   
JAVA_SERIALVER               Caminho para o utilitario serialver.                  
RMIC                         Caminho para o gerador de stub/skeleton RMI, rmic.    
RMIREGISTRY                  Caminho para o programa de registro RMI, rmiregistry. 
RMID                         Caminho para o daemon do RMI rmid.                    
JAVA_CLASSES                 Caminho para o arquivo que contem os arquivos de      
                             classe do JDK, ${JAVA_HOME}/jre/lib/rt.jar.           

   Use o java-debug make target para obter informac,oes para depurar o port.
   Ele exibira o valor de muitas das variaveis &#8203;&#8203;listadas
   anteriormente.

   Alem disso, essas constantes sao definidas para que todos os ports Java
   possam ser instalados de maneira consistente:

   Tabela 6.22. Constantes definidas para os ports que usam Java

    Constante                               Valor                             
   JAVASHAREDIR O diretorio base para tudo relacionado ao Java. Padrao:       
                ${PREFIX}/share/java.                                         
   JAVAJARDIR   O diretorio onde os arquivos JAR sao instalados. Padrao:      
                ${JAVASHAREDIR}/classes.                                      
   JAVALIBDIR   O diretorio onde os arquivos JAR instalados por outros ports  
                estao localizados. Padrao: ${LOCALBASE}/share/java/classes.   

   As entradas relacionadas sao definidas em ambos PLIST_SUB (documentado em
   Sec,ao 8.1, "Alterando o pkg-plist Baseado em Variaveis Make") e SUB_LIST.

  6.15.2. Compilando com Ant

   Quando o port deve ser compilado usando o Apache Ant, ele deve definir
   USE_ANT. Ant e, portanto, considerado o comando sub-make. Quando nenhum
   target do-build e definido pelo port, sera definido um padrao que execute
   Ant de acordo com MAKE_ENV, MAKE_ARGS e ALL_TARGET. Isso e semelhante ao
   mecanismo USES=gmake, documentado em Sec,ao 6.5, "Mecanismos de
   Compilac,ao".

  6.15.3. Melhores Praticas

   Ao portar uma biblioteca Java, o port precisa instalar o(s) arquivo(s) JAR
   em ${JAVAJARDIR} e o resto em ${JAVASHAREDIR}/${PORTNAME} (exceto para a
   documentac,ao, veja abaixo). Para reduzir o tamanho do arquivo de
   empacotamento, fac,a referencia aos arquivos JAR diretamente no Makefile.
   Use esta declarac,ao (onde myport.jar e o nome do arquivo JAR instalado
   como parte do port):

 PLIST_FILES+=   ${JAVAJARDIR}/myport.jar

   Ao portar um aplicativo Java, o port geralmente instala tudo em um unico
   diretorio (incluindo suas dependencias JAR). O uso de
   ${JAVASHAREDIR}/${PORTNAME} e fortemente indicado neste caso. Cabe ao
   mantenedor do port decidir se o port instala as dependencias JAR
   adicionais sob esse diretorio ou utiliza as ja instaladas (de
   ${JAVAJARDIR}).

   Ao portar um aplicativo Java(TM) que requer um servidor de aplicac,ao,
   como o www/tomcat7 para executar o servic,o, e bastante comum que o
   fornecedor distribua um .war. Um .war e uma aplicac,ao Web ARchive a qual
   e extraido quando chamado pelo aplicativo. Evite adicionar um .war no
   pkg-plist. Isto nao e considerado a melhor pratica. Um servidor de
   aplicac,ao ira expandir o arquivo war mas nao ira remove-lo se o port for
   desinstalado. Uma forma mais desejavel de trabalhar com este arquivo e
   extrair o seu conteudo, depois instalar os arquivos e, por fim, adicionar
   esses arquivos ao pkg-plist.

 TOMCATDIR=      ${LOCALBASE}/apache-tomcat-7.0
 WEBAPPDIR=      myapplication

 post-extract:
         @${MKDIR} ${WRKDIR}/${PORTDIRNAME}
         @${TAR} xf ${WRKDIR}/myapplication.war -C ${WRKDIR}/${PORTDIRNAME}

 do-install:
         cd ${WRKDIR} && \
         ${INSTALL} -d -o ${WWWOWN} -g ${WWWGRP} ${TOMCATDIR}/webapps/${PORTDIRNAME}
         cd ${WRKDIR}/${PORTDIRNAME} && ${COPYTREE_SHARE} \* ${WEBAPPDIR}/${PORTDIRNAME}

   Independentemente do tipo de port (biblioteca ou aplicativo), a
   documentac,ao adicional e instalada na mesma localizac,ao como para
   qualquer outro port. A ferramenta Javadoc e conhecida por produzir um
   conjunto diferente de arquivos, dependendo da versao do JDK utilizado.
   Para ports que nao impoem o uso de um determinado JDK, e uma tarefa
   complexa especificar a lista de empacotamento (pkg-plist). Esta e uma
   razao pela qual os mantenedores de ports sao fortemente encorajados a usar
   PORTDOCS. Alem disso, mesmo se o conjunto de arquivos que serao gerados
   pelo javadoc puder ser previsto, o tamanho do pkg-plist resultante ira
   encorajar o uso do PORTDOCS.

   O valor padrao para DATADIR e ${PREFIX}/share/${PORTNAME}. E uma boa ideia
   sobreescrever DATADIR para ${JAVASHAREDIR}/${PORTNAME} para ports Java. De
   fato, DATADIR e automaticamente adicionado a PLIST_SUB (documentado
   emSec,ao 8.1, "Alterando o pkg-plist Baseado em Variaveis Make") entao use
   %%DATADIR%% diretamente em pkg-plist.

   Quanto `a escolha de compilar ports Java a partir do codigo fonte ou
   instalar diretamente a partir de uma distribuic,ao binaria, nao ha
   politica definida no momento da escrita deste livro. No entanto, os
   membros do Projeto Java do FreeBSD encorajam os mantenedores de ports a
   terem seus ports compilados a partir do codigo fonte sempre que for
   possivel.

   Todos os recursos que foram apresentados nesta sec,ao sao implementados em
   bsd.java.mk. Se o port precisar de suporte Java mais sofisticado, por
   favor, primeiro de uma olhada no log do bsd.java.mk no Subversion pois
   normalmente leva algum tempo para documentar os recursos mais recentes.
   Entao, se o suporte necessario que estiver faltando for benefico para
   muitos outros ports Java, sinta-se `a vontade para discuti-lo na Lista de
   discussao do FreeBSD sobre Linguagem Java.

   Embora haja uma categoria Java para PRs, isso refere-se ao esforc,o de
   portabilidade do JDK do projeto Java do FreeBSD. Portanto, envie o port
   Java na categoria ports como para qualquer outro port, a menos que o
   problema esteja relacionado a uma implementac,ao do JDK ou ao bsd.java.mk.

   Da mesma forma, existe uma politica definida sobre as CATEGORIAS de um
   port Java, que e detalhada em Sec,ao 5.3, "Categorizac,ao".

6.16. Aplicac,oes Web, Apache e PHP

  6.16.1. Apache

   Tabela 6.23. Variaveis &#8203;&#8203;para Ports Que Usam o Apache

                    O port requer o Apache. Valores possiveis: yes (obtem     
   USE_APACHE       qualquer versao), 22, 24, 22 a 24, 22+, etc. A versao     
                    padrao do APACHE e 22. Mais detalhes estao disponiveis em 
                    ports/Mk/bsd.apache.mk e em wiki.freebsd.org/Apache/.     
   APXS             Caminho completo para o binario apxs. Pode ser modificado 
                    no port.                                                  
   HTTPD            Caminho completo para o binario httpd. Pode ser           
                    modificado no port.                                       
                    A versao da instalac,ao atual do Apache (variavel somente 
   APACHE_VERSION   leitura). Esta variavel so esta disponivel apos a         
                    inclusao de bsd.port.pre.mk. Valores possiveis: 22, 24.   
   APACHEMODDIR     Diretorio para modulos Apache. Esta variavel e            
                    automaticamente expandida em pkg-plist.                   
   APACHEINCLUDEDIR Diretorio para cabec,alhos Apache. Esta variavel e        
                    automaticamente expandida em pkg-plist.                   
   APACHEETCDIR     Diretorio para arquivos de configurac,ao do Apache. Esta  
                    variavel e automaticamente expandida em pkg-plist.        

   Tabela 6.24. Variaveis &#8203;&#8203;Uteis para Portar Modulos do Apache

   MODULENAME    Nome do modulo. O valor padrao e PORTNAME. Exemplo:          
                 mod_hello                                                    
   SHORTMODNAME  Nome abreviado do modulo. Automaticamente derivado de        
                 MODULENAME, mas pode ser substituido. Exemplo: hello         
   AP_FAST_BUILD Use o apxs para compilar e instalar o modulo.                
   AP_GENPLIST   Tambem cria automaticamente um pkg-plist.                    
   AP_INC        Adiciona um diretorio ao caminho de pesquisa de cabec,alhos  
                 durante a compilac,ao.                                       
   AP_LIB        Adiciona um diretorio ao caminho de pesquisa de bibliotecas  
                 durante a compilac,ao.                                       
   AP_EXTRAS     Flags adicionais para passar para o apxs.                    

  6.16.2. Aplicac,oes Web

   Aplicac,oes web devem ser instaladas em PREFIX/www/appname. Este caminho
   esta disponivel tanto no Makefile quanto no pkg-plist como WWWDIR e o
   caminho relativo para PREFIX esta disponivel no Makefile como WWWDIR_REL.

   O usuario e o grupo do processo do servidor web estao disponiveis como
   WWWOWN e WWWGRP, no caso de a propriedade de alguns arquivos precisar ser
   alterada. Os valores padrao de ambos sao www. Use WWWOWN?=myuser e
   WWWGRP?=mygroup se o port precisar de valores diferentes. Isso permite ao
   usuario substitui-los facilmente.

  Importante:

   Use WWWOWN e WWWGRP com moderac,ao. Lembre-se de que todos os arquivos
   para os quais o servidor web tem permissao de escrita, sao um risco de
   seguranc,a esperando para acontecer.

   Nao insira o Apache como dependencia, a menos que o aplicativo web precise
   explicitamente do Apache. Respeite que os usuarios podem desejar executar
   um aplicativo web em um servidor web diferente do Apache.

  6.16.3. PHP

   Aplicac,oes PHP declaram sua dependencia a ele com USES=php. Veja
   Sec,ao 17.68, "php" para maiores informac,oes.

  6.16.4. Modulos PEAR

   Portar modulos PEAR e um processo muito simples.

   Adicione USES=pear ao Makefile do port. O framework instalara os arquivos
   relevantes nos lugares certos e gerara automaticamente a lista no momento
   da instalac,ao.

   Exemplo 6.23. Exemplo de Makefile para Classes PEAR

 PORTNAME=       Date
 DISTVERSION=    1.4.3
 CATEGORIES=     devel www pear

 MAINTAINER=     example@domain.com
 COMMENT=        PEAR Date and Time Zone Classes

 USES=   pear

 .include <bsd.port.mk>

  Dica:

   Os modulos PEAR serao automaticamente flavorizados usando PHPflavors.

  Nota:

   Se um PEAR_CHANNEL nao padrao for usado, as dependencias de compilac,ao e
   de tempo de execuc,ao serao automaticamente adicionadas.

  Importante:

   Modulos PEAR nao precisam definir PKGNAMESUFFIX, e preenchido
   automaticamente usando PEAR_PKGNAMEPREFIX. Se um port precisar adicionar
   PKGNAMEPREFIX, tambem deve usar PEAR_PKGNAMEPREFIX para diferenciar entre
   diferentes flavors.

    6.16.4.1. Modulos Horde

   Da mesma forma, portar modulos Horde e um processo simples.

   Adicione USES=horde ao Makefile do port . O framework instalara os
   arquivos relevantes nos lugares certos e gerara automaticamente a lista no
   momento da instalac,ao.

   As variaveis USE_HORDE_BUILD e USE_HORDE_RUN podem ser usadas para
   adicionar dependencias de tempo de compilac,ao e de tempo de execuc,ao em
   outros modulos Horde. Veja Mk/Uses/horde.mk para uma lista completa dos
   modulos disponiveis.

   Exemplo 6.24. Exemplo de Makefile para Modulos Horde

 PORTNAME=       Horde_Core
 DISTVERSION=    2.14.0
 CATEGORIES=     devel www pear

 MAINTAINER=     horde@FreeBSD.org
 COMMENT=        Horde Core Framework libraries

 OPTIONS_DEFINE= KOLAB SOCKETS
 KOLAB_DESC=     Enable Kolab server support
 SOCKETS_DESC=   Depend on sockets PHP extension

 USES=   horde
 USE_PHP=        session

 USE_HORDE_BUILD=        Horde_Role
 USE_HORDE_RUN=  Horde_Role Horde_History Horde_Pack \
                 Horde_Text_Filter Horde_View

 KOLAB_USE=      HORDE_RUN=Horde_Kolab_Server,Horde_Kolab_Session
 SOCKETS_USE=    PHP=sockets

 .include <bsd.port.mk>

  Dica:

   Como os modulos Horde tambem sao modulos PEAR, eles tambem serao
   automaticamente aromatizados usando PHP flavors.

6.17. Usando Python

   A Colec,ao de Ports suporta a instalac,ao paralela de varias versoes do
   Python. Os ports devem usar um interpretador python, de acordo com a
   configurac,ao do usuario de PYTHON_VERSION. Mais proeminentemente, isso
   significa substituir o caminho para o executavel python em scripts com o
   valor de PYTHON_CMD.

   Ports que instalam arquivos sob PYTHON_SITELIBDIR devem usar o prefixo
   pyXY- no prefixo do nome do pacote, assim o nome do pacote ira incorporar
   a versao do Python em que estao instalados.

 PKGNAMEPREFIX=  ${PYTHON_PKGNAMEPREFIX}

   Tabela 6.25. Variaveis uteis para Ports que usam Python

                           O port precisa do Python. A versao minima          
                           necessaria pode ser especificada com valores como  
   USES=python             2.7+. Os intervalos de versao tambem podem ser     
                           especificados separando dois numeros de versao com 
                           um trac,o: USES=python:3.2-3.3                     
                           Use o distutils do Python para configurar,         
                           compilar e instalar. Isso e necessario quando o    
                           port vem com setup.py. Isso sobrescreve os targets 
   USE_PYTHON=distutils    do-build e do-install e tambem pode substituir     
                           do-configure se o GNU_CONFIGURE nao estiver        
                           definido. Alem disso, isso implica em              
                           USE_PYTHON=flavors.                                
                           Crie a lista de empacotamento automaticamente.     
   USE_PYTHON=autoplist    Isso tambem requer que USE_PYTHON=distutils seja   
                           definido.                                          
                           O port usara um prefixo exclusivo, normalmente     
                           PYTHON_PKGNAMEPREFIX para determinados diretorios, 
                           como EXAMPLESDIR e DOCSDIR e tambem ira            
                           acrescentar um sufixo, a versao python de          
   USE_PYTHON=concurrent   PYTHON_VER, para os binarios e scripts que serao   
                           instalados. Isso permite que os ports sejam        
                           instalados para diferentes versoes do Python ao    
                           mesmo tempo, o que de outra forma instalaria       
                           arquivos conflitantes.                             
                           O port nao usa distutils, mas ainda suporta varias 
   USE_PYTHON=flavors      versoes do Python. .FLAVORS sera definido para as  
                           versoes suportadas do Python. Veja Sec,ao 7.4,     
                           "USES=python e Flavors" para maiores informac,oes. 
                           Se a versao atual do Python nao for a versao       
   USE_PYTHON=optsuffix    padrao, o port recebera                            
                           PKGNAMESUFFIX=${PYTHON_PKGNAMESUFFIX}. E util      
                           apenas com flavors.                                
                           Usado como um PKGNAMEPREFIX para distinguir        
   PYTHON_PKGNAMEPREFIX    pacotes para diferentes versoes do Python.         
                           Exemplo: py27-                                     
                           Local da arvore site-packages, que contem o        
   PYTHON_SITELIBDIR       caminho de instalac,ao do Python (geralmente       
                           LOCALBASE). A PYTHON_SITELIBDIR pode ser muito     
                           util ao instalar modulos Python.                   
                           A variante PREFIX-clean do PYTHON_SITELIBDIR.      
                           Sempre use %%PYTHON_SITELIBDIR%% no pkg-plist      
   PYTHONPREFIX_SITELIBDIR quando possivel. O valor padrao de                 
                           %%PYTHON_SITELIBDIR%% e                            
                           lib/python%%PYTHON_VERSION%%/site-packages         
   PYTHON_CMD              Linha de comando do interpretador Python,          
                           incluindo o numero da versao.                      

   Tabela 6.26. Assistentes do Modulo de Dependencias do Python

   PYNUMERIC      Linha de dependencia para extensao numerica.                
   PYNUMPY        Linha de dependencia para a nova extensao numerica, numpy.  
                  (PYNUMERIC foi descontinuado pelo fornecedor upstream).     
                  Linha de dependencia para a extensao XML (nao e necessaria  
   PYXML          para o Python 2.0 e superior, pois tambem esta na           
                  distribuic,ao base).                                        
   PY_ENUM34      Dependencia condicional do devel/py-enum34 dependendo da    
                  versao do Python.                                           
   PY_ENUM_COMPAT Dependencia condicional do devel/py-enum-compat dependendo  
                  da versao do Python.                                        
   PY_PATHLIB     Dependencia condicional do devel/py-pathlib dependendo da   
                  versao do Python.                                           
   PY_IPADDRESS   Dependencia condicional do net/py-ipaddress dependendo da   
                  versao do Python.                                           
   PY_FUTURES     Dependencia condicional do devel/py-futures dependendo da   
                  versao do Python.                                           

   Uma lista completa das variaveis disponiveis pode ser encontrada em
   /usr/ports/Mk/Uses/python.mk.

  Importante:

   Todas as dependencias para ports Python usando Python flavors (quer com
   USE_PYTHON=distutils ou USE_PYTHON=flavors) deve ter o flavor Python
   anexado `a sua origem usando @${PY_FLAVOR}. Veja Exemplo 6.25, "Makefile
   para um Modulo Python Simples".

   Exemplo 6.25. Makefile para um Modulo Python Simples

 PORTNAME=       sample
 DISTVERSION=    1.2.3
 CATEGORIES=     devel

 MAINTAINER=     john@doe.tld
 COMMENT=        Python sample module

 RUN_DEPENDS=    ${PYTHON_PKGNAMEPREFIX}six>0:devel/py-six@${PY_FLAVOR}

 USES=           python
 USE_PYTHON=     autoplist distutils

 .include <bsd.port.mk>

   Algumas aplicac,oes Python afirmam ter suporte a DESTDIR (que seria
   necessario para fazer o staging), mas ele esta quebrado (Mailman ate a
   versao 2.1.16, por exemplo). Isso pode ser contornado, recompilando os
   scripts. Isso pode ser feito, por exemplo, no target post-build. Assumindo
   que os scripts Python devem estar em PYTHONPREFIX_SITELIBDIR apos a
   instalac,ao, esta soluc,ao pode ser aplicada:

 (cd ${STAGEDIR}${PREFIX} \
   && ${PYTHON_CMD} ${PYTHON_LIBDIR}/compileall.py \
    -d ${PREFIX} -f ${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;})

   Isso recompila os fontes com um caminho relativo ao diretorio de stage e
   acrescenta o valor de PREFIX para o nome do arquivo gravado no arquivo
   bytecode de saida por -d. O -f e necessario para forc,ar a recompilac,ao e
   o :S;${PREFIX}/;; remove prefixos do valor de PYTHONPREFIX_SITELIBDIR para
   torna-lo relativo ao PREFIX.

6.18. Usando Tcl/Tk

   A Colec,ao de Ports suporta a instalac,ao paralela de multiplas versoes do
   Tcl/Tk. Ports devem tentar suportar pelo menos a versao padrao do Tcl/Tk e
   superior com USES=tcl. E possivel especificar a versao desejada do tcl
   anexando :xx, por exemplo, USES=tcl:85.

   Tabela 6.27. As variaveis read only muito uteis para Ports que usam Tcl/Tk

   TCL_VER        versao major.minor escolhida do Tcl         
   TCLSH          caminho completo do interpretador Tcl       
   TCL_LIBDIR     caminho das bibliotecas Tcl                 
   TCL_INCLUDEDIR caminho dos arquivos de cabec,alho C do Tcl 
   TK_VER         versao major.minor escolhida do Tk          
   WISH           caminho completo do interpretador Tk        
   TK_LIBDIR      caminho das bibliotecas Tk                  
   TK_INCLUDEDIR  caminho dos arquivos de cabec,alho C do Tk  

   Veja o USES=tcl e USES=tk do Capitulo 17, Usando Macros USES para uma
   descric,ao completa dessas variaveis. Uma lista completa dessas variaveis
   &#8203;&#8203;esta disponivel em /usr/ports/Mk/Uses/tcl.mk.

6.19. Usando Ruby

   Tabela 6.28. Variaveis &#8203;&#8203;Uteis para Ports Que Usam Ruby

       Variavel                            Descric,ao                         
   USE_RUBY         Adiciona dependencias de build e run no Ruby.             
   USE_RUBY_EXTCONF O port utiliza extconf.rb para configurar.                
   USE_RUBY_SETUP   O port utiliza setup.rb para configurar.                  
   RUBY_SETUP       Substitui o nome do script de configurac,ao do setup.rb.  
                    Outro valor comum e install.rb.                           

   Esta tabela mostra as variaveis selecionadas disponiveis para os autores
   dos ports atraves da infraestrutura de ports. Essas variaveis sao usadas
   para instalar arquivos em seus locais apropriados. Use-os em pkg-plist
   tanto quanto possivel. Nao redefina essas variaveis no port.

   Tabela 6.29. Variaveis &#8203;&#8203;Somente Leitura Selecionadas para
   Ports Que Usam Ruby

     Variavel        Descric,ao                   Exemplo de valor                  
                    Usado como um                                                   
                    PKGNAMEPREFIX 
                    para          
RUBY_PKGNAMEPREFIX  distinguir    ruby19-
                    pacotes para  
                    diferentes    
                    versoes do    
                    Ruby.         
                    Versao                                                          
RUBY_VERSION        completa do   1.9.3.484
                    Ruby na forma 
                    de x.y.z[.p]. 
                    Caminho de                                                      
                    instalac,ao   
                    de            
RUBY_SITELIBDIR     bibliotecas   /usr/local/lib/ruby/site_ruby/1.9
                    independentes 
                    de            
                    arquitetura.  
                    Caminho de                                                      
                    instalac,ao   
                    das           
RUBY_SITEARCHLIBDIR bibliotecas   /usr/local/lib/ruby/site_ruby/1.9/amd64-freebsd10
                    dependentes   
                    de            
                    arquitetura.  
                    Caminho de                                                      
                    instalac,ao   
RUBY_MODDOCDIR      da            /usr/local/share/doc/ruby19/patsy
                    documentac,ao 
                    do modulo.    
                    Caminho de                                                      
RUBY_MODEXAMPLESDIR instalac,ao   /usr/local/share/examples/ruby19/patsy
                    dos exemplos  
                    do modulo.    

   Uma lista completa das variaveis &#8203;&#8203;disponiveis pode ser
   encontrada em /usr/ports/Mk/bsd.ruby.mk.

6.20. Usando SDL

   O USE_SDL e usado para auto configurar as dependencias para os ports que
   usam uma biblioteca baseada em SDL como o devel/sdl12 e o
   graphics/sdl_image.

   Estas bibliotecas SDL para a versao 1.2 sao reconhecidas:

     * sdl: devel/sdl12

     * console: devel/sdl_console

     * gfx: graphics/sdl_gfx

     * image: graphics/sdl_image

     * mixer: audio/sdl_mixer

     * mm: devel/sdlmm

     * net: net/sdl_net

     * pango: x11-toolkits/sdl_pango

     * sound: audio/sdl_sound

     * ttf: graphics/sdl_ttf

   Estas sao as bibliotecas SDL para a versao 2.0 reconhecidas:

     * sdl: devel/sdl20

     * gfx: graphics/sdl2_gfx

     * image: graphics/sdl2_image

     * mixer: audio/sdl2_mixer

     * net: net/sdl2_net

     * ttf: graphics/sdl2_ttf

   Portanto, se um port tiver uma dependencia do net/sdl_net e do
   audio/sdl_mixer, a sintaxe sera:

 USE_SDL=        net mixer

   A dependencia devel/sdl12, a qual e exigida por net/sdl_net e
   audio/sdl_mixer, e automaticamente adicionada tambem.

   Usar USE_SDL com entradas para o SDL 1.2, ira automaticamente:

     * Adicionar uma dependencia em sdl12-config para BUILD_DEPENDS

     * Adicionar a variavel SDL_CONFIG em CONFIGURE_ENV

     * Adicionar as dependencias das bibliotecas selecionadas ao LIB_DEPENDS

   Usar USE_SDL com entradas para o SDL 2.0, ira automaticamente:

     * Adicionar uma dependencia em sdl2-config para BUILD_DEPENDS

     * Adicionar a variavel SDL2_CONFIG ao CONFIGURE_ENV

     * Adicionar as dependencias das bibliotecas selecionadas ao LIB_DEPENDS

6.21. Usando wxWidgets

   Esta sec,ao descreve o status das bibliotecas wxWidgets na arvore de ports
   e sua integrac,ao com o sistema de ports.

  6.21.1. Introduc,ao

   Existem muitas versoes das bibliotecas do wxWidgets que entram em conflito
   entre elas (instalam arquivos com o mesmo nome). Na arvore de ports este
   problema foi resolvido instalando cada versao sob um nome diferente usando
   sufixos de numero de versao.

   A desvantagem obvia disso e que cada aplicativo precisa ser modificado
   para encontrar a versao esperada. Felizmente, a maioria dos aplicativos
   chama o script wx-config para determinar os sinalizadores necessarios para
   o compilador e o vinculador. O script e nomeado de maneira diferente para
   cada versao disponivel. A maioria dos aplicativos respeita uma variavel de
   ambiente ou aceita um argumento de configurac,ao para especificar o script
   wx-config que deve ser chamado. Caso contrario, eles tem que ser
   corrigidos.

  6.21.2. Selec,ao de Versao

   Para fazer o port usar uma versao especifica do wxWidgets existem duas
   variaveis disponiveis para definir (se apenas uma for definida, a outra
   sera definida para um valor padrao):

   Tabela 6.30. Variaveis &#8203;&#8203;para Selecionar as Versoes do
   wxWidgets

    Variavel              Descric,ao                     Valor padrao         
   USE_WX     Lista de versoes que o port pode   Todas as versoes disponiveis 
              usar                               
   USE_WX_NOT Lista de versoes que o port nao    Nenhum                       
              pode usar                          

   As versoes disponiveis do wxWidgets e os ports correspondentes na arvore
   sao:

   Tabela 6.31. Versoes Disponiveis do wxWidgets

   Versao         Port         
   2.8    x11-toolkits/wxgtk28 
   3.0    x11-toolkits/wxgtk30 

   As variaveis &#8203;&#8203;em Tabela 6.30, "Variaveis &#8203;&#8203;para
   Selecionar as Versoes do wxWidgets" podem ser definidas para uma ou mais
   dessas combinac,oes separadas por espac,os:

   Tabela 6.32. Especificac,oes de Versao do wxWidgets

              Descric,ao            Exemplo 
   Versao unica                     2.8     
   Range ascendente                 2.8+    
   Range descendente                3.0-    
   Range total (deve ser crescente) 2.8-3.0 

   Tambem existem algumas variaveis &#8203;&#8203;para selecionar as versoes
   preferidas entre as disponiveis. Elas podem ser configuradas para uma
   lista de versoes, as primeiras terao maior prioridade.

   Tabela 6.33. Variaveis para selecionar as versoes preferidas do wxWidgets

      Nome     Desenhado para 
   WANT_WX_VER o port         
   WITH_WX_VER o usuario      

  6.21.3. Selec,ao de Componentes

   Existem outras aplicac,oes que, apesar de nao serem bibliotecas wxWidgets,
   estao relacionadas a eles. Estas aplicac,oes podem ser especificadas em
   WX_COMPS. Estes componentes estao disponiveis:

   Tabela 6.34. Componentes wxWidgets Disponiveis

    Nome           Descric,ao         Restric,ao de versao 
   wx      biblioteca principal       nenhum               
   contrib bibliotecas contribuidas   none                 
   python  wxPython(ligac,oes Python) 2.8-3.0              

   O tipo de dependencia pode ser selecionado para cada componente,
   adicionando-se um sufixo separado por um ponto-e-virgula. Se nao estiver
   presente, sera usado um tipo padrao (veja Tabela 6.36, "Tipos de
   Dependencia Padrao do wxWidgets"). Estes tipos estao disponiveis:

   Tabela 6.35. Tipos de Dependencias wxWidgets Disponiveis

   Nome                               Descric,ao                              
   build Componente e necessario para a compilac,ao, equivalente a            
         BUILD_DEPENDS                                                        
   run   O componente e necessario para execuc,ao, equivalente a RUN_DEPENDS  
   lib   O componente e necessario para a compilac,ao e execuc,ao,            
         equivalente a LIB_DEPENDS                                            

   Os valores padrao para os componentes estao detalhados nesta tabela:

   Tabela 6.36. Tipos de Dependencia Padrao do wxWidgets

   Componente Tipo de dependencia 
   wx         lib                 
   contrib    lib                 
   python     run                 
   mozilla    lib                 
   svg        lib                 

   Exemplo 6.26. Selecionando Componentes wxWidgets

   Este fragmento corresponde a um port que usa wxWidgets versao 2.4 e suas
   bibliotecas contribuidas.

 USE_WX=         2.8
 WX_COMPS=       wx contrib

  6.21.4. Detectando Versoes Instaladas

   Para detectar uma versao instalada, defina WANT_WX. Se nao estiver
   definido para uma versao especifica, os componentes terao um sufixo de
   versao. O HAVE_WX sera preenchido apos a detecc,ao.

   Exemplo 6.27. Detectando as versoes instaladas wxWidgets e seus
   componentes

   Este fragmento pode ser usado em um port que usa wxWidgets se estiver
   instalado ou uma opc,ao estiver selecionada.

 WANT_WX=        yes

 .include <bsd.port.pre.mk>

 .if defined(WITH_WX) || !empty(PORT_OPTIONS:MWX) || !empty(HAVE_WX:Mwx-2.8)
 USE_WX=                 2.8
 CONFIGURE_ARGS+=        --enable-wx
 .endif

   Este fragmento pode ser usado em um port que permite suporte ao wxPython
   se ele estiver instalado ou se uma opc,ao for selecionada, em adic,ao ao
   wxWidgets, ambas nas versoes 2.8.

 USE_WX=         2.8
 WX_COMPS=       wx
 WANT_WX=        2.8

 .include <bsd.port.pre.mk>

 .if defined(WITH_WXPYTHON) || !empty(PORT_OPTIONS:MWXPYTHON) || !empty(HAVE_WX:Mpython)
 WX_COMPS+=              python
 CONFIGURE_ARGS+=        --enable-wxpython
 .endif

  6.21.5. Variaveis &#8203;&#8203;Definidas

   Estas variaveis &#8203;&#8203;estao disponiveis no port (depois de definir
   uma de Tabela 6.30, "Variaveis &#8203;&#8203;para Selecionar as Versoes do
   wxWidgets").

   Tabela 6.37. Variaveis &#8203;&#8203;definidas para ports que usam
   wxWidgets

      Nome                              Descric,ao                            
   WX_CONFIG  O caminho para o script wxWidgets wx-config (com nome           
              diferente)                                                      
   WXRC_CMD   O caminho para o programa wxWidgets wxrc (com nome diferente)   
   WX_VERSION A versao do wxWidgets que sera usada (por exemplo,2.6)          

  6.21.6. Processando em bsd.port.pre.mk

   Defina WX_PREMK para ser capaz de usar as variaveis &#8203;&#8203;logo
   apos a inclusao do bsd.port.pre.mk.

  Importante:

   Ao definir WX_PREMK, a versao, dependencias, componentes e variaveis
   &#8203;&#8203;definidas nao serao alteradas mesmo se alterado as variaveis
   &#8203;&#8203;do port wxWidgets depois de incluir o bsd.port.pre.mk.

   Exemplo 6.28. Usando Variaveis &#8203;&#8203;nos Comandos wxWidgets

   Este fragmento ilustra o uso de WX_PREMK executando o script wx-config
   para obter a string de versao completa, atribui-lo a uma variavel e
   passa-lo para o programa.

 USE_WX=         2.8
 WX_PREMK=       yes

 .include <bsd.port.pre.mk>

 .if exists(${WX_CONFIG})
 VER_STR!=       ${WX_CONFIG} --release

 PLIST_SUB+=     VERSION="${VER_STR}"
 .endif

  Nota:

   As variaveis wxWidgets &#8203;&#8203;podem ser usadas com seguranc,a em
   comandos quando estao dentro de targets sem a necessidade de WX_PREMK.

  6.21.7. Argumentos Adicionais do configure

   Alguns scripts GNU configure nao podem encontrar wxWidgets com apenas o
   conjunto de variaveis &#8203;&#8203;de ambiente WX_CONFIG, exigindo
   argumentos adicionais. WX_CONF_ARGS pode ser usado para fornece-los.

   Tabela 6.38. Valores Legais para WX_CONF_ARGS

   Valor possivel                  Argumento resultante                  
   absolute       --with-wx-config=${WX_CONFIG}                          
   relative       --with-wx=${LOCALBASE} --with-wx-config=${WX_CONFIG:T} 

6.22. Usando Lua

   Esta sec,ao descreve o status das bibliotecas Lua na arvore de ports e sua
   integrac,ao com o sistema de ports.

  6.22.1. Introduc,ao

   Existem muitas versoes das bibliotecas Lua e interpretadores
   correspondentes, que entram em conflito entre eles (instalam arquivos com
   o mesmo nome). Na arvore de ports este problema foi resolvido instalando
   cada versao sob um nome diferente usando sufixos de numero de versao.

   A desvantagem obvia disso e que cada aplicativo precisa ser modificado
   para encontrar a versao esperada. Mas isto pode ser resolvido adicionando
   alguns sinalizadores adicionais ao compilador e ao linker.

   Aplicativos que usam Lua normalmente devem ser compilados para apenas uma
   versao. No entanto, os modulos carregaveis para Lua sao compilados em
   flavor separado para cada versao Lua que eles suportam, e as dependencias
   de tais modulos devem especificar o flavor usando o sufixo @${LUA_FLAVOR}
   no caminho do port.

  6.22.2. Selec,ao de Versao

   Um port usando Lua deve ter uma linha dessa forma:

 USES=   lua

   Se uma versao especifica de Lua, ou intervalo de versoes for necessaria,
   ela pode ser especificada como um parametro na forma XY (que pode ser
   usado varias vezes), XY+, -XY, ou XY-ZA. A versao padrao do Lua definida
   por meio do DEFAULT_VERSIONS sera usada se cair no intervalo solicitado,
   caso contrario, a versao solicitada mais proxima do padrao sera usada. Por
   exemplo:

 USES=   lua:52-53

   Observe que nenhuma tentativa e feita para ajustar a selec,ao da versao
   com base na presenc,a de qualquer versao Lua ja instalada.

  Nota:

   A forma XY+ de especificac,ao de versao nao deve ser usada sem
   considerac,ao cuidadosa; a API Lua muda consideravelmente em todas as
   versoes, e ferramentas de configurac,ao como CMake ou Autoconf
   frequentemente nao funcionarao em versoes futuras do Lua ate ser
   atualizado para isso.

  6.22.3. Flags de Configurac,ao e Compilador

   Software that uses Lua may have been written to auto-detect the Lua
   version in use. In general ports should override this assumption, and
   force the use of the specific Lua version selected as described above.
   Depending on the software being ported, this might require any or all of:

     * Usando LUA_VER como parte de um parametro para o script de
       configurac,ao do software via CONFIGURE_ARGS ou CONFIGURE_ENV (ou
       equivalente para outros sistemas de compilac,ao);

     * Adicionando -I${LUA_INCDIR}, -L${LUA_LIBDIR}, e -llua-${LUA_VER} para
       CFLAGS, LDFLAGS, LIBS respectivamente, conforme apropriado;

     * Altere a configurac,ao do software ou arquivos de compilac,ao para
       selecionar a versao correta.

  6.22.4. Flavors de Versao

   Um port que instala um modulo Lua (em vez de um aplicativo que
   simplesmente faz uso do Lua) deve compilar um flavor separado para cada
   versao do Lua suportada . Isso e feito adicionando o parametro module:

 USES=   lua:module

   Um numero de versao ou intervalo de versoes tambem pode ser especificado;
   use uma virgula para separar os parametros.

   Uma vez que cada flavor deve ter um nome de pacote diferente, a variavel
   LUA_PKGNAMEPREFIX e fornecida e sera definida com um valor apropriado; o
   uso pretendido e:

 PKGNAMEPREFIX=  ${LUA_PKGNAMEPREFIX}

   Ports de modulo normalmente devem instalar arquivos apenas em
   LUA_MODLIBDIR, LUA_MODSHAREDIR, LUA_DOCSDIR, e LUA_EXAMPLESDIR>, todos os
   quais estao definidos para se referir a subdiretorios especificos da
   versao. A instalac,ao de quaisquer outros arquivos deve ser feita com
   cuidado para evitar conflitos entre as versoes.

   Um port (diferente de um modulo Lua) que deseja compilar um pacote
   separado para cada versao Lua deve usar o parametro flavors:

 USES=   lua:flavors

   Isso funciona da mesma maneira que o parametro module descrito acima, mas
   sem a suposic,ao de que o pacote deve ser documentado como um modulo Lua
   (entao LUA_DOCSDIR e LUA_EXAMPLESDIR nao sao definidos por padrao). No
   entanto, o port pode escolher definir LUA_DOCSUBDIR como um nome de
   subdiretorio adequado (geralmente o PORTNAME do port, desde que nao entre
   em conflito com o PORTNAME de qualquer modulo), caso em que a estrutura
   definira LUA_DOCSDIR e LUA_EXAMPLESDIR.

   Tal como acontece com os ports de modulo, um port com flavor deve evitar a
   instalac,ao de arquivos que entrariam em conflito entre as versoes.
   Normalmente, isso e feito adicionando LUA_VER_STR como um sufixo para
   nomes de programas (por exemplo, usando USES=uniquefiles), e de outra
   forma usando LUA_VER ou LUA_VER_STR como parte de quaisquer outros
   arquivos ou subdiretorios usados fora de LUA_MODLIBDIR e LUA_MODSHAREDIR.

  6.22.5. Variaveis &#8203;&#8203;Definidas

   Essas variaveis &#8203;&#8203;estao disponiveis no port.

   Tabela 6.39. Variaveis &#8203;&#8203;Definidas para Ports Que Usam Lua

          Nome                              Descric,ao                        
   LUA_VER            A versao Lua que sera usada (por exemplo,5,1)           
   LUA_VER_STR        A versao Lua sem os pontos (por exemplo,51)             
   LUA_FLAVOR         O nome do flavor correspondente `a versao selecionada   
                      Lua, a ser usado para especificar dependencias          
   LUA_BASE           O prefixo que deve ser usado para localizar o Lua (e    
                      componentes) que ja estao instalados                    
   LUA_PREFIX         O prefixo onde o Lua (e os seus componentes) sao        
                      instalados por este port                                
   LUA_INCDIR         O diretorio onde os arquivos header do Lua estao        
                      instalados                                              
   LUA_LIBDIR         O diretorio onde as bibliotecas Lua sao instaladas      
   LUA_REFMODLIBDIR   O diretorio no qual as bibliotecas dos modulos Lua      
                      (.so) que ja estao instalados podem ser encontrados     
   LUA_REFMODSHAREDIR O diretorio no qual os modulos Lua (.lua) que ja estao  
                      instalados podem ser encontrados                        
   LUA_MODLIBDIR      O diretorio no qual as bibliotecas dos modulos Lua      
                      (.so) serao instalados por este port                    
   LUA_MODSHAREDIR    O diretorio no qual os modulos Lua (.lua) serao         
                      instalados por este port                                
   LUA_PKGNAMEPREFIX  O prefixo do nome do pacote usado por modulos Lua       
   LUA_CMD            O nome do interpretador Lua (exemplo lua53)             
   LUAC_CMD           O nome do compilador Lua (exemplo luac53)               

   Essas variaveis adicionais estao disponiveis para ports que especificaram
   o parametro module:

   Tabela 6.40. Variaveis Definidas para Ports de Modulos Lua

        Nome                               Descric,ao                         
   LUA_DOCSDIR     o diretorio no qual a documentac,ao do modulo deve ser     
                   instalada.                                                 
   LUA_EXAMPLESDIR o diretorio no qual os arquivos de exemplo do modulo devem 
                   ser instalados.                                            

  6.22.6. Exemplos

   Exemplo 6.29. Makefile para uma aplicac,ao que utiliza Lua

   Este exemplo mostra como fazer referencia a um modulo Lua necessario em
   tempo de execuc,ao. Observe que a referencia deve especificar um flavor.

 PORTNAME=       sample
 DISTVERSION=    1.2.3
 CATEGORIES=     whatever

 MAINTAINER=     john@doe.tld
 COMMENT=        Sample

 RUN_DEPENDS=    ${LUA_REFMODLIBDIR}/lpeg.so:devel/lua-lpeg@${LUA_FLAVOR}

 USES=           lua

 .include <bsd.port.mk>

   Exemplo 6.30. Makefile para modulo simples de Lua

 PORTNAME=       sample
 DISTVERSION=    1.2.3
 CATEGORIES=     whatever
 PKGNAMEPREFIX=  ${LUA_PKGNAMEPREFIX}

 MAINTAINER=     john@doe.tld
 COMMENT=        Sample

 USES=           lua:module

 DOCSDIR=        ${LUA_DOCSDIR}

 .include <bsd.port.mk>

6.23. Usando iconv

   Apos 2013-10-08 (254273), o FreeBSD 10-CURRENT e as versoes mais recentes
   tem um iconv nativo no sistema operacional. Em versoes anteriores, o
   converters/libiconv era usado como dependencia.

   Para softwares que precisam do iconv, defina USES=iconv. As versoes do
   FreeBSD antes do 10-CURRENT em 2013-08-13 (254273) nao tem um iconv
   nativo. Nestas versoes anteriores, uma dependencia do converters/libiconv
   sera adicionada automaticamente.

   Quando um port define USES=iconv, estas variaveis &#8203;&#8203;estarao
   disponiveis:

                                      Valor antes do FreeBSD 10-CURRENT     Valor apos o    
  Nome da variavel      Proposito            254273(2013-08-13)          FreeBSD 10-CURRENT 
                                                                         254273(2013-08-13) 
                     Diretorio onde                                                         
ICONV_CMD            o binario iconv ${LOCALBASE}/bin/iconv              /usr/bin/iconv
                     reside          
                     argumento do ld                                                        
ICONV_LIB            para vincular   -liconv                             (vazio)
                     ao libiconv (se 
                     necessario)     
                     Diretorio onde                                                         
                     a               
                     implementac,ao  
ICONV_PREFIX         do iconv reside ${LOCALBASE}                        /usr
                     (util para      
                     configurar      
                     scripts)        
                     Argumento de                                                           
                     configurac,ao   
ICONV_CONFIGURE_ARG  pre-configurado --with-libiconv-prefix=${LOCALBASE} (vazio)
                     para scripts de 
                     configurac,ao   
                     Argumento de                                                           
                     configurac,ao   
ICONV_CONFIGURE_BASE pre-configurado --with-libiconv=${LOCALBASE}        (vazio)
                     para scripts de 
                     configurac,ao   

   Esses dois exemplos preenchem automaticamente as variaveis
   &#8203;&#8203;com o valor correto para sistemas usando respectivamente o
   converters/libiconv ou o iconv nativo:

   Exemplo 6.31. Simples uso do iconv

 USES=           iconv
 LDFLAGS+=       -L${LOCALBASE}/lib ${ICONV_LIB}

   Exemplo 6.32. Uso do iconv com configure

 USES=           iconv
 CONFIGURE_ARGS+=${ICONV_CONFIGURE_ARG}

   Como mostrado acima, a variavel ICONV_LIB estara vazia quando um iconv
   nativo estiver presente. Isso pode ser usado para detectar o iconv nativo
   e responder adequadamente.

   As vezes um programa tem um argumento ld ou caminho de pesquisa codificado
   em um Makefile ou no script configure. Essa abordagem pode ser usada para
   resolver esse problema:

   Exemplo 6.33. Corrigindo Hardcoded -liconv

 USES=           iconv

 post-patch:
         @${REINPLACE_CMD} -e 's/-liconv/${ICONV_LIB}/' ${WRKSRC}/Makefile

   Em alguns casos, e necessario definir valores alternativos ou executar
   operac,oes dependendo se ha um iconv nativo. O bsd.port.pre.mk deve ser
   incluido antes de testar o valor de ICONV_LIB:

   Exemplo 6.34. Verificando Disponibilidade do iconv Nativo

 USES=           iconv

 .include <bsd.port.pre.mk>

 post-patch:
 .if empty(ICONV_LIB)
         # native iconv detected
         @${REINPLACE_CMD} -e 's|iconv||' ${WRKSRC}/Config.sh
 .endif

 .include <bsd.port.post.mk>

6.24. Usando o Xfce

   Ports que precisam de bibliotecas ou aplicac,oes Xfce, utilizam USES=xfce.

   Dependencias especificas de bibliotecas e aplicativos Xfce sao definidas
   com valores atribuidos a USE_XFCE. Eles sao definidos em
   /usr/ports/Mk/Uses/xfce.mk. Os valores possiveis sao:

   Valores de USE_XFCE

   garcon

           sysutils/garcon

   libexo

           x11/libexo

   libgui

           x11-toolkits/libxfce4gui

   libmenu

           x11/libxfce4menu

   libutil

           x11/libxfce4util

   painel

           x11-wm/xfce4-panel

   thunar

           x11-fm/thunar

   xfconf

           x11/xfce4-conf

   Exemplo 6.35. Exemplo de USES=xfce

 USES=           xfce
 USE_XFCE=       libmenu

   Exemplo 6.36. Usando os Proprios Widgets GTK2 do Xfce

   Neste exemplo, o aplicativo portado usa os widgets especificos do GTK2, o
   x11/libxfce4menu e o x11/xfce4-conf.

 USES=           xfce:gtk2
 USE_XFCE=       libmenu xfconf

  Dica:

   Os componentes Xfce incluidos dessa maneira incluirao automaticamente
   todas as dependencias necessarias. Nao e mais necessario especificar a
   lista inteira. Se o port precisar apenas de x11-wm/xfce4-panel, use:

 USES=           xfce
 USE_XFCE=       panel

   Nao ha necessidade de listar os componentes que o x11-wm/xfce4-panel
   precisa para ele mesmo, desta forma:

 USES=           xfce
 USE_XFCE=       libexo libmenu libutil panel

   Contudo, os componentes Xfce e as dependencias do port que nao dependem do
   Xfce devem ser incluidas explicitamente. Nao conte com um componente Xfce
   para fornecer uma sub-dependencia diferente de si para o port principal.

6.25. Usando Bancos de Dados

   Utilize uma das macros USES de Tabela 6.41, "Banco de Dados de Macros
   USES" para adicionar a dependencia de um banco de dados.

   Tabela 6.41. Banco de Dados de Macros USES

        Base de Dados      Macro USES 
   Berkeley DB             bdb        
   MariaDB, MySQL, Percona mysql      
   PostgreSQL              pgsql      
   SQLite                  sqlite     

   Exemplo 6.37. Usando o Berkeley DB 6

 USES=   bdb:6

   Veja Sec,ao 17.6, "bdb" para maiores informac,oes.

   Exemplo 6.38. Usando MySQL

   Quando um port precisa da biblioteca cliente do MySQL, adicione

 USES=   mysql

   Veja Sec,ao 17.57, "mysql" para mais informac,oes.

   Exemplo 6.39. Usando PostgreSQL

   Quando um port precisar do servidor PostgreSQL versao 9.6 ou posterior,
   adicione

 USES=           pgsql:9.6+
 WANT_PGSQL=     server

   Veja Sec,ao 17.67, "pgsql" para mais informac,oes.

   Exemplo 6.40. Usando SQLite 3

 USES=   sqlite:3

   Veja Sec,ao 17.82, "sqlite" para mais informac,oes.

6.26. Iniciando e Parando Servic,os (com scripts rc)

   Os scripts rc.d sao usados &#8203;&#8203;para iniciar servic,os na
   inicializac,ao do sistema e para fornecer aos administradores uma maneira
   padrao de parar, iniciar e reiniciar o servic,o. Ports se integram ao
   sistema de estrutura do rc.d. Detalhes sobre seu uso podem ser encontrados
   no capitulo sobre rc.d do handbook. A explicac,ao detalhada dos comandos
   disponiveis e fornecida em rc(8) e rc.sub(8). Finalmente, existe um artigo
   sobre aspectos praticos do sistema de scripts do rc.d.

   Com um port mitico chamadodoorman, o qual precisa iniciar um daemon
   doormand. Adicione o seguinte ao Makefile:

 USE_RC_SUBR=    doormand

   Varios scripts podem ser listados e serao instalados. Os scripts devem ser
   colocados no subdiretorio files e um sufixo .in deve ser adicionado ao
   nome do arquivo. Expansoes padroes SUB_LIST serao executadas neste
   arquivo. Usar as expansoes %%PREFIX%% e %%LOCALBASE%% tambem e fortemente
   encorajado. Veja mais sobre a SUB_LIST na sec,ao relevante.

   A partir do FreeBSD 6.1-RELEASE, scripts locais rc.d (incluindo aqueles
   instalados pelos ports) estao incluidos no rcorder(8) do sistema base.

   Um exemplo simples de script rc.d para iniciar o daemon doormand:

 #!/bin/sh

 # $FreeBSD$
 #
 # PROVIDE: doormand
 # REQUIRE: LOGIN
 # KEYWORD: shutdown
 #
 # Add these lines to /etc/rc.conf.local or /etc/rc.conf
 # to enable this service:
 #
 # doormand_enable (bool):       Set to NO by default.
 #                               Set it to YES to enable doormand.
 # doormand_config (path):       Set to %%PREFIX%%/etc/doormand/doormand.cf
 #                               by default.

 . /etc/rc.subr

 name=doormand
 rcvar=doormand_enable

 load_rc_config $name

 : ${doormand_enable:="NO"}
 : ${doormand_config="%%PREFIX%%/etc/doormand/doormand.cf"}

 command=%%PREFIX%%/sbin/${name}
 pidfile=/var/run/${name}.pid

 command_args="-p $pidfile -f $doormand_config"

 run_rc_command "$1"

   A menos que haja uma boa razao para iniciar o servic,o mais cedo, ou ele
   seja executado como um usuario especifico (diferente de root), todos os
   scripts de ports devem usar:

 REQUIRE: LOGIN

   Se o script de inicializac,ao iniciar um daemon que deve ser desligado, o
   seguinte acionara uma parada do servic,o no desligamento do sistema:

 KEYWORD: shutdown

   Se o script nao esta iniciando um servic,o persistente, isso nao e
   necessario.

   Para os elementos de configurac,ao opcional o estilo "=" de atribuic,ao de
   variavel padrao e preferivel ao estilo ":=", ja que o primeiro define um
   valor padrao apenas se a variavel nao estiver definida, e o segundo define
   um se a variavel nao esta definida ou se ela e nula. Um usuario pode muito
   bem incluir algo como:

 doormand_flags=""

   no seu rc.conf.local, e uma substituic,ao de variavel usando ":="
   substituira inadequadamente a intenc,ao do usuario. A variavel _enable nao
   e opcional e deve usar o ":" por padrao.

  Importante:

   Os Ports nao devem iniciar e parar seus servic,os durante a instalac,ao e
   desinstalac,ao. Nao abuse das keywords plist descritas em Sec,ao 8.6.13.2,
   "@preexec command, @postexec command, @preunexec command, @postunexec
   command" executando comandos que modificam o sistema em execuc,ao,
   incluindo iniciar ou interromper servic,os.

  6.26.1. Pre-Commit Checklist

   Antes de contribuir um port com um script rc.d, e mais importante, antes
   de realizar o commit de um, por favor consulte esta lista de verificac,ao
   para ter certeza de que ele esta pronto.

   O port devel/rclint pode verificar a maioria destes itens, mas nao
   substitui uma revisao adequada.

    1. Se este e um novo arquivo, ele tem uma extensao .sh? Se assim for,
       isso deve ser mudado para apenas file.in uma vez que os arquivos rc.d
       nao podem terminar com essa extensao.

    2. O arquivo tem uma tag $FreeBSD$?

    3. O nome do arquivo (menos .in), a linha PROVIDE e $name sao as mesmas?
       O nome do arquivo ao corresponder com o PROVIDE ira facilitar a
       depurac,ao, especialmente para problemas de rcorder(8). Combinar o
       nome do arquivo e o $name torna mais facil descobrir quais variaveis
       &#8203;&#8203;sao relevantes no rc.conf[.local]. Isso tambem e uma
       politica para todos os novos scripts, incluindo aqueles no sistema
       base.

    4. A linha REQUIRE esta definida para LOGIN? Isso e obrigatorio para
       scripts que sao executados como um usuario nao root. Se ele for
       executado como root, ha uma boa razao para ele ser executado antes de
       LOGIN? Caso contrario, ele deve ser executado depois para que os
       scripts locais possam ser agrupados em um ponto no rcorder(8) depois
       que quase tudo no sistema base ja estiver rodando.

    5. O script inicia um servic,o persistente? Em caso afirmativo, ele deve
       ter o KEYWORD: shutdown.

    6. Certifique-se de que nao ha um KEYWORD: FreeBSD presente. Isto nao foi
       necessario nem desejavel durante anos. Isto tambem e uma indicac,ao de
       que o novo script foi copiado/colado de um script antigo, portanto, um
       cuidado extra deve ser dado `a revisao.

    7. Se o script usa uma linguagem interpretada como o perl, o python ou o
       ruby, certifique-se de que o command_interpreter esta definido
       adequadamente, por exemplo, para o Perl, adicione PERL=${PERL} para a
       SUB_LIST e utilize %%PERL%%. De outra forma,

 # service name stop

       provavelmente nao funcionara corretamente. Consulte service(8) para
       maiores informac,oes.

    8. Todas as ocorrencias de /usr/local foram substituidas por %%PREFIX%%?

    9. As atribuic,oes das variaveis &#8203;&#8203;padrao vem depois de
       load_rc_config?

   10. Existem atribuic,oes padroes para sequencias vazias? Elas devem ser
       removidas, mas verifique se a opc,ao esta documentada nos comentarios
       na parte superior do arquivo.

   11. As variaveis &#8203;&#8203;definidas estao realmente sendo utilizadas
       no script?

   12. As opc,oes listadas no padrao name_flags sao realmente obrigatorias?
       Se assim for, elas devem estar em command_args. A opc,ao -d e uma flag
       vermelha (com o perdao do trocadilho) aqui, ja que geralmente e a
       opc,ao de "daemonizar" o processo e, portanto, e realmente
       obrigatorio.

   13. O name_flags nunca deve ser incluido em command_args (e vice-versa,
       embora esse erro seja menos comum).

   14. O script executa qualquer codigo incondicionalmente? Isso e
       desaprovado. Normalmente, essas coisas devem ser tratadas atraves de
       um start_precmd.

   15. Todos os testes booleanos devem usar a func,ao checkyesno. Nenhum
       teste deve usar [Yy][Ee][Ss], etc.

   16. Se houver um loop (por exemplo, esperando que algo inicie), ele tem um
       contador para terminar o loop? Nao queremos que a inicializac,ao seja
       bloqueada para sempre se houver um erro.

   17. O script cria arquivos ou diretorios que precisam de permissoes
       especificas, por exemplo, um pid que precisa ser de propriedade do
       usuario que executa o processo? Em vez da rotina tradicional
       touch(1)/chown(8)/chmod(1), considere usar install(1) com os
       argumentos de linha de comando apropriados para fazer todo o
       procedimento com um passo.

6.27. Adicionando Usuarios e Grupos

   Alguns ports exigem que uma conta de usuario especifica esteja presente,
   geralmente para daemons executados como esse usuario. Para esses ports,
   escolha um UID unico entre 50 a 999 e registre-o em ports/UIDs (para
   usuarios) e em ports/GIDs(para grupos). A identificac,ao unica deve ser a
   mesma para usuarios e grupos.

   Por favor, inclua um patch para estes dois arquivos quando for necessario
   que um novo usuario ou grupo seja criado para o port.

   Entao use USERS e GROUPS dentro do Makefile e o usuario sera criado
   automaticamente ao instalar o port.

 USERS=  pulse
 GROUPS= pulse pulse-access pulse-rt

   A lista atual de UIDs e GIDs reservados pode ser encontrada em ports/UIDs
   e ports/GIDs.

6.28. Ports que Dependem dos Fontes do kernel

   Alguns ports (como modulos carregaveis &#8203;&#8203;do kernel) precisam
   dos arquivos fonte do kernel para que o port possa ser compilado. Aqui
   esta a maneira correta de determinar se o usuario os instalou:

 USES=   kmod

   Alem desta verificac,ao, o recurso kmod cuida da maioria dos itens que
   esses ports precisam levar em considerac,ao.

6.29. Bibliotecas Go

   Os ports nao devem empacotar ou instalar bibliotecas Go ou codigo-fonte.
   Os ports Go devem baixar as dependencias na hora da compilac,ao e devem
   instalar apenas programas que os usuarios precisam, e nao o que os
   desenvolvedores Go precisam.

   Ports devem (por ordem de preferencia):

     * Usar as dependencias fornecidas no codigo fonte do pacote.

     * Baixar as versoes das dependencias especificadas pelo upstream (no
       caso do go.mod, vendor.json ou similar).

     * Como um ultimo recurso (as dependencias nao estao incluidas e nem as
       versoes foram especificadas exatamente) busque as versoes das
       dependencias disponiveis no momento do desenvolvimento/release.

6.30. Bibliotecas Haskell

   Assim como na linguagem Go, Ports nao devem empacotar ou instalar as
   bibliotecas Haskell. Os ports Haskell devem vincular estaticamente a suas
   dependencias e buscar todos os arquivos de distribuic,ao no estagio fetch.

6.31. Arquivos Shell Completion

   Muitos shells modernos (incluindo bash, tcsh e zsh) suportam parametro
   e/ou opc,ao de tab-completion. Esse suporte geralmente vem de arquivos
   completion, os quais contem as definic,oes de como as tabs completion
   funcionarao para um determinado comando. As vezes ports vem com seus
   arquivos completion, ou os mantenedores de ports podem ter criado um eles
   mesmos.

   Quando disponivel, os arquivos de completion devem sempre ser instalados.
   Nao e necessario fazer uma opc,ao para eles. Apesar que se uma opc,ao for
   usada, sempre habilite-a em OPTIONS_DEFAULT.

   Tabela 6.42. Caminhos dos arquivos shell completion

   bash ${PREFIX}/etc/bash_completion.d    
   zsh  ${PREFIX}/share/zsh/site-functions 

   Nao registre nenhuma dependencia nos proprios shells.

                              Capitulo 7. Flavors

   Indice

   7.1. Uma Introduc,ao aos Flavors

   7.2. Usando FLAVORS

   7.3. USES=php e Flavors

   7.4. USES=python e Flavors

   7.5. USES=lua e Flavors

7.1. Uma Introduc,ao aos Flavors

   Os flavors sao uma maneira de ter varias variac,oes de um port. O port e
   construido varias vezes, com variac,oes.

   Por exemplo, um port pode ter uma versao normal com muitos recursos e
   algumas dependencias, e uma versao leve "lite" com apenas recursos basicos
   e dependencias minimas.

   Outro exemplo poderia ser, um port pode ter um flavor GTK e um QT,
   dependendo de qual kit de ferramentas ele usa.

7.2. Usando FLAVORS

   Para declarar um port com varios flavors, adicione FLAVORS no seu
   Makefile. O primeiro flavor em FLAVORS e o flavor padrao.

  Dica:

   Isso pode ajudar a simplificar a logica do Makefile para tambem definir um
   FLAVOR como:

 FLAVOR?=        ${FLAVORS:[1]}

  Importante:

   Para distinguir os flavors das opc,oes, que sao sempre letras maiusculas,
   os nomes dos flavors podem conter apenas letras minusculas, numeros e
   underline _.

   Exemplo 7.1. Uso Basico de Flavors

   Se um port tiver um port slave "lite", o port slave pode ser removido, e o
   port pode ser convertido em flavors com:

 FLAVORS=        default lite
 lite_PKGNAMESUFFIX=     -lite
 [...]
 .if ${FLAVOR:U} != lite
 [enable non lite features]
 .endif

  Nota:

   O primeiro flavor e o padrao, e e chamado aqui de default. Nao e uma
   obrigac,ao e, se possivel, use um nome de flavor mais especifico, como em
   Exemplo 7.2, "Outro Uso Basico de Flavors".

   Exemplo 7.2. Outro Uso Basico de Flavors

   Se um port tiver um port slave -nox11, o port slave pode ser removido, e o
   port pode ser convertido em flavors com:

 FLAVORS=        x11 nox11
 FLAVOR?=        ${FLAVORS:[1]}
 nox11_PKGNAMESUFFIX=    -nox11
 [...]
 .if ${FLAVOR} == x11
 [enable x11 features]
 .endif

   Exemplo 7.3. Uso Mais Complexo de Flavors

   Aqui esta um excerto ligeiramente editado do que esta presente em
   devel/libpeas, um port que usa os flavors Python. Com as versoes padroes
   do Python 2 e 3 sendo 2.7 e 3.6, ele ira automaticamente mudar para
   FLAVORS=py27 py36

 USES=           gnome python
 USE_PYTHON=     flavors 1

 .if ${FLAVOR:Upy27:Mpy2*} 2
 USE_GNOME=      pygobject3 3

 CONFIGURE_ARGS+=        --enable-python2 --disable-python3

 BUILD_WRKSRC=   ${WRKSRC}/loaders/python 4
 INSTALL_WRKSRC= ${WRKSRC}/loaders/python 5
 .else # py3*
 USE_GNOME+=     py3gobject3 6

 CONFIGURE_ARGS+=        --disable-python2 --enable-python3 \
                         ac_cv_path_PYTHON3_CONFIG=${LOCALBASE}/bin/python${PYTHON_VER}-config 7

 BUILD_WRKSRC=   ${WRKSRC}/loaders/python3 8
 INSTALL_WRKSRC= ${WRKSRC}/loaders/python3 9
 .endif

 py34_PLIST=     ${.CURDIR}/pkg-plist-py3 10
 py35_PLIST=     ${.CURDIR}/pkg-plist-py3 11
 py36_PLIST=     ${.CURDIR}/pkg-plist-py3 12

   1   Este port nao usa o USE_PYTHON=distutils mas precisa do flavor Python  
       de qualquer maneira.                                                   
   2   Para proteger contra o FLAVOR estar vazio, o que causaria um erro no   
       make(1), use ${FLAVOR:U} em comparac,oes de strings em vez de          
       ${FLAVOR}.                                                             
   3 6 As ligac,oes gobject3 doGnome Python tem dois nomes diferentes, um     
       para Python2, pygobject3 e um para Python3, py3gobject3.               
   4 5 O script configure tem que ser executado em ${WRKSRC}, mas estamos     
   8 9 interessados &#8203;&#8203;apenas em compilar e instalar as partes     
       Python 2 ou Python 3 do software, entao configure os diretorios base   
       de compilac,ao e instalac,ao apropriadamente.                          
   7   Sugestao sobre o nome correto do caminho do script de configurac,ao do 
       Python 3.                                                              
   10  A lista de empacotamento e diferente quando compilada com Python 3.    
   11  Como existem tres possiveis versoes do Python3 , defina PLIST para     
   12  todos os tres usando o helper.                                         

  7.2.1. Flavors Helpers

   Para tornar o Makefile mais facil de ser escrito, existem alguns flavors
   helpers.

   Esta lista de helpers definira sua variavel:

     * flavor_PKGNAMEPREFIX

     * flavor_PKGNAMESUFFIX

     * flavor_PLIST

     * flavor_DESCR

   Esta lista de helpers sera anexada `a sua variavel:

     * flavor_CONFLICTS

     * flavor_CONFLICTS_BUILD

     * flavor_CONFLICTS_INSTALL

     * flavor_PKG_DEPENDS

     * flavor_EXTRACT_DEPENDS

     * flavor_PATCH_DEPENDS

     * flavor_FETCH_DEPENDS

     * flavor_BUILD_DEPENDS

     * flavor_LIB_DEPENDS

     * flavor_RUN_DEPENDS

     * flavor_TEST_DEPENDS

   Exemplo 7.4. Flavor Especifico PKGNAME

   Como todos os pacotes devem ter um nome de pacote diferente, os flavors
   devem mudar os seus, usando flavor_PKGNAMEPREFIX e o flavor_PKGNAMESUFFIX
   torna isso facil:

 FLAVORS=        normal lite
 lite_PKGNAMESUFFIX=     -lite

7.3. USES=php e Flavors

   Ao usar o USES=php com um destes argumentos, phpize, ext, zend ou pecl, o
   port tera automaticamente o FLAVORS preenchido com a versao PHP que ele
   suporta.

  Nota:

   Todos os exemplos assumem que as versoes PHP suportadas atualmente sao
   5.6, 7.0, 7.1 e 7.2.

   Exemplo 7.5. Extensao Simples USES=php

   Isso ira gerar o pacote para todas as versoes suportadas:

 PORTNAME=       some-ext
 PORTVERSION=    0.0.1
 PKGNAMEPREFIX=  ${PHP_PKGNAMEPREFIX}

 USES=           php:ext

   Isto ira gerar pacotes para todas as versoes suportadas, menos a 7.2:

 PORTNAME=       some-ext
 PORTVERSION=    0.0.1
 PKGNAMEPREFIX=  ${PHP_PKGNAMEPREFIX}

 USES=           php:ext
 IGNORE_WITH_PHP=        72

  7.3.1. Flavors PHP com Aplicac,oes PHP

   Aplicac,oes PHP tambem podem ter flavors.

   Isso permite gerar pacotes para todas as versoes do PHP, para que os
   usuarios possam usa-los com qualquer versao que precisarem em seus
   servidores.

  Importante:

   Aplicac,oes PHP que sao acrescidas de flavors devem acrescentar
   PHP_PKGNAMESUFFIX aos nomes dos pacotes.

   Exemplo 7.6. Adicionando Flavors em uma Aplicac,ao PHP

   Incluir o suporte de Flavors em uma aplicac,ao PHP e simples:

 PKGNAMESUFFIX=  ${PHP_PKGNAMESUFFIX}

 USES=   php:flavors

  Dica:

   Ao adicionar uma dependencia em um port com flavors PHP, use
   @${PHP_FLAVOR}. Nunca use FLAVOR diretamente.

7.4. USES=python e Flavors

   Ao usar USES=python e USE_PYTHON=distutils, o port ira automaticamente
   preencher FLAVORS com a versao Python que suporta.

   Exemplo 7.7. Simples USES=python

   Supondo que as versoes suportadas do Python sao 2.7, 3.4, 3.5 e 3.6, e a
   versao padrao do Python 2 e 3 sao 2.7 e 3.6, um port com:

 USES=   python
 USE_PYTHON=     distutils

   Recebera esses flavors: py27 e py36.

 USES=   python
 USE_PYTHON=     distutils allflavors

   Recebera esses flavors: py27, py34, py35 e py36.

   Exemplo 7.8. USES=python com Requisitos de Versao

   Supondo que as versoes suportadas do Python sao 2.7, 3.4, 3.5 e 3.6, e a
   versao padrao do Python 2 e 3 sao 2.7 e 3.6, um port com:

 USES=   python:-3.5
 USE_PYTHON=     distutils

   Vai ter esse flavor: py27.

 USES=   python:-3.5
 USE_PYTHON=     distutils allflavors

   Recebera esses flavors: py27, py34 e py35.

 USES=   python:3.4+
 USE_PYTHON=     distutils

   Vai ter esse flavor: py36.

 USES=   python:3.4+
 USE_PYTHON=     distutils allflavors

   Recebera esses flavors: py34, py35 e py36.

   A variavel PY_FLAVOR e disponibilizada para depender da versao correta dos
   modulos Python. Todas as dependencias em ports Python com flavors devem
   usar PY_FLAVOR, e nao FLAVOR diretamente.

   Exemplo 7.9. Para um port que nao usa distutils

   Se a versao padrao do Python3 e 3.6, o seguinte ira definir a variavel
   PY_FLAVOR para py36:

 RUN_DEPENDS=    ${PYTHON_PKGNAMEPREFIX}mutagen>0:audio/py-mutagen@${PY_FLAVOR}

 USES=   python:3.5+

7.5. USES=lua e Flavors

   Ao usar USES=lua:module ou USES=lua:flavors, o port tera automaticamente
   FLAVORS preenchidos com as versoes Lua que suporta. No entanto, nao se
   espera que aplicativos comuns (em vez de modulos Lua) usem este recurso; a
   maioria das aplicac,oes que incorporam ou usam Lua simplesmente devem usar
   USES=lua.

   LUA_FLAVOR esta disponivel (e deve ser usado) para depender da versao
   correta das dependencias, independentemente do port usar os parametros
   flavors ou module.

   Veja Sec,ao 6.22, "Usando Lua" para maiores informac,oes.

                  Capitulo 8. Praticas Avanc,adas de pkg-plist

   Indice

   8.1. Alterando o pkg-plist Baseado em Variaveis Make

   8.2. Diretorios Vazios

   8.3. Arquivos de Configurac,ao

   8.4. Lista de Pacotes Estatica versus Dinamica

   8.5. Criac,ao Automatizada da Lista de Pacotes

   8.6. Expandindo a Lista de Pacotes com Keywords

8.1. Alterando o pkg-plist Baseado em Variaveis Make

   Alguns ports, particularmente os p5- ports, precisam mudar seus pkg-plist
   dependendo de quais opc,oes eles sao configurados com (ou versao de perl,
   no caso de p5- ports). Para tornar isso facil, todas as instancias
   pkg-plist de %%OSREL%%, %%PERL_VER%% e %%PERL_VERSION%% serao substituidas
   apropriadamente. O valor de %%OSREL%% e a revisao numerica do sistema
   operacional (por exemplo,4.9). %%PERL_VERSION%% e %%PERL_VER%% e o numero
   completo da versao perl (por exemplo,5.8.9). Muitos outros %%VARS%%
   relacionados aos arquivos de documentac,ao do port sao descritos na sec,ao
   relevante.

   Para fazer outras substituic,oes, defina PLIST_SUB com uma lista de pares
   VAR=VALOR e as instancias de %%VAR%% serao substituidas por VALOR no
   pkg-plist.

   Por exemplo, se um port instalar muitos arquivos em um subdiretorio
   especifico da versao, use um placeholder para a versao de modo que o
   pkg-plist nao precise ser gerado novamente toda vez que o port e
   atualizado. Por exemplo:

 OCTAVE_VERSION= ${PORTREVISION}
 PLIST_SUB=      OCTAVE_VERSION=${OCTAVE_VERSION}

   no Makefile e use %%OCTAVE_VERSION%% onde quer que a versao aparec,a em
   pkg-plist. Quando o port e atualizado, nao sera necessario editar dezenas
   (ou em alguns casos, centenas) de linhas no pkg-plist.

   Se os arquivos sao instalados condicionalmente pelas opc,oes definidas no
   port, a maneira usual de lidar com isso e prefixando as linhas pkg-plist
   com %%OPT%% para linhas necessarias quando a opc,ao esta ativada ou
   %%NO_OPT%% quando a opc,ao esta desativada e adicionando OPTIONS_SUB=yes
   ao Makefile. Veja Sec,ao 5.13.3.1, "OPTIONS_SUB" para mais informac,oes.

   Por exemplo, se houver arquivos que sao instalados apenas quando a opc,ao
   X11 esta ativada, e o Makefile tem:

 OPTIONS_DEFINE= X11
 OPTIONS_SUB=    yes

   No pkg-plist, insira %%X11%% no inicio das linhas que serao instaladas
   apenas quando a opc,ao estiver habilitada, assim:

 %%X11%%bin/foo-gui

   Esta substituic,ao sera feita entre os targets pre-install e do-install,
   lendo a partir do PLIST e escrevendo em TMPPLIST
   (padrao:WRKDIR/.PLIST.mktmp). Entao, se o port gera o PLIST na hora da
   compilac,ao, fac,a isso em ou antes do pre-install. Alem disso, se o port
   precisar editar o arquivo resultante, fac,a-o em post-install em um
   arquivo chamado TMPPLIST.

   Outra maneira de modificar a lista de empacotamento de um port e baseada
   na configurac,ao das variaveisPLIST_FILES e PLIST_DIRS. O valor de cada
   variavel e considerado como uma lista de nomes de caminho para gravar no
   TMPPLIST junto com conteudo do PLIST. Enquanto os nomes listados no
   PLIST_FILES e PLIST_DIRS estao sujeitos a substituic,ao do %%VAR%%
   conforme descrito acima, e melhor usar o ${VAR} diretamente. Exceto por
   isso, os nomes contidos no PLIST_FILES aparecerao inalterados na lista
   final de packing, enquanto o @dir sera anexado aos nomes do PLIST_DIRS.
   Para fazer efeito, o PLIST_FILES e o PLIST_DIRS devem ser definidos antes
   que o TMPPLIST seja escrito, isto e, no pre-install ou antes.

   De vez em quando, usar OPTIONS_SUB nao e o suficiente. Nesses casos,
   adicionar uma TAG para PLIST_SUB dentro do Makefile com um valor especial
   @comment, faz as ferramentas de pacote ignorar a linha. Por exemplo, se
   alguns arquivos sao instalados apenas quando a opc,ao X11 esta habilitada
   e a arquitetura e i386:

 .include <bsd.port.pre.mk>

 .if ${PORT_OPTIONS:MX11} && ${ARCH} == "i386"
 PLIST_SUB+=     X11I386=""
 .else
 PLIST_SUB+=     X11I386="@comment "
 .endif

8.2. Diretorios Vazios

  8.2.1. Limpando Diretorios Vazios

   Ao ser desinstalado, um port deve remover os diretorios vazios que ele
   criou. A maioria desses diretorios sao removidos automaticamente pelo
   pkg(8), mas para os diretorios criados fora do ${PREFIX}, ou diretorios
   vazios, mais alguns passos precisam ser feitos. Isso geralmente e
   realizando adicionando entradas @dir para esses diretorios.Os
   subdiretorios devem ser excluidos antes de excluir os diretorios pai.

 [...]
 @dir /var/games/oneko/saved-games
 @dir /var/games/oneko

  8.2.2. Criando Diretorios Vazios

   Os diretorios vazios criados durante a instalac,ao do port precisam de
   atenc,ao especial. Eles devem estar presentes quando o pacote e criado. Se
   eles nao forem criados pelo codigo do port, crie-os no Makefile:

 post-install:
         ${MKDIR} ${STAGEDIR}${PREFIX}/some/directory

   Adicione o diretorio ao pkg-plist como qualquer outro. Por exemplo:

 @dir some/directory

8.3. Arquivos de Configurac,ao

   Se o port instalar arquivos de configurac,ao em PREFIX/etc (ou em outro
   lugar) nao liste-os em pkg-plist. Isso fara com que pkg delete remova os
   arquivos que foram cuidadosamente editados pelo usuario, e uma
   reinstalac,ao ira elimina-los.

   Em vez disso, instale arquivos de exemplo com uma extensao
   filename.sample. A macro @sample automatiza isso, consulte Sec,ao 8.6.9,
   "@sample file[file]" para entender o que ela faz exatamente. Para cada
   arquivo de exemplo, adicione uma entrada no pkg-plist:

 @sample etc/orbit.conf.sample

   Se houver uma boa razao para nao instalar um arquivo de configurac,ao por
   padrao, liste apenas o nome do arquivo de exemplo em pkg-plist, sem o
   @sample seguido por um espac,o e adicione uma mensagem ressaltando que o
   usuario deve copiar e editar o arquivo antes que o software seja
   executado.

  Dica:

   Quando um port instala sua configurac,ao em um subdiretorio de
   ${PREFIX}/etc, usar ETCDIR, cujo padrao e ${PREFIX}/etc/${PORTNAME}, pode
   ser substituido nos Makefile dos ports se houver uma convenc,ao para o
   port usar algum outro diretorio. A macro %%ETCDIR%% sera usado em seu
   lugar em pkg-plist.

  Nota:

   Os arquivos de configurac,ao de exemplo devem sempre ter o sufixo .sample.
   Se, por algum motivo historico, o uso do sufixo padrao nao for possivel ou
   se os arquivos de exemplo vierem de algum outro diretorio, use esta
   construc,ao:

 @sample etc/orbit.conf-dist etc/orbit.conf

   ou

 @sample %%EXAMPLESDIR%%/orbit.conf etc/orbit.conf

   O formato e @sample sample-file actual-config-file.

8.4. Lista de Pacotes Estatica versus Dinamica

   Uma lista de pacotes estaticos e uma lista de pacotes que esta disponivel
   na Colec,ao de Ports ou como pkg-plist (com ou sem substituic,ao de
   variavel), ou embutido no Makefile atraves do PLIST_FILES e do PLIST_DIRS.
   Mesmo se o conteudo for gerado automaticamente por uma ferramenta ou um
   taget no Makefile antes da inclusao na Colec,ao de Ports por um committer
   (por exemplo, usando make makeplist), isso ainda e considerado uma lista
   estatica, ja que e possivel examina-la sem ter que baixar ou compilar o
   distfile.

   Uma lista de pacotes dinamicos e uma lista de pacotes que e gerada no
   momento em que o port e compilado com base nos arquivos e diretorios que
   estao instalados. Nao e possivel examina-lo antes que o codigo-fonte do
   aplicativo portado seja baixado e compilado, ou apos executar um make
   clean.

   Embora o uso de listas de pacotes dinamicos nao seja proibido, os
   mantenedores devem usar listas de pacotes estaticos sempre que possivel,
   ja que isso permite aos usuarios utilizar grep(1) nos de ports disponiveis
   para descobrir, por exemplo, qual port instala um determinado arquivo.
   Listas dinamicas devem ser usadas principalmente para ports complexos onde
   a lista de pacotes muda drasticamente com base nos recursos opcionais do
   port (e assim manter uma lista de pacotes estatica e impraticavel), ou
   ports que alteram a lista de pacotes com base na versao do software
   dependente usado. Por exemplo, ports que geram documentos com Javadoc.

8.5. Criac,ao Automatizada da Lista de Pacotes

   Primeiro, verifique se o port esta quase completo, faltando apenas o
   pkg-plist. Executar o comando make makeplist ira mostrar um exemplo para o
   pkg-plist. A saida do makeplist deve ser checada duas vezes quanto `a
   correc,ao, pois ela tenta adivinhar automaticamente algumas coisas e pode
   errar.

   Os arquivos de configurac,ao do usuario devem ser instalados como
   filename.sample, como e descrito em Sec,ao 8.3, "Arquivos de
   Configurac,ao". O info/dir nao deve ser listado e entradas apropriadas
   install-info devem ser adicionadas conforme a sec,ao arquivos de
   informac,ao. Quaisquer bibliotecas instaladas pelo port devem ser listadas
   conforme especificado na sec,ao bibliotecas compartilhadas.

  8.5.1. Expansao do PLIST_SUB com Expressoes Regulares

   As strings a serem substituidas `as vezes precisam ser muito especificas
   para evitar substituic,oes indesejadas. Esse e um problema comum com
   valores mais curtos.

   Para resolver este problema, para cada PLACEHOLDER=value, um
   PLACEHOLDER_regex =regex pode ser definido, com o regex do value
   correspondendo mais precisamente.

   Exemplo 8.1. Usando PLIST_SUB com Expressoes Regulares

   Os ports Perl podem instalar arquivos dependentes da arquitetura em uma
   arvore especifica. No FreeBSD para facilitar a portabilidade, esta arvore
   e chamada de mach. Por exemplo, um port que instala um arquivo cujo
   caminho contem mach poderia ter essa parte da sequencia do caminho
   substituida pelos valores incorretos. Considere este Makefile:

 PORTNAME=       Machine-Build
 DISTVERSION=    1
 CATEGORIES=     devel perl5
 MASTER_SITES=   CPAN
 PKGNAMEPREFIX=  p5-

 MAINTAINER=     perl@FreeBSD.org
 COMMENT=        Building machine

 USES=           perl5
 USE_PERL5=      configure

 PLIST_SUB=      PERL_ARCH=mach

   Os arquivos instalados pelo port sao:

 /usr/local/bin/machine-build
 /usr/local/lib/perl5/site_perl/man/man1/machine-build.1.gz
 /usr/local/lib/perl5/site_perl/man/man3/Machine::Build.3.gz
 /usr/local/lib/perl5/site_perl/Machine/Build.pm
 /usr/local/lib/perl5/site_perl/mach/5.20/Machine/Build/Build.so

   Executar o make makeplist gera incorretamente:

 bin/%%PERL_ARCH%%ine-build
 %%PERL5_MAN1%%/%%PERL_ARCH%%ine-build.1.gz
 %%PERL5_MAN3%%/Machine::Build.3.gz
 %%SITE_PERL%%/Machine/Build.pm
 %%SITE_PERL%%/%%PERL_ARCH%%/%%PERL_VER%%/Machine/Build/Build.so

   Altere a linha PLIST_SUB do Makefile para:

 PLIST_SUB=      PERL_ARCH=mach \
                 PERL_ARCH_regex=\bmach\b

   Agora o make makeplist gera corretamente:

 bin/machine-build
 %%PERL5_MAN1%%/machine-build.1.gz
 %%PERL5_MAN3%%/Machine::Build.3.gz
 %%SITE_PERL%%/Machine/Build.pm
 %%SITE_PERL%%/%%PERL_ARCH%%/%%PERL_VER%%/Machine/Build/Build.so

8.6. Expandindo a Lista de Pacotes com Keywords

   Todas as keywords tambem podem ter argumentos opcionais entre parenteses.
   Os argumentos sao owner, group e mode. Esse argumento e usado no arquivo
   ou diretorio referenciado. Para alterar o dono, o grupo e o modo de um
   arquivo de configurac,ao, use:

 @sample(games,games,640) etc/config.sample

   Os argumentos sao opcionais. Se apenas o grupo e o modo precisarem ser
   alterados, use:

 @sample(,games,660) etc/config.sample

  Atenc,ao:

   Se uma keyword for utilizada em uma entrada de opc,ao, ela precisa ser
   adicionada apos o assistente:

 %%FOO%%@sample etc/orbit.conf.sample

   Isso e porque os assistentes plist das opc,oes sao utilizados para
   comentar as linhas, e por isso eles precisam ser inseridos no inicio. Veja
   Sec,ao 5.13.3.1, "OPTIONS_SUB" para maiores informac,oes.

  8.6.1. @desktop-file-utils

   Ira executar o update-desktop-database -q apos a instalac,ao e
   desinstalac,ao. Nunca use diretamente, adicione USES=utilitarios de
   arquivo de desktop ao Makefile.

  8.6.2. @fc directory

   Adiciona uma entrada @dir para o diretorio passado como um argumento, e
   executa fc-cache -fs nesse diretorio apos a instalac,ao e desinstalac,ao.

  8.6.3. @fcfontsdir directory

   Adiciona uma entrada @dir para o diretorio passado como um argumento, e
   executa fc-cache -fs, mkfontscale e mkfontdir nesse diretorio apos a
   instalac,ao e desinstalac,ao. Alem disso, na desinstalac,ao, ele remove os
   arquivos de cache fonts.scale e fonts.dir, se estiverem vazios. Esta
   keyword e equivalente a adicionar o diretorio @fc e o diretorio @fontsdir.

  8.6.4. @fontsdir directory

   Adiciona um entrada @dir para o diretorio passado como um argumento, e
   executa mkfontscale e mkfontdir nesse diretorio apos a instalac,ao e
   desinstalac,ao. Alem disso, na desinstalac,ao, ele remove os arquivos de
   cache fonts.scale e fonts.dir, se estiverem vazios.

  8.6.5. @glib-schemas

   Executa glib-compile-schemas na instalac,ao e desinstalac,ao.

  8.6.6. @info file

   Adiciona o arquivo passado como argumento ao plist e atualiza o indice do
   documento info na instalac,ao e desinstalac,ao. Alem disso, ele remove o
   indice se estiver vazio na desinstalac,ao. Isso nunca deve ser usado
   manualmente, mas sempre INFO. Veja Sec,ao 5.12, "Arquivos de Informac,ao"
   para maiores informac,oes.

  8.6.7. @kld directory

   Executa o kldxref no diretorio na instalac,ao e desinstalac,ao. Alem
   disso, na desinstalac,ao, ele removera o diretorio se estiver vazio.

  8.6.8. @rmtry file

   O arquivo sera removido na desinstalac,ao, e nao dara um erro se o arquivo
   nao estiver la.

  8.6.9. @sample file[file]

   Isso e usado para lidar com a instalac,ao de arquivos de configurac,ao,
   atraves de arquivos de exemplo empacotados com o pacote. O arquivo
   "atual", nao-amostra, ou e o segundo nome do arquivo, se presente, ou o
   primeiro nome de arquivo sem a extensao .sample.

   Isso faz tres coisas. Primeiro, adiciona o primeiro arquivo passado como
   argumento, o arquivo de exemplo, ao plist. Entao, na instalac,ao, se o
   arquivo real nao for encontrado, copia o arquivo de exemplo para o arquivo
   real. E, finalmente, na desinstalac,ao, remove o arquivo atual se ele nao
   tiver sido modificado. Veja Sec,ao 8.3, "Arquivos de Configurac,ao" para
   maiores informac,oes.

  8.6.10. @shared-mime-info directory

   Executa update-mime-database no diretorio na instalac,ao e desinstalac,ao.

  8.6.11. @shell file

   Adiciona o arquivo passado como argumento ao plist.

   Na instalac,ao, adiciona o caminho completo do file em /etc/shells,
   certificando-se que nao e adicionado duas vezes. Na desinstalac,ao,
   remove-o de /etc/shells.

  8.6.12. @terminfo

   Nao use sozinho. Se o port for instalar arquivos *.terminfo, adicione
   USES=terminfo no seu Makefile.

   Na instalac,ao e desinstalac,ao, se o tic estiver presente, atualize o
   ${PREFIX}/share/misc/terminfo.db a partir dos arquivos *.terminfo
   disponiveis em ${PREFIX}/share/misc.

  8.6.13. Keywords Basicas

   Existem algumas keywords que sao codificadas e documentadas em
   pkg-create(8). Por uma questao de completude, elas tambem estao
   documentadas aqui.

    8.6.13.1. @ [file]

   A keyword vazia e um espac,o reservado para ser usado quando o
   proprietario, grupo ou modo do arquivo precisam ser alterados. Por
   exemplo, para definir o grupo de um arquivo como games e adicionar o bit
   setgid, adicione:

 @(,games,2755) sbin/daemon

    8.6.13.2. @preexec command, @postexec command, @preunexec command,
    @postunexec command

   Executa o command como parte do processo de instalac,ao ou desinstalac,ao.

   @preexec command

           Executar o command como parte dos scripts pre-install.

   @postexec command

           Executar o command como parte dos scripts post-install.

   @preunexec command

           Executar o command como parte dos scripts pre-deinstall.

   @postunexec command

           Executar o command como parte dos scripts post-deinstall.

   E se o command contem qualquer uma dessas sequencias em algum lugar, elas
   sao expandidas em linha. Para estes exemplos, assuma que @cwd esta
   configurado para /usr/local e o ultimo arquivo extraido foi bin/emacs.

   %F

           Expandir para o ultimo nome de arquivo extraido (conforme
           especificado). No caso do exemplo bin/emacs.

   %D

           Expandir para o prefixo do diretorio atual, como definido no @cwd.
           No caso do exemplo /usr/local.

   %B

           Expandir para o nome de base do nome completo do arquivo, ou seja,
           o prefixo do diretorio atual mais o ultimo arquivo, menos o nome
           do arquivo final. No exemplo, isso seria /usr/local/bin.

   %f

           Expandir para a parte do nome do arquivo do nome totalmente
           qualificado, ou o inverso de %B. No caso do exemplo, emacs.

  Importante:

   Essas keywords estao aqui para ajuda-lo a configurar o pacote para que ele
   esteja tao pronto quanto possivel. Elas nao devem ser abusadas para
   iniciar servic,os, interromper servic,os ou executar quaisquer outros
   comandos que modificarao o sistema em execuc,ao.

    8.6.13.3. @mode mode

   Define a permissao padrao para todos os arquivos extraidos posteriormente
   para mode. O formato e o mesmo usado por chmod(1). Use sem um argumento
   para voltar `as permissoes padrao (modo do arquivo enquanto estava sendo
   empacotado).

  Importante:

   Este deve ser um modo numerico, como 644, 4755 ou 600. Nao pode ser um
   modo relativo comou+s.

    8.6.13.4. @owner user

   Define a propriedade padrao para todos os arquivos subsequentes para user.
   Use sem um argumento para voltar `a propriedade padrao (root).

    8.6.13.5. @group group

   Define a propriedade de grupo padrao para todos os arquivos subsequentes
   para group. Use sem um argumento para retornar `a propriedade do grupo
   padrao (wheel).

    8.6.13.6. @comment string

   Esta linha e ignorada no momento de empacotar.

    8.6.13.7. @dir directory

   Declara o nome do diretorio. Por padrao, os diretorios criados sob PREFIX
   por uma instalac,ao de pacote sao automaticamente removidos. Use isto
   quando um diretorio vazio sob PREFIX precisa ser criado ou quando o
   diretorio precisa ter proprietario, grupo ou modo nao padrao. Diretorios
   fora de PREFIX precisam ser registrados. Por exemplo, /var/db/${PORTNAME}
   precisa ter uma entrada @dir enquanto ${PREFIX}/share/${PORTNAME} nao, se
   contiver arquivos ou usar o proprietario, grupo e modo padrao.

    8.6.13.8. @exec command, @unexec command (Descontinuado)

   Executa o command como parte do processo de instalac,ao ou desinstalac,ao.
   Por favor, use Sec,ao 8.6.13.2, "@preexec command, @postexec command,
   @preunexec command, @postunexec command" no lugar.

    8.6.13.9. @dirrm directory (Descontinuado)

   Declara o nome do diretorio a ser excluido na desinstalac,ao. Por padrao,
   os diretorios criados sob PREFIX por uma instalac,ao de pacote sao
   excluidos quando o pacote e desinstalado.

    8.6.13.10. @dirrmtry directory (Descontinuado)

   Declara o nome do diretorio a ser removido, como para a keyword @dirrm,
   mas nao emite um aviso se o diretorio nao puder ser removido.

  8.6.14. Criando Novas Keywords

   Os arquivos da lista de pacotes podem ser estendidos por keywords
   definidas no diretorio ${PORTSDIR}/Keywords. As configurac,oes de cada
   keyword sao armazenadas em um arquivo UCL chamado keyword.ucl. O arquivo
   deve conter pelo menos uma destas sec,oes:

     * attributes

     * action

     * pre-install

     * post-install

     * pre-deinstall

     * post-deinstall

     * pre-upgrade

     * post-upgrade

    8.6.14.1. attributes

   Altera o dono, grupo ou modo usado pela keyword. Contem uma matriz
   associativa em que as chaves possiveis sao owner, group e mode. Os valores
   sao, respectivamente, um nome de usuario, um nome de grupo e um modo de
   arquivo. Por exemplo:

 attributes: { owner: "games", group: "games", mode: 0555 }

    8.6.14.2. action

   Define o que acontece com o parametro da keyword. Contem uma matriz onde
   os valores possiveis sao:

   setprefix

           Define o prefixo para as proximas entradas do plist.

   dir

           Registra um diretorio para ser criado na instalac,ao e removido na
           desinstalac,ao.

   dirrm

           Registra um diretorio a ser excluido na desinstalac,ao.
           Descontinuado.

   dirrmtry

           Registra um diretorio para tentar deletar na desinstalac,ao.
           Descontinuado.

   file

           Registra um arquivo.

   setmode

           Define o modo para as proximas entradas do plist.

   setowner

           Define o dono para as proximas entradas do plist.

   setgroup

           Define o grupo para as proximas entradas do plist.

   comment

           Nao faz nada, e o equivalente a nao entrar em uma sec,ao action.

   ignore_next

           Ignora a proxima entrada no plist.

    8.6.14.3. arguments

   Se definido para true, adiciona manipulac,ao de argumentos, dividindo toda
   a linha, %@, em argumentos numerados,%1, %2, e assim por diante. Por
   exemplo, para esta linha:

 @foo some.content other.content

   %1 e %2 irao conter:

 some.content
 other.content

   Tambem afeta como a entrada action funciona. Quando ha mais de um
   argumento, o numero do argumento deve ser especificado. Por exemplo:

 actions: [file(1)]

    8.6.14.4. pre-install, post-install, pre-deinstall, post-deinstall,
    pre-upgrade, post-upgrade

   Essas keywords contem um script sh(1) a ser executado antes ou depois da
   instalac,ao, desinstalac,ao, ou atualizac,ao do pacote. Alem do habitual
   placeholder @exec%foo descrito em Sec,ao 8.6.13.2, "@preexec command,
   @postexec command, @preunexec command, @postunexec command", ha um novo
   %@, que representa o argumento da keyword.

    8.6.14.5. Exemplos de Keywords Customizadas

   Exemplo 8.2. Exemplo de uma Keyword @dirrmtryecho

   Esta keyword faz duas coisas, adiciona uma linha @dirrmtry directory na
   lista de empacotamento, e escreve no log quando o diretorio e removido ao
   desinstalar o pacote.

 actions: [dirrmtry]
 post-deinstall: <<EOD
   echo "Directory %D/%@ removed."
 EOD

   Exemplo 8.3. Exemplo na vida real, como o @sample e implementado

   Esta keyword faz tres coisas. Ela adiciona o primeiro filename passado
   como um argumento para @sample na lista de empacotamento, ele adiciona
   instruc,oes ao script de post-install para copiar o exemplo para o arquivo
   de configurac,ao real, se ele ainda nao existir, e adiciona instruc,oes ao
   script post-deinstall para remover o arquivo de configurac,ao se ele nao
   tiver sido modificado.

 actions: [file(1)]
 arguments: true
 post-install: <<EOD
   case "%1" in
   /*) sample_file="%1" ;;
   *) sample_file="%D/%1" ;;
   esac
   target_file="${sample_file%.sample}"
   set -- %@
   if [ $# -eq 2 ]; then
       target_file=${2}
   fi
   case "${target_file}" in
   /*) target_file="${target_file}" ;;
   *) target_file="%D/${target_file}" ;;
   esac
   if ! [ -f "${target_file}" ]; then
     /bin/cp -p "${sample_file}" "${target_file}" && \
       /bin/chmod u+w "${target_file}"
   fi
 EOD
 pre-deinstall: <<EOD
   case "%1" in
   /*) sample_file="%1" ;;
   *) sample_file="%D/%1" ;;
   esac
   target_file="${sample_file%.sample}"
   set -- %@
   if [ $# -eq 2 ]; then
       set -- %@
       target_file=${2}
   fi
   case "${target_file}" in
   /*) target_file="${target_file}" ;;
   *) target_file="%D/${target_file}" ;;
   esac
   if cmp -s "${target_file}" "${sample_file}"; then
     rm -f "${target_file}"
   else
     echo "You may need to manually remove ${target_file} if it is no longer needed."
   fi
 EOD

                               Capitulo 9. pkg-*

   Indice

   9.1. pkg-message

   9.2. pkg-install

   9.3. pkg-deinstall

   9.4. Mudando os nomes dos pkg-*

   9.5. Fazendo uso de SUB_FILES e SUB_LIST

   Existem alguns truques que ainda nao foram mencionamos sobre os arquivos
   pkg-* que sao uteis `as vezes.

9.1. pkg-message

   Para exibir uma mensagem quando o pacote e instalado, coloque a mensagem
   no pkg-message. Esse recurso e geralmente util para exibir etapas
   adicionais de instalac,ao a serem executadas apos o pkg install ou pkg
   upgrade.

  Importante:

     * pkg-message deve conter apenas informac,oes vitais de setup e
       operac,ao no FreeBSD, e isso e unico para o port em questao.

     * As informac,oes de configurac,ao devem ser mostradas apenas na
       instalac,ao inicial. As instruc,oes de atualizac,ao devem ser exibidas
       apenas ao atualizar a versao relevante.

     * Nao coloque as mensagens entre espac,os em branco ou linhas de
       simbolos (como ----------, **********, ou ==========). Deixe a
       formatac,ao com o pkg(8).

     * Os committers tem aprovac,ao implicita para restringir as mensagens
       existentes na hora da instalac,ao ou em intervalos de atualizac,ao,
       usando as especificac,oes do formato UCL.

   pkg-message suporta dois formatos:

   raw

           Um arquivo de texto simples comum. Sua mensagem e exibida apenas
           na instalac,ao.

   UCL

           Se o arquivo comec,ar com "[" sera considerado como um arquivo
           UCL. O formato UCL e descrito na pagina libucl no GitHub.

  Nota:

   Nao adicione uma entrada para o pkg-message ao pkg-plist.

  9.1.1. UCL no pkg-message

   O formato e o seguinte. Deve ser uma matriz de objetos. Os objetos em si
   podem ter essas palavras-chave:

   message

           A mensagem atual a ser exibida. Esta palavra-chave e obrigatoria.

   type

           Quando a mensagem deve ser exibida.

   maximum_version

           Somente se type for upgrade. Exibe se estiver atualizando de uma
           versao inferior que a versao especificada.

   minimum_version

           Somente se type for upgrade. Exibe se estiver atualizando de uma
           versao maior que a versao especificada.

   As palavras-chave maximum_version e minimum_version podem ser combinadas.

   A palavra-chave type pode ter tres valores:

   install

           A mensagem so deve ser exibida quando o pacote e instalado.

   remove

           A mensagem so deve ser exibida quando o pacote e removido.

   upgrade

           a mensagem so deve ser exibida durante uma atualizac,ao do pacote.

  Importante:

   Para preservar a compatibilidade com arquivos pkg-message nao UCL, a
   primeira linha de um arquivo pkg-message UCL DEVE ter um simples "[", e a
   ultima linha DEVE ter um simples "]".

   Exemplo 9.1. Strings Curtas UCL

   A mensagem e delimitada por aspas duplas ", isto e utilizado em strings
   simples de linha unica:

 [
 { type: install
   message: "Simple message"
 }
 ]

   Exemplo 9.2. Strings de Multiplas Linhas UCL

   Strings de multiplas linhas utiliza o padrao here de documento de
   notac,ao. O delimitador de multiplas linhas deve iniciar logo apos os
   simbolos << sem espac,o em branco, e ele deve ser apenas em letras
   maiusculas. Para finalizar uma sequencia de multiplas linhas, adicione o
   delimitador em uma linha unica, sem nenhum espac,o em branco. A mensagem
   de Exemplo 9.1, "Strings Curtas UCL" pode ser escrita como:

 [
 { type: install
   message: <<EOM
 Simple message
 EOM
 }
 ]

   Exemplo 9.3. Exibir uma Mensagem na Instalac,ao/Desinstalac,ao

   Quando uma mensagem precisa ser exibida apenas na instalac,ao ou na
   desinstalac,ao, defina o tipo:

 [
 {
   type: remove
   message: "package being removed."
 }
 { type: install, message: "package being installed."}
 ]

   Exemplo 9.4. Exibir uma Mensagem na Atualizac,ao

   Quando um port e atualizado, a mensagem exibida pode ser ainda mais
   adaptada `as necessidades do port.

 [
 {
   type: upgrade
   message: "Package is being upgraded."
 }
 {
   type: upgrade
   maximum_version: "1.0"
   message: "Upgrading from before 1.0 need to do this."
 }
 {
   type: upgrade
   minimum_version: "1.0"
   message: "Upgrading from after 1.0 should do that."
 }
 {
   type: upgrade
   maximum_version: "3.0"
   minimum_version: "1.0"
   message: "Upgrading from > 1.0 and < 3.0 remove that file."
 }
 ]

  Importante:

   Ao exibir uma mensagem na atualizac,ao, e importante limitar ate quando
   ela sera mostrada ao usuario. Na maioria das vezes, e usado o
   maximum_version para limitar seu uso a atualizac,oes anteriores a uma
   certa versao, quando algo especifico precisa ser feito.

9.2. pkg-install

   Se o port precisa executar comandos quando o pacote binario e instalado
   com o pkg add ou com o pkg install, use o pkg-install. Este script sera
   automaticamente adicionado ao pacote. Sera executado duas vezes pelo pkg,
   a primeira vez como ${SH} pkg-install ${PKGNAME} PRE-INSTALL antes que o
   pacote seja instalado e uma segunda vez como ${SH} pkg-install ${PKGNAME}
   POST-INSTALL depois dele ter sido instalado. O valor de $2 pode ser
   testado para determinar em que modo o script esta sendo executado. A
   variavel de ambiente PKG_PREFIX sera definida para o diretorio de
   instalac,ao do pacote.

  Importante:

   Este script esta aqui para ajuda-lo a configurar o pacote para que ele
   esteja tao pronto quanto possivel para ser usado. Ele nao deve ser abusado
   para iniciar servic,os, interromper servic,os ou executar quaisquer outros
   comandos que modificarao o sistema em execuc,ao no momento.

9.3. pkg-deinstall

   Este script e executado quando um pacote e removido.

   Este script sera executado duas vezes pelo pkg delete. A primeira vez como
   ${SH} pkg-deinstall ${PKGNAME} DEINSTALL antes que o port seja
   desinstalado e a segunda vez como ${SH} pkg-deinstall ${PKGNAME}
   POST-DEINSTALL apos o port ter sido desinstalado. O valor de $2 pode ser
   testado para determinar em que modo o script esta sendo executado. A
   variavel de ambiente PKG_PREFIX sera definida para o diretorio de
   instalac,ao do pacote

  Importante:

   Este script esta aqui para ajuda-lo a configurar o pacote para que ele
   esteja tao pronto quanto possivel para ser usado. Ele nao deve ser abusado
   para iniciar servic,os, interromper servic,os ou executar quaisquer outros
   comandos que modificarao o sistema em execuc,ao no momento.

9.4. Mudando os nomes dos pkg-*

   Todos os nomes de pkg-* sao definidos usando variaveis &#8203;&#8203;que
   podem ser alteradas no Makefile se necessario. Isso e especialmente util
   ao compartilhar os mesmos arquivos pkg-* entre varios ports ou quando e
   necessario gravar em um desses arquivos. Veja escrevendo em lugares que
   nao o WRKDIR para entender por que e uma ma ideia escrever diretamente no
   diretorio que contem os arquivos pkg-*.

   Aqui esta uma lista de nomes de variaveis e seus valores padrao. (O valor
   padrao do PKGDIR e ${MASTERDIR}.)

     Variavel        Valor padrao       
   DESCR        ${PKGDIR}/pkg-descr     
   PLIST        ${PKGDIR}/pkg-plist     
   PKGINSTALL   ${PKGDIR}/pkg-install   
   PKGDEINSTALL ${PKGDIR}/pkg-deinstall 
   PKGMESSAGE   ${PKGDIR}/pkg-message   

9.5. Fazendo uso de SUB_FILES e SUB_LIST

   O SUB_FILES e o SUB_LIST sao uteis para valores dinamicos em arquivos do
   port, como o PREFIX de instalac,ao dentro do pkg-message.

   A SUB_FILES especifica uma lista de arquivos a serem modificados
   automaticamente. Cada arquivo na lista SUB_FILES deve ter um arquivo.in
   correspondente presente no FILESDIR. Uma versao modificada sera criada
   como ${WRKDIR}/arquivo. Os arquivos definidos como um valor de USE_RC_SUBR
   sao automaticamente adicionados ao SUB_FILES. Para os arquivospkg-message,
   pkg-install e pkg-deinstall, a variavel Makefile correspondente e
   automaticamente definida para apontar para a versao processada.

   A SUB_LIST e uma lista de pares VAR=VALUE. Para cada par, %%VAR%% sera
   substituido por VALUE em cada arquivo listado em SUB_FILES. Varios pares
   comuns sao definidos automaticamente: PREFIX, LOCALBASE, DATADIR, DOCSDIR,
   EXEMPLESDIR, WWWDIR e ETCDIR. Qualquer linha que comece com @Comment
   seguido por um espac,o, sera excluido dos arquivos resultantes apos uma
   substituic,ao de variavel.

   Este exemplo substitui %%ARCH%% com a arquitetura do sistema em um
   pkg-message:

 SUB_FILES=      pkg-message
 SUB_LIST=       ARCH=${ARCH}

   Note que para este exemplo, o pkg-message.in deve existir no FILESDIR.

   Exemplo de um bom pkg-message.in:

 Now it is time to configure this package.
 Copy %%PREFIX%%/share/examples/putsy/%%ARCH%%.conf into your home directory
 as .putsy.conf and edit it.

                          Capitulo 10. Testando o Port

   Indice

   10.1. Executando make describe

   10.2. Portlint

   10.3. Ferramentas do Ports

   10.4. PREFIX e DESTDIR

   10.5. Poudriere

10.1. Executando make describe

   Varias das ferramentas de manutenc,ao de ports do FreeBSD, tal como o
   portupgrade(1), conta com um banco de dados chamado /usr/ports/INDEX o
   qual mantem um registro de itens tais como as dependencias do port. O
   INDEX e criado pelo ports/Makefile de nivel superior atraves do comando
   make index, que desce em cada subdiretorio dos ports e executa o comando
   make describe la. Desta forma, se o make describe falhar em qualquer port,
   ninguem podera gerar o INDEX e muitas pessoas rapidamente se tornarao
   infelizes.

  Nota:

   E importante poder gerar este arquivo independentemente das opc,oes
   presentes no make.conf entao evite fazer coisas como usar declarac,oes
   .error quando (por exemplo) uma dependencia nao estiver satisfeita. (Veja
   Sec,ao 13.16, "Evite o Uso do Construtor .error".)

   E se o make describe produzir uma string em vez de uma mensagem de erro,
   provavelmente esta tudo certo. Veja o bsd.port.mk para saber o significado
   da string gerada.

   Note tambem que rodar uma versao recente do portlint (conforme
   especificado na proxima sec,ao) executara o make describe automaticamente.

10.2. Portlint

   Verifique o port com portlint antes de submete-lo ou de fazer o seu
   commit. O portlint alerta sobre muitos erros comuns, tanto funcionais
   quanto de estilo. Para um novo (ou um repocopiado) port , portlint -A e o
   uso mais completo; para um port existente, portlint -C e suficiente.

   O portlint usa uma tecnica heuristica para tentar descobrir erros, pode
   produzir avisos falso-positivos. Alem disso, ocasionalmente, algo que e
   sinalizado como um problema, pode nao ter uma outra forma de ser realizado
   por limitac,oes no framework dos ports. Em caso de duvida, a melhor coisa
   a fazer e perguntar na Lista de discussao de ports do FreeBSD.

10.3. Ferramentas do Ports

   O programa ports-mgmt/porttools faz parte da Colec,ao de Ports.

   O port e o script front-end, que pode ajudar a simplificar o trabalho de
   teste. Sempre que um novo port ou uma atualizac,ao de um ja existente
   precisar de teste, use port test para testar o port, incluindo a
   verificac,ao portlint. Este comando tambem detecta e lista todos os
   arquivos que nao estao listados no pkg-plist. Por exemplo:

 # port test /usr/ports/net/csup

10.4. PREFIX e DESTDIR

   PREFIX determina onde o port sera instalado. O padrao e /usr/local, mas
   pode ser definido pelo usuario para um caminho personalizado como /opt. O
   port deve respeitar o valor dessa variavel.

   O DESTDIR, se definido pelo usuario, determina o ambiente alternativo
   completo, geralmente uma jail ou um sistema instalado montado em outro
   local que nao seja o /. Um port sera realmente instalado no
   DESTDIR/PREFIX, e registrado no banco de dados de pacotes em
   DESTDIR/var/db/pkg. Como o DESTDIR e tratado automaticamente pela
   infraestrutura de ports com o chroot(8). Nao ha necessidade de
   modificac,oes ou qualquer cuidado extra para escrever ports compativeis
   com o DESTDIR.

   O valor de PREFIX sera definido para LOCALBASE (o valor padrao e
   /usr/local). E se USE_LINUX_PREFIX estiver definido o PREFIX sera
   LINUXBASE (o valor padrao e /compat/linux).

   Evitar o uso do caminho /usr/local codificado no fonte tornam o port muito
   mais flexivel e capaz de atender `as necessidades de outros sites. Muitas
   vezes, isso pode ser feito substituindo as ocorrencias de /usr/local nos
   varios Makefiles dos ports por ${PREFIX}. Essa variavel e transmitida
   automaticamente para todos os estagios dos processos de compilac,ao e
   instalac,ao.

   Verifique se o aplicativo nao esta instalando arquivos em /usr/local ao
   inves de PREFIX. Um teste rapido para esses caminhos codificados e:

 % make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`

   Se alguma coisa for instalada fora do PREFIX, o processo de criac,ao de
   pacotes ira reclamar que nao pode encontrar os arquivos.

   Alem disso, vale a pena verificar o mesmo em relac,ao ao suporte a
   diretorios stage (veja Sec,ao 6.1, "Staging"):

 % make stage && make check-plist && make stage-qa && make package

     * O check-plist verifica arquivos ausentes do plist e arquivos no plist
       que nao sao instalados pelo port.

     * O stage-qa verifica problemas comuns como shebang incorretas, links
       simbolicos apontando para fora do diretorio de stage, arquivos setuid
       e bibliotecas nao removidas...

   Esses testes nao encontrarao caminhos codificados dentro dos arquivos do
   port, nem verificarao se o LOCALBASE esta sendo usado para se referir
   corretamente a arquivos de outros ports. O port instalado temporariamente
   em /var/tmp/`make -V PORTNAME` deve ser testado quanto `a operac,ao
   correta para garantir que nao haja problemas com os caminhos.

   O PREFIX nao deve ser definido explicitamente em um Makefile do port.
   Usuarios instalando o port podem ter definido a variavel PREFIX para um
   local personalizado e o port deve respeitar essa configurac,ao.

   Referencie programas e arquivos de outros ports com as variaveis
   &#8203;&#8203;mencionadas acima, nao com nomes de caminho explicitos. Por
   exemplo, se o port exigir uma macro PAGER para ter o nome de caminho
   completo para o less, nao use um caminho literal para /usr/local/bin/less.
   Em vez disso, use ${LOCALBASE}:

 -DPAGER=\"${LOCALBASE}/bin/less\"

   O caminho com LOCALBASE e muito provavel que ainda funcione se o
   administrador do sistema mudou toda a arvore /usr/local para algum outro
   lugar.

  Dica:

   Todos esses testes sao feitos automaticamente ao executar poudriere
   testport ou poudriere bulk -t. E altamente recomendavel que cada
   contribuidor de ports instale e teste seus ports com ele. Veja
   Sec,ao 10.5, "Poudriere" para maiores informac,oes.

10.5. Poudriere

   Para um contribuidor de ports, o Poudriere e uma das mais importantes e
   uteis ferramentas de teste e compilac,ao. Suas principais caracteristicas
   incluem:

     * Compilac,ao em massa de toda a arvore de ports, subconjuntos
       especificos da arvore de ports, ou um unico port incluindo suas
       dependencias

     * Empacotamento automatico do resultados de compilac,ao

     * Gerac,ao de arquivos de log de compilac,ao por port

     * Fornecer um repositorio pkg(8) assinado

     * Testar a compilac,ao do port antes de enviar um patch para o
       rastreador de bugs do FreeBSD ou antes de fazer o commit para a arvore
       de ports

     * Testar a compilac,ao bem-sucedida de ports usando opc,oes diferentes

   Porque o Poudriere realiza a sua compilac,ao em um ambiente de jail(8)
   limpo e usa caracteristicas do zfs(8), ele tem varias vantagens sobre os
   testes tradicionais no sistema host:

     * Ele nao polui o ambiente do host: sem arquivos sobrando, sem remoc,oes
       acidentais, sem alterac,oes nos arquivos de configurac,ao existentes.

     * Ele verifica o pkg-plist para entradas ausentes ou superfluas

     * Committers de ports `as vezes pedem um log do Poudriere juntamente com
       a apresentac,ao de um patch para avaliar se o patch esta pronto para
       integrac,ao na arvore de ports

   Ele tambem e muito simples de configurar e usar, nao tem dependencias e
   sera executado em qualquer versao suportada do FreeBSD. Esta sec,ao mostra
   como instalar, configurar e executar o Poudriere como parte do fluxo de
   trabalho normal de um contribuidor de ports.

   Os exemplos nesta sec,ao mostram um layout de arquivo padrao, como padrao
   no FreeBSD. Substitua quaisquer alterac,oes locais de acordo. A arvore de
   ports, representada por ${PORTSDIR}, esta localizada em /usr/ports. Ambos
   ${LOCALBASE} e ${PREFIX} sao /usr/local por padrao.

  10.5.1. Instalando o Poudriere

   O Poudriere esta disponivel na arvore de ports em ports-mgmt/poudriere.
   Ele pode ser instalado usando o pkg(8) ou a partir do ports:

 # pkg install poudriere

   ou

 # make -C /usr/ports/ports-mgmt/poudriere install clean

   Ha tambem uma versao de trabalho em andamento do Poudriere que acabara por
   se tornar o proximo release. Ele esta disponivel em
   ports-mgmt/poudriere-devel. Esta versao de desenvolvimento e usada para as
   compilac,oes oficiais de pacotes do FreeBSD, entao e bem testada. Muitas
   vezes tem novos recursos interessantes. Um committer de ports desejara
   usar a versao de desenvolvimento porque e o que e usado na produc,ao e
   possui todos os novos recursos que farao com que tudo esteja exatamente
   correto. Um colaborador nao precisara necessariamente deles, pois as
   correc,oes mais importantes sao sempre incorporadas na versao release. A
   principal razao para o uso da versao de desenvolvimento para compilar os
   pacotes oficiais e porque e mais rapido, de uma forma que encurtara uma
   compilac,ao completa de 18 horas para 17 horas ao usar um servidor de 32
   CPUs high-end com 128GB de RAM. Essas otimizac,oes nao terao muita
   importancia ao compilar ports em uma maquina desktop.

  10.5.2. Configurando o Poudriere

   O port instala um arquivo de configurac,ao padrao, o
   /usr/local/etc/poudriere.conf. Cada parametro e documentado no arquivo de
   configurac,ao em poudriere(8). Aqui esta um arquivo de configurac,ao
   minimo de exemplo:

 ZPOOL=tank
 ZROOTFS=/poudriere
 BASEFS=/poudriere
 DISTFILES_CACHE=/usr/ports/distfiles
 RESOLV_CONF=/etc/resolv.conf
 FREEBSD_HOST=ftp://ftp.freebsd.org
 SVN_HOST=svn.FreeBSD.org

   ZPOOL

           O nome do pool de armazenamento do ZFS que o Poudriere deve usar.
           Deve ser listado na saida de zpool status.

   ZROOTFS

           A raiz dos sistemas de arquivos gerenciados do Poudriere. Esta
           entrada fara com que o Poudriere crie o sistema de arquivo zfs(8)
           sob tank/poudriere.

   BASEFS

           O ponto de montagem da raiz do sistema de arquivo Poudriere. Esta
           entrada fara com que o Poudriere monte o tank/poudriere no
           /poudriere.

   DISTFILES_CACHE

           Define onde os distfiles sao armazenados. Neste exemplo, o
           Poudriere e o host compartilham o diretorio de armazenamento dos
           distfiles. Isso evita o download de tarballs que ja estao
           presentes no sistema. Por favor, crie este diretorio se ele ainda
           nao existir, para que o Poudriere possa encontra-lo.

   RESOLV_CONF

           Utiliza o /etc/resolv.conf do host dentro do jails para a
           resoluc,ao de DNS. Isso e necessario para que as jails possam
           resolver as URLs dos distfiles durante o download. Nao e
           necessario ao usar um proxy. Consulte o arquivo de configurac,ao
           padrao para a configurac,ao de proxy.

   FREEBSD_HOST

           O servidor FTP/HTTP a ser usado quando as jails sao instaladas a
           partir de versoes do FreeBSD e atualizadas com o
           freebsd-update(8). Escolha um servidor cuja localizac,ao esteja
           proxima, por exemplo, se a maquina estiver localizada na
           Australia, use ftp.au.freebsd.org.

   SVN_HOST

           O servidor de onde as jails sao instaladas e atualizadas ao usar o
           Subversion. Tambem usado para a arvore de ports quando nao estiver
           usando o portsnap(8). Mais uma vez, escolha um local proximo. Uma
           lista de espelhos oficiais do Subversion podem ser encontrados na
           sec,ao sobre Subversion do Handbook do FreeBSD.

  10.5.3. Criando Poudriere Jails

   Crie as jails de base que serao usadas pelo Poudriere para as
   compilac,oes:

 # poudriere jail -c -j 113Ramd64 -v 11.3-RELEASE -a amd64

   Baixe a versao 11.3-RELEASE para amd64 do servidor FTP dado por
   FREEBSD_HOST dentro do poudriere.conf, crie o sistema de arquivos com zfs
   em tank/poudriere/jails/113Ramd64, monte-o em /poudriere/jails/113Ramd64 e
   extrai os tarballs 11.3-RELEASE neste sistema de arquivos.

 # poudriere jail -c -j 11i386 -v stable/11 -a i386 -m svn+https

   Criado o tank/poudriere/jaulas/11i386 monte-o em /poudriere/jails/11i386,
   entao confira a dica do Subversion branch do FreeBSD-11-STABLE a partir do
   SVN_HOST dentro do poudriere.conf para dentro de
   /poudriere/jails/11i386/usr/src, e entao complete um buildworld e
   instale-o em /poudriere/jails/11i386.

  Dica:

   Se uma determinada revisao do Subversion e necessaria, anexe ela `a string
   de versao. Por exemplo:

 # poudriere jail -c -j 11i386 -v stable/11@123456 -a i386 -m svn+https

  Nota:

   Embora seja possivel compilar uma versao mais nova do FreeBSD em uma
   versao mais antiga, na maioria das vezes ela nao ira executar. Por
   exemplo, se uma jail stable/11 e necessaria, o host tera que rodar
   stable/11 tambem. Rodar 11.3-RELEASE nao e o suficiente.

  Nota:

   Para criar uma jail Poudriere para o 13.0-CURRENT:

 # poudriere jail -c -j 13amd64 -v head -a amd64 -m svn+https

   Para executar uma jail 13.0-CURRENT no Poudriere voce deve estar rodando o
   13.0-CURRENT. Em geral, novos kernels podem ser compilados e executar
   jails mais antigas. Por exemplo, um kernel 13.0-CURRENT pode compilar e
   executar uma jail 11.3-STABLE no Poudriere se a opc,ao de kernel
   COMPAT_FREEBSD11 tiver sido compilada (habilitada por padrao na
   configurac,ao do kernel GENERIC do 13.0-CURRENT).

  Cuidado:

   O protocolo padrao svn funciona normalmente, mas nao e muito seguro. Usar
   svn+https juntamente com a verificac,ao do fingerpprint SSL do servidor
   remoto e aconselhavel. Isso garantira que os arquivos usados para compilar
   a jail sejam de uma fonte confiavel.

   Uma lista de jails atualmente conhecidas pelo Poudriere podem ser
   mostradas com poudriere jail -l:

 # poudriere jail -l
 JAILNAME             VERSION              ARCH    METHOD
 113Ramd64            11.3-RELEASE         amd64   ftp
 11i386               11.3-STABLE          i386    svn+https

  10.5.4. Mantendo as Jails do Poudriere Atualizadas

   Gerenciar atualizac,oes e muito simples. O comando:

 # poudriere jail -u -j JAILNAME

   atualiza a jail especificada para a versao mais recente disponivel. Para
   releases do FreeBSD, atualiza para o patchlevel mais recente com o
   freebsd-update(8). Para versoes do FreeBSD compiladas a partir do codigo
   fonte, atualiza para a revisao mais recente na branch do Subversion.

  Dica:

   Para jails que empregam um metodo svn+*, e util adicionar -J
   NumberOfParallelBuildJobs para acelerar a compilac,ao aumentando o numero
   de trabalhos de compilac,ao paralelos utilizados. Por exemplo, se a
   maquina de compilac,ao tiver 6 CPUs, use:

 # poudriere jail -u -J 6 -j JAILNAME

  10.5.5. Configurando a Arvores de Ports para Uso com o Poudriere

   Existem varias maneiras de usar arvores de ports no Poudriere. A maneira
   mais direta e o Poudriere criar uma arvore de ports padrao para si mesmo
   usando portsnap(8) (se estiver executando FreeBSD 12.1 ou 11.4) ou
   Subversion (se estiver executando FreeBSD-CURRENT):

 # poudriere ports -c -m portsnap

   ou

 # poudriere ports -c -m svn+https

   Estes comandos criam tank/poudriere/ports/default, monta-o em
   /poudriere/ports/default e o povoa usando o portsnap(8) ou Subversion.
   Depois disso, ele e incluido na lista de arvores de ports conhecidas:

 # poudriere ports -l
 PORTSTREE METHOD    TIMESTAMP           PATH
 default   svn+https 2020-07-20 04:23:56 /poudriere/ports/default

  Nota:

   Note que a arvore de ports "default" e especial. Cada um dos comandos de
   compilac,ao explicados posteriormente usara implicitamente essa arvore de
   ports, a menos que seja especificamente especificado de outra forma. Para
   usar outra arvore, adicione -p treename aos comandos.

   Embora seja util para compilac,oes em massa regulares, ter esta arvore de
   ports padrao com o metodo portsnap(8) pode nao ser a melhor maneira de
   lidar com modificac,oes locais para um contribuidor de ports. Assim como
   na criac,ao dos jails, e possivel usar um metodo diferente para criar a
   arvore de ports. Para adicionar uma arvore de ports adicional para testar
   modificac,oes locais e para o desenvolvimento de ports, baixar a arvore
   via Subversion (como descrito acima) e preferido:

  Nota:

   Os metodos http e https precisam que o devel/subversion seja compilado com
   a opc,ao SERF ativada. Ela vem habilitada por padrao.

  Dica:

   O metodo svn permite qualificadores extras para dizer ao Subversion
   exatamente como buscar os dados. Isso e explicado em poudriere(8). Por
   exemplo, poudriere ports -c -m svn+ssh -p subversive usa o SSH para o
   checkout.

  10.5.6. Usando Arvores de Ports Gerenciadas Manualmente com o Poudriere

   Dependendo do fluxo de trabalho, pode ser extremamente util usar arvores
   de ports que sao mantidas manualmente. Por exemplo, se houver uma copia
   local da arvore de ports em /work/ports, aponte o Poudriere para o local:

     * Para o Poudriere anterior `a versao 3.1.20:

 # poudriere ports -c -F -f none -M /work/ports -p development

     * Para o Poudriere versao 3.1.20 e posterior:

 # poudriere ports -c -m null -M /work/ports -p development

   Isto sera listado na tabela de arvores conhecidas:

 # poudriere ports -l
 PORTSTREE   METHOD    TIMESTAMP           PATH
 development null      2020-07-20 05:06:33 /work/ports

  Nota:

   O trac,o ou null na coluna METHOD significa que o Poudriere nunca ira
   atualizar ou alterar esta arvore de ports. E de responsabilidade total do
   usuario a manutenc,ao desta arvore, incluindo todas as modificac,oes
   locais que podem ser usadas para testar novos ports e enviar patches.

  10.5.7. Mantendo as Arvores de Ports do Poudriere Atualizadas

   Tao simples quanto com as jails descritas anteriormente:

 # poudriere ports -u -p PORTSTREE

   Vai atualizar a PORTSTREE, uma arvore dada pela saida de poudriere -l,
   para a ultima revisao disponivel nos servidores oficiais.

  Nota:

   As arvores de ports sem um metodo, veja Sec,ao 10.5.6, "Usando Arvores de
   Ports Gerenciadas Manualmente com o Poudriere", nao podem ser atualizadas
   assim. Elas devem ser atualizadas manualmente pelo mantenedor de ports.

  10.5.8. Testando Ports

   Depois que as jails e as arvores de ports foram configuradas, o resultado
   das modificac,oes de um colaborador na arvore de ports pode ser testado.

   Por exemplo, modificac,oes locais no port www/firefox localizado em
   /work/ports/www/firefox pode ser testado na jail 11.3-RELEASE criada
   anteriormente:

 # poudriere testport -j 113Ramd64 -p development -o www/firefox

   Isso ira compilar todas as dependencias do firefox. Se uma dependencia foi
   criada anteriormente e ainda esta atualizada, o pacote pre-criado e
   instalado. Se uma dependencia nao tiver um pacote atualizado, ela sera
   compilada com opc,oes padrao em uma jail. Depois disso o firefox sera
   compilado.

   A compilac,ao completa de cada port sera registrada em
   /poudriere/data/logs/bulk/113Ri386-development/build-time/logs.

   O nome do diretorio 113Ri386-development e derivado dos argumentos para -j
   e -p, respectivamente. Por conveniencia, um link simbolico
   /poudriere/data/logs/bulk/113Ri386-development/latest tambem e mantido. O
   link aponta para o mais recente diretorio build-time. Neste diretorio
   tambem se encontra um index.html para que possa ser possivel observar o
   processo de compilac,ao com um navegador web.

   Por padrao, o Poudriere limpa as jails e deixa os arquivos de log nos
   diretorios mencionados acima. Para facilitar a investigac,ao, as jails
   podem ser mantidas em execuc,ao apos a compilac,ao, adicionando a opc,ao
   -i ao testport:

 # poudriere testport -j 113Ramd64 -p development -i -o www/firefox

   Depois que a compilac,ao e concluida, e independentemente de ter sido
   bem-sucedida, um shell e fornecido dentro da jail. O shell e usado para
   investigac,oes adicionais. O Poudriere pode ser dito para deixar a jail em
   execuc,ao apos a conclusao da compilac,ao com -i. O Poudriere mostrara o
   comando para ser executado quando a jail nao for mais necessaria. E entao
   e possivel fazer um jexec(8) para dentro dele:

 # poudriere testport -j 113Ramd64 -p development -I -o www/firefox
 [...]
 ====>> Installing local Pkg repository to /usr/local/etc/pkg/repos
 ====>> Leaving jail 113Ramd64-development-n running, mounted at /poudriere/data/.m/113Ramd64-development/ref for interactive run testing
 ====>> To enter jail: jexec 113Ramd64-development-n env -i TERM=$TERM /usr/bin/login -fp root
 ====>> To stop jail: poudriere jail -k -j 113Ramd64 -p development
 # jexec 113Ramd64-development-n env -i TERM=$TERM /usr/bin/login -fp root
 # [do some stuff in the jail]
 # exit
 # poudriere jail -k -j 113Ramd64 -p development
 ====>> Umounting file systems

   Uma parte integral da infraestrutura de compilac,ao de ports do FreeBSD e
   a capacidade de ajustar os ports as preferencias pessoais por meio de
   opc,oes. Elas podem ser testadas com o Poudriere tambem. Adicionando a
   opc,ao -c:

 # poudriere testport -c -o www/firefox

   Apresenta o dialogo de configurac,ao do port antes que o port seja
   compilado. Os ports informados apos o -o no formato category/portname
   usara as opc,oes especificadas, todas as dependencias usarao as opc,oes
   padrao. O teste de ports dependentes com opc,oes nao padrao pode ser
   realizado usando conjuntos, consulte Sec,ao 10.5.9, "Usando Conjuntos".

  Dica:

   Ao testar ports nos quais o pkg-plist e alterado durante a compilac,ao,
   dependendo das opc,oes selecionadas, e recomendavel executar um teste com
   todas as opc,oes selecionadas e um com todas as opc,oes desmarcadas.

  10.5.9. Usando Conjuntos

   Para todas as ac,oes envolvendo builds, um entao chamado conjunto pode ser
   especificado usando -z setname. Um conjunto se refere a uma compilac,ao
   totalmente independente. Isso permite, por exemplo, o uso de testport com
   opc,oes nao padrao para os ports dependentes.

   Para usar sets, o Poudriere espera uma estrutura de diretorios existente
   semelhante a PORT_DBDIR, o padrao e /var/db/ports no seu diretorio de
   configurac,ao. Este diretorio e entao nullfs(5)-montado nas jails onde os
   ports e suas dependencias sao compilados. Normalmente, um ponto de partida
   adequado pode ser obtido copiando de forma recursiva o PORT_DBDIR para
   /usr/local/etc/poudriere.d/jailname-portname-setname-options. Isso e
   descrito em detalhes em poudriere(8). Por exemplo, para testar o
   www/firefox em um conjunto especifico chamado devset, adicione o parametro
   -z devset ao comando testport:

 # poudriere testport -j 113Ramd64 -p development -z devset -o www/firefox

   Isso ira procurar pela existencia desses diretorios nesta ordem:

     * /usr/local/etc/poudriere.d/113Ramd64-development-devset-options

     * /usr/local/etc/poudriere.d/113Ramd64-devset-options

     * /usr/local/etc/poudriere.d/113Ramd64-development-options

     * /usr/local/etc/poudriere.d/devset-options

     * /usr/local/etc/poudriere.d/development-options

     * /usr/local/etc/poudriere.d/113Ramd64-options

     * /usr/local/etc/poudriere.d/options

   Desta lista, o Poudriere nullfs(5)-monta a primeira arvore existente de
   diretorio para o diretorio /var/db/ports das jails de compilac,ao.
   Portanto, todas as opc,oes personalizadas sao usadas para todos os ports
   durante essa execuc,ao do testport.

   Depois que a estrutura de diretorio para um conjunto e fornecida, as
   opc,oes para um port especifico podem ser alteradas. Por exemplo:

 # poudriere options -c www/firefox -z devset

   O dialogo de configurac,ao para o www/firefox e mostrado e as opc,oes
   podem ser editadas. As opc,oes selecionadas sao salvas no set devset.

  Nota:

   Poudriere e muito flexivel na configurac,ao das opc,oes. Elas podem ser
   configuradas para jails especificas, arvores de ports e para varios ports
   por um comando. Veja poudriere(8) para detalhes.

  10.5.10. Fornecendo um Arquivo make.conf Customizado

   Semelhante ao uso de conjuntos (sets), o Poudriere tambem usara um
   make.conf personalizado se for fornecido. Nenhum argumento de linha de
   comando especial e necessario. Em vez disso, o Poudriere procura por
   arquivos existentes que correspondam a um esquema de nomes derivado da
   linha de comando. Por exemplo:

 # poudriere testport -j 113Ramd64 -p development -z devset -o www/firefox

   faz o Poudriere verificar a existencia desses arquivos nesta ordem:

     * /usr/local/etc/poudriere.d/make.conf

     * /usr/local/etc/poudriere.d/devset-make.conf

     * /usr/local/etc/poudriere.d/development-make.conf

     * /usr/local/etc/poudriere.d/113Ramd64-make.conf

     * /usr/local/etc/poudriere.d/113Ramd64-development-make.conf

     * /usr/local/etc/poudriere.d/113Ramd64-devset-make.conf

     * /usr/local/etc/poudriere.d/113Ramd64-development-devset-make.conf

   Ao contrario dos conjuntos, todos os arquivos encontrados serao anexados,
   naquela ordem, em um make.conf dentro das jails de compilac,ao. Assim, e
   possivel ter variaveis gerais, destinadas a afetar todas as compilac,oes
   /usr/local/etc/poudriere.d/make.conf. Variaveis especiais, destinadas a
   afetar apenas determinadas jails ou conjuntos, podem ser setadas em
   arquivos especiais como make.conf, assim como
   /usr/local/etc/poudriere.d/113Ramd64-development-devset-make.conf.

   Exemplo 10.1. Usando make.conf para Alterar o Perl Padrao

   Para compilar um conjunto com uma versao nao padrao do Perl, por exemplo,
   5.20, usando um conjunto chamado perl5-20, crie um perl5-20-make.conf com
   esta entrada:

 DEFAULT_VERSIONS+= perl=5.20

  Nota:

   Observe o uso de += de modo que, se a variavel ja estiver definida no
   make.conf padrao, seu conteudo nao sera sobrescrito.

  10.5.11. Remoc,ao de Distfiles Nao Mais Necessarios

   Poudriere vem com um mecanismo embutido para remover distfiles
   desatualizados que nao sao mais usados &#8203;&#8203;por qualquer port de
   uma determinada arvore. O comando

 # poudriere distclean -p portstree

   ira escanear a pasta distfiles, DISTFILES_CACHE dentro do poudriere.conf,
   contra a arvore de ports dada pelo argumento -p portstree e solicitar a
   remoc,ao desses distfiles. Para pular o prompt e remover
   incondicionalmente todos os arquivos nao utilizados, o argumento -y pode
   ser adicionado:

 # poudriere distclean -p portstree -y

                        Capitulo 11. Atualizando um Port

   Indice

   11.1. Usando o Subversion para Criar Patches

   11.2. UPDATE e MOVED

   Quando um port nao estiver na versao mais recente disponibilizada pelos
   autores, atualize a sua copia de trabalho local do /usr/ports. O port pode
   ja ter sido atualizado para a nova versao.

   Ao trabalhar com diversos ports, provavelmente sera mais facil usar o
   Subversion para manter toda a colec,ao de ports atualizada, conforme
   descrito no Handbook. Isso trara o beneficio adicional de rastrear todas
   as dependencias de ports.

   O proximo passo e ver se ha uma atualizac,ao ja pendente. Para fazer isso,
   existem duas opc,oes. Ha uma interface de pesquisa no Relatorio de
   Problemas do FreeBSD (PR) ou banco de dados de bugs. Selecione Ports &
   Packages no menu de selec,ao multipla Product e digite o nome do port no
   campo Summary.

   No entanto, `as vezes as pessoas esquecem de colocar o nome do port no
   campo Resumo de maneira nao ambigua. Nesse caso, tente pesquisar o campo
   Comment na sec,ao Detailled Bug Information, ou tente o Sistema de
   Monitoramento de Ports do FreeBSD (tambem conhecido como portsmon). Este
   sistema tenta classificar os PRs do port por portname. Para procurar por
   PRs sobre um port especifico, use a Visao geral de um port.

   Se nao houver nenhum PR pendente, o proximo passo e enviar um email para o
   mantenedor do port, como apresentado em make maintainer. Essa pessoa pode
   ja estar trabalhando em uma atualizac,ao ou ter algum motivo para nao
   atualizar o port neste momento (devido a, por exemplo, problemas de
   estabilidade da nova versao), e nao ha necessidade de duplicar seu
   trabalho. Note que os ports nao mantidos sao listadas com um mantenedor
   ports@FreeBSD.org, que e apenas a lista de discussao geral de ports, entao
   enviar emails provavelmente nao ajudara nesse caso.

   Se o mantenedor lhe pedir para fazer a atualizac,ao ou nao houver
   mantenedor, entao ajude o FreeBSD preparando a atualizac,ao! Por favor,
   fac,a isso usando o comando diff(1) do sistema base.

   Para criar um diff adequado para um unico patch, copie o arquivo que
   precisa de patching para something.orig, salve as alterac,oes em something
   e depois crie o patch:

 % diff -u something.orig something > something.diff

   Caso contrario, use o metodo svn diff (Sec,ao 11.1, "Usando o Subversion
   para Criar Patches") ou copie o conteudo do port para um diretorio
   completamente diferente e use o resultado do diff(1) recursivo para os
   diretorios novos e antigos do port (por exemplo, se o diretorio de ports
   modificado for chamado superedit e o original esta na nossa arvore como
   superedit.bak entao salve o resultado do comando diff -ruN superedit.bak
   superedit). Tanto o diff unificado ou como o de contexto e aceito, mas os
   committers do port geralmente preferem diffs unificados. Observe o uso da
   opc,ao -N -- essa e a maneira correta de forc,ar o diff a lidar
   adequadamente com o caso de novos arquivos sendo adicionados ou de
   arquivos antigos sendo excluidos. Antes de nos enviar o diff, por favor,
   examine a saida para se certificar de que todas as alterac,oes fazem
   sentido. (Em particular, primeiro limpe os diretorios de trabalho com make
   clean).

  Nota:

   Se alguns arquivos foram adicionados, copiados, movidos ou removidos,
   adicione essas informac,oes ao relatorio de problemas, para que o
   committer que pegar o patch saiba quais comandos svn(1) executar.

   Para simplificar operac,oes comuns com arquivos de patch, use make
   makepatch como descrito em Sec,ao 4.4, "Patching". Existem outras
   ferramentas, como /usr/ports/Tools/scripts/patchtool.py. Antes de usa-lo,
   por favor leia /usr/ports/Tools/scripts/README.patchtool.

   Se o port nao e mantido e voce o utiliza ativamente, por favor, considere
   se voluntariar como o seu mantenedor. O FreeBSD tem mais de 4000 ports sem
   mantenedores, e esta e uma area onde mais voluntarios sao sempre
   necessarios. (Para uma descric,ao detalhada das responsabilidades dos
   mantenedores, consulte a sec,ao no Developer's Handbook.)

   Para enviar o diff, use o formulario de envio de bugs (no produto Ports &
   Packages, e no componente Individual Port(s)). Sempre inclua a categoria
   com o nome do port, seguido por dois pontos e uma breve descric,ao do
   problema. Exemplos: category/portname: add FOO option; category/portname:
   Update to XY. Por favor mencione quaisquer arquivos adicionados ou
   deletados na mensagem, pois eles devem ser explicitamente especificados no
   svn(1) ao fazer o commit. Nao comprima ou codifique o diff.

   Antes de enviar o bug, revise a sec,ao Escrevendo um relatorio de problema
   no artigo Relatorios de Problemas. Ele contem muito mais informac,oes
   sobre como escrever relatorios uteis de problemas.

  Importante:

   Se a atualizac,ao for motivada por preocupac,oes de seguranc,a ou por uma
   falha grave em um port que ja esta disponivel na arvore, notifique a
   Equipe de Gerenciamento de Ports <portmgr@FreeBSD.org> para solicitar
   imediata recompilac,ao e redistribuic,ao do pacote do port. Caso
   contrario, usuarios desavisados &#8203;&#8203;do pkg continuarao a
   instalar a versao antiga via pkg install por varias semanas.

  Nota:

   Por favor, use o diff(1) ou svn diff para criar atualizac,oes para ports
   existentes. Outros formatos incluem o arquivo inteiro e impossibilitam ver
   o que mudou. Quando os diffs nao sao incluidos, toda a atualizac,ao pode
   ser ignorada.

   Agora que tudo isso foi feito, leia sobre como manter-se atualizado
   Capitulo 16, Mantendo-se Atualizado.

11.1. Usando o Subversion para Criar Patches

   Quando possivel, envie por favor um svn(1)diff. Eles sao mais faceis de
   manusear do que os diffs entre diretorios "novos e antigos". Nele e mais
   facil de ver o que mudou e tambem e mais facil de atualizar o diff no caso
   de algo ter sido modificado na Colec,ao de Ports desde que o diff foi
   gerado, ou no caso do committer pedir que algo seja corrigido. Alem disso,
   um patch gerado com svn diff pode ser facilmente aplicado com svn patch e
   ira economizar algum tempo para o committer.

 % cd ~/my_wrkdir 1
 % svn co https://svn.FreeBSD.org/ports/head/dns/pdnsd 2
 % cd ~/my_wrkdir/pdnsd

   1 Isso pode ser em qualquer lugar, e claro. Compilac,oes de ports nao se   
     limitam ao /usr/ports/.                                                  
   2 O svn.FreeBSD.org e o servidor Subversion publico do FreeBSD. Veja       
     Mirrors do Subversion para mais informac,oes.                            

   Enquanto estiver no diretorio de ports, fac,a as alterac,oes necessarias.
   Se voce adicionar, copiar, mover ou remover um arquivo, use o svn para
   registrar essas alterac,oes:

 % svn add new_file
 % svn copy some_file file_copy
 % svn move old_name new_name
 % svn remove deleted_file

   Certifique-se de verificar o port usando a lista de verificac,ao
   Sec,ao 3.4, "Testando o Port" e Sec,ao 3.5, "Verificando o Port com
   portlint".

 % svn status
 % svn update 1

   1 Isso tentara mesclar as diferenc,as entre o patch e a versao do          
     repositorio atual. Veja a saida cuidadosamente. A letra na frente de     
     cada nome de arquivo indica o que foi feito com ele. Consulte            
     Tabela 11.1, "Prefixos de Atualizac,ao de Arquivos do Subversion" para   
     uma lista completa.                                                      

   Tabela 11.1. Prefixos de Atualizac,ao de Arquivos do Subversion

   U O arquivo foi atualizado sem problemas.                                  
   G O arquivo foi atualizado sem problemas (somente quando esta trabalhando  
     com um repositorio remoto).                                              
   M O arquivo foi modificado e foi mesclado sem conflitos.                   
   C O arquivo foi modificado e foi mesclado com conflitos.                   

   E se o status C for exibido como resultado de um svn update, isso
   significa que algo mudou no repositorio Subversion e o svn(1) nao foi
   capaz de mesclar as alterac,oes locais com as do repositorio. E sempre uma
   boa ideia inspecionar as alterac,oes de qualquer maneira, o svn(1) nao
   sabe nada sobre a estrutura de um port, entao pode (e provavelmente ira)
   mesclar coisas que nao fazem sentido.

   O ultimo passo e fazer um diff(1) unificado das mudanc,as:

 % svn diff > ../`make -VPKGNAME`.diff

  Nota:

   Se os arquivos foram adicionados, copiados, movidos ou removidos, inclua
   os comandos svn(1) add, copy, move e remove que foram usados. O svn move
   ou o svn copy deve ser executado antes de aplicar o patch. O svn add ou
   svn remove deve ser executado apos o patch ser aplicado.

   Envie o patch seguindo as diretrizes de envios de relatorios de problemas.

11.2. UPDATE e MOVED

  11.2.1. /usr/ports/UPDATING

   Se a atualizac,ao do port exigir etapas especiais, como alterac,ao de
   arquivos de configurac,ao ou execuc,ao de um programa especifico, ela
   devera ser documentada neste arquivo. O formato de uma entrada neste
   arquivo e:

 YYYYMMDD:
   AFFECTS: users of portcategory/portname
   AUTHOR: Your name <Your email address>

   Special instructions

  Dica:

   Quando incluir instruc,oes exatas para o portmaster, portupgrade e/ou
   instruc,oes ao pkg, por favor, certifique-se de escapar o shell escaping
   corretamente. Por exemplo, nao use:

 # pkg delete -g -f docbook-xml* docbook-sk* docbook[2345]??-* docbook-4*

   Como mostrado, o comando so ira funcionar com bourne shells. Em vez disso,
   use o formato abaixo, que funcionara com ambos bourne shell e c-shell:

 # pkg delete -g -f docbook-xml\* docbook-sk\* docbook\[2345\]\?\?-\* docbook-4\*

  Nota:

   Recomenda-se que a linha AFFECTS contenha uma glob que corresponda a todos
   os ports afetados pela entrada, para que as ferramentas automatizadas
   possam analisa-la com a maior facilidade possivel. Se uma atualizac,ao diz
   respeito a todas as versos do BIND 9 o conteudo de AFFECTS deve ser
   usuarios do dns/bind9*, nao deve ser usuarios do BIND 9

  11.2.2. /usr/ports/MOVED

   Este arquivo e usado para listar os ports movidos ou removidos. Cada linha
   no arquivo e composta por nome do port, para onde o port foi movido,
   quando e por que. Se o port foi removido, a sec,ao detalhando onde ele
   estava pode ser deixado em branco. Cada sec,ao deve ser separada pelo
   caractere | (pipe), assim:

 old name|new name (blank for deleted)|date of move|reason

   A data deve ser inserida no formato YYYY-MM-DD. Novas entradas sao
   adicionadas ao final da lista para mante-las em ordem cronologica, com a
   entrada mais antiga no topo da lista.

   Se um port foi removido, e depois restaurado, exclua a linha neste arquivo
   que informa que ele foi removido.

   Se um port foi renomeado e depois renomeado de volta para seu nome
   original, adicione uma nova entrada com o nome intermediario para o nome
   antigo e remova a entrada antiga para nao criar um loop.

  Nota:

   Quaisquer alterac,oes devem ser validadas com Tools/scripts/MOVEDlint.awk.

   Se estiver usando um diretorio de ports diferente de /usr/ports, use:

 % cd /home/user/ports
 % env PORTSDIR=$PWD Tools/scripts/MOVEDlint.awk

                            Capitulo 12. Seguranc,a

   Indice

   12.1. Por Que Seguranc,a e Tao Importante

   12.2. Corrigindo Vulnerabilidades de Seguranc,a

   12.3. Mantendo a Comunidade Informada

12.1. Por Que Seguranc,a e Tao Importante

   Bugs ocasionalmente sao inseridos em software. Indiscutivelmente, os mais
   perigosos deles sao aqueles que abrem vulnerabilidades de seguranc,a. Do
   ponto de vista tecnico, tais vulnerabilidades devem ser fechadas
   exterminando os bugs que as causam. No entanto, as politicas para lidar
   com meros bugs e vulnerabilidades de seguranc,a sao muito diferentes.

   Um bug pequeno tipico afeta apenas os usuarios que ativaram alguma
   combinac,ao de opc,oes que acionam o bug. O desenvolvedor acabara
   lanc,ando um patch seguido de uma nova versao do software, livre do bug,
   mas a maioria dos usuarios nao ira se incomodar em fazer a atualizac,ao de
   imediato porque o bug nunca os incomodou. Um bug critico que pode causar
   perda de dados representa um problema grave. No entanto, usuarios
   prudentes sabem que muitos acidentes sao possiveis, e que alem de erros de
   software, podem levar `a perda de dados, e portanto eles fazem backups dos
   dados importantes, alem disso, um bug critico sera descoberto muito
   rapidamente.

   Uma vulnerabilidade de seguranc,a e diferente. Primeiro, ela pode
   permanecer despercebida por anos, porque geralmente nao causa mau
   funcionamento do software. Segundo, uma parte mal-intencionada pode usa-la
   para obter acesso nao autorizado a um sistema vulneravel, para destruir ou
   alterar dados confidenciais; no pior dos casos, o usuario nem notara os
   danos causados. Terceiro, expor um sistema vulneravel geralmente ajuda os
   invasores a invadir outros sistemas que nao poderiam ser comprometidos de
   outra forma. Portanto, fechar uma vulnerabilidade por si so nao e
   suficiente: notifique a audiencia afetada da maneira mais clara e
   abrangente, o que lhes permitira avaliar o perigo e tomar as medidas
   adequadas.

12.2. Corrigindo Vulnerabilidades de Seguranc,a

   Embora seja sobre o assunto de ports e pacotes, uma vulnerabilidade de
   seguranc,a pode inicialmente aparecer na distribuic,ao original ou nos
   arquivos do port. No primeiro caso, o desenvolvedor de software original
   provavelmente lanc,ara um patch ou uma nova versao instantaneamente.
   Atualize o port prontamente com relac,ao `a correc,ao do autor. Se a
   correc,ao for atrasada por algum motivo, marque o port como FORBIDDEN ou
   adicione um arquivo patch no port. No caso de um port vulneravel, conserte
   o port o mais rapido possivel. Em ambos os casos, siga o procedimento
   padrao para enviar alterac,oes a menos que tenha direitos para envia-lo
   diretamente para a arvore de ports.

  Importante:

   Ser um committer de ports nao e suficiente para fazer um commit em um port
   arbitrario. Lembre-se que os ports geralmente possuem mantenedores, e eles
   devem ser respeitados.

   Por favor, certifique-se de que a revisao do port e incrementada assim que
   a vulnerabilidade for fechada. E assim que os usuarios que atualizam
   pacotes regularmente verao que precisam executar uma atualizac,ao. Alem
   disso, um novo pacote sera compilado e distribuido por FTP e mirrors WWW,
   substituindo o vulneravel. Atualize PORTREVISION a menos que tenha mudado
   o DISTVERSION durante a correc,ao da vulnerabilidade. Isso e, incremente
   PORTREVISION se adicionar um arquivo de patch ao port, mas nao o
   incremente se atualizar o port para a versao mais recente do software,
   pois DISTVERSION ja tera sido alterado. Por favor, consulte a sec,ao
   correspondente para mais informac,oes.

12.3. Mantendo a Comunidade Informada

  12.3.1. O Banco de Dados VuXML

   Uma medida muito importante e urgente a ser tomada o mais cedo possivel ao
   descobrir uma vulnerabilidade de seguranc,a e notificar a comunidade de
   usuarios de port sobre o perigo. Essa notificac,ao serve a dois
   propositos. Primeiro, se o perigo for realmente severo, sera prudente
   aplicar uma soluc,ao instantanea. Por exemplo, parar o servic,o de rede
   afetado ou ate mesmo desinstalar o port completamente ate que a
   vulnerabilidade seja fechada. Segundo, muitos usuarios tendem a atualizar
   pacotes instalados apenas ocasionalmente. Eles saberao pela notificac,ao
   que eles devem atualizar o pacote o quanto antes assim que uma versao com
   a correc,ao estiver disponivel.

   Dado o grande numero de ports na arvore, um aviso de seguranc,a nao pode
   ser emitido em cada incidente sem criar um flood e perder a atenc,ao do
   publico quando se tratar de assuntos realmente serios. Portanto,
   vulnerabilidades de seguranc,a encontradas em ports sao registradas no
   banco de dados VuXML do FreeBSD. Os membros do Security Officer Team
   tambem monitoram os problemas que requerem suas intervenc,oes.

   Committers podem eles mesmos atualizar o banco de dados VuXML, ajudar o
   Security Officer Team e fornecer informac,oes cruciais para a comunidade
   mais rapidamente. Aqueles que nao sao committers ou que descobriram uma
   vulnerabilidade excepcionalmente severa nao devem hesitar em contatar o
   Security Officer Team diretamente, conforme descrito na pagina
   Informac,oes de Seguranc,a do FreeBSD.

   O banco de dados VuXML e um documento XML. Seu arquivo fonte vuln.xml e
   mantido dentro do port security/vuxml. Portanto, o caminho completo do
   arquivo sera PORTSDIR/security/vuxml/vuln.xml. Toda vez que uma
   vulnerabilidade de seguranc,a e descoberta em um port, favor adicionar uma
   entrada para ela nesse arquivo. Ate que esteja familiarizado com o VuXML,
   a melhor coisa a fazer e encontrar uma entrada existente que seja
   parecida, depois copia-la e usa-la como modelo.

  12.3.2. Uma Breve Introduc,ao ao VuXML

   O formato XML completo e complexo e esta muito alem do escopo deste livro.
   No entanto, para obter informac,oes basicas sobre a estrutura de uma
   entrada VuXML, apenas a noc,ao de tags e necessaria. Os nomes de tags XML
   sao colocados entre colchetes angulares. Cada abertura <tag> deve ter um
   fechamento correspondente </tag>. As tags podem ser aninhadas. Se
   aninhadas, as tags internas devem ser fechadas antes das externas. Ha uma
   hierarquia de tags, ou seja, regras mais complexas de aninhamento. Isso e
   semelhante ao HTML. A principal diferenc,a e que o XML e eXtensible, isto
   e, com base na definic,ao de tags personalizadas. Devido `a sua estrutura
   intrinseca, o XML por outro lado coloca dados amorficos de uma maneira
   mais organizada. O VuXML e especialmente adaptado para marcar descric,oes
   de vulnerabilidades de seguranc,a.

   Agora considere uma entrada VuXML realista:

 <vuln vid="f4bc80f4-da62-11d8-90ea-0004ac98a7b9"> 1
   <topic>Several vulnerabilities found in Foo</topic> 2
   <affects>
     <package>
       <name>foo</name> 3
       <name>foo-devel</name>
       <name>ja-foo</name>
       <range><ge>1.6</ge><lt>1.9</lt></range> 4
       <range><ge>2.*</ge><lt>2.4_1</lt></range>
       <range><eq>3.0b1</eq></range>
     </package>
     <package>
       <name>openfoo</name> 5
       <range><lt>1.10_7</lt></range> 6
       <range><ge>1.2,1</ge><lt>1.3_1,1</lt></range>
     </package>
   </affects>
   <description>
     <body xmlns="http://www.w3.org/1999/xhtml">
       <p>J. Random Hacker reports:</p> 7
       <blockquote
         cite="http://j.r.hacker.com/advisories/1">
         <p>Several issues in the Foo software may be exploited
           via carefully crafted QUUX requests.  These requests will
           permit the injection of Bar code, mumble theft, and the
           readability of the Foo administrator account.</p>
       </blockquote>
     </body>
   </description>
   <references> 8
     <freebsdsa>SA-10:75.foo</freebsdsa> 9
     <freebsdpr>ports/987654</freebsdpr> 10
     <cvename>CAN-2010-0201</cvename> 11
     <cvename>CAN-2010-0466</cvename>
     <bid>96298</bid> 12
     <certsa>CA-2010-99</certsa> 13
     <certvu>740169</certvu> 14
     <uscertsa>SA10-99A</uscertsa> 15
     <uscertta>SA10-99A</uscertta> 16
     <mlist msgid="201075606@hacker.com">http://marc.theaimsgroup.com/?l=bugtraq&amp;m=203886607825605</mlist> 17
     <url>http://j.r.hacker.com/advisories/1</url> 18
   </references>
   <dates>
     <discovery>2010-05-25</discovery> 19
     <entry>2010-07-13</entry> 20
     <modified>2010-09-17</modified> 21
   </dates>
 </vuln>

   Os nomes das tags devem ser auto explicativos, por isso vamos dar uma
   olhada apenas nos campos que precisam ser preenchidos:

   1  Esta e a tag de nivel superior de uma entrada VuXML. Ela tem um         
      atributo obrigatorio, vid, especificando um identificador               
      universalmente unico (UUID) para essa entrada (entre aspas). Gere um    
      UUID para cada nova entrada VuXML (e nao se esquec,a de substitui-lo    
      pelo modelo UUID, a menos que esteja escrevendo a entrada desde o       
      inicio). Use uuidgen(1) para gerar um UUID VuXML.                       
   2  Esta e uma descric,ao de uma linha do problema encontrado.              
   3  Os nomes dos pacotes afetados sao listados nesta tag. Varios nomes      
      podem ser fornecidos, pois varios pacotes podem ser baseados em um      
      unico master port ou produto de software. Isso pode incluir branches    
      stable &#8203;&#8203;e de desenvolvimento, versoes de localidade e      
      slave ports englobando diferentes escolhas de opc,oes importantes de    
      configurac,ao em build-time.                                            
                                                                              
        Importante:                                                           
                                                                              
      E responsabilidade do submitter encontrar todos os pacotes relacionados 
      ao escrever uma entrada VuXML. Tenha em mente que make search name=foo  
      pode ajudar. Os principais pontos a procurar sao:                       
                                                                              
        * a variante foo-devel para um port foo;                              
                                                                              
        * outras variantes com um sufixo como -a4 (para pacotes relacionados  
          a impressao), -without-gui (para pacotes com suporte ao X           
          desativado) ou similares;                                           
                                                                              
        * jp-, ru-, zh- e outras possiveis variantes de localidade nas        
          categorias nacionais correspondentes da colec,ao de ports.          
   4  Versoes afetadas de pacote(s) sao especificadas com um ou mais          
      intervalos usando uma combinac,ao de elementos <lt>, <le>, <eq>, <ge> e 
      <gt>. Verifique se os intervalos de versao fornecidos nao se sobrepoem. 
                                                                              
      Em uma especificac,ao de range, * (asterisco) indica o menor numero de  
      versao. Em particular, 2.* e menor do que 2.a. Portanto, um asterisco   
      pode ser usado em um intervalo para corresponder todas as possiveis     
      versoes alfa, beta e RC. Por exemplo,<ge>2.*</ge><lt>3.*</lt> ira       
      seletivamente corresponder a cada versao 2.x enquanto                   
      <ge>2.0</ge><lt>3.0</lt> nao ira, pois a versao 2.r3 sera ignorada e a  
      versao 3.b estara dentro do range.                                      
                                                                              
      O exemplo acima especifica que as versoes afetadas vao de 1.6 ate menor 
      que 1.9, versoes 2.x antes de 2.4_1 e versao 3.0b1.                     
   5  Varios grupos de pacotes relacionados (essencialmente, ports) podem ser 
      listados na sec,ao <affected>. Isso pode ser usado se varios produtos   
      de software (como FooBar, FreeBar e OpenBar) crescerem da mesma base de 
      codigo e ainda compartilharem seus bugs e vulnerabilidades. Observe a   
      diferenc,a de listar varios nomes em uma unica sec,ao <package>.        
   6  Os intervalos de versao tem que incluir PORTEPOCH e PORTREVISION se     
      aplicaveis. Lembre-se que, de acordo com as regras de agrupamento, uma  
      versao com um valor diferente de zero para o PORTEPOCH e maior que      
      qualquer versao sem PORTEPOCH, por exemplo, 3.0,1 e maior que 3.1 ou    
      ate mesmo do que 8.9.                                                   
   7  Este e um resumo do problema. XHTML e usado neste campo. Pelo menos <p> 
      e </p> tem que aparecer. Marcac,oes mais complexas podem ser usadas,    
      mas apenas por uma questao de precisao e clareza: Sem enfeitar, por     
      favor.                                                                  
   8  Esta sec,ao contem referencias a documentos relevantes. Quanto mais     
      referencias aplicadas, melhor.                                          
   9  Isto e um aviso de seguranc,a do FreeBSD.                               
   10 Isto e um relatorio de problemas do FreeBSD.                            
   11 Isto e um identificador MITRE CVE.                                      
   12 Isto e um ID de bug do SecurityFocus.                                   
   13 Isto e um aviso de seguranc,a US-CERT.                                  
   14 Isto e uma nota de vulnerabilidade US-CERT.                             
   15 Isto e um alerta de Cyber Seguranc,a US-CERT.                           
   16 Isto e um Alerta Tecnico de Cyber Seguranc,a US-CERT.                   
   17 Esta e uma URL para uma postagem arquivada em uma lista de discussao. O 
      atributo msgid e opcional e pode especificar o ID da mensagem no post.  
   18 Esta e uma URL generica. Apenas se nenhuma das outras categorias de     
      referencia for aplicavel.                                               
   19 Esta e a data em que o problema foi divulgado (YYYY-MM-DD).             
   20 Esta e a data quando a entrada foi adicionada (YYYY-MM-DD).             
   21 Esta e a data em que qualquer informac,ao na entrada foi modificada     
      pela ultima vez (YYYY-MM-DD). Novas entradas nao devem incluir este     
      campo. Adicione-a ao editar uma entrada existente.                      

  12.3.3. Testando Alterac,oes no Banco de Dados VuXML

   Este exemplo descreve uma nova entrada para uma vulnerabilidade no pacote
   dropbear que foi corrigido na versao dropbear-2013.59.

   Como pre-requisito, instale uma nova versao do port security/vuxml.

   Primeiro, verifique se ja existe uma entrada para esta vulnerabilidade. Se
   houvesse essa entrada, ela deveria corresponder com a versao anterior do
   pacote, 2013.58:

 % pkg audit dropbear-2013.58

   Se nao houver nenhuma, adicione uma nova entrada para esta
   vulnerabilidade.

 % cd ${PORTSDIR}/security/vuxml
 % make newentry

   Verifique sua sintaxe e formatac,ao:

 % make validate

  Nota:

   Pelo menos um desses pacotes precisa ser instalado:textproc/libxml2,
   textproc/jade.

   Verifique se a sec,ao <affected> da entrada ira coincidir com os pacotes
   corretos:

 % pkg audit -f ${PORTSDIR}/security/vuxml/vuln.xml dropbear-2013.58

   Certifique-se de que a entrada nao produza correspondencias incorretas.

   Agora, verifique se as versoes corretas do pacote sao correspondidas pela
   entrada:

 % pkg audit -f ${PORTSDIR}/security/vuxml/vuln.xml dropbear-2013.58 dropbear-2013.59
 dropbear-2012.58 is vulnerable:
 dropbear -- exposure of sensitive information, DoS
 CVE: CVE-2013-4434
 CVE: CVE-2013-4421
 WWW: http://portaudit.FreeBSD.org/8c9b48d1-3715-11e3-a624-00262d8b701d.html

 1 problem(s) in the installed packages found.

   A versao anterior e encontrada enquanto a ultima nao.

                      Capitulo 13. O Que Fazer e Nao Fazer

   Indice

   13.1. Introduc,ao

   13.2. WRKDIR

   13.3. WRKDIRPREFIX

   13.4. Diferenciando Sistemas Operacionais e Versoes de OS

   13.5. Escrevendo Algo Depois do bsd.port.mk

   13.6. Uso de Declarac,oes exec em Wrapper Scripts

   13.7. Fac,a as Coisas Racionalmente

   13.8. Respeite Ambos CC e CXX

   13.9. Respeite CFLAGS

   13.10. Logs de Compilac,ao Detalhados

   13.11. Feedback

   13.12. README.html

   13.13. Marcando um Port nao Instalavel com a variavel BROKEN, FORBIDDEN ou
   IGNORE

   13.14. Considerac,oes Arquitetonicas

   13.15. Marcando um Port para Remoc,ao com DEPRECATED ou EXPIRATION_DATE

   13.16. Evite o Uso do Construtor .error

   13.17. Uso de sysctl

   13.18. Atualizando Distfiles

   13.19. Uso de Padroes POSIX

   13.20. Miscelanea

13.1. Introduc,ao

   Aqui esta uma lista comum de o que fazer ou nao, encontrada durante o
   processo de portabilidade. Verifique o port com relac,ao a essa lista, mas
   tambem verifique os ports no banco de dados de PR's que outros enviaram.
   Envie quaisquer comentarios sobre os ports, conforme descrito em
   Relatorios de Bugs e Comentarios Gerais. Verificar os ports no banco de
   dados de PR's ira tornar o processo mais rapido para que possamos fazer o
   seu commit e para provar que voce sabe o que esta fazendo.

13.2. WRKDIR

   Nao escreva nada em arquivos fora do WRKDIR. WRKDIR e o unico lugar
   garantido com permissao de escrita durante a compilac,ao do port (consulte
   instalando ports a partir de um CDROM para um exemplo de construc,ao de
   ports de uma arvore somente leitura). Os arquivos pkg-* podem ser
   modificados pela redefinic,ao de uma variavel em vez de sobrescrever o
   arquivo.

13.3. WRKDIRPREFIX

   Certifique-se de que o port honre a variavel WRKDIRPREFIX. A maioria dos
   ports nao precisa se preocupar com isso. Em particular, quando se refere a
   uma variavel WRKDIR de outro port, observe que o local correto e
   WRKDIRPREFIXPORTSDIR/subdir/name/work e nao PORTSDIR/subdir/name/work ou
   .CURDIR/../../subdir/name/work ou algo assim.

   Alem disso, se definir WRKDIR, certifique-se de adicionar
   ${WRKDIRPREFIX}${.CURDIR} na frente.

13.4. Diferenciando Sistemas Operacionais e Versoes de OS

   Alguns codigos precisam de modificac,oes ou compilac,ao condicional com
   base na versao do FreeBSD Unix em que ele esta sendo executado. A maneira
   preferida de distinguir as versoes do FreeBSD e usar as macros
   __FreeBSD_version e __FreeBSD__ definidas em sys/param.h. Se este arquivo
   nao estiver incluido, adicione o codigo,

 #include <sys/param.h>

   para o lugar adequado no arquivo .c.

   __FreeBSD__ e definido em todas as versoes do FreeBSD para seu principal
   numero de versao. Por exemplo, no FreeBSD 9.x, __FreeBSD__ e definido para
   9.

 #if __FreeBSD__ >= 9
 #  if __FreeBSD_version >= 901000
          /* 9.1+ release specific code here */
 #  endif
 #endif

   Uma lista completa de valores __FreeBSD_version esta disponivel em
   Capitulo 18, Valores __FreeBSD_version.

13.5. Escrevendo Algo Depois do bsd.port.mk

   Nao escreva nada depois da linha .include <bsd.port.mk>. Isso geralmente
   pode ser evitado incluindo bsd.port.pre.mk em algum lugar no meio do
   Makefile e bsd.port.post.mk no fim.

  Importante:

   Inclua o par bsd.port.pre.mk/bsd.port.post.mk ou apenas bsd.port.mk; nao
   misture o uso dos dois.

   bsd.port.pre.mk define apenas algumas variaveis, que podem ser usadas em
   testes no Makefile, bsd.port.post.mk define o restante.

   Aqui estao algumas variaveis &#8203;&#8203;importantes definidas no
   arquivo bsd.port.pre.mk (esta nao e a lista completa, por favor leia
   bsd.port.mk para a lista completa).

   Variavel                             Descric,ao                            
   ARCH      A arquitetura retornada por uname -m (por exemplo, i386)         
   OPSYS     O tipo de sistema operacional, conforme retornado por uname -s   
             (por exemplo, FreeBSD)                                           
   OSREL     A versao de lanc,amento do sistema operacional (por exemplo,     
             2.1.5 ou 2.2.7)                                                  
   OSVERSION A versao numerica do sistema operacional; o mesmo que            
             __FreeBSD_version.                                               
   LOCALBASE A base da arvore "local" (por exemplo, /usr/local)               
   PREFIX    Onde o port se instala (veja mais sobre a variavel PREFIX).      

  Nota:

   Quando MASTERDIR for necessario, sempre o defina antes de incluir o
   bsd.port.pre.mk.

   Aqui estao alguns exemplos de coisas que podem ser adicionadas depois do
   bsd.port.pre.mk:

 # no need to compile lang/perl5 if perl5 is already in system
 .if ${OSVERSION} > 300003
 BROKEN= perl is in system
 .endif

   Sempre use tab em vez de espac,os apos o argumento BROKEN=.

13.6. Uso de Declarac,oes exec em Wrapper Scripts

   Se o port instalar um script shell cuja finalidade e executar outro
   programa, e se a execuc,ao desse programa for a ultima ac,ao executada
   pelo script, certifique-se de executar o programa usando a func,ao exec,
   por exemplo:

 #!/bin/sh
 exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"

   A declarac,ao de exec substitui o processo do shell pelo programa
   especificado. E se exec for omitido, o processo do shell permanece na
   memoria enquanto o programa esta sendo executado e consome
   desnecessariamente recursos do sistema.

13.7. Fac,a as Coisas Racionalmente

   O Makefile deve fazer as coisas de uma maneira simples e razoavel. Tornar
   algumas linhas mais curtas ou mais legiveis e sempre melhor. Exemplos
   incluem usar um construtor .if do make em vez de um construtor if do
   shell, nao redefinir do-extract se redefinir EXTRACT* e o suficiente e
   usar GNU_CONFIGURE ao inves de CONFIGURE_ARGS += --prefix=${PREFIX}.

   Se um monte de codigo novo e necessario para fazer algo, ja pode haver uma
   implementac,ao dele em bsd.port.mk. Embora seja dificil de ler, ha muitos
   problemas aparentemente dificeis para os quais bsd.port.mk ja fornece uma
   soluc,ao simples.

13.8. Respeite Ambos CC e CXX

   O port deve respeitar tanto CC e CXX. O que queremos dizer com isso e que
   o port nao deve definir os valores dessas variaveis
   &#8203;&#8203;absolutamente, sobrepondo os valores existentes; em vez
   disso, pode anexar quaisquer valores necessarios aos valores existentes.
   Isso e para que as opc,oes de build que afetam todos os ports possam ser
   definidas globalmente.

   Se o port nao respeitar essas variaveis, por favor adicione
   NO_PACKAGE=ignores either cc or cxx ao Makefile.

   Aqui esta um exemplo do Makefile respeitando ambos CC e CXX. Note o ?=:

 CC?= gcc

 CXX?= g++

   Aqui esta um exemplo que nao respeita nem CC nem CXX:

 CC= gcc

 CXX= g++

   Ambos CC e CXX podem ser definidos em sistemas FreeBSD no arquivo
   /etc/make.conf. O primeiro exemplo define um valor se nao foi definido
   anteriormente no arquivo /etc/make.conf, preservando quaisquer definic,oes
   de todo o sistema. O segundo exemplo atrapalha qualquer coisa previamente
   definida.

13.9. Respeite CFLAGS

   O port deve respeitar a variavel CFLAGS. O que queremos dizer com isso e
   que o port nao deve definir o valor dessa variavel absolutamente,
   substituindo o valor existente. Em vez disso, pode anexar quaisquer
   valores necessarios ao valor existente. Isso e para que as opc,oes de
   build que afetam todos os ports possam ser definidas globalmente.

   Se isso nao acontecer, por favor adicione NO_PACKAGE=ignores cflags ao
   Makefile.

   Aqui esta um exemplo de Makefile respeitando CFLAGS. Note o +=:

 CFLAGS+= -Wall -Werror

   Aqui esta um exemplo que nao respeita CFLAGS:

 CFLAGS= -Wall -Werror

   CFLAGS sao definidas em sistemas FreeBSD no arquivo /etc/make.conf. O
   primeiro exemplo acrescenta flags adicionais para a variavel CFLAGS,
   preservando quaisquer definic,oes de todo o sistema. O segundo exemplo
   atrapalha qualquer coisa previamente definida.

   Remove flags de otimizac,ao do Makefile de terceiros. O sistema de
   variaveis CFLAGS contem flags de otimizac,ao de todo o sistema. Um exemplo
   de um Makefile nao modificado:

 CFLAGS= -O3 -funroll-loops -DHAVE_SOUND

   Usando flags de otimizac,ao do sistema, o Makefile seria semelhante a este
   exemplo:

 CFLAGS+= -DHAVE_SOUND

13.10. Logs de Compilac,ao Detalhados

   Faz com que o sistema de build dos ports exiba todos os comandos
   executados durante o estagio de build. Os registros de build completos sao
   cruciais para depurar problemas de ports.

   Exemplo de log de compilac,ao nao informativo (ruim):

   CC     source1.o
   CC     source2.o
   CCLD   someprogram

   Exemplo de log de compilac,ao detalhado (bom):

 cc -O2 -pipe -I/usr/local/include -c -o source1.o source1.c
 cc -O2 -pipe -I/usr/local/include -c -o source2.o source2.c
 cc -o someprogram source1.o source2.o -L/usr/local/lib -lsomelib

   Alguns sistemas de build, como o CMake, ninja e GNU configure sao
   configurados para registro detalhado pelo framework do ports. Em outros
   casos, os ports podem precisar de ajustes individuais.

13.11. Feedback

   Envie mudanc,as aplicaveis e correc,oes &#8203;&#8203;para o mantenedor
   upstream para inclusao na proxima versao do codigo. Isso torna a
   atualizac,ao para a proxima versao muito mais facil.

13.12. README.html

   README.html nao faz parte do port, mas e gerado com o comando make readme.
   Nao inclua este arquivo em patches ou commits.

  Nota:

   Se o comando make readme falhar, certifique-se de que o valor padrao de
   ECHO_MSG nao tenha sido modificado pelo port.

13.13. Marcando um Port nao Instalavel com a variavel BROKEN, FORBIDDEN ou
IGNORE

   Em certos casos, os usuarios devem ser impedidos de instalar um port.
   Existem varias variaveis &#8203;&#8203;que podem ser usadas no Makefile de
   um port para informar ao usuario que o port nao pode ser instalado. O
   valor dessas variaveis &#8203;&#8203;make sera o motivo que e mostrado aos
   usuarios do porque o port se recusa a se instalar. Por favor, use a
   variavel correta. Cada variavel transmite significados radicalmente
   diferentes, tanto para usuarios quanto para sistemas automatizados que
   dependem do Makefile, assim como o cluster de compilac,ao de ports,
   FreshPorts e portsmon.

  13.13.1. Variaveis

     * BROKEN e reservada para ports que atualmente nao compilam, instalam,
       desinstalam ou que nao sao executados corretamente. Use-o para ports
       em que o problema e considerado temporario.

       Se instruido, o cluster de build ainda tentara compilar eles para ver
       se o problema subjacente foi resolvido. (No entanto, em geral, o
       cluster e executado sem isso.)

       Por exemplo, use BROKEN quando um port:

          * nao compila

          * falha em sua configurac,ao ou no processo de instalac,ao

          * instala arquivos fora do ${PREFIX}

          * nao remove todos os seus arquivos corretamente apos a
            desinstalac,ao (no entanto, pode ser aceitavel, e desejavel, que
            o port deixe arquivos modificados pelo usuario por fora do port)

          * tem problemas em tempo de execuc,ao em sistemas nos quais e
            necessario que ele seja executado corretamente.

     * A variavel FORBIDDEN e usada para ports que contem uma vulnerabilidade
       de seguranc,a ou causam grande preocupac,ao em relac,ao `a seguranc,a
       de um sistema FreeBSD com um determinado port instalado (por exemplo,
       um programa de confianc,a inseguro ou um programa que fornece
       servic,os facilmente exploraveis). Marcar ports como FORBIDDEN assim
       que um determinado software tiver uma vulnerabilidade e nao houver
       atualizac,ao liberada. Idealmente, atualize os ports o mais rapido
       possivel quando uma vulnerabilidade de seguranc,a for descoberta para
       reduzir o numero de hosts vulneraveis &#8203;&#8203;do FreeBSD
       (gostamos de ser conhecidos pela seguranc,a), mas `as vezes ha um
       intervalo de tempo entre a divulgac,ao de uma vulnerabilidade e uma
       versao atualizada do software vulneravel. Nao marque um port como
       FORBIDDEN por qualquer outro motivo que nao seja seguranc,a.

     * A variavel IGNORE e reservada para ports que nao devem ser compilados
       por algum outro motivo. Use-a para ports em que o problema e
       considerado estrutural. O cluster de build nao criara, sob nenhuma
       circunstancia, ports marcados com a variavel IGNORE. Por exemplo, use
       IGNORE quando um port:

          * nao funciona na versao instalada do FreeBSD

          * tem um distfile que nao pode ser obtido automaticamente devido a
            restric,oes de licenciamento

          * nao funciona com algum outro port atualmente instalado (por
            exemplo, o port depende do www/apache20 mas www/apache22 esta
            instalado)

  Nota:

       Se um port entrar em conflito com um port que esta atualmente
       instalado (por exemplo, se eles instalam um arquivo no mesmo local que
       executa uma func,ao diferente), use a variavel CONFLICTS como uma
       alternativa. CONFLICTS ajustara IGNORE por si proprio.

  13.13.2. Notas de Implementac,ao

   Nao coloque os valores de BROKEN, IGNORE e variaveis
   &#8203;&#8203;relacionadas entre aspas. Devido `a forma como a informac,ao
   e mostrada ao usuario, o texto das mensagens para cada variavel e
   diferente:

 BROKEN= fails to link with base -lcrypto

 IGNORE= unsupported on recent versions

   resultando nesta saida a partir do comando make describe:

 ===>  foobar-0.1 is marked as broken: fails to link with base -lcrypto.

 ===>  foobar-0.1 is unsupported on recent versions.

13.14. Considerac,oes Arquitetonicas

  13.14.1. Notas Gerais sobre Arquiteturas

   O FreeBSD roda em muito mais arquiteturas de processador do que apenas as
   conhecidas baseadas em x86. Alguns ports possuem restric,oes especificas
   para uma ou mais dessas arquiteturas.

   Para a lista de arquiteturas suportadas, execute:

 cd ${SRCDIR}; make targets

   Os valores sao mostrados no formato TARGET/TARGET_ARCH. O makevar ARCH
   somente leitura do ports e configurado com base no valor de TARGET_ARCH.
   Os Makefiles dos Ports devem testar o valor deste Makevar.

  13.14.2. Marcando um Port como de Arquitetura Neutra

   Os ports que nao possuem requisitos ou arquivos dependentes de arquitetura
   sao identificados com NO_ARCH=yes.

  Nota:

   NO_ARCH pretende indicar que nao ha necessidade de compilar um pacote para
   cada uma das arquiteturas suportadas. O objetivo e reduzir a quantidade de
   recursos gastos na compilac,ao e distribuic,ao de pacotes, como largura de
   banda de rede e espac,o em disco em mirrors e na midia de distribuic,ao.
   Atualmente, entretanto, nossa infraestrutura de pacotes (por exemplo,
   gerenciadores de pacotes, mirrors e compiladores de pacotes) nao estao
   configurados para se beneficiar totalmente do NO_ARCH.

  13.14.3. Marcando um port para ser ignorado apenas em determinadas
  arquiteturas

     * Para marcar um port com IGNORE apenas em determinadas arquiteturas,
       existem duas outras variaveis &#8203;&#8203;de conveniencia que irao
       setar automaticamente IGNORE: ONLY_FOR_ARCHS e NOT_FOR_ARCHS.
       Exemplos:

 ONLY_FOR_ARCHS= i386 amd64

 NOT_FOR_ARCHS=  ia64 sparc64

       Uma mensagem de IGNORE customizada pode ser definida usando as
       variaveis ONLY_FOR_ARCHS_REASON e NOT_FOR_ARCHS_REASON. E possivel
       definir entradas por arquitetura com as variaveis
       ONLY_FOR_ARCHS_REASON_ARCH e NOT_FOR_ARCHS_REASON_ARCH.

     * Se um port baixar e instalar binarios i386, defina a variavel
       IA32_BINARY_PORT. Se esta variavel estiver definida,/usr/lib32 deve
       estar presente para versoes IA32 de bibliotecas e o kernel deve
       suportar compatibilidade com IA32. Se uma dessas duas dependencias nao
       forem satisfeitas, IGNORE sera definido automaticamente.

  13.14.5. Considerac,oes Especificas do Cluster

     * Alguns ports tentam se ajustar `a maquina exata em que estao sendo
       compilados, definindo -march=native para o compilador. Isso deve ser
       evitado: liste-o em uma opc,ao desativada por padrao ou exclua-o
       completamente.

       Caso contrario, o pacote padrao produzido pelo cluster de compilac,ao
       pode nao rodar em todas as maquinas desse ARCH.

13.15. Marcando um Port para Remoc,ao com DEPRECATED ou EXPIRATION_DATE

   Lembre-se que BROKEN e FORBIDDEN devem ser usados &#8203;&#8203;como um
   recurso temporario se um port nao estiver funcionando. Ports
   permanentemente quebrados serao removidos da arvore por completo.

   Quando fizer sentido, os usuarios podem ser avisados &#8203;&#8203;sobre
   uma remoc,ao de port pendente com as variaveis DEPRECATED e
   EXPIRATION_DATE. A primeira e uma string que indica porque o port esta
   programado para remoc,ao; a segunda e uma string no formato ISO 8601
   (YYYY-MM-DD). Ambos serao mostrados ao usuario.

   E possivel definir a variavel DEPRECATED sem uma EXPIRATION_DATE (por
   exemplo, recomendando uma versao mais nova do port), mas o contrario nao
   faz sentido.

   Nao existe uma politica definida sobre o tempo de aviso a ser dado. A
   pratica atual parece ser de um mes para problemas relacionados `a
   seguranc,a e dois meses para problemas de compilac,ao. Isso tambem da a
   algum interessado um pouco de tempo para resolver os problemas.

13.16. Evite o Uso do Construtor .error

   A maneira correta de um Makefile sinalizar que o port nao pode ser
   instalado devido a algum fator externo (por exemplo, o usuario especificou
   uma combinac,ao ilegal de opc,oes de compilac,ao) e definir um valor nao
   vazio para IGNORE. Este valor sera formatado e mostrado ao usuario pelo
   comando make install.

   E um equivoco comum usar .error para esse proposito. O problema com isso e
   que muitas ferramentas automatizadas que funcionam com a arvore de ports
   falharao nessa situac,ao. A ocorrencia mais comum disso e encontrada ao
   tentar construir o arquivo /usr/ports/INDEX (Veja Sec,ao 10.1, "Executando
   make describe"). No entanto, comandos ainda mais triviais, como make
   maintainer tambem irao falhar neste cenario. E Isto nao e aceitavel.

   Exemplo 13.1. Como Evitar o Uso de .error

   O primeiro dos proximos dois trechos de Makefile ira fazer o make index
   falhar, enquanto o segundo nao:

 .error "option is not supported"

 IGNORE=option is not supported

13.17. Uso de sysctl

   O uso de sysctl e desencorajado, exceto nos targets. Isso porque ele seria
   processado na execuc,ao de qualquer makevar, como os usados durante um
   make index, e assim teria que executar o comando, retardando ainda mais
   esse processo.

   Use apenas sysctl(8) atraves de SYSCTL, pois contem o caminho completo e
   pode ser modificado, se alguem tiver uma necessidade especial.

13.18. Atualizando Distfiles

   De vez em quando os autores de software alteram o conteudo dos distfiles
   liberados sem alterar o nome do arquivo. Verifique se as alterac,oes sao
   oficiais e se foram realizadas pelo autor. Ja aconteceu no passado em que
   o distfile foi silenciosamente alterado nos servidores de download com a
   intenc,ao de prejudicar ou comprometer a seguranc,a do usuario final.

   Coloque o antigo distfile de lado, fac,a o download do novo, descompacte-o
   e compare o conteudo com o diff(1). Se nao houver nada suspeito, atualize
   o distinfo.

  Importante:

   Certifique-se de resumir as diferenc,as no log do PR e do commit, para que
   outras pessoas saibam que nada de ruim aconteceu.

   Contate os autores do software e confirme as alterac,oes com eles.

13.19. Uso de Padroes POSIX

   Os ports do FreeBSD geralmente esperam conformidade com POSIX. Alguns
   softwares e sistemas de compilac,ao fazem suposic,oes baseadas em um
   sistema operacional ou ambiente especifico que pode causar problemas
   quando usado em um port.

   Nao use /proc se houver outras maneiras de obter as informac,oes. Por
   exemplo, setprogname(argv[0]) dentro de main() e depois getprogname(3)
   para saber o nome do executavel.

   Nao confie em comportamento nao documentado pelo POSIX.

   Nao registre timestamps no caminho critico do aplicativo se ele tambem
   funcionar sem. Obter registros de timestamps pode ser lento, dependendo da
   precisao dos registros de timestamp no SO. Se os timestamps forem
   realmente necessarios, determine o quao precisos eles devem ser e use uma
   API documentada para fornecer a precisao necessaria.

   Um numero razoavel de syscalls simples (por exemplo gettimeofday(2),
   getpid(2)) sao muito mais rapidos no Linux(R) do que em qualquer outro
   sistema operacional, devido ao armazenamento em cache e `as otimizac,oes
   de desempenho do vsyscall. Nao confie que seus custos sejam baratos em
   aplicativos de desempenho critico. Em geral, tente evitar as syscalls se
   possivel.

   Nao confie no comportamento de sockets especificos do Linux(R). Em
   particular, os tamanhos padrao do buffer de socket sao diferentes
   (chamadas setsockopt(2) com SO_SNDBUF e SO_RCVBUF, e enquanto o send(2) do
   Linux(R)'s bloqueia quando o buffer do socket esta cheio, o do FreeBSD
   falhara e definira ENOBUFS no errno).

   Se for necessario depender de um comportamento nao padrao, encapsule-o
   adequadamente em uma API generica, verifique o comportamento no estagio de
   configurac,ao e pare se ele estiver ausente.

   Verifique as paginas de manual para ver se a func,ao usada e uma interface
   POSIX (na sec,ao "STANDARDS" da pagina de manual).

   Nao assuma que /bin/sh e o bash. Certifique-se de que uma linha de comando
   passada para system(3) ira funcionar com um shell compativel com POSIX.

   Uma lista de bashismos comum esta disponivel aqui.

   Verifique se os cabec,alhos estao incluidos no POSIX ou da maneira
   recomendada na pagina do manual. Por exemplo,sys/types.h e muitas vezes
   esquecido, o que nao e tanto um problema para o Linux(R) como e para o
   FreeBSD.

13.20. Miscelanea

   Sempre verifique duas vezes os arquivos pkg-descr e pkg-plist. Se estiver
   revisando um port e uma melhor formulac,ao puder ser alcanc,ada, fac,a
   isso.

   Nao fac,a mais copias da Licenc,a GNU General Public License em nosso
   sistema. Obrigado.

   Por favor, tenha cuidado ao notar quaisquer questoes legais! Nao nos deixe
   distribuir software ilegalmente!

                      Capitulo 14. Um Exemplo de Makefile

   Aqui esta um exemplo de Makefile que pode ser usado para criar um novo
   port. Certifique-se de remover todos os comentarios extras (entre
   colchetes).

   O formato apresentado e o recomendado para ordenar variaveis, linhas
   vazias entre sec,oes e assim por diante. Esse formato e projetado para que
   as informac,oes mais importantes sejam faceis de serem localizadas.
   Recomendamos usar o portlint para verificar o Makefile.

 [the header...just to make it easier for us to identify the ports.]
 # $FreeBSD$
 [ ^^^^^^^^^ This will be automatically replaced with RCS ID string by SVN
 when it is committed to our repository.  If upgrading a port, do not alter
 this line back to "$FreeBSD$".  SVN deals with it automatically.]

 [section to describe the port itself and the master site - PORTNAME
  and PORTVERSION or the DISTVERSION* variables are always first,
  followed by CATEGORIES, and then MASTER_SITES, which can be followed
  by MASTER_SITE_SUBDIR.  PKGNAMEPREFIX and PKGNAMESUFFIX, if needed,
  will be after that.  Then comes DISTNAME, EXTRACT_SUFX and/or
  DISTFILES, and then EXTRACT_ONLY, as necessary.]
 PORTNAME=       xdvi
 DISTVERSION=    18.2
 CATEGORIES=     print
 [do not forget the trailing slash ("/")!
  if not using MASTER_SITE_* macros]
 MASTER_SITES=   ${MASTER_SITE_XCONTRIB}
 MASTER_SITE_SUBDIR=     applications
 PKGNAMEPREFIX=  ja-
 DISTNAME=       xdvi-pl18
 [set this if the source is not in the standard ".tar.gz" form]
 EXTRACT_SUFX=   .tar.Z

 [section for distributed patches -- can be empty]
 PATCH_SITES=    ftp://ftp.sra.co.jp/pub/X11/japanese/
 PATCHFILES=     xdvi-18.patch1.gz xdvi-18.patch2.gz
 [If the distributed patches were not made relative to ${WRKSRC},
  this may need to be tweaked]
 PATCH_DIST_STRIP=       -p1

 [maintainer; *mandatory*!  This is the person who is volunteering to
  handle port updates, build breakages, and to whom a users can direct
  questions and bug reports.  To keep the quality of the Ports Collection
  as high as possible, we do not accept new ports that are assigned to
  "ports@FreeBSD.org".]
 MAINTAINER=     asami@FreeBSD.org
 COMMENT=        DVI Previewer for the X Window System

 [license -- should not be empty]
 LICENSE=        BSD2CLAUSE
 LICENSE_FILE=   ${WRKSRC}/LICENSE

 [dependencies -- can be empty]
 RUN_DEPENDS=    gs:print/ghostscript

 [If it requires GNU make, not /usr/bin/make, to build...]
 USES= gmake
 [If it is an X application and requires "xmkmf -a" to be run...]
 USES= imake

 [this section is for other standard bsd.port.mk variables that do not]
  belong to any of the above]
 [If it asks questions during configure, build, install...]
 IS_INTERACTIVE= yes
 [If it extracts to a directory other than ${DISTNAME}...]
 WRKSRC=         ${WRKDIR}/xdvi-new
 [If it requires a "configure" script generated by GNU autoconf to be run]
 GNU_CONFIGURE=  yes
 [et cetera.]

 [If it requires options, this section is for options]
 OPTIONS_DEFINE= DOCS EXAMPLES FOO
 OPTIONS_DEFAULT=        FOO
 [If options will change the files in plist]
 OPTIONS_SUB=yes

 FOO_DESC=               Enable foo support

 FOO_CONFIGURE_ENABLE=   foo

 [non-standard variables to be used in the rules below]
 MY_FAVORITE_RESPONSE=   "yeah, right"

 [then the special rules, in the order they are called]
 pre-fetch:
         i go fetch something, yeah

 post-patch:
         i need to do something after patch, great

 pre-install:
         and then some more stuff before installing, wow

 [and then the epilogue]

 .include <bsd.port.mk>

      Capitulo 15. Ordem das Variaveis &#8203;&#8203;nos Makefiles de Port

   Indice

   15.1. Bloco PORTNAME

   15.2. Bloco PATCHFILES

   15.3. Bloco MAINTAINER

   15.4. Bloco LICENSE

   15.5. Mensagens Genericas BROKEN/IGNORE/DEPRECATED

   15.6. O Bloco de Dependencias

   15.7. Flavors

   15.8. USES e USE_x

   15.9. Variaveis &#8203;&#8203;Padrao bsd.port.mk

   15.10. Opc,oes e Assistentes

   15.11. O Restante das Variaveis

   15.12. Os Targets

   As primeiras sec,oes do Makefile devem sempre vir na mesma ordem. Este
   padrao faz com que todos possam ler facilmente qualquer port sem ter que
   procurar variaveis em uma ordem aleatoria.

   A primeira linha de um Makefile e sempre um comentario contendo o ID de
   controle de versao do Subversion, seguido por uma linha vazia. Em novos
   ports, parece assim:

 # $FreeBSD$
  

   Nos ports existentes, o Subversion expandiu essa entrada ficando assim:

 # $FreeBSD$
  

  Nota:

   As sec,oes e variaveis descritas aqui sao obrigatorias em um port comum.
   Em um port slave, muitas sec,oes e variaveis podem ser ignoradas.

  Importante:

   Cada bloco seguinte deve ser separado do bloco anterior por uma unica
   linha em branco.

   Nos blocos a seguir, apenas defina as variaveis &#8203;&#8203;que sao
   requeridas pelo port. Defina essas variaveis &#8203;&#8203;na ordem em que
   sao mostradas aqui.

15.1. Bloco PORTNAME

   Este bloco e o mais importante. Ele define o nome do port, a versao, o
   local do arquivo de distribuic,ao e a categoria. As variaveis
   &#8203;&#8203;devem estar nesta ordem:

     * PORTNAME

     * PORTVERSION[1]

     * DISTVERSIONPREFIX

     * DISTVERSION[1]

     * DISTVERSIONSUFFIX

     * PORTREVISION

     * PORTEPOCH

     * CATEGORIES

     * MASTER_SITES

     * MASTER_SITE_SUBDIR (descontinuado)

     * PKGNAMEPREFIX

     * PKGNAMESUFFIX

     * DISTNAME

     * EXTRACT_SUFX

     * DISTFILES

     * DIST_SUBDIR

     * EXTRACT_ONLY

15.2. Bloco PATCHFILES

   Este bloco e opcional. As variaveis &#8203;&#8203;sao:

     * PATCH_SITES

     * PATCHFILES

     * PATCH_DIST_STRIP

15.3. Bloco MAINTAINER

   Este bloco e obrigatorio. As variaveis &#8203;&#8203;sao:

     * MAINTAINER

     * COMMENT

15.4. Bloco LICENSE

   Este bloco e opcional, embora seja altamente recomendado. As variaveis
   &#8203;&#8203;sao:

     * LICENSE

     * LICENSE_COMB

     * LICENSE_GROUPS ou LICENSE_GROUPS_NOME

     * LICENSE_NAME ou LICENSE_NAME_NOME

     * LICENSE_TEXT ou LICENSE_TEXT_NOME

     * LICENSE_FILE ou LICENSE_FILE_NOME

     * LICENSE_PERMS ou LICENSE_PERMS_NOME

     * LICENSE_DISTFILES ou LICENSE_DISTFILES_NOME

   Se houver varias licenc,as, ordene as variaveis LICENSE_VAR_NOME pelo nome
   de licenc,a.

15.5. Mensagens Genericas BROKEN/IGNORE/DEPRECATED

   Este bloco e opcional. As variaveis &#8203;&#8203;sao:

     * DEPRECATED

     * EXPIRATION_DATE

     * FORBIDDEN

     * BROKEN

     * BROKEN_*

     * IGNORE

     * IGNORE_*

     * ONLY_FOR_ARCHS

     * ONLY_FOR_ARCHS_REASON*

     * NOT_FOR_ARCHS

     * NOT_FOR_ARCHS_REASON*

  Nota:

   BROKEN_* e IGNORE_* podem ser qualquer variavel generica, por exemplo,
   IGNORE_amd64, BROKEN_FreeBSD_10, etc. Com excec,ao das variaveis
   &#8203;&#8203;que dependem de uma variavel USES, coloque essas em
   Sec,ao 15.8, "USES e USE_x". Por exemplo, IGNORE_WITH_PHP so funciona se
   USES=php estiver definido e a variavel BROKEN_SSL somente se USES=ssl
   estiver definido.

   Se o port estiver marcado como BROKEN quando algumas condic,oes forem
   atendidas, e tais condic,oes puderem ser testadas somente apos incluir o
   bsd.port.options.mk ou bsd.port.pre.mk, entao essas variaveis
   &#8203;&#8203;devem ser definidas mais tarde, em Sec,ao 15.11, "O Restante
   das Variaveis".

15.6. O Bloco de Dependencias

   Este bloco e opcional. As variaveis &#8203;&#8203;sao:

     * FETCH_DEPENDS

     * EXTRACT_DEPENDS

     * PATCH_DEPENDS

     * BUILD_DEPENDS

     * LIB_DEPENDS

     * RUN_DEPENDS

     * TEST_DEPENDS

15.7. Flavors

   Este bloco e opcional.

   Comece esta sec,ao com as definic,oes de FLAVORS. Continue com as
   possiveis variaveis assistentes de Flavors. Veja Sec,ao 7.2, "Usando
   FLAVORS" para maiores informac,oes.

   Variaveis &#8203;&#8203;de definic,ao de construc,ao nao disponiveis como
   assistentes, usando .if ${FLAVOR:U} == foo devem ir em abaixo de suas
   respectivas sec,oes.

15.8. USES e USE_x

   Comece esta sec,ao com a definic,ao da variavel USES e, em seguida,
   possiveis variaveis USE_x.

   Mantenha as variaveis &#8203;&#8203;relacionadas juntas. Por exemplo, se
   estiver usando a variavel USE_GITHUB, coloque sempre as variaveis GH_*
   &#8203;&#8203;logo apos ela.

15.9. Variaveis &#8203;&#8203;Padrao bsd.port.mk

   Este bloco de sec,ao e para variaveis &#8203;&#8203;que podem ser
   definidas em bsd.port.mk que nao pertencem a nenhum dos blocos de sec,ao
   anteriores.

   A ordem nao e importante, no entanto, tente manter variaveis
   &#8203;&#8203;semelhantes juntas. Por exemplo, variaveis
   &#8203;&#8203;USERS e GROUPS. Variaveis &#8203;&#8203;de configurac,ao
   CONFIGURE_* e *_CONFIGURE. Lista de arquivos e diretorios PORTDOCS e
   PORTEXAMPLES.

15.10. Opc,oes e Assistentes

   Se o port usa o framework de opc,oes, defina OPTIONS_DEFINE e
   OPTIONS_DEFAULT, entao as outras variaveis OPTIONS_*, depois as de
   descric,oes *_DESC, e entao os assistentes de opc,oes. Tente e ordene
   todas essas variaveis alfabeticamente.

   Exemplo 15.1. Exemplo de Ordenamento das Variaveis &#8203;&#8203;de
   Opc,oes

   As opc,oes FOO e BAR nao possuem uma descric,ao padrao, portanto, e
   necessario escrever uma. As outras opc,oes ja possuem em
   Mk/bsd.options.desc.mk entao escrever uma nao e necessario. Opc,oes DOCS e
   EXAMPLES usam os assistentes de destino para instalar seus arquivos, eles
   sao mostrados aqui por completo, apesar de pertencerem a Sec,ao 15.12, "Os
   Targets", entao outras variaveis &#8203;&#8203;e destinos podem ser
   inseridos antes deles.

 OPTIONS_DEFINE= DOCS EXAMPLES FOO BAR
 OPTIONS_DEFAULT=        FOO
 OPTIONS_RADIO=  SSL
 OPTIONS_RADIO_SSL=    OPENSSL GNUTLS
 OPTIONS_SUB=    yes

 BAR_DESC=               Enable bar support
 FOO_DESC=               Enable foo support

 BAR_CONFIGURE_WITH=     bar=${LOCALBASE}
 FOO_CONFIGURE_ENABLE=   foo
 GNUTLS_CONFIGURE_ON=    --with-ssl=gnutls
 OPENSSL_CONFIGURE_ON=   --with-ssl=openssl

 post-install-DOCS-on:
       ${MKDIR} ${STAGEDIR}${DOCSDIR}
       cd ${WRKSRC}/doc && ${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR}

 post-install-EXAMPLES-on:
       ${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
       cd ${WRKSRC}/ex && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR}

15.11. O Restante das Variaveis

   E entao, o restante das variaveis &#8203;&#8203;que nao sao mencionadas
   nos blocos anteriores.

15.12. Os Targets

   Depois que todas as variaveis &#8203;&#8203;sao definidas, targets
   opcionais make(1) podem ser definidos. Mantenha pre-* antes de post-* e na
   mesma ordem em que as diferentes etapas sao executadas:

     * fetch

     * extract

     * patch

     * configure

     * build

     * install

     * test

  Dica:

   Ao usar os assistentes de opc,oes, os targets sao classificados
   alfabeticamente, mas mantenha *-on antes do *-off. Quando tambem estiver
   usando o target principal, mantenha o target principal antes dos
   opcionais:

 post-install:
         # install generic bits

 post-install-DOCS-on:
         # Install documentation

 post-install-X11-on:
         # Install X11 related bits

 post-install-X11-off:
         # Install bits that should be there if X11 is disabled

     ----------------------------------------------------------------------

  [1] Importante:

   Apenas uma das variaveis PORTVERSION e DISTVERSION podem ser usadas.

                      Capitulo 16. Mantendo-se Atualizado

   Indice

   16.1. FreshPorts

   16.2. A interface Web para o Repositorio do Codigo Fonte

   16.3. A Lista de Discussao de Ports do FreeBSD

   16.4. O Cluster de Compilac,ao de Ports do FreeBSD

   16.5. Portscout: o Scanner de Distfile de Ports do FreeBSD

   16.6. O Sistema de Monitoramento de Ports do FreeBSD

   A colec,ao de Ports do FreeBSD esta em constante mudanc,a. Aqui estao
   algumas informac,oes sobre como se manter atualizado.

16.1. FreshPorts

   Uma das maneiras mais faceis de saber sobre atualizac,oes que ja foram
   submetidas e assinando o FreshPorts. Multiplos ports podem ser
   monitoradas. Os mantenedores sao fortemente encorajados a se inscrever,
   porque eles receberao uma notificac,ao nao apenas de suas proprias
   mudanc,as, mas tambem de quaisquer mudanc,as que qualquer outro committer
   do FreeBSD tenha feito. (Geralmente e necessario para acompanhar as
   mudanc,as na estrutura de ports subjacentes - embora seja mais educado
   receber um aviso antecipado daqueles que submeterem essas mudanc,as, `as
   vezes isso e negligenciado ou impraticavel. Alem disso, em alguns casos,
   as alterac,oes sao muito menores por natureza. Esperamos que todos usem
   seu melhor julgamento nesses casos.)

   Para usar o FreshPorts, e necessario uma conta. Aqueles com enderec,os de
   email registrados @FreeBSD.org verao um link opt-in no lado direito das
   paginas web. Aqueles que ja possuem uma conta no FreshPorts, mas nao estao
   usando enderec,o de email @FreeBSD.org podem alterar o e-mail para
   @FreeBSD.org, se inscrever, e entao alterar o email novamente.

   O FreshPorts tambem possui um recurso de teste de sanidade que testa
   automaticamente cada commit na arvore de ports do FreeBSD. Se inscrito
   neste servic,o, um committer recebera notificac,oes de quaisquer erros que
   o FreshPorts detectar durante o teste de sanidade de seus commits.

16.2. A interface Web para o Repositorio do Codigo Fonte

   E possivel visualizar os arquivos no repositorio de codigo fonte usando
   uma interface web. As alterac,oes que afetam todo o sistema de ports agora
   sao documentadas no arquivo CHANGES. As alterac,oes que afetam os ports
   individuais agora sao documentadas no arquivo UPDATING. No entanto, a
   resposta definitiva a qualquer questao e, sem duvida, ler o codigo fonte
   do arquivo bsd.port.mk e arquivos associados.

16.3. A Lista de Discussao de Ports do FreeBSD

   Como um mantenedor de ports, considere assinar a lista de discussao de
   ports do FreeBSD. Mudanc,as importantes na maneira como os ports funcionam
   serao anunciadas nela e depois serao inseridas no arquivo CHANGES.

   Se o volume de mensagens nesta lista de discussao for muito alto,
   considere seguir a lista de anuncios de ports do FreeBSD que contem apenas
   os anuncios.

16.4. O Cluster de Compilac,ao de Ports do FreeBSD

   Um dos pontos fortes menos divulgados do FreeBSD e que um cluster inteiro
   de maquinas e dedicado na compilac,ao continua da Colec,ao de Ports, para
   cada um dos principais releases do SO e para cada arquitetura Tier-1.

   Ports individuais sao compilados a menos que sejam especificamente
   marcados com IGNORE. Ports marcados com BROKEN ainda sofrem tentativas de
   compilac,ao, para verificarem se o problema foi resolvido. (Isso e feito
   passando TRYBROKEN para o Makefile do port.)

16.5. Portscout: o Scanner de Distfile de Ports do FreeBSD

   O cluster de compilac,ao e dedicado na compilac,ao da ultima versao de
   cada port com os distfiles que ja foram baixados. No entanto, como a
   Internet muda continuamente, os distfiles podem desaparecer rapidamente.
   Portscout, o scanner de distfile de Ports do FreeBSD, tenta consultar cada
   site de download para cada port e assim descobrir se cada distfile ainda
   esta disponivel.Portscout pode gerar relatorios em HTML e enviar emails
   sobre novos ports disponiveis para aqueles que os solicitam. A menos que
   nao seja assinado de outra forma, os mantenedores sao solicitados a
   verificar periodicamente as mudanc,as, seja manualmente ou usando o feed
   RSS.

   A primeira pagina do Portscout fornece o enderec,o de e-mail do mantenedor
   de port, o numero de ports pelos quais o mantenedor e responsavel, o
   numero desses ports com novos distfiles e a porcentagem dos ports que
   estao desatualizados. A func,ao de pesquisa permite pesquisar por
   enderec,o de email de um mantenedor especifico e permite tambem selecionar
   se apenas os ports desatualizados serao mostrados.

   Ao clicar no enderec,o de email de um mantenedor, uma lista de todos os
   seus ports e exibida, junto com a categoria do port, o numero da versao
   atual, se ha ou nao uma nova versao, quando o port foi atualizado e
   finalmente quando foi sua ultima checagem. Uma func,ao de pesquisa nesta
   pagina permite que o usuario pesquise por um port especifico.

   Clicar em um nome de port na lista exibe as informac,oes FreshPorts do
   port.

16.6. O Sistema de Monitoramento de Ports do FreeBSD

   Outro recurso util e o Sistema de Monitoramento de Ports do FreeBSD
   (tambem conhecido como portsmon). Este sistema compreende em um banco de
   dados que processa informac,oes de varias fontes e permite que ele seja
   acessado atraves de uma interface web. Atualmente, os Relatorios de
   Problemas (PRs) dos ports, os logs de erros do cluster de compilac,ao e os
   arquivos individuais da colec,ao de ports sao usados. No futuro, isso sera
   expandido para incluir pesquisa de distfile, bem como outras fontes.

   Para comec,ar, use a pagina de busca Overview of One Port para encontrar
   todas as informac,oes sobre um port.

   Este e o unico recurso disponivel que mapeia entradas de PR para nomes de
   ports. Os remetentes de PR nem sempre incluem o nome do port em sua
   Sinopse, embora prefeririamos que eles o fizessem. Logo, portsmon e um bom
   lugar para descobrir se um port existente tem algum PR arquivado, qualquer
   erro de compilac,ao ou se um novo port que o mantenedor esta considerando
   criar ja foi submetido.

                        Capitulo 17. Usando Macros USES

   Indice

   17.1. Uma introduc,ao ao USES

   17.2. 7z

   17.3. ada

   17.4. autoreconf

   17.5. blaslapack

   17.6. bdb

   17.7. bison

   17.8. cabal

   17.9. cargo

   17.10. charsetfix

   17.11. cmake

   17.12. compiler

   17.13. cpe

   17.14. cran

   17.15. desktop-file-utils

   17.16. desthack

   17.17. display

   17.18. dos2unix

   17.19. drupal

   17.20. fakeroot

   17.21. fam

   17.22. firebird

   17.23. fonts

   17.24. fortran

   17.25. fuse

   17.26. gem

   17.27. gettext

   17.28. gettext-runtime

   17.29. gettext-tools

   17.30. ghostscript

   17.31. gl

   17.32. gmake

   17.33. gnome

   17.34. go

   17.35. gperf

   17.36. grantlee

   17.37. groff

   17.38. gssapi

   17.39. horde

   17.40. iconv

   17.41. imake

   17.42. kde

   17.43. kmod

   17.44. lha

   17.45. libarchive

   17.46. libedit

   17.47. libtool

   17.48. linux

   17.49. localbase

   17.50. lua

   17.51. lxqt

   17.52. makeinfo

   17.53. makeself

   17.54. mate

   17.55. meson

   17.56. metaport

   17.57. mysql

   17.58. mono

   17.59. motif

   17.60. ncurses

   17.61. ninja

   17.62. objc

   17.63. openal

   17.64. pathfix

   17.65. pear

   17.66. perl5

   17.67. pgsql

   17.68. php

   17.69. pkgconfig

   17.70. pure

   17.71. pyqt

   17.72. python

   17.73. qmail

   17.74. qmake

   17.75. qt

   17.76. qt-dist

   17.77. readline

   17.78. samba

   17.79. scons

   17.80. shared-mime-info

   17.81. shebangfix

   17.82. sqlite

   17.83. ssl

   17.84. tar

   17.85. tcl

   17.86. terminfo

   17.87. tk

   17.88. uidfix

   17.89. uniquefiles

   17.90. varnish

   17.91. webplugin

   17.92. xfce

   17.93. xorg

   17.94. xorg-cat

   17.95. zip

17.1. Uma introduc,ao ao USES

   As macros USES facilitam declarar requisitos e configurac,oes de um port.
   Elas podem adicionar dependencias, alterar o comportamento de compilac,ao
   do port, adicionar metadados a pacotes e assim por diante, tudo
   selecionando valores simples e predefinidos.

   Cada sec,ao deste capitulo descreve um possivel valor para USES,
   juntamente com seus possiveis argumentos. Argumentos sao anexados ao valor
   apos dois pontos (:). Varios argumentos sao separados por virgulas (,).

   Exemplo 17.1. Usando Varios Valores

 USES=   bison perl

   Exemplo 17.2. Adicionando um Argumento

 USES=   tar:xz

   Exemplo 17.3. Adicionando Varios Argumentos

 USES=   drupal:7,theme

   Exemplo 17.4. Entrelac,ando Tudo Isso Junto

 USES=   pgsql:9.3+ cpe python:2.7,build

17.2. 7z

   Argumentos possiveis: (none), p7zip, partial

   Extrair usando 7z(1) ao inves de bsdtar(1) e definir EXTRACT_SUFX=.7z. A
   opc,ao p7zip forc,a uma dependencia do 7z a partir de archivers/p7zip se
   aquele do sistema base nao for capaz de extrair os arquivos. EXTRACT_SUFX
   nao e alterado se a opc,ao partial e usada, isso pode ser usado se o
   arquivo de distribuic,ao principal nao tiver extensao .7z.

17.3. ada

   Argumentos possiveis: (none), 5, 6

   Depende de um compilador capaz de usar Ada e define a variavel CC de
   acordo. O padrao e usar gcc 5 do ports. Use a opc,ao de versao :X para
   forc,ar a compilac,ao com uma versao diferente.

17.4. autoreconf

   Argumentos possiveis: (none), build

   Execute autoreconf. Ele encapsula os comandos aclocal, autoconf,
   autoheader, automake, autopoint e libtoolize. Cada comando aplica-se a
   ${AUTORECONF_WRKSRC} /configure.ac ou seu nome antigo
   ${AUTORECONF_WRKSRC}/configure.in. E se configure.ac define subdiretorios
   com seus proprios configure.ac usando AC_CONFIG_SUBDIRS, autoreconf ira
   recursivamente atualizar aqueles tambem. O argumento :build so adiciona
   dependencias de build-time sobre essas ferramentas, mas nao executa o
   autoreconf. Um port pode definir AUTORECONF_WRKSRC se WRKSRC nao contiver
   o caminho para o configure.ac.

17.5. blaslapack

   Argumentos possiveis: (none), atlas, netlib(padrao), gotoblas, openblas

   Adiciona dependencias das bibliotecas Blas / Lapack.

17.6. bdb

   Argumentos possiveis: (none), 48, 5(padrao), 6

   Adiciona uma dependencia `a biblioteca Berkeley DB. O padrao utiliza
   databases/db5. Tambem pode depender de databases/db48 ao usar o argumento
   :48 ou databases/db6 com :6. E possivel declarar um intervalo de valores
   aceitaveis, :48+ procura pela versao maior instalada e utiliza a 4.8 se
   nenhuma outra estiver instalada. INVALID_BDB_VER pode ser usado para
   especificar versoes que nao funcionam com este port. O framework expoe as
   seguintes variaveis ao port:

   BDB_LIB_NAME

           O nome da biblioteca Berkeley DB. Por exemplo, ao usar
           databases/db5, contem db-5.3.

   BDB_LIB_CXX_NAME

           O nome da biblioteca Berkeley DB C++. Por exemplo, ao usar
           databases/db5, contem db_cxx-5.3.

   BDB_INCLUDE_DIR

           A localizac,ao do diretorio incluso Berkeley DB. Por exemplo, ao
           usar databases/db5, ele ira conter ${LOCALBASE}/include/db5.

   BDB_LIB_DIR

           A localizac,ao do diretorio da biblioteca Berkeley DB. Por
           exemplo, ao usar databases/db5, contem ${LOCALBASE}/lib.

   BDB_VER

           A versao detectada de Berkeley DB. Por exemplo, se estiver usando
           USES=bdb:48+ e Berkeley DB 5 estiver instalado, ira conter 5.

  Importante:

   databases/db48 esta obsoleto e nao e suportado. Nao deve ser usado por
   nenhum port.

17.7. bison

   Argumentos possiveis: (none), build, run, both

   Utiliza devel/bison por padrao, sem argumentos ou com o argumento build,
   isso implica que bison seja uma dependencia de build-time, run implica
   como dependencia de run-time e both implica em dependencias build-time e
   run-time.

17.8. cabal

  Importante:

   Nao devem ser criados Ports de bibliotecas Haskell, veja Sec,ao 6.30,
   "Bibliotecas Haskell" para maiores informac,oes.

   Argumentos possiveis: (none), hpack

   Define valores e targets padroes usados para compilar software Haskell
   usando o Cabal. Uma dependencia de compilac,ao no port do compilador
   Haskell (GHC) e adicionada. Se o argumento hpack for fornecido, uma
   dependencia de compilac,ao do devel/hs-hpack sera adicionada e o hpack
   sera chamado na etapa de configurac,ao para gerar o arquivo .cabal.

   O framework fornece as seguintes variaveis:

   USE_CABAL

           Se o software usar dependencias Haskell, liste-as nesta variavel.
           Cada item deve estar presente no Hackage e ser listado no formato
           packagename-0.1.2. As dependencias podem ter revisoes,
           especificadas apos o simbolo _. A gerac,ao automatica de lista de
           dependencias e suportada, consulte Sec,ao 6.5.9, "Compilando
           Aplicac,oes Haskell com cabal".

   CABAL_FLAGS

           Lista de flags a serem passadas para o cabal-install durante o
           estagio de configurac,ao e compilac,ao. As flags sao passadas sem
           alterac,oes (verbatim).

   EXECUTABLES

           Lista de arquivos executaveis instalados pelo port. Valor padrao:
           ${PORTNAME}. Os itens desta lista sao adicionados automaticamente
           ao pkg-plist.

   SKIP_CABAL_PLIST

           Se definido, nao adicione itens ${EXECUTABLES} ao pkg-plist.

   opt_USE_CABAL

           Adiciona itens ao ${USE_CABAL}, dependendo da opc,ao opt.

   opt_EXECUTABLES

           Adiciona itens ao ${EXECUTABLES}, dependendo da opc,ao opt.

   opt_CABAL_FLAGS

           Se a opc,ao opt estiver ativada, acrescente o valor a
           ${CABAL_FLAGS}. Caso contrario, anexe -value para desativar a
           flag.

   FOO_DATADIR_VARS

           Para um executavel chamado FOO, liste os pacotes Haskell, cujos
           arquivos de dados devem estar acessiveis pelo executavel.

17.9. cargo

   Argumentos possiveis: (none)

   Utiliza Cargo para configurac,ao, compilac,ao e testes. Ele pode ser usado
   para portar aplicativos Rust que usam o sistema de build Cargo. Para obter
   mais informac,oes, consulte Sec,ao 6.5.6, "Compilando Aplicac,oes Rust com
   cargo".

17.10. charsetfix

   Argumentos possiveis: (none)

   Previne que o port instale arquivos charset.alias. Estes arquivos devem
   ser instalados apenas pelo converters/libiconv. CHARSETFIX_MAKEFILEIN pode
   ser definido para um caminho relativo ao WRKSRC se charset.alias nao for
   instalado pelo ${WRKSRC}/Makefile.in.

17.11. cmake

   Argumentos possiveis: (none), env, notall, noman

   Utiliza QMake para configurac,ao e compilac,ao.

   Por padrao, uma compilac,ao out-of-source e executada, deixando os fontes
   em WRKSRC livres de artefatos de compilac,ao. Com o argumento insource,
   uma compilac,ao in-source sera executada. A configurac,ao deste argumento
   deve ser a excec,ao quando uma compilac,ao regular out-of-source nao
   funcionar.

   Por padrao, o argumento Ninja e usado para a compilac,ao. Em alguns casos
   isso nao funciona corretamente. Com o argumento noninja, a compilac,ao ira
   usar o make para as compilac,oes. Ele so deve ser usado se uma compilac,ao
   baseada no Ninja nao funcionar.

   Com o argumento run, uma dependencia de execuc,ao e registrada alem de uma
   dependencia de compilac,ao.

   Para maiores informac,oes, veja Sec,ao 6.5.4, "Usando o cmake".

17.12. compiler

   Argumentos possiveis: (none), env (padrao, implicito) c++17-lang,
   c++14-lang, c++11-lang, gcc-c++11-lib, c++11-lib, c++0x, c11, openmp,
   nestedfct, features

   Determina qual compilador usar com base em qualquer um desejo. Use
   c++17-lang se o port precisar de um compilador compativel com C++17,
   c++14-lang se o port precisar de um compilador compativel com C++14,
   c++11-lang se o port precisar de um compilador compativel com C++11,
   gcc-c++11-lib se o port precisar do compilador g++ com uma biblioteca
   C++11, ou c++11-lib se o port precisar de uma biblioteca padrao
   C++11-ready. Se o port precisar de um compilador que compreenda as
   func,oes C++0X, C11, OpenMP ou func,oes aninhadas, os parametros
   correspondentes deverao ser usados.

   Use features para solicitar uma lista de recursos suportados pelo
   compilador padrao. Depois de incluir o arquivo bsd.port.pre.mk o port pode
   inspecionar os resultados usando estas variaveis:

     * COMPILER_TYPE: o compilador padrao no sistema, gcc ou clang

     * ALT_COMPILER_TYPE: o compilador alternativo no sistema, gcc ou clang.
       Apenas definido se dois compiladores estiverem presentes na base do
       sistema.

     * COMPILER_VERSION: os dois primeiros digitos da versao do compilador
       padrao.

     * ALT_COMPILER_VERSION: os dois primeiros digitos da versao do
       compilador alternativo, se presente.

     * CHOSEN_COMPILER_TYPE: o compilador escolhido, gcc ou clang

     * COMPILER_FEATURES: os recursos suportados pelo compilador padrao.
       Atualmente lista a biblioteca C++.

17.13. cpe

   Argumentos possiveis: (none)

   Inclui informac,oes da Common Platform Enumeration (CPE) no manifesto do
   pacote como uma string CPE 2.3 formatada. Veja as especificac,oes CPE para
   mais detalhes. Para adicionar informac,oes de CPE a um port, siga estas
   etapas:

    1. Procure pelo registro oficial CPE para o produto de software, usando o
       mecanismo de pesquisa CPE do NVD ou no dicionario oficial CPE (aviso,
       o arquivo XML e muito grande). Nunca crie os dados da CPE.

    2. Adicione cpe na variavel USES e compare o resultado de make -V CPE_STR
       com o registro no dicionario CPE. Continue com um passo de cada vez
       ate make -V CPE_STR ficar correto.

    3. Se o nome do produto (segundo campo, com o valor padrao para PORTNAME)
       estiver incorreto, defina CPE_PRODUCT.

    4. Se o nome do fornecedor (primeiro campo, com o valor padrao para
       CPE_PRODUCT) estiver incorreto, defina CPE_VENDOR.

    5. Se o campo de versao (terceiro campo, com o valor padrao para
       PORTVERSION) estiver incorreto, defina CPE_VERSION.

    6. Se o campo de atualizac,ao (quarto campo, valor padrao vazio) estiver
       incorreto, defina CPE_UPDATE.

    7. Se ainda nao estiver correto, verifique o arquivo Mk/Uses/cpe.mk para
       detalhes adicionais, ou entre em contato com o Ports Security Team
       <ports-secteam@FreeBSD.org>.

    8. Derive o maximo possivel do nome CPE a partir de variaveis
       &#8203;&#8203;existentes, tal como as variaveis PORTNAME e
       PORTVERSION. Use modificadores de variaveis &#8203;&#8203;para extrair
       as partes relevantes delas, em vez de colocar o nome direto no codigo.

    9. Sempre execute make -V CPE_STR e verifique a saida antes de fazer o
       commit de qualquer coisa que mude o PORTNAME ou PORTVERSION ou
       qualquer outra variavel que e usada para derivar a variavel CPE_STR.

17.14. cran

   Argumentos possiveis: (none), auto-plist, compiles

   Utiliza a Comprehensive R Archive Network. Especifique auto-plist para
   gerar automaticamente o arquivo pkg-plist. Especifique compiles se o port
   tiver codigo que precise ser compilado.

17.15. desktop-file-utils

   Argumentos possiveis: (none)

   Utiliza update-desktop-database a partir de devel/desktop-file-utils. Uma
   etapa extra de post-install sera executada sem interferir em nenhuma etapa
   de post-install que ja esteja no Makefile do port. Uma linha com
   @desktop-file-utils sera adicionada ao plist.

17.16. desthack

   Argumentos possiveis: (none)

   Altera o comportamento do GNU configure para suportar corretamente a
   variavel DESTDIR no caso do software original nao suportar.

17.17. display

   Argumentos possiveis: (none), ARGS

   Define um display environment virtual. Se a variavel de ambiente DISPLAY
   nao estiver definida, entao Xvfb e adicionado como uma dependencia de
   compilac,ao e a variavel CONFIGURE_ENV e estendida com o numero do port da
   instancia do Xvfb em execuc,ao no momento. O parametro ARGS e definido
   como install por padrao e controla a fase na qual se inicia e para a
   exibic,ao virtual.

17.18. dos2unix

   Argumentos possiveis: (none)

   O port tem arquivos com terminac,oes de linha no formato do DOS que
   precisam ser convertidos. Inumeras variaveis &#8203;&#8203;podem ser
   definidas para controlar quais arquivos serao convertidos. O padrao e
   converter todos arquivos, incluindo binarios. Veja Sec,ao 4.4.3,
   "Substituic,oes Automaticas Simples" para exemplos.

     * DOS2UNIX_REGEX: casa nomes de arquivos com base em uma expressao
       regular.

     * DOS2UNIX_FILES: casa com nomes de arquivos literais.

     * DOS2UNIX_GLOB: casa com nomes de arquivos baseados em um padrao glob.

     * DOS2UNX_WRKSRC: o diretorio onde iniciar as conversoes. O padrao e
       ${WRKSRC}.

17.19. drupal

   Argumentos possiveis: 7, module, theme

   Automatiza a instalac,ao de um port que e um tema ou modulo Drupal. Use
   com a versao Drupal que o port esta esperando. Por exemplo,
   USES=drupal:7,module diz que este port cria um modulo do Drupal 6. Um tema
   do Drupal 7 pode ser especificado com USES=drupal:7,theme.

17.20. fakeroot

   Argumentos possiveis: (none)

   Altera alguns comportamentos padrao dos sistemas de compilac,ao para
   permitir instalar como um usuario normal. Veja
   https://wiki.debian.org/FakeRoot para mais informac,oes sobre fakeroot.

17.21. fam

   Argumentos possiveis: (none), fam, gamin

   Usa um File Alteration Monitor como uma dependencia de biblioteca,
   devel/fam ou devel/gamin. Usuarios finais podem definir WITH_FAM_SYSTEM
   para especificar sua preferencia.

17.22. firebird

   Argumentos possiveis: (none), 25

   Adiciona uma dependencia da biblioteca client do banco de dados do
   Firebird.

17.23. fonts

   Argumentos possiveis: (none), fc, fcfontsdir(padrao), fontsdir, none

   Adiciona uma dependencia de tempo de execuc,ao nas ferramentas necessarias
   para registrar fontes. Dependendo do argumento, adiciona entradas para o
   plist @fc ${FONTSDIR}, @fcfontsdir ${FONTSDIR}, @fontsdir ${FONTSDIR}, ou
   nenhuma entrada se o argumento for none. Valor padrao de FONTSDIR e
   ${PREFIX}/share/fonts/${FONTNAME} e FONTNAME e ${PORTNAME}. Adiciona
   FONTSDIR para PLIST_SUB e SUB_LIST

17.24. fortran

   Argumentos possiveis: gcc (padrao)

   Usa o compilador GNU Fortran.

17.25. fuse

   Argumentos possiveis: 2 (padrao), 3

   O port ira depender da biblioteca FUSE e ira manipular a dependencia do
   modulo do kernel dependendo da versao do FreeBSD.

17.26. gem

   Argumentos possiveis: (none), noautoplist

   Manipula a compilac,ao com RubyGems. Se noautoplist for usado, a lista de
   empacotameno nao sera gerada automaticamente.

17.27. gettext

   Argumentos possiveis: (none)

   Descontinuado. Incluira ambos gettext-runtime e gettext-tools.

17.28. gettext-runtime

   Argumentos possiveis: (none), lib (padrao),build, run

   Utiliza devel/gettext-runtime. Por padrao, sem argumentos ou com o
   argumento lib, implica uma dependencia da biblioteca libintl.so. build e
   run implicam, respectivamente, uma dependencia de gettext em build-time e
   run-time.

17.29. gettext-tools

   Argumentos possiveis: (none), build (padrao),run

   Utiliza devel/gettext-tools. Por padrao, sem argumento ou com o argumento
   build, uma dependencia de msgfmt em build-time e registrada. Com o
   argumento run, uma dependencia em run-time e registrada.

17.30. ghostscript

   Argumentos possiveis: X, build, run, nox11

   Uma versao X especifica pode ser usada. Versoes possiveis sao 7, 8, 9 e
   agpl (padrao). nox11 indica que a versao -nox11 do port e necessaria.
   build e run adicionam dependencias de Ghostscript em build-time e
   run-time. O padrao e ambas as dependencias, build-time e run-time.

17.31. gl

   Argumentos possiveis: (none)

   Fornece uma maneira facil para depender dos componentes GL. Os componentes
   devem ser listados na variavel USE_GL. Os componentes disponiveis sao:

   egl

           adiciona uma dependencia de biblioteca libEGL.so de
           graphics/mesa-libs

   gbm

           Adiciona uma dependencia de biblioteca libgbm.so de
           graphics/mesa-libs

   gl

           Adiciona uma dependencia de biblioteca libGL.so de
           graphics/mesa-libs

   glesv2

           Adiciona uma dependencia de biblioteca libGLESv2.so de
           graphics/mesa-libs

   glew

           Adiciona uma dependencia de biblioteca libGLEW.so de graphics/glew

   glu

           Adiciona uma dependencia de biblioteca libGLU.so de
           graphics/libGLU

   glut

           Adiciona uma dependencia de biblioteca libglut.so de
           graphics/freeglut

17.32. gmake

   Argumentos possiveis: (none)

   Utiliza devel/gmake como uma dependencia em run-time e configura o
   ambiente para usar gmake como make padrao para a compilac,ao.

17.33. gnome

   Argumentos possiveis: (none)

   Fornece uma maneira facil para depender dos componentes do GNOME. Os
   componentes devem ser listados na variavel USE_GNOME. Os componentes
   disponiveis sao:

     * atk

     * atkmm

     * cairo

     * cairomm

     * dconf

     * esound

     * evolutiondataserver3

     * gconf2

     * gconfmm26

     * gdkpixbuf

     * gdkpixbuf2

     * glib12

     * glib20

     * glibmm

     * gnomecontrolcenter3

     * gnomedesktop3

     * gnomedocutils

     * gnomemenus3

     * gnomemimedata

     * gnomeprefix

     * gnomesharp20

     * gnomevfs2

     * gsound

     * gtk-update-icon-cache

     * gtk12

     * gtk20

     * gtk30

     * gtkhtml3

     * gtkhtml4

     * gtkmm20

     * gtkmm24

     * gtkmm30

     * gtksharp20

     * gtksourceview

     * gtksourceview2

     * gtksourceview3

     * gtksourceviewmm3

     * gvfs

     * intlhack

     * intltool

     * introspection

     * libartlgpl2

     * libbonobo

     * libbonoboui

     * libgda5

     * libgda5-ui

     * libgdamm5

     * libglade2

     * libgnome

     * libgnomecanvas

     * libgnomekbd

     * libgnomeprint

     * libgnomeprintui

     * libgnomeui

     * libgsf

     * libgtkhtml

     * libgtksourceviewmm

     * libidl

     * librsvg2

     * libsigc++12

     * libsigc++20

     * libwnck

     * libwnck3

     * libxml++26

     * libxml2

     * libxslt

     * metacity

     * nautilus3

     * orbit2

     * pango

     * pangomm

     * pangox-compat

     * py3gobject3

     * pygnome2

     * pygobject

     * pygobject3

     * pygtk2

     * pygtksourceview

     * referencehack

     * vte

     * vte3

   A dependencia padrao e em built-time e run-time, pode ser alterada com
   :build ou :run. Por exemplo:

 USES=           gnome
 USE_GNOME=      gnomemenus3:build intlhack

   Veja Sec,ao 6.10, "Usando o GNOME" para maiores informac,oes.

17.34. go

  Importante:

   Nao devem ser criados Ports de bibliotecas Go, veja Sec,ao 6.29,
   "Bibliotecas Go" para maiores informac,oes.

   Argumentos possiveis: (none), modules, no_targets, run

   Define valores e targets padrao usados para compilar aplicac,oes Go. Uma
   dependencia de compilac,ao no port do compilador Go selecionada via
   GO_PORT e adicionada. Por padrao, a compilac,ao e executada no modo
   GOPATH. Se o software Go usar modulos, o modo de reconhecimento de modulos
   pode ser ativado com o argumento modules. no_targets ira configurar o
   ambiente de compilac,ao com GO_ENV, GO_BUILDFLAGS mas ira pular os targets
   post-extract e do-{build,install,test}. run tambem adicionara uma
   dependencia de tempo de execuc,ao do que estiver em GO_PORT.

   O processo de compilac,ao e controlado por varias variaveis:

   GO_PKGNAME

           O nome do pacote Go ao compilar no modo GOPATH. Este e o diretorio
           que sera criado em ${GOPATH}/src. Se nao estiver definido
           explicitamente e GH_SUBDIR ou GL_SUBDIR estiverem presente, o
           valor GO_PKGNAME sera inferido deles. Isso nao e necessario quando
           compilado no modo de reconhecimento de modulos.

   GO_TARGET

           Os pacotes a serem compilados. O valor padrao e ${GO_PKGNAME}.
           GO_TARGET tambem pode ser uma tupla na forma package:path onde
           path pode ser um nome de arquivo simples ou um caminho completo
           comec,ando com ${PREFIX}.

   GO_TESTTARGET

           Os pacotes para testar. O valor padrao e ./... (o pacote atual e
           todos os subpacotes).

   CGO_CFLAGS

           Valores adicionais da variavel CFLAGS a serem passados
           &#8203;&#8203;para o compilador C pelo Go.

   CGO_LDFLAGS

           Valores adicionais da variavel LDFLAGS a serem passados
           &#8203;&#8203;para o compilador C pelo Go.

   GO_BUILDFLAGS

           Argumentos de compilac,ao adicionais para passar para o go build.

   GO_TESTFLAGS

           Argumentos de compilac,ao adicionais para passar para o go test.

   GO_PORT

           O port do compilador Go a ser utilizado. Por padrao e lang/go mas
           pode ser definido para lang/go-devel no make.conf para testes de
           futuras versoes Go.

  Atenc,ao:

           Esta variavel nao deve ser definida por ports individuais!

   Ver Sec,ao 6.5.8, "Compilando Aplicac,oes Go" para exemplos de uso.

17.35. gperf

   Argumentos possiveis: (none)

   Adiciona uma dependencia devel/gperf em buildtime se gperf nao estiver
   presente no sistema base.

17.36. grantlee

   Argumentos possiveis: 5, selfbuild

   Manipula a dependencia em Grantlee. Especifique 5 para depender da versao
   baseada no Qt5, devel/grantlee5. selfbuild e usado internamente pelo
   devel/grantlee5 para obter os numeros de suas versoes.

17.37. groff

   Argumentos possiveis: build, run, both

   Registra uma dependencia de textproc/groff se nao estiver presente no
   sistema base.

17.38. gssapi

   Argumentos possiveis: (none), base (padrao), heimdal, mit, flags,
   bootstrap

   Manipular as dependencias necessarias para os consumers do GSS-API. Apenas
   as bibliotecas que fornecem os mecanismos do Kerberos estao disponiveis.
   Por padrao, ou definido como base, a biblioteca GSS-API do sistema base e
   usada. Tambem pode ser definido para heimdal para usar security/heimdal ou
   mit para usar security/krb5.

   Quando a instalac,ao local do Kerberos nao esta em LOCALBASE defina a
   variavel HEIMDAL_HOME (para heimdal) ou a variavel KRB5_HOME (para krb5)
   para a instalac,ao local do Kerberos.

   Essas variaveis &#8203;&#8203;sao exportadas para os ports para serem
   usadas:

     * GSSAPIBASEDIR

     * GSSAPICPPFLAGS

     * GSSAPIINCDIR

     * GSSAPILDFLAGS

     * GSSAPILIBDIR

     * GSSAPILIBS

     * GSSAPI_CONFIGURE_ARGS

   As opc,oes de flags podem estar lado a lado com base, heimdal ou mit para
   adicionar automaticamente GSSAPICPPFLAGS, GSSAPILDFLAGS e GSSAPILIBS para
   CFLAGS, LDFLAGS e LDADD, respectivamente. Por exemplo, use base,flags.

   A opc,ao bootstrap e um prefixo especial apenas para o uso do
   security/krb5 e security/heimdal. Por exemplo, use bootstrap,mit.

   Exemplo 17.5. Uso Tipico

 OPTIONS_SINGLE= GSSAPI
 OPTIONS_SINGLE_GSSAPI=  GSSAPI_BASE GSSAPI_HEIMDAL GSSAPI_MIT GSSAPI_NONE

 GSSAPI_BASE_USES=       gssapi
 GSSAPI_BASE_CONFIGURE_ON=       --with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}
 GSSAPI_HEIMDAL_USES=    gssapi:heimdal
 GSSAPI_HEIMDAL_CONFIGURE_ON=    --with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}
 GSSAPI_MIT_USES=        gssapi:mit
 GSSAPI_MIT_CONFIGURE_ON=        --with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}
 GSSAPI_NONE_CONFIGURE_ON=       --without-gssapi

17.39. horde

   Argumentos possiveis: (none)

   Adicionar dependencias de builtime e runtime em devel/pear-channel-horde.
   Outras dependencias Horde podem ser adicionadas com USE_HORDE_BUILD e
   USE_HORDE_RUN. Veja Sec,ao 6.16.4.1, "Modulos Horde" para maiores
   informac,oes.

17.40. iconv

   Argumentos possiveis: (none), lib, build, patch, translit, wchar_t

   Utilizac,ao de func,oes iconv, seja do port converters/libiconv como uma
   dependencia de buil-time e run-time, ou do sistema base em um 10-CURRENT
   apos um iconv nativo ser comitado em 254273. Por padrao, sem argumentos ou
   com o argumento lib, implica em iconv com dependencias de build-time e
   run-time. build implica uma dependencia de build-time e patch implica uma
   dependencia de patch-time. Se o port usa extensoes iconv WCHAR_T ou
   //TRANSLIT , adicione os argumentos relevantes para que o iconv correto
   seja usado. Para mais informac,oes, veja Sec,ao 6.23, "Usando iconv".

17.41. imake

   Argumentos possiveis: (none), env, notall, noman

   Adiciona devel/imake como uma dependencia de built-time e executa xmkmf -a
   durante o estagio configure. Se o argumento env e passado, o target
   configure nao e definido. Se a flag -a for um problema para o port,
   adicione o argumento notall. E se xmkmf nao gerar um target install.man,
   adicione o argumento noman.

17.42. kde

   Argumentos possiveis: 5

   Adiciona dependencia de componentes KDE. Veja Sec,ao 6.13, "Usando o KDE"
   para maiores informac,oes.

17.43. kmod

   Argumentos possiveis: (none), debug

   Preenche o boilerplate para os ports de modulo do kernel, atualmente:

     * Adiciona kld em CATEGORIES.

     * Define SSP_UNSAFE.

     * Defina IGNORE se as fontes do kernel nao forem encontradas em
       SRC_BASE.

     * Define KMODDIR para /boot/modules por padrao, adiciona isso para a
       variavel PLIST_SUB e MAKE_ENV, e o cria apos a instalac,ao. Se a
       variavel KMODDIR esta definida para o /boot/kernel, ela sera reescrita
       para /boot/modules. Isso evita quebrar pacotes ao atualizar o kernel
       devido ao /boot/kernel ser renomeado para /boot/kernel.old no
       processo.

     * Manipula modulos cross-referencing do kernel acerca da instalac,ao e
       desinstalac,ao, usando @kld.

     * Se o argumento debug e passado, o port pode instalar uma versao de
       debug do modulo no arquivo KERN_DEBUGDIR/KMODDIR. Por padrao, a
       variavel KERN_DEBUGDIR e copiada da DEBUGDIR e definido para
       /usr/lib/debug. O framework ira cuidar da criac,ao e remoc,ao de
       quaisquer diretorios necessarios.

17.44. lha

   Argumentos possiveis: (none)

   Define EXTRACT_SUFX para .lzh

17.45. libarchive

   Argumentos possiveis: (none)

   Registra uma dependencia de archivers/libarchive. Quaisquer ports
   dependendo de libarchive deve incluir USES=libarchive.

17.46. libedit

   Argumentos possiveis: (none)

   Registra uma dependencia de devel/libedit. Quaisquer ports dependendo de
   libedit devem incluir USES=libedit.

17.47. libtool

   Argumentos possiveis: (none), keepla, build

   Scripts libtool de patches. Isso deve ser adicionado a todos os ports que
   usam libtool. O argumento keepla pode ser usado para manter arquivos .la.
   Alguns ports nao vem com sua propria copia da libtool e precisam de uma
   dependencia de devel/libtool em build time, use o argumento :build para
   adicionar essa dependencia.

17.48. linux

   Argumentos possiveis: c6, c7

   Framework de compatibilidade de ports com Linux. Especifique c6 para
   depender de pacotes do CentOS 6. Especifique c7 para depender de pacotes
   do CentOS 7. Os pacotes disponiveis sao:

     * allegro

     * alsa-plugins-oss

     * alsa-plugins-pulseaudio

     * alsalib

     * atk

     * avahi-libs

     * base

     * cairo

     * cups-libs

     * curl

     * cyrus-sasl2

     * dbusglib

     * dbuslibs

     * devtools

     * dri

     * expat

     * flac

     * fontconfig

     * gdkpixbuf2

     * gnutls

     * graphite2

     * gtk2

     * harfbuzz

     * jasper

     * jbigkit

     * jpeg

     * libasyncns

     * libaudiofile

     * libelf

     * libgcrypt

     * libgfortran

     * libgpg-error

     * libmng

     * libogg

     * libpciaccess

     * libsndfile

     * libsoup

     * libssh2

     * libtasn1

     * libthai

     * libtheora

     * libv4l

     * libvorbis

     * libxml2

     * mikmod

     * naslibs

     * ncurses-base

     * nspr

     * nss

     * openal

     * openal-soft

     * openldap

     * openmotif

     * openssl

     * pango

     * pixman

     * png

     * pulseaudio-libs

     * qt

     * qt-x11

     * qtwebkit

     * scimlibs

     * sdl12

     * sdlimage

     * sdlmixer

     * sqlite3

     * tcl85

     * tcp_wrappers-libs

     * tiff

     * tk85

     * ucl

     * xorglibs

17.49. localbase

   Argumentos possiveis: (none), ldflags

   Garante que as bibliotecas de dependencias em LOCALBASE sejam usadas
   &#8203;&#8203;em vez das do sistema base. Especifique ldflags para
   adicionar -L${LOCALBASE}/lib para a variavel LDFLAGS ao inves de LIBS.
   Ports que dependem de bibliotecas que tambem estao presentes no sistema
   base devem usar isso. Tambem e usado internamente por algumas outras
   variaveis USES.

17.50. lua

   Argumentos possiveis: (none), XY, XY+, -XY, XY-ZA, module, flavors, build,
   run, env

   Adiciona uma dependencia de Lua. Por padrao, esta e uma dependencia de
   biblioteca, a menos que seja invalidado por uma opc,ao build ou run. A
   opc,ao env evita a adic,ao de qualquer dependencia, enquanto ainda define
   todas as variaveis usuais.

   A versao padrao e definida pelo mecanismo usual DEFAULT_VERSIONS, a menos
   que uma versao ou intervalo de versoes seja especificado como um
   argumento, por exemplo, 51 or 51-53.

   Os aplicativos que usam Lua sao normalmente compilados para apenas uma
   unica versao do Lua. No entanto, os modulos de biblioteca destinados a
   serem carregados pelo codigo Lua devem usar a opc,ao module para compilar
   com varios flavors.

   Para maiores informac,oes, veja Sec,ao 6.22, "Usando Lua".

17.51. lxqt

   Argumentos possiveis: (none)

   Manipular dependencias para o LXQt Desktop Environment. Use a variavel
   USE_LXQT para selecionar os componentes necessarios para o port. Veja
   Sec,ao 6.14, "Usando o LXQt" para maiores informac,oes.

17.52. makeinfo

   Argumentos possiveis: (none)

   Adiciona uma dependencia de build-time em makeinfo se o mesmo nao estiver
   presente no sistema base.

17.53. makeself

   Argumentos possiveis: (none)

   Indica que os arquivos de distribuic,ao sao archives makeself e define as
   dependencias apropriadas.

17.54. mate

   Argumentos possiveis: (none)

   Fornece uma maneira facil para depender de componentes do MATE. Os
   componentes devem ser listados em USE_MATE. Os componentes disponiveis
   sao:

     * autogen

     * caja

     * common

     * controlcenter

     * desktop

     * dialogs

     * docutils

     * icontheme

     * intlhack

     * intltool

     * libmatekbd

     * libmateweather

     * marco

     * menus

     * notificationdaemon

     * panel

     * pluma

     * polkit

     * session

     * settingsdaemon

   A dependencia padrao e em built-time e run-time, pode ser alterada com
   :build ou :run. Por exemplo:

 USES=           mate
 USE_MATE=       menus:build intlhack

17.55. meson

   Argumentos possiveis: (none)

   Fornece suporte para projetos baseados no Meson. Para maiores
   informac,oes, consulte Sec,ao 6.5.7, "Usando meson".

17.56. metaport

   Argumentos possiveis: (none)

   Define as seguintes variaveis &#8203;&#8203;para facilitar a criac,ao de
   um metaport: MASTER_SITES, DISTFILES, EXTRACT_ONLY, NO_BUILD, NO_INSTALL,
   NO_MTREE, NO_ARCH.

17.57. mysql

   Argumentos possiveis: (none), version, client (padrao), server, embedded

   Fornece suporte para o MySQL. Se nenhuma versao for informada, tenta
   encontrar a versao atual instalada. Fall back para a versao padrao,
   MySQL-5.6. As possiveis versoes sao 55, 55m, 55p, 56, 56p, 56w, 57, 57p,
   80, 100m, 101m e 102m. Os sufixos m e p sao para MariaDB e Percona,
   variantes do MySQL. server e embbeded adicionam uma dependencia de build-
   e run-time do servidor MySQL. Ao usar server ou embbeded, e adicionado
   client para tambem adicionar uma dependencia no arquivo libmysqlclient.so.
   Um port pode definir IGNORE_WITH_MYSQL se algumas versoes nao forem
   suportadas.

   O framework define a variavel MYSQL_VER para a versao detectada do MySQL.

17.58. mono

   Argumentos possiveis: (none), nuget

   Adiciona uma dependencia no framework Mono (atualmente apenas C#)
   definindo as dependencias apropriadas.

   Especifique nuget quando o port usa pacotes nuget. NUGET_DEPENDS precisa
   ser definido com os nomes e versoes dos pacotes nuget no formato
   name=version. Uma pacote de origem opcional pode ser adicionado usando
   name=version:origin.

   O target auxiliar, buildnuget, exibira o conteudo da variavel
   NUGET_DEPENDS com base no arquivo packages.config fornecido.

17.59. motif

   Argumentos possiveis: (none)

   Utiliza x11-toolkits/open-motif como uma dependencia de biblioteca. Os
   usuarios finais podem definir WANT_LESSTIF para a dependencia estar em
   x11-toolkits/lesstif ao inves de x11-toolkits/open-motif.

17.60. ncurses

   Argumentos possiveis: (none), base, port

   Utiliza ncurses, e faz com que algumas variaveis &#8203;&#8203;uteis sejam
   definidas.

17.61. ninja

   Argumentos possiveis: (none)

   Utiliza ninja para compilar o port.

17.62. objc

   Argumentos possiveis: (none)

   Adiciona dependencias de objetive C (compilador, biblioteca de runtime) se
   o sistema base nao suportar isto.

17.63. openal

   Argumentos possiveis: al, soft (padrao), yes, alut

   Utiliza OpenAL. O backend pode ser especificado, com a implementac,ao do
   software como padrao. O usuario pode especificar um backend preferido com
   WANT_OPENAL. Os valores validos para este manipulador sao soft (padrao) e
   si.

17.64. pathfix

   Argumentos possiveis: (none)

   Procura pelos arquivos Makefile.in e configure na variavel PATHFIX_WRKSRC
   (padrao e WRKSRC) e corrige os caminhos comuns para garantir que eles
   respeitem a hierarquia do FreeBSD. Por exemplo, ele corrige o diretorio de
   instalac,ao dos arquivos .pc do pkgconfig para
   ${PREFIX}/libdata/pkgconfig. Se o port usa USES=autoreconf, Makefile.am
   sera adicionado automaticamente a PATHFIX_MAKEFILEIN.

   Se o port tem definido USES=cmake ele vai procurar pelo arquivo
   CMakeLists.txt dentro da variavel PATHFIX_WRKSRC. Se necessario, esse nome
   de arquivo padrao pode ser alterado com PATHFIX_CMAKELISTSTXT.

17.65. pear

   Argumentos possiveis: env

   Adiciona uma dependencia do devel/pear. Ele ira configurar o comportamento
   padrao do software usando o Repositorio de Extensao e Aplicativos do PHP.
   O uso do argumento env apenas configura as variaveis de ambiente PEAR.
   Veja Sec,ao 6.16.4, "Modulos PEAR" para maiores informac,oes.

17.66. perl5

   Argumentos possiveis: (none)

   Depende do Perl. A configurac,ao e feita usando a variavel USE_PERL5.

   USE_PERL5 pode conter as fases que precisam usar Perl, pode serextract,
   patch, build, run ou test.

   USE_PERL5 tambem pode conter configure, modbuild ou modbuildtiny quando
   Makefile.PL, Build.PL ou Modulo::Build::Tiny's, flavor de Build.PL e
   necessario.

   O padrao de USE_PERL5 e build run. Ao usar configure, modbuild ou
   modbuildtiny, uso de build e run sao implicitos.

   Veja Sec,ao 6.8, "Usando Perl" para maiores informac,oes.

17.67. pgsql

   Argumentos possiveis: (none), X.Y, X.Y+, X.Y-, X.Y-Z.A

   Fornece suporte para o PostgreSQL. O mantenedor do port pode definir a
   versao requisitada. Podem ser especificadas versoes minima e maxima ou um
   intervalo; por exemplo, 9.0-, 8.4+, 8.4-9.2.

   Por padrao, a dependencia adicionada sera o cliente, mas se o port exigir
   componentes adicionais, isso podera ser feito usando
   WANT_PGSQL=component[:target]; por exemplo, WANT_PGSQL=server:configure
   pltcl plperl. Os componentes disponiveis sao:

     * client

     * contrib

     * docs

     * pgtcl

     * plperl

     * plpython

     * pltcl

     * server

17.68. php

   Argumentos possiveis: (none), phpize, ext, zend, build, cli, cgi, mod,
   web, embed, pecl, flavors, noflavors

   Fornece suporte para o PHP. Adiciona uma dependencia de run-time na versao
   padrao do PHP, lang/php56.

   phpize

           Utilizado para compilar uma extensao do PHP. Habilita flavors.

   ext

           Usado para compilar, instalar e registrar uma extensao do PHP.
           Habilita flavors.

   zend

           Usado para criar, instalar e registrar uma extensao do Zend.
           Habilita flavors.

   build

           Define PHP tambem como uma dependencia de build-time.

   cli

           Precisa da versao CLI do PHP.

   cgi

           Precisa da versao CGI do PHP.

   mod

           Precisa do modulo Apache para o PHP.

   web

           Precisa do modulo Apache ou a versao CGI do PHP.

   embed

           Precisa da versao da biblioteca embarcada do PHP.

   pecl

           Fornece padroes para baixar extensoes PHP do repositorio PECL.
           Habilita flavors.

   flavors

           Habilita a gerac,ao de PHP flavors automatico. Flavors serao
           gerados para todas as versoes do PHP, exceto as presentes na
           variavel IGNORE_WITH_PHP.

   noflavors

           Desativa a gerac,ao automatica de flavors do PHP. Deve apenas ser
           usado com extensoes fornecidas pelo proprio PHP.

   Variaveis &#8203;&#8203;sao usadas para especificar quais modulos PHP sao
   necessarios, bem como qual versao do PHP sao suportadas.

   USE_PHP

           A lista das extensoes PHP requisitadas em run-time. Adicione
           :build ao nome da extensao para adicionar uma dependencia em
           build-time. Exemplo: pcre xml:build gettext

   IGNORE_WITH_PHP

           O port nao funciona com a versao do PHP fornecida. Para possiveis
           valores, observe o conteudo da variavel _ALL_PHP_VERSIONS no
           arquivo Mk/Uses/php.mk.

   Ao compilar uma extensao do PHP ou Zend com :ext ou :zend, estas variaveis
   &#8203;&#8203;podem ser definidas:

   PHP_MODNAME

           O nome da extensao do PHP ou Zend. O valor padrao e ${PORTNAME}.

   PHP_HEADER_DIRS

           Uma lista de subdiretorios dos quais instalar arquivos header. O
           framework sempre ira instalar os arquivos header que estao
           presentes no mesmo diretorio que a extensao.

   PHP_MOD_PRIO

           A prioridade na qual carregar a extensao. E um numero entre 00 e
           99.

           Para extensoes que nao dependem de nenhuma extensao, a prioridade
           e definida automaticamente como 20, para extensoes que dependem de
           outra extensao, a prioridade e definida automaticamente como 30.
           Algumas extensoes podem precisar ser carregadas antes de todas as
           outras extensoes, por exemplo www/php56-opcache. Algumas podem
           precisar ser carregadas apos uma extensao com prioridade de 30.
           Nesse caso, adicione PHP_MOD_PRIO=XX no Makefile do port. Por
           exemplo:

 USES=           php:ext
 USE_PHP=        wddx
 PHP_MOD_PRIO=   40

   Estas variaveis &#8203;&#8203;estao disponiveis para uso em PKGNAMEPREFIX
   ou PKGNAMESUFFIX:

   PHP_PKGNAMEPREFIX

           Contem phpXY- onde XY e a versao do PHP atual. Use com modulos e
           extensoes PHP.

   PHP_PKGNAMESUFFIX

           Contem -phpXY onde XY e a versao do PHP atual do flavor. Use com
           aplicativos PHP.

   PECL_PKGNAMEPREFIX

           Contem phpXY-pecl onde XY e a versao atual do PHP do flavor. Usar
           com modulos PECL.

  Importante:

   Com flavors, todas as extensoes PHP, extensoes PECL, modulos PEAR devem
   ter um nome de pacote diferente, entao todos devem usar uma dessas tres
   variaveis &#8203;&#8203;em suas variaveis PKGNAMEPREFIX ou PKGNAMESUFFIX.

17.69. pkgconfig

   Argumentos possiveis: (none), build (padrao), run, both

   Utiliza devel/pkgconf. Sem argumentos ou com o argumento build, implica em
   pkg-config como uma dependencia de build-time. run implica em uma
   dependencia em run-time e both implica em dependencias de run-time e
   build-time.

17.70. pure

   Argumentos possiveis: (none), ffi

   Utiliza lang/pure. Usado largamente para build relacionado com ports pure.
   Com o argumento ffi, isso implica em devel/pure-ffi como uma dependencia
   em run-time.

17.71. pyqt

   Argumentos possiveis: (none), 4, 5

   Utiliza PyQt. Se o port e parte do proprio PyQT, defina PYQT_DIST. Use a
   variavel USE_PYQT para selecionar os componentes que o port precisa. Os
   componentes disponiveis sao:

     * core

     * dbus

     * dbussupport

     * demo

     * designer

     * designerplugin

     * doc

     * gui

     * multimedia

     * network

     * opengl

     * qscintilla2

     * sip

     * sql

     * svg

     * test

     * webkit

     * xml

     * xmlpatterns

   Estes componentes so estao disponiveis com PyQT4:

     * assistant

     * declarative

     * help

     * phonon

     * script

     * scripttools

   Estes componentes so estao disponiveis com PyQT5:

     * multimediawidgets

     * printsupport

     * qml

     * serialport

     * webkitwidgets

     * widgets

   A dependencia padrao para cada componente sao build e run-time, para
   selecionar apenas build ou run, adicione _build ou _run para o nome do
   componente. Por exemplo:

 USES=           pyqt
 USE_PYQT=       core doc_build designer_run

17.72. python

   Argumentos possiveis: (none), XY, X.Y+, -XY, XY-ZA, patch, build, run,
   test

   Utiliza Python. Uma versao suportada ou um intervalo de versoes podem ser
   especificados. Se o Python for necessario apenas no momento de build,
   run-time ou para os testes, ele pode ser definido como uma dependencia de
   build, run ou teste com build, run ou test. Se o Python tambem for
   necessario durante a fase de patch, use patch. Veja Sec,ao 6.17, "Usando
   Python" para maiores informac,oes.

   PYTHON_NO_DEPENDS=yes pode ser usado quando as variaveis
   &#8203;&#8203;exportadas pelo framework serem necessarias, mas uma
   dependencia de Python nao. Pode acontecer quando usado com
   USES=shebangfix, e o objetivo e apenas consertar os shebangs, mas nao
   adicionar uma dependencia do Python.

17.73. qmail

   Argumentos possiveis: (none), build, run, both, vars

   Utiliza mail/qmail. Com o argumento build, implica no qmail como uma
   dependencia de build-time. run implica em uma dependencia de run-time.
   Usando nenhum argumento ou o argumento both implica em dependencias de
   run-time e build-time. vars so ira definir variaveis &#8203;&#8203;QMAIL
   para o port usar.

17.74. qmake

   Argumentos possiveis: (none), norecursive, outsource, no_env, no_configure

   Utiliza QMake para configurac,ao. Para mais informac,oes, veja
   Sec,ao 6.12.3, "Usando qmake".

17.75. qt

   Argumentos possiveis: 5, no_env

   Adiciona dependencia de componentes Qt. no_env e passado diretamente para
   USES= qmake. Veja Sec,ao 6.12, "Usando o Qt" para maiores informac,oes.

17.76. qt-dist

   Argumentos possiveis: (none) ou 5 e (none) ou um de 3d, activeqt,
   androidextras, base, canvas3d, charts, connectivity, datavis3d,
   declarative, doc, gamepad, graphicaleffects, imageformats, location,
   macextras, multimedia, networkauth, purchasing, quickcontrols2,
   quickcontrols, remoteobjects, script, scxml, sensors, serialbus,
   serialport, speech, svg, tools, translations, virtualkeyboard, wayland,
   webchannel, webengine, websockets, webview, winextras, x11extras,
   xmlpatterns

   Fornece suporte para a compilac,ao de componentes Qt 5. Ele cuida da
   definic,ao do ambiente de configurac,ao apropriado para o port compilar.

   Exemplo 17.6. Compilando Componentes do Qt 5

   O port e o componente networkauth do Qt 5, que faz parte do arquivo de
   distribuic,ao networkauth.

 PORTNAME=       networkauth
 DISTVERSION=    ${QT5_VERSION}

 USES=           qt-dist:5

   Se PORTNAME nao corresponder ao nome do componente, ele podera ser passado
   como argumento em qt-dist.

   Exemplo 17.7. Compilando Componentes do Qt 5 com Nomes Diferentes

   O port e o componente gui do Qt 5, que faz parte do arquivo de
   distribuic,ao base.

 PORTNAME=       gui
 DISTVERSION=    ${QT5_VERSION}

 USES=           qt-dist:5,base

17.77. readline

   Argumentos possiveis: (none), port

   Usa readline como uma dependencia de biblioteca e define CPPFLAGS e
   LDFLAGS como necessarios. Se o argumento port e usado ou se readline nao
   estiver presente no sistema base, adiciona uma dependencia em
   devel/readline

17.78. samba

   Possiveis argumentos: build, env, lib, run

   Manipula dependencias do Samba. env nao ira adicionar qualquer dependencia
   e apenas ira configurar as variaveis. build e run irao adicionar
   dependencias de run-time e build-time de smbd. lib ira adicionar uma
   dependencia em libsmbclient.so. As variaveis &#8203;&#8203;que sao
   exportadas sao:

   SAMBAPORT

           A origem do port padrao Samba.

   SAMBAINCLUDES

           A localizac,ao dos arquivos header do Samba.

   SAMBALIBS

           O diretorio onde as bibliotecas compartilhadas do Samba estao
           disponiveis.

17.79. scons

   Argumentos possiveis: (none)

   Fornece suporte para o uso do devel/scons. Veja Sec,ao 6.5.5, "Usando
   scons" para maiores informac,oes.

17.80. shared-mime-info

   Argumentos possiveis: (none)

   Utiliza update-mime-database a partir de misc/shared-mime-info. Este uses
   irao adicionar automaticamente uma etapa de post-install de tal forma que
   o proprio port ainda possa especificar sua propria etapa de post-install,
   se necessario. Tambem adiciona uma entrada @shared-mime-info para o plist.

17.81. shebangfix

   Argumentos possiveis: (none)

   Muitos softwares usam locais incorretos para interpretadores de scripts,
   principalmente /usr/bin/perl e /bin/bash. A macro shebangfix corrige
   linhas shebang em scripts listados em SHEBANG_REGEX, SHEBANG_GLOB ou
   SHEBANG_FILES.

   SHEBANG_REGEX

           Contem uma expressao regular estendida e e usado com o argumento
           -iregex do find(1). Veja Exemplo 17.11, "USES=shebangfix com a
           variavel SHEBANG_REGEX".

   SHEBANG_GLOB

           Contem uma lista de padroes usados com o argumento -name do
           find(1). Veja Exemplo 17.12, "USES=shebangfix com a variavel
           SHEBANG_GLOB".

   SHEBANG_FILES

           Contem uma lista de arquivos ou globs sh(1). A macro shebangfix e
           executada a partir de ${WRKSRC}, assim SHEBANG_FILES pode conter
           caminhos relativos a ${WRKSRC}. Ele tambem pode lidar com caminhos
           absolutos se arquivos fora de ${WRKSRC} requisitarem uma
           correc,ao. Veja Exemplo 17.13, "USES=shebangfix com a variavel
           SHEBANG_FILES".

   Atualmente Bash, Java, Ksh, Lua, Perl, PHP, Python, Rubi, Tcl e Tk sao
   suportados por padrao.

   Aqui estao tres variaveis de configurac,ao:

   SHEBANG_LANG

           A lista de interpretadores suportados.

   interp_CMD

           O caminho para o interpretador de comandos no FreeBSD. O valor
           padrao e ${LOCALBASE}/bin/interp.

   interp_OLD_CMD

           A lista de invocac,oes erradas de interpretadores. Estes sao
           tipicamente caminhos obsoletos, ou caminhos usados
           &#8203;&#8203;em outros sistemas operacionais que estao incorretos
           no FreeBSD. Eles serao substituidos pelo caminho correto na
           variavel interp_CMD.

  Nota:

           Estes vao sempre ser parte da variavel
           interp_OLD_CMD:"/usr/bin/envinterp" /bin/interp /usr/bin/interp
           /usr/local/bin/interp.

  Dica:

           A variavel interp_OLD_CMD contem varios valores. Qualquer entrada
           com espac,os deve estar entre aspas. Veja Exemplo 17.9,
           "Especificando todos os Caminhos ao Adicionar um Interpretador
           para USES=shebangfix".

  Importante:

   A correc,ao de shebangs e feita durante a fase patch. Se os scripts forem
   criados com shebangs incorretos durante a fase build, o processo de build
   (por exemplo, o script configure, ou o Makefiles) deve ser corrigido ou
   ter o caminho certo (por exemplo, com CONFIGURE_ENV, CONFIGURE_ARGS,
   MAKE_ENV ou MAKE_ARGS) para gerar as shebangs certas.

   Os caminhos corretos para os interpretadores suportados estao disponiveis
   em interp_CMD.

  Dica:

   Quando usado com USES=python, e o objetivo e apenas consertar os shebangs,
   mas a dependencia de Python em si nao e desejada, use a variavel
   PYTHON_NO_DEPENDS=yes.

   Exemplo 17.8. Adicionando outro interpretadoror para USES=shebangfix

   Para adicionar outro interpretador, defina a variavel SHEBANG_LANG. Por
   exemplo:

 SHEBANG_LANG=   lua

   Exemplo 17.9. Especificando todos os Caminhos ao Adicionar um
   Interpretador para USES=shebangfix

   Se isto nao estiver definido ainda, e nao tiver valores padrao para
   interp_OLD_CMD e interp_CMD a entrada Ksh poderia ser definida como:

 SHEBANG_LANG=   ksh
 ksh_OLD_CMD=    "/usr/bin/env ksh" /bin/ksh /usr/bin/ksh
 ksh_CMD=        ${LOCALBASE}/bin/ksh

   Exemplo 17.10. Adicionando uma Localizac,ao Estranha para um Interpretador

   Alguns softwares usam localizac,oes estranhas para um interpretador. Por
   exemplo, um aplicativo pode esperar que Python esteja localizado em
   /opt/bin/python2.7. O caminho estranho a ser substituido pode ser
   declarado no Makefile do port:

 python_OLD_CMD= /opt/bin/python2.7

   Exemplo 17.11. USES=shebangfix com a variavel SHEBANG_REGEX

   Para corrigir todos os arquivos em ${WRKSRC}/scripts finalizados com .pl,
   .sh ou .cgi fac,a assim:

 USES=   shebangfix
 SHEBANG_REGEX=  ./scripts/.*\.(sh|pl|cgi)

  Nota:

   SHEBANG_REGEX e usada executando find -E, que usa expressoes regulares
   modernas, tambem conhecidas como expressoes regulares estendidas. Veja
   re_format(7) para maiores informac,oes.

   Exemplo 17.12. USES=shebangfix com a variavel SHEBANG_GLOB

   Para corrigir todos os arquivos em ${WRKSRC} finalizados com .pl ou .sh,
   fac,a assim:

 USES=   shebangfix
 SHEBANG_GLOB=   *.sh *.pl

   Exemplo 17.13. USES=shebangfix com a variavel SHEBANG_FILES

   Para corrigir os arquivos script/foobar.pl e script/*.sh dentro de
   ${WRKSRC}, fac,a assim:

 USES=   shebangfix
 SHEBANG_FILES=  scripts/foobar.pl scripts/*.sh

17.82. sqlite

   Argumentos possiveis: (none), 2, 3

   Adiciona uma dependencia SQLite. A versao padrao usada e 3, mas usar a
   versao 2 tambem e possivel usando o modificador :2.

17.83. ssl

   Argumentos possiveis: (none), build, run

   Fornece suporte para OpenSSL. Uma dependencia apenas de compilac,ao ou
   run-time pode ser especificada usando build ou run. Estas variaveis estao
   disponiveis para uso do port, elas tambem sao adicionadas para a variavel
   MAKE_ENV:

   OPENSSLBASE

           Caminho para a base de instalac,ao do OpenSSL.

   OPENSSLDIR

           Caminho para arquivos de configurac,ao do OpenSSL.

   OPENSSLLIB

           Caminho para as bibliotecas do OpenSSL.

   OPENSSLINC

           Caminho para os includes do OpenSSL.

   OPENSSLRPATH

           Se definido, o caminho que o vinculador precisa usar para
           localizar as bibliotecas do OpenSSL.

  Dica:

   Se um port nao for compilado com um flavor OpenSSL, defina a variavel
   BROKEN_SSL, e possivelmente a variavel BROKEN_SSL_REASON_flavor:

 BROKEN_SSL=     libressl
 BROKEN_SSL_REASON_libressl=     needs features only available in OpenSSL

17.84. tar

   Argumentos possiveis: (none), Z, bz2, bzip2, lzma, tbz, tbz2, tgz, txz, xz

   Define a variavel EXTRACT_SUFX para .tar, .tar.Z, .tar.bz2, .tar.bz2,
   .tar.lzma, .tbz, .tbz2, .tgz, .txz ou .tar.xz respectivamente.

17.85. tcl

   Argumentos possiveis: version, wrapper, build, run, tea

   Adiciona uma dependencia para o Tcl. Uma versao especifica pode ser
   requisitada usando version. A versao pode estar vazia, um ou mais numeros
   exatos de versao (atualmente 84, 85 ou 86), ou um numero minimo de versao
   (atualmente84+, 85+ ou 86+). Para solicitar apenas um wrapper sem uma
   versao especifica, use wrapper. Uma dependencia somente de compilac,ao ou
   run-time pode ser especificada usando build ou run. Para compilar o port
   usando Tcl Extension Architecture, use o tea. Depois de incluir
   bsd.port.pre.mk o port pode inspecionar os resultados usando estas
   variaveis:

     * TCL_VER: seleciona a versao major.minor do Tcl

     * TCLSH: caminho completo do interpretador do Tcl

     * TCL_LIBDIR: caminho das bibliotecas do Tcl

     * TCL_INCLUDEDIR: caminho dos arquivos de cabec,alho C do Tcl

     * TK_VER: versao major.minor do Tk que foi escolhida

     * WISH: caminho completo do interpretador do Tk

     * TK_LIBDIR: caminho das bibliotecas do Tk

     * TK_INCLUDEDIR: caminho dos arquivos de cabec,alho C do Tk

17.86. terminfo

   Argumentos possiveis: (none)

   Adiciona @terminfo ao arquivo plist. Use quando o port instalar arquivos
   *.terminfo em ${PREFIX}/share/misc.

17.87. tk

   Os mesmos argumentos para tcl

   Um pequeno wrapper ao usar os dois Tcl e Tk. As mesmas variaveis sao
   retornadas assim como quando estiver usando Tcl.

17.88. uidfix

   Argumentos possiveis: (none)

   Altera algum comportamento padrao (principalmente de variaveis) do sistema
   de compilac,ao para permitir instalar este port como um usuario normal.
   Tente isso no port antes de usar USES=fakeroot ou de aplicar algum patch.

17.89. uniquefiles

   Argumentos possiveis: (none), dirs

   Torna arquivos ou diretorios 'exclusivos', adicionando um prefixo ou
   sufixo. Se o argumento dirs e usado, o port precisa de um prefixo (e
   apenas um prefixo) baseado em UNIQUE_PREFIX para diretorios padrao
   DOCSDIR, EXEMPLESDIR, DATADIR, WWWDIR, ETCDIR. Estas variaveis estao
   disponiveis para os ports:

     * UNIQUE_PREFIX: O prefixo a ser usado para diretorios e arquivos.
       Padrao: ${PKGNAMEPREFIX}.

     * UNIQUE_PREFIX_FILES: Uma lista de arquivos que precisam ser
       prefixados. Padrao: vazio.

     * UNIQUE_SUFFIX: O sufixo para ser usado por arquivos. Padrao:
       ${PKGNAMESUFFIX}.

     * UNIQUE_SUFFIX_FILES: Uma lista de arquivos que precisam estar com um
       sufixo. Padrao: vazio.

17.90. varnish

   Argumentos possiveis: 4, 5

   Manipula dependencias do Varnish Cache. 4 ira adicionar uma dependencia do
   www/varnish4. 5 ira adicionar uma dependencia do www/varnish5.

17.91. webplugin

   Argumentos possiveis: (none), ARGS

   Cria e remove automaticamente links simbolicos para cada aplicac,ao que
   suporta o framework do webplugin. ARGS pode ser um dos:

     * gecko: suporte a plug-ins baseados no Gecko

     * native: suporte a plug-ins para o Gecko, Opera e WebKit-GTK

     * linux: suporte a plug-ins do Linux

     * all (padrao, implicito): suporta todos os tipos de plug-ins

     * (entradas individuais): suporta apenas os navegadores listados

   Essas variaveis podem ser ajustadas:

     * WEBPLUGIN_FILES: Sem padrao, deve ser definido manualmente. Os
       arquivos de plug-in para instalar.

     * WEBPLUGIN_DIR: O diretorio para instalar os arquivos de plug-in,
       padrao PREFIX/lib/browser_plugins/WEBPLUGIN_NAME. Defina isso se o
       port instalar arquivos de plug-in fora do diretorio padrao para
       previnir links simbolicos quebrados.

     * WEBPLUGIN_NAME: O diretorio final para instalar os arquivos de
       plug-in, padrao PKGBASE.

17.92. xfce

   Argumentos possiveis: (none), gtk2

   Fornece suporte para ports relacionados ao Xfce. Veja Sec,ao 6.24, "Usando
   o Xfce" para detalhes.

   O argumento gtk2 especifica que o port requer suporte a GTK2. Ele adiciona
   recursos adicionais fornecidos por alguns componentes principais, por
   exemplo, x11/libxfce4menu e x11-wm/xfce4-panel.

17.93. xorg

   Argumentos possiveis: (none)

   Fornece uma maneira facil para depender dos componentes X.org. Os
   componentes devem ser listados na variavel USE_XORG . Os componentes
   disponiveis sao:

   Tabela 17.1. Componentes Disponiveis do X.Org

      Nome                              Descric,ao                           
   dmx         Biblioteca de extensao DMX                                    
   fontenc     Biblioteca fontenc                                            
   fontutil    Crie um indice de arquivos de fontes X em um diretorio        
   ice         Biblioteca Inter Client Exchange para X11                     
   libfs       Biblioteca FS                                                 
   pciaccess   Biblioteca Generica de acesso ao PCI                          
   pixman      Biblioteca de manipulac,ao de pixels de baixo nivel           
   sm          Biblioteca de Gerenciamento de Sessao para X11                
   x11         Biblioteca X11                                                
   xau         Biblioteca do Protocolo de Autenticac,ao para o X11           
   xaw         Biblioteca de Widgets do X Athena                             
   xaw6        Biblioteca de Widgets do X Athena                             
   xaw7        Biblioteca de Widgets do X Athena                             
   xbitmaps    Arquivos bitmaps do X.Org                                     
   xcb         Biblioteca do protocolo X C-language Binding (XCB)            
   xcomposite  Biblioteca de extensao X Composite                            
   xcursor     Biblioteca de carregamento do cursor X no lado do cliente     
   xdamage     Biblioteca de extensao X Damage                               
   xdmcp       Biblioteca do Protocolo de Controle do X Display Manager      
   xext        Biblioteca de Extensao X11                                    
   xfixes      Biblioteca de extensao X Fixes                                
   xfont       Biblioteca de fontes do X                                     
   xfont2      Biblioteca de fontes do X                                     
   xft         API de fontes do lado do cliente para aplicativos X           
   xi          Biblioteca de extensao X Input                                
   xinerama    Biblioteca X11 Xinerama                                       
   xkbfile     Biblioteca XKB                                                
   xmu         Biblioteca de Utilitarios Diversos do X                       
   xmuu        Biblioteca de Utilitarios Diversos do X                       
   xorg-macros Macros aclocal de desenvolvimento X.Org                       
   xorg-server Servidor X do X.Org e programas relacionados                  
   xorgproto   xorg protocol headers                                         
   xpm         Biblioteca Pixmap do X                                        
   xpresent    Biblioteca de Extensao X Present                              
   xrandr      Biblioteca de extensao X Resize e Rotate                      
   xrender     Biblioteca de extensao X Render                               
   xres        Biblioteca de uso X Resource                                  
   xscrnsaver  Biblioteca XScrnSaver                                         
   xshmfence   Memoria compartilhada 'SyncFence' primitiva de sincronizac,ao 
   xt          Biblioteca X Toolkit                                          
   xtrans      Codigo de rede abstrato para X                                
   xtst        Extensao X Test                                               
   xv          Biblioteca de Extensao X Video                                
   xvmc        Biblioteca X Video Extension Motion Compensation              
   xxf86dga    X DGA Extension                                               
   xxf86vm     Extensao X Vidmode                                            

17.94. xorg-cat

   Argumentos possiveis: app, data, doc, driver, font, lib, proto, util,
   xserver e (none) ou um de autotools (default), meson

   Fornec,a suporte para compilac,ao de componentes Xorg. Ele cuida da
   definic,ao de dependencias comuns e de um ambiente de configurac,ao
   apropriado necessario. Isso e destinado apenas aos componentes do Xorg.

   A categoria deve corresponder `as categorias upstream.

   O segundo argumento e o sistema de compilac,ao a ser usado. autotools e o
   padrao, mas meson tambem e suportado.

17.95. zip

   Argumentos possiveis: (none), infozip

   Indica que os arquivos de distribuic,ao usam o algoritmo de compactac,ao
   ZIP. Para arquivos que usam o algoritmo InfoZip, o argumento infozip deve
   ser passado para definir as dependencias apropriadas.

                     Capitulo 18. Valores __FreeBSD_version

   Indice

   18.1. Versoes do FreeBSD 13

   18.2. Versoes do FreeBSD 12

   18.3. Versoes do FreeBSD 11

   18.4. Versoes do FreeBSD 10

   18.5. Versoes do FreeBSD 9

   18.6. Versoes do FreeBSD 8

   18.7. Versoes do FreeBSD 7

   18.8. Versoes do FreeBSD 6

   18.9. Versoes do FreeBSD 5

   18.10. Versoes do FreeBSD 4

   18.11. Versoes do FreeBSD 3

   18.12. Versoes do FreeBSD 2.2

   18.13. FreeBSD 2 Antes das Versoes 2.2-RELEASE

   Aqui esta uma lista conveniente dos valores __FreeBSD_version definidos em
   sys/param.h:

18.1. Versoes do FreeBSD 13

   Tabela 18.1. Valores do __FreeBSD_version para o FreeBSD 13

    Valor  Revisao     Data                        Release                    
                   19 de                                                      
   1300000 339436  outubro de   13.0-CURRENT.
                   2018         
                   25 de        13.0-CURRENT after bumping OpenSSL shared     
   1300001 339730  outubro de   library version numbers.                      
                   2018         
                   25 de        13.0-CURRENT after restoration of             
   1300002 339765  outubro de   sys/joystick.h.                               
                   2018         
                   2 de         13.0-CURRENT after vop_symlink API change     
   1300003 340055  novembro de  (a_target is now const.)                      
                   2018         
                   23 de        13.0-CURRENT depois de habilitar o codigo     
   1300004 340841  novembro de  crtbegin e crtend.                            
                   2018         
                   11 de        13.0-CURRENT depois de habilitar checksums    
   1300005 341836  dezembro de  para inodes do UFS.                           
                   2018         
                   24 de        13.0-CURRENT depois de consertar o include    
   1300006 342398  dezembro de  sys/random.h para ser utilizavel em C ++.     
                   2018         
                   30 de        13.0-CURRENT depois de mudar o tamanho do     
   1300007 342629  dezembro de  struct linux_cdev nas plataformas de 32-bits. 
                   2018         
   1300008 342772  4 de janeiro 13.0-CURRENT depois de adicionar os sysctls   
                   de 2019      kern.smp.threads_per_core e kern.smp.cores.   
                   20 de        13.0-CURRENT apos a modificac,ao da estrutura 
   1300009 343213  janeiro de   struct ieee80211vap para resolver a corrida   
                   2019         ioctl/detach para a estrutura ieee80211com.   
                   27 de        13.0-CURRENT depois de incrementar o          
   1300010 343485  janeiro de   SPECNAMELEN de 63 para MAXNAMELEN (255).      
                   2019         
                   12 de        13.0-CURRENT depois que o renameat(2) foi     
   1300011 344041  fevereiro de corrigido para funcionar com kernels          
                   2019         construidos com a opc,ao CAPABILITIES.        
                   12 de        13.0-CURRENT apos taskqgroup_attach() e       
   1300012 344062  fevereiro de taskqgroup_attach_cpu() tomar um device_t e   
                   2019         um ponteiro de recurso struct como argumentos 
                                para denotar interrupc,oes de dispositivo.    
                   19 de        13.0-CURRENT apos a remoc,ao do drm e do      
   1300013 344300  fevereiro de drm2.                                         
                   2019         
                   4 de marc,o  13.0-CURRENT depois de atualizar o clang,     
   1300014 344779  de 2019      llvm, lld, lldb, compiler-rt e libc++ para a  
                                8.0.0 rc3.                                    
                                13.0-CURRENT depois de desanonimizar as       
   1300015 345196  15 de marc,o threads e os proc state enums, de forma que   
                   de 2019      as aplicac,oes userland podem usa-las sem     
                                redefinir os nomes dos valores.               
   1300016 345236  16 de marc,o 13.0-CURRENT depois de habilitar o codigo     
                   de 2019      crtbegin e crtend.                            
   1300017 345305  19 de marc,o 13.0-CURRENT after exposing the Rx mbuf       
                   de 2019      buffer size to drivers in iflib.              
   1300018 346012  16 de marc,o 13.0-CURRENT after introduction of funlinkat  
                   de 2019      syscall in 345982.                            
   1300019 346282  16 de abril  13.0-CURRENT after addition of                
                   de 2019      is_random_seeded(9) to random(4).             
                                13.0-CURRENT after restoring random(4)        
                   18 de abril  availability tradeoff prior to 346250 and     
   1300020 346358  de 2019      adding new tunables and diagnostic sysctls    
                                for programmatically discovering early        
                                seeding problems after boot.                  
   1300021 346645  24 de abril  13.0-CURRENT after LinuxKPI uses bus_dma(9)   
                   de 2019      to be compatible with an IOMMU.               
   1300022 347089  4 de maio de 13.0-CURRENT after fixing regression issue    
                   2019         after r346645 in the LinuxKPI.                
   1300023 347192  6 de maio de 13.0-CURRENT after list-ifying kernel dump    
                   2019         device configuration.                         
                   8 de maio de 13.0-CURRENT after bumping the Mellanox       
   1300024 347325  2019         driver version numbers (mlx4en(4);            
                                mlx5en(4)).                                   
   1300025 347532  13 de maio   13.0-CURRENT after renaming vm.max_wired to   
                   de 2019      vm.max_user_wired and changing its type.      
   1300026 347596  14 de maio   13.0-CURRENT after adding context member to   
                   de 2019      ww_mutex in LinuxKPI.                         
   1300027 347601  14 de maio   13.0-CURRENT after adding prepare to pm_ops   
                   de 2019      in LinuxKPI.                                  
                   17 de maio   13.0-CURRENT after removal of bm, cs, de, ed, 
   1300028 347925  de 2019      ep, ex, fe, pcn, sf, sn, tl, tx, txp, vx, wb, 
                                and xe drivers.                               
                                13.0-CURRENT after removing some header       
                                pollution due to sys/eventhandler.h. Affected 
                   20 de maio   files may now need to explicitly include one  
   1300029 347984  de 2019      or more of sys/eventhandler.h, sys/ktr.h,     
                                sys/lock.h, or sys/mutex.h, when the missing  
                                header may have been included implicitly      
                                prior to 1300029.                             
                                13.0-CURRENT after adding relocation support  
   1300030 348350  29 de maio   to libdwarf on powerpc64 to fix handling of   
                   de 2019      DWARF information on unlinked objects.        
                                Original commit in 348347.                    
                                13.0-CURRENT after adding dpcpu and vnet      
                                section fixes to i386 kernel modules to avoid 
   1300031 348808  8 de junho   panics in certain conditions. i386 kernel     
                   de 2019      modules need to be recompiled with the linker 
                                script magic in place or they will refuse to  
                                load.                                         
                                13.0-CURRENT after separating kernel crc32()  
   1300032 349151  17 de junho  implementation to its own header              
                   de 2019      (gsb_crc32.h) and renaming the source to      
                                gsb_crc32.c.                                  
   1300033 349277  21 de junho  13.0-CURRENT after additions to LinuxKPI's    
                   de 2019      RCU list.                                     
   1300034 349352  24 de junho  13.0-CURRENT after NAND and NANDFS removal.   
                   de 2019      
   1300035 349846  8 de julho   13.0-CURRENT after merging the vm_page hold   
                   de 2019      and wire mechanisms.                          
                   13 de julho  13.0-CURRENT after adding                     
   1300036 349972  de 2019      arm_drain_writebuf() and arm_sync_icache()    
                                for compatibility with NetBSD and OpenBSD.    
   1300037 350307  24 de julho  13.0-CURRENT after removal of                 
                   de 2019      libcap_random(3).                             
   1300038 350437  30 de julho  13.0-CURRENT after removal of gzip'ed a.out   
                   de 2019      support.                                      
   1300039 350665  7 de agosto  13.0-CURRENT after merge of fusefs from       
                   de 2019      projects/fuse2.                               
   1300040 351140  16 de agosto 13.0-CURRENT after deletion of sys/dir.h      
                   de 2019      which has been deprecated since 1997.         
   (Nao    351423  23 de agosto 13.0-CURRENT after changing most arguments to 
   mudou)          de 2019      ping6(8).                                     
                   25 de agosto 13.0-CURRENT after removal of zlib 1.0.4      
   1300041 351480  de 2019      after the completion of kernel zlib           
                                unification.                                  
   1300042 351522  27 de agosto 13.0-CURRENT after addition of kernel-side    
                   de 2019      support for in-kernel TLS.                    
                   2 de                                                       
   1300043 351698  setembro de  13.0-CURRENT after removal of gets(3).
                   2019         
                   2 de         13.0-CURRENT after adding sysfs create/remove 
   1300044 351701  setembro de  functions that handles multiple files in one  
                   2019         call to the LinuxKPI.                         
                   3 de         13.0-CURRENT after adding sysctlbyname system 
   1300045 351729  setembro de  call                                          
                   2019         
                   6 de         13.0-CURRENT after LinuxKPI sysfs             
   1300046 351937  setembro de  improvements.                                 
                   2019         
                   9 de         13.0-CURRENT after changing the               
   1300047 352110  setembro de  synchonization rules for vm_page reference    
                   2019         counting..                                    
                   25 de        13.0-CURRENT after adding a shm_open2 syscall 
   1300048 352700  setembro de  to support the upcoming memfd_create syscall. 
                   2019         
                   7 de outubro 13.0-CURRENT after factoring out the VNET     
   1300049 353274  de 2019      shutdown check into an own vnet structure     
                                field.                                        
                   9 de outubro 13.0-CURRENT after updating llvm, clang,      
   1300050 353358  de 2019      compiler-rt, libc++, libunwind, lld, lldb and 
                                openmp to 9.0.0 final release r372316.        
                   17 de        13.0-CURRENT after splitting out a more       
   1300051 353685  outubro de   generic debugnet(4) from netdump(4).          
                   2019         
                   17 de        13.0-CURRENT after promoting the page busy    
   1300052 353698  outubro de   field to a first class lock that no longer    
                   2019         requires the object lock for consistency.     
                   17 de                                                      
   1300053 353700  outubro de   13.0-CURRENT after implementing NetGDB.
                   2019         
                   21 de        13.0-CURRENT after removing obsoleted KPIs    
   1300054 353868  outubro de   that were used to access interface address    
                   2019         lists.                                        
                   4 de         13.0-CURRENT after enabling device class      
   1300055 354335  novembro de  group attributes in the LinuxKPI.             
                   2019         
                   7 de         13.0-CURRENT after fixing a potential OOB     
   1300056 354460  novembro de  read security issue in libc++.                
                   2019         
                   13 de        13.0-CURRENT after adding support for         
   1300057 354694  novembro de  AT_EXECPATH to elf_aux_info(3).               
                   2019         
                   18 de        13.0-CURRENT after widening the vm_page       
   1300058 354820  novembro de  aflags field to 16 bits.                      
                   2019         
                   18 de        13.0-CURRENT after converting the in-tree     
   1300059 354835  novembro de  sysent targets to use the new                 
                   2019         makesyscalls.lua.                             
                   20 de        13.0-CURRENT after adding /etc/os-release as  
   1300060 354922  novembro de  a symbolic link to /var/run/os-release.       
                   2019         
                   21 de        13.0-CURRENT after adding functions to        
   1300061 354977  novembro de  bitstring(3) to find contiguous sequences of  
                   2019         set or unset bits.                            
                   2 de                                                       
   1300062 355309  dezembro de  13.0-CURRENT after adding TCP_STATS support.
                   2019         
                   8 de         13.0-CURRENT after removal of VI_DOOMED (use  
   1300063 355537  dezembro de  VN_IS_DOOMED instead).                        
                   2019         
                   9 de         13.0-CURRENT after correcting the C++ version 
   1300064 355658  dezembro de  check for declaring timespec_get(3).          
                   2019         
                   12 de        13.0-CURRENT after adding sigsetop extensions 
   1300065 355643  dezembro de  commonly found in musl libc and glibc.        
                   2019         
                   12 de        13.0-CURRENT after changing the internal      
   1300066 355679  dezembro de  interface between the NFS modules as part of  
                   2019         the introduction of NFS 4.2.                  
                   13 de        13.0-CURRENT after removing the deprecated    
   1300067 355732  dezembro de  callout_handle_init, timeout, and untimeout   
                   2019         functions.                                    
                   16 de        13.0-CURRENT after doubling the value of      
   1300068 355828  dezembro de  ARG_MAX, for 64 bit platforms.                
                   2019         
                   24 de        13.0-CURRENT after the addition of busdma     
   1300069 356051  dezembro de  templates.                                    
                   2019         
                   27 de        13.0-CURRENT after eliminating the last MI    
   1300070 356113  dezembro de  difference in AT_* definitions (for powerpc). 
                   2019         
                   27 de        13.0-CURRENT after making USB statistics be   
   1300071 356135  dezembro de  per-device instead of per bus.                
                   2019         
                   29 de        13.0-CURRENT after removal of GEOM_SCHED      
   1300072 356185  dezembro de  class and gsched tool.                        
                   2019         
   1300073 356263  2 de janeiro 13.0-CURRENT after removing arm/arm as a      
                   de 2020      valid target.                                 
   1300074 356337  3 de janeiro 13.0-CURRENT after removing flags argument    
                   de 2020      from VOP_UNLOCK.                              
   1300075 356409  6 de janeiro 13.0-CURRENT after adding own counter for     
                   de 2020      cancelled USB transfers.                      
                   8 de janeiro 13.0-CURRENT after pushing vnop               
   1300076 356511  de 2020      implementation into the fileop layer in       
                                posix_fallocate.                              
   (Nao            2 de         13.0-CURRENT after removal of armv5           
   mudou)  357396  fevereiro de architecture code from the src tree.          
                   2020         
                   3 de         13.0-CURRENT after removal of sparc64         
   1300077 357455  fevereiro de architecture code from the src tree.          
                   2020         
                   17 de        13.0-CURRENT after changing struct vnet and   
   1300078 358020  fevereiro de the VNET magic cookie.                        
                   2020         
                   20 de                                                      
   1300079 358164  fevereiro de 13.0-CURRENT after upgrading ncurses to 6.2.x
                   2020         
                   20 de        13.0-CURRENT after adding realpathat syscall  
   1300080 358172  fevereiro de to VFS.                                       
                   2020         
                   21 de        13.0-CURRENT after after recent linuxkpi      
   1300081 358218  fevereiro de changes.                                      
                   2020         
   1300082 358497  1 de marc,o  13.0-CURRENT after removal of bktr(4).        
                   de 2020      
   1300083 358834  10 de marc,o 13.0-CURRENT after removal of amd(8),         
                   de 2020      r358821.                                      
                   10 de marc,o 13.0-CURRENT after updating llvm, clang,      
   1300084 358851  de 2020      compiler-rt, libc++, libunwind, lld, lldb and 
                                openmp to 10.0.0-rc3 c290cb61fdc.             
   1300085 359261  23 de marc,o 13.0-CURRENT after the import of the kyua     
                   de 2020      test framework.                               
   1300086 359347  26 de marc,o 13.0-CURRENT after switching powerpc and      
                   de 2020      powerpcspe to the lld linker.                 
                   27 de marc,o 13.0-CURRENT after refactoring the driver and 
   1300087 359374  de 2020      consumer interfaces for in-kernel             
                                cryptography.                                 
   1300088 359530  1 de abril   13.0-CURRENT after removing support for       
                   de 2020      procfs process debugging.                     
                   8 de abril   13.0-CURRENT after cloning the RCU interface  
   1300089 359727  de 2020      into a sleepable and a non-sleepable part in  
                                the LinuxKPI.                                 
   1300090 359747  9 de abril   13.0-CURRENT after removing the old NFS lock  
                   de 2020      device driver that uses Giant.                
   1300091 359839  12 de abril  13.0-CURRENT after implementing a             
                   de 2020      close_range(2) syscall.                       
   1300092 359920  14 de abril  13.0-CURRENT after reworking unmapped mbufs   
                   de 2020      in KTLS to carry ext_pgs in the mbuf itself.  
   1300093 360418  27 de abril  13.0-CURRENT after adding support for kernel  
                   de 2020      TLS receive offload.                          
   1300094 360796  7 de maio de 13.0-CURRENT after linuxkpi changes.          
                   2020         
   1300095 361275  20 de maio   13.0-CURRENT after adding HyperV socket       
                   de 2020      support for FreeBSD guests.                   
                   23 de maio   13.0-CURRENT after updating llvm, clang,      
   1300096 361410  de 2020      compiler-rt, libc++, libunwind, lld, lldb and 
                                openmp to 10.0.1 rc1 f79cd71e145.             
                   2 de junho   13.0-CURRENT after implementing               
   1300097 361724  de 2020      __is_constexpr() function macro in the        
                                LinuxKPI.                                     
   1300098 362159  14 de junho  13.0-CURRENT after changing the export_args   
                   de 2020      ex_flags field so that is 64bits.             
   1300099 362453  20 de junho  13.0-CURRENT after making liblzma use libmd   
                   de 2020      implementation of SHA256.                     
   1300100 362640  26 de junho  13.0-CURRENT after changing the internal API  
                   de 2020      between the NFS kernel modules.               
   1300101 363077  10 de julho  13.0-CURRENT after implementing the           
                   de 2020      array_size() function in the LinuxKPI.        
   1300102 363562  26 de julho  13.0-CURRENT after implementing lockless      
                   de 2020      lookup in the VFS layer.                      
   1300103 363757  1 de agosto  13.0-CURRENT after making rights mandatory    
                   de 2020      for NDINIT_ALL.                               
   1300104 363783  2 de agosto  13.0-CURRENT after vnode layout changes.      
                   de 2020      
   1300105 363894  5 de agosto  13.0-CURRENT after vaccess() change.          
                   de 2020      
                   11 de agosto 13.0-CURRENT after adding an argument to      
   1300106 364092  de 2020      newnfs_connect() that indicates use TLS for   
                                the connection.                               
   1300107 364109  11 de agosto 13.0-CURRENT after change to clone the task   
                   de 2020      struct fields related to RCU.                 
                   14 de agosto 13.0-CURRENT after adding a few wait_bit      
   1300108 364233  de 2020      functions to the linuxkpi, which are needed   
                                for DRM from Linux v5.4.                      
   1300109 364274  6 de agosto  13.0-CURRENT after vget() argument removal    
                   de 2020      and namei flags renumbering.                  
                                13.0-CURRENT after updating llvm, clang,      
   (Nao    364284  6 de agosto  compiler-rt, libc++, libunwind, lld, lldb and 
   mudou)          de 2020      openmp to release/11.x                        
                                llvmorg-11.0.0-rc1-47-gff47911ddfc.           
   1300110 364331  18 de agosto 13.0-CURRENT after deleting the unused        
                   de 2020      use_ext argument to nfscl_reqstart().         
   1300111 364476  22 de agosto 13.0-CURRENT after adding TLS support to the  
                   de 2020      kernel RPC.                                   
   1300112 364747  25 de agosto 13.0-CURRENT after merging OpenZFS support.   
                   de 2020      
   1300113 364753  25 de agosto 13.0-CURRENT after adding atomic and bswap    
                   de 2020      functions to libcompiler_rt.                  
                   8 de         13.0-CURRENT after changing arm64 AT_HWCAP    
   1300114 365459  setembro de  definitions for elf_aux_info(3).              
                   2020         
                   14 de        13.0-CURRENT after fixing crunchgen(1)        
   1300115 365705  setembro de  application build with WARNS=6.               
                   2020         
                   22 de        13.0-CURRENT after the introduction of the    
   1300116 366062  setembro de  powerpc64le ARCH.                             
                   2020         
                   23 de        13.0-CURRENT after reimplementing purgevfs to 
   1300117 366070  setembro de  iterate vnodes instead of the entire hash.    
                   2020         
   1300118 366374  2 de outubro 13.0-CURRENT after adding backlight support   
                   de 2020      and dmi_* functions to the linuxkpi.          
   1300119 366432  6 de outubro 13.0-CURRENT after populating the acquire     
                   de 2020      context field of a ww_mutex in the LinuxKPI.  
                   13 de        13.0-CURRENT after the fix to arm64           
   1300120 366666  outubro de   write-only mappings.                          
                   2020         
                   15 de        13.0-CURRENT after the addition of            
   1300121 366719  outubro de   VOP_EAGAIN.                                   
                   2020         
                   17 de                                                      
   1300122 366782  outubro de   13.0-CURRENT after the addition of ptsname_r.
                   2020         
                   20 de        13.0-CURRENT after VOP, VPTOCNP, and INACTIVE 
   1300123 366871  outubro de   changes.                                      
                   2020         
                   30 de        13.0-CURRENT after adding cache_vop_mkdir and 
   1300124 367162  outubro de   renaming cache_rename to cache_vop_rename.    
                   2020         
                   4 de         13.0-CURRENT after using a rms lock for       
   1300125 367347  novembro de  teardown handling in zfs.                     
                   2020         
                   5 de         13.0-CURRENT after rationalizing per-cpu      
   1300126 367384  novembro de  zones.                                        
                   2020         
                   6 de         13.0-CURRENT after moving                     
   1300127 367432  novembro de  malloc_type_internal into malloc_type.        
                   2020         
                   9 de         13.0-CURRENT after LinuxKPI additions to      
   1300128 367522  novembro de  implement ACPI bits required by drm-kmod in   
                   2020         the base system.                              
                   12 de                                                      
   1300129 367627  novembro de  13.0-CURRENT after retiring malloc_last_fail.
                   2020         
   1300130 367777  November 17, 13.0-CURRENT after p_pd / pwddesc split from  
                   2020         p_fd / filedesc.                              

18.2. Versoes do FreeBSD 12

   Tabela 18.2. Valores do __FreeBSD_version para o FreeBSD 12

      Valor    Revisao      Data                      Release                 
   1200000     302409  7 de julho de  12.0-CURRENT.                           
                       2016           
   1200001     302628  12 de julho de 12.0-CURRENT after removing collation   
                       2016           from [a-z]-type ranges.                 
   1200002     304395  18 de agosto   12.0-CURRENT after removing unused and  
                       de 2016        obsolete openbsd_poll system call.      
   1200003     304608  22 de agosto   12.0-CURRENT after adding C++11         
                       de 2016        thread_local support in rev 303795.     
                       24 de agosto   12.0-CURRENT after fixing LC_*_MASK for 
   1200004     304752  de 2016        newlocale(3) and querylocale(3) (rev    
                                      304703).                                
                                      12.0-CURRENT after changing some ioctl  
   1200005     304789  25 de agosto   interfaces in rev 304787 between the    
                       de 2016        iSCSI userspace programs and the        
                                      kernel.                                 
                       1-o de         12.0-CURRENT after crunchgen(1)         
   1200006     305256  setembro de    META_MODE fix in 305254.                
                       2016           
                       5 de setembro  12.0-CURRENT after resolving a deadlock 
   1200007     305421  de 2016        between device_detach() and             
                                      usbd_do_request_flags(9).               
   1200008     305833  15 de setembro 12.0-CURRENT after removing the 4.3BSD  
                       de 2016        compatible macro m_copy() in 305824.    
   1200009     306077  21 de setembro 12.0-CURRENT after removing             
                       de 2016        bio_taskqueue() in 305988.              
   1200010     306276  23 de setembro 12.0-CURRENT after mounting msdosfs(5)  
                       de 2016        with longnames support by default.      
   1200011     306556  1 de outubro   12.0-CURRENT after adding fb_memattr    
                       de 2016        field to fb_info in 306555.             
   1200012     306592  2 de outubro   12.0-CURRENT after net80211(4) changes  
                       de 2016        (rev 306590, 306591).                   
                       12 de outubro  12.0-CURRENT after installing header    
   1200013     307140  de 2016        files required development with         
                                      libzfs_core.                            
                       17 de outubro  12.0-CURRENT after merging common code  
   1200014     307529  de 2016        in rtwn(4) and urtwn(4), and adding     
                                      support for 802.11ac devices.           
   1200015     308874  20 de novembro 12.0-CURRENT after some ABI change for  
                       de 2016        unbreaking powerpc.                     
   1200016     309017  22 de novembro 12.0-CURRENT after removing             
                       de 2016        PG_CACHED-related fields from vmmeter.  
                                      12.0-CURRENT after upgrading our copies 
   1200017     309124  25 de novembro of clang, llvm, lldb, compiler-rt and   
                       de 2016        libc++ to 3.9.0 release, and adding lld 
                                      3.9.0.                                  
                                      12.0-CURRENT after adding the           
                       7 de dezembro  ki_moretdname member to struct          
   1200018     309676  de 2016        kinfo_proc and struct kinfo_proc32 to   
                                      export the whole thread name to         
                                      user-space utilities.                   
   1200019     310149  16 de dezembro 12.0-CURRENT after starting to lay down 
                       de 2016        the foundation for 11ac support.        
   1200020     312087  13 de janeiro  12.0-CURRENT after removing fgetsock    
                       de 2017        and fputsock.                           
                       16 de          12.0-CURRENT after removing MCA and     
   1200021     313858  fevereiro de   EISA support.                           
                       2017           
                       21 de          12.0-CURRENT after making the LinuxKPI  
   1200022     314040  fevereiro de   task struct persistent across system    
                       2017           calls.                                  
   (Nao mudou) 314373  2 de marc,o de 12.0-CURRENT after removing System V    
                       2017           Release 4 binary compatibility support. 
                       2 de marc,o de 12.0-CURRENT after upgrading our copies 
   1200023     314564  2017           of clang, llvm, lld, lldb, compiler-rt  
                                      and libc++ to 4.0.0.                    
   1200024     314865  7 de marc,o de 12.0-CURRENT after removal of           
                       2017           pcap-int.h                              
   1200025     315430  16 de marc,o   12.0-CURRENT after addition of the      
                       de 2017        <dev/mmc/mmc_ioctl.h> header.           
   1200026     315662  16 de marc,o   12.0-CURRENT after hiding struct inpcb  
                       de 2017        and struct tcpcb from userland.         
   1200027     315673  21 de marc,o   12.0-CURRENT after making CAM SIM lock  
                       de 2017        optional.                               
                       10 de abril de 12.0-CURRENT after renaming             
   1200028     316683  2017           smp_no_rendevous_barrier() to           
                                      smp_no_rendezvous_barrier() in 316648.  
                       19 de abril de 12.0-CURRENT after the removal of       
   1200029     317176  2017           struct vmmeter from struct pcpu from    
                                      317061.                                 
                       24 de abril de 12.0-CURRENT after removing NATM        
   1200030     317383  2017           support including en(4), fatm(4),       
                                      hatm(4), and patm(4).                   
                                      12.0-CURRENT after types ino_t, dev_t,  
   1200031     318736  23 de maio de  nlink_t were extended to 64bit and      
                       2017           struct dirent changed layout (also      
                                      known as ino64).                        
   1200032     319664  8 de junho de  12.0-CURRENT after removal of groff.    
                       2017           
                                      12.0-CURRENT after the type of the      
   1200033     320043  17 de junho de struct event member data was increased  
                       2017           to 64bit, and ext structure members     
                                      added.                                  
                       19 de junho de 12.0-CURRENT after the NFS client and   
   1200034     320085  2017           server were changed so that they        
                                      actually use the 64bit ino_t.           
   1200035     320317  24 de junho de 12.0-CURRENT after the MAP_GUARD        
                       2017           mmap(2) flag was added.                 
   1200036     320347  26 de junho de 12.0-CURRENT after changing time_t to   
                       2017           64 bits on powerpc (32-bit version).    
                       1-o de julho   12.0-CURRENT after the cleanup and      
   1200037     320545  de 2017        inlining of bus_dmamap* functions       
                                      (320528).                               
   1200038     320879  10 de julho de 12.0-CURRENT after MMC CAM committed.   
                       2017           (320844).                               
                       22 de julho de 12.0-CURRENT after upgrade of copies of 
   1200039     321369  2017           clang, llvm, lld, lldb, compiler-rt and 
                                      libc++ to 5.0.0 (trunk r308421).        
   1200040     321688  29 de julho de 12.0-CURRENT after adding NFS client    
                       2017           forced dismount support umount -N.      
   1200041     322762  21 de agosto   12.0-CURRENT after WRFSBASE instruction 
                       de 2017        become operational on amd64.            
   1200042     322900  25 de agosto   12.0-CURRENT after PLPMTUD counters     
                       de 2017        were changed to use counter(9).         
   1200043     322989  28 de agosto   12.0-CURRENT after dropping x86         
                       de 2017        CACHE_LINE_SIZE down to 64 bytes.       
   1200044     323349  8 de setembro  12.0-CURRENT after implementing         
                       de 2017        poll_wait() in the LinuxKPI.            
   1200045     323706  18 de setembro 12.0-CURRENT after adding shared memory 
                       de 2017        support to LinuxKPI. (323703).          
                       22 de setembro 12.0-CURRENT after adding support for   
   1200046     323910  de 2017        32-bit compatibility IOCTLs to          
                                      LinuxKPI.                               
   1200047     324053  26 de setembro 12.0-CURRENT after removing             
                       de 2017        M_HASHTYPE_RSS_UDP_IPV4_EX. (324052).   
   1200048     324227  2 de outubro   12.0-CURRENT after hiding struct socket 
                       de 2017        and struct unpcb from userland.         
   1200049     324281  4 de outubro   12.0-CURRENT after adding the value.u16 
                       de 2017        field to struct diocgattr_arg.          
   1200050     324342  5 de outubro   12.0-CURRENT after adding the armv7     
                       de 2017        MACHINE_ARCH. (324340).                 
   1200051     324455  9 de outubro   12.0-CURRENT after removing libstand.a  
                       de 2017        as a public interface. (324454).        
                       26 de outubro  12.0-CURRENT after fixing ptrace() to   
   1200052     325028  de 2017        always clear the correct thread event   
                                      when resuming.                          
                       7 de novembro  12.0-CURRENT after changing struct mbuf 
   1200053     325506  de 2017        layout to add optional hardware         
                                      timestamps for receive packets.         
                       15 de novembro 12.0-CURRENT after changing the layout  
   1200054     325852  de 2017        of struct vmtotal to allow for          
                                      reporting large memory counters.        
   1200055     327740  9 de janeiro   12.0-CURRENT after adding cpucontrol -e 
                       de 2018        support.                                
                       14 de janeiro  12.0-CURRENT after upgrading clang,     
   1200056     327952  de 2018        llvm, lld, lldb, compiler-rt and libc++ 
                                      to 6.0.0 (branches/release_60 r321788). 
                       8 de fevereiro 12.0-CURRENT after applying a clang     
   1200057     329033  de 2018        6.0.0 fix to make the wine ports build  
                                      correctly.                              
                       12 de          12.0-CURRENT apos o lua loader ser      
   1200058     329166  fevereiro de   inserido.                               
                       2018           
                                      12.0-CURRENT after removing the         
                                      declaration of union semun unless       
   1200059     330299  2 de marc,o de _WANT_SEMUN is defined. Also the        
                       2018           removal of struct mymsg and the         
                                      renaming of kernel-only members of      
                                      struct semid_ds and struct msgid_ds.    
                       4 de marc,o de 12.0-CURRENT after upgrading clang,     
   1200060     330384  2018           llvm, lld, lldb, compiler-rt and libc++ 
                                      to 6.0.0 release.                       
   1200061     332100  6 de abril de  12.0-CURRENT after changing syslog(3)   
                       2018           to emit RFC 5424 formatted messages.    
   1200062     332423  12 de abril de 12.0-CURRENT after changing the Netmap  
                       2018           API.                                    
                                      12.0-CURRENT after reworking CTL        
   1200063     333446  10 de maio de  frontend and backend options to use     
                       2018           nv(3), allow creating multiple ioctl    
                                      frontend ports.                         
                       22 de maio de  12.0-CURRENT after changing the ifnet   
   1200064     334074  2018           address and multicast address TAILQ to  
                                      CK_STAILQ.                              
                       28 de maio de  12.0-CURRENT after changing dwatch(1)   
   1200065     334290  2018           to allow '-E code' to override profile  
                                      EVENT_DETAILS.                          
   1200066     334466  1 de junho de  12.0-CURRENT after removal of in-kernel 
                       2018           pmc tables for Intel.                   
   1200067     334892  9 de junho de  12.0-CURRENT after adding DW_LANG       
                       2018           constants to libdwarf.                  
   1200068     334930  12 de junho de 12.0-CURRENT after changing the         
                       2018           interface between the NFS modules.      
                                      12.0-CURRENT after changing struct      
   1200069     335237  15 de junho de kerneldumpheader to version 4 (similar  
                       2018           to version 2 in 11-STABLE and           
                                      previous).                              
                                      12.0-CURRENT after inlining atomic(9)   
   1200070     335873  2 de julho de  in modules on amd64 and i386 requiring  
                       2018           all modules of consumers to be rebuilt  
                                      for these architectures.                
                       4 de julho de  12.0-CURRENT after changing the ABI and 
   1200071     335930  2018           API of epoch(9) (335924) requiring      
                                      modules of consumers to be rebuilt.     
   1200072     335979  5 de julho de  12.0-CURRENT after changing the ABI and 
                       2018           API of struct xinpcb and friends.       
                                      12.0-CURRENT after changing the ABI and 
   1200073     336313  15 de julho de API of struct if_shared_ctx and struct  
                       2018           if_softc_ctx requiring modules of       
                                      iflib(9) consumers to be rebuilt.       
                       16 de julho de 12.0-CURRENT after updating the         
   1200074     336360  2018           configuration of libstdc++ to make use  
                                      of C99 functions.                       
                                      12.0-CURRENT after zfsloader being      
                       19 de julho de folded into loader, and after adding    
   1200075     336538  2018           ntpd:ntpd as uid:gid 123:123, and after 
                                      removing arm big-endian support         
                                      (MACHINE_ARCH=armeb).                   
   1200076     336914  30 de julho de 12.0-CURRENT after KPI changes to       
                       2018           timespecadd.                            
   1200077     337576  10 de agosto   12.0-CURRENT after timespec_get(3) was  
                       de 2018        added to the system.                    
   1200078     337863  15 de agosto   12.0-CURRENT after exec.created hook    
                       de 2018        for jails.                              
                                      12.0-CURRENT after converting           
                       19 de agosto   arc4random to using the Chacha20        
   1200079     338061  de 2018        algorithm and deprecating               
                                      arc4random_stir and                     
                                      arc4random_addrandom.                   
   1200080     338172  22 de agosto   12.0-CURRENT after removing the drm     
                       de 2018        drivers.                                
   1200081     338182  21 de agosto   12.0-CURRENT after KPI changes to NVMe. 
                       de 2018        
   1200082     338285  24 de agosto   12.0-CURRENT after reverting the        
                       de 2018        removal of the drm drivers.             
                       26 de agosto   12.0-CURRENT after removing             
   1200083     338331  de 2018        arc4random_stir and                     
                                      arc4random_addrandom.                   
                       5 de setembro  12.0-CURRENT after updating objcopy(1)  
   1200084     338478  de 2018        to properly handle little-endian MIPS64 
                                      object files.                           
   1200085     339270  19 de outubro  12.0-STABLE after updating OpenSSL to   
                       de 2018        version 1.1.1.                          
   1200086     339732  25 de outubro  12.0-STABLE after updating OpenSSL      
                       de 2018        shared library version numbers.         
   1200500     340471  16 de novembro 12-STABLE after releng/12.0 was         
                       de 2018        branched.                               
                                      12-STABLE apos o merge do fix para o    
                       6 de janeiro   comportamento do linux_destroy_dev ()   
   1200501     342801  de 2019        quando ainda existem arquivos abertos a 
                                      partir da cdev que esta sendo           
                                      destruida.                              
   1200502     343126  17 de janeiro  12-STABLE apos habilitar o sys/random.h 
                       de 2019        #include do C ++.                       
                       15 de          12-STABLE after merge of fixing         
   1200503     344152  fevereiro de   renameat(2) for CAPABILITIES kernels.   
                       2019           
   1200504     345169  15 de marc,o   12-STABLE after merging CCM for the     
                       de 2019        benefit of the ZoF port.                
                       20 de marc,o   12-STABLE after merging support for     
   1200505     345327  de 2019        selectively disabling ZFS without       
                                      disabling loader.                       
                                      12-STABLE after merging llvm, clang,    
   1200506     346168  12 de abril de compiler-rt, libc++, libunwind, lld,    
                       2019           lldb and openmp 8.0.0 final release     
                                      r356365.                                
                       17 de abril de 12-STABLE after MFC of iflib changes in 
   1200507     346337  2019           345303, 345658, and partially of        
                                      345305.                                 
   1200508     346784  27 de abril de 12-STABLE after ether_gen_addr          
                       2019           availability.                           
                       16 de maio de  12-STABLE after bumping the Mellanox    
   1200509     347790  2019           driver version numbers (mlx4en(4);      
                                      mlx5en(4)).                             
   1200510     348036  21 de maio de  12-STABLE after change to struct in     
                       2019           linuxkpi from 348035.                   
                       24 de maio de  12-STABLE after MFC of 347843: adding   
   1200511     348243  2019           group_leader member to struct           
                                      task_struct to the LinuxKPI.            
   1200512     348245  24 de maio de  12-STABLE after adding context member   
                       2019           to ww_mutex in LinuxKPI.                
                       5 de julho de  12-STABLE after MFC of epoch(9)         
   1200513     349763  2019           changes: 349763, 340404, 340415,        
                                      340417, 340419, 340420.                 
   1200514     350083  17 de julho de 12-STABLE after additions to LinuxKPI's 
                       2019           rcu list.                               
                                      12-STABLE after MFC of 349891           
                                      (reorganize the SRCS lists as one file  
   1200515     350877  11 de agosto   per line, and then alphabetize them)    
                       de 2019        and 349972 (add arm_sync_icache() and   
                                      arm_drain_writebuf() sysarch syscall    
                                      wrappers).                              
   1200516     351276  20 de agosto   12-STABLE after MFC of various changes  
                       de 2019        to iflib 351276.                        
                                      12-STABLE after adding sysfs            
   1200517     352076  9 de setembro  create/remove functions that handles    
                       de 2019        multiple files in one call to the       
                                      LinuxKPI.                               
   1200518     352114  10 de setembro 12-STABLE after additional updates to   
                       de 2019        LinuxKPI's sysfs.                       
   1200519     352351  15 de setembro 12-STABLE after MFC of the new fusefs   
                       de 2019        driver.                                 
   1201000     352546  20 de setembro releng/12.1 branched from               
                       de 2019        stable/12@r352480.                      
   1201500     352547  20 de setembro 12-STABLE after branching releng/12.1.  
                       de 2019        
   1201501     354598  10 de novembro 12-STABLE after fixing a potential OOB  
                       de 2019        read security issue in libc++.          
   1201502     354613  11 de novembro 12-STABLE after enabling device class   
                       de 2019        group attributes in the LinuxKPI.       
   1201503     354928  21 de novembro 12-STABLE after adding support for      
                       de 2019        AT_EXECPATH to elf_aux_info(3).         
                       10 de novembro 12-STABLE after correcting the C++      
   1201504     355658  de 2019        version check for declaring             
                                      timespec_get(3).                        
                       19 de dezembro 12-STABLE after adding sigsetop         
   1201505     355899  de 2019        extensions commonly found in musl libc  
                                      and glibc.                              
   1201506     355968  21 de dezembro 12-STABLE after doubling the value of   
                       de 2019        ARG_MAX, for 64 bit platforms.          
                       2 de janeiro   12-STABLE after adding functions to     
   1201507     356306  de 2020        bitstring(3) to find contiguous         
                                      sequences of set or unset bits.         
   1201508     356394  6 de janeiro   12-STABLE after making USB statistics   
                       de 2020        be per-device instead of per bus.       
                                      12-STABLE after updating llvm, clang,   
   1201509     356460  7 de janeiro   compiler-rt, libc++, libunwind, lld,    
                       de 2020        lldb and openmp to 9.0.0 final release  
                                      r372316.                                
   1201510     356679  13 de janeiro  12-STABLE after adding own counter for  
                       de 2020        cancelled USB transfers.                
                       31 de janeiro  12-STABLE after adding /etc/os-release  
   1201511     357333  de 2020        as a symbolic link to                   
                                      /var/run/os-release.                    
   1201512     357612  6 de fevereiro 12-STABLE after recent LinuxKPI         
                       de 2020        changes.                                
                       15 de abril de 12-STABLE after cloning the RCU         
   1201513     359957  2020           interface into a sleepable and a        
                                      non-sleepable part in the LinuxKPI.     
                       1 de maio de   12-STABLE after implementing full       
   1201514     360525  2020           bus_dma(9) support in the LinuxKPI and  
                                      pulling in all dependencies.            
                       1 de maio de   12-STABLE after updating llvm, clang,   
   1201515     360545  2020           compiler-rt, libc++, libunwind, lld,    
                                      lldb and openmp to 10.0.0 release.      
                       4 de maio de   12-STABLE after moving id_mapped to end 
   1201516     360620  2020           of bus_dma_impl structure to preserve   
                                      KPI.                                    
                       21 de maio de  12-STABLE after renaming vm.max_wired   
   1201517     361350  2020           to vm.max_user_wired and changing its   
                                      type.                                   
                       18 de junho de 12-STABLE after implementing            
   1201518     362319  2020           __is_constexpr() function macro in the  
                                      LinuxKPI.                               
   1201519     362916  4 de julho de  12-STABLE after making liblzma use      
                       2020           libmd implementation of SHA256.         
                       24 de julho de 12-STABLE after updating llvm, clang,   
   1201520     363494  2020           compiler-rt, libc++, libunwind, lld,    
                                      lldb and openmp to 10.0.1 release.      
   1201521     363790  3 de agosto de 12-STABLE after implementing the        
                       2020           array_size() function in the LinuxKPI.  
   1201522     363832  4 de agosto de 12-STABLE after adding sysctlbyname     
                       2020           system call.                            
   1201523     364390  19 de agosto   12-STABLE after change to clone the     
                       de 2020        task struct fields related to RCU.      
                       5 de setembro  12-STABLE after splitting XDR off into  
   1201524     365356  de 2020        a separate kernel module, to minimize   
                                      ZFS dependencies.                       
   1201525     365471  8 de setembro  12-STABLE after adding atomic and bswap 
                       de 2020        functions to libcompiler_rt.            
   1201526     365608  10 de setembro 12-STABLE after updating net80211 and   
                       de 2020        kernel privilege checking API changes.  
   1202000     365618  11 de setembro releng/12.2 branched from               
                       de 2020        stable/12@r365618.                      
   1202500     365619  11 de setembro 12-STABLE after branching releng/12.2.  
                       de 2020        
   1202501     365661  12 de setembro 12-STABLE after followup commits to     
                       de 2020        libcompiler_rt.                         
   1202502     365816  16 de setembro 12-STABLE after fixing crunchgen(1)     
                       de 2020        application build with WARNS=6.         
                       20 de outubro  12-STABLE after populating the acquire  
   1202503     366878  de 2020        context field of a ww_mutex in the      
                                      LinuxKPI.                               
   1202504     367511  9 de novembro  12-STABLE after the addition of         
                       de 2020        ptsname_r.                              

18.3. Versoes do FreeBSD 11

   Tabela 18.3. Valores do __FreeBSD_version para o FreeBSD 11

    Valor  Revisao      Data                        Release                   
   1100000 256284  10 de outubro  11.0-CURRENT.                               
                   de 2013        
                   19 de outubro  11.0-CURRENT after addition of support for  
   1100001 256776  de 2013        "first boot" rc.d scripts, so ports can     
                                  make use of this.                           
   1100002 257696  5 de novembro  11.0-CURRENT after dropping support for     
                   de 2013        historic ioctls.                            
   1100003 258284  17 de novembro 11.0-CURRENT after iconv changes.           
                   de 2013        
   1100004 259424  15 de dezembro 11.0-CURRENT after the behavior change of   
                   de 2013        gss_pseudo_random introduced in 259286.     
   1100005 260010  28 de dezembro 11.0-CURRENT after 259951 - Do not coalesce 
                   de 2013        entries in vm_map_stack(9).                 
   1100006 261246  28 de janeiro  11.0-CURRENT after upgrades of libelf and   
                   de 2014        libdwarf.                                   
   1100007 261283  30 de janeiro  11.0-CURRENT after upgrade of libc++ to 3.4 
                   de 2014        release.                                    
                   14 de          11.0-CURRENT after libc++ 3.4 ABI           
   1100008 261881  fevereiro de   compatibility fix.                          
                   2014           
                   16 de          11.0-CURRENT after upgrade of llvm/clang to 
   1100009 261991  fevereiro de   3.4 release.                                
                   2014           
                   28 de          11.0-CURRENT after upgrade of ncurses to    
   1100010 262630  fevereiro de   5.9 release (rev 262629).                   
                   2014           
   1100011 263102  13 de marc,o   11.0-CURRENT after ABI change in struct     
                   de 2014        if_data.                                    
   1100012 263140  14 de marc,o   11.0-CURRENT after removal of Novell IPX    
                   de 2014        protocol support.                           
   1100013 263152  14 de marc,o   11.0-CURRENT after removal of AppleTalk     
                   de 2014        protocol support.                           
                                  11.0-CURRENT after renaming                 
                                  <sys/capability.h> to <sys/capsicum.h> to   
                   16 de marc,o   avoid a clash with similarly named headers  
   1100014 263235  de 2014        in other operating systems. A compatibility 
                                  header is left in place to limit build      
                                  breakage, but will be deprecated in due     
                                  course.                                     
   1100015 263620  22 de marc,o   11.0-CURRENT after cnt rename to vm_cnt.    
                   de 2014        
   1100016 263660  23 de marc,o   11.0-CURRENT after addition of armv6hf      
                   de 2014        TARGET_ARCH.                                
   1100017 264121  4 de abril de  11.0-CURRENT after GCC support for __block  
                   2014           definition.                                 
   1100018 264212  6 de abril de  11.0-CURRENT after support for UDP-Lite     
                   2014           protocol (RFC 3828).                        
   1100019 264289  8 de abril de  11.0-CURRENT after FreeBSD-SA-14:06.openssl 
                   2014           (rev 264265).                               
                   1 de maio de   11.0-CURRENT after removing lindev in favor 
   1100020 265215  2014           of having /dev/full by default (rev         
                                  265212).                                    
                   6 de maio de   11.0-CURRENT after src.opts.mk changes,     
   1100021 266151  2014           decoupling make.conf(5) from buildworld     
                                  (rev 265419).                               
                                  11.0-CURRENT after changes to               
                   30 de maio de  strcasecmp(3), moving strcasecmp_l(3) and   
   1100022 266904  2014           strncasecmp_l(3) from <string.h> to         
                                  <strings.h> for POSIX 2008 compliance (rev  
                                  266865).                                    
                   13 de junho de 11.0-CURRENT after the CUSE library and     
   1100023 267440  2014           kernel module have been attached to the     
                                  build by default.                           
   1100024 267992  27 de junho de 11.0-CURRENT after sysctl(3) API change.    
                   2014           
   1100025 268066  30 de junho de 11.0-CURRENT after regex(3) library update  
                   2014           to add ">" and "<" delimiters.              
                   1 de julho de  11.0-CURRENT after the internal interface   
   1100026 268118  2014           between the NFS modules, including the      
                                  krpc, was changed by (rev 268115).          
   1100027 268441  8 de julho de  11.0-CURRENT after FreeBSD-SA-14:17.kmem    
                   2014           (rev 268431).                               
   1100028 268945  21 de julho de 11.0-CURRENT after hdestroy(3) compliance   
                   2014           fix changed ABI.                            
   1100029 270173  3 de agosto de 11.0-CURRENT after SOCK_DGRAM bug fix (rev  
                   2014           269489).                                    
                   1-o de         11.0-CURRENT after SOCK_RAW sockets were    
   1100030 270929  setembro de    changed to not modify packets at all.       
                   2014           
   1100031 271341  9 de setembro  11.0-CURRENT after FreeBSD-SA-14:18.openssl 
                   de 2014        (rev 269686).                               
                   11 de setembro 11.0-CURRENT after API changes to           
   1100032 271438  de 2014        ifa_ifwithbroadaddr, ifa_ifwithdstaddr,     
                                  ifa_ifwithnet, and ifa_ifwithroute.         
                   9 de setembro  11.0-CURRENT after changing access,         
   1100033 271657  de 2014        eaccess, and faccessat to validate the mode 
                                  argument.                                   
   1100034 271686  16 de setembro 11.0-CURRENT after FreeBSD-SA-14:19.tcp     
                   de 2014        (rev 271666).                               
   1100035 271705  17 de setembro 11.0-CURRENT after i915 HW context support. 
                   de 2014        
                   17 de setembro Version bump to have ABI note distinguish   
   1100036 271724  de 2014        binaries ready for strict mmap(2) flags     
                                  checking (rev 271724).                      
   1100037 272674  6 de outubro   11.0-CURRENT after addition of              
                   de 2014        explicit_bzero(3) (rev 272673).             
   1100038 272951  11 de outubro  11.0-CURRENT after cleanup of TCP wrapper   
                   de 2014        headers.                                    
   1100039 273250  18 de outubro  11.0-CURRENT after removal of MAP_RENAME    
                   de 2014        and MAP_NORESERVE.                          
   1100040 273432  21 de outubro  11.0-CURRENT after FreeBSD-SA-14:23 (rev    
                   de 2014        273146).                                    
                                  11.0-CURRENT after API changes to           
   1100041 273875  30 de outubro  syscall_register, syscall32_register,       
                   de 2014        syscall_register_helper and                 
                                  syscall32_register_helper (rev 273707).     
   1100042 274046  3 de novembro  11.0-CURRENT after a change to struct       
                   de 2014        tcpcb.                                      
   1100043 274085  4 de novembro  11.0-CURRENT after enabling vt(4) by        
                   de 2014        default.                                    
                   4 de novembro  11.0-CURRENT after adding new               
   1100044 274116  de 2014        libraries/utilities (dpv and figpar) for    
                                  data throughput visualization.              
   1100045 274162  4 de novembro  11.0-CURRENT after FreeBSD-SA-14:23,        
                   de 2014        FreeBSD-SA-14:24, and FreeBSD-SA-14:25.     
   1100046 274470  13 de novembro 11.0-CURRENT after kern_poll signature      
                   de 2014        change (rev 274462).                        
   1100047 274476  13 de novembro 11.0-CURRENT after removal of no-at version 
                   de 2014        of VFS syscalls helpers, like kern_open.    
                   1-o de         11.0-CURRENT after starting the process of  
   1100048 275358  dezembro de    removing the use of the deprecated          
                   2014           "M_FLOWID" flag from the network code.      
                   9 de dezembro  11.0-CURRENT after importing an important   
   1100049 275633  de 2014        fix to the LLVM vectorizer, which could     
                                  lead to buffer overruns in some cases.      
   1100050 275732  12 de dezembro 11.0-CURRENT after adding AES-ICM and       
                   de 2014        AES-GCM to OpenCrypto.                      
   1100051 276096  23 de dezembro 11.0-CURRENT after removing old NFS client  
                   de 2014        and server code from the kernel.            
   1100052 276479  31 de dezembro 11.0-CURRENT after upgrade of clang, llvm   
                   de 2014        and lldb to 3.5.0 release.                  
   1100053 276781  7 de janeiro   11.0-CURRENT after MCLGET(9) gained a       
                   de 2015        return value (rev 276750).                  
   1100054 277213  15 de janeiro  11.0-CURRENT after rewrite of callout       
                   de 2015        subsystem.                                  
   1100055 277528  22 de janeiro  11.0-CURRENT after reverting callout        
                   de 2015        changes in 277213.                          
   1100056 277610  23 de janeiro  11.0-CURRENT after addition of futimens and 
                   de 2015        utimensat system calls.                     
   1100057 277897  29 de janeiro  11.0-CURRENT after removal of d_thread_t.   
                   de 2015        
                   5 de fevereiro 11.0-CURRENT after addition of support for  
   1100058 278228  de 2015        probing the SCSI VPD Extended Inquiry page  
                                  (0x86).                                     
                   9 de fevereiro 11.0-CURRENT after import of xz 5.2.0,      
   1100059 278442  de 2015        which added multi-threaded compression and  
                                  lzma gained libthr dependency (rev 278433). 
                   16 de          11.0-CURRENT after forwarding FBIO_BLANK to 
   1100060 278846  fevereiro de   framebuffer clients.                        
                   2015           
                   18 de                                                      
   1100061 278964  fevereiro de   11.0-CURRENT after CDAI_FLAG_NONE addition.
                   2015           
                   23 de          11.0-CURRENT after mtio(4) and sa(4) API    
   1100062 279221  fevereiro de   and ioctl(2) additions.                     
                   2015           
   1100063 279728  7 de marc,o de 11.0-CURRENT after adding mutex support to  
                   2015           the pps_ioctl() API in the kernel.          
   1100064 279729  7 de marc,o de 11.0-CURRENT after adding PPS support to    
                   2015           USB serial drivers.                         
   1100065 280031  15 de marc,o   11.0-CURRENT after upgrading clang, llvm    
                   de 2015        and lldb to 3.6.0.                          
   1100066 280306  20 de marc,o   11.0-CURRENT after removal of SSLv2 support 
                   de 2015        from OpenSSL.                               
   1100067 280630  25 de marc,o   11.0-CURRENT after removal of SSLv2 support 
                   de 2015        from fetch(1) and fetch(3).                 
   1100068 281172  6 de abril de  11.0-CURRENT after change to                
                   2015           net.inet6.ip6.mif6table sysctl.             
   1100069 281550  15 de abril de 11.0-CURRENT after removal of const         
                   2015           qualifier from iconv(3).                    
   1100070 281613  16 de abril de 11.0-CURRENT after moving ALTQ from contrib 
                   2015           to net/altq.                                
   1100071 282256  29 de abril de 11.0-CURRENT after API/ABI change to smb(4) 
                   2015           (rev 281985).                               
   1100072 282319  1 de maio de   11.0-CURRENT after adding reallocarray(3)   
                   2015           in libc (rev 282314).                       
                                  11.0-CURRENT after extending the maximum    
   1100073 282650  8 de maio de   number of allowed PCM channels in a PCM     
                   2015           stream to 127 and decreasing the maximum    
                                  number of sub-channels to 1.                
                                  11.0-CURRENT after adding preliminary       
   1100074 283526  25 de maio de  support for x86-64 Linux binaries (rev      
                   2015           283424), and upgrading clang and llvm to    
                                  3.6.1.                                      
                   27 de maio de  11.0-CURRENT after dounmount()requiring a   
   1100075 283623  2015           reference on the passed struct mount (rev   
                                  283602).                                    
                   4 de junho de  11.0-CURRENT after disabled generation of   
   1100076 283983  2015           legacy formatted password databases entries 
                                  by default.                                 
   1100077 284233  10 de junho de 11.0-CURRENT after API changes to lim_cur,  
                   2015           lim_max, and lim_rlimit (rev 284215).       
   1100078 286672  12 de agosto   11.0-CURRENT after crunchgen(1) changes     
                   de 2015        from 284356 to 285986.                      
   1100079 286874  18 de agosto   11.0-CURRENT after import of jemalloc 4.0.0 
                   de 2015        (rev 286866).                               
   1100080 288943  5 de outubro   11.0-CURRENT after upgrading clang, llvm,   
                   de 2015        lldb, compiler-rt and libc++ to 3.7.0.      
   1100081 289415  16 de outubro  11.0-CURRENT after undating ZFS to support  
                   de 2015        resumable send/receive (rev 289362).        
   1100082 289594  19 de outubro  11.0-CURRENT after Linux KPI updates.       
                   de 2015        
   1100083 289749  22 de outubro  11.0-CURRENT after renaming linuxapi.ko to  
                   de 2015        linuxkpi.ko.                                
   1100084 290135  29 de outubro  11.0-CURRENT after moving the LinuxKPI      
                   de 2015        module into the default kernel build.       
   1100085 290207  30 de outubro  11.0-CURRENT after import of OpenSSL        
                   de 2015        1.0.2d.                                     
   1100086 290275  2 de novembro  11.0-CURRENT after making figpar(3) macros  
                   de 2015        more unique.                                
   1100087 290479  7 de novembro  11.0-CURRENT after changing                 
                   de 2015        sysctl_add_oid(9)'s ABI.                    
   1100088 290495  7 de novembro  11.0-CURRENT after string collation and     
                   de 2015        locales rework.                             
   1100089 290505  7 de novembro  11.0-CURRENT after API change to            
                   de 2015        sysctl_add_oid(9) (rev 290475).             
   1100090 290715  10 de novembro 11.0-CURRENT after API change to            
                   de 2015        callout_stop macro; (rev 290664).           
                   30 de novembro 11.0-CURRENT after changing the interface   
   1100091 291537  de 2015        between the nfsd.ko and nfscommon.ko        
                                  modules in 291527.                          
   1100092 292499  19 de dezembro 11.0-CURRENT after removal of               
                   de 2015        vm_pageout_grow_cache (rev 292469).         
   1100093 292966  30 de dezembro 11.0-CURRENT after removal of               
                   de 2015        sys/crypto/sha2.h (rev 292782).             
   1100094 294086  15 de janeiro  11.0-CURRENT after LinuxKPI PCI changes     
                   de 2016        (rev 294086).                               
   1100095 294327  19 de janeiro  11.0-CURRENT after LRO optimizations.       
                   de 2016        
   1100096 294505  21 de janeiro  11.0-CURRENT after LinuxKPI idr_*           
                   de 2016        additions.                                  
   1100097 294860  26 de janeiro  11.0-CURRENT after API change to dpv(3).    
                   de 2016        
                   16 de          11.0-CURRENT after API change to rman (rev  
   1100098 295682  fevereiro de   294883).                                    
                   2016           
                   18 de          11.0-CURRENT after allowing drivers to set  
   1100099 295739  fevereiro de   the TCP ACK/data segment aggregation limit. 
                   2016           
                   26 de          11.0-CURRENT after                          
   1100100 296136  fevereiro de   bus_alloc_resource_any(9) API addition.     
                   2016           
                   5 de marc,o de 11.0-CURRENT after upgrading our copies of  
   1100101 296417  2016           clang, llvm, lldb and compiler-rt to 3.8.0  
                                  release.                                    
   1100102 296749  12 de marc,o   11.0-CURRENT after libelf cross-endian fix  
                   de 2016        in rev 296685.                              
   1100103 297000  18 de marc,o   11.0-CURRENT after using uintmax_t for rman 
                   de 2016        ranges.                                     
                   21 de marc,o   11.0-CURRENT after tracking filemon usage   
   1100104 297156  de 2016        via a proc.p_filemon pointer rather than    
                                  its own lists.                              
   1100105 297602  6 de abril de  11.0-CURRENT after fixing sed functions i   
                   2016           and a from discarding leading white space.  
   1100106 298486  22 de abril de 11.0-CURRENT after fixes for using IPv6     
                   2016           addresses with RDMA.                        
   1100107 299090  4 de maio de   11.0-CURRENT after improving performance    
                   2016           and functionality of the bitstring(3) api.  
   1100108 299530  12 de maio de  11.0-CURRENT after fixing handling of       
                   2016           IOCTLs in the LinuxKPI.                     
   1100109 299933  16 de maio de  11.0-CURRENT after implementing more Linux  
                   2016           device related functions in the LinuxKPI.   
                   19 de maio de  11.0-CURRENT after adding support for       
   1100110 300207  2016           managing Shingled Magnetic Recording (SMR)  
                                  drives.                                     
   1100111 300303  20 de maio de  11.0-CURRENT after removing brk and sbrk    
                   2016           from arm64.                                 
   1100112 300539  23 de maio de  11.0-CURRENT after adding bit_count to the  
                   2016           bitstring(3) API.                           
   1100113 300701  26 de maio de  11.0-CURRENT after disabling alignment      
                   2016           faults on armv6.                            
   1100114 300806  26 de maio de  11.0-CURRENT after fixing crunchgen(1)      
                   2016           usage with MAKEOBJDIRPREFIX.                
   1100115 300982  30 de maio de  11.0-CURRENT after adding an mbuf flag for  
                   2016           M_HASHTYPE_.                                
                                  11.0-CURRENT after SHA-512t256 (rev 300903) 
   1100116 301011  31 de maio de  and Skein (rev 300966) where added to       
                   2016           libmd, libcrypt, the kernel, and ZFS (rev   
                                  301010).                                    
   1100117 301892  6 de junho de  11.0-CURRENT after libpam was synced with   
                   2016           stock 301602, bumping library version.      
   1100118 302071  21 de junho de 11.0-CURRENT after breaking binary          
                   2016           compatibility of struct disk 302069.        
   1100119 302150  23 de junho de 11.0-CURRENT after switching geom_disk to   
                   2016           using a pool mutex.                         
   1100120 302153  23 de junho de 11.0-CURRENT after adding spares to struct  
                   2016           ifnet.                                      
   1100121 303979  12 de agosto   11-STABLE after releng/11.0 branched from   
                   de 2015        11-STABLE (rev 303975).                     
   1100500 303979  12 de agosto   11.0-STABLE adding branched 303976.         
                   de 2016        
   1100501 304609  22 de agosto   11.0-STABLE after adding C++11 thread_local 
                   de 2016        support.                                    
   1100502 304865  26 de agosto   11.0-STABLE after LC_*_MASK fix.            
                   de 2016        
                   12 de setembro 11.0-STABLE after resolving a deadlock      
   1100503 305733  de 2016        between device_detach() and                 
                                  usbd_do_request_flags(9).                   
   1100504 307330  14 de outubro  11.0-STABLE after ZFS merges.               
                   de 2016        
   1100505 307590  19 de outubro  11.0-STABLE after struct fb_info change.    
                   de 2016        
   1100506 308048  28 de outubro  11.0-STABLE after installing header files   
                   de 2016        required development with libzfs_core.      
                                  11.0-STABLE after adding the ki_moretdname  
   1100507 310120  15 de dezembro member to struct kinfo_proc and struct      
                   de 2016        kinfo_proc32 to export the whole thread     
                                  name to user-space utilities.               
                   26 de dezembro 11.0-STABLE after upgrading our copies of   
   1100508 310618  de 2016        clang, llvm, lldb, compiler-rt and libc++   
                                  to 3.9.1 release, and adding lld 3.9.1.     
   1100509 311186  3 de janeiro   11.0-STABLE after crunchgen(1) META_MODE    
                   de 2017        fix (rev 311185).                           
   1100510 315312  15 de marc,o   11.0-STABLE after MFC of fget_cap,          
                   de 2017        getsock_cap, and related changes.           
                   2 de abril de  11.0-STABLE after multiple MFCs updating    
   1100511 316423  2017           clang, llvm, lld, lldb, compiler-rt and     
                                  libc++ to 4.0.0 release.                    
   1100512 316498  4 de abril de  11.0-STABLE after making CAM SIM lock       
                   2017           optional (revs 315673, 315674).             
   1100513 318197  11 de maio de  11.0-STABLE after merging the addition of   
                   2017           the <dev/mmc/mmc_ioctl.h> header.           
                   31 de maio de  11.0-STABLE after multiple MFCs of libpcap, 
   1100514 319279  2017           WITHOUT_INET6, and a few other minor        
                                  changes.                                    
   1101000 320486  30 de junho de releng/11.1 branched from stable/11.        
                   2017           
   1101001 320763  30 de junho de 11.1-RC1 apos de fundir a adic,ao de flag   
                   2017           MAP_GUARDmmap(2).                           
   1101500 320487  30 de junho de 11-STABLE after releng/11.1 branched.       
                   2017           
   1101501 320666  5 de julho de  11-STABLE after merging the MAP_GUARD       
                   2017           mmap(2) flag addition.                      
   1101502 321688  29 de julho de 11-STABLE after merging the NFS client      
                   2017           forced dismount support umount -N addition. 
   1101503 323431  11 de setembro 11-STABLE after merging changes making the  
                   de 2017        WRFSBASE instruction operational on amd64.  
                                  11-STABLE after merging libm from head,     
                   26 de setembro which adds cacoshl(3), cacosl(3),           
   1101504 324006  de 2017        casinhl(3), casinl(3), catanl(3),           
                                  catanhl(3), sincos(3), sincosf(3), and      
                                  sincosl(3).                                 
   1101505 324023  26 de setembro 11-STABLE after merging clang, llvm, lld,   
                   de 2017        lldb, compiler-rt and libc++ 5.0.0 release. 
   1101506 325003  25 de outubro  11-STABLE after merging 324281, adding the  
                   de 2017        value.u16 field to struct diocgattr_arg.    
                   24 de janeiro  11-STABLE after merging 325028, fixing      
   1101507 328379  de 2018        ptrace() to always clear the correct thread 
                                  event when resuming.                        
                   24 de janeiro  11-STABLE after merging 316648, renaming    
   1101508 328386  de 2018        smp_no_rendevous_barrier() to               
                                  smp_no_rendezvous_barrier().                
   1101509 328653  1 de fevereiro 11-STABLE after an overwrite merge backport 
                   de 2018        of the LinuxKPI from FreeBSD-head.          
                   17 de          11-STABLE after the cmpxchg() macro is now  
   1101510 329450  fevereiro de   fully functional in the LinuxKPI.           
                   2018           
                   25 de          11-STABLE after concluding the recent       
   1101511 329981  fevereiro de   LinuxKPI related updates.                   
                   2018           
                   19 de marc,o   11-STABLE after merging retpoline support   
   1101512 331219  de 2018        from the upstream llvm, clang and lld 5.0   
                                  branches.                                   
                   31 de marc,o   11-STABLE after merging clang, llvm, lld,   
   1101513 331838  de 2018        lldb, compiler-rt and libc++ 6.0.0 release, 
                                  and several follow-up fixes.                
                   5 de abril de  11-STABLE after merging 328331, adding a    
   1101514 332089  2018           new and incompatible interpretation of      
                                  ${name}_limits in rc scripts.               
                   10 de abril de 11-STABLE after reverting 331880, removing  
   1101515 332363  2018           the new and incompatible interpretation of  
                                  ${name}_limits in rc scripts.               
   1101516 334392  30 de maio de  11-STABLE after dwatch(1) touch-ups.        
                   2018           
   1102000 334459  1 de junho de  releng/11.2 branched from stable/11.        
                   2018           
   1102500 334461  1 de junho de  11-STABLE after releng/11.2 branched.       
                   2018           
   1102501 335436  20 de junho de 11-STABLE after LinuxKPI updates requiring  
                   2018           recompilation of external kernel modules.   
                                  11-STABLE after adding a socket option      
                   12 de setembro SO_TS_CLOCK and fixing recvmsg32() system   
   1102502 338617  de 2018        call to properly down-convert layout of the 
                                  64-bit structures to match what 32-bit      
                                  app(s) expect.                              
                   25 de setembro 11-STABLE after merging a TCP checksum fix  
   1102503 338931  de 2018        to iflib(9) and adding new media types to   
                                  if_media.h                                  
                                  11-STABLE after several MFCs: updating      
                   9 de novembro  objcopy(1) to properly handle little-endian 
   1102504 340309  de 2018        MIPS64 object; correcting mips64el test to  
                                  use ELF header; adding test for 64-bit ELF  
                                  in _libelf_is_mips64el.                     
                                  11-STABLE apos o merge do fix para o        
   1102505 342804  6 de janeiro   comportamento do linux_destroy_dev ()       
                   de 2019        quando ainda existem arquivos abertos a     
                                  partir da cdev que esta sendo destruida.    
                   17 de          11-STABLE depois de mesclar varios commits  
   1102506 344220  fevereiro de   para o lualoader.                           
                   2019           
                   16 de abril de 11-STABLE after merging llvm, clang,        
   1102507 346296  2019           compiler-rt, libc++, libunwind, lld, lldb   
                                  and openmp 8.0.0 final release r356365.     
   1102508 346784  27 de abril de 11-STABLE after ether_gen_addr              
                   2019           availability.                               
   1102509 347212  6 de maio de   11-STABLE after MFC of 345303, 345658, and  
                   2019           partially of 345305.                        
   1102510 347883  16 de maio de  11-STABLE after bumping the Mellanox driver 
                   2019           version numbers (mlx4en(4); mlx5en(4)).     
   1103000 349026  14 de junho de releng/11.3 branched from stable/11.        
                   2019           
   1103500 349027  14 de junho de 11-STABLE after releng/11.3 branched.       
                   2019           
   1103501 354598  10 de novembro 11-STABLE after fixing a potential OOB read 
                   de 2019        security issue in libc++.                   
                   11 de novembro 11-STABLE after adding sysfs create/remove  
   1103502 354614  de 2019        functions that handles multiple files in    
                                  one call to the LinuxKPI.                   
   1103503 354615  11 de novembro 11-STABLE after LinuxKPI sysfs              
                   de 2019        improvements.                               
   1103504 354616  11 de novembro 11-STABLE after enabling device class group 
                   de 2019        attributes in the LinuxKPI.                 
   1103505 355899  19 de dezembro 11-STABLE after adding sigsetop extensions  
                   de 2019        commonly found in musl libc and glibc.      
   1103506 356395  6 de janeiro   11-STABLE after making USB statistics be    
                   de 2020        per-device instead of per bus.              
   1103507 356680  13 de janeiro  11-STABLE after adding own counter for      
                   de 2020        cancelled USB transfers.                    
   1103508 357613  6 de fevereiro 11-STABLE after recent LinuxKPI changes.    
                   de 2020        
   1103509 359958  15 de abril de 11-STABLE after moving id_mapped to end of  
                   2020           bus_dma_impl structure to preserve KPI.     
                   5 de maio de   11-STABLE after updating llvm, clang,       
   1103510 360658  2020           compiler-rt, libc++, libunwind, lld, lldb   
                                  and openmp to 9.0.0 final release r372316.  
                   7 de maio de   11-STABLE after updating llvm, clang,       
   1103511 360784  2020           compiler-rt, libc++, libunwind, lld, lldb   
                                  and openmp to 10.0.0 release.               
   1104000 360804  8 de maio de   releng/11.4 branched from stable/11.        
                   2020           
                   8 de maio de   11.4-BETA1 after updating llvm, clang,      
   1104001 360822  2020           compiler-rt, libc++, libunwind, lld, lldb   
                                  and openmp to 10.0.0 release.               
   1104500 360805  8 de maio de   11-STABLE after releng/11.4 branched.       
                   2020           
                   18 de junho de 11-STABLE after implementing                
   1104501 362320  2020           __is_constexpr() function macro in the      
                                  LinuxKPI.                                   
   1104502 362919  4 de julho de  11-STABLE after making liblzma use libmd    
                   2020           implementation of SHA256.                   
                   24 de julho de 11-STABLE after updating llvm, clang,       
   1104503 363496  2020           compiler-rt, libc++, libunwind, lld, lldb   
                                  and openmp to 10.0.1 release.               
   1104504 363792  3 de agosto de 11-STABLE after implementing the            
                   2020           array_size() function in the LinuxKPI.      
   1104505 364391  19 de agosto   11-STABLE after change to clone the task    
                   de 2020        struct fields related to RCU.               
   1104506 365471  8 de setembro  11-STABLE after adding atomic and bswap     
                   de 2020        functions to libcompiler_rt.                
   1104507 365661  12 de setembro 11-STABLE after followup commits to         
                   de 2020        libcompiler_rt.                             
                   20 de outubro  11-STABLE after populating the acquire      
   1104508 366879  de 2020        context field of a ww_mutex in the          
                                  LinuxKPI.                                   
   1104509 366889  20 de outubro  11-STABLE after additions to LinuxKPI's RCU 
                   de 2020        list.                                       
   1104510 367513  9 de novembro  11-STABLE after the addition of ptsname_r.  
                   de 2020        

18.4. Versoes do FreeBSD 10

   Tabela 18.4. Valores do __FreeBSD_version para o FreeBSD 10

      Valor    Revisao     Data                      Release                  
                       26 de                                                  
   1000000     225757  setembro de  10.0-CURRENT.
                       2011         
                       4 de         10-CURRENT after addition of the          
   1000001     227070  novembro de  posix_fadvise(2) system call.             
                       2011         
                                    10-CURRENT after defining boolean         
                       12 de        true/false in sys/types.h, sizeof(bool)   
   1000002     228444  dezembro de  may have changed (rev 228444). 10-CURRENT 
                       2011         after xlocale.h was introduced (rev       
                                    227753).                                  
                                    10-CURRENT after major changes to         
                       16 de        carp(4), changing size of struct          
   1000003     228571  dezembro de  in_aliasreq, struct in6_aliasreq (rev     
                       2011         228571) and straitening arguments check   
                                    of SIOCAIFADDR (rev 228574).              
                       1 de janeiro 10-CURRENT after the removal of skpc()    
   1000004     229204  de 2012      and the addition of memcchr(9) (rev       
                                    229200).                                  
                       16 de        10-CURRENT after the removal of support   
   1000005     230207  janeiro de   for SIOCSIFADDR, SIOCSIFNETMASK,          
                       2012         SIOCSIFBRDADDR, SIOCSIFDSTADDR ioctls.    
                       26 de        10-CURRENT after introduction of read     
   1000006     230590  janeiro de   capacity data asynchronous notification   
                       2012         in the cam(4) layer.                      
                       5 de         10-CURRENT after introduction of new      
   1000007     231025  fevereiro de tcp(4) socket options: TCP_KEEPINIT,      
                       2012         TCP_KEEPIDLE, TCP_KEEPINTVL, and          
                                    TCP_KEEPCNT.                              
                       11 de        10-CURRENT after introduction of the new  
   1000008     231505  fevereiro de extensible sysctl(3) interface            
                       2012         NET_RT_IFLISTL to query address lists.    
                       25 de        10-CURRENT after import of libarchive     
   1000009     232154  fevereiro de 3.0.3 (rev 232153).                       
                       2012         
   1000010     233757  31 de marc,o 10-CURRENT after xlocale cleanup.         
                       de 2012      
   1000011     234355  16 de abril  10-CURRENT import of LLVM/Clang 3.1 trunk 
                       de 2012      154661 (rev 234353).                      
   1000012     234924  2 de maio de 10-CURRENT jemalloc import.               
                       2012         
   1000013     235788  22 de maio   10-CURRENT after byacc import.            
                       de 2012      
   1000014     237631  27 de junho  10-CURRENT after BSD sort becoming the    
                       de 2012      default sort (rev 237629).                
   1000015     238405  12 de julho  10-CURRENT after import of OpenSSL        
                       de 2012      1.0.1c.                                   
   (Nao mudou) 238429  13 de julho  10-CURRENT after the fix for LLVM/Clang   
                       de 2012      3.1 regression.                           
   1000016     239179  8 de agosto  10-CURRENT after KBI change in ucom(4).   
                       de 2012      
   1000017     239214  8 de agosto  10-CURRENT after adding streams feature   
                       de 2012      to the USB stack.                         
                       8 de                                                   
   1000018     240233  setembro de  10-CURRENT after major rewrite of pf(4).
                       2012         
                       6 de outubro 10-CURRENT after pfil(9) KBI/KPI changed  
   1000019     241245  de 2012      to supply packets in net byte order to    
                                    AF_INET filter hooks.                     
                       16 de        10-CURRENT after the network interface    
   1000020     241610  outubro de   cloning KPI changed and struct if_clone   
                       2012         becoming opaque.                          
                       22 de        10-CURRENT after removal of support for   
   1000021     241897  outubro de   non-MPSAFE filesystems and addition of    
                       2012         support for FUSEFS (rev 241519).          
                       22 de        10-CURRENT after the entire IPv4 stack    
   1000022     241913  outubro de   switched to network byte order for IP     
                       2012         packet header storage.                    
                                    10-CURRENT after jitter buffer in the     
                       5 de         common USB serial driver code, to         
   1000023     242619  novembro de  temporarily store characters if the TTY   
                       2012         buffer is full. Add flow stop and start   
                                    signals when this happens.                
                       5 de         10-CURRENT after clang was made the       
   1000024     242624  novembro de  default compiler on i386 and amd64.       
                       2012         
                                    10-CURRENT after the sin6_scope_id member 
                                    variable in struct sockaddr_in6 was       
                       17 de        changed to being filled by the kernel     
   1000025     243443  novembro de  before passing the structure to the       
                       2012         userland via sysctl or routing socket.    
                                    This means the KAME-specific embedded     
                                    scope id in sin6_addr.s6_addr[2] is       
                                    always cleared in userland application.   
                       11 de        10-CURRENT after install gained the -N    
   1000026     245313  janeiro de   flag. May also be used to indicate the    
                       2013         presence of nmtree.                       
                       29 de        10-CURRENT after cat gained the -l flag   
   1000027     246084  janeiro de   (rev 246083).                             
                       2013         
                       13 de        10-CURRENT after USB moved to the driver  
   1000028     246759  fevereiro de structure requiring a rebuild of all USB  
                       2013         modules.                                  
                                    10-CURRENT after the introduction of      
   1000029     247821  4 de marc,o  tickless callout facility which also      
                       de 2013      changed the layout of struct callout (rev 
                                    247777).                                  
                       12 de marc,o 10-CURRENT after KPI breakage introduced  
   1000030     248210  de 2013      in the VM subsystem to support read/write 
                                    locking (rev 248084).                     
                       26 de abril  10-CURRENT after the dst parameter of the 
   1000031     249943  de 2013      ifnet if_output method was changed to     
                                    take const qualifier (rev 249925).        
                       1 de Maio de 10-CURRENT after the introduction of the  
   1000032     250163  2013         accept4(2) (rev 250154) and pipe2(2) (rev 
                                    250159) system calls.                     
   1000033     250881  21 de maio   10-CURRENT after flex 2.5.37 import.      
                       de 2013      
                                    10-CURRENT after the addition of these    
                                    functions to libm: cacos(3), cacosf(3),   
                       3 de junho   cacosh(3), cacoshf(3), casin(3),          
   1000034     251294  de 2013      casinf(3), casinh(3), casinhf(3),         
                                    catan(3), catanf(3), catanh(3),           
                                    catanhf(3), logl(3), log2l(3), log10l(3), 
                                    log1pl(3), expm1l(3).                     
   1000035     251527  8 de junho   10-CURRENT after the introduction of the  
                       de 2013      aio_mlock(2) system call (rev 251526).    
                       9 de julho   10-CURRENT after the addition of a new    
   1000036     253049  de 2013      function to the kernel GSSAPI module's    
                                    function call interface.                  
                                    10-CURRENT after the migration of         
                                    statistics structures to PCPU counters.   
                                    Changed structures include: ahstat,       
   1000037     253089  9 de julho   arpstat, espstat, icmp6_ifstat,           
                       de 2013      icmp6stat, in6_ifstat, ip6stat,           
                                    ipcompstat, ipipstat, ipsecstat,          
                                    mrt6stat, mrtstat, pfkeystat, pim6stat,   
                                    pimstat, rip6stat, udpstat (rev 253081).  
                       16 de julho  10-CURRENT after making ARM EABI the      
   1000038     253396  de 2013      default ABI on arm, armeb, armv6, and     
                                    armv6eb architectures.                    
   1000039     253549  22 de julho  10-CURRENT after CAM and mps(4) driver    
                       de 2013      scanning changes.                         
   1000040     253638  24 de julho  10-CURRENT after addition of libusb       
                       de 2013      pkgconf files.                            
   1000041     253970  5 de agosto  10-CURRENT after change from time_second  
                       de 2013      to time_uptime in PF_INET6.               
   1000042     254138  9 de agosto  10-CURRENT after VM subsystem change to   
                       de 2013      unify soft and hard busy mechanisms.      
                                    10-CURRENT after WITH_ICONV is enabled by 
                       13 de agosto default. A new src.conf(5) option,        
   1000043     254273  de 2013      WITH_LIBICONV_COMPAT (disabled by         
                                    default) adds libiconv_open to provide    
                                    compatibility with the libiconv port.     
   1000044     254358  15 de agosto 10-CURRENT after libc.so conversion to an 
                       de 2013      ld(1) script (rev 251668).                
                                    10-CURRENT after devfs programming        
   1000045     254389  15 de agosto interface change by replacing the cdevsw  
                       de 2013      flag D_UNMAPPED_IO with the struct cdev   
                                    flag SI_UNMAPPED.                         
                                    10-CURRENT after addition of              
   1000046     254537  19 de agosto M_PROTO[9-12] and removal of              
                       de 2013      M_FRAG|M_FIRSTFRAG|M_LASTFRAG mbuf flags  
                                    (rev 254524, 254526).                     
                       21 de agosto 10-CURRENT after stat(2) update to allow  
   1000047     254627  de 2013      storing some Windows/DOS and CIFS file    
                                    attributes as stat(2) flags.              
   1000048     254672  22 de agosto 10-CURRENT after modification of          
                       de 2013      structure xsctp_inpcb.                    
                       24 de agosto 10-CURRENT after physio(9) support for    
   1000049     254760  de 2013      devices that do not function properly     
                                    with split I/O, such as sa(4).            
                       24 de agosto 10-CURRENT after modifications of         
   1000050     254844  de 2013      structure mbuf (rev 254780, 254799,       
                                    254804, 254807 254842).                   
   1000051     254887  25 de agosto 10-CURRENT after Radeon KMS driver import 
                       de 2013      (rev 254885).                             
                       3 de         10-CURRENT after import of NetBSD         
   1000052     255180  setembro de  libexecinfo is connected to the build.    
                       2013         
                       6 de         10-CURRENT after API and ABI changes to   
   1000053     255305  setembro de  the Capsicum framework.                   
                       2013         
                       6 de         10-CURRENT after gcc and libstdc++ are no 
   1000054     255321  setembro de  longer built by default.                  
                       2013         
                       6 de         10-CURRENT after addition of MMAP_32BIT   
   1000055     255449  setembro de  mmap(2) flag (rev 255426).                
                       2013         
                       7 de                                                   
   1000100     259065  dezembro de  releng/10.0 branched from stable/10.
                       2013         
                       10 de                                                  
   1000500     256283  outubro de   10-STABLE after branch from head/.
                       2013         
                       22 de        10-STABLE after addition of first-boot    
   1000501     256916  outubro de   rc(8) support.                            
                       2013         
                       20 de        10-STABLE after removal of iconv symbols  
   1000502     258398  novembro de  from libc.so.7.                           
                       2013         
                       7 de         releng/10.0 __FreeBSD_version update to   
   1000510     259067  dezembro de  prevent the value from going backwards.   
                       2013         
                       7 de                                                   
   1000700     259069  dezembro de  10-STABLE after releng/10.0 branch.
                       2013         
                       15 de                                                  
   1000701     259447  dezembro de  10.0-STABLE after Heimdal encoding fix.
                       2013         
                       31 de                                                  
   1000702     260135  dezembro de  10-STABLE after MAP_STACK fixes.
                       2013         
   1000703     262801  5 de marc,o  10-STABLE after upgrade of libc++ to 3.4  
                       de 2014      release.                                  
   1000704     262889  7 de marc,o  10-STABLE after MFC of the vt(4) driver   
                       de 2014      (rev 262861).                             
   1000705     263508  21 de marc,o 10-STABLE after upgrade of llvm/clang to  
                       de 2014      3.4 release.                              
   1000706     264214  6 de abril   10-STABLE after GCC support for __block   
                       de 2014      definition.                               
   1000707     264289  8 de abril   10-STABLE after FreeBSD-SA-14:06.openssl. 
                       de 2014      
                       30 de abril  10-STABLE after FreeBSD-SA-14:07.devfs,   
   1000708     265122  de 2014      FreeBSD-SA-14:08.tcp, and                 
                                    FreeBSD-SA-14:09.openssl.                 
   1000709     265946  13 de maio   10-STABLE after support for UDP-Lite      
                       de 2014      protocol (RFC 3828).                      
                                    10-STABLE after changes to strcasecmp(3), 
   1000710     267465  13 de junho  moving strcasecmp_l(3) and                
                       de 2014      strncasecmp_l(3) from <string.h> to       
                                    <strings.h> for POSIX 2008 compliance.    
   1000711     268442  8 de julho   10-STABLE after FreeBSD-SA-14:17.kmem     
                       de 2014      (rev 268432).                             
   1000712     269400  1 de agosto  10-STABLE after nfsd(8) 4.1 merge (rev    
                       de 2014      269398).                                  
   1000713     269484  3 de agosto  10-STABLE after regex(3) library update   
                       de 2014      to add ">" and "<" delimiters.            
   1000714     270174  3 de agosto  10-STABLE after SOCK_DGRAM bug fix (rev   
                       de 2014      269490).                                  
                       9 de         10-STABLE after FreeBSD-SA-14:18 (rev     
   1000715     271341  setembro de  269686).                                  
                       2014         
                       16 de        10-STABLE after FreeBSD-SA-14:19 (rev     
   1000716     271686  setembro de  271667).                                  
                       2014         
                       18 de                                                  
   1000717     271816  setembro de  10-STABLE after i915 HW context support.
                       2014         
   1001000     272463  2 de outubro 10.1-RC1 after releng/10.1 branch.        
                       de 2014      
   1001500     272464  2 de outubro 10-STABLE after releng/10.1 branch.       
                       de 2014      
                       21 de        10-STABLE after FreeBSD-SA-14:20,         
   1001501     273432  outubro de   FreeBSD-SA-14:22, and FreeBSD-SA-14:23    
                       2014         (rev 273411).                             
                       4 de         10-STABLE after FreeBSD-SA-14:23,         
   1001502     274162  novembro de  FreeBSD-SA-14:24, and FreeBSD-SA-14:25.   
                       2014         
                       25 de        10-STABLE after merging new               
   1001503     275040  novembro de  libraries/utilities (dpv(1), dpv(3), and  
                       2014         figpar(3)) for data throughput            
                                    visualization.                            
                       13 de        10-STABLE after merging an important fix  
   1001504     275742  dezembro de  to the LLVM vectorizer, which could lead  
                       2014         to buffer overruns in some cases.         
   1001505     276633  3 de janeiro 10-STABLE after merging some arm          
                       de 2015      constants in 276312.                      
                       12 de        10-STABLE after merging max table size    
   1001506     277087  janeiro de   update for yacc.                          
                       2015         
                       27 de        10-STABLE after changes to the UDP        
   1001507     277790  janeiro de   tunneling callback to provide a context   
                       2015         pointer and the source sockaddr.          
                       18 de        10-STABLE after addition of the           
   1001508     278974  fevereiro de CDAI_TYPE_EXT_INQ request type.           
                       2015         
                                    10-STABLE after FreeBSD-EN-15:01.vt,      
                       25 de        FreeBSD-EN-15:02.openssl,                 
   1001509     279287  fevereiro de FreeBSD-EN-15:03.freebsd-update,          
                       2015         FreeBSD-SA-15:04.igmp, and                
                                    FreeBSD-SA-15:05.bind.                    
                       26 de                                                  
   1001510     279329  fevereiro de 10-STABLE after MFC of rev 278964.
                       2015         
   1001511     280246  19 de marc,o 10-STABLE after sys/capability.h is       
                       de 2015      renamed to sys/capsicum.h (rev 280224/).  
   1001512     280438  24 de marc,o 10-STABLE after addition of new mtio(4),  
                       de 2015      sa(4) ioctls.                             
                       24 de abril  10-STABLE after starting the process of   
   1001513     281955  de 2015      removing the use of the deprecated        
                                    "M_FLOWID" flag from the network code.    
   1001514     282275  30 de abril  10-STABLE after MFC of iconv(3) fixes.    
                       de 2015      
   1001515     282781  11 de maio   10-STABLE after adding back M_FLOWID.     
                       de 2015      
   1001516     283341  24 de maio   10-STABLE after MFC of many USB things.   
                       de 2015      
   1001517     283950  3 de junho   10-STABLE after MFC of sound related      
                       de 2015      things.                                   
   1001518     284204  10 de junho  10-STABLE after MFC of zfs vfs fixes (rev 
                       de 2015      284203).                                  
   1001519     284720  23 de junho  10-STABLE after reverting bumping MAXCPU  
                       de 2015      on amd64.                                 
   1002000     285830  24 de julho  releng/10.2 branched from 10-STABLE.      
                       de 2015      
   1002500     285831  24 de julho  10-STABLE after releng/10.2 branched from 
                       de 2015      10-STABLE.                                
                       8 de outubro 10-STABLE after merge of ZFS changes that 
   1002501     289005  de 2015      affected the internal interface of        
                                    zfeature_info structure (rev 288572).     
                       24 de        10-STABLE after merge of dump device      
   1002502     291243  novembro de  changes that affected the arguments of    
                       2015         g_dev_setdumpdev()(rev 291215).           
                       14 de        10-STABLE after merge of changes to the   
   1002503     292224  dezembro de  internal interface between the nfsd.ko    
                       2015         and nfscommon.ko modules, requiring them  
                                    to be upgraded together (rev 292223).     
                       22 de        10-STABLE after merge of xz 5.2.2 merge   
   1002504     292589  dezembro de  (multithread support) (rev 292588).       
                       2015         
                       30 de        10-STABLE after merge of changes to       
   1002505     292908  dezembro de  pci(4) (rev 292907).                      
                       2015         
   1002506     293476  9 de janeiro 10-STABLE after merge of utimensat(2)     
                       de 2016      (rev 293473).                             
   1002507     293610  9 de janeiro 10-STABLE after merge of changes to       
                       de 2016      linux(4) (rev 293477 through 293609 ).    
   1002508     293619  9 de janeiro 10-STABLE after merge of changes to       
                       de 2016      figpar(3) types/macros (rev 290275).      
                       1 de         10-STABLE after merge of API change to    
   1002509     295107  fevereiro de dpv(3).                                   
                       2016         
   1003000     296373  4 de marc,o  releng/10.3 branched from 10-STABLE.      
                       de 2016      
   1003500     296374  4 de marc,o  10-STABLE after releng/10.3 branched from 
                       de 2016      10-STABLE.                                
   1003501     298299  19 de junho  10-STABLE after adding kdbcontrol's -P    
                       de 2016      option (rev 298297).                      
   1003502     299966  19 de junho  10-STABLE after libcrypto.so was made     
                       de 2016      position independent.                     
   1003503     300235  19 de junho  10-STABLE after allowing MK_ overrides    
                       de 2016      (rev 300233).                             
   1003504     302066  21 de junho  10-STABLE after MFC of filemon changes    
                       de 2016      from 11-CURRENT.                          
   1003505     302228  27 de junho  10-STABLE after converting sed to use     
                       de 2016      REG_STARTEND, fixing a Mesa issue.        
   1003506     304611  22 de agosto 10-STABLE after adding C++11 thread_local 
                       de 2016      support.                                  
   1003507     304864  26 de agosto 10-STABLE after LC_*_MASK fix.            
                       de 2016      
                       12 de        10-STABLE after resolving a deadlock      
   1003508     305734  setembro de  between device_detach() and               
                       2016         usbd_do_request_flags(9).                 
                       14 de                                                  
   1003509     307331  outubro de   10-STABLE after ZFS merges.
                       2016         
                       28 de        10-STABLE after installing header files   
   1003510     308047  outubro de   required development with libzfs_core.    
                       2016         
                       15 de        10-STABLE after exporting whole thread    
   1003511     310121  dezembro de  name in kinfo_proc (rev 309676).          
                       2016         
   1003512     315730  22 de marc,o 10-STABLE after libmd changes (rev        
                       de 2017      314143).                                  
   1003513     316499  4 de abril   10-STABLE after making CAM SIM lock       
                       de 2017      optional (revs 315673, 315674).           
   1003514     318198  11 de maio   10-STABLE after merging the addition of   
                       de 2017      the <dev/mmc/mmc_ioctl.h> header.         
   1003515     321222  19 de julho  10-STABLE after adding C++14 sized        
                       de 2017      deallocation functions to libc++.         
   1003516     321717  30 de julho  10-STABLE after merging the MAP_GUARD     
                       de 2017      mmap(2) flag addition.                    
                       15 de                                                  
   1004000     323604  setembro de  releng/10.4 branched from 10-STABLE.
                       2017         
                       15 de        10-STABLE after releng/10.4 branched from 
   1004500     323605  setembro de  10-STABLE.                                
                       2017         
                       24 de        10-STABLE after merging 325028, fixing    
   1004501     328379  janeiro de   ptrace() to always clear the correct      
                       2018         thread event when resuming.               
   1004502     356396  6 de janeiro 10-STABLE after making USB statistics be  
                       de 2020      per-device instead of per bus.            
                       13 de        10-STABLE after adding own counter for    
   1004503     356681  janeiro de   cancelled USB transfers.                  
                       2020         

18.5. Versoes do FreeBSD 9

   Tabela 18.5. Valores do __FreeBSD_version para o FreeBSD 9

   Valor  Revisao      Data                        Release                    
   900000 196432  22 de agosto   9.0-CURRENT.                                 
                  de 2009        
                  8 de setembro  9.0-CURRENT after importing x86emu, a        
   900001 197019  de 2009        software emulator for real mode x86 CPU from 
                                 OpenBSD.                                     
   900002 197430  23 de setembro 9.0-CURRENT after implementing the           
                  de 2009        EVFILT_USER kevent filter functionality.     
   900003 200039  2 de dezembro  9.0-CURRENT after addition of sigpause(2)    
                  de 2009        and PIE support in csu.                      
   900004 200185  6 de dezembro  9.0-CURRENT after addition of libulog and    
                  de 2009        its libutempter compatibility interface.     
                                 9.0-CURRENT after addition of                
   900005 200447  12 de dezembro sleepq_sleepcnt(9), which can be used to     
                  de 2009        query the number of waiters on a specific    
                                 waiting queue.                               
                  4 de janeiro   9.0-CURRENT after change of the scandir(3)   
   900006 201513  de 2010        and alphasort(3) prototypes to conform to    
                                 SUSv4.                                       
                                 9.0-CURRENT after the removal of utmp(5) and 
   900007 202219  13 de janeiro  the addition of utmpx (see getutxent(3)) for 
                  de 2010        improved logging of user logins and system   
                                 events.                                      
   900008 202722  20 de janeiro  9.0-CURRENT after the import of BSDL bc/dc   
                  de 2010        and the deprecation of GNU bc/dc.            
                                 9.0-CURRENT after the addition of            
                  26 de janeiro  SIOCGIFDESCR and SIOCSIFDESCR ioctls to      
   900009 203052  de 2010        network interfaces. These ioctl can be used  
                                 to manipulate interface description, as      
                                 inspired by OpenBSD.                         
   900010 205471  22 de marc,o   9.0-CURRENT after the import of zlib 1.2.4.  
                  de 2010        
   900011 207410  24 de abril de 9.0-CURRENT after adding soft-updates        
                  2010           journalling.                                 
   900012 207842  10 de maio de  9.0-CURRENT after adding liblzma, xz, xzdec, 
                  2010           and lzmainfo.                                
   900013 208486  24 de maio de  9.0-CURRENT after bringing in USB fixes for  
                  2010           linux(4).                                    
   900014 208973  10 de junho de 9.0-CURRENT after adding Clang.              
                  2010           
   900015 210390  22 de julho de 9.0-CURRENT after the import of BSD grep.    
                  2010           
   900016 210565  28 de julho de 9.0-CURRENT after adding mti_zone to struct  
                  2010           malloc_type_internal.                        
   900017 211701  23 de agosto   9.0-CURRENT after changing back default grep 
                  de 2010        to GNU grep and adding WITH_BSD_GREP knob.   
                  24 de agosto   9.0-CURRENT after the pthread_kill(3)        
   900018 211735  de 2010        -generated signal is identified as SI_LWP in 
                                 si_code. Previously, si_code was SI_USER.    
   900019 211937  28 de agosto   9.0-CURRENT after addition of the            
                  de 2010        MAP_PREFAULT_READ flag to mmap(2).           
                  9 de setembro  9.0-CURRENT after adding drain functionality 
   900020 212381  de 2010        to sbufs, which also changed the layout of   
                                 struct sbuf.                                 
   900021 212568  13 de setembro 9.0-CURRENT after DTrace has grown support   
                  de 2010        for userland tracing.                        
                  2 de outubro   9.0-CURRENT after addition of the BSDL man   
   900022 213395  de 2010        utilities and retirement of GNU/GPL man      
                                 utilities.                                   
   900023 213700  11 de outubro  9.0-CURRENT after updating xz to git         
                  de 2010        20101010 snapshot.                           
   900024 215127  11 de novembro 9.0-CURRENT depois que libgcc.a foi trocado  
                  de 2010        por libcompiler_rt.a.                        
   900025 215166  12 de novembro 9.0-CURRENT after the introduction of the    
                  de 2010        modularised congestion control.              
                                 9.0-CURRENT after the introduction of Serial 
   900026 216088  30 de novembro Management Protocol (SMP) passthrough and    
                  de 2010        the XPT_SMP_IO and XPT_GDEV_ADVINFO CAM      
                                 CCBs.                                        
   900027 216212  5 de dezembro  9.0-CURRENT after the addition of log2 to    
                  de 2010        libm.                                        
                  21 de dezembro 9.0-CURRENT after the addition of the Hhook  
   900028 216615  de 2010        (Helper Hook), Khelp (Kernel Helpers) and    
                                 Object Specific Data (OSD) KPIs.             
                                 9.0-CURRENT after the modification of the    
                  28 de dezembro TCP stack to allow Khelp modules to interact 
   900029 216758  de 2010        with it via helper hook points and store     
                                 per-connection data in the TCP control       
                                 block.                                       
   900030 217309  12 de janeiro  9.0-CURRENT after the update of libdialog to 
                  de 2011        version 20100428.                            
   900031 218414  7 de fevereiro 9.0-CURRENT after the addition of            
                  de 2011        pthread_getthreadid_np(3).                   
   900032 218425  8 de fevereiro 9.0-CURRENT after the removal of the         
                  de 2011        uio_yield prototype and symbol.              
                  18 de          9.0-CURRENT after the update of binutils to  
   900033 218822  fevereiro de   version 2.17.50.                             
                  2011           
   900034 219406  8 de marc,o de 9.0-CURRENT after the struct sysvec          
                  2011           (sv_schedtail) changes.                      
                  29 de marc,o   9.0-CURRENT after the update of base gcc and 
   900035 220150  de 2011        libstdc++ to the last GPLv2 licensed         
                                 revision.                                    
   900036 220770  18 de abril de 9.0-CURRENT after the removal of libobjc and 
                  2011           Objective-C support from the base system.    
                  13 de maio de  9.0-CURRENT after importing the              
   900037 221862  2011           libprocstat(3) library and fuser(1) utility  
                                 to the base system.                          
   900038 222167  22 de maio de  9.0-CURRENT after adding a lock flag         
                  2011           argument to VFS_FHTOVP(9).                   
   900039 223637  28 de junho de 9.0-CURRENT after importing pf from OpenBSD  
                  2011           4.5.                                         
   900040 224217  19 de julho de Increase default MAXCPU for FreeBSD to 64 on 
                  2011           amd64 and ia64 and to 128 for XLP (mips).    
                  13 de agosto   9.0-CURRENT after the implementation of      
   900041 224834  de 2011        Capsicum capabilities; fget(9) gains a       
                                 rights argument.                             
                  28 de agosto   Bump shared libraries' version numbers for   
   900042 225350  de 2011        libraries whose ABI has changed in           
                                 preparation for 9.0.                         
                  2 de setembro  Add automatic detection of USB mass storage  
   900043 225350  de 2011        devices which do not support the no          
                                 synchronize cache SCSI command.              
   900044 225469  10 de setembro Re-factor auto-quirk. 9.0-RELEASE.           
                  de 2011        
   900045 229285  2 de janeiro   9-STABLE after MFC of true/false from        
                  de 2012        1000002.                                     
   900500 229318  2 de janeiro   9.0-STABLE.                                  
                  de 2012        
   900501 229723  6 de janeiro   9.0-STABLE after merging of addition of the  
                  de 2012        posix_fadvise(2) system call.                
   900502 230237  16 de janeiro  9.0-STABLE after merging gperf 3.0.3         
                  de 2012        
                  15 de          9.0-STABLE after introduction of the new     
   900503 231768  fevereiro de   extensible sysctl(3) interface               
                  2012           NET_RT_IFLISTL to query address lists.       
   900504 232728  3 de marc,o de 9.0-STABLE after changes related to mounting 
                  2012           of filesystem inside a jail.                 
                  13 de marc,o   9.0-STABLE after introduction of new tcp(4)  
   900505 232945  de 2012        socket options: TCP_KEEPINIT, TCP_KEEPIDLE,  
                                 TCP_KEEPINTVL, and TCP_KEEPCNT.              
                  22 de maio de  9.0-STABLE after introduction of the         
   900506 235786  2012           quick_exit function and related changes      
                                 required for C++11.                          
   901000 239082  5 de agosto de 9.1-RELEASE.                                 
                  2012           
   901500 239081  6 de agosto de 9.1-STABLE after branching releng/9.1        
                  2012           (RELENG_9_1).                                
                  11 de novembro 9.1-STABLE after LIST_PREV(3) added to       
   901501 240659  de 2012        queue.h (rev 242893) and KBI change in USB   
                                 serial devices.                              
                  28 de novembro 9.1-STABLE after USB serial jitter buffer    
   901502 243656  de 2012        requires rebuild of USB serial device        
                                 modules.                                     
                  21 de          9.1-STABLE after USB moved to the driver     
   901503 247090  fevereiro de   structure requiring a rebuild of all USB     
                  2013           modules. Also indicates the presence of      
                                 nmtree.                                      
                  15 de marc,o   9.1-STABLE after install gained -l, -M, -N   
   901504 248338  de 2013        and related flags and cat gained the -l      
                                 option.                                      
   901505 251687  13 de junho de 9.1-STABLE after fixes in ctfmerge           
                  2013           bootstrapping (rev 249243).                  
   902001 253912  3 de agosto de releng/9.2 branched from stable/9.           
                  2013           
   902501 253913  2 de agosto de 9.2-STABLE after creation of releng/9.2      
                  2013           branch.                                      
   902502 254938  26 de agosto   9.2-STABLE after inclusion of the PIM_RESCAN 
                  de 2013        CAM path inquiry flag.                       
   902503 254979  27 de agosto   9.2-STABLE after inclusion of the            
                  de 2013        SI_UNMAPPED cdev flag.                       
   902504 256917  22 de outubro  9.2-STABLE after inclusion of support for    
                  de 2013        "first boot" rc(8) scripts.                  
   902505 259448  12 de dezembro 9.2-STABLE after Heimdal encoding fix.       
                  de 2013        
   902506 260136  31 de dezembro 9-STABLE after MAP_STACK fixes (rev 260082). 
                  de 2013        
   902507 262801  5 de marc,o de 9-STABLE after upgrade of libc++ to 3.4      
                  2014           release.                                     
   902508 263171  14 de marc,o   9-STABLE after merge of the Radeon KMS       
                  de 2014        driver (rev 263170).                         
   902509 263509  21 de marc,o   9-STABLE after upgrade of llvm/clang to 3.4  
                  de 2014        release.                                     
   902510 263818  27 de marc,o   9-STABLE after merge of the vt(4) driver.    
                  de 2014        
   902511 264289  27 de marc,o   9-STABLE after FreeBSD-SA-14:06.openssl.     
                  de 2014        
   902512 265123  30 de abril de 9-STABLE after FreeBSD-SA-14:08.tcp.         
                  2014           
   903000 267656  20 de junho de 9-RC1 releng/9.3 branch.                     
                  2014           
   903500 267657  20 de junho de 9.3-STABLE releng/9.3 branch.                
                  2014           
   903501 268443  8 de julho de  9-STABLE after FreeBSD-SA-14:17.kmem (rev    
                  2014           268433).                                     
   903502 270175  19 de agosto   9-STABLE after SOCK_DGRAM bug fix (rev       
                  de 2014        269789).                                     
   903503 271341  9 de setembro  9-STABLE after FreeBSD-SA-14:18 (rev         
                  de 2014        269687).                                     
   903504 271686  16 de setembro 9-STABLE after FreeBSD-SA-14:19 (rev         
                  de 2014        271668).                                     
                  21 de outubro  9-STABLE after FreeBSD-SA-14:20,             
   903505 273432  de 2014        FreeBSD-SA-14:21, and FreeBSD-SA-14:22 (rev  
                                 273412).                                     
   903506 274162  4 de novembro  9-STABLE after FreeBSD-SA-14:23,             
                  de 2014        FreeBSD-SA-14:24, and FreeBSD-SA-14:25.      
                  13 de dezembro 9-STABLE after merging an important fix to   
   903507 275742  de 2014        the LLVM vectorizer, which could lead to     
                                 buffer overruns in some cases.               
                                 9-STABLE after FreeBSD-EN-15:01.vt,          
                  25 de          FreeBSD-EN-15:02.openssl,                    
   903508 279287  fevereiro de   FreeBSD-EN-15:03.freebsd-update,             
                  2015           FreeBSD-SA-15:04.igmp, and                   
                                 FreeBSD-SA-15:05.bind.                       
                  29 de          9-STABLE after bumping the default value of  
   903509 296219  fevereiro de   compat.linux.osrelease to 2.6.18 to support  
                  2016           the linux-c6-* ports out of the box.         
                                 9-STABLE after System Binary Interface (SBI) 
   903510 300236  19 de maio de  page was moved in latest version of Berkeley 
                  2016           Boot Loader (BBL) due to code size increase  
                                 in 300234.                                   
                  12 de setembro 9-STABLE after resolving a deadlock between  
   903511 305735  de 2016        device_detach() and                          
                                 usbd_do_request_flags(9).                    

18.6. Versoes do FreeBSD 8

   Tabela 18.6. Valores do __FreeBSD_version para o FreeBSD 8

   Valor  Revisao     Data                        Release                     
                  11 de        8.0-CURRENT. Separating wide and single byte   
   800000 172531  outubro de   ctype.                                         
                  2007         
                  16 de        8.0-CURRENT after libpcap 0.9.8 and tcpdump    
   800001 172688  outubro de   3.9.8 import.                                  
                  2007         
                  21 de        8.0-CURRENT after renaming kthread_create(9)   
   800002 172841  outubro de   and friends to kproc_create(9) etc.            
                  2007         
                               8.0-CURRENT after ABI backwards compatibility  
                  24 de        to the FreeBSD 4/5/6 versions of the           
   800003 172932  outubro de   PCIOCGETCONF, PCIOCREAD and PCIOCWRITE IOCTLs  
                  2007         was added, which required the ABI of the       
                               PCIOCGETCONF IOCTL to be broken again          
                  12 de        8.0-CURRENT after agp(4) driver moved from     
   800004 173573  novembro de  src/sys/pci to src/sys/dev/agp                 
                  2007         
                  4 de         8.0-CURRENT after changes to the jumbo frame   
   800005 174261  dezembro de  allocator (rev 174247).                        
                  2007         
                  7 de         8.0-CURRENT after the addition of callgraph    
   800006 174399  dezembro de  capture functionality to hwpmc(4).             
                  2007         
                  25 de        8.0-CURRENT after kdb_enter() gains a "why"    
   800007 174901  dezembro de  argument.                                      
                  2007         
                  28 de        8.0-CURRENT after LK_EXCLUPGRADE option        
   800008 174951  dezembro de  removal.                                       
                  2007         
   800009 175168  9 de janeiro 8.0-CURRENT after introduction of              
                  de 2008      lockmgr_disown(9)                              
                  10 de        8.0-CURRENT after the vn_lock(9) prototype     
   800010 175204  janeiro de   change.                                        
                  2008         
                  13 de        8.0-CURRENT after the VOP_LOCK(9) and          
   800011 175295  janeiro de   VOP_UNLOCK(9) prototype changes.               
                  2008         
                  19 de        8.0-CURRENT after introduction of              
   800012 175487  janeiro de   lockmgr_recursed(9), BUF_RECURSED(9) and       
                  2008         BUF_ISLOCKED(9) and the removal of             
                               BUF_REFCNT().                                  
                  23 de        8.0-CURRENT after introduction of the "ASCII"  
   800013 175581  janeiro de   encoding.                                      
                  2008         
                  24 de        8.0-CURRENT after changing the prototype of    
   800014 175636  janeiro de   lockmgr(9) and removal of lockcount() and      
                  2008         LOCKMGR_ASSERT().                              
                  26 de        8.0-CURRENT after extending the types of the   
   800015 175688  janeiro de   fts(3) structures.                             
                  2008         
                  1 de         8.0-CURRENT after adding an argument to        
   800016 175872  fevereiro de MEXTADD(9)                                     
                  2008         
                  6 de         8.0-CURRENT after the introduction of LK_NODUP 
   800017 176015  fevereiro de and LK_NOWITNESS options in the lockmgr(9)     
                  2008         space.                                         
                  8 de                                                        
   800018 176112  fevereiro de 8.0-CURRENT after the addition of m_collapse.
                  2008         
                  9 de         8.0-CURRENT after the addition of current      
   800019 176124  fevereiro de working directory, root directory, and jail    
                  2008         directory support to the kern.proc.filedesc    
                               sysctl.                                        
                  13 de        8.0-CURRENT after introduction of              
   800020 176251  fevereiro de lockmgr_assert(9) and BUF_ASSERT functions.    
                  2008         
                  15 de        8.0-CURRENT after introduction of              
   800021 176321  fevereiro de lockmgr_args(9) and LK_INTERNAL flag removal.  
                  2008         
   800022 176556  (backed out) 8.0-CURRENT after changing the default system  
                               ar to BSD ar(1).                               
                  25 de        8.0-CURRENT after changing the prototypes of   
   800023 176560  fevereiro de lockstatus(9) and VOP_ISLOCKED(9), more        
                  2008         specifically retiring the struct thread        
                               argument.                                      
                               8.0-CURRENT after axing out the lockwaiters    
   800024 176709  1 de marc,o  and BUF_LOCKWAITERS functions, changing the    
                  de 2008      return value of brelvp from void to int and    
                               introducing new flags for lockinit(9).         
   800025 176958  8 de marc,o  8.0-CURRENT after adding F_DUP2FD command to   
                  de 2008      fcntl(2).                                      
                  12 de marc,o 8.0-CURRENT after changing the priority        
   800026 177086  de 2008      parameter to cv_broadcastpri such that 0 means 
                               no priority.                                   
   800027 177551  24 de marc,o 8.0-CURRENT after changing the bpf monitoring  
                  de 2008      ABI when zerocopy bpf buffers were added.      
   800028 177637  26 de marc,o 8.0-CURRENT after adding l_sysid to struct     
                  de 2008      flock.                                         
                  28 de marc,o 8.0-CURRENT after reintegration of the         
   800029 177688  de 2008      BUF_LOCKWAITERS function and the addition of   
                               lockmgr_waiters(9).                            
   800030 177844  1 de abril   8.0-CURRENT after the introduction of the      
                  de 2008      rw_try_rlock(9) and rw_try_wlock(9) functions. 
   800031 177958  6 de abril   8.0-CURRENT after the introduction of the      
                  de 2008      lockmgr_rw and lockmgr_args_rw functions.      
                               8.0-CURRENT after the implementation of the    
                  8 de abril   openat and related syscalls, introduction of   
   800032 178006  de 2008      the O_EXEC flag for the open(2), and providing 
                               the corresponding linux compatibility          
                               syscalls.                                      
                               8.0-CURRENT after added write(2) support for   
                  8 de abril   psm(4) in native operation level. Now          
   800033 178017  de 2008      arbitrary commands can be written to           
                               /dev/psm%d and status can be read back from    
                               it.                                            
   800034 178051  10 de abril  8.0-CURRENT after introduction of the memrchr  
                  de 2008      function.                                      
   800035 178256  16 de abril  8.0-CURRENT after introduction of the          
                  de 2008      fdopendir function.                            
   800036 178362  20 de abril  8.0-CURRENT after switchover of 802.11         
                  de 2008      wireless to multi-bss support (aka vaps).      
   800037 178892  9 de maio de 8.0-CURRENT after addition of multi routing    
                  2008         table support (aka setfib(1), setfib(2)).      
                  26 de maio   8.0-CURRENT after removal of netatm and        
   800038 179316  de 2008      ISDN4BSD. Also, the addition of the Compact C  
                               Type (CTF) tools.                              
   800039 179784  14 de junho  8.0-CURRENT after removal of sgtty.            
                  de 2008      
   800040 180025  26 de junho  8.0-CURRENT with kernel NFS lockd client.      
                  de 2008      
   800041 180691  22 de julho  8.0-CURRENT after addition of                  
                  de 2008      arc4random_buf(3) and arc4random_uniform(3).   
   800042 181439  8 de agosto  8.0-CURRENT after addition of cpuctl(4).       
                  de 2008      
   800043 181694  13 de agosto 8.0-CURRENT after changing bpf(4) to use a     
                  de 2008      single device node, instead of device cloning. 
                               8.0-CURRENT after the commit of the first step 
                  17 de agosto of the vimage project renaming global          
   800044 181803  de 2008      variables to be virtualized with a V_ prefix   
                               with macros to map them back to their global   
                               names.                                         
                  20 de agosto 8.0-CURRENT after the integration of the       
   800045 181905  de 2008      MPSAFE TTY layer, including changes to various 
                               drivers and utilities that interact with it.   
                  8 de         8.0-CURRENT after the separation of the GDT    
   800046 182869  setembro de  per CPU on amd64 architecture.                 
                  2008         
                  10 de        8.0-CURRENT after removal of VSVTX, VSGID and  
   800047 182905  setembro de  VSUID.                                         
                  2008         
                  16 de        8.0-CURRENT after converting the kernel NFS    
   800048 183091  setembro de  mount code to accept individual mount options  
                  2008         in the nmount(2) iovec, not just one big       
                               struct nfs_args.                               
                  17 de        8.0-CURRENT after the removal of suser(9) and  
   800049 183114  setembro de  suser_cred(9).                                 
                  2008         
                  20 de                                                       
   800050 184099  outubro de   8.0-CURRENT after buffer cache API change.
                  2008         
                  23 de        8.0-CURRENT after the removal of the MALLOC(9) 
   800051 184205  outubro de   and FREE(9) macros.                            
                  2008         
                  28 de        8.0-CURRENT after the introduction of          
   800052 184419  outubro de   accmode_t and renaming of VOP_ACCESS 'a_mode'  
                  2008         argument to 'a_accmode'.                       
                  2 de         8.0-CURRENT after the prototype change of      
   800053 184555  novembro de  vfs_busy(9) and the introduction of its        
                  2008         MBF_NOWAIT and MBF_MNTLSTLOCK flags.           
                               8.0-CURRENT after the addition of buf_ring,    
                  22 de        memory barriers and ifnet functions to         
   800054 185162  novembro de  facilitate multiple hardware transmit queues   
                  2008         for cards that support them, and a lockless    
                               ring-buffer implementation to enable drivers   
                               to more efficiently manage queuing of packets. 
                  27 de        8.0-CURRENT after the addition of Intel(TM)    
   800055 185363  novembro de  Core, Core2, and Atom support to hwpmc(4).     
                  2008         
                  29 de        8.0-CURRENT after the introduction of          
   800056 185435  novembro de  multi-/no-IPv4/v6 jails.                       
                  2008         
                  1 de         8.0-CURRENT after the switch to the ath hal    
   800057 185522  dezembro de  source code.                                   
                  2008         
                  12 de        8.0-CURRENT after the introduction of the      
   800058 185968  dezembro de  VOP_VPTOCNP operation.                         
                  2008         
                  15 de        8.0-CURRENT incorporates the new arp-v2        
   800059 186119  dezembro de  rewrite.                                       
                  2008         
                  19 de                                                       
   800060 186344  dezembro de  8.0-CURRENT after the addition of makefs.
                  2008         
                  15 de        8.0-CURRENT after TCP Appropriate Byte         
   800061 187289  janeiro de   Counting.                                      
                  2009         
                  28 de        8.0-CURRENT after removal of minor(),          
   800062 187830  janeiro de   minor2unit(), unit2minor(), etc.               
                  2009         
                  18 de        8.0-CURRENT after GENERIC config change to use 
   800063 188745  fevereiro de the USB2 stack, but also the addition of       
                  2009         fdevname(3).                                   
                  23 de        8.0-CURRENT after the USB2 stack is moved to   
   800064 188946  fevereiro de and replaces dev/usb.                          
                  2009         
                  26 de        8.0-CURRENT after the renaming of all          
   800065 189092  fevereiro de functions in libmp(3).                         
                  2009         
                  27 de        8.0-CURRENT after changing USB devfs handling  
   800066 189110  fevereiro de and layout.                                    
                  2009         
                  28 de        8.0-CURRENT after adding getdelim(),           
   800067 189136  fevereiro de getline(), stpncpy(), strnlen(), wcsnlen(),    
                  2009         wcscasecmp(), and wcsncasecmp().               
   800068 189276  2 de marc,o  8.0-CURRENT after renaming the ushub devclass  
                  de 2009      to uhub.                                       
   800069 189585  9 de marc,o  8.0-CURRENT after libusb20.so.1 was renamed to 
                  de 2009      libusb.so.1.                                   
                  9 de marc,o  8.0-CURRENT after merging IGMPv3 and           
   800070 189592  de 2009      Source-Specific Multicast (SSM) to the IPv4    
                               stack.                                         
   800071 189825  14 de marc,o 8.0-CURRENT after gcc was patched to use C99   
                  de 2009      inline semantics in c99 and gnu99 mode.        
                  15 de marc,o 8.0-CURRENT after the IFF_NEEDSGIANT flag has  
   800072 189853  de 2009      been removed; non-MPSAFE network device        
                               drivers are no longer supported.               
                  18 de marc,o 8.0-CURRENT after the dynamic string token     
   800073 190265  de 2009      substitution has been implemented for rpath    
                               and needed paths.                              
   800074 190373  24 de marc,o 8.0-CURRENT after tcpdump 4.0.0 and libpcap    
                  de 2009      1.0.0 import.                                  
   800075 190787  6 de abril   8.0-CURRENT after layout of structs vnet_net,  
                  de 2009      vnet_inet and vnet_ipfw has been changed.      
   800076 190866  9 de abril   8.0-CURRENT after adding delay profiles in     
                  de 2009      dummynet.                                      
   800077 190914  14 de abril  8.0-CURRENT after removing VOP_LEASE() and     
                  de 2009      vop_vector.vop_lease.                          
                               8.0-CURRENT after struct rt_weight fields have 
                  15 de abril  been added to struct rt_metrics and struct     
   800078 191080  de 2009      rt_metrics_lite, changing the layout of struct 
                               rt_metrics_lite. A bump to RTM_VERSION was     
                               made, but backed out.                          
   800079 191117  15 de abril  8.0-CURRENT after struct llentry pointers are  
                  de 2009      added to struct route and struct route_in6.    
   800080 191126  15 de abril  8.0-CURRENT after layout of struct inpcb has   
                  de 2009      been changed.                                  
   800081 191267  19 de abril  8.0-CURRENT after the layout of struct         
                  de 2009      malloc_type has been changed.                  
                  21 de abril  8.0-CURRENT after the layout of struct ifnet   
   800082 191368  de 2009      has changed, and with if_ref() and if_rele()   
                               ifnet refcounting.                             
   800083 191389  22 de abril  8.0-CURRENT after the implementation of a      
                  de 2009      low-level Bluetooth HCI API.                   
   800084 191672  29 de abril  8.0-CURRENT after IPv6 SSM and MLDv2 changes.  
                  de 2009      
   800085 191688  30 de abril  8.0-CURRENT after enabling support for VIMAGE  
                  de 2009      kernel builds with one active image.           
   800086 191910  8 de maio de 8.0-CURRENT after adding support for input     
                  2009         lines of arbitrarily length in patch(1).       
                               8.0-CURRENT after some VFS KPI changes. The    
                               thread argument has been removed from the FSD  
   800087 191990  11 de maio   parts of the VFS. VFS_* functions do not need  
                  de 2009      the context any more because it always refers  
                               to curthread. In some special cases, the old   
                               behavior is retained.                          
   800088 192470  20 de maio   8.0-CURRENT after net80211 monitor mode        
                  de 2009      changes.                                       
   800089 192649  23 de maio   8.0-CURRENT after adding UDP control block     
                  de 2009      support.                                       
   800090 192669  23 de maio   8.0-CURRENT after virtualizing interface       
                  de 2009      cloning.                                       
   800091 192895  27 de maio   8.0-CURRENT after adding hierarchical jails    
                  de 2009      and removing global securelevel.               
                               8.0-CURRENT after changing sx_init_flags()     
   800092 193011  29 de maio   KPI. The SX_ADAPTIVESPIN is retired and a new  
                  de 2009      SX_NOADAPTIVE flag is introduced to handle the 
                               reversed logic.                                
   800093 193047  29 de maio   8.0-CURRENT after adding mnt_xflag to struct   
                  de 2009      mount.                                         
   800094 193093  30 de maio   8.0-CURRENT after adding VOP_ACCESSX(9).       
                  de 2009      
                               8.0-CURRENT after changing the polling KPI.    
                               The polling handlers now return the number of  
   800095 193096  30 de maio   packets processed. A new IFCAP_POLLING_NOCOUNT 
                  de 2009      is also introduced to specify that the return  
                               value is not significant and the counting      
                               should be skipped.                             
                  1 de junho   8.0-CURRENT after updating to the new netisr   
   800096 193219  de 2009      implementation and after changing the way we   
                               store and access FIBs.                         
   800097 193731  8 de junho   8.0-CURRENT after the introduction of vnet     
                  de 2009      destructor hooks and infrastructure.           
                               8.0-CURRENT after the introduction of netgraph 
   (Nao   194012  11 de junho  outbound to inbound path call detection and    
   mudou)         de 2009      queuing, which also changed the layout of      
                               struct thread.                                 
   800098 194210  14 de junho  8.0-CURRENT after OpenSSL 0.9.8k import.       
                  de 2009      
                  22 de junho  8.0-CURRENT after NGROUPS update and moving    
   800099 194675  de 2009      route virtualization into its own VImage       
                               module.                                        
   800100 194920  24 de junho  8.0-CURRENT after SYSVIPC ABI change.          
                  de 2009      
   800101 195175  29 de junho  8.0-CURRENT after the removal of the           
                  de 2009      /dev/net/* per-interface character devices.    
   800102 195634  12 de julho  8.0-CURRENT after padding was added to struct  
                  de 2009      sackhint, struct tcpcb, and struct tcpstat.    
                  13 de julho  8.0-CURRENT after replacing struct tcpopt with 
   800103 195654  de 2009      struct toeopt in the TOE driver interface to   
                               the TCP syncache.                              
   800104 195699  14 de julho  8.0-CURRENT after the addition of the          
                  de 2009      linker-set based per-vnet allocator.           
                  19 de julho  8.0-CURRENT after version bump for all shared  
   800105 195767  de 2009      libraries that do not have symbol versioning   
                               turned on.                                     
   800106 195852  24 de julho  8.0-CURRENT after introduction of OBJT_SG VM   
                  de 2009      object type.                                   
                  2 de agosto  8.0-CURRENT after making the newbus subsystem  
   800107 196037  de 2009      Giant free by adding the newbus sxlock and     
                               8.0-RELEASE.                                   
                  21 de        8.0-STABLE after implementing EVFILT_USER      
   800108 199627  novembro de  kevent filter.                                 
                  2009         
   800500 201749  7 de janeiro 8.0-STABLE after __FreeBSD_version bump to     
                  de 2010      make pkg_add -r use packages-8-stable.         
                  24 de        8.0-STABLE after change of the scandir(3) and  
   800501 202922  janeiro de   alphasort(3) prototypes to conform to SUSv4.   
                  2010         
                  31 de                                                       
   800502 203299  janeiro de   8.0-STABLE after addition of sigpause(2).
                  2010         
                  25 de        8.0-STABLE after addition of SIOCGIFDESCR and  
   800503 204344  fevereiro de SIOCSIFDESCR ioctls to network interfaces.     
                  2010         These ioctl can be used to manipulate          
                               interface description, as inspired by OpenBSD. 
                  1 de marc,o  8.0-STABLE after MFC of importing x86emu, a    
   800504 204546  de 2010      software emulator for real mode x86 CPU from   
                               OpenBSD.                                       
   800505 208259  18 de maio   8.0-STABLE after MFC of adding liblzma, xz,    
                  de 2010      xzdec, and lzmainfo.                           
   801000 209150  14 de junho  8.1-RELEASE                                    
                  de 2010      
   801500 209146  14 de junho  8.1-STABLE after 8.1-RELEASE.                  
                  de 2010      
                  3 de         8.1-STABLE after KBI change in struct          
   801501 214762  novembro de  sysentvec, and implementation of               
                  2010         PL_FLAG_SCE/SCX/EXEC/SI and pl_siginfo for     
                               ptrace(PT_LWPINFO) .                           
                  22 de                                                       
   802000 216639  dezembro de  8.2-RELEASE
                  2010         
                  22 de                                                       
   802500 216654  dezembro de  8.2-STABLE after 8.2-RELEASE.
                  2010         
                  28 de        8.2-STABLE after merging DTrace changes,       
   802501 219107  fevereiro de including support for userland tracing.        
                  2011         
   802502 219324  6 de marc,o  8.2-STABLE after merging log2 and log2f into   
                  de 2011      libm.                                          
                  1 de maio de 8.2-STABLE after upgrade of the gcc to the     
   802503 221275  2011         last GPLv2 version from the FSF                
                               gcc-4_2-branch.                                
                  28 de maio   8.2-STABLE after introduction of the KPI and   
   802504 222401  de 2011      supporting infrastructure for modular          
                               congestion control.                            
   802505 222406  28 de maio   8.2-STABLE after introduction of Hhook and     
                  de 2011      Khelp KPIs.                                    
   802506 222408  28 de maio   8.2-STABLE after addition of OSD to struct     
                  de 2011      tcpcb.                                         
   802507 222741  6 de junho   8.2-STABLE after ZFS v28 import.               
                  de 2011      
                  8 de junho   8.2-STABLE after removal of the schedtail      
   802508 222846  de 2011      event handler and addition of the sv_schedtail 
                               method to struct sysvec.                       
   802509 224017  14 de julho  8.2-STABLE after merging the SSSE3 support     
                  de 2011      into binutils.                                 
   802510 224214  19 de julho  8.2-STABLE after addition of RFTSIGZMB flag    
                  de 2011      for rfork(2).                                  
                  9 de         8.2-STABLE after addition of automatic         
   802511 225458  setembro de  detection of USB mass storage devices which do 
                  2011         not support the no synchronize cache SCSI      
                               command.                                       
                  10 de        8.2-STABLE after merging of re-factoring of    
   802512 225470  setembro de  auto-quirk.                                    
                  2011         
                  25 de        8.2-STABLE after merging of the                
   802513 226763  outubro de   MAP_PREFAULT_READ flag to mmap(2).             
                  2011         
                  16 de        8.2-STABLE after merging of addition of        
   802514 227573  novembro de  posix_fallocate(2) syscall.                    
                  2011         
   802515 229725  6 de janeiro 8.2-STABLE after merging of addition of the    
                  de 2012      posix_fadvise(2) system call.                  
                  16 de                                                       
   802516 230239  janeiro de   8.2-STABLE after merging gperf 3.0.3
                  2012         
                  15 de        8.2-STABLE after introduction of the new       
   802517 231769  fevereiro de extensible sysctl(3) interface NET_RT_IFLISTL  
                  2012         to query address lists.                        
   803000 232446  3 de marc,o  8.3-RELEASE.                                   
                  de 2012      
   803500 232439  3 de marc,o  8.3-STABLE after branching releng/8.3          
                  de 2012      (RELENG_8_3).                                  
                  21 de        8.3-STABLE after MFC of two USB fixes (rev     
   803501 247091  fevereiro de 246616 and 246759).                            
                  2013         
   804000 248850  28 de marc,o 8.4-RELEASE.                                   
                  de 2013      
   804500 248819  28 de marc,o 8.4-STABLE after 8.4-RELEASE.                  
                  de 2013      
                  16 de        8.4-STABLE after MFC of upstream Heimdal       
   804501 259449  dezembro de  encoding fix.                                  
                  2013         
   804502 265123  30 de abril  8.4-STABLE after FreeBSD-SA-14:08.tcp.         
                  de 2014      
   804503 268444  9 de julho   8.4-STABLE after FreeBSD-SA-14:17.kmem.        
                  de 2014      
                  9 de         8.4-STABLE after FreeBSD-SA-14:18 (rev         
   804504 271341  setembro de  271305).                                       
                  2014         
                  16 de        8.4-STABLE after FreeBSD-SA-14:19 (rev         
   804505 271686  setembro de  271668).                                       
                  2014         
                  21 de        8.4-STABLE depois de FreeBSD-SA-14:21 (rev     
   804506 273432  outubro de   273413).                                       
                  2014         
                  4 de         8.4-STABLE after FreeBSD-SA-14:23,             
   804507 274162  novembro de  FreeBSD-SA-14:24, and FreeBSD-SA-14:25.        
                  2014         
                               8-STABLE after FreeBSD-EN-15:01.vt,            
                  25 de        FreeBSD-EN-15:02.openssl,                      
   804508 279287  fevereiro de FreeBSD-EN-15:03.freebsd-update,               
                  2015         FreeBSD-SA-15:04.igmp, and                     
                               FreeBSD-SA-15:05.bind.                         
                  12 de        8-STABLE after resolving a deadlock between    
   804509 305736  setembro de  device_detach() and usbd_do_request_flags(9).  
                  2016         

18.7. Versoes do FreeBSD 7

   Tabela 18.7. Valores do __FreeBSD_version para o FreeBSD 7

   Valor  Revisao      Data                        Release                    
   700000 147925  11 de julho de 7.0-CURRENT.                                 
                  2005           
                  23 de julho de 7.0-CURRENT after bump of all shared library 
   700001 148341  2005           versions that had not been changed since     
                                 RELENG_5.                                    
   700002 149039  13 de agosto   7.0-CURRENT after credential argument is     
                  de 2005        added to dev_clone event handler.            
   700003 149470  25 de agosto   7.0-CURRENT after memmem(3) is added to      
                  de 2005        libc.                                        
                  30 de outubro  7.0-CURRENT after solisten(9) kernel         
   700004 151888  de 2005        arguments are modified to accept a backlog   
                                 parameter.                                   
   700005 152296  11 de novembro 7.0-CURRENT after IFP2ENADDR() was changed   
                  de 2005        to return a pointer to IF_LLADDR().          
   700006 152315  11 de novembro 7.0-CURRENT after addition of if_addr member 
                  de 2005        to struct ifnet and IFP2ENADDR() removal.    
                  2 de dezembro  7.0-CURRENT after incorporating scripts from 
   700007 153027  de 2005        the local_startup directories into the base  
                                 rcorder(8).                                  
   700008 153107  5 de dezembro  7.0-CURRENT after removal of MNT_NODEV mount 
                  de 2005        option.                                      
   700009 153519  19 de dezembro 7.0-CURRENT after ELF-64 type changes and    
                  de 2005        symbol versioning.                           
                                 7.0-CURRENT after addition of hostb and      
   700010 153579  20 de dezembro vgapci drivers, addition of                  
                  de 2005        pci_find_extcap(), and changing the AGP      
                                 drivers to no longer map the aperture.       
   700011 153936  31 de dezembro 7.0-CURRENT after tv_sec was made time_t on  
                  de 2005        all platforms but Alpha.                     
   700012 154114  8 de janeiro   7.0-CURRENT after ldconfig_local_dirs        
                  de 2006        change.                                      
                  12 de janeiro  7.0-CURRENT after changes to /etc/rc.d/abi   
   700013 154269  de 2006        to support /compat/linux/etc/ld.so.cache     
                                 being a symlink in a readonly filesystem.    
   700014 154863  26 de janeiro  7.0-CURRENT after pts import.                
                  de 2006        
   700015 157144  26 de marc,o   7.0-CURRENT after the introduction of        
                  de 2006        version 2 of hwpmc(4)'s ABI.                 
   700016 157962  22 de abril de 7.0-CURRENT after addition of fcloseall(3)   
                  2006           to libc.                                     
   700017 158513  13 de maio de  7.0-CURRENT after removal of ip6fw.          
                  2006           
   700018 160386  15 de julho de 7.0-CURRENT after import of snd_emu10kx.     
                  2006           
   700019 160821  29 de julho de 7.0-CURRENT after import of OpenSSL 0.9.8b.  
                  2006           
   700020 161931  3 de setembro  7.0-CURRENT after addition of                
                  de 2006        bus_dma_get_tag function                     
   700021 162023  4 de setembro  7.0-CURRENT after libpcap 0.9.4 and tcpdump  
                  de 2006        3.9.4 import.                                
                  9 de setembro  7.0-CURRENT after dlsym change to look for a 
   700022 162170  de 2006        requested symbol both in specified dso and   
                                 its implicit dependencies.                   
   700023 162588  23 de setembro 7.0-CURRENT after adding new sound IOCTLs    
                  de 2006        for the OSSv4 mixer API.                     
   700024 162919  28 de setembro 7.0-CURRENT after import of OpenSSL 0.9.8d.  
                  de 2006        
   700025 164190  11 de novembro 7.0-CURRENT after the addition of libelf.    
                  de 2006        
   700026 164614  26 de novembro 7.0-CURRENT after major changes on sound     
                  de 2006        sysctls.                                     
   700027 164770  30 de novembro 7.0-CURRENT after the addition of Wi-Spy     
                  de 2006        quirk.                                       
   700028 165242  15 de dezembro 7.0-CURRENT after the addition of sctp calls 
                  de 2006        to libc                                      
                  26 de janeiro  7.0-CURRENT after the GNU gzip(1)            
   700029 166259  de 2007        implementation was replaced with a BSD       
                                 licensed version ported from NetBSD.         
                  7 de fevereiro 7.0-CURRENT after the removal of IPIP tunnel 
   700030 166549  de 2007        encapsulation (VIFF_TUNNEL) from the IPv4    
                                 multicast forwarding code.                   
                  23 de          7.0-CURRENT after the modification of        
   700031 166907  fevereiro de   bus_setup_intr() (newbus).                   
                  2007           
   700032 167165  2 de marc,o de 7.0-CURRENT after the inclusion of ipw(4)    
                  2007           and iwi(4) firmware.                         
   700033 167360  9 de marc,o de 7.0-CURRENT after the inclusion of ncurses   
                  2007           wide character support.                      
                  19 de marc,o   7.0-CURRENT after changes to how             
   700034 167684  de 2007        insmntque(), getnewvnode(), and              
                                 vfs_hash_insert() work.                      
   700035 167906  26 de marc,o   7.0-CURRENT after addition of a notify       
                  de 2007        mechanism for CPU frequency changes.         
   700036 168413  6 de abril de  7.0-CURRENT after import of the ZFS          
                  2007           filesystem.                                  
                  8 de abril de  7.0-CURRENT after addition of CAM 'SG'       
   700037 168504  2007           peripheral device, which implements a subset 
                                 of Linux SCSI SG passthrough device API.     
                  30 de abril de 7.0-CURRENT after changing getenv(3),        
   700038 169151  2007           putenv(3), setenv(3) and unsetenv(3) to be   
                                 POSIX conformant.                            
   700039 169190  1 de maio de   7.0-CURRENT after the changes in 700038 were 
                  2007           backed out.                                  
   700040 169453  10 de maio de  7.0-CURRENT after the addition of flopen(3)  
                  2007           to libutil.                                  
                  13 de maio de  7.0-CURRENT after enabling symbol            
   700041 169526  2007           versioning, and changing the default thread  
                                 library to libthr.                           
   700042 169758  19 de maio de  7.0-CURRENT after the import of gcc 4.2.0.   
                  2007           
                  21 de maio de  7.0-CURRENT after bump of all shared library 
   700043 169830  2007           versions that had not been changed since     
                                 RELENG_6.                                    
                  7 de junho de  7.0-CURRENT after changing the argument for  
   700044 170395  2007           vn_open()/VOP_OPEN() from file descriptor    
                                 index to the struct file *.                  
                                 7.0-CURRENT after changing pam_nologin(8) to 
   700045 170510  10 de junho de provide an account management function       
                  2007           instead of an authentication function to the 
                                 PAM framework.                               
   700046 170530  11 de junho de 7.0-CURRENT after updated 802.11 wireless    
                  2007           support.                                     
   700047 170579  11 de junho de 7.0-CURRENT after adding TCP LRO interface   
                  2007           capabilities.                                
                                 7.0-CURRENT after RFC 3678 API support added 
                                 to the IPv4 stack. Legacy RFC 1724 behavior  
   700048 170613  12 de junho de of the IP_MULTICAST_IF ioctl has now been    
                  2007           removed; 0.0.0.0/8 may no longer be used to  
                                 specify an interface index. Use struct       
                                 ipmreqn instead.                             
   700049 171175  3 de julho de  7.0-CURRENT after importing pf from OpenBSD  
                  2007           4.1                                          
   (Nao                          7.0-CURRENT after adding IPv6 support for    
   mudou) 171167                 FAST_IPSEC, deleting KAME IPSEC, and         
                                 renaming FAST_IPSEC to IPSEC.                
                  4 de julho de  7.0-CURRENT after converting                 
   700050 171195  2007           setenv/putenv/etc. calls from traditional    
                                 BSD to POSIX.                                
   700051 171211  4 de julho de  7.0-CURRENT after adding new mmap/lseek/etc  
                  2007           syscalls.                                    
   700052 171275  6 de julho de  7.0-CURRENT after moving I4B headers to      
                  2007           include/i4b.                                 
   700053 172394  30 de setembro 7.0-CURRENT after the addition of support    
                  de 2007        for PCI domains                              
   700054 172988  25 de outubro  7.0-STABLE after MFC of wide and single byte 
                  de 2007        ctype separation.                            
                                 7.0-RELEASE, and 7.0-CURRENT after ABI       
                                 backwards compatibility to the FreeBSD 4/5/6 
   700055 173104  28 de outubro  versions of the PCIOCGETCONF, PCIOCREAD and  
                  de 2007        PCIOCWRITE IOCTLs was MFCed, which required  
                                 the ABI of the PCIOCGETCONF IOCTL to be      
                                 broken again                                 
   700100 174864  22 de dezembro 7.0-STABLE after 7.0-RELEASE                 
                  de 2007        
   700101 176111  8 de fevereiro 7.0-STABLE after the MFC of m_collapse().    
                  de 2008        
   700102 177735  30 de marc,o   7.0-STABLE after the MFC of kdb_enter_why(). 
                  de 2008        
   700103 178061  10 de abril de 7.0-STABLE after adding l_sysid to struct    
                  2008           flock.                                       
   700104 178108  11 de abril de 7.0-STABLE after the MFC of procstat(1).     
                  2008           
   700105 178120  11 de abril de 7.0-STABLE after the MFC of umtx features.   
                  2008           
   700106 178225  15 de abril de 7.0-STABLE after the MFC of write(2) support 
                  2008           to psm(4).                                   
   700107 178353  20 de abril de 7.0-STABLE after the MFC of F_DUP2FD command 
                  2008           to fcntl(2).                                 
                  5 de maio de   7.0-STABLE after some lockmgr(9) changes,    
   700108 178783  2008           which makes it necessary to include          
                                 sys/lock.h to use lockmgr(9).                
   700109 179367  27 de maio de  7.0-STABLE after MFC of the memrchr(3)       
                  2008           function.                                    
   700110 181328  5 de agosto de 7.0-STABLE after MFC of kernel NFS lockd     
                  2008           client.                                      
   700111 181940  20 de agosto   7.0-STABLE after addition of physically      
                  de 2008        contiguous jumbo frame support.              
   700112 182294  27 de agosto   7.0-STABLE after MFC of kernel DTrace        
                  de 2008        support.                                     
   701000 185315  25 de novembro 7.1-RELEASE                                  
                  de 2008        
   701100 185302  25 de novembro 7.1-STABLE after 7.1-RELEASE.                
                  de 2008        
   701101 187023  10 de janeiro  7.1-STABLE after strndup(3) merge.           
                  de 2009        
   701102 187370  17 de janeiro  7.1-STABLE after cpuctl(4) support added.    
                  de 2009        
   701103 188281  7 de fevereiro 7.1-STABLE after the merge of                
                  de 2009        multi-/no-IPv4/v6 jails.                     
                  14 de          7.1-STABLE after the store of the suspension 
   701104 188625  fevereiro de   owner in the struct mount, and introduction  
                  2009           of vfs_susp_clean method into the struct     
                                 vfsops.                                      
                                 7.1-STABLE after the incompatible change to  
   701105 189740  12 de marc,o   the kern.ipc.shmsegs sysctl to allow         
                  de 2009        allocating larger SysV shared memory         
                                 segments on 64bit architectures.             
   701106 189786  14 de marc,o   7.1-STABLE after the merge of a fix for      
                  de 2009        POSIX semaphore wait operations.             
   702000 191099  15 de abril de 7.2-RELEASE                                  
                  2009           
   702100 191091  15 de abril de 7.2-STABLE after 7.2-RELEASE.                
                  2009           
                  15 de maio de  7.2-STABLE after ichsmb(4) was changed to    
   702101 192149  2009           use left-adjusted slave addressing to match  
                                 other SMBus controller drivers.              
   702102 193020  28 de maio de  7.2-STABLE after MFC of the fdopendir(3)     
                  2009           function.                                    
   702103 193638  6 de junho de  7.2-STABLE after MFC of PmcTools.            
                  2009           
   702104 195694  14 de julho de 7.2-STABLE after MFC of the closefrom(2)     
                  2009           system call.                                 
   702105 196006  31 de julho de 7.2-STABLE after MFC of the SYSVIPC ABI      
                  2009           change.                                      
                  14 de setembro 7.2-STABLE after MFC of the x86 PAT          
   702106 197198  de 2009        enhancements and addition of d_mmap_single() 
                                 and the scatter/gather list VM object type.  
   703000 203740  9 de fevereiro 7.3-RELEASE                                  
                  de 2010        
   703100 203742  9 de fevereiro 7.3-STABLE after 7.3-RELEASE.                
                  de 2010        
   704000 216647  22 de dezembro 7.4-RELEASE                                  
                  de 2010        
   704100 216658  22 de dezembro 7.4-STABLE after 7.4-RELEASE.                
                  de 2010        
   704101 221318  2 de maio de   7.4-STABLE after the gcc MFC in rev 221317.  
                  2011           

18.8. Versoes do FreeBSD 6

   Tabela 18.8. Valores do __FreeBSD_version para o FreeBSD 6

   Valor  Revisao     Data                         Release                    
   600000 133921  18 de agosto  6.0-CURRENT                                   
                  de 2004       
   600001 134396  27 de agosto  6.0-CURRENT after permanently enabling        
                  de 2004       PFIL_HOOKS in the kernel.                     
                  30 de agosto  6.0-CURRENT after initial addition of         
   600002 134514  de 2004       ifi_epoch to struct if_data. Backed out after 
                                a few days. Do not use this value.            
   600003 134933  8 de setembro 6.0-CURRENT after the re-addition of the      
                  de 2004       ifi_epoch member of struct if_data.           
                  29 de         6.0-CURRENT after addition of the struct      
   600004 135920  setembro de   inpcb argument to the pfil API.               
                  2004          
   600005 136172  5 de outubro  6.0-CURRENT after addition of the "-d         
                  de 2004       DESTDIR" argument to newsyslog.               
   600006 137192  4 de novembro 6.0-CURRENT after addition of glibc style     
                  de 2004       strftime(3) padding options.                  
                  12 de         6.0-CURRENT after addition of 802.11          
   600007 138760  dezembro de   framework updates.                            
                  2004          
                  25 de janeiro 6.0-CURRENT after changes to VOP_*VOBJECT()   
   600008 140809  de 2005       functions and introduction of MNTK_MPSAFE     
                                flag for Giantfree filesystems.               
                  4 de          6.0-CURRENT after addition of the cpufreq     
   600009 141250  fevereiro de  framework and drivers.                        
                  2005          
                  6 de                                                        
   600010 141394  fevereiro de  6.0-CURRENT after importing OpenBSD's nc(1).
                  2005          
                  12 de         6.0-CURRENT after removing semblance of SVID2 
   600011 141727  fevereiro de  matherr() support.                            
                  2005          
                  15 de         6.0-CURRENT after increase of default thread  
   600012 141940  fevereiro de  stacks' size.                                 
                  2005          
                                6.0-CURRENT after fixes in                    
                  19 de         <src/include/stdbool.h> and                   
   600013 142089  fevereiro de  <src/sys/i386/include/_types.h> for using the 
                  2005          GCC-compatibility of the Intel C/C++          
                                compiler.                                     
                  21 de         6.0-CURRENT after EOVERFLOW checks in         
   600014 142184  fevereiro de  vswprintf(3) fixed.                           
                  2005          
                  25 de         6.0-CURRENT after changing the struct if_data 
   600015 142501  fevereiro de  member, ifi_epoch, from wall clock time to    
                  2005          uptime.                                       
                  26 de         6.0-CURRENT after LC_CTYPE disk format        
   600016 142582  fevereiro de  changed.                                      
                  2005          
                  27 de         6.0-CURRENT after NLS catalogs disk format    
   600017 142683  fevereiro de  changed.                                      
                  2005          
                  27 de         6.0-CURRENT after LC_COLLATE disk format      
   600018 142686  fevereiro de  changed.                                      
                  2005          
                  28 de         Installation of acpica includes into          
   600019 142752  fevereiro de  /usr/include.                                 
                  2005          
   600020 143308  9 de marc,o   Addition of MSG_NOSIGNAL flag to send(2) API. 
                  de 2005       
   600021 143746  17 de marc,o  Addition of fields to cdevsw                  
                  de 2005       
   600022 143901  21 de marc,o  Removed gtar from base system.                
                  de 2005       
   600023 144980  13 de abril   LOCAL_CREDS, LOCAL_CONNWAIT socket options    
                  de 2005       added to unix(4).                             
   600024 145565  19 de abril   hwpmc(4) and related tools added to           
                  de 2005       6.0-CURRENT.                                  
   600025 145565  26 de abril   struct icmphdr added to 6.0-CURRENT.          
                  de 2005       
   600026 145843  3 de maio de  pf updated to 3.7.                            
                  2005          
   600027 145966  6 de maio de  Kernel libalias and ng_nat introduced.        
                  2005          
   600028 146191  13 de maio de POSIX ttyname_r(3) made available through     
                  2005          unistd.h and libc.                            
   600029 146780  29 de maio de 6.0-CURRENT after libpcap updated to v0.9.1   
                  2005          alpha 096.                                    
   600030 146988  5 de junho de 6.0-CURRENT after importing NetBSD's          
                  2005          if_bridge(4).                                 
   600031 147256  10 de junho   6.0-CURRENT after struct ifnet was broken out 
                  de 2005       of the driver softcs.                         
   600032 147898  11 de julho   6.0-CURRENT after the import of libpcap       
                  de 2005       v0.9.1.                                       
                  25 de julho   6.0-STABLE after bump of all shared library   
   600033 148388  de 2005       versions that had not been changed since      
                                RELENG_5.                                     
   600034 149040  13 de agosto  6.0-STABLE after credential argument is added 
                  de 2005       to dev_clone event handler. 6.0-RELEASE.      
   600100 151958  1 de novembro 6.0-STABLE after 6.0-RELEASE                  
                  de 2005       
                  21 de         6.0-STABLE after incorporating scripts from   
   600101 153601  dezembro de   the local_startup directories into the base   
                  2005          rcorder(8).                                   
                  30 de         6.0-STABLE after updating the ELF types and   
   600102 153912  dezembro de   constants.                                    
                  2005          
   600103 154396  15 de janeiro 6.0-STABLE after MFC of pidfile(3) API.       
                  de 2006       
   600104 154453  17 de janeiro 6.0-STABLE after MFC of ldconfig_local_dirs   
                  de 2006       change.                                       
                  26 de         6.0-STABLE after NLS catalog support of       
   600105 156019  fevereiro de  csh(1).                                       
                  2006          
   601000 158330  6 de maio de  6.1-RELEASE                                   
                  2006          
   601100 158331  6 de maio de  6.1-STABLE after 6.1-RELEASE.                 
                  2006          
   601101 159861  22 de junho   6.1-STABLE after the import of csup.          
                  de 2006       
   601102 160253  11 de julho   6.1-STABLE after the iwi(4) update.           
                  de 2006       
                  17 de julho   6.1-STABLE after the resolver update to       
   601103 160429  de 2006       BIND9, and exposure of reentrant version of   
                                netdb functions.                              
   601104 161098  8 de agosto   6.1-STABLE after DSO (dynamic shared objects) 
                  de 2006       support has been enabled in OpenSSL.          
   601105 161900  2 de setembro 6.1-STABLE after 802.11 fixups changed the    
                  de 2006       api for the IEEE80211_IOC_STA_INFO ioctl.     
                  15 de                                                       
   602000 164312  novembro de   6.2-RELEASE
                  2006          
                  15 de                                                       
   602100 162329  setembro de   6.2-STABLE after 6.2-RELEASE.
                  2006          
                  12 de         6.2-STABLE after the addition of Wi-Spy       
   602101 165122  dezembro de   quirk.                                        
                  2006          
                  28 de                                                       
   602102 165596  dezembro de   6.2-STABLE after pci_find_extcap() addition.
                  2006          
                  16 de janeiro 6.2-STABLE after MFC of dlsym change to look  
   602103 166039  de 2007       for a requested symbol both in specified dso  
                                and its implicit dependencies.                
                                6.2-STABLE after MFC of ng_deflate(4) and     
   602104 166314  28 de janeiro ng_pred1(4) netgraph nodes and new            
                  de 2007       compression and encryption modes for          
                                ng_ppp(4) node.                               
                  20 de         6.2-STABLE after MFC of BSD licensed version  
   602105 166840  fevereiro de  of gzip(1) ported from NetBSD.                
                  2007          
   602106 168133  31 de marc,o  6.2-STABLE after MFC of PCI MSI and MSI-X     
                  de 2007       support.                                      
   602107 168438  6 de abril de 6.2-STABLE after MFC of ncurses 5.6 and wide  
                  2007          character support.                            
                  11 de abril   6.2-STABLE after MFC of CAM 'SG' peripheral   
   602108 168611  de 2007       device, which implements a subset of Linux    
                                SCSI SG passthrough device API.               
   602109 168805  17 de abril   6.2-STABLE after MFC of readline 5.2 patchset 
                  de 2007       002.                                          
                                6.2-STABLE after MFC of                       
   602110 169222  2 de maio de  pmap_invalidate_cache(), pmap_change_attr(),  
                  2007          pmap_mapbios(), pmap_mapdev_attr(), and       
                                pmap_unmapbios() for amd64 and i386.          
                  11 de junho   6.2-STABLE after MFC of BOP_BDFLUSH and       
   602111 170556  de 2007       caused breakage of the filesystem modules     
                                KBI.                                          
                  21 de                                                       
   602112 172284  setembro de   6.2-STABLE after libutil(3) MFC's.
                  2007          
                                6.2-STABLE after MFC of wide and single byte  
                  25 de outubro ctype separation. Newly compiled binary that  
   602113 172986  de 2007       references to ctype.h may require a new       
                                symbol, __mb_sb_limit, which is not available 
                                on older systems.                             
   602114 173170  30 de outubro 6.2-STABLE after ctype ABI forward            
                  de 2007       compatibility restored.                       
                  21 de         6.2-STABLE after back out of wide and single  
   602115 173794  novembro de   byte ctype separation.                        
                  2007          
                  25 de                                                       
   603000 173897  novembro de   6.3-RELEASE
                  2007          
                  25 de                                                       
   603100 173891  novembro de   6.3-STABLE after 6.3-RELEASE.
                  2007          
   (Nao   174434  7 de dezembro 6.3-STABLE after fixing multibyte type        
   mudou)         de 2007       support in bit macro.                         
   603102 178459  24 de abril   6.3-STABLE after adding l_sysid to struct     
                  de 2008       flock.                                        
   603103 179367  27 de maio de 6.3-STABLE after MFC of the memrchr(3)        
                  2008          function.                                     
   603104 179810  15 de junho   6.3-STABLE after MFC of support for :u        
                  de 2008       variable modifier in make(1).                 
   604000 183583  4 de outubro  6.4-RELEASE                                   
                  de 2008       
   604100 183584  4 de outubro  6.4-STABLE after 6.4-RELEASE.                 
                  de 2008       

18.9. Versoes do FreeBSD 5

   Tabela 18.9. Valores do __FreeBSD_version para o FreeBSD 5

   Valor  Revisao     Data                         Release                    
   500000 58009   13 de marc,o  5.0-CURRENT                                   
                  de 2000       
                  18 de abril   5.0-CURRENT after adding addition ELF header  
   500001 59348   de 2000       fields, and changing our ELF binary branding  
                                method.                                       
   500002 59906   2 de maio de  5.0-CURRENT after kld metadata changes.       
                  2000          
   500003 60688   18 de maio de 5.0-CURRENT after buf/bio changes.            
                  2000          
   500004 60936   26 de maio de 5.0-CURRENT after binutils upgrade.           
                  2000          
   500005 61221   3 de junho de 5.0-CURRENT after merging libxpg4 code into   
                  2000          libc and after TASKQ interface introduction.  
   500006 61500   10 de junho   5.0-CURRENT after the addition of AGP         
                  de 2000       interfaces.                                   
   500007 62235   29 de junho   5.0-CURRENT after Perl upgrade to 5.6.0       
                  de 2000       
   500008 62764   7 de julho de 5.0-CURRENT after the update of KAME code to  
                  2000          2000/07 sources.                              
   500009 63154   14 de julho   5.0-CURRENT after ether_ifattach() and        
                  de 2000       ether_ifdetach() changes.                     
                  16 de julho   5.0-CURRENT after changing mtree defaults     
   500010 63265   de 2000       back to original variant, adding -L to follow 
                                symlinks.                                     
   500011 63459   18 de julho   5.0-CURRENT after kqueue API changed.         
                  de 2000       
   500012 65353   2 de setembro 5.0-CURRENT after setproctitle(3) moved from  
                  de 2000       libutil to libc.                              
                  10 de                                                       
   500013 65671   setembro de   5.0-CURRENT after the first SMPng commit.
                  2000          
   500014 70650   4 de janeiro  5.0-CURRENT after <sys/select.h> moved to     
                  de 2001       <sys/selinfo.h>.                              
                  10 de janeiro 5.0-CURRENT after combining libgcc.a and      
   500015 70894   de 2001       libgcc_r.a, and associated GCC linkage        
                                changes.                                      
                  24 de janeiro 5.0-CURRENT after change allowing libc and    
   500016 71583   de 2001       libc_r to be linked together, deprecating     
                                -pthread option.                              
                  18 de         5.0-CURRENT after switch from struct ucred to 
   500017 72650   fevereiro de  struct xucred to stabilize kernel-exported    
                  2001          API for mountd et al.                         
                  24 de         5.0-CURRENT after addition of CPUTYPE make    
   500018 72975   fevereiro de  variable for controlling CPU-specific         
                  2001          optimizations.                                
   500019 77937   9 de junho de 5.0-CURRENT after moving machine/ioctl_fd.h   
                  2001          to sys/fdcio.h                                
   500020 78304   15 de junho   5.0-CURRENT after locale names renaming.      
                  de 2001       
   500021 78632   22 de junho   5.0-CURRENT after Bzip2 import. Also          
                  de 2001       signifies removal of S/Key.                   
   500022 83435   12 de julho   5.0-CURRENT after SSE support.                
                  de 2001       
                  14 de                                                       
   500023 83435   setembro de   5.0-CURRENT after KSE Milestone 2.
                  2001          
   500024 84324   1 de outubro  5.0-CURRENT after d_thread_t, and moving UUCP 
                  de 2001       to ports.                                     
   500025 84481   4 de outubro  5.0-CURRENT after ABI change for descriptor   
                  de 2001       and creds passing on 64 bit platforms.        
                  9 de outubro  5.0-CURRENT after moving to XFree86 4 by      
   500026 84710   de 2001       default for package builds, and after the new 
                                libc strnstr() function was added.            
   500027 84743   10 de outubro 5.0-CURRENT after the new libc strcasestr()   
                  de 2001       function was added.                           
                  14 de         5.0-CURRENT after the userland components of  
   500028 87879   dezembro de   smbfs were imported.                          
                  2001          
   (Nao                         5.0-CURRENT after the new C99 specific-width  
   mudou)                       integer types were added.                     
   500029 89938   29 de janeiro 5.0-CURRENT after a change was made in the    
                  de 2002       return value of sendfile(2).                  
                  15 de         5.0-CURRENT after the introduction of the     
   500030 90711   fevereiro de  type fflags_t, which is the appropriate size  
                  2002          for file flags.                               
                  24 de         5.0-CURRENT after the usb structure element   
   500031 91203   fevereiro de  rename.                                       
                  2002          
   500032 92453   16 de marc,o  5.0-CURRENT after the introduction of Perl    
                  de 2002       5.6.1.                                        
                  3 de abril de 5.0-CURRENT after the sendmail_enable         
   500033 93722   2002          rc.conf(5) variable was made to take the      
                                value NONE.                                   
   500034 95831   30 de abril   5.0-CURRENT after mtx_init() grew a third     
                  de 2002       argument.                                     
   500035 96498   13 de maio de 5.0-CURRENT with Gcc 3.1.                     
                  2002          
   500036 96781   17 de maio de 5.0-CURRENT without Perl in /usr/src          
                  2002          
   500037 97516   29 de maio de 5.0-CURRENT after the addition of dlfunc(3)   
                  2002          
                  24 de julho   5.0-CURRENT after the types of some struct    
   500038 100591  de 2002       sockbuf members were changed and the          
                                structure was reordered.                      
                                5.0-CURRENT after GCC 3.2.1 import. Also      
                  1 de setembro after headers stopped using _BSD_FOO_T_ and   
   500039 102757  de 2002       started using _FOO_T_DECLARED. This value can 
                                also be used as a conservative estimate of    
                                the start of bzip2(1) package support.        
                  20 de         5.0-CURRENT after various changes to disk     
   500040 103675  setembro de   functions were made in the name of removing   
                  2002          dependency on disklabel structure internals.  
   500041 104250  1 de outubro  5.0-CURRENT after the addition of             
                  de 2002       getopt_long(3) to libc.                       
                  15 de outubro 5.0-CURRENT after Binutils 2.13 upgrade,      
   500042 105178  de 2002       which included new FreeBSD emulation, vec,    
                                and output format.                            
                  1 de novembro 5.0-CURRENT after adding weak pthread_XXX     
   500043 106289  de 2002       stubs to libc, obsoleting libXThrStub.so.     
                                5.0-RELEASE.                                  
   500100 109405  17 de janeiro 5.0-CURRENT after branching for RELENG_5_0    
                  de 2003       
                  19 de                                                       
   500101 111120  fevereiro de  <sys/dkstat.h> is empty. Do not include it.
                  2003          
                  25 de         5.0-CURRENT after the d_mmap_t interface      
   500102 111482  fevereiro de  change.                                       
                  2003          
                  26 de         5.0-CURRENT after taskqueue_swi changed to    
   500103 111540  fevereiro de  run without Giant, and taskqueue_swi_giant    
                  2003          added to run with Giant.                      
                  27 de         cdevsw_add() and cdevsw_remove() no longer    
   500104 111600  fevereiro de  exists. Appearance of MAJOR_AUTO allocation   
                  2003          facility.                                     
   500105 111864  4 de marc,o   5.0-CURRENT after new cdevsw initialization   
                  de 2003       method.                                       
   500106 112007  8 de marc,o   devstat_add_entry() has been replaced by      
                  de 2003       devstat_new_entry()                           
   500107 112288  15 de marc,o  Devstat interface change; see sys/sys/param.h 
                  de 2003       1.149                                         
   500108 112300  15 de marc,o  Token-Ring interface changes.                 
                  de 2003       
   500109 112571  25 de marc,o  Addition of vm_paddr_t.                       
                  de 2003       
   500110 112741  28 de marc,o  5.0-CURRENT after realpath(3) has been made   
                  de 2003       thread-safe                                   
   500111 113273  9 de abril de 5.0-CURRENT after usbhid(3) has been synced   
                  2003          with NetBSD                                   
                  17 de abril   5.0-CURRENT after new NSS implementation and  
   500112 113597  de 2003       addition of POSIX.1 getpw*_r, getgr*_r        
                                functions                                     
   500113 114492  2 de maio de  5.0-CURRENT after removal of the old rc       
                  2003          system.                                       
   501000 115816  4 de junho de 5.1-RELEASE.                                  
                  2003          
   501100 115710  2 de junho de 5.1-CURRENT after branching for RELENG_5_1.   
                  2003          
   501101 117025  29 de junho   5.1-CURRENT after correcting the semantics of 
                  de 2003       sigtimedwait(2) and sigwaitinfo(2).           
   501102 117191  3 de julho de 5.1-CURRENT after adding the lockfunc and     
                  2003          lockfuncarg fields to bus_dma_tag_create(9).  
   501103 118241  31 de julho   5.1-CURRENT after GCC 3.3.1-pre 20030711      
                  de 2003       snapshot integration.                         
   501104 118511  5 de agosto   5.1-CURRENT 3ware API changes to twe.         
                  de 2003       
   501105 119021  17 de agosto  5.1-CURRENT dynamically-linked /bin and /sbin 
                  de 2003       support and movement of libraries to /lib.    
   501106 119881  8 de setembro 5.1-CURRENT after adding kernel support for   
                  de 2003       Coda 6.x.                                     
                                5.1-CURRENT after 16550 UART constants moved  
                  17 de         from <dev/sio/sioreg.h> to                    
   501107 120180  setembro de   <dev/ic/ns16550.h>. Also when libmap          
                  2003          functionality was unconditionally supported   
                                by rtld.                                      
                  23 de                                                       
   501108 120386  setembro de   5.1-CURRENT after PFIL_HOOKS API update
                  2003          
                  27 de                                                       
   501109 120503  setembro de   5.1-CURRENT after adding kiconv(3)
                  2003          
                  28 de         5.1-CURRENT after changing default operations 
   501110 120556  setembro de   for open and close in cdevsw                  
                  2003          
   501111 121125  16 de outubro 5.1-CURRENT after changed layout of cdevsw    
                  de 2003       
   501112 121129  16 de outubro 5.1-CURRENT after adding kobj multiple        
                  de 2003       inheritance                                   
   501113 121816  31 de outubro 5.1-CURRENT after the if_xname change in      
                  de 2003       struct ifnet                                  
                  16 de         5.1-CURRENT after changing /bin and /sbin to  
   501114 122779  novembro de   be dynamically linked                         
                  2003          
   502000 123198  7 de dezembro 5.2-RELEASE                                   
                  de 2003       
                  23 de                                                       
   502010 126150  fevereiro de  5.2.1-RELEASE
                  2004          
   502100 123196  7 de dezembro 5.2-CURRENT after branching for RELENG_5_2    
                  de 2003       
                  19 de         5.2-CURRENT after __cxa_atexit/__cxa_finalize 
   502101 123677  dezembro de   functions were added to libc.                 
                  2003          
   502102 125236  30 de janeiro 5.2-CURRENT after change of default thread    
                  de 2004       library from libc_r to libpthread.            
                  21 de         5.2-CURRENT after device driver API           
   502103 126083  fevereiro de  megapatch.                                    
                  2004          
                  25 de         5.2-CURRENT after getopt_long_only()          
   502104 126208  fevereiro de  addition.                                     
                  2004          
   502105 126644  5 de marc,o   5.2-CURRENT after NULL is made into ((void    
                  de 2004       *)0) for C, creating more warnings.           
   502106 126757  8 de marc,o   5.2-CURRENT after pf is linked to the build   
                  de 2004       and install.                                  
   502107 126819  10 de marc,o  5.2-CURRENT after time_t is changed to a      
                  de 2004       64-bit value on sparc64.                      
                  12 de marc,o  5.2-CURRENT after Intel C/C++ compiler        
   502108 126891  de 2004       support in some headers and execve(2) changes 
                                to be more strictly conforming to POSIX.      
   502109 127312  22 de marc,o  5.2-CURRENT after the introduction of the     
                  de 2004       bus_alloc_resource_any API                    
   502110 127475  27 de marc,o  5.2-CURRENT after the addition of UTF-8       
                  de 2004       locales                                       
   502111 128144  11 de abril   5.2-CURRENT after the removal of the          
                  de 2004       getvfsent(3) API                              
   502112 128182  13 de abril   5.2-CURRENT after the addition of the         
                  de 2004       .warning directive for make.                  
   502113 130057  4 de junho de 5.2-CURRENT after ttyioctl() was made         
                  2004          mandatory for serial drivers.                 
   502114 130418  13 de junho   5.2-CURRENT after import of the ALTQ          
                  de 2004       framework.                                    
                  14 de junho   5.2-CURRENT after changing sema_timedwait(9)  
   502115 130481  de 2004       to return 0 on success and a non-zero error   
                                code on failure.                              
   502116 130585  16 de junho   5.2-CURRENT after changing kernel dev_t to be 
                  de 2004       pointer to struct cdev *.                     
   502117 130640  17 de junho   5.2-CURRENT after changing kernel udev_t to   
                  de 2004       dev_t.                                        
                  17 de junho   5.2-CURRENT after adding support for          
   502118 130656  de 2004       CLOCK_VIRTUAL and CLOCK_PROF to               
                                clock_gettime(2) and clock_getres(2).         
   502119 130934  22 de junho   5.2-CURRENT after changing network interface  
                  de 2004       cloning overhaul.                             
   502120 131429  2 de julho de 5.2-CURRENT after the update of the package   
                  2004          tools to revision 20040629.                   
   502121 131883  9 de julho de 5.2-CURRENT after marking Bluetooth code as   
                  2004          non-i386 specific.                            
                                5.2-CURRENT after the introduction of the KDB 
   502122 131971  11 de julho   debugger framework, the conversion of DDB     
                  de 2004       into a backend and the introduction of the    
                                GDB backend.                                  
                                5.2-CURRENT after change to make VFS_ROOT     
                                take a struct thread argument as does vflush. 
   502123 132025  12 de julho   Struct kinfo_proc now has a user data         
                  de 2004       pointer. The switch of the default X          
                                implementation to xorg was also made at this  
                                time.                                         
                  24 de julho   5.2-CURRENT after the change to separate the  
   502124 132597  de 2004       way ports rc.d and legacy scripts are         
                                started.                                      
   502125 132726  28 de julho   5.2-CURRENT after the backout of the previous 
                  de 2004       change.                                       
                  31 de julho   5.2-CURRENT after the removal of              
   502126 132914  de 2004       kmem_alloc_pageable() and the import of gcc   
                                3.4.2.                                        
   502127 132991  2 de agosto   5.2-CURRENT after changing the UMA kernel API 
                  de 2004       to allow ctors/inits to fail.                 
                                5.2-CURRENT after the change of the vfs_mount 
   502128 133306  8 de agosto   signature as well as global replacement of    
                  de 2004       PRISON_ROOT with SUSER_ALLOWJAIL for the      
                                suser(9) API.                                 
   503000 134189  23 de agosto  5.3-BETA/RC before the pfil API change        
                  de 2004       
                  22 de                                                       
   503001 135580  setembro de   5.3-RELEASE
                  2004          
   503100 136595  16 de outubro 5.3-STABLE after branching for RELENG_5_3     
                  de 2004       
   503101 138459  3 de dezembro 5.3-STABLE after addition of glibc style      
                  de 2004       strftime(3) padding options.                  
                  13 de                                                       
   503102 141788  fevereiro de  5.3-STABLE after OpenBSD's nc(1) import MFC.
                  2005          
                                5.4-PRERELEASE after the MFC of the fixes in  
                  27 de         <src/include/stdbool.h> and                   
   503103 142639  fevereiro de  <src/sys/i386/include/_types.h> for using the 
                  2005          GCC-compatibility of the Intel C/C++          
                                compiler.                                     
                  28 de         5.4-PRERELEASE after the MFC of the change of 
   503104 142835  fevereiro de  ifi_epoch from wall clock time to uptime.     
                  2005          
   503105 143029  2 de marc,o   5.4-PRERELEASE after the MFC of the fix of    
                  de 2005       EOVERFLOW check in vswprintf(3).              
   504000 144575  3 de abril de 5.4-RELEASE.                                  
                  2005          
   504100 144581  3 de abril de 5.4-STABLE after branching for RELENG_5_4     
                  2005          
   504101 146105  11 de maio de 5.4-STABLE after increasing the default       
                  2005          thread stacksizes                             
   504102 504101  24 de junho   5.4-STABLE after the addition of sha256       
                  de 2005       
   504103 150892  3 de outubro  5.4-STABLE after the MFC of if_bridge         
                  de 2005       
                  13 de         5.4-STABLE after the MFC of bsdiff and        
   504104 152370  novembro de   portsnap                                      
                  2005          
   504105 154464  17 de janeiro 5.4-STABLE after MFC of ldconfig_local_dirs   
                  de 2006       change.                                       
   505000 158481  12 de maio de 5.5-RELEASE.                                  
                  2006          
   505100 158482  12 de maio de 5.5-STABLE after branching for RELENG_5_5     
                  2006          

18.10. Versoes do FreeBSD 4

   Tabela 18.10. Valores do __FreeBSD_version para o FreeBSD 4

   Valor  Revisao       Data                         Release                  
   400000 43041   22 de janeiro de  4.0-CURRENT after 3.4 branch              
                  1999              
   400001 44177   20 de fevereiro   4.0-CURRENT after change in dynamic       
                  de 1999           linker handling                           
   400002 44699   13 de marc,o de   4.0-CURRENT after C++                     
                  1999              constructor/destructor order change       
   400003 45059   27 de marc,o de   4.0-CURRENT after functioning dladdr(3)   
                  1999              
                  5 de abril de     4.0-CURRENT after __deregister_frame_info 
   400004 45321   1999              dynamic linker bug fix (also 4.0-CURRENT  
                                    after EGCS 1.1.2 integration)             
   400005 46113   27 de abril de    4.0-CURRENT after suser(9) API change     
                  1999              (also 4.0-CURRENT after newbus)           
   400006 47640   31 de maio de     4.0-CURRENT after cdevsw registration     
                  1999              change                                    
   400007 47992   17 de junho de    4.0-CURRENT after the addition of so_cred 
                  1999              for socket level credentials              
   400008 48048   20 de junho de    4.0-CURRENT after the addition of a poll  
                  1999              syscall wrapper to libc_r                 
                  20 de julho de    4.0-CURRENT after the change of the       
   400009 48936   1999              kernel's dev_t type to struct specinfo    
                                    pointer                                   
   400010 51649   25 de setembro de 4.0-CURRENT after fixing a hole in        
                  1999              jail(2)                                   
   400011 51791   29 de setembro de 4.0-CURRENT after the sigset_t datatype   
                  1999              change                                    
   400012 53164   15 de novembro de 4.0-CURRENT after the cutover to the GCC  
                  1999              2.95.2 compiler                           
   400013 54123   4 de dezembro de  4.0-CURRENT after adding pluggable        
                  1999              linux-mode ioctl handlers                 
   400014 56216   18 de janeiro de  4.0-CURRENT after importing OpenSSL       
                  2000              
                  27 de janeiro de  4.0-CURRENT after the C++ ABI change in   
   400015 56700   2000              GCC 2.95.2 from -fvtable-thunks to        
                                    -fno-vtable-thunks by default             
   400016 57529   27 de fevereiro   4.0-CURRENT after importing OpenSSH       
                  de 2000           
   400017 58005   13 de marc,o de   4.0-RELEASE                               
                  2000              
   400018 58170   17 de marc,o de   4.0-STABLE after 4.0-RELEASE              
                  2000              
   400019 60047   5 de maio de 2000 4.0-STABLE after the introduction of      
                                    delayed checksums.                        
   400020 61262   4 de junho de     4.0-STABLE after merging libxpg4 code     
                  2000              into libc.                                
                  8 de julho de     4.0-STABLE after upgrading Binutils to    
   400021 62820   2000              2.10.0, ELF branding changes, and tcsh in 
                                    the base system.                          
   410000 63095   14 de julho de    4.1-RELEASE                               
                  2000              
   410001 64012   29 de julho de    4.1-STABLE after 4.1-RELEASE              
                  2000              
   410002 65962   16 de setembro de 4.1-STABLE after setproctitle(3) moved    
                  2000              from libutil to libc.                     
   411000 66336   25 de setembro de 4.1.1-RELEASE                             
                  2000              
   411001                           4.1.1-STABLE after 4.1.1-RELEASE          
   420000 68066   31 de outubro de  4.2-RELEASE                               
                  2000              
                  10 de janeiro de  4.2-STABLE after combining libgcc.a and   
   420001 70895   2001              libgcc_r.a, and associated GCC linkage    
                                    changes.                                  
   430000 73800   6 de marc,o de    4.3-RELEASE                               
                  2001              
   430001 76779   18 de maio de     4.3-STABLE after wint_t introduction.     
                  2001              
   430002 80157   22 de julho de    4.3-STABLE after PCI powerstate API       
                  2001              merge.                                    
   440000 80923   1 de agosto de    4.4-RELEASE                               
                  2001              
   440001 85341   23 de outubro de  4.4-STABLE after d_thread_t introduction. 
                  2001              
   440002 86038   4 de novembro de  4.4-STABLE after mount structure changes  
                  2001              (affects filesystem klds).                
   440003 88130   18 de dezembro de 4.4-STABLE after the userland components  
                  2001              of smbfs were imported.                   
   450000 88271   20 de dezembro de 4.5-RELEASE                               
                  2001              
   450001 91203   24 de fevereiro   4.5-STABLE after the usb structure        
                  de 2002           element rename.                           
   450002 92151   12 de marc,o de   4.5-STABLE after locale changes.          
                  2002              
   450003                           (Never created)                           
                  16 de abril de    4.5-STABLE after the sendmail_enable      
   450004 94840   2002              rc.conf(5) variable was made to take the  
                                    value NONE.                               
   450005 95555   27 de abril de    4.5-STABLE after moving to XFree86 4 by   
                  2002              default for package builds.               
                                    4.5-STABLE after accept filtering was     
   450006 95846   1 de maio de 2002 fixed so that is no longer susceptible to 
                                    an easy DoS.                              
   460000 97923   21 de junho de    4.6-RELEASE                               
                  2002              
                                    4.6-STABLE sendfile(2) fixed to comply    
   460001 98730   21 de junho de    with documentation, not to count any      
                  2002              headers sent against the amount of data   
                                    to be sent from the file.                 
   460002 100366  19 de julho de    4.6.2-RELEASE                             
                  2002              
   460100 98857   26 de junho de    4.6-STABLE                                
                  2002              
   460101 98880   26 de junho de    4.6-STABLE after MFC of `sed -i'.         
                  2002              
   460102 102759  1 de setembro de  4.6-STABLE after MFC of many new          
                  2002              pkg_install features from the HEAD.       
   470000 104655  8 de outubro de   4.7-RELEASE                               
                  2002              
   470100 104717  9 de outubro de   4.7-STABLE                                
                  2002              
                                    Start generated __std{in,out,err}p        
   470101 106732  10 de novembro de references rather than __sF. This changes 
                  2002              std{in,out,err} from a compile time       
                                    expression to a runtime one.              
   470102 109753  23 de janeiro de  4.7-STABLE after MFC of mbuf changes to   
                  2003              replace m_aux mbufs by m_tag's            
   470103 110887  14 de fevereiro   4.7-STABLE gets OpenSSL 0.9.7             
                  de 2003           
   480000 112852  30 de marc,o de   4.8-RELEASE                               
                  2003              
   480100 113107  5 de abril de     4.8-STABLE                                
                  2003              
   480101 115232  22 de maio de     4.8-STABLE after realpath(3) has been     
                  2003              made thread-safe                          
   480102 118737  10 de agosto de   4.8-STABLE 3ware API changes to twe.      
                  2003              
   490000 121592  27 de outubro de  4.9-RELEASE                               
                  2003              
   490100 121593  27 de outubro de  4.9-STABLE                                
                  2003              
   490101 124264  8 de janeiro de   4.9-STABLE after e_sid was added to       
                  2004              struct kinfo_eproc.                       
   490102 125417  4 de fevereiro de 4.9-STABLE after MFC of libmap            
                  2004              functionality for rtld.                   
   491000 129700  25 de maio de     4.10-RELEASE                              
                  2004              
   491100 129918  1 de junho de     4.10-STABLE                               
                  2004              
   491101 133506  11 de agosto de   4.10-STABLE after MFC of revision         
                  2004              20040629 of the package tools             
   491102 137786  16 de novembro de 4.10-STABLE after VM fix dealing with     
                  2004              unwiring of fictitious pages              
   492000 138960  17 de dezembro de 4.11-RELEASE                              
                  2004              
   492100 138959  17 de dezembro de 4.11-STABLE                               
                  2004              
   492101 157843  18 de abril de    4.11-STABLE after adding libdata/ldconfig 
                  2006              directories to mtree files.               

18.11. Versoes do FreeBSD 3

   Tabela 18.11. Valores do __FreeBSD_version para o FreeBSD 3

   Valor  Revisao        Data                         Release                 
   300000 22917   19 de fevereiro de  3.0-CURRENT before mount(2) change      
                  1996                
   300001 36283   24 de setembro de   3.0-CURRENT after mount(2) change       
                  1997                
   300002 36592   2 de junho de 1998  3.0-CURRENT after semctl(2) change      
   300003 36735   7 de junho de 1998  3.0-CURRENT after ioctl arg changes     
   300004 38768   3 de setembro de    3.0-CURRENT after ELF conversion        
                  1998                
   300005 40438   16 de outubro de    3.0-RELEASE                             
                  1998                
   300006 40445   16 de outubro de    3.0-CURRENT after 3.0-RELEASE           
                  1998                
   300007 43042   22 de janeiro de    3.0-STABLE after 3/4 branch             
                  1999                
   310000 43807   9 de fevereiro de   3.1-RELEASE                             
                  1999                
   310001 45060   27 de marc,o de     3.1-STABLE after 3.1-RELEASE            
                  1999                
   310002 45689   14 de abril de 1999 3.1-STABLE after C++                    
                                      constructor/destructor order change     
   320000                             3.2-RELEASE                             
   320001 46742   8 de maio de 1999   3.2-RELEASE                             
   320002 50563   29 de agosto de     3.2-STABLE after binary-incompatible    
                  1999                IPFW and socket changes                 
   330000 50813   2 de setembro de    3.3-RELEASE                             
                  1999                
   330001 51328   16 de setembro de   3.3-RELEASE                             
                  1999                
   330002 53671   24 de novembro de   3.3-STABLE after adding mkstemp(3) to   
                  1999                libc                                    
   340000 54166   5 de dezembro de    3.4-RELEASE                             
                  1999                
   340001 54730   17 de dezembro de   3.4-RELEASE                             
                  1999                
   350000 61876   20 de junho de 2000 3.5-RELEASE                             
   350001 63043   12 de julho de 2000 3.5-STABLE                              

18.12. Versoes do FreeBSD 2.2

   Tabela 18.12. Valores do __FreeBSD_version para o FreeBSD 2.2

      Valor    Revisao          Data                      Release             
   220000      22918   19 de fevereiro de 1997 2.2-RELEASE                    
   (Nao mudou)                                 2.2.1-RELEASE                  
   (Nao mudou)                                 2.2-STABLE after 2.2.1-RELEASE 
   221001      24941   15 de abril de 1997     2.2-STABLE after texinfo-3.9   
   221002      25325   30 de abril de 1997     2.2-STABLE after top           
   222000      25851   16 de maio de 1997      2.2.2-RELEASE                  
   222001      25921   19 de maio de 1997      2.2-STABLE after 2.2.2-RELEASE 
   225000      30053   2 de outubro de 1997    2.2.5-RELEASE                  
   225001      31300   20 de novembro de 1997  2.2-STABLE after 2.2.5-RELEASE 
   225002      32019   27 de dezembro de 1997  2.2-STABLE after ldconfig -R   
                                               merge                          
   226000      34445   24 de marc,o de 1998    2.2.6-RELEASE                  
   227000      37803   21 de julho de 1998     2.2.7-RELEASE                  
   227001      37809   21 de julho de 1998     2.2-STABLE after 2.2.7-RELEASE 
   227002      39489   19 de setembro de 1998  2.2-STABLE after semctl(2)     
                                               change                         
   228000      41403   29 de novembro de 1998  2.2.8-RELEASE                  
   228001      41418   29 de novembro de 1998  2.2-STABLE after 2.2.8-RELEASE 

  Nota:

   Note que o 2.2-STABLE `as vezes e identificado como "2.2.5-STABLE" apos o
   2.2.5-RELEASE. O padrao costumava ser ano seguido do mes, mas decidimos
   muda-lo para um sistema maior/menor mais simples a partir de 2.2. Isso
   aconteceu porque o desenvolvimento paralelo em varias branches
   inviabilizou a classificac,ao dos lanc,amentos apenas por suas datas reais
   de lanc,amento. Nao se preocupe com velhos -CURRENTs; eles estao listados
   aqui apenas para referencia.

18.13. FreeBSD 2 Antes das Versoes 2.2-RELEASE

   Tabela 18.13. Valores do __FreeBSD_version para o FreeBSD 2 de antes da
   2.2-RELEASE

   Valor  Revisao          Data                  Release          
   119411                                2.0-RELEASE              
   199501 7153    19 de marc,o de 1995   2.1-CURRENT              
   199503 7310    24 de marc,o de 1995   2.1-CURRENT              
   199504 7704    9 de abril de 1995     2.0.5-RELEASE            
   199508 10297   26 de agosto de 1995   2.2-CURRENT before 2.1   
   199511 12189   10 de novembro de 1995 2.1.0-RELEASE            
   199512 12196   10 de novembro de 1995 2.2-CURRENT before 2.1.5 
   199607 17067   10 de julho de 1996    2.1.5-RELEASE            
   199608 17127   12 de julho de 1996    2.2-CURRENT before 2.1.6 
   199612 19358   15 de novembro de 1996 2.1.6-RELEASE            
   199612                                2.1.7-RELEASE            
