gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 22:30:33 25 4
gpt4 key购买 nike

我有以下用于安装 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 指定位置之外的其他位置,它将无法工作,而且会默默失败。

最佳答案

有点晚了,但是...

我也遇到了类似的问题 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 扩展调用(使用单引号)。

关于autotools - 我可以在 distcheck 期间使用 $dc_install_base 安装 systemd 文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26980634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com