diff options
Diffstat (limited to 'extra/ocaml')
-rw-r--r-- | extra/ocaml/PKGBUILD | 40 | ||||
-rw-r--r-- | extra/ocaml/fix-caml_int64_float_of_bits-n32.patch | 12 | ||||
-rw-r--r-- | extra/ocaml/fix-ocaml-binutils-2.21.patch | 66 |
3 files changed, 118 insertions, 0 deletions
diff --git a/extra/ocaml/PKGBUILD b/extra/ocaml/PKGBUILD new file mode 100644 index 000000000..c321869aa --- /dev/null +++ b/extra/ocaml/PKGBUILD @@ -0,0 +1,40 @@ +# $Id: PKGBUILD 123206 2011-05-09 09:44:39Z jgc $ +# Maintainer: Tobias Powalowski <tpowa@archlinux.org> + +pkgname=ocaml +pkgver=3.12.0 +pkgrel=2 +pkgdesc="A functional language with OO extensions" +arch=('i686' 'x86_64' 'mips64el') +license=('LGPL2' 'custom: QPL-1.0') +url="http://caml.inria.fr/" +depends=('gdbm') +makedepends=('tk' 'ncurses>=5.6-7' 'libx11') +optdepends=('ncurses: advanced ncurses features' 'tk: advanced tk features') +source=(http://caml.inria.fr/distrib/ocaml-3.12/${pkgname}-${pkgver}.tar.gz + fix-ocaml-binutils-2.21.patch + fix-caml_int64_float_of_bits-n32.patch) +options=('!makeflags' '!emptydirs') +md5sums=('3ba7cc65123c3579f14e7c726d3ee782' + '8c664a0a346424ea2ec6fc6f713170c6' + 'e2c8bc316efe40532c5b9d7f9a1d8d62') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + patch -Np1 -i "${srcdir}/fix-ocaml-binutils-2.21.patch" + patch -Np1 -i "${srcdir}/fix-caml_int64_float_of_bits-n32.patch" + ./configure -prefix /usr + if [ "${CARCH}" == "mips64el" ] ; then + make world + else + make world.opt + fi + make PREFIX="${pkgdir}/usr" MANDIR="${pkgdir}/usr/share/man" install + + # Save >10MB with this one, makepkg only strips debug symbols. + #find ${startdir}/pkg/usr/lib -type f -name '*.so.*' -exec strip --strip-unneeded {} \; + + # install license + install -m755 -d "${pkgdir}/usr/share/licenses/${pkgname}" + install -m644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/extra/ocaml/fix-caml_int64_float_of_bits-n32.patch b/extra/ocaml/fix-caml_int64_float_of_bits-n32.patch new file mode 100644 index 000000000..98755d30b --- /dev/null +++ b/extra/ocaml/fix-caml_int64_float_of_bits-n32.patch @@ -0,0 +1,12 @@ +--- ocaml-3.12.0.orig/byterun/ints.c 2011-06-25 18:03:21.548733206 +0200 ++++ ocaml-3.12.0/byterun/ints.c 2011-06-25 22:34:17.304788306 +0200 +@@ -585,6 +585,9 @@ + return caml_copy_int64(u.i); + } + ++#ifdef _ABIN32 ++__attribute__((optimize(0))) ++#endif + CAMLprim value caml_int64_float_of_bits(value vi) + { + union { double d; int64 i; int32 h[2]; } u; diff --git a/extra/ocaml/fix-ocaml-binutils-2.21.patch b/extra/ocaml/fix-ocaml-binutils-2.21.patch new file mode 100644 index 000000000..fa7664cec --- /dev/null +++ b/extra/ocaml/fix-ocaml-binutils-2.21.patch @@ -0,0 +1,66 @@ +From: Stephane Glondu <steph@glondu.net> +Date: Tue, 8 Mar 2011 21:17:40 +0100 +Subject: [PATCH] Fix ocamlopt w.r.t. binutils 2.21 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Bug: http://caml.inria.fr/mantis/view.php?id=5237 +Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=617404 +Authors: Eric Cooper, spiralvoice +Reviewed-by: Stéphane Glondu <steph@glondu.net> +--- + asmcomp/amd64/emit.mlp | 13 +++++++------ + asmcomp/i386/emit.mlp | 6 +++--- + 2 files changed, 10 insertions(+), 9 deletions(-) + +diff --git a/asmcomp/amd64/emit.mlp b/asmcomp/amd64/emit.mlp +index 4a3f844..525c6e6 100644 +--- a/asmcomp/amd64/emit.mlp ++++ b/asmcomp/amd64/emit.mlp +@@ -679,17 +679,18 @@ let fundecl fundecl = + emit_all true fundecl.fun_body; + List.iter emit_call_gc !call_gc_sites; + emit_call_bound_errors (); ++ begin match Config.system with ++ "linux" | "gnu" -> ++ ` .type {emit_symbol fundecl.fun_name},@function\n`; ++ ` .size {emit_symbol fundecl.fun_name},.-{emit_symbol fundecl.fun_name}\n` ++ | _ -> () ++ end; + if !float_constants <> [] then begin + if macosx + then ` .literal8\n` + else ` .section .rodata.cst8,\"a\",@progbits\n`; + List.iter emit_float_constant !float_constants +- end; +- match Config.system with +- "linux" | "gnu" -> +- ` .type {emit_symbol fundecl.fun_name},@function\n`; +- ` .size {emit_symbol fundecl.fun_name},.-{emit_symbol fundecl.fun_name}\n` +- | _ -> () ++ end + + (* Emission of data *) + +diff --git a/asmcomp/i386/emit.mlp b/asmcomp/i386/emit.mlp +index 2992f29..0b1252c 100644 +--- a/asmcomp/i386/emit.mlp ++++ b/asmcomp/i386/emit.mlp +@@ -905,12 +905,12 @@ let fundecl fundecl = + emit_all true fundecl.fun_body; + List.iter emit_call_gc !call_gc_sites; + emit_call_bound_errors (); +- List.iter emit_float_constant !float_constants; +- match Config.system with ++ begin match Config.system with + "linux_elf" | "bsd_elf" | "gnu" -> + ` .type {emit_symbol fundecl.fun_name},@function\n`; + ` .size {emit_symbol fundecl.fun_name},.-{emit_symbol fundecl.fun_name}\n` +- | _ -> () ++ | _ -> () end; ++ List.iter emit_float_constant !float_constants + + + (* Emission of data *) +-- |