Substvars 无法正常工作

Substvars 无法正常工作

编辑:更新完整Debian/规则Debian/控制文件

我正在开发一个 Web 项目,需要为不同的部署服务器构建两个 debian 包。主要区别在于依赖的限制Debian/控制文件。所以我写在下面:

Source: web-app
Section: non-free/web
Priority: optional
Maintainer: Me
Build-Depends: debhelper (>= 4.0.0), build-essential
Standards-Version: 3.8.0
Homepage: http://abc.com

Package: web-app
Architecture: all
Depends: apache2, libapache2-mod-rpaf, openssl, rsync, imagemagick, mysql-client, ${other-depends}, libjs-cropper, libjs-jquery (>= 1.3.3-1), libjs-prototype, libjs-scriptaculous, libphp-phpmailer (>= 1.73-4), libphp-snoopy, tinymce (>= 3.2.6-0.1)
Description: Short description
  Long description here.

还有Debian/规则文件:

#!/usr/bin/make -f

DEB_DH_INSTALL_ARGS=-X .svn

include /usr/share/cdbs/1/rules/debhelper.mk

# Add here any variable or target overrides you need.

# platform related package dependencies
XENIAL_LIBS = php7.0, php7.0-opcache, php-apcu, php7.0-mysql, php7.0-gd
PRE_XENIAL_LIBS = apache2-mpm-prefork, apache2-prefork-dev, php5.5, php-apc,      php-gettext, php5-mysql, php5-gd

ifeq ($(shell lsb_release -cd | awk '/^Codename:/ { print $2}'), xenial)
    PLATFORM_LIBS := $(XENIAL_LIBS)
else
    PLATFORM_LIBS := $(PRE_XENIAL_LIBS)
endif

override_dh_gencontrol:
    dh_gencontrol -- -Vother-depends="$(PLATFORM_LIBS)"

configure: configure-stamp
configure-stamp:
    touch configure-stamp

build: build-stamp
build-stamp: configure-stamp
    dh_testdir
    dpkg-parsechangelog | awk '$$0 ~ /^Version:/ {print $$2}' > version.txt
    touch build-stamp

部署目标之一是 Ubuntu 14.04 (Trusty),它应该取代其他取决于PRE_XENIAL_LIBS。但我得到了服务器的最终控制文件,如下所示:

Depends: apache2, openssl, rsync, imagemagick, php, php-opcache, php-apcu, mysql-client, php-gettext, php-mysql, php-gd ...

出了什么问题,如何解决?

================更新==================

我已经修改了我的Debian/规则文件基于 Wouter 的答案,但仍然没有得到正确的替换。然后我运行命令

dpkg-buildpackage

然后从输出中发现了一个警告:

dpkg-gencontrol: warning: Depends field of package web-app: unknown substitution variable ${other-depends}

有什么线索吗?

答案1

首先,你的语法是错误的,并且会导致像这样的命令行...

dh_gencontrol -- -Vdist:Depends=""php7.0, php7.0-opcache, ...""

而不是(你想要的):

dh_gencontrol -- -Vdist:depends="php7.0, php7.0-opcache, ..."

这是因为make不进行引用,并且您将变量中的数据引用两次(一次在赋值中,一次在使用时)。放下其中一个。

其次,它不起作用的原因是您的 debian/rules 文件(如所写)不会使用dh_gencontrol您想要的额外参数进行调用。一个debian/rules文件是一个Makefile;因此,它应该有制定规则等,否则它们会被忽略。像这样的事情在我的机器上完成了预期的事情:

#!/usr/bin/make -f
%:
        dh $@
PKGS := abcd, efgh
override_dh_gencontrol:
        dh_gencontrol -- -Vdist:Depends="$(LIBS)"

如果这仍然没有达到您的预期,那么dpkg-buildpackage绝对需要一个完整的示例(即您可以运行的东西)。

编辑: 你仍然有双引号。和XENIAL_LIBSPRE_XENIAL_LIBS周围有引号。删除它们。另外,您还没有提供一个dpkg-buildpackage不会抱怨的示例(一方面,控制文件不完整)。您正在处理的内容不一定包含公司机密,但展示问题的最小示例至关重要。根据您目前提供的信息,我无法重现您的问题。

编辑2:您的完整规则文件显示您正在使用 CDBS,而不是 debhelper 的dh.因此,override_dh_gencontrol目标不会被调用(这是dh特定的事情)。我不知道 CDBS 如何处理覆盖单个 debhelper 命令(这就是为什么我在假期之前没有回复这个问题,希望也许其他人可以告诉你该怎么做),但这可能是另一个类似的事情您必须设置的 CDBS_FOO_BAR 变量。幸运的是,您的debian/rules文件足够简单,因此来自 cdbs 的端口相当简单。应用以下补丁:

--- rules.old   2016-07-12 16:57:05.350385288 +0200
+++ rules       2016-07-12 16:58:54.456536432 +0200
@@ -1,8 +1,7 @@
 #!/usr/bin/make -f

-DEB_DH_INSTALL_ARGS=-X .svn
-
-include /usr/share/cdbs/1/rules/debhelper.mk
+%:
+       dh $@

 # Add here any variable or target overrides you need.

@@ -16,15 +15,10 @@
     PLATFORM_LIBS := $(PRE_XENIAL_LIBS)
 endif

+override_dh_install:
+       dh_install -X .svn
 override_dh_gencontrol:
        dh_gencontrol -- -Vother-depends="$(PLATFORM_LIBS)"
-
-configure: configure-stamp
-configure-stamp:
-       touch configure-stamp
-
-build: build-stamp
-build-stamp: configure-stamp
-       dh_testdir
+override_dh_auto_build:
        dpkg-parsechangelog | awk '$$0 ~ /^Version:/ {print $$2}' > version.txt
-       touch build-stamp
+       dh_auto_build

首先,这会删除不支持的 CDBS 包含和特定于 CDBS 的DEB_DH_INSTALL_ARGS变量dh,并添加 dh 所需的通配符Makefile目标来代替它。它还添加了override_dh_install目标,该目标替换了DEB_DH_INSTALL_ARGS变量。

其次,这会删除configurebuild目标,以及configure-stampbuild-stampdh不使用这些(保留它们确实是有害的)。

最后,我们添加另一个覆盖目标,它执行 dpkg-parsechangelog 操作来创建 version.txt 文件。您的实际构建过程可能是其他的,但这向您展示了如何替换它。

相关内容