首先,背景的,为什么我问这个问题一点:我们的产品的每日构建脚本(如詹金斯在Debian Linux上运行),做大致是这样的:有没有办法可靠地让automake忽略时间戳?
- 创建并进入构建环境使用的debootstrap和chroot的
- 检查了我们的代码库(包括一些第三方库)从SVN
- 奔跑配置,并在必要时建立的所有代码
- 包了,结果到一个安装文件,可以上传使用我们的安装工具到我们的无头服务器箱。
这主要工作正常,但每隔一段时间(也许一个日常打造满分10分),即建立我们的第三方库的一个脚本的一部分就会因错误使用类似这样的错误之一:
CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/bash
/root/software/3rdparty/libogg/missing autoconf
/root/software/3rdparty/libogg/missing: line 81: autoconf: command not found
WARNING: 'autoconf' is missing on your system.
You should only need it if you modified 'configure.ac',
or m4 files included by it.
The 'autoconf' program is part of the GNU Autoconf package:
<http://www.gnu.org/software/autoconf/>
It also requires GNU m4 and Perl in order to run:
<http://www.gnu.org/software/m4/>
<http://www.perl.org/>
make: *** [configure] Error 127
据我所知,这是偶尔出现,因为在第三方库中的文件的时间戳是不同的(例如关闭的相互一两秒钟只是因为当他们的时机在特定版本中从SVN服务器检出)。这会导致配置脚本认为它需要自动重新生成一个文件,因此它会尝试调用'automake'来执行此操作,并且出错,因为automake未安装。
当然,这里要做的很明显的事情是在构建环境中安装automake,但构建环境不是我可以轻易修改的(由于体制原因),所以我想避免必须尽可能做到这一点。我想要做的是找出如何获得配置脚本(我可以修改)来忽略时间戳,并且始终在时间戳相同时执行基本构建。
我试图通过手动运行“触摸”上的一些文件,迫使它们的时间戳是相同的,以巧妙的问题,这似乎使问题发生较少,但它仍然发生:
./configure --prefix="$PREFIX" --disable-shared --enable-static && \
touch config* aclocal* Makefile* && \
make clean && make install) || Failure "libogg"
熟悉automake工作方式的人能否提供一些建议,告诉我如何在不修改构建环境的情况下更可靠地在日常构建工作中进行“配置”调用?
看起来像“touch -r”做的伎俩,谢谢!特别是,我用下面的命令替换了纯触摸命令(上面):touch temp_dummy_file.txt; touch -rtemp_dummy_file.txt config * aclocal * Makefile * –