mleternal
Next example

All examples

_

Incremental work
Many source trees
Use libraries
Find a library
Scripting with libs
Easy scripting
Inject at compile time
Inject at link time
Targets guessed
Override stdlib
Prioritize sources
Many modules
String of file
Hello world!

Work continuously and enjoy less red tape

Invitation/

hello_pid.ml

let pid = Unix.getpid ()
let () = print_endline ("Hello from process "^(string_of_int pid))

Working.ml

let hard hours = BatOption.map (fun count -> count + 1
~$ cd Invitation
~/Invitation$ mleternal hello_pid.ml

‣ Error: 
 Error on dynamically loaded library: dllunix.so: dllunix.so: cannot open shared object file: No such file or directory
Executed in «/home/user/.cache/mleternal/acting/acting/0000003C»:
ocamlc -nostdlib -thread -g -o hello_pid.byte -use-runtime /usr/bin/ocamlrun stdlib.cma unix.cma hello_pid.cmo
What is to be executed is not built: /home/user/test_case/hello_pid.byte
~/Invitation$ mleternal Working.cmx

‣ Ready.
~/Invitation$ echo \) hours >>Working.ml

Compile projects that span multiple source trees

Trees/

TreeB/

main.ml

let () = Foo.bar ()

TreeA/

Foo.ml

let bar () = print_endline "OK"
~$ cd Trees
~/Trees$ mleternal --library-tree=TreeA TreeB
~/Trees$ mleternal TreeB/main.ml
What is to be executed is not built: /home/user/test_case/TreeB/main.byte

Use all the available libraries freely

Bat/

main.ml

let fresh_array : int BatDynArray.t = BatDynArray.create ()

let () = print_endline "OK"
~$ cd Bat
~/Bat$ mleternal main.ml

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «XString» (with unknown hash) chosen by interface «XString» with hash = b12e3c22734daf58e9268128c36168e6 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «XArray» (with unknown hash) chosen by interface «XArray» with hash = 496e4aec1b01e3c28ceb6b5a495f21ff 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «Unimap» (with unknown hash) chosen by interface «Unimap» with hash = 1596f6d1dc9fcbcf7f602e351dd14594 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «Unidata» (with unknown hash) chosen by interface «Unidata» with hash = a62bcfc17c92748d50b81f468daf6a24 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «UnicodeString» (with unknown hash) chosen by interface «UnicodeString» with hash = 1c5073700ea3bce16b0211de9fd30df0 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «UText» (with unknown hash) chosen by interface «UText» with hash = e0115fe4b63edf89c8e4b731885e903f 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «UTF8» (with unknown hash) chosen by interface «UTF8» with hash = 38f6046d22a25fef8867288f82da9a05 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «UTF16» (with unknown hash) chosen by interface «UTF16» with hash = 6a38c2003a88a6234e6df2cd7b41f704 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «USet» (with unknown hash) chosen by interface «USet» with hash = 9995f57189989df980efaec95f46e4ed 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «UReStrParser» (with unknown hash) chosen by interface «UReStrParser» with hash = 1ff1f27095159cc43c8528ce194d82c8 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «UReStrLexer» (with unknown hash) chosen by interface «UReStrLexer» with hash = 01ee994ca1574f2c36155f72b6e6521e 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «UReStr» (with unknown hash) chosen by interface «UReStr» with hash = 0538cc632ba0ec47743aa12ae39041d4 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «URe» (with unknown hash) chosen by interface «URe» with hash = 6b1eeb284c6a0506b62a1413dafdf8d7 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «UPervasives» (with unknown hash) chosen by interface «UPervasives» with hash = d4a2acb2fad785ea0ab42d092c9f73c4 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «UNF» (with unknown hash) chosen by interface «UNF» with hash = 9cfffc5688dd1e52c171b959c1221595 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «UMap» (with unknown hash) chosen by interface «UMap» with hash = 30e33af81fca7f223d6f2a9f89a66e91 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «ULine» (with unknown hash) chosen by interface «ULine» with hash = 43f2a945acb0e97976fdab5ee214d4ef 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «UCol» (with unknown hash) chosen by interface «UCol» with hash = 874294b2aa255cf4d87f655b359cd381 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «UCharTbl» (with unknown hash) chosen by interface «UCharTbl» with hash = a090667d2684875010d9eb7ad94beb60 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «UCharInfo» (with unknown hash) chosen by interface «UCharInfo» with hash = e67d326b918713a4783443163919846b 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «UChar» (with unknown hash) chosen by interface «UChar» with hash = 14d3318faa1b822c8b5907075c946829 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «UCS4» (with unknown hash) chosen by interface «UCS4» with hash = 0257f424038d9b4447551260d7a5d0a4 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «Tbl31» (with unknown hash) chosen by interface «Tbl31» with hash = 681adeafa6f1c30784e40c4908989c6d 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «SubText» (with unknown hash) chosen by interface «SubText» with hash = 959e675faac85e5292309c00a2c9d777 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «StringPrep_data» (with unknown hash) chosen by interface «StringPrep_data» with hash = 6e9c55cc51c980f754a5a31010dfc5de 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «StringPrep» (with unknown hash) chosen by interface «StringPrep» with hash = 286993d4fe53597160f60b2e69a60cae 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «OOChannel» (with unknown hash) chosen by interface «OOChannel» with hash = 1434a5cbe4ae982c01e2b4695542550a 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «Locale» (with unknown hash) chosen by interface «Locale» with hash = 27ca1a736ab0e67ac78d8b8afed4652c 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «ISet» (with unknown hash) chosen by interface «ISet» with hash = 894154b6d063281c810963bad1b0c868 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «IMap» (with unknown hash) chosen by interface «IMap» with hash = bea101f88915f5cf76013fc41b42ad1b 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «Hangul» (with unknown hash) chosen by interface «Hangul» with hash = a23611c39632341b495c7a15c645c895 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «Database» (with unknown hash) chosen by interface «Database» with hash = 6e40d60fe4eae634148126911d6968dd 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «ConfigInt» (with unknown hash) chosen by interface «ConfigInt» with hash = c15ecd1355bfc3ab3c025f6b5deb23cd 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «Charmap» (with unknown hash) chosen by interface «Charmap» with hash = e79ad1ed980bdf3f63d2a6dbf403b393 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «CharEncoding» (with unknown hash) chosen by interface «CharEncoding» with hash = fb1c772ea2ad60bd6d494dacba3e8635 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «CaseMap» (with unknown hash) chosen by interface «CaseMap» with hash = dffce0f78f98ae104d82e2de88dbcd2b 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «CamomileLibrary» (with unknown hash) chosen by interface «CamomileLibrary» with hash = 10d9a64db94395c4393699983b6ac739 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «CamomileDefaultConfig» (with unknown hash) chosen by interface «CamomileDefaultConfig» with hash = 762d857d75736fa78f48e9b75cfd871c 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «Bytesvect» (with unknown hash) chosen by interface «Bytesvect» with hash = 4be4b9f31b0c42e560628f80089e7773 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «Byte_labeled_dag» (with unknown hash) chosen by interface «Byte_labeled_dag» with hash = 577dc7d42a956388177144395f66819b 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «Bitsvect» (with unknown hash) chosen by interface «Bitsvect» with hash = dd69b69fb6cfda82b3541b4877d84681 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/camomile/camomile.link_node_cma` 
This module uses module implementation «AvlTree» (with unknown hash) chosen by interface «AvlTree» with hash = 05afec29847f5b1cc3cbcde95fee5383 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: /usr/lib/ocaml/batteries/batteries.link_node_cma` 
This module uses module implementation «CamomileLibrary» (with unknown hash) chosen by interface «CamomileLibrary» with hash = 10d9a64db94395c4393699983b6ac739 
The following compiled module implementations are tied to the required interface and visible with equal priority:
/usr/lib/ocaml/camomile/camomileLibrary.cma
/usr/lib/ocaml/camomile/camomile.cma

