(* * Copyright (c) 2009 - 2013 Monoidics ltd. * Copyright (c) 2013 - present Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. *) open! IStd (** initial process times *) val initial_times : Unix.process_times (** precise time of day at the start of the analysis *) val initial_timeofday : float (** Compute a 32-character hexadecimal crc using the Digest module *) val string_crc_hex32 : string -> string (** copy a source file, return the number of lines, or None in case of error *) val copy_file : string -> string -> int option (** read a source file and return a list of lines, or None in case of error *) val read_file : string -> string list option (** Convert a filename to an absolute one if it is relative, and normalize "." and ".." *) val filename_to_absolute : root:string -> string -> string (** Convert an absolute filename to one relative to a root directory. Returns [None] if filename is not under root. *) val filename_to_relative : root:string -> string -> string option (** type for files used for printing *) type outfile = { fname : string; (** name of the file *) out_c : out_channel; (** output channel *) fmt : Format.formatter (** formatter for printing *) } (** create an outfile for the command line, the boolean indicates whether to do demangling when closing the file *) val create_outfile : string -> outfile option (** operate on an outfile reference if it is not None *) val do_outf : outfile option -> (outfile -> unit) -> unit (** close an outfile *) val close_outf : outfile -> unit (** Functional fold function over all the file of a directory *) val directory_fold : ('a -> string -> 'a) -> 'a -> string -> 'a (** Functional iter function over all the file of a directory *) val directory_iter : (string -> unit) -> string -> unit (** Returns true if a given directory is empty. The directory is assumed to exist. *) val dir_is_empty : string -> bool val read_json_file : string -> (Yojson.Basic.json, string) Result.t val with_file_in : string -> f:(In_channel.t -> 'a) -> 'a val with_file_out : string -> f:(Out_channel.t -> 'a) -> 'a val write_json_to_file : string -> Yojson.Basic.json -> unit val consume_in : in_channel -> unit val with_process_in : string -> (in_channel -> 'a) -> ('a * Unix.Exit_or_signal.t) val shell_escape_command : string list -> string (** create a directory if it does not exist already *) val create_dir : string -> unit (** [realpath path] returns path with all symbolic links resolved. It caches results of previous calls to avoid expensive system calls *) val realpath : string -> string (** wraps a function expecting 2 arguments in another that temporarily redirects stderr to /dev/null for the duration of the function call *) val suppress_stderr2 : ('a -> 'b -> 'c) -> 'a -> 'b -> 'c (** [compare_versions v1 v2] returns 1 if v1 is newer than v2, -1 if v1 is older than v2 and 0 if they are the same version. The versions are strings of the shape "n.m.t", the order is lexicographic. *) val compare_versions : string -> string -> int