有没有办法可靠地让automake忽略时间戳?

时间:2016-03-14 18:50:46

标签: automake

首先,我要问一下这个问题的一些背景知识:我们的产品每日构建脚本(由Jenkins在Debian Linux下运行)大致如下:

  1. 使用debootstrap和chroot
  2. 创建并进入构建环境
  3. 从SVN
  4. 查看我们的代码库(包括一些第三方库)
  5. 运行配置并根据需要构建所有代码
  6. 将结果打包成一个安装文件,可以使用我们的安装工具上传到我们的无头服务器盒。
  7. 这大部分工作正常,但每隔一段时间(也许每天一次构建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服务器)。这导致配置脚本认为它需要自动重新生成文件,因此它会尝试调用&#39; automake&#39;这样做,并因为没有安装automake而输出错误。

    当然,这里显而易见的事情是在构建环境中安装automake,但构建环境不是我可以轻易修改的(由于制度原因),所以我想避免如果可能的话,这样做。我想要做的是弄清楚如何获取配置脚本(我可以修改)以忽略时间戳,并且总是在时间戳相等时执行它们所做的基本构建。

    我尝试通过手动运行“触摸”来解决问题。在一些文件上强制他们的时间戳是相同的,这似乎使问题发生的次数减少了,但它仍然会发生:

    ./configure --prefix="$PREFIX" --disable-shared --enable-static && \
    touch config* aclocal* Makefile* && \
    make clean && make install ) || Failure "libogg"
    

    任何熟悉automake工作原理的人都能提供一些建议,告诉我如何制作&#34;配置&#34;在不修改构建环境的情况下,更可靠地调用我们的日常构建工作?

1 个答案:

答案 0 :(得分:1)

您可以在Jenkins服务器上尝试forcing SVN to use commit times on checkout。如果由于某种原因不能解决这些提交时间,也可以在SVN中设置。您可以使用touch -dtouch -r代替touch来避免竞争条件。