Package: src:dovecot
Version: 1:2.3.10.1+dfsg1-1
Severity: serious
Justification: FTBFS on armel and armhf
Tags: sid

Dovecot currently fails to to build on 32-bit arm architectures.

The failure is in the upstream test suite, with the following output:

test-backtrace.c:19: Assert failed: backtrace_append(bt) == 0
test-backtrace.c:21: Assert failed: strstr(str_c(bt), "main") != NULL
backtrace_append ..................................................... : FAILED
test-backtrace.c:43: Assert failed: backtrace_get(&bt) == 0
/bin/bash: line 1: 15381 Segmentation fault      ./$bin
make[5]: *** [Makefile:3409: check-local] Error 1
make[5]: Leaving directory '/<<PKGBUILDDIR>>/src/lib'
make[4]: *** [Makefile:2796: check-am] Error 2
make[4]: Leaving directory '/<<PKGBUILDDIR>>/src/lib'
make[3]: *** [Makefile:2798: check] Error 2
make[3]: Leaving directory '/<<PKGBUILDDIR>>/src/lib'
make[2]: *** [Makefile:563: check-recursive] Error 1
make[2]: Leaving directory '/<<PKGBUILDDIR>>/src'
make[1]: *** [Makefile:681: check-recursive] Error 1
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
dh_auto_test: error: make -j4 check VERBOSE=1 returned exit code 2
make: *** [debian/rules:79: build-arch] Error 25
dpkg-buildpackage: error: debian/rules build-arch subprocess returned exit 
status 2

The specific failing test is:

static void test_backtrace_get(void)
{
    test_begin("backtrace_get");
    const char *bt = NULL;
#if (defined(HAVE_LIBUNWIND))
        test_assert(backtrace_get(&bt) == 0);
    /* Check that there's a usable function in the backtrace.
       Note that this function may be inlined, so don't check for
       test_backtrace_get() */
        test_assert(strstr(bt, "test_backtrace") != NULL);
    /* make sure the backtrace_get is not */
    test_assert(strstr(bt, " backtrace_get") == NULL);
#elif (defined(HAVE_BACKTRACE_SYMBOLS) && defined(HAVE_EXECINFO_H)) || \
      (defined(HAVE_WALKCONTEXT) && defined(HAVE_UCONTEXT_H))
    test_assert(backtrace_get(&bt) == 0);
    /* it should have some kind of main in it */
    test_assert(strstr(bt, "main") != NULL);
#else
    /* should not work in this context */
    test_assert(backtrace_get(&bt) == -1);
#endif
    test_end();
}

The assertion failure and segfault happen in the second conditional
preprocessor block.  Do we execute the first block on systems where this
passes?  I wonder if backtrace_get() works at all in the second case?

Reply via email to