From a52dced7d7f5fc6df0cccef5960bf657169a997c Mon Sep 17 00:00:00 2001 From: Stephane Glondu Date: Thu, 21 Apr 2011 18:50:18 +0200 Subject: [PATCH] Two new patches to fix compilation of mldonkey --- ...e-primitive-name-table-as-const-char.patch | 25 +++++ ...eclarations-in-generated-.c-files-in.patch | 100 ++++++++++++++++++ debian/patches/series | 2 + 3 files changed, 127 insertions(+) create mode 100644 debian/patches/0010-Declare-primitive-name-table-as-const-char.patch create mode 100644 debian/patches/0011-Avoid-multiple-declarations-in-generated-.c-files-in.patch 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 00000000..aaf1aa3c --- /dev/null +++ b/debian/patches/0010-Declare-primitive-name-table-as-const-char.patch @@ -0,0 +1,25 @@ +From: Stephane Glondu +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 +--- + 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 00000000..7c459496 --- /dev/null +++ b/debian/patches/0011-Avoid-multiple-declarations-in-generated-.c-files-in.patch @@ -0,0 +1,100 @@ +From: Stephane Glondu +Date: Thu, 21 Apr 2011 18:39:31 +0200 +Subject: Avoid multiple declarations in generated .c files in -output-obj + +In -output-obj mode, (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 +--- + 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 3a5c58cc..57c6cf88 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 -- 2.30.2