V3 of the patch. Changes since last one:

 * Use ocamlvars.mk in the rules file to get OCAML_STDLIB_DIR and 
   OCAML_DLL_DIR and pass them into gencontrol.py on the command 
   line
 * Alter the fix-build patch to avoid hardcoding of 4.1
 * Minor change to gencontrol.py to make variables consistent

Jon
 
---
 xen/debian/bin/gencontrol.py                     |    7 ++
 xen/debian/patches/series                        |    1 +
 xen/debian/patches/tools-ocaml-fix-build.diff    |   81 ++++++++++++++++++++++
 xen/debian/rules                                 |    9 ++-
 xen/debian/rules.real                            |   34 +++++++++
 xen/debian/templates/control.main.in             |   16 ++++
 xen/debian/templates/control.source.in           |    5 +-
 xen/debian/templates/libxen-ocaml-dev.install.in |   25 +++++++
 xen/debian/templates/libxen-ocaml.install.in     |   14 ++++
 9 files changed, 189 insertions(+), 3 deletions(-)
 create mode 100644 xen/debian/patches/tools-ocaml-fix-build.diff
 create mode 100644 xen/debian/templates/libxen-ocaml-dev.install.in
 create mode 100644 xen/debian/templates/libxen-ocaml.install.in

diff --git a/xen/debian/bin/gencontrol.py b/xen/debian/bin/gencontrol.py
index f2b7424..2bdf5fb 100755
--- a/xen/debian/bin/gencontrol.py
+++ b/xen/debian/bin/gencontrol.py
@@ -49,6 +49,11 @@ class Gencontrol(Base):
             j = self.substitute(self.templates["xen-utils.%s" % i], vars)
             file("debian/%s.%s" % (package_utils_name, i), 'w').write(j)
 
+       for (i,j) in (('libxen-ocaml.install','libxen-%s-ocaml.install' % 
self.version.xen_version), 
+                     ('libxen-ocaml-dev.install','libxen-%s-ocaml-dev.install' 
% self.version.xen_version)):
+           k = self.substitute(self.templates[i], vars)
+           file("debian/%s" % j, 'w').write(k)
+
         cmds_binary_arch = ["$(MAKE) -f debian/rules.real binary-arch-arch %s" 
% makeflags]
         cmds_build = ["$(MAKE) -f debian/rules.real build-arch %s" % makeflags]
         cmds_setup = ["$(MAKE) -f debian/rules.real setup-arch %s" % makeflags]
@@ -105,6 +110,8 @@ class Gencontrol(Base):
         self.version = changelog[0].version
         self.vars = {
             'version': self.version.xen_version,
+            'ocaml_stdlib_dir': sys.argv[1], 
+            'ocaml_dll_dir': sys.argv[2],
         }
 
 if __name__ == '__main__':
diff --git a/xen/debian/patches/series b/xen/debian/patches/series
index 8f816da..a576794 100644
--- a/xen/debian/patches/series
+++ b/xen/debian/patches/series
@@ -57,3 +57,4 @@ tools-ocaml-fix-xc-dependencies.diff
 tools-ocaml-remove-uuid.diff
 tools-ocaml-remove-log.diff
 tools-ocaml-fix-xc.diff
