let parse_package_stanza filter archs par =
  let parse_archs = parse_architectures archs in
  let parse_arch = Packages.lexbuf_wrapper Packages_parser.archlist_top in
  let p () = {
    name = parse_s ~err:"(MISSING NAME)" parse_name "Package" par;
    version = parse_s ~err:"(MISSING VERSION)" parse_version "Version" par;
    architecture = parse_s ~err:"(MISSING ARCH)" parse_archs "Architecture" par;
    build_depends = 
      parse_s ~opt:[] ~multi:true parse_builddepsformula "Build-Depends" par; 
    build_depends_indep =
      parse_s ~opt:[] ~multi:true parse_builddepsformula "Build-Depends-Indep" par;
    build_conflicts = 
      parse_s ~opt:[] ~multi:true parse_builddepslist "Build-Conflicts" par;
    build_conflicts_indep = 
      parse_s ~opt:[] ~multi:true parse_builddepslist "Build-Conflicts-Indep" par 
    }
  in
  try
    if Option.is_none filter then Some (p ())
    else if (Option.get filter) par then Some(p ()) 
    else None
  with Packages.IgnorePackage s -> begin
    let n = parse_s ~opt:"?" parse_name "Package" par in
    let v = parse_s ~opt:"?" parse_version "Version" par in
    let al = parse_s ~opt:[] parse_arch "Architecture" par in
    debug "Ignoring Source Package (%s,%s,%s) : %s" n v (String.concat "," al) s;
    None
  end