`autoreconf` 如何创建 m4/ 文件夹?

Posted

技术标签:

【中文标题】`autoreconf` 如何创建 m4/ 文件夹?【英文标题】:How does `autoreconf` create m4/ folder? 【发布时间】:2021-01-23 10:50:09 【问题描述】:

我点击a problem - 我发现了非常奇怪的情况:

    我在本地运行 Docker 映像并在那里运行 autoreconf -i,我得到了正确且健壮的 ./configure 脚本。 然后我在同一个 Docker 映像中但在 Gitlab CI 下运行 autoreconf -i。而且我的 ./configure 脚本被破坏了 - 一些 M4 宏没有替换为它们的 shell 代码,因此 Bash 无法执行它们并将它们视为语法错误。

两者的区别在于m4/文件夹:成功的m4/文件夹包含如下文件:

aria2_arg.m4
ax_check_compile_flag.m4
ax_cxx_compile_stdcxx_11.m4
codeset.m4
fallocate.m4
fcntl-o.m4
gettext.m4
... # and so on

但在失败的(Gitlab CI)m4/ 文件夹中有:

gettext.m4
fcntl-o.m4
# ... and so on

还有aria2_arg.m4ax_check_compile_flag.m4ax_cxx_compile_stdcxx_11.m4fallocate.m4 和其他人不见了。我不知道如果 Docker 映像在两种情况下都相同,怎么可能,但是... autoreconf 如何创建m4/ 文件夹?如果其内容的来源是 Docker 镜像本身(我不知道是不是真的,这只是我的建议),那么为什么两种情况下的内容不同呢?

【问题讨论】:

【参考方案1】:

没有任何魔法。丢失的 m4 文件确实存在于原始 Aria2 Github 存储库(在m4/)文件夹中。 autoreconf -i 将另一个 .m4 文件添加到此文件夹。但它有 .gitignore 和 .m4 规则。我将它添加到另一个 git repo(在 Gitlab 中构建它),但 m4/ 文件夹被忽略了。所以:

 Aria2   ->   local folder   ->   run docker ->     OK
Github          with m4/            locally      m4/ exists

工作正常,但是:

Aria2   ->  another git repo   ->   run Gitlab CI ->      Failure
Github        (now no m4/)                             (.m4 missing)

所以,问题的原因似乎是 - 在第二个 git repo 中错过了m4/(至少我已经获得了第一个成功的构建)

【讨论】:

以上是关于`autoreconf` 如何创建 m4/ 文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

autotools:autoreconf 找不到宏,但 aclocal 可以

如何在 iOS 下使用设备上的 CoreAudio 以编程方式创建一定长度的空 .m4a 文件?

Autoreconf 以“非 POSIX 变量名”停止

如何以 .m4a 格式录制语音

error: possibly undefined macro: LT_SYS_SYMBOL_USCORE please use m4_pattern_allow

将原始 .aac 文件包装到 .m4a 容器中的最简单方法是啥