6.22. Usando Lua

Esta seção descreve o status das bibliotecas Lua na árvore de ports e sua integração com o sistema de ports.

6.22.1. Introdução

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.

6.22.2. Seleção de Versão

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.

Nota:

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.

6.22.3. Flags de Configuração 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 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.

6.22.4. Flavors de Versão

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.

6.22.5. Variáveis ​​Definidas

Essas variáveis ​​estão disponíveis no port.

Tabela 6.39. Variáveis ​​Definidas para Ports Que Usam Lua
NomeDescrição
LUA_VERA versão Lua que será usada (por exemplo,5,1)
LUA_VER_STRA versão Lua sem os pontos (por exemplo,51)
LUA_FLAVORO nome do flavor correspondente à versão selecionada Lua, a ser usado para especificar dependências
LUA_BASEO prefixo que deve ser usado para localizar o Lua (e componentes) que já estão instalados
LUA_PREFIXO prefixo onde o Lua (e os seus componentes) são instalados por este port
LUA_INCDIRO diretório onde os arquivos header do Lua estão instalados
LUA_LIBDIRO diretório onde as bibliotecas Lua são instaladas
LUA_REFMODLIBDIRO diretório no qual as bibliotecas dos módulos Lua (.so) que já estão instalados podem ser encontrados
LUA_REFMODSHAREDIRO diretório no qual os módulos Lua (.lua) que já estão instalados podem ser encontrados
LUA_MODLIBDIRO diretório no qual as bibliotecas dos módulos Lua (.so) serão instalados por este port
LUA_MODSHAREDIRO diretório no qual os módulos Lua (.lua) serão instalados por este port
LUA_PKGNAMEPREFIXO prefixo do nome do pacote usado por módulos Lua
LUA_CMDO nome do interpretador Lua (exemplo lua53)
LUAC_CMDO nome do compilador Lua (exemplo luac53)

Essas variáveis adicionais estão disponíveis para ports que especificaram o parâmetro module:

Tabela 6.40. Variáveis Definidas para Ports de Módulos Lua
NomeDescrição
LUA_DOCSDIRo diretório no qual a documentação do módulo deve ser instalada.
LUA_EXAMPLESDIRo diretório no qual os arquivos de exemplo do módulo devem ser instalados.

6.22.6. Exemplos

Exemplo 6.29. Makefile para uma aplicação que utiliza Lua

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>

Exemplo 6.30. Makefile para módulo 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>

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>.