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?