File: ben.mlp

package info (click to toggle)
ben 1.14
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 672 kB
  • sloc: ml: 4,116; sh: 345; javascript: 78; ansic: 39; makefile: 29; python: 18
file content (78 lines) | stat: -rw-r--r-- 3,025 bytes parent folder | download | duplicates (2)
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
68
69
70
71
72
73
74
75
76
77
78
(**************************************************************************)
(*  Copyright © 2009 Stéphane Glondu <steph@glondu.net>                   *)
(*                                                                        *)
(*  This program is free software: you can redistribute it and/or modify  *)
(*  it under the terms of the GNU Affero General Public License as        *)
(*  published by the Free Software Foundation, either version 3 of the    *)
(*  License, or (at your option) any later version, with the additional   *)
(*  exemption that compiling, linking, and/or using OpenSSL is allowed.   *)
(*                                                                        *)
(*  This program is distributed in the hope that it will be useful, but   *)
(*  WITHOUT ANY WARRANTY; without even the implied warranty of            *)
(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *)
(*  Affero General Public License for more details.                       *)
(*                                                                        *)
(*  You should have received a copy of the GNU Affero General Public      *)
(*  License along with this program.  If not, see                         *)
(*  <http://www.gnu.org/licenses/>.                                       *)
(**************************************************************************)

open Ben_frontends.Frontend

let static_frontends = [ @STATIC_FRONTENDS@ ]

let () = List.iter register_frontend static_frontends

let usage_msg =
  let msg = Printf.sprintf
    "Usage: %s frontend [options]"
    (Filename.basename Sys.argv.(0))
  in
  let msg = Printf.sprintf
    "%s\nAvailable frontends:"
    msg
  in
  let msg = Printf.sprintf
    "%s\n%s"
    msg
    (String.concat
       "\n"
       (List.map
          (fun name ->
            Printf.sprintf " - %s" name
          )
          (available_frontends ())))
  in
  Printf.sprintf "%s\n%s" msg "Available options:"

let () = Arg.parse_dynamic
  Ben_frontends.Frontend.spec
  (fun name ->
    if !Arg.current = 1 then
      try
        let frontend = get_frontend name in
        Ben_frontends.Frontend.set_selected_frontend frontend;
        Ben_frontends.Frontend.spec := Arg.align
          (!Ben_frontends.Frontend.spec @ (Ben_frontends.Frontend.get_selected_frontend ()).help)
      with _ ->
        ()
    else
      let frontend = Ben_frontends.Frontend.get_selected_frontend () in
      frontend.anon_fun name
  )
  usage_msg

let () =
  if !Ben_frontends.Clflags.show_version then begin
    Printf.printf "Ben %s (built on %s)\n"
      Ben.Version.version
      Ben.Version.build_date;
    exit 0
  end
  else
    let () = Parmap.set_default_ncores (Ben.Parallel.get_level ()) in
    let frontend = Ben_frontends.Frontend.get_selected_frontend () in
    let benrc = Filename.concat (Sys.getenv "HOME") ".benrc" in
    if !Ben_frontends.Clflags.use_benrc && Sys.file_exists benrc then
      ignore (read_config (Ben.Types.File benrc));
    frontend.main ()