【问题标题】:Can you modify ACLOCAL_PATH from configure.ac?您可以从 configure.ac 修改 ACLOCAL_PATH 吗?
【发布时间】:2022-11-20 01:49:35
【问题描述】:

xnec2c 的用户试图在 OSX 上构建并拥有 autoconf issues 因为 PKG_CHECK_MODULES could not be found since MacPorts puts it in a funny spot

用户使 autoconf 像这样工作:

ACLOCAL_PATH=/opt/local/share/aclocal ./autogen.sh 
ACLOCAL_PATH=/opt/local/share/aclocal ./configure 

我想让它在 OSX 上构建,而不需要对 ACLOCAL_PATH 进行特殊的用户路径修改。那可以吗?

我开始在下面编写一个可能的修复程序,并意识到它可以是一个xyproblem,所以提出了上面的问题。但是,如果这开始了任何齿轮转动,那么我会对 OSX 的一些特殊外壳持开放态度:

例如,是否有可能(如果不建议)检测:

  1. 是否缺少 PKG_CHECK_MODULES?
  2. 如果是:
    • 是 OSX 吗?
    • [ -d /opt/local/share/aclocal ] 是真的吗?
    • 那里有宏吗?

【问题讨论】:

  • MacPorts 因缺乏关注而深受其害,因为某些软件包无法正确构建。 Homebrew 是否对这个包有同样的问题?我建议这是一个需要修复的 MacPorts 错误。
  • @tadman,不确定,我也建议使用 brew,但他们坚持使用 macports。如果我有一个 OSX 系统那么测试会很好,但我没有。如果你有兴趣尝试,那么构建 xnec2c 是相当困难的:xnec2c.org
  • 虽然我使用 MacPorts 多年,但我已经使用 Homebrew 很长时间了,它非常棒。如果有一些顽固的团体拒绝移动,您可能应该 A) 修补该软件包,或 B) 制作您自己的自定义变体。 MacPorts 在许多部门都是出了名的不稳定,但如果您准备修复现有安装程序的缺陷,您可能会帮助修复其中的一小部分。
  • @tadman,很高兴知道。我很好奇如果您有时间启动构建,它在 brew Homebrew 中是否工作正常。如果不是那么我明白,没有压力! (总有一天为 xnec2c 的 OSX 用户提供一个 .dmg 就好了)
  • 没有什么 found in the default ports 这实际上是令人惊讶的。

标签: configure autoconf


【解决方案1】:

虽然 aclocal 有几种附加到其搜索路径的方法(请参阅 https://www.gnu.org/software/automake/manual/html_node/Macro-Search-Path.html),但您不能使用 configure.ac 中的代码修改该宏搜索路径:

当运行configure 中的 shell 代码时,为时已晚,因为可用的宏已经展开。当autoconf(是autoconf还是别的什么?无论如何,m4autoreconf调用)通过m4扩展宏从configure.ac生成configure时也为时已晚:aclocal已经收集了它能找到的 m4 宏。

所以你需要的是 autoreconf 运行之前的一个步骤——这超出了我认为构建系统需要做的事情。

你什么能够做:将静态字符串放入顶层Makefile.am文件,例如

ACLOCAL_AMFLAGS = -I auto-m4 -I project-m4 -I /opt/local/share/aclocal

(此示例使用 auto-m4/AC_CONFIG_MACRO_DIR([auto-m4]) 用于 *.m4 文件,由 autoreconf/autopoint/libtoolizeproject-m4/ 用于项目特定的 *.m4 文件)。

当然,你应该已经

m4_pattern_forbid([PKG_CHECK_MODULES])dnl

在第一次调用PKG_CHECK_MODULES之前,以便尽早检测到丢失*.m4文件的问题,即当autoconf即将生成configure未展开的PKG_CHECK_MODULES文件时。

可以如果未定义 PKG_CHECK_MODULES,请使用一些 m4 代码打印冗长的错误消息。类似的东西(未经测试)

m4_ifndef([PKG_CHECK_MODULES], [dnl
m4_fatal([Could not find the PKG_CHECK_MODULES macro. Check that the pkg.m4 file is available and aclocal finds it (e.g. set ACLOCAL_PATH=/opt/local/share/aclocal).
])dnl
PKG_CHECK_MODULES([FOO], [foo])

就我个人而言,我会选择 m4_pattern_forbid 并确保 OSX 使用自制软件工作 OOTB 进行构建,然后在 INSTALL 文件中记录用于在罕见且有缺陷的系统(如带有 macports 的 OSX 或没有 GNU 工具的 SunOS)上构建的特性。

aclocal 找不到它的 *.m4 文件,这不是 macports/OSX 中的错误吗?不应该有一个指向/opt/local/share/aclocaldirlist文件吗?或者他们的 macports 用户应该在他们的 PATH 中有一个 aclocal,它实际上找到了 macports 宏文件?

无论如何,我不会认为修复有问题的系统是我构建系统的工作。你需要在某处画线。

【讨论】:

    猜你喜欢
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 2021-09-22
    • 2011-03-10
    相关资源
    最近更新 更多