(** This is the base part of the build system. Each file in the system is represented as a node. Node may be virtual: the node may exist before the file does. For each file, we maintain stat and MD5 information (if they exist). This case [in-]sensitivity of file names is a complex issue. We make the type abstract so we don't make a mistake. *) module Dir : Omake_node_sig.DirSig module DirSet : Lm_set_sig.LmSet with type elt = Dir.t module DirTable : Lm_map_sig.LmMap with type key = Dir.t module DirListHash : Lm_hash.HashMarshalSig with type elt = Dir.t list module DirListSet : Lm_set_sig.LmSet with type elt = DirListHash.t module DirListTable : Lm_map_sig.LmMap with type key = DirListHash.t module Node : Omake_node_sig.NodeSig with type dir = Dir.t module NodeSet : Lm_set_sig.LmSet with type elt = Node.t module NodeTable : Lm_map_sig.LmMap with type key = Node.t module NodeMTable : Lm_map_sig.LmMapList with type key = Node.t module PreNodeSet : Lm_set_sig.LmSet with type elt = Node.pre module Mount : Omake_node_sig.MountSig with type dir = Dir.t with type node = Node.t with type t = Node.mount;; type mount_info = Node.t Omake_node_sig.poly_mount_info val no_mount_info : mount_info (* * Handle known phonies. *) val create_node_or_phony : PreNodeSet.t -> mount_info -> Mount.t -> Omake_node_sig.phony_ok -> Dir.t -> string -> Node.t (* Same, but factor out the sometimes slow parser for phony names: *) type phony_name val parse_phony_name : string -> phony_name (* failsafe *) val create_node_or_phony_1 : PreNodeSet.t -> mount_info -> Mount.t -> Omake_node_sig.phony_ok -> Dir.t -> phony_name -> Node.t val node_will_be_phony : PreNodeSet.t -> Omake_node_sig.phony_ok -> Dir.t -> phony_name -> bool (* * For debugging. *) val pp_print_dir : Dir.t Lm_printf.t val pp_print_node : Node.t Lm_printf.t val pp_print_node_kind : Omake_node_sig.node_kind Lm_printf.t val pp_print_string_list : string list Lm_printf.t val pp_print_node_set : NodeSet.t Lm_printf.t val pp_print_node_list : Node.t list Lm_printf.t val pp_print_node_table : 'a NodeTable.t Lm_printf.t val pp_print_node_set_table : NodeSet.t NodeTable.t Lm_printf.t val pp_print_node_set_table_opt : NodeSet.t NodeTable.t option Lm_printf.t