我有以下用于安装 systemd 服务文件的 Autotools 代码,该文件必须安装在外部$prefix
到 pkg-config 变量指定的目录:
(我知道这是不正确的,但我无法改变 systemd 的工作方式。)
配置文件
AC_ARG_WITH([systemdsystemunitdir],
AS_HELP_STRING([--with-systemdsystemunitdir=DIR],
[Directory for systemd service files]),
[],
[with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
当你跑步时make distcheck
,您的软件包将被安装到临时暂存目录中,然后被卸载。由于安装了外部的东西$prefix
会打破这个,我必须覆盖--with-systemdsystemunitdir
distcheck 的配置选项。我这样做,因为临时目录的位置在变量中可用$dc_install_base
。我无法在这里传递绝对路径,并且$prefix
或任何其他$prefix
-派生变量,例如$libdir
在 distcheck 运行期间将不正确。
生成文件.am
AM_DISTCHECK_CONFIGURE_FLAGS = \
--with-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir)
我的问题有两个:
此功能 ($dc_install_base
)似乎没有在任何地方记录。是官方支持还是实施细节?我相信,通常 Automake 私有变量中有两个连续的下划线。
有更好的方法来做我想做的事情吗?我知道自动工具的方式是设置systemdsystemunitdir
到一个子目录$prefix
默认情况下,并让用户或发行版覆盖它。然而,对我来说,一个重要的要求是应该能够从 tarball 中提取包,运行./configure && make
and sudo make install
让一切正常运转。如果 systemd 文件安装在 pkg-config 指定位置之外的其他位置,它将无法工作,而且会默默地失败。
有点晚了但是...
我也有类似的问题gobject-introspection
我(希望)通过添加几个配置选项和类似的东西来解决:
AM_DISTCHECK_CONFIGURE_FLAGS= \
--with-girdir='$$(datadir)/gir-1.0' \
--with-typelibdir='$$(libdir)/girepository-1.0'
对于你的情况,我认为以下应该有效:
AM_DISTCHECK_CONFIGURE_FLAGS = \
--with-systemdsystemunitdir='$$(prefix)/$(systemdsystemunitdir)'
诀窍是你必须保护$(prefix)
针对两个扩展: make 扩展(因此是双$$
)以及在期间执行的壳扩展configure
调用(使用单引号)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)