[Pkg-xen-devel] [PATCH 6/7] Create 2 ocaml packages, libxen-4.1-ocaml and libxen-4.1-ocaml-dev.

Ian Campbell ijc at hellion.org.uk
Tue Nov 22 13:18:34 UTC 2011


On Fri, 2011-11-18 at 16:28 +0000, Jon Ludlam wrote:
> 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

IMO this is a much preferable approach to the previous version.

Bastian, any thoughts?

>  * 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.ludlam at 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- at 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- at version@-ocaml-dev
> +Section: ocaml
> +Depends: libxen- at 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 @@
> + at ocaml_stdlib_dir@/xenlight/*.cmi
> + at ocaml_stdlib_dir@/xenbus/*.cmi
> + at ocaml_stdlib_dir@/xenctrl/*.cmi
> + at ocaml_stdlib_dir@/xenstore/*.cmi
> + at ocaml_stdlib_dir@/xeneventchn/*.cmi
> + at ocaml_stdlib_dir@/xenmmap/*.cmi
> + at ocaml_stdlib_dir@/xenlight/*.cmx
> + at ocaml_stdlib_dir@/xenbus/*.cmx
> + at ocaml_stdlib_dir@/xenctrl/*.cmx
> + at ocaml_stdlib_dir@/xenstore/*.cmx
> + at ocaml_stdlib_dir@/xeneventchn/*.cmx
> + at ocaml_stdlib_dir@/xenmmap/*.cmx
> + at ocaml_stdlib_dir@/xenlight/*.cmxa
> + at ocaml_stdlib_dir@/xenbus/*.cmxa
> + at ocaml_stdlib_dir@/xenctrl/*.cmxa
> + at ocaml_stdlib_dir@/xenstore/*.cmxa
> + at ocaml_stdlib_dir@/xeneventchn/*.cmxa
> + at ocaml_stdlib_dir@/xenmmap/*.cmxa
> + at ocaml_stdlib_dir@/xenlight/*.a
> + at ocaml_stdlib_dir@/xenbus/*.a
> + at ocaml_stdlib_dir@/xenctrl/*.a
> + at ocaml_stdlib_dir@/xenstore/*.a
> + at ocaml_stdlib_dir@/xeneventchn/*.a
> + at 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 @@
> + at ocaml_dll_dir@/dll*_stubs.so*
> + at ocaml_stdlib_dir@/xenlight/META
> + at ocaml_stdlib_dir@/xenlight/*.cma
> + at ocaml_stdlib_dir@/xenbus/META
> + at ocaml_stdlib_dir@/xenbus/*.cma
> + at ocaml_stdlib_dir@/xenctrl/META
> + at ocaml_stdlib_dir@/xenctrl/*.cma
> + at ocaml_stdlib_dir@/xenstore/META
> + at ocaml_stdlib_dir@/xenstore/*.cma
> + at ocaml_stdlib_dir@/xeneventchn/META
> + at ocaml_stdlib_dir@/xeneventchn/*.cma
> + at ocaml_stdlib_dir@/xenmmap/META
> + at ocaml_stdlib_dir@/xenmmap/*.cma
> +

-- 
Ian Campbell
Current Noise: Rwake - Crooked Rivers

Absence makes the heart grow fonder.
		-- Sextus Aurelius




More information about the Pkg-xen-devel mailing list