OBus
====

[![Build Status](https://travis-ci.com/ocaml-community/obus.svg?branch=master)](https://travis-ci.com/ocaml-community/obus)

OBus is a pure OCaml implementation of the D-Bus protocol.  It aims to
provide a clean and easy way for ocaml programmers to access and
provide D-Bus services.

OBus is using the cooperative threading library Lwt, which make it
very simple to fully exploit the asynchronous nature of D-Bus.

Dependencies
------------

Make sure you have [dune](https://dune.build/)
installed, and install all the missing dependencies listed in
the output of this command:

    $ dune external-lib-deps @install --missing

Installation
------------

The recommended way to install obus and its dependencies is via
[opam](https://opam.ocaml.org/): `opam install obus`.

Manual installation from sources
--------------------------------

To build and install obus:

    $ dune build @install

### Tests _(optionnal)_

To build and execute tests:

    $ dune runtest

Using the library
-----------------

OBus install the following packages:

* `obus`: the core library, implementing the D-Bus protocol,
* `obus.ppx`: syntax extensions to aid registering OBus exceptions.
* `obus.notification`: interface to the freedesktop Notification
  service,
* `obus.hal`: interface to the freedesktop Hal service,
* `obus.upower`: interface to the freedesktop UPower service,
* `obus.udisks`: interface to the freedesktop UDisks service,
* `obus.policykit`: interface to the freedesktop PolicyKit servie.

Using the tools
---------------

There are several tools provided in the obus distribution:

* `obus-dump`, to execute a command and dump all messages that goes
  throug the session and/or system message bus,
* `obus-introspect` which can recursively introspect a D-Bus service,
* `obus-gen-interface`, to convert D-Bus introspection files into
   ocaml definition modules,
* `obus-gen-client` and obus-gen-server which can generate template
   for using or implementing D-Bus servies,
* `obus-xml2idl` and obus-idl2xml to convert xml introspection
   documents to the obus idl format, and vice versa.

There are manual pages for all this tools.

The caml files generated by obus-gen-client and obus-gen-server are
meant to be edited and adapted. In practice introspections files
contains only marshaling informations so it is often not sufficient
for creating a usable binding.

Here is a simple example of use of the tools:

    $ obus-introspect org.freedesktop.Notifications /org/freedesktop/Notifications > notif.xml
    $ obus-gen-interface notif.xml
    $ obus-gen-client notif.xml
