The following commit has been merged in the master branch:
commit a52dced7d7f5fc6df0cccef5960bf657169a997c
Author: Stephane Glondu <st...@glondu.net>
Date:   Thu Apr 21 18:50:18 2011 +0200

    Two new patches to fix compilation of mldonkey

diff --git 
a/debian/patches/0010-Declare-primitive-name-table-as-const-char.patch 
b/debian/patches/0010-Declare-primitive-name-table-as-const-char.patch
new file mode 100644
index 0000000..aaf1aa3
--- /dev/null
+++ b/debian/patches/0010-Declare-primitive-name-table-as-const-char.patch
@@ -0,0 +1,25 @@
+From: Stephane Glondu <st...@glondu.net>
+Date: Thu, 21 Apr 2011 18:39:57 +0200
+Subject: Declare primitive name table as const char *
+
+This avoids lots of warnings when compiling with g++...
+
+Signed-off-by: Stephane Glondu <st...@glondu.net>
+---
+ bytecomp/symtable.ml |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/bytecomp/symtable.ml b/bytecomp/symtable.ml
+index d6ecc94..37def29 100644
+--- a/bytecomp/symtable.ml
++++ b/bytecomp/symtable.ml
+@@ -123,7 +123,7 @@ let output_primitive_table outchan =
+     fprintf outchan "  %s,\n" prim.(i)
+   done;
+   fprintf outchan "  (primitive) 0 };\n";
+-  fprintf outchan "char * caml_names_of_builtin_cprim[] = {\n";
++  fprintf outchan "const char * caml_names_of_builtin_cprim[] = {\n";
+   for i = 0 to Array.length prim - 1 do
+     fprintf outchan "  \"%s\",\n" prim.(i)
+   done;
+-- 
diff --git 
a/debian/patches/0011-Avoid-multiple-declarations-in-generated-.c-files-in.patch
 
b/debian/patches/0011-Avoid-multiple-declarations-in-generated-.c-files-in.patch
new file mode 100644
index 0000000..7c45949
--- /dev/null
+++ 
b/debian/patches/0011-Avoid-multiple-declarations-in-generated-.c-files-in.patch
@@ -0,0 +1,100 @@
+From: Stephane Glondu <st...@glondu.net>
+Date: Thu, 21 Apr 2011 18:39:31 +0200
+Subject: Avoid multiple declarations in generated .c files in -output-obj
+
+In -output-obj mode, <caml/mlvalues.h> (which contains some
+primitives) is included in the generated .c file, leading to errors
+when compiling with g++ (multiple declarations).
+
+There are probably better implementations (in particular, in this one,
+care must be taken when changing the list of primitives available in
+mlvalues.h), but this is a small and (not too) intrusive patch.
+
+Signed-off-by: Stephane Glondu <st...@glondu.net>
+---
+ bytecomp/bytelink.ml  |   17 +++++++++++++++--
+ bytecomp/symtable.ml  |    8 +++++---
+ bytecomp/symtable.mli |    2 +-
+ 3 files changed, 21 insertions(+), 6 deletions(-)
+
+diff --git a/bytecomp/bytelink.ml b/bytecomp/bytelink.ml
+index e74a67d..09689be 100644
+--- a/bytecomp/bytelink.ml
++++ b/bytecomp/bytelink.ml
+@@ -400,6 +400,19 @@ let output_cds_file outfile =
+     remove_file outfile;
+     raise x
+ 
++(* List of primitives declared in caml/mlvalues.h, to avoid duplicate
++   declarations in generated .c files *)
++
++let mlvalues_primitives = [
++  "caml_get_public_method";
++  "caml_hash_variant";
++  "caml_string_length";
++  "caml_Double_val";
++  "caml_Store_double_val";
++  "caml_Int64_val";
++  "caml_atom_table";
++]
++
+ (* Output a bytecode executable as a C file *)
+ 
+ let link_bytecode_as_c tolink outfile with_main =
+@@ -442,7 +455,7 @@ CAMLextern void caml_startup_code(\n\
+       (Marshal.to_string sections []);
+     output_string outchan "\n};\n\n";
+     (* The table of primitives *)
+-    Symtable.output_primitive_table outchan;
++    Symtable.output_primitive_table outchan mlvalues_primitives;
+     (* The entry point *)
+     if with_main then begin
+       output_string outchan "\n\
+@@ -539,7 +552,7 @@ let link objfiles output_name =
+         #else\n\
+         typedef long value;\n\
+         #endif\n";
+-      Symtable.output_primitive_table poc;
++      Symtable.output_primitive_table poc [];
+       output_string poc "\
+         #ifdef __cplusplus\n\
+         }\n\
+diff --git a/bytecomp/symtable.ml b/bytecomp/symtable.ml
+index 37def29..70958ee 100644
+--- a/bytecomp/symtable.ml
++++ b/bytecomp/symtable.ml
+@@ -112,15 +112,17 @@ let output_primitive_names outchan =
+ 
+ open Printf
+ 
+-let output_primitive_table outchan =
++let output_primitive_table outchan blacklist =
+   let prim = all_primitives() in
+   for i = 0 to Array.length prim - 1 do
+-    fprintf outchan "extern value %s();\n" prim.(i)
++    let p = prim.(i) in
++    if not (List.mem p blacklist) then
++      fprintf outchan "extern value %s();\n" p
+   done;
+   fprintf outchan "typedef value (*primitive)();\n";
+   fprintf outchan "primitive caml_builtin_cprim[] = {\n";
+   for i = 0 to Array.length prim - 1 do
+-    fprintf outchan "  %s,\n" prim.(i)
++    fprintf outchan "  (primitive)%s,\n" prim.(i)
+   done;
+   fprintf outchan "  (primitive) 0 };\n";
+   fprintf outchan "const char * caml_names_of_builtin_cprim[] = {\n";
+diff --git a/bytecomp/symtable.mli b/bytecomp/symtable.mli
+index 2b1583f..316381e 100644
+--- a/bytecomp/symtable.mli
++++ b/bytecomp/symtable.mli
+@@ -24,7 +24,7 @@ val require_primitive: string -> unit
+ val initial_global_table: unit -> Obj.t array
+ val output_global_map: out_channel -> unit
+ val output_primitive_names: out_channel -> unit
+-val output_primitive_table: out_channel -> unit
++val output_primitive_table: out_channel -> string list -> unit
+ val data_global_map: unit -> Obj.t
+ val data_primitive_names: unit -> string
+ 
+-- 
diff --git a/debian/patches/series b/debian/patches/series
index 3a5c58c..57c6cf8 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -7,3 +7,5 @@
 0007-Fix-ocamlopt-w.r.t.-binutils-2.21.patch
 0008-Embed-bytecode-in-C-object-when-using-custom.patch
 0009-Natdynlink-works-on-powerpc-and-hurd-i386.patch
+0010-Declare-primitive-name-table-as-const-char.patch
+0011-Avoid-multiple-declarations-in-generated-.c-files-in.patch

-- 
OCaml packaging

_______________________________________________
Pkg-ocaml-maint-commits mailing list
Pkg-ocaml-maint-commits@lists.alioth.debian.org
http://lists.alioth.debian.org/mailman/listinfo/pkg-ocaml-maint-commits

Reply via email to