Popularity
7.3
Stable
Activity
0.0
Stable
12
6
9

Monthly Downloads: 16
Programming language: Haskell
License: BSD 3-clause "New" or "Revised" License
Tags: Graphics     Xhb    
Latest version: v0.3
Add another 'xhb' Package

README

X Haskell Bindings

The goal of this project is to provide a Haskell library for interacting with an X server, using XCB as a model.

The bedrock of the library will be datatypes and serialization code automatically generated from the 'xproto' XML files:

To build the generated files execute:

chmod +x generate.sh
./generate.sh

The generated routines are in the patched directory.

To build the .cabal file to install the library run:

chmod +x cabalize.sh
./cabalize.sh

To test that the generated files build successfully execute:

cabal configure
cabal build

Details

The tools we use to do the code generation are in the build-tools folder.

We require the packages xcb-types, haskell-src and HStringTemplate, which are installed into a Cabal sandbox in the 'build-tools' folder.

How To Hack

There are three bash scripts that live in the top-level of this project:

generate.sh

This file generates Haskell source from the X Protocol XML description into the directory generated.

If the file patch is found, it is used to patch the generated files. The result of patching is placed into the directory patched.

makepatch.sh

The difference between the generated directory and working directory is saved into the file patch. The script generate.sh is then called.

parse.sh

The XML files are parsed and then pretty-printed to a human-readable form into the directory parsed.

The intent is that the results of parsing can be isolated from the results of code generation to make finding bugs easier.

cabalize.sh

Creates a package description (Cabal) file for the XHB project. You'd be best running generate.sh before trying anything like cabal install or cabal sdist.

clean.sh

Deletes the Haskell programs that drive generate.sh, parse.sh and cabalize.sh. You'll need to run this or the shell scripts won't notice any changes you've made to the underlying Haskell code.

version.sh

Defines the xproto version we will attempt to build against. If the XML files for this version are not in the resources directory, they will be downloaded.