let parse_input ?(options=None) urilist =
  let filelist = List.map (List.map Input.parse_uri) urilist in
  match Input.guess_format urilist, options with
  |Url.CudfNone -> cudf_parse_input filelist

  |Url.DebNone -> deb_parse_input Debian.Debcudf.default_options filelist
  |Url.EclipseNone -> eclipse_parse_input Debian.Debcudf.default_options filelist

  |Url.DebSome (Deb opt) -> deb_parse_input opt filelist
  |Url.EclipseSome (Eclipse opt) -> eclipse_parse_input opt filelist

  |Url.CswNone -> csw_parse_input filelist

  |Url.HdlistNone -> 
IFDEF HASRPM THEN
      let dll = 
        List.map (fun l ->
          let filelist = List.map unpack l in
          Rpm.Packages.Hdlists.input_raw filelist
        ) filelist 
      in
      rpm_load_list dll
ELSE
    fatal "hdlist Not supported. re-configure with --with-rpm"
END

  |Url.SynthesisNone -> 
IFDEF HASRPM THEN
      let dll = 
        List.map (fun l ->
          let filelist = List.map unpack l in
          Rpm.Packages.Synthesis.input_raw filelist
        ) filelist
      in
      rpm_load_list dll
ELSE
    fatal "synthesis input format not supported. re-configure with --with-rpm"
END
(*
  |Some (Url.Pgsql|Url.Sqlite), [((Url.Pgsql|Url.Sqlite) as dbtype,info,(Some query))] ->
IFDEF HASDB THEN
      let db = Db.Backend.init_database dbtype info (Idbr.parse_query query) in
      let l = Db.Backend.load_selection db (`All) in
      deb_load_list ~extras [l]
ELSE
    fatal "%s Not supported. re-configure with --with-??" (Url.scheme_to_string dbtype)
END
*)

    |s,_ -> fatal "%s Not supported" (Url.scheme_to_string s)