Package: llvm-dev
Version: 2.6-6
Severity: normal
Tags: patch
Hello,
You can find a patch to create a package libllvm-ocaml-dev that contains
the OCaml bindings as shipped by LLVM.
I have added all the required glue to match the current OCaml packaging
policy, including the use of dh_ocaml -- which helps to compute OCaml
dependencies. I have also written a little META file to ease OCaml
integration.
The only "weird" fix is that llvm uses strange symlinks pointing to the
$DESTDIR. I have fixed them but this is the weak part of the patch. I
think this is something to discuss with upstream.
I have built it without optimized compiler and in a pbuilder. Everything
seems fine (well the pbuilder had problem with logwatch, but this is
another topic).
I hope you will be able to use it for the next upload. I am willing to
support all things related to OCaml in LLVM, just drop me an email if
you want.
Regards
Sylvain Le Gall
-- System Information:
Debian Release: squeeze/sid
APT prefers unstable
APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Kernel: Linux 2.6.32-trunk-amd64 (SMP w/8 CPU cores)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Versions of packages llvm-dev depends on:
ii libc6 2.10.2-3 Embedded GNU C Library: Shared lib
ii libffi5 3.0.9-1 Foreign Function Interface library
ii libgcc1 1:4.4.2-8 GCC support library
ii libstdc++6 4.4.2-8 The GNU Standard C++ Library v3
ii llvm 2.6-6 Low-Level Virtual Machine (LLVM)
llvm-dev recommends no packages.
llvm-dev suggests no packages.
-- no debconf information
diff -Nurd llvm-2.6.org/debian/control llvm-2.6/debian/control
--- llvm-2.6.org/debian/control 2010-02-27 23:23:25.000000000 +0100
+++ llvm-2.6/debian/control 2010-02-28 23:04:34.000000000 +0100
@@ -6,8 +6,8 @@
Build-Depends: debhelper (>= 6.0.0), flex, bison, dejagnu, tcl8.4, expect,
autoconf, automake1.9, perl, libtool, doxygen, chrpath, texinfo,
sharutils, autotools-dev (>= 20060702.1), libffi-dev (>= 3.0.9),
- lsb-release
-Build-Conflicts: ocaml, ocaml-core, ocaml-nox
+ ocaml-nox (>= 3.11.2), ocaml-best-compilers | ocaml-nox, dh-ocaml (>= 0.9.1),
+ lsb-release,
Standards-Version: 3.8.4
Homepage: http://www.llvm.org/
@@ -114,3 +114,22 @@
.
This package contains the llvm source code.
+Package: libllvm-ocaml-dev
+Section: ocaml
+Architecture: any
+Suggests: llvm-doc
+Depends: ${shlibs:Depends}, ${misc:Depends}, ${ocaml:Depends}, llvm-dev
+Provides: ${ocaml:Provides}
+Description: Low-Level Virtual Machine (LLVM) bindings for OCaml
+ The Low-Level Virtual Machine (LLVM) is a collection of libraries and
+ tools that make it easy to build compilers, optimizers, Just-In-Time
+ code generators, and many other compiler-related programs. LLVM
+ uses a single, language-independent virtual instruction set both
+ as an offline code representation (to communicate code between
+ compiler phases and to run-time systems) and as the compiler internal
+ representation (to analyze and transform programs). This persistent
+ code representation allows a common set of sophisticated compiler
+ techniques to be applied at compile-time, link-time, install-time,
+ run-time, or "idle-time" (between program runs).
+ .
+ This package provides the OCaml bindings to develop applications using llvm.
diff -Nurd llvm-2.6.org/debian/control.in/libllvm-ocaml-dev llvm-2.6/debian/control.in/libllvm-ocaml-dev
--- llvm-2.6.org/debian/control.in/libllvm-ocaml-dev 1970-01-01 01:00:00.000000000 +0100
+++ llvm-2.6/debian/control.in/libllvm-ocaml-dev 2010-02-28 19:28:06.000000000 +0100
@@ -0,0 +1,19 @@
+Package: libllvm-ocaml-dev
+Section: ocaml
+Architecture: any
+Suggests: llvm-doc
+Depends: ${shlibs:Depends}, ${misc:Depends}, ${ocaml:Depends}, llvm-dev
+Provides: ${ocaml:Provides}
+Description: Low-Level Virtual Machine (LLVM) bindings for OCaml
+ The Low-Level Virtual Machine (LLVM) is a collection of libraries and
+ tools that make it easy to build compilers, optimizers, Just-In-Time
+ code generators, and many other compiler-related programs. LLVM
+ uses a single, language-independent virtual instruction set both
+ as an offline code representation (to communicate code between
+ compiler phases and to run-time systems) and as the compiler internal
+ representation (to analyze and transform programs). This persistent
+ code representation allows a common set of sophisticated compiler
+ techniques to be applied at compile-time, link-time, install-time,
+ run-time, or "idle-time" (between program runs).
+ .
+ This package provides the OCaml bindings to develop applications using llvm.
diff -Nurd llvm-2.6.org/debian/control.in/source llvm-2.6/debian/control.in/source
--- llvm-2.6.org/debian/control.in/source 2010-02-27 23:23:25.000000000 +0100
+++ llvm-2.6/debian/control.in/source 2010-02-28 00:10:50.000000000 +0100
@@ -6,8 +6,8 @@
Build-Depends: debhelper (>= 6.0.0), flex, bison, dejagnu, tcl8.4, expect,
autoconf, automake1.9, perl, libtool, doxygen, chrpath, texinfo,
sharutils, autotools-dev (>= 20060702.1), libffi-dev (>= 3.0.9),
- lsb-release @BUILDDEPS@
-Build-Conflicts: ocaml, ocaml-core, ocaml-nox
+ ocaml-nox (>= 3.11.2), ocaml-best-compilers | ocaml-nox, dh-ocaml (>= 0.9.1),
+ lsb-release, @BUILDDEPS@
Standards-Version: 3.8.4
Homepage: http://www.llvm.org/
diff -Nurd llvm-2.6.org/debian/debhelper.in/libllvm-ocaml-dev.dirs llvm-2.6/debian/debhelper.in/libllvm-ocaml-dev.dirs
--- llvm-2.6.org/debian/debhelper.in/libllvm-ocaml-dev.dirs 1970-01-01 01:00:00.000000000 +0100
+++ llvm-2.6/debian/debhelper.in/libllvm-ocaml-dev.dirs 2010-02-28 03:07:49.000000000 +0100
@@ -0,0 +1 @@
+...@ocaml_stdlib_dir@/METAS
diff -Nurd llvm-2.6.org/debian/debhelper.in/libllvm-ocaml-dev.doc-base llvm-2.6/debian/debhelper.in/libllvm-ocaml-dev.doc-base
--- llvm-2.6.org/debian/debhelper.in/libllvm-ocaml-dev.doc-base 1970-01-01 01:00:00.000000000 +0100
+++ llvm-2.6/debian/debhelper.in/libllvm-ocaml-dev.doc-base 2010-02-28 01:00:50.000000000 +0100
@@ -0,0 +1,8 @@
+Document: libllvm-ocaml-dev-ocamldoc-api-reference
+Title: Llvm OCamldoc API Reference
+Abstract: API reference manual for libllvm-ocaml-dev (generated via OCamldoc)
+Section: Programming/OCaml
+
+Format: HTML
+Index: /usr/share/doc/libllvm-ocaml-dev/html/index.html
+Files: /usr/share/doc/libllvm-ocaml-dev/html/*
diff -Nurd llvm-2.6.org/debian/debhelper.in/libllvm-ocaml-dev.install llvm-2.6/debian/debhelper.in/libllvm-ocaml-dev.install
--- llvm-2.6.org/debian/debhelper.in/libllvm-ocaml-dev.install 1970-01-01 01:00:00.000000000 +0100
+++ llvm-2.6/debian/debhelper.in/libllvm-ocaml-dev.install 2010-02-28 03:09:17.000000000 +0100
@@ -0,0 +1,2 @@
+debian/tmp/@OCAML_STDLIB_DIR@/llvm @OCAML_STDLIB_DIR@/
+debian/tmp/@PF@/docs/llvm/ocamldoc/html /usr/share/doc/libllvm-ocaml-dev/
diff -Nurd llvm-2.6.org/debian/debhelper.in/libllvm-ocaml-dev.META llvm-2.6/debian/debhelper.in/libllvm-ocaml-dev.META
--- llvm-2.6.org/debian/debhelper.in/libllvm-ocaml-dev.META 1970-01-01 01:00:00.000000000 +0100
+++ llvm-2.6/debian/debhelper.in/libllvm-ocaml-dev.META 2010-02-28 02:17:28.000000000 +0100
@@ -0,0 +1,62 @@
+description = "Low Level Virtual Machine bindings"
+version = "@UVERSION@"
+
+directory = "+llvm"
+
+archive(byte) = "llvm.cma"
+archive(native) = "llvm.cmxa"
+linkopts = "-cclib -lstdc++ -cclib -lllvm"
+
+package "executionengine"
+(
+ requires = "llvm"
+ version = "@UVERSION@"
+ archive(native) = "llvm_executionengine.cmxa"
+ archive(byte) = "llvm_executionengine.cma"
+ linkopts = "-cclib -lllvm_executionengine"
+)
+
+package "target"
+(
+ requires = "llvm"
+ version = "@UVERSION@"
+ archive(native) = "llvm_target.cmxa"
+ archive(byte) = "llvm_target.cma"
+ linkopts = "-cclib -lllvm_target"
+)
+
+package "scalar_opts"
+(
+ requires = "llvm llvm.target"
+ version = "@UVERSION@"
+ archive(native) = "llvm_scalar_opts.cmxa"
+ archive(byte) = "llvm_scalar_opts.cma"
+ linkopts = "-cclib -lllvm_scalar_opts"
+)
+
+package "analysis"
+(
+ requires = "llvm"
+ version = "@UVERSION@"
+ archive(native) = "llvm_analysis.cmxa"
+ archive(byte) = "llvm_analysis.cma"
+ linkopts = "-cclib -lllvm_analysis"
+)
+
+package "bitwriter"
+(
+ requires = "llvm"
+ version = "@UVERSION@"
+ archive(native) = "llvm_bitwriter.cmxa"
+ archive(byte) = "llvm_bitwriter.cma"
+ linkopts = "-cclib -lllvm_bitwriter"
+)
+
+package "bitreader"
+(
+ requires = "llvm llvm.bitwriter"
+ version = "@UVERSION@"
+ archive(native) = "llvm_bitreader.cmxa"
+ archive(byte) = "llvm_bitreader.cma"
+ linkopts = "-cclib -lllvm_bitreader"
+)
diff -Nurd llvm-2.6.org/debian/packages.d/llvm.mk llvm-2.6/debian/packages.d/llvm.mk
--- llvm-2.6.org/debian/packages.d/llvm.mk 2010-02-27 23:23:25.000000000 +0100
+++ llvm-2.6/debian/packages.d/llvm.mk 2010-02-28 03:08:32.000000000 +0100
@@ -1,5 +1,5 @@
builds := llvm-core llvm-tools
-packages := llvm llvm-dev llvm-doc llvm-examples llvm-source
+packages := llvm llvm-dev llvm-doc llvm-examples llvm-source libllvm-ocaml-dev
ifneq (,$(findstring $(DEB_HOST_GNU_CPU),ia64 mips mipsel))
$(error unsupported processor)
@@ -59,3 +59,8 @@
fi
endef
+define libllvm-ocaml-dev_extra_binary
+ if test "x$*" = "xlibllvm-ocaml-dev" ; then \
+ cp $(D)/debian/$*.META $(D)/debian/$*/$(OCAML_STDLIB_DIR)/METAS/; \
+ fi
+endef
diff -Nurd llvm-2.6.org/debian/rules.d/binary.mk llvm-2.6/debian/rules.d/binary.mk
--- llvm-2.6.org/debian/rules.d/binary.mk 2010-02-27 23:23:25.000000000 +0100
+++ llvm-2.6/debian/rules.d/binary.mk 2010-02-28 20:03:38.000000000 +0100
@@ -2,13 +2,17 @@
binary-arch: $(addprefix $(binary-stamp)-,$(packages_arch))
binary-indep: $(addprefix $(binary-stamp)-,$(packages_indep))
binary: binary-arch binary-indep
- dh_install --list-missing 2>&1
+ dh_install --list-missing \
+ -Xusr/lib/llvm/docs/llvm/html.tar.gz \
+ -Xusr/lib/llvm/docs/llvm/ocamldoc.tar.gz 2>&1
debhelper-%:
$(foreach f,$(notdir $(wildcard $(D)/debian/debhelper.in/$*.*)),\
sed -e "s;@PF@;$(PF);g" \
-e "s;@GCC_VERSION@;$(GCC_VERSION);g" \
-e "s;@LLVM_VERSION@;$(LLVM_VERSION);g" \
+ -e "s;@OCAML_STDLIB_DIR@;$(OCAML_STDLIB_DIR);g" \
+ -e "s;@UVERSION@;$(UVERSION);g" \
$(D)/debian/debhelper.in/$f > $(D)/debian/$f &&) :
clean: clean-debhelper
@@ -26,6 +30,7 @@
dh_installexamples -p$*
dh_installman -p$*
dh_installmime -p$*
+ dh_installdirs -p$*
dh_install -p$*
for dir in lib libexec bin ; \
do for i in $$(find $(D)/debian/$*/$(PF)/$$dir 2>/dev/null || echo -n) ; \
@@ -42,6 +47,7 @@
dh_fixperms -p$*
dh_installdeb -p$*
dh_shlibdeps -p$*
+ dh_ocaml -p$*
dh_gencontrol -p$*
dh_md5sums -p$*
dh_builddeb -p$*
diff -Nurd llvm-2.6.org/debian/rules.d/build.mk llvm-2.6/debian/rules.d/build.mk
--- llvm-2.6.org/debian/rules.d/build.mk 2010-02-27 23:23:25.000000000 +0100
+++ llvm-2.6/debian/rules.d/build.mk 2010-02-28 02:57:52.000000000 +0100
@@ -32,6 +32,7 @@
dh_clean
$(RM) $(D)/debian/log-check $(D)/debian/logwatch.pid
$(RM) log-* missing
+ -$(RM) test/Bindings/Ocaml/*.cm[io]
.PHONY: configure build install check clean clean-common
@@ -49,6 +50,13 @@
$(install-stamp)-%: $(build-stamp)-%
$(MAKE) -C $(builddir) $(MAKEOPTS) install DESTDIR=$(D)/debian/tmp
$(call $*_extra_install)
+ # Fix links that point to install directory
+ find $(D)/debian/tmp -type l | \
+ while read i; do \
+ L=$$(readlink $$i); \
+ L=$${L##$(D)/debian/tmp}; \
+ ln -sf $$L $$i; \
+ done
touch $@
# llvm ----------------------
diff -Nurd llvm-2.6.org/debian/rules.d/vars.mk llvm-2.6/debian/rules.d/vars.mk
--- llvm-2.6.org/debian/rules.d/vars.mk 2010-02-27 23:23:25.000000000 +0100
+++ llvm-2.6/debian/rules.d/vars.mk 2010-02-28 00:25:20.000000000 +0100
@@ -31,9 +31,12 @@
endif
endif
+include /usr/share/ocaml/ocamlvars.mk
+
confargs := \
--host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) \
- --with-pic --enable-pic --enable-optimized --enable-libffi
+ --with-pic --enable-pic --enable-optimized --enable-libffi \
+ --with-ocaml-libdir=$(OCAML_STDLIB_DIR)/llvm
with_check := no