1# This function builds an RPM from a source tarball that contains a
2# RPM spec file (i.e., one that can be built using `rpmbuild -ta').
3
4{
5 name ? "rpm-build",
6 diskImage,
7 src,
8 lib,
9 vmTools,
10 ...
11}@args:
12
13vmTools.buildRPM (
14
15 removeAttrs args [ "vmTools" ]
16 //
17
18 {
19 name = name + "-" + diskImage.name + (lib.optionalString (src ? version) "-${src.version}");
20
21 preBuild = ''
22 . ${./functions.sh}
23 propagateImageName
24 src=$(findTarball $src)
25 '';
26
27 postInstall = ''
28 declare -a rpms rpmNames
29 for i in $out/rpms/*/*.rpm; do
30 if echo $i | grep -vq "\.src\.rpm$"; then
31 echo "file rpm $i" >> $out/nix-support/hydra-build-products
32 rpms+=($i)
33 rpmNames+=("$(rpm -qp "$i")")
34 fi
35 done
36
37 echo "installing ''${rpms[*]}..."
38 rpm -Up ''${rpms[*]} --excludepath /nix/store
39
40 eval "$postRPMInstall"
41
42 echo "uninstalling ''${rpmNames[*]}..."
43 rpm -e ''${rpmNames[*]} --nodeps
44
45 for i in $out/rpms/*/*.src.rpm; do
46 echo "file srpm $i" >> $out/nix-support/hydra-build-products
47 done
48
49 for rpmdir in $extraRPMs ; do
50 echo "file rpm-extra $(ls $rpmdir/rpms/*/*.rpm | grep -v 'src\.rpm' | sort | head -1)" >> $out/nix-support/hydra-build-products
51 done
52 '';
53
54 meta = (lib.optionalAttrs (args ? meta) args.meta) // {
55 description = "RPM package for ${diskImage.fullName}";
56 };
57 }
58
59)