let main () =
let force_pdg =
Pdg_parameters.BuildAll.get ()
|| not (Datatype.String.Set.is_empty (Pdg_parameters.BuildFct.get ()))
in
if force_pdg then begin
Pdg_parameters.feedback "in progress...";
let do_kf_pdg kf =
let fname = Kernel_function.get_name kf in
if Pdg_parameters.BuildAll.get () ||
Datatype.String.Set.mem fname (Pdg_parameters.BuildFct.get ())
then
let pdg = !Db.Pdg.get kf in
let dot_postdom = Pdg_parameters.DotPostdomBasename.get () in
if dot_postdom <> "" then !Db.Postdominators.print_dot dot_postdom kf;
let bw = Pdg_parameters.PrintBw.get () in
Pdg_parameters.result "@[%a@]" (!Db.Pdg.pretty ~bw) pdg;
let dot_basename = Pdg_parameters.DotBasename.get () in
if dot_basename <> "" then
!Db.Pdg.extract pdg (dot_basename ^ "." ^ fname ^ ".dot")
in
!Db.Semantic_Callgraph.topologically_iter_on_functions do_kf_pdg;
if Pdg_parameters.BuildAll.get () then
Pdg_parameters.feedback "====== PDG GRAPH COMPUTED ======";
end