+tools-ocaml-fix-build.diff
diff --git a/xen/debian/patches/tools-ocaml-fix-build.diff 
b/xen/debian/patches/tools-ocaml-fix-build.diff
new file mode 100644
index 0000000..48fa095
--- /dev/null
+++ b/xen/debian/patches/tools-ocaml-fix-build.diff
@@ -0,0 +1,81 @@
+Fix the build of the ocaml libraries 
+
+Signed-off-by: Jon Ludlam <jonathan.lud...@eu.citrix.com>
+
+--- a/tools/ocaml/Makefile.rules
++++ b/tools/ocaml/Makefile.rules
+@@ -58,14 +58,8 @@
+ 
+ # define a library target <name>.cmxa and <name>.cma
+ define OCAML_LIBRARY_template
+- $(1).cmxa: lib$(1)_stubs.a $(foreach obj,$($(1)_OBJS),$(obj).cmx)
+-      $(call mk-caml-lib-native,$$@, -cclib -l$(1)_stubs $(foreach 
lib,$(LIBS_$(1)),-cclib $(lib)), $(foreach obj,$($(1)_OBJS),$(obj).cmx))
+- $(1).cma: $(foreach obj,$($(1)_OBJS),$(obj).cmo)
+-      $(call mk-caml-lib-bytecode,$$@, -dllib dll$(1)_stubs.so -cclib 
-l$(1)_stubs, $$+)
+- $(1)_stubs.a: $(foreach obj,$$($(1)_C_OBJS),$(obj).o)
+-      $(call mk-caml-stubs,$$@, $$+)
+- lib$(1)_stubs.a: $(foreach obj,$($(1)_C_OBJS),$(obj).o)
+-      $(call mk-caml-lib-stubs,$$@, $$+, $(LIBS_$(1)))
++ $(1).cma: $(foreach obj,$($(1)_OBJS),$(obj).cmx $(obj).cmo) $(foreach 
obj,$($(1)_C_OBJS),$(obj).o)
++      $(OCAMLMKLIB) -o $1 -oc $(1)_stubs $(foreach 
obj,$($(1)_OBJS),$(obj).cmx $(obj).cmo) $(foreach obj,$($(1)_C_OBJS),$(obj).o) 
$(foreach lib, $(LIBS_$(1)_SYSTEM), -cclib $(lib)) $(foreach 
arg,$(LIBS_$(1)),-ldopt $(arg))
+ endef
+ 
+ define OCAML_NOC_LIBRARY_template
+--- a/tools/ocaml/libs/xc/Makefile
++++ b/tools/ocaml/libs/xc/Makefile
+@@ -9,7 +9,8 @@
+ INTF = xenctrl.cmi
+ LIBS = xenctrl.cma xenctrl.cmxa
+ 
+-LIBS_xenctrl = -L$(XEN_ROOT)/tools/libxc -lxenctrl -lxenguest
++LIBS_xenctrl = $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest)
++LIBS_xenctrl_SYSTEM = $(LDLIBS_libxenctrl_SYSTEM) $(LDLIBS_libxenguest_SYSTEM)
+ 
+ xenctrl_OBJS = $(OBJS)
+ xenctrl_C_OBJS = xenctrl_stubs
+--- a/tools/ocaml/xenstored/Makefile
++++ b/tools/ocaml/xenstored/Makefile
+@@ -36,7 +36,9 @@
+       -ccopt -L -ccopt $(OCAML_TOPLEVEL)/libs/eventchn 
$(OCAML_TOPLEVEL)/libs/eventchn/xeneventchn.cmxa \
+       -ccopt -L -ccopt $(OCAML_TOPLEVEL)/libs/xc 
$(OCAML_TOPLEVEL)/libs/xc/xenctrl.cmxa \
+       -ccopt -L -ccopt $(OCAML_TOPLEVEL)/libs/xb 
$(OCAML_TOPLEVEL)/libs/xb/xenbus.cmxa \
+-      -ccopt -L -ccopt $(XEN_ROOT)/tools/libxc
++      -ccopt -L -ccopt $(XEN_ROOT)/tools/libxc \
++      $(foreach obj, $(LDLIBS_libxenctrl), -ccopt $(obj)) \
++        $(foreach obj, $(LDLIBS_libxenguest), -ccopt $(obj))
+ 
+ PROGRAMS = oxenstored
+ 
+--- a/tools/ocaml/libs/eventchn/Makefile
++++ b/tools/ocaml/libs/eventchn/Makefile
+@@ -7,6 +7,7 @@
+ LIBS = xeneventchn.cma xeneventchn.cmxa
+ 
+ LIBS_xeneventchn = $(LDLIBS_libxenctrl)
++LIBS_xeneventchn_SYSTEM = $(LDLIBS_libxenctrl_SYSTEM)
+ 
+ all: $(INTF) $(LIBS) $(PROGRAMS)
+ 
+--- a/tools/Rules.mk
++++ b/tools/Rules.mk
+@@ -21,9 +21,11 @@
+ 
+ CFLAGS_libxenctrl = -I$(XEN_LIBXC) $(CFLAGS_include)
+ LDLIBS_libxenctrl = $(XEN_LIBXC)/libxenctrl-$(XEN_VERSION).so $(DLOPEN_LIBS)
++LDLIBS_libxenctrl_SYSTEM = -lxenctrl-$(XEN_VERSION)
+ 
+ CFLAGS_libxenguest = -I$(XEN_LIBXC) $(CFLAGS_include)
+ LDLIBS_libxenguest = $(XEN_LIBXC)/libxenguest-$(XEN_VERSION).so
++LDLIBS_libxenguest_SYSTEM = -lxenguest-$(XEN_VERSION)
+ 
+ CFLAGS_libxenstore = -I$(XEN_XENSTORE) $(CFLAGS_include)
+ LDLIBS_libxenstore = -L$(XEN_XENSTORE) -lxenstore
+@@ -58,7 +60,7 @@
+ LDFLAGS += $(shell getconf LFS_LDFLAGS)
+ endif
+ 
+-# Xen tools build is currently incompatible with ld --as-needed
++
+ LDFLAGS += -Wl,--no-as-needed
+ 
+ # 32-bit x86 does not perform well with -ve segment accesses on Xen.
diff --git a/xen/debian/rules b/xen/debian/rules
index aade4fb..9400592 100755
--- a/xen/debian/rules
+++ b/xen/debian/rules
@@ -14,6 +14,11 @@ VERSION_BINNMU := $(shell echo "$(VERSION)" | sed -ne 
's,.*\+b\(.*\)$$,\1,p')
 stamp = [ -d $(dir $@) ] || mkdir $(dir $@); touch $@
 
 include debian/rules.defs
