[Pkg-ocaml-maint-commits] [SCM] OCaml packaging branch, master, updated. debian/3.10.2-3-15-g5439795

Stephane Glondu steph at glondu.net
Sun Nov 2 12:07:23 UTC 2008


The following commit has been merged in the master branch:
commit 5439795661016dd942b38d44acfd383dd10da236
Author: Stephane Glondu <steph at glondu.net>
Date:   Sun Aug 17 17:10:03 2008 +0200

    Embed bytecode in C object when using -custom

diff --git a/bytecomp/bytelink.ml b/bytecomp/bytelink.ml
index 83add82..e5afbd4 100644
--- a/bytecomp/bytelink.ml
+++ b/bytecomp/bytelink.ml
@@ -377,7 +377,7 @@ let output_data_string outchan data =
 
 (* Output a bytecode executable as a C file *)
 
-let link_bytecode_as_c tolink outfile =
+let link_bytecode_as_c tolink outfile with_main =
   let outchan = open_out outfile in
   try
     (* The bytecode *)
@@ -413,14 +413,26 @@ CAMLextern void caml_startup_code(
     (* The table of primitives *)
     Symtable.output_primitive_table outchan;
     (* The entry point *)
-    output_string outchan "\n
+    if with_main then begin
+      output_string outchan "\n
+int main(int argc, char **argv)
+{
+  caml_startup_code(caml_code, sizeof(caml_code),
+                    caml_data, sizeof(caml_data),
+                    caml_sections, sizeof(caml_sections),
+                    argv);
+  return 0; /* not reached */
+}\n"
+    end else begin
+      output_string outchan "\n
 void caml_startup(char ** argv)
 {
   caml_startup_code(caml_code, sizeof(caml_code),
                     caml_data, sizeof(caml_data),
                     caml_sections, sizeof(caml_sections),
                     argv);
-}\n";
+}\n"
+    end;
     close_out outchan
   with x ->
     close_out outchan;
@@ -498,6 +510,16 @@ let link objfiles output_name =
   Clflags.dllibs := !lib_dllibs @ !Clflags.dllibs; (* put user's DLLs first *)
   if not !Clflags.custom_runtime then
     link_bytecode tolink output_name true
+  else if not !Clflags.make_runtime then
+    let c_file = Filename.temp_file "camlobj" ".c" in
+    try
+      link_bytecode_as_c tolink c_file true;
+      let exec_name = fix_exec_name output_name in
+      if build_custom_runtime c_file exec_name <> 0
+      then raise(Error Custom_runtime);
+    with x ->
+      remove_file c_file;
+      raise x
   else if not !Clflags.output_c_object then begin
     let bytecode_name = Filename.temp_file "camlcode" "" in
     let prim_name = Filename.temp_file "camlprim" ".c" in
@@ -521,7 +543,7 @@ let link objfiles output_name =
       Filename.chop_suffix output_name Config.ext_obj ^ ".c" in
     if Sys.file_exists c_file then raise(Error(File_exists c_file));
     try
-      link_bytecode_as_c tolink c_file;
+      link_bytecode_as_c tolink c_file false;
       if Ccomp.compile_file c_file <> 0
       then raise(Error Custom_runtime);
       remove_file c_file

-- 
OCaml packaging



More information about the Pkg-ocaml-maint-commits mailing list