blob: 2c0299bdb2f7c85ca83fdc69861d8ff23682977a [file] [log] [blame] [edit]
This HACKING file describes the development environment. -*- org -*-
Copyright (C) 2008, 2009, 2011 ViewPlus Technologies, Inc. and Abilitiessoft, Inc.
Copyright (C) 2012, 2013 Swiss Library for the Blind, Visually Impaired and Print Disabled
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
This file attempts to describe the maintainer-specific notes to follow
when hacking liblouis.
* Developing
** Where to get it
The development sources are available through anonymous svn at Google
Code:
http://code.google.com/p/liblouis/
** Build requirements
This distribution uses Automake, Autoconf, and Libtool. If you are
getting the sources from svn (or change configure.ac), you'll need to
have these tools installed to (re)build. Optionally (if you want to
generate man pages) you'll also need help2man. All of these programs
are available from ftp://ftp.gnu.org/gnu.
** Gnulib
This distribution also uses Gnulib (http://www.gnu.org/software/gnulib)
to share common files, with the files being checked in to svn. If you
want to update from the current gnulib, install gnulib, and then run
gnulib-tool --import
in the top-level directory.
For the record, the first time invocation was
gnulib-tool --import --lib=libgnu --source-base=gnulib \
--m4-base=gnulib/m4 --aux-dir=build-aux --libtool \
--macro-prefix=gl getopt-gnu progname version-etc
More modules might have been added since. The currently-used gnulib
modules and other gnulib information are recorded in
gnulib/m4/gnulib-cache.m4. Given a source checkout of gnulib, you can
update the files with gnulib-tool --import.
** How to build
After getting the sources from svn, with
svn checkout http://liblouis.googlecode.com/svn/trunk/ liblouis
and installing the tools above, change to the liblouis directory and
and bootstrap the project with the following command
./autogen.sh
to do a fresh build. Then run configure as usual:
./configure
You have the choice to compile liblouis for either 16- or 32-bit
Unicode. By default it is compiled for the former. To get 32-bit
Unicode run configure with --enable-ucs4 .
After running configure run "make" and then "make install". You must
have root privileges for the installation step.
** How to debug
First you have to build liblouis with debugging info enabled.
$ ./configure CFLAGS='-g -O0 -Wall -Wextra'
$ make
Starting the programs under the tools directory within gdb is a little
tricky as they are linked with libtool. See the info page of libtool
for more information. To start lou_checktable for table wiskunde.ctb
for example you'd have to issue the following commands:
$ libtool --mode=execute gdb ./tools/lou_checktable
(gdb) run tables/wiskunde.ctb
** How to find memory leaks
Valgrind is a tool that can be used to find memory errors. It is
recommended that you compile liblouis without any optimizations and
with all warnings enabled before running it through Valgrind:
$ ./configure CFLAGS='-g -O0 -Wall'
$ make
Then use Valgrind to analyze liblouis. For example you can run
lou_translate trough Valgrind:
$ libtool --mode=execute valgrind -v --tool=memcheck \
--leak-check=full --leak-resolution=high --log-file=valgrind.log \
./tools/lou_translate en-us-g2.ctb
Type a few words at the prompt, check translation and terminate
lou_translate. Now open the file valgrind.log and see if there are any
memory leaks reported.
You can also just run lou_checktable for example:
$ libtool --mode=execute valgrind -v --tool=memcheck \
--leak-check=full --leak-resolution=high --log-file=valgrind.log \
./tools/lou_checktable tables/nl-BE-g1.ctb
Again open valgrind.log to see if any memory leaks were reported.
For the full experience run lou_allround under Valgrind:
$ libtool --mode=execute valgrind -v --tool=memcheck \
--leak-check=full --show-reachable=yes \
--leak-resolution=high --track-origins=yes \
--log-file=valgrind.log ./tools/lou_allround
** How to build for win32
See the README.windows file and the windows subdirectory.
*** How to cross-compile for win32
Use the mingw win32 cross compiler as shown below. Use the prefix
option to install the binaries to a temporary place where you can
create a zip file.
./configure --build i686-pc-linux-gnu --host i586-mingw32msvc --prefix=/tmp/mingw32msvc
make
make dist
* Release Procedure
These steps describe what a maintainer does to make a release; they
are not needed for ordinary patch submission.
** Set the version number
Update the version number in NEWS (with version, date, and release
type), ChangeLog and configure.ac.
Don't forget to update the libtool versioning info in configure.ac,
i.e. LIBLOUIS_REVISION and possibly LIBLOUIS_CURRENT and LIBLOUIS_AGE.
** Commit and tag
Commit the changes and tag this version
svn cp https://liblouis.googlecode.com/svn/trunk \
https://liblouis.googlecode.com/svn/tags/liblouis_1_3_8
If you know the exact version number that needs to be tagged use
svn cp https://liblouis.googlecode.com/svn/trunk \
https://liblouis.googlecode.com/svn/tags/liblouis_1_3_8 -r 109
** Make the release
Check out a clean copy in a different directory, like /tmp. Run
autogen.sh and configure with no special prefixes. Run make distcheck.
This will make sure that all needed files are present, and do a
general sanity check. Run make dist. This will produce a tarball.
./autogen.sh && ./configure && make && make distcheck && make dist
** Upload
Upload tarball to Google project page, tag as "featured". This will
put the link on the main project page. Remove "featured" tag from
previous tarball release.
** Online documentation
The online documentation is hosted out of subversion of the Google
code site. To check it out
svn co https://liblouis.googlecode.com/svn/documentation \
liblouis-online-documentation
then move the latest built documentation into this directory and check
it in
cd liblouis-online-documentation
cp ../liblouis/doc/liblouis.html .
svn ci liblouis.html -m "Update online documentation"
** Other web updates
Update the Google project page. Add the current NEWS to the front
page.
Also update the page on freshmeat (http://freshmeat.net/projects/liblouis/).
** Announce
Send an announcement to the liblouis list
liblouis-liblouisxml@freelists.org. See ANNOUNCEMENT for an example.