‣ Error: 
 Error on dynamically loaded library: dllbigarray.so: dllbigarray.so: cannot open shared object file: No such file or directory
Executed in «/home/user/.cache/mleternal/acting/acting/00000051»:
ocamlc -nostdlib -thread -g -o main.byte -use-runtime /usr/bin/ocamlrun stdlib.cma bigarray.cma camomile.cma nums.cma str.cma unix.cma threads.cma batteries.cma main.cmo
What is to be executed is not built: /home/user/test_case/main.byte

Use not yet available libraries freely, you will be advised how to install them

Install_proposal/

Shrink.ml

open Gavl

let video_shrink frame_format =
  {frame_format with Video
  .frame_width = frame_format.Video.frame_width / 2
  ;frame_height = frame_format.Video.frame_height / 2
  ;image_width = frame_format.Video.image_width / 2
  ;image_height = frame_format.Video.image_height / 2
  ;pixel_width = frame_format.Video.pixel_width / 2
  ;pixel_height = frame_format.Video.pixel_height / 2
  }
~$ cd Install_proposal
~/Install_proposal$ mleternal Shrink.cmi --once

‣ Hint: /home/user/test_case/Shrink.ml 
There is no top-level module called Gavl in the given source trees.
The module Gavl can be found in:
libgavl-ocaml-dev (package)

‣ Error: /home/user/test_case/Shrink.ml line 1 column 0 - 9 
 Unbound module Gavl

Feel the ease of scripting since all the installed libraries are directly available

Unix/

now.ml

let () =
  let now = Unix.time () in
  let path = Unix.getenv "PATH" in
  Printf.printf "Now is %f and PATH=%s\n" now path
~$ cd Unix
~/Unix$ mleternal now.ml

‣ Error: 
 Error on dynamically loaded library: dllunix.so: dllunix.so: cannot open shared object file: No such file or directory
Executed in «/home/user/.cache/mleternal/acting/acting/0000004C»:
ocamlc -nostdlib -thread -g -o now.byte -use-runtime /usr/bin/ocamlrun stdlib.cma unix.cma now.cmo
What is to be executed is not built: /home/user/test_case/now.byte

Easy scripting with multiple OCaml modules

Scripting/

Bar.ml

