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

Ian Campbell ijc at hellion.org.uk
Fri Nov 18 11:59:34 UTC 2011


On Wed, 2011-11-16 at 12:04 +0000, Jon Ludlam wrote:
> This is is an update of patch 6 sent yesterday. Changes are:
> 
>  * The packages it creates are now named libxen-4.1-ocaml and
>    libxen-4.1-ocaml-dev as per Stéphane's suggestion. The
>    dependencies have been tweaked similarly. The generated debs
>    have fields that look like:
> 
> (libxen-4.1-ocaml)
>  Depends: ocaml-base-nox-3.12.0, libc6 (>= 2.4), libxen-4.1 (>= 4.1.2)
>  Provides: libxen-4.1-ocaml-dedh4
> 
> (libxen-4.1-ocaml-dev)
>  Depends: libxen-4.1-ocaml (= 4.1.2-1), ocaml-findlib (>= 1.1), ocaml-nox-3.12.0
>  Provides: libxen-4.1-ocaml-dev-dedh4
> 
>  * Removed a stray explicit '4.1' that should have been $(VERSION)
>    in the rules.real file 
> 
>  * Removed the explicit 'Architecture: all' statements in favour 
>    of letting the autogeneration do it.
> 
>  * Moved both ocaml packages into the 'ocaml' section.
> 
>  * Use @ocaml_stdlib_dir@ and @ocaml_dll_dir@ in the template 
>    install files.
> 
> OCAML_STDLIB_DIR and OCAML_DLL_DIR are still not being taken from
> the standard place (/usr/share/ocaml/ocamlvars.mk or via
> dh_ocamlinit). The main reason is that the xen debian files
> already have in place a system for preprocessing the x.install.in
> files to create x.install files using variable substitution. It
> would be awkward to have to have _some_ variables substituted by
> debian/bin/gencontrol.py, generating an intermediate template
> which is then subjected to additional variable substitutions by
> dh_ocamlinit. Additionally, dh_ocamlinit attempts to operate on
> any file underneath the debian/ subdirectory that ends in '.in',
> so it works on the same set of files that gencontrol.py works
> on. This doesn't cause problems, but it does litter the templates
> directory with half-processed unnecessary files.

Does dh_ocamlinit support the standard debhelper -p<package> option to
restrict this?

> The other available method for getting OCAML_STDLIB_DIR is by
> including the makefile fragment /usr/share/ocaml/ocamlvars.mk in
> debian/rules. If we did this, we'd have to pass the value on to
> gencontrol.py. This is doable, but again a little awkward. It
> would also require that dh_ocaml was installed on the system on
> which the control file was being generated, which would not fail
> gracefully.

gencontrol.py already depends on linux-support-X.Y and fails in not an
especially graceful manner:
        $ ./debian/rules debian/control-real
        debian/bin/gencontrol.py
        Traceback (most recent call last):
          File "debian/bin/gencontrol.py", line 6, in <module>
            from debian_xen.debian import VersionXen
          File "/local/scratch/ijc/development/debian/pkg-xen.git/xen/debian/bin/../lib/python/debian_xen/__init__.py", line 19, in <module>
            _setup()
          File "/local/scratch/ijc/development/debian/pkg-xen.git/xen/debian/bin/../lib/python/debian_xen/__init__.py", line 16, in _setup
            raise RuntimeError("Can't find %s, please install the linux-support-%s package" % (support, version))
        RuntimeError: Can't find /usr/src/linux-support-3.0.0-1, please install the linux-support-3.0.0-1 package
        make: *** [debian/control-real] Error 1

compare with:
        $ git diff
        diff --git a/xen/debian/rules b/xen/debian/rules
        index aade4fb..afdd8f9 100755
        --- a/xen/debian/rules
        +++ b/xen/debian/rules
        @@ -3,6 +3,12 @@
         # Uncomment this to turn on verbose mode.
         #export DH_VERBOSE=1
         
        +ifneq ($(wildcard /nonesistent/foo.mk),/nonesistent/foo.mk)
        +$(error /nonesistent/foo.mk not found. Please install foo-dev)
        +else
        +include /nonesistent/foo.mk
        +endif
        +
         DEB_HOST_ARCH  := $(shell dpkg-architecture -qDEB_HOST_ARCH)
         DEB_BUILD_ARCH := $(shell dpkg-architecture -qDEB_BUILD_ARCH)
         
        $ ./debian/rules debian/control-real
        ./debian/rules:7: *** /nonesistent/foo.mk not found. Please install foo-dev.  Stop.

(maybe there is a more make-ish way to achieve this)

In any case you have a similarly opaque dependency on whichever package
provides ocamlc.

> So the patch below generates the two variables in the same way
> that both the makefile fragment and dh_ocamlinit do - by
> executing 'ocamlc -where' and appending /stublibs. I've left a
> comment immediately above this line stating where to look to find
> these runes in case they do change.

> Comments most welcome!

My comments on the patch are mostly just nitpicking.

> 
> Jon
> 
> ---
>  xen/debian/bin/gencontrol.py                     |   12 ++++-
>  xen/debian/patches/series                        |    1 +
>  xen/debian/patches/tools-ocaml-fix-build.diff    |   60 ++++++++++++++++++++++
>  xen/debian/rules                                 |    2 +-
>  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, 166 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..30a9978 100755
> --- a/xen/debian/bin/gencontrol.py
> +++ b/xen/debian/bin/gencontrol.py
> @@ -1,6 +1,6 @@
>  #!/usr/bin/env python
>  
> -import os, sys
> +import os, sys, subprocess
>  sys.path.append(os.path.join(sys.path[0], "../lib/python"))
>  
>  from debian_xen.debian import VersionXen, PackageFieldList
> @@ -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' % self.version.xen_version), 
> +		      ('libxen-ocaml-dev.install','libxen-%s-ocaml-dev' % self.version.xen_version)):
> +	    k = self.substitute(self.templates[i], vars)
> +	    file("debian/%s.install" % j, 'w').write(k)

I think either i and j should both include the ".install" suffix or
neither of them should.

> +
>          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]
> @@ -103,8 +108,13 @@ class Gencontrol(Base):
>      def process_changelog(self):
>          changelog = Changelog(version = VersionXen)
>          self.version = changelog[0].version
> +        # Nb. Check /usr/share/ocaml/ocamlvars.mk for OCAML_STDLIB_DIR and OCAML_DLL_DIR
> +        ocaml_stdlib_dir = subprocess.check_output(["ocamlc", "-where"]).rstrip()
> +        ocaml_dll_dir = ocaml_stdlib_dir + "/stublibs"
>          self.vars = {
>              'version': self.version.xen_version,
> +            'ocaml_stdlib_dir': ocaml_stdlib_dir,
> +            'ocaml_dll_dir': ocaml_dll_dir,
>          }
>  
>  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..52fa7d5
> --- /dev/null
> +++ b/xen/debian/patches/tools-ocaml-fix-build.diff
> @@ -0,0 +1,60 @@
> +Fix the build of the ocaml libraries 
> +
> +Signed-off-by: Jon Ludlam <jonathan.ludlam at eu.citrix.com>

Please can you also post this to xen-devel. (assuming it is relevant
there, it looks like it).

Ian.

-- 
Ian Campbell
Current Noise: Zyklon - Two Thousand Years

Wisdom is knowing what to do with what you know.
		-- J. Winter Smith




More information about the Pkg-xen-devel mailing list