nixpkgs/pkgs/os-specific/linux/bluez/default.nix
Josef Kemetmüller bebbeb1918 bluez: Disable kernel dependent test-mesh-crypto
I'm having trouble building bluez on a CentOS 7.9 builder.
Turns out that the test-mesh-crypto test depends on the following Linux
kernel configuration items:
CONFIG_CRYPTO_[USER|USER_API|USER_API_AEAD|USER_API_HASH|AES|CCM|AEAD|CMAC]
and will fail if run wih an incompatible kernel with the following error
message:

    ...
    IVindex              = 12345678
    NetworkNonce         = 00800000011201000012345678
                           00800000011201000012345678 => PASS
    PrivacyRandom        = 000000000012345678b5e5bfdacbaf6c
                           000000000012345678fffd034b50057e => FAIL
    FAIL unit/test-mesh-crypto (exit status: 1)

I found the same bug reported on Gentoo https://bugs.gentoo.org/704190.
Their fix is to only run the test if the kernel options are available,
which we don't want to do for build reproducibility.
Instead we just want to skip the test unconditionally. As it's simpler
to completely override the test instead of patching the build system, we
opt for doing just that.

(cherry picked from commit 05c517698dcf6a989e364863cf5e7f6f548dd50a)
2021-09-02 18:02:37 +00:00

128 lines
3.4 KiB
Nix

{ stdenv
, lib
, fetchurl
, alsaLib
, dbus
, glib
, json_c
, libical
, pkg-config
, python3
, readline
, systemd
, udev
}: let
pythonPath = with python3.pkgs; [
dbus-python
pygobject3
recursivePthLoader
];
in stdenv.mkDerivation rec {
pname = "bluez";
version = "5.58";
src = fetchurl {
url = "mirror://kernel/linux/bluetooth/${pname}-${version}.tar.xz";
sha256 = "1wgiv8cqya6n1w5fz24cb8q401bhn5aa6s7g95l26rzblmsmw1n8";
};
buildInputs = [
alsaLib
dbus
glib
json_c
libical
python3
readline
udev
];
nativeBuildInputs = [
pkg-config
python3.pkgs.wrapPython
];
outputs = [ "out" "dev" ] ++ lib.optional doCheck "test";
postPatch = ''
substituteInPlace tools/hid2hci.rules \
--replace /sbin/udevadm ${systemd}/bin/udevadm \
--replace "hid2hci " "$out/lib/udev/hid2hci "
# Disable some tests:
# - test-mesh-crypto depends on the following kernel settings:
# CONFIG_CRYPTO_[USER|USER_API|USER_API_AEAD|USER_API_HASH|AES|CCM|AEAD|CMAC]
if [[ ! -f unit/test-mesh-crypto.c ]]; then echo "unit/test-mesh-crypto.c no longer exists"; false; fi
echo 'int main() { return 77; }' > unit/test-mesh-crypto.c
'';
configureFlags = [
"--localstatedir=/var"
"--enable-library"
"--enable-cups"
"--enable-pie"
"--with-dbusconfdir=${placeholder "out"}/share"
"--with-dbussystembusdir=${placeholder "out"}/share/dbus-1/system-services"
"--with-dbussessionbusdir=${placeholder "out"}/share/dbus-1/services"
"--with-systemdsystemunitdir=${placeholder "out"}/etc/systemd/system"
"--with-systemduserunitdir=${placeholder "out"}/etc/systemd/user"
"--with-udevdir=${placeholder "out"}/lib/udev"
"--enable-health"
"--enable-mesh"
"--enable-midi"
"--enable-nfc"
"--enable-sap"
"--enable-sixaxis"
"--enable-wiimote"
];
# Work around `make install' trying to create /var/lib/bluetooth.
installFlags = [ "statedir=$(TMPDIR)/var/lib/bluetooth" ];
makeFlags = [ "rulesdir=${placeholder "out"}/lib/udev/rules.d" ];
doCheck = stdenv.hostPlatform.isx86_64;
postInstall = lib.optionalString doCheck ''
mkdir -p $test/{bin,test}
cp -a test $test
pushd $test/test
for a in \
simple-agent \
test-adapter \
test-device \
test-thermometer \
list-devices \
monitor-bluetooth \
; do
ln -s ../test/$a $test/bin/bluez-$a
done
popd
wrapPythonProgramsIn $test/test "$test/test ${toString pythonPath}"
'' + ''
# for bluez4 compatibility for NixOS
mkdir $out/sbin
ln -s ../libexec/bluetooth/bluetoothd $out/sbin/bluetoothd
ln -s ../libexec/bluetooth/obexd $out/sbin/obexd
# Add extra configuration
mkdir $out/etc/bluetooth
ln -s /etc/bluetooth/main.conf $out/etc/bluetooth/main.conf
# Add missing tools, ref https://git.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/bluez
for files in `find tools/ -type f -perm -755`; do
filename=$(basename $files)
install -Dm755 tools/$filename $out/bin/$filename
done
'';
enableParallelBuilding = true;
meta = with lib; {
description = "Bluetooth support for Linux";
homepage = "http://www.bluez.org/";
license = with licenses; [ gpl2 lgpl21 ];
platforms = platforms.linux;
repositories.git = "https://git.kernel.org/pub/scm/bluetooth/bluez.git";
};
}