Esta seção descreve o status das bibliotecas Lua na árvore de ports e sua integração com o sistema de ports.
Existem muitas versões das bibliotecas Lua e interpretadores correspondentes, que entram em conflito entre eles (instalam arquivos com o mesmo nome). Na árvore de ports este problema foi resolvido instalando cada versão sob um nome diferente usando sufixos de número de versão.
A desvantagem óbvia disso é que cada aplicativo precisa ser modificado para encontrar a versão 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 versão. No entanto, os módulos carregáveis para Lua são compilados em flavor separado para cada versão Lua que eles suportam, e as dependências de tais módulos devem especificar o flavor usando o sufixo @${LUA_FLAVOR}
no caminho do port.
Um port usando Lua deve ter uma linha dessa forma:
USES= lua
Se uma versão específica de Lua, ou intervalo de versões for necessária, ela pode ser especificada como um parâmetro na forma XY
(que pode ser usado várias vezes), XY+
, -XY
, ou XY-ZA
. A versão padrão do Lua definida por meio do DEFAULT_VERSIONS
será usada se cair no intervalo solicitado, caso contrário, a versão solicitada mais próxima do padrão será usada. Por exemplo:
USES= lua:52-53
Observe que nenhuma tentativa é feita para ajustar a seleção da versão com base na presença de qualquer versão Lua já instalada.
A forma XY+
de especificação de versão não deve ser usada sem consideração cuidadosa; a API Lua muda consideravelmente em todas as versões, e ferramentas de configuração como CMake ou Autoconf frequentemente não funcionarão em versões futuras do Lua até ser atualizado para isso.
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 parâmetro para o script de configuração do software via CONFIGURE_ARGS
ou CONFIGURE_ENV
(ou equivalente para outros sistemas de compilação);
Adicionando -I${LUA_INCDIR}
, -L${LUA_LIBDIR}
, e -llua-${LUA_VER}
para CFLAGS
, LDFLAGS
, LIBS
respectivamente, conforme apropriado;
Altere a configuração do software ou arquivos de compilação para selecionar a versão correta.
Um port que instala um módulo Lua (em vez de um aplicativo que simplesmente faz uso do Lua) deve compilar um flavor separado para cada versão do Lua suportada . Isso é feito adicionando o parâmetro module
:
USES= lua:module
Um número de versão ou intervalo de versões também pode ser especificado; use uma vírgula para separar os parâmetros.
Uma vez que cada flavor deve ter um nome de pacote diferente, a variável LUA_PKGNAMEPREFIX
é fornecida e será definida com um valor apropriado; o uso pretendido é:
PKGNAMEPREFIX= ${LUA_PKGNAMEPREFIX}
Ports de módulo normalmente devem instalar arquivos apenas em LUA_MODLIBDIR
, LUA_MODSHAREDIR
, LUA_DOCSDIR
, e LUA_EXAMPLESDIR
>, todos os quais estão definidos para se referir a subdiretórios específicos da versão. A instalação de quaisquer outros arquivos deve ser feita com cuidado para evitar conflitos entre as versões.
Um port (diferente de um módulo Lua) que deseja compilar um pacote separado para cada versão Lua deve usar o parâmetro flavors
:
USES= lua:flavors
Isso funciona da mesma maneira que o parâmetro module
descrito acima, mas sem a suposição de que o pacote deve ser documentado como um módulo Lua (então LUA_DOCSDIR
e LUA_EXAMPLESDIR
não são definidos por padrão). No entanto, o port pode escolher definir LUA_DOCSUBDIR
como um nome de subdiretório adequado (geralmente o PORTNAME
do port, desde que não entre em conflito com o PORTNAME
de qualquer módulo), caso em que a estrutura definirá LUA_DOCSDIR
e LUA_EXAMPLESDIR
.
Tal como acontece com os ports de módulo, um port com flavor deve evitar a instalação de arquivos que entrariam em conflito entre as versões. Normalmente, isso é 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 subdiretórios usados fora de LUA_MODLIBDIR
e LUA_MODSHAREDIR
.
Essas variáveis estão disponíveis no port.
Nome | Descrição |
---|---|
LUA_VER | A versão Lua que será usada (por exemplo,5,1 ) |
LUA_VER_STR | A versão Lua sem os pontos (por exemplo,51 ) |
LUA_FLAVOR | O nome do flavor correspondente à versão selecionada Lua, a ser usado para especificar dependências |
LUA_BASE | O prefixo que deve ser usado para localizar o Lua (e componentes) que já estão instalados |
LUA_PREFIX | O prefixo onde o Lua (e os seus componentes) são instalados por este port |
LUA_INCDIR | O diretório onde os arquivos header do Lua estão instalados |
LUA_LIBDIR | O diretório onde as bibliotecas Lua são instaladas |
LUA_REFMODLIBDIR | O diretório no qual as bibliotecas dos módulos Lua (.so ) que já estão instalados podem ser encontrados |
LUA_REFMODSHAREDIR | O diretório no qual os módulos Lua (.lua ) que já estão instalados podem ser encontrados |
LUA_MODLIBDIR | O diretório no qual as bibliotecas dos módulos Lua (.so ) serão instalados por este port |
LUA_MODSHAREDIR | O diretório no qual os módulos Lua (.lua ) serão instalados por este port |
LUA_PKGNAMEPREFIX | O prefixo do nome do pacote usado por módulos Lua |
LUA_CMD | O nome do interpretador Lua (exemplo lua53 ) |
LUAC_CMD | O nome do compilador Lua (exemplo luac53 ) |
Essas variáveis adicionais estão disponíveis para ports que especificaram o parâmetro module
:
Nome | Descrição |
---|---|
LUA_DOCSDIR | o diretório no qual a documentação do módulo deve ser instalada. |
LUA_EXAMPLESDIR | o diretório no qual os arquivos de exemplo do módulo devem ser instalados. |
Este exemplo mostra como fazer referência a um módulo Lua necessário em tempo de execução. Observe que a referência 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>
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>
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.