[Buildroot] Adding package libgit2

Nicolas Cavallari nicolas.cavallari at green-communications.fr
Wed Feb 14 11:13:50 UTC 2018


While testing this package, there were lots of failures due to zlib-ng
and libressl, but none due to libgit2.  None of these failures appears
in the autobuilders.  Do they have trouble testing virtual packages ?

I tested this package using something like this script:

i=0
while true; do
	left=$i
	i=$((i+1))
	maybe () {
		local count=$#
		shift $((left % count))
		left=$((left / count))
		printf "%s\n" $1 | grep '.' || true
	}
	{
		printf '%s\n' BR2_PACKAGE_LIBGIT2=y
		maybe "" BR2_PACKAGE_LIBSSH=y
		maybe "" \
			"BR2_PACKAGE_LIBCURL=y" \
			"BR2_PACKAGE_LIBCURL=y BR2_PACKAGE_GNUTLS=y" \
			"BR2_PACKAGE_OPENSSL=y BR2_PACKAGE_LIBRESSL=y" \
			"BR2_PACKAGE_OPENSSL=y BR2_PACKAGE_LIBOPENSSL=y" \
		"BR2_PACKAGE_LIBCURL=y BR2_PACKAGE_OPENSSL=y BR2_PACKAGE_LIBRESSL=y" \
		"BR2_PACKAGE_LIBCURL=y BR2_PACKAGE_OPENSSL=y BR2_PACKAGE_LIBOPENSSL=y"
		maybe BR2_PACKAGE_LIBZLIB=y BR2_PACKAGE_ZLIB_NG=y
		[ "$left" != 0 ] && break
	} > test.config
	cat test.config
	./utils/test-pkg -c test.config -p libgit2 || exit 1
done | tee -a test-complete.log
echo "Summary (Legend:  . -> OK, s -> SKIPPED, F -> FAILED)"
sed -r -e '
:moreconf
/=y$/ {
	s/\n//
	s/BR2_PACKAGE_(.*)=y/,\1/
	s/^,/ /
	N
	b moreconf
}
:moreres
/: (FAILED|OK|SKIPPED)$/ {
	s/^(\S*) (\S+)\n.*: OK/\1. \2/
	s/^(\S*) (\S+)\n.*: FAILED/\1F \2/
	s/^(\S*) (\S+)\n.*: SKIPPED/\1s \2/
	N
	b moreres
}
s/\n.*//p
d
' test-complete.log


