There are probably multiple issues but this one was hit as part of bug #317635 in which clamav fails to build on a ulibc system because it bundles llvm. This issue is due to a redefinition of error_t. Fixing it is sufficient to fix llvm buils for clamav but may not be sufficient for llvm upstream. Here is the last few lines of the build failure: llvm[1]: Compiling DynamicLibrary.cpp for Release build if x86_64-gentoo-linux-uclibc-g++ -I/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/include -I/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/lib/Support -DNDEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -fvisibility-inlines-hidden -fno-exceptions -fPIC -Woverloaded-virtual -Wcast-qual -O2 -pipe -I/usr/lib/libffi-3.0.11/include -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/lib/Support/Release/DynamicLibrary.d.tmp" -MT "/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/lib/Support/Release/DynamicLibrary.o" -MT "/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/lib/Support/Release/DynamicLibrary.d" DynamicLibrary.cpp -o /var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/lib/Support/Release/DynamicLibrary.o ; \ then /bin/mv -f "/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/lib/Support/Release/DynamicLibrary.d.tmp" "/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/lib/Support/Release/DynamicLibrary.d"; else /bin/rm "/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/lib/Support/Release/DynamicLibrary.d.tmp"; exit 1; fi llvm[1]: Compiling Errno.cpp for Release build if x86_64-gentoo-linux-uclibc-g++ -I/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/include -I/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/lib/Support -DNDEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -fvisibility-inlines-hidden -fno-exceptions -fPIC -Woverloaded-virtual -Wcast-qual -O2 -pipe -I/usr/lib/libffi-3.0.11/include -Wall -W -Wno-unused-parameter -Wwrite-strings -c -MMD -MP -MF "/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/lib/Support/Release/Errno.d.tmp" -MT "/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/lib/Support/Release/Errno.o" -MT "/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/lib/Support/Release/Errno.d" Errno.cpp -o /var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/lib/Support/Release/Errno.o ; \ then /bin/mv -f "/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/lib/Support/Release/Errno.d.tmp" "/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/lib/Support/Release/Errno.d"; else /bin/rm "/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/lib/Support/Release/Errno.d.tmp"; exit 1; fi In file included from Errno.cpp:22:0: /usr/include/errno.h:70:13: error: multiple types in one declaration /usr/include/errno.h:70:13: error: declaration does not declare anything [-fpermissive] /bin/rm: cannot remove '/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/lib/Support/Release/Errno.d.tmp': No such file or directory make[1]: *** [/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/lib/Support/Release/Errno.o] Error 1 make[1]: *** Waiting for unfinished jobs.... make[1]: Leaving directory `/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src/lib/Support' make: *** [all] Error 1 * ERROR: sys-devel/llvm-3.2_rc2 failed (compile phase): * emake failed * * If you need support, post the output of `emerge --info '=sys-devel/llvm-3.2_rc2'`, * the complete build log and the output of `emerge -pqv '=sys-devel/llvm-3.2_rc2'`. * The complete build log is located at '/var/tmp/portage/sys-devel/llvm-3.2_rc2/temp/build.log'. * The ebuild environment file is located at '/var/tmp/portage/sys-devel/llvm-3.2_rc2/temp/environment'. * Working directory: '/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src' * S: '/var/tmp/portage/sys-devel/llvm-3.2_rc2/work/llvm.src' Reproducible: Always
Here's an analysis of the problem using llvm-3.2_rc2. This comes with llvm.src/autoconf/m4/ltdl.m4 with versioning # serial 7 AC_LIB_LTDL Note that the most current version shipping with libtools is # serial 18 LTDL_INIT The older ltdl.m4 (but not the newer one) defines # AC_LTDL_FUNC_ARGZ # ----------------- AC_DEFUN([AC_LTDL_FUNC_ARGZ], [AC_CHECK_HEADERS([argz.h]) AC_CHECK_TYPES([error_t], [], [AC_DEFINE([error_t], [int], [Define to a type to use for `error_t' if it is not otherwise available.])], [#if HAVE_ARGZ_H # include <argz.h> #endif]) AC_CHECK_FUNCS([argz_append argz_create_sep argz_insert argz_next argz_stringify]) ])# AC_LTDL_FUNC_ARGZ which assumes that error_t is provided by argz.h which is not present on a uclibc system. There error_t is provided by errno.h when #define _GNU_SOURCE. So the suggested fix is (thanks for the help Diego!) # AC_LTDL_FUNC_ARGZ # ----------------- AC_DEFUN([AC_LTDL_FUNC_ARGZ], [AC_CHECK_HEADERS([argz.h errno.h]) AC_CHECK_TYPES([error_t], [], [AC_DEFINE([error_t], [int], [Define to a type to use for `error_t' if it is not otherwise available.])], [#if HAVE_ARGZ_H # include <argz.h> #endif #if HAVE_ERRNO_H # define _GNU_SOURCE # include <errno.h> #endif]) AC_CHECK_FUNCS([argz_append argz_create_sep argz_insert argz_next argz_stringify]) ])# AC_LTDL_FUNC_ARGZ and then pushed through their build system. However, llvm should probably seriously consider updating their build system, as even "pushing this through" requires ancient autotools.
@Diego, notice I had to #define _GNU_SOURCE in the includes for AC_CHECK_TYPES. Is that okay?
I'm sorry but this one is ancient and I don't have any uclibc around to play with. If you have issues with the current versions, please let me know -- but you'll probably need a patch ;-).