84 lines
2.7 KiB
OCaml
84 lines
2.7 KiB
OCaml
(***********************************************************************)
|
|
(* *)
|
|
(* ocamlbuild *)
|
|
(* *)
|
|
(* Nicolas Pouillard, Berke Durak, projet Gallium, INRIA Rocquencourt *)
|
|
(* *)
|
|
(* Copyright 2007 Institut National de Recherche en Informatique et *)
|
|
(* en Automatique. All rights reserved. This file is distributed *)
|
|
(* under the terms of the GNU Library General Public License, with *)
|
|
(* the special exception on linking described in file ../LICENSE. *)
|
|
(* *)
|
|
(***********************************************************************)
|
|
|
|
|
|
(* Original author: Berke Durak *)
|
|
(* FDA *)
|
|
|
|
open Log
|
|
open Hygiene
|
|
;;
|
|
|
|
exception Exit_hygiene_failed
|
|
;;
|
|
|
|
let laws =
|
|
[
|
|
{ law_name = "Leftover OCaml compilation files";
|
|
law_rules = [Not ".cmo"; Not ".cmi"; Not ".cmx"; Not ".cma"; Not ".cmxa"];
|
|
law_penalty = Fail };
|
|
{ law_name = "Leftover OCaml type annotation files";
|
|
law_rules = [Not ".annot"];
|
|
law_penalty = Warn };
|
|
{ law_name = "Leftover object files";
|
|
law_rules = [Not ".o"; Not ".a"; Not ".so"; Not ".obj"; Not ".lib"; Not ".dll"];
|
|
law_penalty = Fail };
|
|
{ law_name = "Leftover ocamlyacc-generated files";
|
|
law_rules = [Implies_not(".mly",".ml"); Implies_not(".mly",".mli")];
|
|
law_penalty = Fail };
|
|
{ law_name = "Leftover ocamllex-generated files";
|
|
law_rules = [Implies_not(".mll",".ml")];
|
|
law_penalty = Fail };
|
|
{ law_name = "Leftover dependency files";
|
|
law_rules = [Not ".ml.depends"; Not ".mli.depends"];
|
|
law_penalty = Fail }
|
|
]
|
|
|
|
let inspect entry =
|
|
dprintf 5 "Doing sanity checks";
|
|
let evil = ref false in
|
|
match Hygiene.check
|
|
?sanitize:
|
|
begin
|
|
if !Options.sanitize then
|
|
Some(Pathname.concat !Options.build_dir !Options.sanitization_script)
|
|
else
|
|
None
|
|
end
|
|
laws entry
|
|
with
|
|
| [] -> ()
|
|
| stuff ->
|
|
List.iter
|
|
begin fun (law, msgs) ->
|
|
Printf.printf "%s: %s:\n"
|
|
(match law.law_penalty with
|
|
| Warn -> "Warning"
|
|
| Fail ->
|
|
if not !evil then
|
|
begin
|
|
Printf.printf "IMPORTANT: I cannot work with leftover compiled files.\n%!";
|
|
evil := true
|
|
end;
|
|
"ERROR")
|
|
law.law_name;
|
|
List.iter
|
|
begin fun msg ->
|
|
Printf.printf " %s\n" msg
|
|
end
|
|
msgs
|
|
end
|
|
stuff;
|
|
if !evil then raise Exit_hygiene_failed;
|
|
;;
|