mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-11 16:23:26 +00:00
ff1a94e523
The nixpkgs-unstable channel's programs.sqlite was used to identify packages producing exactly one binary, and these automatically added to their package definitions wherever possible.
69 lines
2.2 KiB
Nix
69 lines
2.2 KiB
Nix
{ lib, stdenv, fetchurl, bash, flex, bison, valgrind }:
|
|
|
|
stdenv.mkDerivation rec {
|
|
pname = "lockdep";
|
|
|
|
# it would be nice to be able to pick a kernel version in sync with something
|
|
# else we already ship, but it seems userspace lockdep isn't very well maintained
|
|
# and appears broken in many kernel releases
|
|
version = "5.0.21";
|
|
fullver = "5.0.21";
|
|
src = fetchurl {
|
|
url = "mirror://kernel/linux/kernel/v5.x/linux-${version}.tar.xz";
|
|
sha256 = "1my2m9hvnvdrvzcg0fgqgaga59y2cd5zlpv7xrfj2nn98sjhglwq";
|
|
};
|
|
|
|
# ensure *this* kernel's userspace-headers are picked up before we
|
|
# fall back to those in glibc, as they will be from a mismatched
|
|
# kernel version
|
|
postPatch = ''
|
|
substituteInPlace tools/lib/lockdep/Makefile \
|
|
--replace 'CONFIG_INCLUDES =' $'CONFIG_INCLUDES = -I../../../usr/include\n#'
|
|
'';
|
|
|
|
nativeBuildInputs = [ flex bison ];
|
|
|
|
# Workaround build failure on -fno-common toolchains like upstream
|
|
# gcc-10. Otherwise build fails as:
|
|
# ld: lockdep.o:/build/linux-5.0.21/tools/lib/lockdep/../../include/linux/rcu.h:5: multiple definition of
|
|
# `rcu_scheduler_active'; common.o:/build/linux-5.0.21/tools/lib/lockdep/../../include/linux/rcu.h:5: first defined here
|
|
env.NIX_CFLAGS_COMPILE = "-fcommon";
|
|
|
|
buildPhase = ''
|
|
make defconfig
|
|
make headers_install
|
|
cd tools/lib/lockdep
|
|
make
|
|
'';
|
|
|
|
doCheck = true;
|
|
nativeCheckInputs = [ valgrind ];
|
|
checkPhase = ''
|
|
# there are more /bin/bash references than just shebangs
|
|
for f in lockdep run_tests.sh tests/*.sh; do
|
|
substituteInPlace $f \
|
|
--replace '/bin/bash' '${bash}/bin/bash'
|
|
done
|
|
|
|
./run_tests.sh
|
|
'';
|
|
|
|
installPhase = ''
|
|
mkdir -p $out/bin $out/lib $out/include
|
|
|
|
cp -R include/liblockdep $out/include
|
|
make install DESTDIR=$out prefix=""
|
|
|
|
substituteInPlace $out/bin/lockdep --replace "./liblockdep.so" "$out/lib/liblockdep.so.$fullver"
|
|
'';
|
|
|
|
meta = {
|
|
description = "Userspace locking validation tool built on the Linux kernel";
|
|
mainProgram = "lockdep";
|
|
homepage = "https://kernel.org/";
|
|
license = lib.licenses.gpl2;
|
|
platforms = lib.platforms.linux;
|
|
maintainers = [ lib.maintainers.thoughtpolice ];
|
|
};
|
|
}
|