let main () =
  let force_pdg = 
    Pdg_parameters.BuildAll.get ()
    || not (Cilutil.StringSet.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 () ||
        Cilutil.StringSet.mem fname (Pdg_parameters.BuildFct.get ())
      then begin
        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;
        if Pdg_parameters.DotBasename.get () <> "" then
          !Db.Pdg.extract pdg
            (Pdg_parameters.DotBasename.get ()^"."^fname^".dot")
      end
    in
    !Db.Semantic_Callgraph.topologically_iter_on_functions do_kf_pdg;
    if Pdg_parameters.BuildAll.get () then
      Pdg_parameters.feedback "====== PDG GRAPH COMPUTED ======";
  end