let main () =
  if From_parameters.PathDeps.get ()
  then Db.From.Record_From_Callbacks.extend check_pathdeps;


  let not_quiet = From_parameters.verbose_atleast 1 in
  let forcedeps = From_parameters.ForceDeps.get () in
  let forcecalldeps = From_parameters.ForceCallDeps.get () in
  if forcedeps then begin
    !Db.From.compute_all ();
    From_parameters.feedback "====== DEPENDENCIES COMPUTED ======";
    display_aux (fun fm -> From_parameters.result fm);
    From_parameters.feedback "====== END OF DEPENDENCIES ======" 
  end;
  if forcecalldeps then !Db.From.compute_all_calldeps ();
  if not_quiet && forcecalldeps then begin
    From_parameters.feedback "====== DISPLAYING CALLWISE DEPENDENCIES ======";
    !Db.From.Callwise.iter
           (fun ki d ->
              let id,typ =
                match ki with
                | Cil_types.Kglobal ->
                    "entry point",
                    Kernel_function.get_type (fst (Globals.entry_point ()))
                | Cil_types.Kstmt s ->
                    let f =
                       try
                         Kernel_function.Hptset.min_elt
                           (Db.Value.call_to_kernel_function s)
                       with Not_found -> assert false
                    in
                    let id =
                      Pretty_utils.sfprintf "%a at %a (statement %d)"
                        Kernel_function.pretty f
                        pretty_loc_simply (Kstmt s)
                        s.Cil_types.sid
                    in
                    id,
                    Kernel_function.get_type f
              in
              From_parameters.result
                "@[call %s:@\n%a@\n@]@ "
                id (Function_Froms.pretty_with_type typ) d);
    From_parameters.feedback "====== END OF CALLWISE DEPENDENCIES ======";
  end