ocamlPackages.mirage-xen: init at 6.0.0

Unfortunately this requires a bit of trickery with pkg-config to get to
work. The root issue is that the mirage-xen assumes that we use the
default libdir of dune ($out/lib) whereas we install to an OCaml
version-specific site-lib directory. Thus the manually created
pkg-config file makes wrong assumptions (which warrants a patch) and the
.pc file is installed to the wrong location (which is fixed with a mv
invocation).
This commit is contained in:
sternenseemann 2021-03-29 21:03:38 +02:00
parent b5f7ed7cc8
commit 980a2bed3b
4 changed files with 105 additions and 0 deletions

View file

@ -0,0 +1,78 @@
{ lib
, buildDunePackage
, fetchurl
, pkg-config
, cstruct
, lwt
, shared-memory-ring-lwt
, xenstore
, lwt-dllist
, mirage-profile
, mirage-runtime
, logs
, fmt
, ocaml-freestanding
, bheap
, duration
, io-page
}:
buildDunePackage rec {
pname = "mirage-xen";
version = "6.0.0";
useDune2 = true;
src = fetchurl {
url = "https://github.com/mirage/mirage-xen/releases/download/v${version}/mirage-xen-v${version}.tbz";
sha256 = "f991e972059b27993c287ad010d9281fee061efaa1dd475d0955179f93710fbd";
};
patches = [
./makefile-no-opam.patch
./pkg-config.patch
];
# can't handle OCAMLFIND_DESTDIR with substituteAll
postPatch = ''
substituteInPlace lib/bindings/mirage-xen.pc \
--replace "@out@" "$out" \
--replace "@OCAMLFIND_DESTDIR@" "$OCAMLFIND_DESTDIR"
'';
minimumOCamlVersion = "4.08";
nativeBuildInputs = [
pkg-config
];
propagatedBuildInputs = [
cstruct
lwt
shared-memory-ring-lwt
xenstore
lwt-dllist
mirage-profile
mirage-runtime
io-page
logs
fmt
bheap
duration
(ocaml-freestanding.override { target = "xen"; })
];
# Move pkg-config files into their well-known location.
# This saves us an extra setup hook and causes no issues
# since we patch all relative paths out of the .pc file.
postInstall = ''
mv $OCAMLFIND_DESTDIR/pkgconfig $out/lib/pkgconfig
'';
meta = with lib; {
description = "Xen core platform libraries for MirageOS";
license = licenses.isc;
maintainers = [ maintainers.sternenseemann ];
homepage = "https://github.com/mirage/mirage-xen";
};
}

View file

@ -0,0 +1,12 @@
diff --git a/lib/bindings/Makefile b/lib/bindings/Makefile
index 4e413c0..67c7bdc 100644
--- a/lib/bindings/Makefile
+++ b/lib/bindings/Makefile
@@ -1,4 +1,6 @@
-PKG_CONFIG_PATH := $(shell opam config var prefix)/lib/pkgconfig
+ifneq (, $(shell command -v opam))
+ PKG_CONFIG_PATH ?= $(shell opam config var prefix)/lib/pkgconfig
+endif
CC ?= cc
FREESTANDING_CFLAGS := $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --cflags ocaml-freestanding)

View file

@ -0,0 +1,13 @@
diff --git a/lib/bindings/mirage-xen.pc b/lib/bindings/mirage-xen.pc
index a03a217..8499aa4 100644
--- a/lib/bindings/mirage-xen.pc
+++ b/lib/bindings/mirage-xen.pc
@@ -1,6 +1,6 @@
-prefix=${pcfiledir}/../..
+prefix=@out@
exec_prefix=${prefix}
-libdir=${exec_prefix}/lib
+libdir=@OCAMLFIND_DESTDIR@
Name: mirage-xen
Version: 6.0.0

View file

@ -739,6 +739,8 @@ let
mirage-unix = callPackage ../development/ocaml-modules/mirage-unix { };
mirage-xen = callPackage ../development/ocaml-modules/mirage-xen { };
mirage-vnetif = callPackage ../development/ocaml-modules/mirage-vnetif { };
mlgmp = callPackage ../development/ocaml-modules/mlgmp { };