web-dev-qa-db-fra.com

Comment représenter $ Arch-pc-linux-gnu dans un fichier d'installation Debian?

Je travaille actuellement sur un GNU Octave PPA . Mon fichier octave.install (qui, à ma connaissance, suit les mêmes conventions de formatage que les fichiers de règles) doit inclure les fichiers suivants:

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

pour la construction 64 bits (ou AMD64) et:

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

pour la construction 32 bits. Comment puis-je écrire mon fichier d'installation pour qu'il inclue ces fichiers sur ces systèmes respectifs? J'ai essayé:

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

dans l'espoir que les similitudes entre les fichiers de règles et le script Shell, en termes de syntaxe, permettraient à cette ligne de fonctionner. Mais la variable $Arch n'a pas été évaluée (c'est-à-dire qu'elle a été laissée sous la forme $Arch et n'a pas été substituée à la valeur I définie dans la ligne précédente) et la construction a échoué ( ici est le journal de construction).

EDIT: Launchpad vient juste de terminer la tentative de génération de la suggestion consistant à utiliser ${Arch} au lieu de $Arch dans le correctif précédemment essayé. Voici l'erreur:

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
3
BH2017

Comme ${DEB_Host_MULTIARCH}, il existe d'autres variables pour les détails des informations d'architecture. Comme indiqué ci-dessous dans le manuel de règles Debian:

4.9 Script de construction principal: debian/rules

Les architectures sur lesquelles nous construisons et pour lesquelles nous construisons sont déterminées par make variables à l'aide de l'utilitaire dpkg-architecture. Vous pouvez déterminer l'architecture Debian et la chaîne de spécification d'architecture de style GNU pour l'architecture de construction ainsi que pour l'architecture hôte. L'architecture de construction est l'architecture sur laquelle debian/rules est exécuté et la construction du package est effectuée. L'architecture de l'hôte est l'architecture sur laquelle le paquet résultant sera installé et exécuté. Celles-ci sont normalement les mêmes, mais peuvent être différentes dans le cas d'une compilation croisée (construction de packages pour une architecture sur des machines d'une architecture différente).

Voici une liste des variables make supportées:

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)

* est soit BUILD pour la spécification de l'architecture de construction, soit Host pour la spécification de l'architecture de l'hôte.

La compatibilité en amont peut être fournie dans le fichier de règles en définissant les variables nécessaires sur des valeurs par défaut appropriées; veuillez vous reporter à la documentation de dpkg-architecture pour plus de détails.

Il est important de comprendre que la chaîne DEB_*_Arch détermine uniquement l’architecture Debian sur laquelle ou sur laquelle nous nous basons. Il ne doit pas être utilisé pour obtenir les informations sur le processeur ou le système; les variables DEB_*_Arch_CPU et DEB_*_Arch_OS doivent être utilisées pour cela. Les variables de style GNU ne devraient généralement être utilisées qu'avec les systèmes de construction en amont.

Source: https://www.debian.org/doc/debian-policy/ch-source.html

Celui que vous recherchez est DEB_Host_GNU_CPU. La nouvelle ligne d'installation devrait donc être:

usr/lib/${DEB_Host_MULTIARCH}/octave/${DEB_VERSION_UPSTREAM}/exec/${DEB_Host_GNU_CPU}-pc-linux-gnu/*

Vous pouvez consulter les valeurs de ces variables sur votre machine locale en exécutant:

~$ 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 
2
user.dz