let zz = 4

Foo.ml

let a = 2 + Bar.zz

script.ml

let arguments = List.tl (Array.to_list Sys.argv)

let x = Foo.a + 2

let _ = List.iter print_endline ("Script arguments:" :: arguments)
~$ cd Scripting
~/Scripting$ mleternal script.ml foo -f -foo -- -foo
Script arguments:
foo
-f
-foo
--
-foo

Use mutable data to collect what is injected by modules referenced in an isolated place

Compile_time/

main.ml

module InjectionList = InjectionList

let () = Foo.foobarize ()

Injected2.ml

let () = Foo.cranked := "Injected2"

Foo.ml

let cranked = ref "Miserable"

let all_foobarizers = ref []

let add_foobarizer foobarizer =
  all_foobarizers := foobarizer :: !all_foobarizers

let foobarize () =
  (print_endline !cranked
  ;List.iter (fun fb -> fb ()) !all_foobarizers
  )

InjectionList.ml

module Injected1 = Injected1
module Injected2 = Injected2

Injected1.ml

let foobarizer () = print_endline "Injected1"

let () = Foo.add_foobarizer foobarizer
~$ cd Compile_time
~/Compile_time$ mleternal main.ml
Injected2
Injected1

Introduce additional modules at link-time to let them inject something to mutable values

Link_time/

main.ml

let _ = Foo.foobarize ()

Injected2.ml

let _ = Foo.cranked := "Injected2"

main.link_with

Injected1
Injected2

Foo.ml

let cranked = ref "Miserable"

let all_foobarizers = ref []

let add_foobarizer foobarizer =
  all_foobarizers := foobarizer :: !all_foobarizers

let foobarize () =
  (print_endline !cranked
  ;List.iter (fun fb -> fb ()) !all_foobarizers
  )

Injected1.ml

let foobarizer () = print_endline "Injected1"

let _ = Foo.add_foobarizer foobarizer
~$ cd Link_time
~/Link_time$ mleternal main.ml

Let mleternal guess targets

Guess_target/

Foo.ml

let a = 2 + 1

hello.ml

let x = Foo.a

let () = print_endline "Hello world!"
~$ cd Guess_target
~/Guess_target$ mleternal
Fatal error:
Lost connection to server

‣ Working...


Override modules of the stanadard library

Priority_over_stdlib/

TreeB/

main.ml

let () = Array.create (); Foo.bar ()

std_exit.ml

(* This empty Std_exit can be linked with our redefined Pervasives *)

Foo.ml

let bar () = print_endline "B: Foo.bar"

Array.ml

let create () = print_endline "B: Array.create"

Pervasives.ml

let print_endline ss = ()

TreeA/

Foo.ml

let bar () = assert false
~$ cd Priority_over_stdlib
~/Priority_over_stdlib$ mleternal --library-tree=TreeA --tree=TreeB
~/Priority_over_stdlib$ mleternal TreeB/main.native --once
Fatal error:
Lost connection to server

Override modules defined in other source trees with local ones

Prioritized/

TreeB/

main.ml

let () = Foo.bar ()

Foo.ml

let bar () = print_endline "OK"

TreeA/

Foo.ml


~$ cd Prioritized
~/Prioritized$ mleternal --library-tree=TreeA --tree=TreeB
~/Prioritized$ mleternal TreeB/main.ml
What is to be executed is not built: /home/user/test_case/TreeB/main.byte

Compile and link multiple modules

Multiple_modules/

Bar.ml

let zz = 4

Foo.ml

let a = 2 + Bar.zz

hello.ml

let () = print_endline "Hello world!"

let x =
  let unused = Foo.a in
  1 (*Foo.a*)
~$ cd Multiple_modules
~/Multiple_modules$ mleternal hello.ml

‣ Error: /home/user/test_case/hello* 
No way to build {%.byte} from {} 
 To see the list of available production rules run:
mleternal --show-rules
What is to be executed is not built: /home/user/test_case/hello.byte

Use content of a file, which is available as a value called "content" in a module generated for this purpose

module_of_string/

Admonition

It's OK

hello.ml

let () = print_string Admonition__file_content.content
~$ cd module_of_string
~/module_of_string$ mleternal hello.ml

Minimal example

HelloWorld/

hello.ml

let () = print_endline "Hello world!"

(no test results available)

downloadmleternal-0.2.tar.bz2 downloadinstall-from-fresh-sources.sh

Development status

_
rev 123918 failures
Name:           mleternal
Purpose:        incrementally rebuild OCaml programs as source code evolves
License:        GPLv3+
Homepage:       http://mleternal.forge.ocamlcore.org/
Sources:        http://hg.ocamlcore.org/cgi-bin/hgwebdir.cgi/mleternal/mleternal/
Author:         Dawid Toton <d0@wp.pl>
Documentation:  http://mleternal.forge.ocamlcore.org/mleternal.1.html
Reporting bugs: https://forge.ocamlcore.org/tracker/?atid=766&group_id=171&func=browse
Copyright:      Copyright © 2010 Dawid Toton <d0@wp.pl>
See also:       A more flexible tool: http://omake.metaprl.org