+ifneq ($(wildcard /usr/share/ocaml/ocamlvars.mk),/usr/share/ocaml/ocamlvars.mk)
+  $(error /usr/share/ocaml/ocamlvars.mk not found - please install dh-ocaml)
+else
+  include /usr/share/ocaml/ocamlvars.mk
+endif
 
 setup: debian/control $(STAMPS_DIR)/setup-base
 $(STAMPS_DIR)/setup-base:
@@ -28,7 +33,7 @@ $(STAMPS_DIR)/build-base: $(STAMPS_DIR)/setup-base
        @$(stamp)
 
 maintainerclean:
-       rm -f debian/control* debian/rules.gen debian/xen-hypervisor-* 
debian/xen-utils-*
+       rm -f debian/control* debian/rules.gen debian/xen-hypervisor-* 
debian/xen-utils-* debian/libxen-*ocaml*.install
        rm -rf $(filter-out .svn debian, $(wildcard * .[^.]*))
 
 clean: debian/control
@@ -83,7 +88,7 @@ else
 endif
 
 debian/control-real: $(CONTROL_FILES)
-       debian/bin/gencontrol.py
+       debian/bin/gencontrol.py $(OCAML_STDLIB_DIR) $(OCAML_DLL_DIR)
        md5sum $^ > debian/control.md5sum
        @echo
        @echo This target is made to fail intentionally, to make sure
diff --git a/xen/debian/rules.real b/xen/debian/rules.real
index f4656f8..557fe8c 100644
--- a/xen/debian/rules.real
+++ b/xen/debian/rules.real
@@ -1,7 +1,11 @@
+include /usr/share/ocaml/ocamlvars.mk
+
 DEB_HOST_ARCH     := $(shell dpkg-architecture -a$(ARCH) -qDEB_HOST_ARCH)
 DEB_HOST_GNU_TYPE := $(shell dpkg-architecture -a$(ARCH) -qDEB_HOST_GNU_TYPE)
 DEB_BUILD_ARCH    := $(shell dpkg-architecture -a$(ARCH) -qDEB_BUILD_ARCH)
 
+GENCONTROL_ARGS   := -VF:OCamlABI="$(OCAML_ABI)"
+
 export DH_OPTIONS
 
 setup_env := env -u ARCH -u FLAVOUR -u VERSION -u MAKEFLAGS
@@ -18,6 +22,8 @@ binary-arch-arch: install-libxen-dev_$(ARCH)
 binary-arch-arch: install-libxenstore_$(ARCH)
 binary-arch-arch: install-utils_$(ARCH)
 binary-arch-arch: install-xenstore-utils_$(ARCH)
+binary-arch-arch: install-lib-ocaml-dev_$(ARCH)
+binary-arch-arch: install-lib-ocaml_$(ARCH)
 binary-arch-flavour: install-hypervisor_$(ARCH)_$(FLAVOUR)
 
 binary-indep: install-docs
@@ -71,6 +77,7 @@ $(STAMPS_DIR)/install-utils_$(ARCH): CONFIG = \
                XEN_COMPILE_ARCH=$(XEN_ARCH) \
                XEN_TARGET_ARCH=$(XEN_ARCH) \
                XEN_VERSION=$(VERSION) \
