Estou tentando fazer um pacote Debian para um projeto cmake que, no modo single-thread, leva 3 horas para compilar. Estou tentando obter uma compilação paralela, mas não consigo.
Eu tentei configurar parallel=4
no meu control
arquivo assim:
#!/usr/bin/make -f
export DEB_BUILD_OPTIONS="parallel=4"
%:
dh $@ --parallel
Com base na resposta aceita nesta pergunta anterior , mas recebo o seguinte aviso:
dh: warning: invalid flag in DEB_BUILD_OPTIONS: "parallel=4"
E o debhelper ainda invoca make -j1
.
Eu tentei variações sobre o tema com base em outras sugestões/comentários que encontrei online DEB_BUILD_OPTIONS="-j=4"
, DEB_BUILD_OPTIONS="-j4"
etc, sem efeito. Já tentei configurar debian/compat
para 10
. Sempre o resultado é invalid flag
. Como posso fazer o debhelper honrar esta configuração?
Estou fazendo a compilação em um contêiner do docker Ubuntu Focal x86_64 e minha versão debhelper
é 12.10ubuntu1
.
A documentação que você referenciou debian/rules e DEB_BUILD_OPTIONS , menciona que deve ser mapeado/implementado no nível inferior também.
Enquanto o documento dá um
make
exemplo, neste caso um equivalente deve ser usado paracmake
. Não será difícil encontrar um modelo da fonte de outro pacote ou diretamente do launchpad.Este é um exemplo do
cmake
próprio pacote, mapeando o sinalizadordebian/rules
diretamente (assim ainda a sintaxe do Makefile):Fonte: Qualquer arquivo
cmake*.tar.xz
de origem nativa da compilação diária do cmake upstream - projeto LaunchpadAcontece que eu tinha a sintaxe do Makefile errada.
A mensagem de erro que eu estava vendo veio de uma expressão regular em
dpkg
si extraída aqui:Reli essa expressão regular um milhão de vezes antes de perceber que a segunda
%s
no aviso não tem aspas, o que significa na mensagem de erro:As aspas
"parallel=4"
são provenientes da própria variável de ambiente e não da string de formato.A correção, é mudar
para
pois ao configurar a variável de ambiente,
make
está preservando as aspas na primeira versão. Quando make está fazendo a interpolação de string, não faz diferença prática porque as aspas são comidas pelo shell, mas quando um subprocesso lê o valor de um ambiente, os"
caracteres são preservados.Ter o valor real da variável de ambiente
"parallel=4"
nãoparallel=4
acionou o aviso e quebrou essa expressão regular quedh
usa para analisá-lo (observe o ^ inicial):