【问题标题】:EXTRA_DIST not considered on VPATH BuildVPATH 构建中未考虑 EXTRA_DIST
【发布时间】:2014-12-28 20:36:47
【问题描述】:

我有一个项目,目录结构如下(简化):

configure.ac
Makefile.am
samples
src/Makefile.am
tests/openssh_keys
tests/Makefile.am

顶层 Makefile.am 有以下内容:

EXTRA_DIST = $(srcdir)/tests/openssh_keys \
             $(srcdir)/samples
SUBDIRS = src . tests

“tests”中的“openssh_keys”目录包含单元测试所需的数据。当我使用“make dist”创建包时,EXTRA_DIST 中提到的所有文件都正确包含在包中。我在使用“make distcheck”时遇到了麻烦,因为这会创建一个 VPATH 构建。不幸的是,EXTRA_DIST 中提到的文件没有被复制,导致运行测试用例时出错。

即使在 VPATH 构建中,任何人都有适当的解决方案来包含 EXTRA_DIST 中提到的文件?

【问题讨论】:

  • 我不确定这是否是问题所在,但您无需在EXTRA_DIST 中指定$(srcdir)
  • 尝试不使用 $(srcdir) 但仍然是同样的问题
  • 将测试/openssh_keys 添加到 DIST_SUBDIRS?我对“没有肮脏的黑客或解决方法”嗤之以鼻——对于一个;不知道你是否会认为这是一个肮脏的黑客,第二,我有点认为 autotools 是一个肮脏的黑客;)
  • 制作 distcheck ... test -d "pam_openssh_x509-0.1" || mkdir "pam_openssh_x509-0.1" (cd 测试/openssh_keys && make top_distdir=../../pam_openssh_x509-0.1 distdir=../../pam_openssh_x509-0.1/tests/openssh_keys \ am__remove_distdir=: am__skip_length_check=: am__skip_distt_fix=: ) make[2]: 进入目录 '/home/sebastian/development/pam_openssh_x509/tests/openssh_keys'... make[2]: *** 没有规则可以创建目标 'distdir'。停止。 Makefile:587: 目标“dist”的配方失败 make: *** [dist] 错误 2

标签: c build autotools autoconf automake


【解决方案1】:

我不确定您收到的错误是什么,因为您没有报告它,但我找到了your repository 并查看了(我建议您查看您在 @ 中写的内容) 987654322@,因为它可以被简化,但这是一个不同的话题。)

从我在代码中看到的情况来看,问题在于您实际上并没有为测试二进制文件提供查找文件的路径,而是以相对于 CWD 的方式查找它。但是make distcheck(和许多发行版)使用树外构建,其中$(srcdir) 不是.,因此它失败了。

EXTRA_DIST 不会帮助您:这只会告诉 automake 复制 tarball 中的文件,但不会从 $(srcdir) 中复制出来。相反,您应该为测试代码本身提供一种了解$(srcdir) dir 位置的方法。由于您没有使用测试驱动程序或脚本,因此我的最小更改建议是

pam_openssh_x509_check_CPPFLAGS = -DKEYSDIR="\"$(srcdir)/openssh_keys\""

然后将测试源改为

    char *directory = KEYSDIR;
    char *oneliner = KEYSDIR "/ssh_rsa.txt";

以便在相对路径 (../../tests/openssh_keys) 中找到它们。

【讨论】:

  • 现在无法检查解决方案,但会在周末检查。由于赏金即将到期,我会提前奖励您。感谢您完成工作并搜索存储库并检查代码:)
猜你喜欢
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-03
相关资源
最近更新 更多