How to build and install PicoGUI
=================================

PicoGUI 0.x is one huge and complex collection of code and data.  For
many reasons, it is nontrivial to build all the pieces.  This document
is a guide on the order of steps you should take.

This is the easy way.  Of course there are infinite variations on the
theme; to begin with, you may want to install it somewhere other than
/usr/local (the default).  But if you want/need to do that, we expect
you to know how to adapt the instructions below.

The instructions below are for releases.  If you want to build
straight from svn, for directories with autoconf, you will first need
to run the 'autogen.sh' script, to generate 'configure'.

Directory structure notes
::::::::::::::::::::::::::

Some directories have subdivisions named 'working', 'dev' and 'test' -
notably, themes and apps.  In these cases, usually all you want is in
the 'working' directory.  Things in 'dev' are not yet functional, and
things in 'test' are for testing PicoGUI or one of its components, or
coding examples.

Things that must be done in order
::::::::::::::::::::::::::::::::::

1. pgserver
------------

Even if you don't intend to run pgserver (a client-only machine, like,
say, a PicoGUI application server?), you still need to build and
install it first.  This is because some headers shared between the
server and the C client library are stored in the server source tree
and installed when the server is installed.

To build and install pgserver, go into the 'server' directory.  It is
an almost-standard automake/autoconf setup, except that you need to
run menuconfig.  This is the routine:

  % cd server
  % mkdir build
  % cd build
  % ../configure
  % make menuconfig
  % make
  % make install

2. client/c
------------

Next, you need the C client library.  It's in the directory
'client/c'.  Building it is the standard autoconf routine:

  % cd client/c
  % mkdir build
  % cd build
  % ../configure
  % make
  % make install

You probably need to install the C library even if you don't think you
will use it, because it's needed to build other parts.  For example,
if you plan to build a theme, you need themec, which needs the C
library.

3. tools
---------

Now you need the theme compiler (themec), which is in the the
directory 'tools'.  It's standard autoconf.  You need themec to build
the themes and the apps.

Things that are optional and have no particular order
::::::::::::::::::::::::::::::::::::::::::::::::::::::

Themes
-------

It is highly recommended that you install at least one theme.  PicoGUI
has no concept of a "default theme" like, for example, GTK+ and Qt
do.  Instead, themeless PicoGUI is an ugly black-on-white undecorated
mess.  To build a single theme, just cd to its directory and do
something like:

  % cd themes/working/photonic
  % themec photonic.ths

Then copy or move the resulting binary theme file (in this case,
photonic.th) to somewhere of your preference - I personally use
/usr/local/share/picogui/themes.  You will need to inform the location
of this directory to pgserver when you run it; read
server/README.configfile and look for themedir option.

To build and install all working themes, you can do:

  % cd themes/working
  % bash build.sh /usr/local/share/picogui/themes

Of course, you can inform some other directory to build.sh instead of
/usr/local/share/picogui/themes.

Python client library
----------------------

To install the Python client library:

  % cd client/python
  % python setup.py install --prefix=/usr/local

Alternatively, if you're constantly making changes to the library
itself, you can just symlink the PicoGUI directory in client/python to
somewhere in your Python path (/usr/local/lib/python2.3/sites-packages
for example).

Apps
-----

The 'apps' subdirectory is another standard autoconf setup.  By
default, it will only build and install the 'working' apps, unless you
pass the option '--enable-non-working' to configure.

The first time you run 'make', it will fail, complaining about a
missing file.  If you run 'make' again, it will work.  This is a known
buglet which we expect to fix in the near future.
