public
Description: Simulated annealing implementation in OCaml
Homepage:
Clone URL: git://github.com/khigia/ocaml-anneal.git
ocaml-anneal / myocamlbuild.ml
100644 67 lines (55 sloc) 3.119 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
open Ocamlbuild_plugin
open Command
(* http://brion.inria.fr/gallium/index.php/Using_ocamlfind_with_ocamlbuild *)
 
(* these functions are not really officially exported *)
let run_and_read = Ocamlbuild_pack.My_unix.run_and_read
let blank_sep_strings = Ocamlbuild_pack.Lexers.blank_sep_strings
   
(* this lists all supported packages *)
let find_packages () =
    blank_sep_strings &
        Lexing.from_string &
        run_and_read "ocamlfind list | cut -d' ' -f1"
                     
(* this is supposed to list available syntaxes, but I don't know how to do it. *)
let find_syntaxes () = ["camlp4o"; "camlp4r"]
                        
(* ocamlfind command *)
let ocamlfind x = S[A"ocamlfind"; x]
 
let _ = dispatch begin function
    | Before_options ->
        (* by using Before_options one let command line options have an higher priority *)
        (* on the contrary using After_options will guarantee to have the higher priority *)
 
        (* override default commands by ocamlfind ones *)
        Options.ocamlc := ocamlfind & A"ocamlc";
        Options.ocamlopt := ocamlfind & A"ocamlopt";
        Options.ocamldep := ocamlfind & A"ocamldep";
        Options.ocamldoc := ocamlfind & A"ocamldoc"
    | After_rules ->
        (*make_tests (test_files ());*)
        
        (* When one link an OCaml library/binary/package, one should use -linkpkg *)
        flag ["ocaml"; "link"] & A"-linkpkg";
                
        (* For each ocamlfind package one inject the -package option when
* compiling, computing dependencies, generating documentation and
* linking. *)
        List.iter begin fun pkg ->
            flag ["ocaml"; "compile"; "pkg_"^pkg] & S[A"-package"; A pkg];
            flag ["ocaml"; "ocamldep"; "pkg_"^pkg] & S[A"-package"; A pkg];
            flag ["ocaml"; "doc"; "pkg_"^pkg] & S[A"-package"; A pkg];
            flag ["ocaml"; "link"; "pkg_"^pkg] & S[A"-package"; A pkg];
        end (find_packages ());
                                                                                                         
        (* Like -package but for extensions syntax. Morover -syntax is useless
* when linking. *)
        List.iter begin fun syntax ->
            flag ["ocaml"; "compile"; "syntax_"^syntax] & S[A"-syntax"; A syntax];
            flag ["ocaml"; "ocamldep"; "syntax_"^syntax] & S[A"-syntax"; A syntax];
            flag ["ocaml"; "doc"; "syntax_"^syntax] & S[A"-syntax"; A syntax];
        end (find_syntaxes ());
        
        (* The default "thread" tag is not compatible with ocamlfind.
Indeed, the default rules add the "threads.cma" or "threads.cmxa"
options when using this tag. When using the "-linkpkg" option with
ocamlfind, this module will then be added twice on the command line.
To solve this, one approach is to add the "-thread" option when using
the "threads" package using the previous plugin.
*)
        flag ["ocaml"; "pkg_threads"; "compile"] (S[A "-thread"]);
        flag ["ocaml"; "pkg_threads"; "link"] (S[A "-thread"])
    | _ -> ()
end