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

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

  |`DebSome (Deb opt) -> deb_parse_input opt filelist
  
  |`EdspSome (Edsp opt) -> edsp_parse_input opt filelist
  |`EdspNone -> edsp_parse_input Debian.Debcudf.default_options filelist

  |`EclipseSome (Eclipse opt) -> eclipse_parse_input opt filelist

  |`CswNone -> csw_parse_input filelist

  |`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

  |`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)