File: exception.ml

package info (click to toggle)
ocaml-obuild 0.2.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,456 kB
  • sloc: ml: 14,491; sh: 211; ansic: 34; makefile: 11
file content (142 lines) | stat: -rw-r--r-- 5,221 bytes parent folder | download
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
open Printf
open Helper
open Filepath

(* TODO normalize exit code *)

let show exn =
  let error fmt = eprintf ("%serror%s: " ^^ fmt) (color_white ()) (color_white ()) in
  match exn with
  | Arg.Bad err ->
      eprintf "%s\n" err;
      exit 2
  | Arg.Help h ->
      eprintf "%s\n" h;
      exit 0
  (* project file related *)
  | Project.NoConfFile ->
      error "couldn't find obuild file\n";
      exit 3
  | Project.MultipleConfFiles ->
      error "multiples obuild files found\n";
      exit 3
  | Project.FileNotFound (t, f) ->
      error "project is referencing in %s, a file %s that cannot be found\n"
        (Target.get_target_name t) (fn_to_string f);
      exit 3
  | Project.ModuleNotFound (t, m) ->
      error "project is referencing in '%s', a module %s that cannot be found\n"
        (Target.get_target_name t) (Hier.to_string m);
      exit 3
  | Project.ModuleListEmpty l ->
      error "library %s doesn't have any modules defined.\n" (Libname.to_string l);
      exit 3
  | Project.InvalidConfFile c ->
      error "configuration file appears invalid: %s\n" c;
      exit 3
  | Project.BlockSectionAsValue s ->
      error "trying to define a section %s using parameter syntax:\n" s;
      eprintf "  spurious colon between section definition and section name\n";
      exit 3
  | Project.BadOcamlVersion (ver, c) ->
      error "wrong ocaml version: actual %s expected %s\n" ver (Expr.to_string c);
      exit 3
  | Expr.CannotParseConstraints (builddep, s) ->
      error "cannot parse constraints for build dependency '%s': %s\n" builddep s;
      exit 3
  (* dist directory related *)
  | Dist.DistNotADirectory ->
      error "dist is not a directory\n";
      exit 4
  | Dist.DistNotFound ->
      error "run 'obuild configure' first\n";
      exit 4
  | Dist.MissingDestinationDirectory dir ->
      error "missing destination directory: %s\n" (Dist.to_string dir);
      exit 4
  (* types stuff *)
  | Target.TargetNameNoType s ->
      error "Unknown target '%s' with no prefix:\n" s;
      error "  targets need to start by one of lib-,exe-,bench-,test-,example-\n";
      exit 4
  | Target.TargetUnknownType (p, s) ->
      error "unknown type prefix '%s' in '%s':\n" p s;
      error "  targets need to start by one of lib-,exe-,bench-,test-,example-\n";
      exit 4
  | Target.TargetNotRecognized s ->
      error "Unknown target specified '%s'\n" s;
      exit 4
  (* reconfigure *)
  | Configure.ConfigChanged r -> (
      match r with
      | "digest" ->
          error "project file changed. run 'obuild configure' again\n";
          exit 4
      | _ ->
          error "config changed (reason=%s). run 'obuild configure' again\n" r;
          exit 4)
  | Configure.ConfigurationMissingKey k ->
      error "cannot find key %s in setup. run 'obuild configure' again\n" k;
      exit 4
  | Configure.ConfigurationTypeMismatch (k, t, v) ->
      error "%s type mismatch (got '%s') in setup key %s. run 'obuild configure' again\n" t v k;
      exit 4
  | Meta.MetaParseError (fp, err) ->
      error "unexpected parse error '%s' in meta file %s\n" err (fp_to_string fp);
      exit 4
  | Meta.ArchiveNotFound (path, dep, preds) ->
      error "archive %s not found in %s (%s)\n"
        (Utils.showList "," Meta.Predicate.to_string preds)
        (Libname.to_string dep) (fp_to_string path);
      exit 4
  | Analyze.SublibraryNotFound dep ->
      error "dependency %s not found\n" (Libname.to_string dep);
      exit 4
  (* build related failure *)
  | Prepare.Module.DependsItself m ->
      error "cyclic dependency module detected in module %s\n" (Hier.to_string m);
      exit 5
  | Prepare.Module.NotFound (paths, m) ->
      error "module not found %s - search paths:\n" (Hier.to_string m);
      List.iter (fun path -> eprintf "\t%s\n" (fp_to_string path)) paths;
      exit 5
  | Prepare.Module.DependenciesProblem l ->
      error "cyclic dependency detected. cannot infer dependencies between modules:\n";
      eprintf "\t%s\n" (Utils.showList ", " Hier.to_string l);
      exit 5
  | Build.CompilationFailed e ->
      eprintf "\n%s\n%!" e;
      exit 6
  | Build.CCompilationFailed e ->
      eprintf "\n%s\n%!" e;
      exit 6
  | Buildprogs.LinkingFailed e ->
      eprintf "\n%s\n%!" e;
      exit 7
  | Dependencies.BuildDepAnalyzeFailed e ->
      eprintf "\n%s\n%!" e;
      exit 8
  | Dependencies.DependenciesMissing missing -> (
      match missing with
      | [] -> assert false
      | [dep] ->
          error "missing dependency '%s'\n" dep;
          exit 9
      | _ ->
          eprintf "missing dependencies:\n%s\n" (Utils.showList "\n" (fun x -> x) missing);
          exit 9)
  (* others exception *)
  | Unix.Unix_error (err, fname, params) ->
      error "unexpected unix error: \"%s\" during %s(%s)\n" (Unix.error_message err) fname params;
      exit 20
  | Filepath.InvalidFilename f ->
      error "the filename \"%s\" is not valid, it contains a directory separator\n" f;
      exit 30
  | Utils.FileNotFoundInPaths (ds, f) ->
      error "File %s not found in directories %s\n" (fn_to_string f)
        (Utils.showList "; " fp_to_string ds);
      exit 40
  | Exit -> ()
  | e ->
      eprintf "uncaught exception\n";
      raise e