为什么cryptopp signers.of使用--enable-cryptopp = no构建在PowerDNS中?

时间:2014-06-04 19:33:59

标签: autotools

我正在尝试构建PowerDNS 3.3.1而不需要使用crypto ++作为依赖项。 configure脚本有一个选项--enable-cryptopp来禁用库的使用。当我在配置期间提供--enable-cryptopp=no参数时,后续构建在尝试构建cryptoppsigners.o时失败。

不幸的是,我对开发方面的autotools并不熟悉。无论如何我试着挖掘。

查看configure.ac,我可以看到定义条件的AM_CONDITIONAL(CRYPTOPP,test x"$enable_cryptopp" = "xyes"),在pdns/Makefile.am中,有条件用于几个地方以防止添加cryptoppsigners.cc到一个源列表和-lcryptopp到一个参数列表。尽管存在这些条件,但pdns / Makefile仍然在源列表和参数列表中包含cryptoppsigners.cc。我也在Makefile am__objects_3 = cryptoppsigners.$(OBJEXT)中看到,它最终被添加到pdns_server目标;从这里开始,我似乎需要弄清楚这是怎么发生的。

pdns/Makefile.in文件中,我看到@CRYPTOPP_TRUE@am__objects_3 = cryptoppsigners.$(OBJEXT)。我不知道如何查找@..@..语法,但我猜测它应该只在设置CRYPTOPP_TRUE时才分配变量。这让我觉得它设置了,但是,看configure.log,我看到了:

CRYPTOPP_FALSE='#'
CRYPTOPP_TRUE=''

似乎应该是CRYPTOPP_FALSE已设置且CRYPTOPP_TRUE未设置。此时,我被困住了。如果未设置CRYPTOPP_TRUE,为什么我的Makefile最终会在目标列表中使用该对象?

更新:事实证明,如果您只是关闭参数,则不会尝试编译cryptoppsigner.cc。我仍然想知道这里发生了什么,我是否应该期待我从autotools那里得到的行为。

2 个答案:

答案 0 :(得分:1)

致电' ./ configure'没有' - enable-cryptopp'正如我们在#powerdns中谈到的那样。

答案 1 :(得分:1)

这里发生的是他们的M4宏PDNS_WITH_CRYPTOPP中的错误:

具体做法是:

  AC_ARG_ENABLE([cryptopp],
    [AS_HELP_STRING([--enable-cryptopp],[use Crypto++ @<:@default=no@:>@])],
    [enable_cryptopp=yes],
    [enable_cryptopp=no]
  )

应该是:

  AC_ARG_ENABLE([cryptopp],
    [AS_HELP_STRING([--enable-cryptopp],[use Crypto++ @<:@default=no@:>@])]
  )

enable_cryptopp被设置为yes无论是yes还是no作为参数(例如--enable-cryptopp=no)在configure } 命令行。这也具有--disable-cryptopp启用此功能的效果。

同样的错误似乎在所有pdns_enable_前缀宏以及m4 directory中的boost.m4中以不同的变体进行复制。