123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167(*
* Copyright 2017-2019 Cedric LE MOIGNE, cedlemo@gmx.com
* This file is part of OCaml-GObject-Introspection.
*
* OCaml-GObject-Introspection is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* OCaml-GObject-Introspection is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OCaml-GObject-Introspection. If not, see <http://www.gnu.org/licenses/>.
*)openCtypesopenForeignopenConversionstyperepository=unitptroptionletrepository_typ:repositorytyp=ptr_optvoidtypetypelib=unitptrlettypelib:typelibtyp=ptrvoidtypegerror_tletgerror:gerror_tstructuretyp=structure"GError"letf_message=fieldgerror"message"(string)let_=sealgerrorletget_default=foreign"g_irepository_get_default"(void@->returningrepository_typ)letrequire?repositorynamespace?version()=letrequire_raw=foreign"g_irepository_require"(repository_typ@->string@->string_opt@->int@->ptr(ptrgerror)@->returning(ptr_optvoid))inleterror_addr=allocate_n(ptrgerror)~count:1inletrepo=matchrepositorywithNone->None|Somer->rinmatchrequire_rawreponamespaceversion0error_addrwith|None->letmessage=beginmatchversionwith|None->"Unable to load namespace "^namespace|Somev->Printf.sprintf"Unable to load namespace %s version %s"namespacevendinErrormessage|Sometypelib_ptr->matchcoerce(ptrgerror)(ptr_optgerror)(!@error_addr)with|None->lettypelib_ptr'=coerce(ptrvoid)(typelib)typelib_ptrinOktypelib_ptr'|Someerror->Error(getf!@errorf_message)letget_loaded_namespaces?repository()=letget_loaded_namespaces_raw=foreign"g_irepository_get_loaded_namespaces"(repository_typ@->returningcarray_of_strings)inletrepo=matchrepositorywithNone->None|Somer->rinletc_arr=get_loaded_namespaces_rawrepoincarray_of_strings_to_listc_arrletget_dependencies?repositorynamespace=letget_dependencies_raw=foreign"g_irepository_get_dependencies"(repository_typ@->string@->returningcarray_of_strings)inletrepo=matchrepositorywithNone->None|Somer->rinletc_arr=get_dependencies_rawreponamespaceincarray_of_strings_to_listc_arrletget_c_prefix?repositorynamespace=letget_c_prefix_raw=foreign"g_irepository_get_c_prefix"(repository_typ@->string@->returningstring)inletrepo=matchrepositorywithNone->None|Somer->ringet_c_prefix_rawreponamespaceletget_version?repositorynamespace=letget_version_raw=foreign"g_irepository_get_version"(repository_typ@->string@->returningstring)inletrepo=matchrepositorywithNone->None|Somer->ringet_version_rawreponamespaceletget_typelib_path?repositorynamespace=letget_typelib_path_raw=foreign"g_irepository_get_typelib_path"(repository_typ@->string@->returningstring)inletrepo=matchrepositorywithNone->None|Somer->ringet_typelib_path_rawreponamespaceletenumerate_versions?repositorynamespace=letenumerate_versions_raw=foreign"g_irepository_enumerate_versions"(repository_typ@->string@->returning(ptr_optglist))inletrepo=matchrepositorywithNone->None|Somer->rinmatchenumerate_versions_rawreponamespacewith|None->[]|Someglist_ptr->glist_of_strings_to_listglist_ptrletget_search_path()=letget_search_path_raw=foreign"g_irepository_get_search_path"(void@->returning(ptr_optgslist))inmatchget_search_path_raw()with|None->[]|Somegslist_ptr->gslist_of_strings_to_listgslist_ptrletprepend_search_path=foreign"g_irepository_prepend_search_path"(string@->returningvoid)letfind_by_name?repositorynamespacename=letfind_by_name_raw=foreign"g_irepository_find_by_name"(repository_typ@->string@->string@->returning(ptr_optBase_info.baseinfo))inletrepo=matchrepositorywithNone->None|Somer->rinmatchfind_by_name_rawreponamespacenamewith|None->None|Someinfo->let_=Gc.finalise(funi->Base_info.base_info_unrefi)infoinSomeinfoletget_n_infos?repositorynamespace=letget_n_infos_raw=foreign"g_irepository_get_n_infos"(repository_typ@->string@->returningint)inletrepo=matchrepositorywithNone->None|Somer->ringet_n_infos_rawreponamespaceletget_info?repositorynamespacen=letget_info_raw=foreign"g_irepository_get_info"(repository_typ@->string@->int@->returning(ptrBase_info.baseinfo))inletrepo=matchrepositorywithNone->None|Somer->rinletmax_infos=get_n_infos?repositorynamespaceinif(n<0||n>=max_infos)thenraise(Failure"Array Index out of bounds")elseletinfo=get_info_rawreponamespaceninlet_=Gc.finalise(funi->Base_info.base_info_unrefi)infoininfoletget_shared_library?repositorynamespace=letget_shared_library_raw=foreign"g_irepository_get_shared_library"(repository_typ@->string@->returningstring_opt)inletrepo=matchrepositorywithNone->None|Somer->ringet_shared_library_rawreponamespaceletprepend_library_path=foreign"g_irepository_prepend_library_path"(string@->returningvoid)typegtype=int64letgtype:gtypetyp=int64_tletfind_by_gtype?repositorygtyp=letfind_by_gtype_raw=foreign"g_irepository_find_by_gtype"(repository_typ@->gtype@->returning(ptr_optBase_info.baseinfo))inletrepo=matchrepositorywithNone->None|Somer->rinmatchfind_by_gtype_rawrepogtypwith|None->None|Someinfo->let_=Gc.finalise(funi->Base_info.base_info_unrefi)infoinSomeinfo