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