Summary (Legend:  . -> OK, s -> SKIPPED, F -> FAILED)
............................................... LIBGIT2,LIBZLIB
.......s.sss..s................................ LIBGIT2,LIBSSH,LIBZLIB
............................................... LIBGIT2,LIBCURL,LIBZLIB
.......s.sss..s................................ LIBGIT2,LIBSSH,LIBCURL,LIBZLIB
....s..s..s...s........s....................... LIBGIT2,LIBCURL,GNUTLS,LIBZLIB
....s..s.sss..s........s....................... LIBGIT2,LIBSSH,LIBCURL,GNUTLS,LIBZLIB
.......s.F.s..sFF.....F........................ LIBGIT2,OPENSSL,LIBRESSL,LIBZLIB
.......s.sss..sFF.....F........................ LIBGIT2,LIBSSH,OPENSSL,LIBRESSL,LIBZLIB
............................................... LIBGIT2,OPENSSL,LIBOPENSSL,LIBZLIB
.......s.sss..s................................ LIBGIT2,LIBSSH,OPENSSL,LIBOPENSSL,LIBZLIB
.......s.F.s..sFF.....F........................ LIBGIT2,LIBCURL,OPENSSL,LIBRESSL,LIBZLIB
.......s.sss..sFF.....F........................ LIBGIT2,LIBSSH,LIBCURL,OPENSSL,LIBRESSL,LIBZLIB
............................................... LIBGIT2,LIBCURL,OPENSSL,LIBOPENSSL,LIBZLIB
.......s.sss..s................................ LIBGIT2,LIBSSH,LIBCURL,OPENSSL,LIBOPENSSL,LIBZLIB
FFFF...F..FF..FFFFFFFFFFFFFFFF..F.F.FFFFFFFFF.. LIBGIT2,ZLIB_NG
FFFF...s.sss..sFFFFFFFFFFFFFFF..F.F.FFFFFFFFF.. LIBGIT2,LIBSSH,ZLIB_NG
FFFF...F..FF..FFFFFFFFFFFFFFFF..F.F.FFFFFFFFF.. LIBGIT2,LIBCURL,ZLIB_NG
FFFF...s.sss..sFFFFFFFFFFFFFFF..F.F.FFFFFFFFF.. LIBGIT2,LIBSSH,LIBCURL,ZLIB_NG
FFFFs..s..sF..sFFFFFFFFsFFFFFF..F.F.FFFFFFFFF.. LIBGIT2,LIBCURL,GNUTLS,ZLIB_NG
FFFFs..s.sss..sFFFFFFFFsFFFFFF..F.F.FFFFFFFFF.. LIBGIT2,LIBSSH,LIBCURL,GNUTLS,ZLIB_NG
FFFF...s.FFs..sFFFFFFFFFFFFFFF..F.F.FFFFFFFFF.. LIBGIT2,OPENSSL,LIBRESSL,ZLIB_NG
FFFF...s.sss..sFFFFFFFFFFFFFFF..F.F.FFFFFFFFF.. LIBGIT2,LIBSSH,OPENSSL,LIBRESSL,ZLIB_NG
FFFF...F..FF..FFFFFFFFFFFFFFFF..F.F.FFFFFFFFF.. LIBGIT2,OPENSSL,LIBOPENSSL,ZLIB_NG
FFFF...s.sss..sFFFFFFFFFFFFFFF..F.F.FFFFFFFFF.. LIBGIT2,LIBSSH,OPENSSL,LIBOPENSSL,ZLIB_NG
FFFF...s.FFs..sFFFFFFFFFFFFFFF..F.F.FFFFFFFFF.. LIBGIT2,LIBCURL,OPENSSL,LIBRESSL,ZLIB_NG
FFFF...s.sss..sFFFFFFFFFFFFFFF..F.F.FFFFFFFFF.. LIBGIT2,LIBSSH,LIBCURL,OPENSSL,LIBRESSL,ZLIB_NG
FFFF...F..FF..FFFFFFFFFFFFFFFF..F.F.FFFFFFFFF.. LIBGIT2,LIBCURL,OPENSSL,LIBOPENSSL,ZLIB_NG
FFFF...s.sss..sFFFFFFFFFFFFFFF..F.F.FFFFFFFFF.. LIBGIT2,LIBSSH,LIBCURL,OPENSSL,LIBOPENSSL,ZLIB_NG



I identified 6 different failure reasons:


1) zlib-ng (armv5-ctng-linux-gnueabi, armv7-ctng-linux-gnueabihf,
	    sourcery-arm-armv4t, sourcery-arm, sourcery-arm-thumb2)

-- The following features have been enabled:
[...]
 * WITH_ACLE , Build with ACLE CRC
 * WITH_NEON , Build with NEON intrinsics
 * ACLE_CRC , Support CRC hash generation using the ACLE instruction set, using "-march=armv8-a+crc"
 * NEON_FILLWINDOW , Support NEON instructions in fill_window_arm, using "-mfloat-abi=softfp -mfpu=neon"

[...]
armv5-ctng-linux-gnueabi-gcc: error: unrecognized argument in option '-march=armv8-a+crc'

This option apparently appeared with GCC 4.9.  Should i send a patch ?

2) zlib-ng (br-aarch64-glibc, linaro-aarch64)

-- The following features have been disabled:

 * WITH_ACLE , Build with ACLE CRC
 * WITH_NEON , Build with NEON intrinsics

