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
let rec mkdir_parents filename =
let dirname = Fpath.parent filename in
let dirname_str = Fpath.to_string dirname in
if not (Sys.file_exists dirname_str) then (
mkdir_parents dirname;
Unix.mkdir dirname_str 0o770;
)
let mkdir_or_exists dirname =
let dirname_str = Fpath.to_string dirname in
try
Unix.mkdir dirname_str 0o770
with Unix.Unix_error (Unix.EEXIST, _, _) ->
assert (Sys.is_directory dirname_str)
(** Creates a directory and returns the absolute path **)
let mkdir_or_exists_absolute name =
let dirName = GobFpath.cwd_append name in
mkdir_or_exists dirName;
dirName
let rmdir_if_empty dirname =
try
Unix.rmdir (Fpath.to_string dirname)
with Unix.Unix_error (Unix.ENOTEMPTY, _, _) ->
()
(** Remove directory and its content, as "rm -rf" would do. *)
let rmdir_recursive path =
let rec f path =
let path_str = Fpath.to_string path in
if Sys.is_directory path_str then begin
let files = Array.map (Fpath.add_seg path) (Sys.readdir path_str) in
Array.iter f files;
Unix.rmdir path_str
end else
Sys.remove path_str
in
f path
let exe_dir = Fpath.(parent (v Sys.executable_name))
let command_line = match Array.to_list Sys.argv with
| command :: arguments -> Filename.quote_command command arguments
| [] -> assert false
let split_time () =
let f = Sys.time () in
let i = int_of_float f in
let ms = int_of_float (BatFloat.modulo f 1.0 *. 1000.) in
i / 3600, i / 60 mod 60, i mod 60, ms
let string_of_time () =
let h,m,s,ms = split_time () in
Printf.sprintf "%02d:%02d:%02d.%03d" h m s ms
let signal_of_string =
let open Sys in
function
| "sigint" -> sigint
| "sigtstp" -> sigtstp
| "sigquit" -> sigquit
| "sigalrm" -> sigalrm
| "sigkill" -> sigkill
| "sigsegv" -> sigsegv
| "sigterm" -> sigterm
| "sigusr1" -> sigusr1
| "sigusr2" -> sigusr2
| "sigstop" -> sigstop
| "sigprof" -> sigprof
| "sigxcpu" -> sigxcpu
| s -> invalid_arg ("Unhandled signal " ^ s)
let self_signal signal = Unix.kill (Unix.getpid ()) signal