git.guelker.eu fernschreiberx / master README
master

Tree @master (Download .tar.gz)

README @masterraw · history · blame

Fernschreiber X
===============

"Fernschreiber X" is an XMPP client. The XMPP library that does the
actual XMPP handling underneath is called "fernx".

Name
----

"Fernschreiber" is the German word for "Teletypewriter". The "X" in
the name means "XMPP".

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

The programme has some dependencies, as documented here.

### C libraries ###

XMPP uses long-lived XML streams over TCP for communication, which are
not suitable for Go's ordinary XML parser as that one can't do
incremental processing (a.k.a. SAX parser). Fernschreiber X uses Cgo
to overcome the problem and binds to the Expat library (see
<https://libexpat.github.io/>) to gain access to a stream-oriented SAX
parser. Additionally, Fernschreiber X uses Gotk as a dependency for
the UI, which in turn depends on the Gtk+3 C library.

Thus, you need Cgo working, and Gtk+3 Expat installed (with development
headers). For Ubuntu 18.04, it should be sufficient to execute the
following command to get the C side of things working:

  # apt-get install build-essential libgtk-3-dev

Additionally, some Cgo bindings for the native OS libraries are used,
but since they're native to the OS, you have them installed anyway
(example: libuuid on Linux or the Win32API on Windows).

### Go dependencies ###

* Gotk3: GTK+3 bindings for Go: <https://github.com/gotk3/gotk3>
* Gotext: Gettext-compatible i18n: <https://github.com/leonelquinteros/gotext>
  * Subdependency: Kinako: Parse Gettext plural strings: <https://github.com/mattn/kinako>

Install via:

    $ go get golang.org/x/crypto/otr
    $ go get github.com/gotk3/gotk3/gtk
    $ go get github.com/leonelquinteros/gotext

If building Fernschreiber X takes an unusually long time, rebuild
Gotk3.

### Build Fernschreiber X ###

Fernschreiber X consists of a front programme of this name, and a
backend library called "fernx". The actual GUI programme is contained
in the fernschreiberx/fernschreiberx directory and building it will
build all the helper libraries as well. Thus, you do:

    $ cd $GOPATH/src/mg.guelker.eu/fernschreiberx/fernschreiberx
    $ make

After some processing of the data directory, the `make' command will
most notably invoke `go build'. Note that it's not going to call `go
install'.

In order to install the software, run `make install'.

    # make install

This will install Fernschreiber X below /usr/local (and *not*
somewhere under your $GOPATH!).

It is possible to change the installation locations by setting the
PREFIX and DESTDIR variables during make invocation. PREFIX tells
Fernschreiber X where to look for its data, DESTDIR is only used
during the `make install' step and effectively shifts the file system
root (useful for packaging). If you invoke the build as follows, then
the software will install under /opt/fernschreiberx.

    $ make PREFIX=/opt/fernschreiberx
    # make PREFIX=/opt/fernschreiberx install

If you invoke it as follows, the entire structure under /opt will be
replicated below a directory `staging' below the current working
directory.

    $ make PREFIX=/opt/fernschreiberx DESTDIR=$PWD/staging
    # make PREFIX=/opt/fernschreiberx DESTDIR=$PWD/staging install

Please note that you need to specify the exact same set of PREFIX and
DESTDIR variables for both `make' and `make install', otherwise you
will run into unexpected problems.

Copyright
---------

Fernschreiber X is an XMPP client.
Copyright © 2018 Marvin Gülker

All Rights Reserved.

This programme is currently proprietary. You are not allowed to do
anything else with it than to look at the source code, store it
privately, build it privately, and use it privately for yourself. You
may not republish the source code anywhere and are not allowed to make
modifications. You may not distribute copies in source or binary form.

Once this programme reaches a reasonably stable state, I will release
it under an open-source license (most likely the GNU GPL). Get in
touch with me if you want to accelerate the release process by
helping.