let build_obligs m with_bot do_dot l_cfg_annots =
  let m_name = model_name m in
  let do_one obligs (cfg, l_annots) =
    let kf = Cil2cfg.cfg_kf cfg in
    let kf_name = Kernel_function.get_name kf in
      Wp_parameters.feedback 
        "compute for '%s' with model %s@." kf_name m_name;
    let do_annots obligs annots =
      let bhv_name = match annots.WpAnnot.behavior_name with
        | None -> Macros.name_of_default_behavior 
        | Some bhv -> bhv
      in
      Wp_parameters.feedback 
        "compute proof obligations for '%s' behavior@." bhv_name;
      try
        let obligs, restbl = wp_cfg_fun m ~with_bot obligs cfg annots in
          if do_dot then 
            (let filename = (kf_name^".wp_"^m_name) in
              ignore (cfg_dot (m_name^" results") filename cfg (Some restbl)));
          obligs
      with 
        | Calculus.InvalidModel s ->
            Wp_parameters.warning "Failed on '%s' for '%s' with model %s: %s@." 
              kf_name bhv_name m_name s; 
            obligs
        | Extlib.NotYetImplemented msg ->
            Wp_parameters.warning 
              "Failed on '%s' for '%s' with model %s. Not Implemented : %s@." 
              kf_name bhv_name m_name msg ; 
            obligs
    in List.fold_left do_annots obligs l_annots
  in let obligs = List.fold_left do_one [] l_cfg_annots in
  let obligs = 
    if List.length obligs > 0 then Some (add_glob_decls m obligs) else None
  in obligs