nixpkgs/pkgs/tools/misc/xfstests/default.nix
Jörg Thalheim dadc7eb329
treewide: use runtimeShell instead of stdenv.shell whenever possible
Whenever we create scripts that are installed to $out, we must use runtimeShell
in order to get the shell that can be executed on the machine we create the
package for. This is relevant for cross-compiling. The only use case for
stdenv.shell are scripts that are executed as part of the build system.
Usages in checkPhase are borderline however to decrease the likelyhood
of people copying the wrong examples, I decided to use runtimeShell as well.
2019-02-26 14:10:49 +00:00

108 lines
3.5 KiB
Nix

{ stdenv, acl, attr, autoconf, automake, bash, bc, coreutils, e2fsprogs
, fetchgit, fio, gawk, keyutils, killall, lib, libaio, libcap, libtool
, libuuid, libxfs, lvm2, openssl, perl, procps, quota
, time, utillinux, which, writeScript, xfsprogs, runtimeShell }:
stdenv.mkDerivation {
name = "xfstests-2018-04-11";
src = fetchgit {
url = "git://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git";
rev = "fdf6d4bc862bb3269c95986fdaf1c59271762ad6";
sha256 = "16j1kcmj0xq6s2qw4hll5r5cz7q4vbbsy2nh1g5aaq7xsl3h8mhb";
};
nativeBuildInputs = [
autoconf automake libtool
];
buildInputs = [
acl attr gawk libaio libuuid libxfs openssl perl
];
hardeningDisable = [ "format" ];
enableParallelBuilding = true;
patchPhase = ''
# Patch the destination directory
sed -i include/builddefs.in -e "s|^PKG_LIB_DIR\s*=.*|PKG_LIB_DIR=$out/lib/xfstests|"
# Don't canonicalize path to mkfs (in util-linux) - otherwise e.g. mkfs.ext4 isn't found
sed -i common/config -e 's|^export MKFS_PROG=.*|export MKFS_PROG=mkfs|'
# Move the Linux-specific test output files to the correct place, or else it will
# try to move them at runtime. Also nuke all the irix crap.
for f in tests/*/*.out.linux; do
mv $f $(echo $f | sed -e 's/\.linux$//')
done
rm -f tests/*/*.out.irix
# Fix up lots of impure paths
for f in common/* tools/* tests/*/*; do
sed -i $f -e 's|/bin/bash|${bash}/bin/bash|'
sed -i $f -e 's|/bin/true|true|'
sed -i $f -e 's|/usr/sbin/filefrag|${e2fsprogs}/bin/filefrag|'
sed -i $f -e 's|hostname -s|hostname|' # `hostname -s` seems problematic on NixOS
sed -i $f -e 's|$(_yp_active)|1|' # NixOS won't ever have Yellow Pages enabled
done
for f in src/*.c src/*.sh; do
sed -e 's|/bin/rm|${coreutils}/bin/rm|' -i $f
sed -e 's|/usr/bin/time|${time}/bin/time|' -i $f
done
patchShebangs .
'';
preConfigure = ''
# The configure scripts really don't like looking in PATH at all...
export AWK=$(type -P awk)
export ECHO=$(type -P echo)
export LIBTOOL=$(type -P libtool)
export MAKE=$(type -P make)
export SED=$(type -P sed)
export SORT=$(type -P sort)
make configure
'';
postInstall = ''
patchShebangs $out/lib/xfstests
mkdir -p $out/bin
substitute $wrapperScript $out/bin/xfstests-check --subst-var out
chmod a+x $out/bin/xfstests-check
'';
# The upstream package is pretty hostile to packaging; it looks up
# various paths relative to current working directory, and also
# wants to write temporary files there. So create a temporary
# to run from and symlink the runtime files to it.
wrapperScript = writeScript "xfstests-check" ''
#!${runtimeShell}
set -e
export RESULT_BASE="$(pwd)/results"
dir=$(mktemp --tmpdir -d xfstests.XXXXXX)
trap "rm -rf $dir" EXIT
chmod a+rx "$dir"
cd "$dir"
for f in $(cd @out@/lib/xfstests; echo *); do
ln -s @out@/lib/xfstests/$f $f
done
export PATH=${lib.makeBinPath [acl attr bc e2fsprogs fio gawk keyutils
libcap lvm2 perl procps killall quota
utillinux which xfsprogs]}:$PATH
exec ./check "$@"
'';
meta = with stdenv.lib; {
description = "Torture test suite for filesystems";
homepage = https://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git/;
license = licenses.gpl2;
maintainers = [ maintainers.dezgeg ];
platforms = platforms.linux;
};
}