+               
OCAMLDESTDIR=$(CURDIR)/$(BUILD_DIR)/install-utils_$(ARCH)_ocaml/$(OCAML_STDLIB_DIR)
 \
                PYTHON=$(shell pyversions -r)
 
 $(STAMPS_DIR)/build-utils_$(ARCH): DIR=$(BUILD_DIR)/build-utils_$(ARCH)
@@ -82,6 +89,7 @@ $(STAMPS_DIR)/install-utils_$(ARCH): DIR = 
$(BUILD_DIR)/build-utils_$(ARCH)
 $(STAMPS_DIR)/install-utils_$(ARCH): INSTALL_DIR = 
$(BUILD_DIR)/install-utils_$(ARCH)
 $(STAMPS_DIR)/install-utils_$(ARCH): $(STAMPS_DIR)/build-utils_$(ARCH)
        @rm -rf $(INSTALL_DIR)
+       mkdir -p $(INSTALL_DIR)_ocaml/$(OCAML_DLL_DIR)
        +$(MAKE_CLEAN) -C $(DIR)/tools install DESTDIR=$(CURDIR)/$(INSTALL_DIR) 
$(CONFIG)
        # hvmloader
        #strip --remove-section=.comment --remove-section=.note 
$(INSTALL_DIR)/usr/lib/xen*/boot/*
@@ -144,6 +152,32 @@ install-libxen-dev_$(ARCH): 
$(STAMPS_DIR)/install-utils_$(ARCH)
        dh_shlibdeps
        +$(MAKE_SELF) install-base
 
+install-lib-ocaml_$(ARCH): DIR = $(BUILD_DIR)/install-utils_$(ARCH)_ocaml
+install-lib-ocaml_$(ARCH): PACKAGE_NAME = libxen-$(VERSION)-ocaml
+install-lib-ocaml_$(ARCH): DH_OPTIONS = -p$(PACKAGE_NAME)
+install-lib-ocaml_$(ARCH): $(STAMPS_DIR)/install-utils_$(ARCH)
+       dh_testdir
+       dh_testroot
+       dh_prep
+       dh_install --sourcedir=$(DIR)
+       dh_strip
+       dh_shlibdeps
+       dh_ocaml
+       +$(MAKE_SELF) install-base
+
+install-lib-ocaml-dev_$(ARCH): DIR = $(BUILD_DIR)/install-utils_$(ARCH)_ocaml
+install-lib-ocaml-dev_$(ARCH): PACKAGE_NAME = libxen-$(VERSION)-ocaml-dev
+install-lib-ocaml-dev_$(ARCH): DH_OPTIONS = -p$(PACKAGE_NAME)
+install-lib-ocaml-dev_$(ARCH): $(STAMPS_DIR)/install-utils_$(ARCH)
+       dh_testdir
+       dh_testroot
+       dh_prep
+       dh_install --sourcedir=$(DIR)
+       dh_strip
+       dh_shlibdeps
+       dh_ocaml
+       +$(MAKE_SELF) install-base
+
 install-libxenstore_$(ARCH): DIR = $(BUILD_DIR)/install-utils_$(ARCH)
 install-libxenstore_$(ARCH): PACKAGE_NAME = libxenstore3.0
 install-libxenstore_$(ARCH): DH_OPTIONS = -p$(PACKAGE_NAME)
diff --git a/xen/debian/templates/control.main.in 
b/xen/debian/templates/control.main.in
index 1bc913f..efea838 100644
--- a/xen/debian/templates/control.main.in
+++ b/xen/debian/templates/control.main.in
@@ -33,3 +33,19 @@ Replaces: xen-utils-common (<= 3.1.0-1)
 Description: Xenstore utilities for Xen
  This package contains the Xenstore utilities.
 
+Package: libxen-@version@-ocaml
+Section: ocaml
+Depends: ocaml-base-nox-${F:OCamlABI}, ${shlibs:Depends}, ${misc:Depends}, 
${ocaml:Depends}
+Provides: ${ocaml:Provides}
+Description: OCaml libraries for controlling Xen 
+ This package contains the runtime libraries required for the ocaml bindings
+ to the Xen control libraries.
+
+Package: libxen-@version@-ocaml-dev
+Section: ocaml
+Depends: libxen-@version@-ocaml (= ${binary:Version}), ${shlibs:Depends}, 
ocaml-findlib (>= 1.1), ${misc:Depends}, ${ocaml:Depends}
+Provides: ${ocaml:Provides}
+Description: OCaml libraries for controlling Xen (devel package)
+ This package contains the ocaml findlib packages for compiling applications
+ that are designed to control the Xen hypervisor.
+
diff --git a/xen/debian/templates/control.source.in 
b/xen/debian/templates/control.source.in
index 388d251..6790bd2 100644
--- a/xen/debian/templates/control.source.in
+++ b/xen/debian/templates/control.source.in
@@ -17,7 +17,10 @@ Build-Depends:
  libpci-dev,
  pkg-config,
  uuid-dev,
- zlib1g-dev
+ zlib1g-dev,
+ ocaml-nox (>= 3.11.1-3~),
+ dh-ocaml (>= 0.9~),
+ ocaml-findlib
 Build-Depends-Indep:
  graphviz,
  ghostscript,
diff --git a/xen/debian/templates/libxen-ocaml-dev.install.in 
b/xen/debian/templates/libxen-ocaml-dev.install.in
new file mode 100644
index 0000000..23eaf89
--- /dev/null
+++ b/xen/debian/templates/libxen-ocaml-dev.install.in
@@ -0,0 +1,25 @@
+@ocaml_stdlib_dir@/xenlight/*.cmi
+@ocaml_stdlib_dir@/xenbus/*.cmi
+@ocaml_stdlib_dir@/xenctrl/*.cmi
+@ocaml_stdlib_dir@/xenstore/*.cmi
+@ocaml_stdlib_dir@/xeneventchn/*.cmi
+@ocaml_stdlib_dir@/xenmmap/*.cmi
+@ocaml_stdlib_dir@/xenlight/*.cmx
+@ocaml_stdlib_dir@/xenbus/*.cmx
+@ocaml_stdlib_dir@/xenctrl/*.cmx
+@ocaml_stdlib_dir@/xenstore/*.cmx
+@ocaml_stdlib_dir@/xeneventchn/*.cmx
+@ocaml_stdlib_dir@/xenmmap/*.cmx
+@ocaml_stdlib_dir@/xenlight/*.cmxa
+@ocaml_stdlib_dir@/xenbus/*.cmxa
+@ocaml_stdlib_dir@/xenctrl/*.cmxa
+@ocaml_stdlib_dir@/xenstore/*.cmxa
+@ocaml_stdlib_dir@/xeneventchn/*.cmxa
+@ocaml_stdlib_dir@/xenmmap/*.cmxa
+@ocaml_stdlib_dir@/xenlight/*.a
+@ocaml_stdlib_dir@/xenbus/*.a
+@ocaml_stdlib_dir@/xenctrl/*.a
+@ocaml_stdlib_dir@/xenstore/*.a
+@ocaml_stdlib_dir@/xeneventchn/*.a
+@ocaml_stdlib_dir@/xenmmap/*.a
+
diff --git a/xen/debian/templates/libxen-ocaml.install.in 
b/xen/debian/templates/libxen-ocaml.install.in
new file mode 100644
index 0000000..e7c8167
--- /dev/null
+++ b/xen/debian/templates/libxen-ocaml.install.in
@@ -0,0 +1,14 @@
+@ocaml_dll_dir@/dll*_stubs.so*
+@ocaml_stdlib_dir@/xenlight/META
+@ocaml_stdlib_dir@/xenlight/*.cma
+@ocaml_stdlib_dir@/xenbus/META
+@ocaml_stdlib_dir@/xenbus/*.cma
+@ocaml_stdlib_dir@/xenctrl/META
+@ocaml_stdlib_dir@/xenctrl/*.cma
+@ocaml_stdlib_dir@/xenstore/META
+@ocaml_stdlib_dir@/xenstore/*.cma
+@ocaml_stdlib_dir@/xeneventchn/META
+@ocaml_stdlib_dir@/xeneventchn/*.cma
+@ocaml_stdlib_dir@/xenmmap/META
+@ocaml_stdlib_dir@/xenmmap/*.cma
+
-- 
1.7.5.4


-- 
To UNSUBSCRIBE, email to debian-ocaml-maint-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: 
http://lists.debian.org/1321633715-3990-1-git-send-email-jonathan.lud...@eu.citrix.com

Reply via email to