我有以下用于安装systemd服务文件的Autotools代码,该文件必须安装在$prefix
之外的pkg-config变量给出的目录中:
(我知道这不合适,但我无法改变systemd的工作方式。)
configure.ac
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
以外的东西会破坏它,我必须覆盖distcheck的--with-systemdsystemunitdir
配置选项。我是这样做的,因为登台目录的位置在变量$dc_install_base
中可用。我无法在此处传递绝对路径,$prefix
或任何其他$prefix
派生的变量(例如$libdir
)在distcheck运行期间将不正确。
Makefile.am
AM_DISTCHECK_CONFIGURE_FLAGS = \
--with-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir)
我的问题有两个:
此功能($dc_install_base
)似乎无法记录在任何地方。是官方支持还是实施细节?通常,Automake-private变量中有两个连续的下划线,我相信。
有没有更好的方法来做我想做的事情?我知道Autotools的方法是默认将systemdsystemunitdir
设置为$prefix
的子目录,让用户或发行版覆盖它。但是,对我来说,一个人应该能够从tarball中提取包,运行./configure && make
和sudo make install
并让一切正常工作是一个重要的要求。如果systemd文件安装在pkg-config给出的位置以外的任何地方,那么它将无法正常工作,而且还会无声地失败。
答案 0 :(得分:1)
有点晚了但是......
我遇到与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
调用期间执行的shell扩展(有单引号) )。