The libfossil Amalgamation Build
See also: building, download pre-built copies of the amalgamation
This library supports the creation of a so-called "amalgamation build", a practice adopted from the sqlite project which compounds the sources and headers into a form which can easily be dropped into client-side projects.
To create the amalgamation you need a working build environment (GNU Make and friends):
[stephan@host:~/libfossil]$ make amal
...
Amalgamation files:
-rw-rw-r-- 1 stephan stephan 1502299 Dec 21 17:06 ./libfossil.c
-rw-rw-r-- 1 stephan stephan 4273 Dec 21 15:16 ./libfossil-config.h
-rw-rw-r-- 1 stephan stephan 824290 Dec 21 17:06 ./libfossil.h
ccache cc -I. ... -o "../libfossil.o"
Reminder: it will need these sqlite3 files to build:
sqlite3.h, sqlite3ext.h, and optionally a local copy of sqlite3.c
The output is these three files in the top-most directory of the tree:
libfossil-config.h
holds a basic set of configuration options. This file can/should be tweaked for the target platform. The default options set there are, by design, conservative. That said, the conservative options "should" work just fine for all modern platforms.libfossil.h
contains header files. It#include
slibfossil-config.h
.libfossil.c
contains all of the sources. It#include
slibfossil.h
.
The C++ build also has an amalgamation build which requires this amalgamation. To build it, run make amalpp
.
To use the amalgamation, simply:
- Make sure you have zlib and sqlite3 libraries and headers installed. They are preinstalled on any modern Unix system, though a newer sqlite3 might be required (which version is unknown - development typically happens against the sqlite3 trunk). Optionally, you can link in a self-compiled sqlite3.o.
#include "libfossil.h"
- Optionally tweak
libfossil-config.h
- Compile
libfossil.c
- Link your app with
libfossil.o
, zlib (-lz
), and sqlite3 (-lsqlite3
). Some additional libraries might, depending on its build options, be required by sqlite:-ldl -lpthread -lm
.
Regarding the sqlite3 dependency: currently this library tries to work
with whatever sqlite3 version is installed, but if it at some point
requires features of relatively new versions then clients may need to
use the sqlite3 amalgamation
when building this code. The main makefile will use those two files
(sqlite3.c
and sqlite3.h
) automatically if they are found in the src/
dir of the build tree, but it does not include them in the Amalgamation build.