diff options
-rw-r--r-- | Changes | 6 | ||||
-rw-r--r-- | INSTALL | 4 | ||||
-rw-r--r-- | asmcomp/asmlink.ml | 2 | ||||
-rw-r--r-- | asmrun/Makefile | 18 | ||||
-rwxr-xr-x | boot/ocamlc | bin | 1103803 -> 1104756 bytes | |||
-rwxr-xr-x | boot/ocamldep | bin | 308381 -> 308936 bytes | |||
-rwxr-xr-x | boot/ocamllex | bin | 169516 -> 170048 bytes | |||
-rw-r--r-- | bytecomp/bytelink.ml | 8 | ||||
-rwxr-xr-x | byterun/Makefile.common | 17 | ||||
-rwxr-xr-x | configure | 9 | ||||
-rw-r--r-- | driver/main.ml | 1 | ||||
-rw-r--r-- | driver/main_args.ml | 9 | ||||
-rw-r--r-- | driver/main_args.mli | 2 | ||||
-rw-r--r-- | driver/optmain.ml | 1 | ||||
-rw-r--r-- | man/ocamlc.m | 10 | ||||
-rw-r--r-- | man/ocamlopt.m | 10 | ||||
-rw-r--r-- | stdlib/Makefile | 10 | ||||
-rw-r--r-- | stdlib/Makefile.nt | 9 | ||||
-rwxr-xr-x | stdlib/Makefile.shared | 14 | ||||
-rw-r--r-- | stdlib/camlheaderd | 1 | ||||
-rw-r--r-- | stdlib/headernt.c | 2 | ||||
-rw-r--r-- | tools/ocamlcp.ml | 1 | ||||
-rw-r--r-- | utils/clflags.ml | 4 | ||||
-rw-r--r-- | utils/clflags.mli | 1 |
24 files changed, 124 insertions, 15 deletions
@@ -1,3 +1,9 @@ +Objective Caml 3.13.0: +---------------------- + +- Warning 28 is now enabled by default. + + Objective Caml 3.12.0: ---------------------- @@ -119,6 +119,10 @@ The "configure" script accepts the following options: run-time system manually written in assembly language. This assembler must preprocess its input with the C preprocessor. +-with-debug-runtime + Compile and install the debug version of the runtimes, useful + for debugging C stubs and other low-level code. + -verbose Verbose output of the configuration tests. Use it if the outcome of configure is not what you were expecting. diff --git a/asmcomp/asmlink.ml b/asmcomp/asmlink.ml index 8b8cbc0a4..2f6966a24 100644 --- a/asmcomp/asmlink.ml +++ b/asmcomp/asmlink.ml @@ -101,7 +101,7 @@ let runtime_lib () = let libname = if !Clflags.gprofile then "libasmrunp" ^ ext_lib - else "libasmrun" ^ ext_lib in + else "libasmrun" ^ !Clflags.runtime_variant ^ ext_lib in try if !Clflags.nopervasives then [] else [ find_in_path !load_path libname ] diff --git a/asmrun/Makefile b/asmrun/Makefile index de8427a4d..a66fc2740 100644 --- a/asmrun/Makefile +++ b/asmrun/Makefile @@ -34,13 +34,19 @@ OBJS=$(COBJS) $(ASMOBJS) DOBJS=$(COBJS:.o=.d.o) $(ASMOBJS) POBJS=$(COBJS:.o=.p.o) $(ASMOBJS:.o=.p.o) -all: libasmrun.a all-$(PROFILING) +all: libasmrun.a all-$(RUNTIMED) all-$(PROFILING) libasmrun.a: $(OBJS) rm -f libasmrun.a ar rc libasmrun.a $(OBJS) $(RANLIB) libasmrun.a +all-noruntimed: +.PHONY: all-noruntimed + +all-runtimed: libasmrund.a +.PHONY: all-runtimed + libasmrund.a: $(DOBJS) rm -f libasmrund.a ar rc libasmrund.a $(DOBJS) @@ -55,12 +61,20 @@ libasmrunp.a: $(POBJS) ar rc libasmrunp.a $(POBJS) $(RANLIB) libasmrunp.a -install: install-default install-$(PROFILING) +install: install-default install-$(RUNTIMED) install-$(PROFILING) install-default: cp libasmrun.a $(LIBDIR)/libasmrun.a cd $(LIBDIR); $(RANLIB) libasmrun.a +install-noruntimed: +.PHONY: install-noruntimed + +install-runtimed: + cp libasmrund.a $(LIBDIR)/libasmrund.a + cd $(LIBDIR); $(RANLIB) libasmrund.a +.PHONY: install-runtimed + install-noprof: rm -f $(LIBDIR)/libasmrunp.a; ln -s libasmrun.a $(LIBDIR)/libasmrunp.a diff --git a/boot/ocamlc b/boot/ocamlc Binary files differindex e95cb3a90..52ad23de1 100755 --- a/boot/ocamlc +++ b/boot/ocamlc diff --git a/boot/ocamldep b/boot/ocamldep Binary files differindex dd86388bf..90e59f67e 100755 --- a/boot/ocamldep +++ b/boot/ocamldep diff --git a/boot/ocamllex b/boot/ocamllex Binary files differindex 3b4799a1e..6f065d5a5 100755 --- a/boot/ocamllex +++ b/boot/ocamllex diff --git a/bytecomp/bytelink.ml b/bytecomp/bytelink.ml index ede7bb977..b4accdc9e 100644 --- a/bytecomp/bytelink.ml +++ b/bytecomp/bytelink.ml @@ -276,7 +276,7 @@ let link_bytecode tolink exec_name standalone = try let header = if String.length !Clflags.use_runtime > 0 - then "camlheader_ur" else "camlheader" in + then "camlheader_ur" else "camlheader" ^ !Clflags.runtime_variant in let inchan = open_in_bin (find_in_path !load_path header) in copy_file inchan outchan; close_in inchan @@ -466,8 +466,9 @@ void caml_startup(char ** argv)\n\ (* Build a custom runtime *) let build_custom_runtime prim_name exec_name = + let runtime_lib = "-lcamlrun" ^ !Clflags.runtime_variant in Ccomp.call_linker Ccomp.Exe exec_name - ([prim_name] @ List.rev !Clflags.ccobjs @ ["-lcamlrun"]) + ([prim_name] @ List.rev !Clflags.ccobjs @ [runtime_lib]) (Clflags.std_include_flag "-I" ^ " " ^ Config.bytecomp_c_libraries) let append_bytecode_and_cleanup bytecode_name exec_name prim_name = @@ -546,8 +547,9 @@ let link objfiles output_name = if not (Filename.check_suffix output_name Config.ext_obj) then begin temps := obj_file :: !temps; if not ( + let runtime_lib = "-lcamlrun" ^ !Clflags.runtime_variant in Ccomp.call_linker Ccomp.MainDll output_name - ([obj_file] @ List.rev !Clflags.ccobjs @ ["-lcamlrun"]) + ([obj_file] @ List.rev !Clflags.ccobjs @ [runtime_lib]) Config.bytecomp_c_libraries ) then raise (Error Custom_runtime); end diff --git a/byterun/Makefile.common b/byterun/Makefile.common index cc75ccede..d29036810 100755 --- a/byterun/Makefile.common +++ b/byterun/Makefile.common @@ -37,9 +37,15 @@ PUBLIC_INCLUDES=\ memory.h misc.h mlvalues.h printexc.h signals.h compatibility.h -all:: ocamlrun$(EXE) ld.conf libcamlrun.$(A) +all:: ocamlrun$(EXE) ld.conf libcamlrun.$(A) all-$(RUNTIMED) .PHONY: all +all-noruntimed: +.PHONY: all-noruntimed + +all-runtimed: ocamlrund$(EXE) libcamlrund.$(A) +.PHONY: all-runtimed + ld.conf: ../config/Makefile echo "$(STUBLIBDIR)" > ld.conf echo "$(LIBDIR)" >> ld.conf @@ -55,6 +61,15 @@ install:: cp ld.conf $(LIBDIR)/ld.conf .PHONY: install +install:: install-$(RUNTIMED) + +install-noruntimed: +.PHONY: install-noruntimed + +install-runtimed: + cp ocamlrund$(EXE) $(BINDIR)/ocamlrund$(EXE) + cp libcamlrund.$(A) $(LIBDIR)/libcamlrund.$(A) +.PHONY: install-runtimed primitives : $(PRIMS) sed -n -e "s/CAMLprim value \([a-z0-9_][a-z0-9_]*\).*/\1/p" \ @@ -39,6 +39,7 @@ tk_x11=yes dl_defs='' verbose=no withcurses=yes +debugruntime=noruntimed withsharedlibs=yes gcc_warnings="-Wall" partialld="ld -r" @@ -109,6 +110,8 @@ while : ; do dllib="$2"; shift;; -verbose|--verbose) verbose=yes;; + -with-debug-runtime|--with-debug-runtime) + debugruntime=runtimed;; *) echo "Unknown option \"$1\"." 1>&2; exit 2;; esac shift @@ -1649,6 +1652,7 @@ echo "CMXS=$cmxs" >> Makefile echo "MKEXE=$mkexe" >> Makefile echo "MKDLL=$mksharedlib" >> Makefile echo "MKMAINDLL=$mkmaindll" >> Makefile +echo "RUNTIMED=${debugruntime}" >>Makefile rm -f tst hasgot.c rm -f ../m.h ../s.h ../Makefile @@ -1707,6 +1711,11 @@ else echo "Source-level replay debugger: not supported" fi +if test "$debugruntime" = "runtimed"; then + echo "Debug runtime will be compiled and installed" +fi + + echo "Additional libraries supported:" echo " $otherlibraries" diff --git a/driver/main.ml b/driver/main.ml index 09aa89655..58d3b8e50 100644 --- a/driver/main.ml +++ b/driver/main.ml @@ -119,6 +119,7 @@ module Options = Main_args.Make_bytecomp_options (struct let _pp s = preprocessor := Some s let _principal = set principal let _rectypes = set recursive_types + let _runtime_variant s = runtime_variant := s let _strict_sequence = set strict_sequence let _thread = set use_threads let _vmthread = set use_vmthreads diff --git a/driver/main_args.ml b/driver/main_args.ml index 279a46328..e50504fe5 100644 --- a/driver/main_args.ml +++ b/driver/main_args.ml @@ -204,6 +204,11 @@ let mk_rectypes f = "-rectypes", Arg.Unit f, " Allow arbitrary recursive types" ;; +let mk_runtime_variant f = + "-runtime-variant", Arg.String f, + "<str> Use the <str> variant of the run-time system" +;; + let mk_S f = "-S", Arg.Unit f, " Keep intermediate assembly file" ;; @@ -402,6 +407,7 @@ module type Bytecomp_options = sig val _pp : string -> unit val _principal : unit -> unit val _rectypes : unit -> unit + val _runtime_variant : string -> unit val _strict_sequence : unit -> unit val _thread : unit -> unit val _vmthread : unit -> unit @@ -485,6 +491,7 @@ module type Optcomp_options = sig val _pp : string -> unit val _principal : unit -> unit val _rectypes : unit -> unit + val _runtime_variant : string -> unit val _strict_sequence : unit -> unit val _shared : unit -> unit val _S : unit -> unit @@ -604,6 +611,7 @@ struct mk_pp F._pp; mk_principal F._principal; mk_rectypes F._rectypes; + mk_runtime_variant F._runtime_variant; mk_strict_sequence F._strict_sequence; mk_thread F._thread; mk_unsafe F._unsafe; @@ -695,6 +703,7 @@ struct mk_pp F._pp; mk_principal F._principal; mk_rectypes F._rectypes; + mk_runtime_variant F._runtime_variant; mk_S F._S; mk_strict_sequence F._strict_sequence; mk_shared F._shared; diff --git a/driver/main_args.mli b/driver/main_args.mli index 1c4abf509..8a4fbc379 100644 --- a/driver/main_args.mli +++ b/driver/main_args.mli @@ -44,6 +44,7 @@ module type Bytecomp_options = val _pp : string -> unit val _principal : unit -> unit val _rectypes : unit -> unit + val _runtime_variant : string -> unit val _strict_sequence : unit -> unit val _thread : unit -> unit val _vmthread : unit -> unit @@ -128,6 +129,7 @@ module type Optcomp_options = sig val _pp : string -> unit val _principal : unit -> unit val _rectypes : unit -> unit + val _runtime_variant : string -> unit val _strict_sequence : unit -> unit val _shared : unit -> unit val _S : unit -> unit diff --git a/driver/optmain.ml b/driver/optmain.ml index 1c7352c52..c76f56a8a 100644 --- a/driver/optmain.ml +++ b/driver/optmain.ml @@ -128,6 +128,7 @@ module Options = Main_args.Make_optcomp_options (struct let _pp s = preprocessor := Some s let _principal = set principal let _rectypes = set recursive_types + let _runtime_variant s = runtime_variant := s let _strict_sequence = set strict_sequence let _shared () = shared := true; dlcode := true let _S = set keep_asm_file diff --git a/man/ocamlc.m b/man/ocamlc.m index e4715bbad..490d05296 100644 --- a/man/ocamlc.m +++ b/man/ocamlc.m @@ -444,6 +444,16 @@ only recursive types where the recursion goes through an object type are supported. Note that once you have created an interface using this flag, you must use it again for all dependencies. .TP +.BI \-runtime\-variant \ suffix +Add +.I suffix +to the name of the runtime library that will be used by the program. +If OCaml was configured with option +.BR \-with\-debug\-runtime , +then the +.B d +suffix is supported and gives a debug version of the runtime. +.TP .B \-thread Compile or link multithreaded programs, in combination with the system "threads" library described in diff --git a/man/ocamlopt.m b/man/ocamlopt.m index c021fab6e..e3f408917 100644 --- a/man/ocamlopt.m +++ b/man/ocamlopt.m @@ -397,6 +397,16 @@ types are derived in a principal way. All programs accepted in mode are also accepted in default mode with equivalent types, but different binary signatures. .TP +.BI \-runtime\-variant \ suffix +Add +.I suffix +to the name of the runtime library that will be used by the program. +If OCaml was configured with option +.BR \-with\-debug\-runtime , +then the +.B d +suffix is supported and gives a debug version of the runtime. +.TP .B \-rectypes Allow arbitrary recursive types during type-checking. By default, only recursive types where the recursion goes through an object type diff --git a/stdlib/Makefile b/stdlib/Makefile index 874dcf6f9..59a2e18fb 100644 --- a/stdlib/Makefile +++ b/stdlib/Makefile @@ -42,9 +42,10 @@ installopt-prof: stdlib.p.cmxa: $(OBJS:.cmo=.p.cmx) $(CAMLOPT) -a -o stdlib.p.cmxa $(OBJS:.cmo=.p.cmx) -camlheader camlheader_ur: header.c ../config/Makefile +camlheader camlheaderd camlheader_ur: header.c ../config/Makefile if $(SHARPBANGSCRIPTS); then \ echo '#!$(BINDIR)/ocamlrun' > camlheader && \ + echo '#!$(BINDIR)/ocamlrund' > camlheaderd && \ echo '#!' | tr -d '\012' > camlheader_ur; \ else \ $(BYTECC) $(BYTECCCOMPOPTS) $(BYTECCLINKOPTS) \ @@ -52,7 +53,12 @@ camlheader camlheader_ur: header.c ../config/Makefile header.c -o tmpheader$(EXE) && \ strip tmpheader$(EXE) && \ mv tmpheader$(EXE) camlheader && \ - cp camlheader camlheader_ur; \ + cp camlheader camlheader_ur && \ + $(BYTECC) $(BYTECCCOMPOPTS) $(BYTECCLINKOPTS) \ + -DRUNTIME_NAME='"$(BINDIR)/ocamlrund"' \ + header.c -o tmpheader$(EXE) && \ + strip tmpheader$(EXE) && \ + mv tmpheader$(EXE) camlheaderd; \ fi .PHONY: all allopt allopt-noprof allopt-prof install installopt diff --git a/stdlib/Makefile.nt b/stdlib/Makefile.nt index 995a0c3fd..b21f0a375 100644 --- a/stdlib/Makefile.nt +++ b/stdlib/Makefile.nt @@ -21,11 +21,18 @@ installopt: cp stdlib.cmxa stdlib.$(A) std_exit.$(O) *.cmx $(LIBDIR) camlheader camlheader_ur: headernt.c ../config/Makefile - $(BYTECC) $(BYTECCCOMPOPTS) -c -I../byterun headernt.c + $(BYTECC) $(BYTECCCOMPOPTS) -c -I../byterun \ + -DRUNTIME_NAME='"ocamlrun"' headernt.c $(MKEXE) -o tmpheader.exe headernt.$(O) $(EXTRALIBS) rm -f camlheader.exe mv tmpheader.exe camlheader cp camlheader camlheader_ur +camlheaderd: headernt.c ../config/Makefile + $(BYTECC) $(BYTECCCOMPOPTS) -c -I../byterun \ + -DRUNTIME_NAME='"ocamlrund"' headernt.c + $(MKEXE) -o tmpheader.exe headernt.$(O) $(EXTRALIBS) + mv tmpheader.exe camlheaderd + # TODO: do not call flexlink to build tmpheader.exe (we don't need # the export table) diff --git a/stdlib/Makefile.shared b/stdlib/Makefile.shared index 64087dc9c..d1b181278 100755 --- a/stdlib/Makefile.shared +++ b/stdlib/Makefile.shared @@ -40,8 +40,16 @@ OTHERS=array.cmo list.cmo char.cmo string.cmo sys.cmo \ all: stdlib.cma std_exit.cmo camlheader camlheader_ur -install: - cp stdlib.cma std_exit.cmo *.cmi *.mli *.ml camlheader camlheader_ur $(LIBDIR) +install: install-$(RUNTIMED) + cp stdlib.cma std_exit.cmo *.cmi *.mli *.ml camlheader camlheader_ur \ + $(LIBDIR) + +install-noruntimed: +.PHONY: install-noruntimed + +install-runtimed: camlheaderd + cp camlheaderd $(LIBDIR) +.PHONY: install-runtimed stdlib.cma: $(OBJS) $(CAMLC) -a -o stdlib.cma $(OBJS) @@ -56,7 +64,7 @@ clean:: rm -f sys.ml clean:: - rm -f camlheader camlheader_ur + rm -f camlheader camlheader_ur camlheaderd .SUFFIXES: .mli .ml .cmi .cmo .cmx .p.cmx diff --git a/stdlib/camlheaderd b/stdlib/camlheaderd new file mode 100644 index 000000000..4a26863e5 --- /dev/null +++ b/stdlib/camlheaderd @@ -0,0 +1 @@ +#!/usr/local/ocaml/trunk/bin/ocamlrund diff --git a/stdlib/headernt.c b/stdlib/headernt.c index c8d23ee25..77f368afd 100644 --- a/stdlib/headernt.c +++ b/stdlib/headernt.c @@ -26,7 +26,7 @@ #pragma comment(lib , "kernel32") #endif -char * default_runtime_name = "ocamlrun"; +char * default_runtime_name = RUNTIME_NAME; static #if _MSC_VER >= 1200 diff --git a/tools/ocamlcp.ml b/tools/ocamlcp.ml index a86ae352f..0218a14fb 100644 --- a/tools/ocamlcp.ml +++ b/tools/ocamlcp.ml @@ -73,6 +73,7 @@ module Options = Main_args.Make_bytecomp_options (struct let _pp s = incompatible "-pp" let _principal = option "-principal" let _rectypes = option "-rectypes" + let _runtime_variant s = option_with_arg "-runtime-variant" s let _strict_sequence = option "-strict-sequence" let _thread () = option "-thread" () let _vmthread () = option "-vmthread" () diff --git a/utils/clflags.ml b/utils/clflags.ml index 1074d3628..b28974477 100644 --- a/utils/clflags.ml +++ b/utils/clflags.ml @@ -46,7 +46,7 @@ and principal = ref false (* -principal *) and recursive_types = ref false (* -rectypes *) and strict_sequence = ref false (* -strict-sequence *) and applicative_functors = ref true (* -no-app-funct *) -and make_runtime = ref false (* -make_runtime *) +and make_runtime = ref false (* -make-runtime *) and gprofile = ref false (* -p *) and c_compiler = ref (None: string option) (* -cc *) and no_auto_link = ref false (* -noautolink *) @@ -92,3 +92,5 @@ let std_include_dir () = let shared = ref false (* -shared *) let dlcode = ref true (* not -nodynlink *) + +let runtime_variant = ref "";; (* -runtime-variant *) diff --git a/utils/clflags.mli b/utils/clflags.mli index d5357ef39..c3a3966b5 100644 --- a/utils/clflags.mli +++ b/utils/clflags.mli @@ -76,3 +76,4 @@ val std_include_flag : string -> string val std_include_dir : unit -> string list val shared : bool ref val dlcode : bool ref +val runtime_variant : string ref |