mini-calc: 3.3.3 -> 3.3.5 (#372274)
[NixPkgs.git] / pkgs / by-name / li / libguestfs / package.nix
blob78fc77e247371959b5acd9263a0c7ff67cade638
2   lib,
3   stdenv,
4   fetchurl,
5   pkg-config,
6   autoreconfHook,
7   makeWrapper,
8   removeReferencesTo,
9   libxcrypt,
10   ncurses,
11   cpio,
12   gperf,
13   cdrkit,
14   flex,
15   bison,
16   qemu,
17   pcre2,
18   augeas,
19   libxml2,
20   acl,
21   libcap,
22   libcap_ng,
23   libconfig,
24   systemdLibs,
25   fuse,
26   yajl,
27   libvirt,
28   hivex,
29   db,
30   gmp,
31   readline,
32   file,
33   numactl,
34   libapparmor,
35   jansson,
36   getopt,
37   perlPackages,
38   ocamlPackages,
39   libtirpc,
40   appliance ? null,
41   javaSupport ? false,
42   jdk,
43   zstd,
46 assert appliance == null || lib.isDerivation appliance;
48 stdenv.mkDerivation (finalAttrs: {
49   pname = "libguestfs";
51   version = "1.54.0";
53   src = fetchurl {
54     url = "https://libguestfs.org/download/${lib.versions.majorMinor finalAttrs.version}-stable/${finalAttrs.pname}-${finalAttrs.version}.tar.gz";
55     sha256 = "sha256-tK+g+P1YAgXqVUjUaLxuQ8O+y5leL2DmMmVSemMFQkY=";
56   };
58   strictDeps = true;
59   nativeBuildInputs =
60     [
61       autoreconfHook
62       removeReferencesTo
63       bison
64       cdrkit
65       cpio
66       flex
67       getopt
68       gperf
69       makeWrapper
70       pkg-config
71       qemu
72       zstd
73     ]
74     ++ (with perlPackages; [
75       perl
76       libintl-perl
77       GetoptLong
78       ModuleBuild
79     ])
80     ++ (with ocamlPackages; [
81       ocaml
82       findlib
83     ]);
84   buildInputs = [
85     libxcrypt
86     ncurses
87     jansson
88     pcre2
89     augeas
90     libxml2
91     acl
92     libcap
93     libcap_ng
94     libconfig
95     systemdLibs
96     fuse
97     yajl
98     libvirt
99     gmp
100     readline
101     file
102     hivex
103     db
104     numactl
105     libapparmor
106     perlPackages.ModuleBuild
107     libtirpc
108     zstd
109     ocamlPackages.ocamlbuild
110     ocamlPackages.ocaml_libvirt
111     ocamlPackages.ounit
112     ocamlPackages.augeas
113     ocamlPackages.ocamlbuild
114   ] ++ lib.optional javaSupport jdk;
116   prePatch = ''
117     patchShebangs .
118   '';
119   configureFlags = [
120     "--enable-daemon"
121     "--enable-install-daemon"
122     "--disable-appliance"
123     "--with-distro=NixOS"
124     "--with-readline"
125     "CPPFLAGS=-I${lib.getDev libxml2}/include/libxml2"
126     "INSTALL_OCAMLLIB=${placeholder "out"}/lib/ocaml"
127     "--with-guestfs-path=${placeholder "out"}/lib/guestfs"
128   ] ++ lib.optionals (!javaSupport) [ "--without-java" ];
130   patches = [
131     ./libguestfs-syms.patch
132     # Fixes PERL Sys-Guestfs build failure
133     ./Revert-perl-Pass-CFLAGS-through-extra_linker_flags.patch
134   ];
136   createFindlibDestdir = true;
138   installFlags = [ "REALLY_INSTALL=yes" ];
139   enableParallelBuilding = true;
141   outputs = [
142     "out"
143     "guestfsd"
144   ];
146   postInstall = ''
147     # move guestfsd (the component running in the appliance) to a separate output
148     mkdir -p $guestfsd/bin
149     mv $out/sbin/guestfsd $guestfsd/bin/guestfsd
150     remove-references-to -t $out $guestfsd/bin/guestfsd
152     mv "$out/lib/ocaml/guestfs" "$OCAMLFIND_DESTDIR/guestfs"
153     for bin in $out/bin/*; do
154       wrapProgram "$bin" \
155         --prefix PATH     : "$out/bin:${hivex}/bin:${qemu}/bin" \
156         --prefix PERL5LIB : "$out/${perlPackages.perl.libPrefix}"
157     done
158   '';
160   postFixup = lib.optionalString (appliance != null) ''
161     mkdir -p $out/{lib,lib64}
162     ln -s ${appliance} $out/lib64/guestfs
163     ln -s ${appliance} $out/lib/guestfs
164   '';
166   doInstallCheck = appliance != null;
167   installCheckPhase = ''
168     runHook preInstallCheck
170     export HOME=$(mktemp -d) # avoid access to /homeless-shelter/.guestfish
172     ${qemu}/bin/qemu-img create -f qcow2 disk1.img 10G
174     $out/bin/guestfish <<'EOF'
175     add-drive disk1.img
176     run
177     list-filesystems
178     part-disk /dev/sda mbr
179     mkfs ext2 /dev/sda1
180     list-filesystems
181     EOF
183     runHook postInstallCheck
184   '';
186   meta = {
187     description = "Tools for accessing and modifying virtual machine disk images";
188     license = with lib.licenses; [
189       gpl2Plus
190       lgpl21Plus
191     ];
192     homepage = "https://libguestfs.org/";
193     maintainers = with lib.maintainers; [
194       offline
195       lukts30
196     ];
197     platforms = lib.platforms.linux;
198     # this is to avoid "output size exceeded"
199     hydraPlatforms = if appliance != null then appliance.meta.hydraPlatforms else lib.platforms.linux;
200   };