Como eu represento $ ARCH-pc-linux-gnu em um arquivo de instalação do Debian?

3

Atualmente, estou trabalhando em um PPA do GNU Octave . Meu arquivo octave.install (que, segundo meu conhecimento, segue as mesmas convenções de formatação dos arquivos de regras) precisa incluir arquivos de:

usr/lib/${DEB_HOST_MULTIARCH}/octave/${DEB_VERSION_UPSTREAM}/exec/x86_64-pc-linux-gnu/*

para a compilação de 64 bits (ou amd64) e:

usr/lib/${DEB_HOST_MULTIARCH}/octave/${DEB_VERSION_UPSTREAM}/exec/i386-pc-linux-gnu/*

para a compilação de 32 bits. Como escrevo meu arquivo de instalação para incluir esses arquivos nesses sistemas? Eu tentei:

ARCH=$(uname -m)
usr/lib/${DEB_HOST_MULTIARCH}/octave/${DEB_VERSION_UPSTREAM}/exec/$ARCH-pc-linux-gnu/*

na esperança de que as semelhanças entre os arquivos de regras e o shell script, em termos de sua sintaxe, permitam que essa linha funcione. Mas a variável $ARCH foi deixada não avaliada (isto é, foi deixada como $ARCH e não foi substituída pelo valor que eu defini na linha anterior) e a construção falhou (aqui é o log de construção.

EDIT : O Launchpad acabou de tentar criar a sugestão de usar ${ARCH} em vez de $ARCH na tentativa de correção mencionada anteriormente. Aqui está o erro:

find debian/tmp -name '*.la' -delete
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
   dh_install -a -O--parallel
    install -d debian/octave//usr/bin
    cp -a debian/tmp/usr/bin/octave-4.2.0 debian/octave//usr/bin/
    cp -a debian/tmp/usr/bin/octave-cli debian/octave//usr/bin/
    cp -a debian/tmp/usr/bin/octave-cli-4.2.0 debian/octave//usr/bin/
    cp -a debian/tmp/usr/share/applications debian/octave//usr/share/
    install -d debian/octave/-m\)
    cp -a debian/tmp/ARCH=$\(uname debian/octave/-m\)/
cp: cannot stat ‘debian/tmp/ARCH=$(uname’: No such file or directory
dh_install: cp -a debian/tmp/ARCH=$(uname debian/octave/-m)/ returned exit code 1
make: *** [binary-arch] Error 2
dpkg-buildpackage: error: fakeroot debian/rules binary-arch gave error exit status 2
--------------------------------------------------------------------------------
Build finished at 20161117-1936
    
por BH2017 17.11.2016 / 19:27

1 resposta

2

Como ${DEB_HOST_MULTIARCH} , existem outras variáveis para detalhes de informações de arquitetura. Conforme documentado abaixo do manual de políticas do Debian:

  

4.9 Script do edifício principal: debian/rules

     

As arquiteturas sobre as quais construímos e construímos são determinadas por make variables usando o utilitário dpkg-architecture . Você pode determinar a arquitetura Debian e a string de especificação de arquitetura de estilo GNU para a arquitetura de construção, bem como para a arquitetura do host. A arquitetura de compilação é a arquitetura na qual debian/rules é executado e a compilação do pacote é executada. A arquitetura do host é a arquitetura na qual o pacote resultante será instalado e executado. Normalmente, são os mesmos, mas podem ser diferentes no caso de compilação cruzada (criação de pacotes para uma arquitetura em máquinas de uma arquitetura diferente).

     

Aqui está uma lista de variáveis suportadas:

DEB_*_ARCH (the Debian architecture)    
DEB_*_ARCH_CPU (the Debian CPU name)
DEB_*_ARCH_OS (the Debian System name)
DEB_*_GNU_TYPE (the GNU style architecture specification string)
DEB_*_GNU_CPU (the CPU part of DEB_*_GNU_TYPE)
DEB_*_GNU_SYSTEM (the System part of DEB_*_GNU_TYPE)
     

em que * é BUILD para especificação da arquitetura de compilação ou HOST para especificação da arquitetura do host.

     

A compatibilidade com versões anteriores pode ser fornecida no arquivo de regras definindo as variáveis necessárias para valores padrão adequados; por favor consulte a documentação de dpkg-architecture para detalhes.

     

É importante entender que a string DEB_*_ARCH determina apenas em qual arquitetura Debian estamos construindo ou para. Não deve ser usado para obter informações da CPU ou do sistema; as variáveis DEB_*_ARCH_CPU e DEB_*_ARCH_OS devem ser usadas para isso. Geralmente, as variáveis de estilo GNU devem ser usadas apenas com sistemas de criação upstream.

     

Fonte: link

O que você está procurando é DEB_HOST_GNU_CPU . Então a nova linha de instalação deve ser:

usr/lib/${DEB_HOST_MULTIARCH}/octave/${DEB_VERSION_UPSTREAM}/exec/${DEB_HOST_GNU_CPU}-pc-linux-gnu/*

Você pode dar uma olhada nos valores dessas variáveis em sua máquina local executando:

~$ dpkg-architecture
DEB_BUILD_ARCH=amd64
DEB_BUILD_ARCH_BITS=64
DEB_BUILD_ARCH_CPU=amd64
DEB_BUILD_ARCH_ENDIAN=little
DEB_BUILD_ARCH_OS=linux
DEB_BUILD_GNU_CPU=x86_64
DEB_BUILD_GNU_SYSTEM=linux-gnu
DEB_BUILD_GNU_TYPE=x86_64-linux-gnu
DEB_BUILD_MULTIARCH=x86_64-linux-gnu
DEB_HOST_ARCH=amd64
DEB_HOST_ARCH_BITS=64
DEB_HOST_ARCH_CPU=amd64
DEB_HOST_ARCH_ENDIAN=little
DEB_HOST_ARCH_OS=linux
DEB_HOST_GNU_CPU=x86_64
DEB_HOST_GNU_SYSTEM=linux-gnu
DEB_HOST_GNU_TYPE=x86_64-linux-gnu
DEB_HOST_MULTIARCH=x86_64-linux-gnu
DEB_TARGET_ARCH=amd64
DEB_TARGET_ARCH_BITS=64
DEB_TARGET_ARCH_CPU=amd64 
    
por user.dz 18.11.2016 / 23:20

Tags