我可以使用$ dc_install_base在distcheck期间安装systemd文件吗?

时间:2014-11-17 19:42:41

标签: autotools automake

我有以下用于安装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 && makesudo make install并让一切正常工作是一个重要的要求。如果systemd文件安装在pkg-config给出的位置以外的任何地方,那么它将无法正常工作,而且还会无声地失败。

1 个答案:

答案 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扩展(有单引号) )。