Autoreconf race condition?

Jan Synacek jsynacek at redhat.com
Tue May 22 10:20:06 UTC 2012


Hello all!

I've run into a problem when I was trying to build tftp (master branch) package locally.

    ~/work/tftp$ fedpkg local
    ...
    config.status: creating MCONFIG
    config.status: creating aconfig.h
    configure: WARNING: unrecognized options: --disable-dependency-tracking
    + make -j4
    rm -f aconfig.h.in aconfig.h
    echo \#define VERSION \"tftp-hpa `cat version`\" > version.h
    autoheader
    make -C  lib
    make -C  common
    make[1]: Entering directory `/home/jsynacek/work/tftp/tftp-hpa-5.2/common'
    gcc -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector
    --param=ssp-buffer-size=4  -m64 -mtune=generic -W -Wall -Wpointer-arith
    -Wbad-function-cast -Wstrict-prototypes -Wmissing-prototypes
    -Wmissing-declarations -Wnested-externs -Winline -Wwrite-strings -Wundef
    -Wshadow -Wsign-compare -pipe -fno-strict-aliasing
    -I/home/jsynacek/work/tftp/tftp-hpa-5.2 -c tftpsubs.c
    make[1]: Entering directory `/home/jsynacek/work/tftp/tftp-hpa-5.2/lib'
    make[1]: Nothing to be done for `all'.
    make[1]: Leaving directory `/home/jsynacek/work/tftp/tftp-hpa-5.2/lib'
    In file included from tftpsubs.h:41:0,
                    from tftpsubs.c:34:
    /home/jsynacek/work/tftp/tftp-hpa-5.2/config.h:21:73: fatal error: aconfig.h: No
    such file or directory
    compilation terminated.

Notice the execution of rm -f aconfig.h *after* make. The spec doesn't seem to
be wrong:

    ...
    autoreconf
    %configure
    make %{?_smp_mflags}
    ...

And here is the corresponding part from the build log:

    ...
    autoreconf
    CFLAGS="${CFLAGS:--O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4  -m64 -mtune=gen
    CXXFLAGS="${CXXFLAGS:--O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4  -m64 -mtune
    FFLAGS="${FFLAGS:--O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4  -m64 -mtune=gen
    LDFLAGS="${LDFLAGS:--Wl,-z,relro }"; export LDFLAGS;
    ./configure --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu \
            --program-prefix= \
            --disable-dependency-tracking \
            --prefix=/usr \
            --exec-prefix=/usr \
            --bindir=/usr/bin \
            --sbindir=/usr/sbin \
            --sysconfdir=/etc \
            --datadir=/usr/share \
            --includedir=/usr/include \
            --libdir=/usr/lib64 \
            --libexecdir=/usr/libexec \
            --localstatedir=/var \
            --sharedstatedir=/var/lib \
            --mandir=/usr/share/man \
            --infodir=/usr/share/info
    make -j4
    ...

I also noticed a rather weird comment in the Makefile:

    # Adding "configure" to the dependencies serializes this with running
    # autoconf, because there are apparently race conditions between
    # autoconf and autoheader.
    aconfig.h.in: configure.in configure aclocal.m4
    rm -f aconfig.h.in aconfig.h
    autoheader

This part also seems to be causing my problem. Adding configure to the
dependencies apparently does not help.

I don't really know what the root cause of my problem is. I looks like a race
condition between some of the autotools, but I'm not really sure.

The problem goes away when I add sleep 1 between autoreconf and %configure in
the spec file.

Any ideas?

Thanks,
-- 
Jan Synacek
Software Engineer, BaseOS team Brno, Red Hat


More information about the devel mailing list