Add a Makefile build system

Add a Makefile based build system partly inspired by the Linux kernel
build system.

Signed-off-by: James Hogan <james@albanarts.com>
Add .gitignore files

Add a .gitignore files with a few common patterns.

Signed-off-by: James Hogan <james@albanarts.com>
Move chron headers into include/chron/

Move chron headers from chron/*.h into include/chron/. This allows them
to be more easily exported for use by different programs.

Signed-off-by: James Hogan <james@albanarts.com>
Rename chron test program to "chron" and move lib stuff to src/

Rename the chron test program to "chron" to reside in the chron/
directory, and move the other things in that directory (chron library
stuff) out into src/.

Signed-off-by: James Hogan <james@albanarts.com>
Makefile.build: don't include dependencies for clean

When cleaning the tree, don't include the dependency files so that
generated source files don't get rebuilt only to be deleted.

Signed-off-by: James Hogan <james@albanarts.com>
Makefile.build: separate dependency generation rule

Separate out dependency file generation from source compilation. The use
of -include automatically depends on the included files.

Signed-off-by: James Hogan <james@albanarts.com>
Makefile.build: Add support for Qt's moc

Add support for Qt's Meta Object Compiler (moc) which generates a source
file to be added to the compilation for every Qt header file containing
Qt classes. Header files should be added with "moc-y += class.h" or
"$(targ)_moc-y += class.h" for a specific target.

Signed-off-by: James Hogan <james@albanarts.com>
src/dot.pl: Add procedures for outputting dot files

Add a small library of procedures for outputting dot (graphviz) graph
description files.

Signed-off-by: James Hogan <james@albanarts.com>
src/chron.pl: add procedures for pretty printing

Add procedures for converting sources to a more textual description, and
for naming persons explicitly (useful for when multiple people have the
same name).

Signed-off-by: James Hogan <james@albanarts.com>
src/chron.pl: tweak simplify_event for when \+event(Simple)

If the simple version of an event isn't classified as an event then
simplify_event will fail. Tweak the definition to allow it to work in
this case.

Signed-off-by: James Hogan <james@albanarts.com>
src/dot_ancestry.pl: add library for outputting ancestry graph

Add a library for outputting ancestry information (parent_child and
married relationships) to a dot graph description file.

Signed-off-by: James Hogan <james@albanarts.com>
src/dot_chron.pl: add library to output constraint graph

Add a library to output the event/constraint graph in the dot graph
description format.

Signed-off-by: James Hogan <james@albanarts.com>
src/chron.pl: add parent_sons(Parent, Sons, Source)

Add parent_sons(Parent, Sons, Source) fact that applies parent_son to
each member of Sons. This reduces boilerplate rules slightly when a
source provides lists of sons.

Signed-off-by: James Hogan <james@albanarts.com>
src/chron.pl: add parent_descendent[s] fact

Add parent_descendent(Parent, Descendent, Source) and
parent_descendents(Parent, Descendents, Source) facts which are a bit
like parent_child but less constrained.

Also add output of descendent relationships to src/dot_ancestry.pl as
dashed lines.

Signed-off-by: James Hogan <james@albanarts.com>
Add src/calendar.pl for helping define custom calendars

Add src/calendar.pl for helping define custom calendars and extracting
constraints out of them. Consecutive events have local date differences
calculated and used as event intervals.

Signed-off-by: James Hogan <james@albanarts.com>
src/chron.pl: Fix whitespace at end of line

Remove a space at the end of a comment line in src/chron.pl.

Signed-off-by: James Hogan <james@albanarts.com>