Receitas de construção do Launchpad: Como especificar corretamente as dependências de construção para pacotes no mesmo PPA?

0

Eu estou tentando construir o Code :: Blocks IDE no Ubuntu 16.04 usando esta receita:

link

Ele precisa do libwxgtk2.8-dev, que não está no 16.04 repos, mas eu adicionei ao pacote aqui:

link

Mas quando eu construo, continuo recebendo um erro de dependência não atendido:

link

Você pode ver o arquivo de controle aqui:

link

Alguma idéia do que estou fazendo errado?

    
por dlm 27.04.2016 / 15:26

1 resposta

1

As mensagens de erro que você recebe do apt nesse tipo de situação são um pouco enganosas: na verdade, está dizendo que o pacote libwxgtk2.8-dev está presente, mas pode ser desinstalado. Você pode obter diagnósticos melhores configurando um ambiente em que o apt tenha seu PPA em sources.list (a ferramenta chdist pode ser útil aqui para evitar perturbar seu ambiente normal ou incomodar com um chroot completo ou similar) e fazer drill down interativamente:

$ chdist create codeblocks
Now edit /home/cjwatson/.chdist/codeblocks/etc/apt/sources.list
Run chdist apt-get codeblocks update
And enjoy.
$ cat >.chdist/codeblocks/etc/apt/sources.list <<EOF
deb [trusted=yes] http://ppa.launchpad.net/damien-moore/codeblocks-stable/ubuntu xenial main
deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu xenial-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse
EOF
$ chdist apt-get codeblocks update
# ignore GPG errors in the output, which don't matter for the purposes of
# inspection
$ chdist apt-get codeblocks install libwxgtk2.8-dev
Reading package lists... Done
Building dependency tree... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies.
 libwxgtk2.8-dev : Depends: libwxgtk2.8-0 (= 2.8.12.1+dfsg2-0~48~ubuntu16.04.1) but it is not going to be installed
                   Depends: libwxbase2.8-dev (= 2.8.12.1+dfsg2-0~48~ubuntu16.04.1) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Em seguida, você adiciona nomes de pacotes à linha de comando até receber uma mensagem mais específica do que "não será instalado":

$ chdist apt-get codeblocks install libwxgtk2.8-dev libwxgtk2.8-0 libwxbase2.8-dev libwxbase2.8-0
Reading package lists... Done
Building dependency tree... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies.
 libwxbase2.8-0 : Depends: libwxbase2.8-0 (>= 2.8.12.1+dfsg2) but 2.8.12.1+dfsg2-0~48~ubuntu16.04.1 is to be installed
 libwxgtk2.8-0 : Depends: libwxbase2.8-0 (>= 2.8.12.1+dfsg2) but 2.8.12.1+dfsg2-0~48~ubuntu16.04.1 is to be installed
                 Depends: libwxgtk2.8-0 (>= 2.8.12.1+dfsg2) but 2.8.12.1+dfsg2-0~48~ubuntu16.04.1 is to be installed
E: Unable to correct problems, you have held broken packages.
$ dpkg --compare-versions 2.8.12.1+dfsg2-0~48~ubuntu16.04.1 gt 2.8.12.1+dfsg2 && echo yes || echo no
no

Portanto, traduzindo para o inglês, os pacotes wx no seu PPA têm dependências internas em pelo menos 2.8.12.1+dfsg2 , mas a versão que você usou para a porta de redirecionamento para xenial no seu PPA é 2.8.12.1+dfsg2-0~48~ubuntu16.04.1 (sutilmente) ) na verdade, um pouco menos do que a versão necessária. Você teria que corrigir o número da versão ou (mais intrusivamente) ajustar as dependências para ser mais liberal.

Por que não simplesmente copiar a fonte e construir pacotes binários a partir de astutos? Enquanto eles foram removidos do xenial, eles aparentemente ainda podem ser instalados se forem copiados diretamente para a frente, e essa seria de longe a opção de menor esforço. Pegue lp: ubuntu-archive-tools com bzr e execute:

$ ./copy-package --from ubuntu --from-suite wily --to ppa:damien-moore/ubuntu/codeblocks-stable --to-suite xenial -b wxwidgets2.8

Espere um pouco para que copie e publique, e tudo deve estar bem. Caso contrário, eu recomendaria basear seu pacote fonte wxwidgets2.8 no astuto ( 2.8.12.1+dfsg2-2ubuntu2 ) e garantir que o número da versão que você usa seja maior ou igual a esse.

Como observação, sua compilação deve ter sido gravada pelo Launchpad como uma falha de compilação, em vez de uma espera de dependência, porque não podemos produzir uma dependência de dependência não ambígua no caso de uma dependência de compilação presente, mas que pode ser desinstalada. . Eu arquivei isso como bug 1575965 .

    
por Colin Watson 28.04.2016 / 01:57