如何在 Debian 安装文件中表示 $ARCH-pc-linux-gnu?

如何在 Debian 安装文件中表示 $ARCH-pc-linux-gnu?

我目前正在研究GNU Octave PPA。我的octave.install文件(据我所知,它遵循与规则文件相同的格式约定)需要包含来自以下文件:

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

对于 64 位(或 amd64)版本:

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

适用于 32 位版本。我该如何编写安装文件,以便它能在这些相应的系统上包含这些文件?我尝试过:

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

希望规则文件和 shell 脚本在语法上的相似性能够使此行工作。但变量$ARCH未被求值(即,它被保留为$ARCH,而不是替换我在上一行中定义的值),并且构建失败(这里是构建日志)。

编辑:Launchpad 刚刚尝试构建建议,${ARCH}以代替$ARCH上述尝试修复。错误如下:

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

答案1

类似地${DEB_HOST_MULTIARCH},还有其他变量用于说明架构信息的详细信息。如以下 Debian 政策手册中所述:

4.9 主要构建脚本:debian/rules

make我们构建的架构和构建目标架构由使用实用程序 的变量确定dpkg-architecture。您可以确定构建架构以及主机架构的 Debian 架构和 GNU 样式架构规范字符串。构建架构是在其上debian/rules运行和执行包构建的架构。主机架构是将在其上安装和运行生成的包的架构。它们通常是相同的,但在交叉编译的情况下可能会有所不同(在不同架构的机器上为一种架构构建包)。

以下是受支持的 make 变量的列表:

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)

其中*,要么BUILD用于构建架构的规范,要么HOST用于主机架构的规范。

通过将所需的变量设置为合适的默认值,可以在规则文件中提供向后兼容性;有关详细信息,请参阅文档dpkg-architecture

重要的是要理解,DEB_*_ARCH字符串仅确定我们正在构建的 Debian 架构。它不应该用于获取 CPU 或系统信息;DEB_*_ARCH_CPUDEB_*_ARCH_OS变量应该用于此目的。GNU 样式变量通常只应与上游构建系统一起使用。

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

你要找的是DEB_HOST_GNU_CPU。因此新的安装行应该是:

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

您可以通过运行以下命令在本地机器上查看这些变量的值:

~$ 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 

相关内容