-- Configuring done
[...]
[ 96%] Linking C executable minigzip64
libz.so.1.2.11.zlib-ng: undefined reference to `crc32_acle'
libz.so.1.2.11.zlib-ng: undefined reference to `adler32_neon'
libz.so.1.2.11.zlib-ng: undefined reference to `crc32_acle'
libz.so.1.2.11.zlib-ng: undefined reference to `adler32_neon'



3) zlib-ng (br-arm-full-static)
[ 86%] Linking C static library libz.a
/home/cavallar/br-test-pkg/br-arm-full-static/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libc.a(__uClibc_main.os): In function `__uClibc_fini':
__uClibc_main.c:(.text+0x164): undefined reference to `__fini_array_end'
__uClibc_main.c:(.text+0x168): undefined reference to `__fini_array_start'
__uClibc_main.c:(.text+0x16c): undefined reference to `__fini_array_start'
/home/cavallar/br-test-pkg/br-arm-full-static/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libc.a(__uClibc_main.os): In function `__uClibc_main':
__uClibc_main.c:(.text+0x59c): undefined reference to `__preinit_array_start'
__uClibc_main.c:(.text+0x5a0): undefined reference to `__preinit_array_end'
__uClibc_main.c:(.text+0x5a4): undefined reference to `__preinit_array_start'
__uClibc_main.c:(.text+0x5a8): undefined reference to `__init_array_start'
__uClibc_main.c:(.text+0x5ac): undefined reference to `__init_array_end'
__uClibc_main.c:(.text+0x5b0): undefined reference to `__init_array_start'
/home/cavallar/br-test-pkg/br-arm-full-static/host/opt/ext-toolchain/bin/../lib/gcc/arm-buildroot-linux-uclibcgnueabi/6.4.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: libz.so.1.2.11.zlib-ng: hidden symbol `__fini_array_end' isn't defined
/home/cavallar/br-test-pkg/br-arm-full-static/host/opt/ext-toolchain/bin/../lib/gcc/arm-buildroot-linux-uclibcgnueabi/6.4.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status

I don't know much about static linking.

4) zlib-ng (all other toolchains)

-- The following features have been enabled:
[...]
 * SSE2 , Support the SSE2 instruction set, using "-msse2"
[...]
/home/cavallar/br-test-pkg/br-arcle-hs38/build/zlib-ng-a17fefa147942edbf80ab22a16bcbc2419def12d/arch/x86/x86.c:17:10: fatal error: cpuid.h: No such file or directory
 #include <cpuid.h>
          ^~~~~~~~~
compilation terminated.


5) libressl (br-arm-full-nothread)
PATH="$HOME/br-test-pkg/br-arm-full-nothread/host/bin:$HOME/br-test-pkg/br-arm-full-nothread/host/sbin:$HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"  /usr/bin/make -j25  -C $HOME/br-test-pkg/br-arm-full-nothread/build/libressl-2.6.4/
Making all in crypto
/usr/bin/make  all-am
  CC       compat/arc4random.lo
In file included from compat/arc4random.h:16:0,
                 from compat/arc4random.c:66:
compat/arc4random_linux.h:28:21: fatal error: pthread.h: No such file or directory
 #include <pthread.h>
                     ^
compilation terminated.

Only this file seems to use locks.  It could be patched away, or
libressl could depends on threads, but i don't think kconfig will like
that?

6) libressl (br-microblazeel-full, br-m68k-68040-full, br-openrisc-uclibc)
Making all in ocspcheck
  CCLD     ocspcheck
/home/cavallar/br-test-pkg/br-m68k-68040-full/build/libressl-2.6.4/crypto/.libs/libcrypto.so: undefined reference to `__register_atfork'
collect2: error: ld returned 1 exit status

They have a MMU, but uclibc still doesn't provide __register_atfork() ?


More information about the buildroot mailing list