1{ stdenv, systemd, cryptsetup }:
2
3systemd.overrideAttrs (p: {
4 version = p.version;
5 name = "systemd-cryptsetup-generator-${p.version}";
6
7 buildInputs = p.buildInputs ++ [ cryptsetup ];
8 outputs = [ "out" ];
9
10 buildPhase = ''
11 ninja systemd-cryptsetup systemd-cryptsetup-generator
12 '';
13
14 # As ninja install is not used here, the rpath needs to be manually fixed.
15 # Otherwise the resulting binary doesn't properly link against systemd-shared.so
16 postFixup = ''
17 sharedLib=libsystemd-shared-${p.version}.so
18 for prog in `find $out -type f -executable`; do
19 (patchelf --print-needed $prog | grep $sharedLib > /dev/null) && (
20 patchelf --set-rpath `patchelf --print-rpath $prog`:"$out/lib/systemd" $prog
21 ) || true
22 done
23 '';
24
25 installPhase = ''
26 mkdir -p $out/lib/systemd/
27 cp systemd-cryptsetup $out/lib/systemd/systemd-cryptsetup
28 cp src/shared/*.so $out/lib/systemd/
29
30 mkdir -p $out/lib/systemd/system-generators/
31 cp systemd-cryptsetup-generator $out/lib/systemd/system-generators/systemd-cryptsetup-generator
32 '';
33})