nixpkgs/pkgs/os-specific/linux/lvm2/common.nix
Alyssa Ross 05a6c124e6 lvm2: don't use targetPlatform
targetPlatform is the platform the current package's programs will
produce binaries for — only relevant for compilers and
similar. hostPlatform is the platform the current package's programs
will run on.

The incorrect use of targetPlatform meant that anything that tried to
link to it (like cryptsetup) would fail to build when it was used as a
native build input for a cross-compiled Musl derivation.

Fixes: 2cc29125a7 ("lvm2: package 2.02.x for musl")
2022-03-29 12:14:16 +00:00

147 lines
4.7 KiB
Nix

{ version, sha256 }:
{ lib, stdenv
, fetchpatch
, fetchurl
, pkg-config
, util-linux
, libuuid
, libaio
, enableCmdlib ? false
, enableDmeventd ? false
, udevSupport ? !stdenv.hostPlatform.isStatic, udev ? null
, onlyLib ? stdenv.hostPlatform.isStatic
, nixosTests
}:
# configure: error: --enable-dmeventd requires --enable-cmdlib to be used as well
assert enableDmeventd -> enableCmdlib;
stdenv.mkDerivation rec {
pname = "lvm2" + lib.optionalString enableDmeventd "-with-dmeventd";
inherit version;
src = fetchurl {
url = "https://mirrors.kernel.org/sourceware/lvm2/LVM2.${version}.tgz";
inherit sha256;
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [
libaio
] ++ lib.optionals udevSupport [
udev
] ++ lib.optionals (!onlyLib) [
libuuid
];
configureFlags = [
"--disable-readline"
"--enable-pkgconfig"
"--with-default-locking-dir=/run/lock/lvm"
"--with-default-run-dir=/run/lvm"
"--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
] ++ lib.optionals (!enableCmdlib) [
"--bindir=${placeholder "bin"}/bin"
"--sbindir=${placeholder "bin"}/bin"
"--libdir=${placeholder "lib"}/lib"
] ++ lib.optional enableCmdlib "--enable-cmdlib"
++ lib.optionals enableDmeventd [
"--enable-dmeventd"
"--with-dmeventd-pidfile=/run/dmeventd/pid"
"--with-default-dm-run-dir=/run/dmeventd"
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
"ac_cv_func_malloc_0_nonnull=yes"
"ac_cv_func_realloc_0_nonnull=yes"
] ++ lib.optionals udevSupport [
"--enable-udev_rules"
"--enable-udev_sync"
] ++ lib.optionals stdenv.hostPlatform.isStatic [
"--enable-static_link"
];
preConfigure = ''
sed -i /DEFAULT_SYS_DIR/d Makefile.in
sed -i /DEFAULT_PROFILE_DIR/d conf/Makefile.in
'' + lib.optionalString (lib.versionOlder version "2.03.15") ''
substituteInPlace scripts/lvm2_activation_generator_systemd_red_hat.c \
--replace /usr/bin/udevadm /run/current-system/systemd/bin/udevadm
# https://github.com/lvmteam/lvm2/issues/36
'' + lib.optionalString (lib.versionOlder version "2.03.14") ''
substituteInPlace udev/69-dm-lvm-metad.rules.in \
--replace "(BINDIR)/systemd-run" /run/current-system/systemd/bin/systemd-run
'' + lib.optionalString (lib.versionAtLeast version "2.03.14") ''
substituteInPlace udev/69-dm-lvm.rules.in \
--replace "/usr/bin/systemd-run" /run/current-system/systemd/bin/systemd-run
'' + ''
substituteInPlace make.tmpl.in --replace "@systemdsystemunitdir@" "$out/lib/systemd/system"
'' + lib.optionalString (lib.versionAtLeast version "2.03") ''
substituteInPlace libdm/make.tmpl.in --replace "@systemdsystemunitdir@" "$out/lib/systemd/system"
'';
postConfigure = ''
sed -i 's|^#define LVM_CONFIGURE_LINE.*$|#define LVM_CONFIGURE_LINE "<removed>"|g' ./include/configure.h
'';
patches = lib.optionals (lib.versionOlder version "2.03.15") [
# Musl fixes from Alpine.
./fix-stdio-usage.patch
(fetchpatch {
name = "mallinfo.patch";
url = "https://git.alpinelinux.org/aports/plain/main/lvm2/mallinfo.patch?h=3.7-stable&id=31bd4a8c2dc00ae79a821f6fe0ad2f23e1534f50";
sha256 = "0g6wlqi215i5s30bnbkn8w7axrs27y3bnygbpbnf64wwx7rxxlj0";
})
] ++ lib.optionals stdenv.hostPlatform.isStatic [
./no-shared.diff
];
doCheck = false; # requires root
makeFlags = lib.optionals udevSupport [
"SYSTEMD_GENERATOR_DIR=$(out)/lib/systemd/system-generators"
] ++ lib.optionals onlyLib [
"libdm.device-mapper"
];
# To prevent make install from failing.
installFlags = [ "OWNER=" "GROUP=" "confdir=$(out)/etc" ];
# Install systemd stuff.
installTargets = [ "install" ] ++ lib.optionals udevSupport [
"install_systemd_generators"
"install_systemd_units"
"install_tmpfiles_configuration"
];
installPhase = lib.optionalString onlyLib ''
install -D -t $out/lib libdm/ioctl/libdevmapper.${if stdenv.hostPlatform.isStatic then "a" else "so"}
make -C libdm install_include
make -C libdm install_pkgconfig
'';
# only split bin and lib out from out if cmdlib isn't enabled
outputs = [
"out"
] ++ lib.optionals (!onlyLib) [
"dev"
"man"
] ++ lib.optionals (!onlyLib && !enableCmdlib) [
"bin"
"lib"
];
postInstall = lib.optionalString (enableCmdlib != true) ''
moveToOutput lib/libdevmapper.so $lib
'';
passthru.tests.installer = nixosTests.installer.lvm;
meta = with lib; {
homepage = "http://sourceware.org/lvm2/";
description = "Tools to support Logical Volume Management (LVM) on Linux";
platforms = platforms.linux;
license = with licenses; [ gpl2 bsd2 lgpl21 ];
maintainers = with maintainers; [ raskin ajs124 ];
};
}