Lua independente com programa binário externo

0

Estou escrevendo um pequeno programa para nós no LuaLaTex. O objetivo é produzir um código qr com um determinado uuid, o código qr é impresso na página e o uuid é armazenado nos metadados do pdf.

No entanto, achei que seria interessante ter um único executável na pasta texmf para ser chamado pelo arquivo de classe do meu documento. Para gerar os códigos qr, usei (Linux) qrencode & convert com este script de lua uuidqrcode.lua :

#!/usr/bin/env lua 

function gen_qr_uuid ()
    local uuid = require 'uuid'
    -- uuid.seed(math.randomseed(os.time()))
    local encode = uuid()
    local name = encode
    local format = 'pdf'

    local qrencode = string.format(
        [[qrencode \
            --type=EPS \
            --output=%s.eps \
            --size=10 \
            --level=H \
            --margin=0 \
            --casesensitive \
            %s \
            ]], 
            name,
            encode)

    local convert = string.format(
        [[convert \
            %s.eps \
            %s.%s \
            ]],
            name,
            name,
            format)

    local rmeps = string.format("rm %s.eps", name)

    os.execute(qrencode)
    os.execute(convert)
    os.execute(rmeps)
end

for i=1, (arg[1] or 1) do
    gen_qr_uuid ()
end

Para converter esse script em um executável autônomo, usei luastatic com este script makeluaexec :

#!/bin/sh
luastatic $1 'pkg-config --libs --cflags lua'

Com isso eu tenho um único arquivo executável, mas só depende de qrencode & convert , então quando eu mudo para outra máquina Linux, essas ferramentas precisam ser instaladas. Existe uma maneira de empacotar essas ferramentas em meu executável gerado automaticamente?

    
por M117 04.10.2018 / 17:24

1 resposta

0

Sim. O programa qrencode é apenas um wrapper em torno de libqrencode , e o comando convert é apenas um wrapper em torno de ImageMagick . Em vez de chamar esses comandos, chame as funções da biblioteca diretamente do seu código. Ligações como link e link será útil para isso. Então, quando você chamar luastatic , apenas passe as bibliotecas estáticas relevantes.

    
por 05.10.2018 / 05:11