Initial revision

svn: r1140
This commit is contained in:
Don Allingham 2002-10-20 14:25:16 +00:00
commit 5875df7c48
374 changed files with 160218 additions and 0 deletions

5
.cvsignore Normal file
View File

@ -0,0 +1,5 @@
Makefile
config.cache
config.log
config.status
gramps.sh

5
AUTHORS Normal file
View File

@ -0,0 +1,5 @@
Donald N. Allingham ** Concept and main design
David Hampton ** Autocomp.py and Report.py
Donald A. Peterson ** Makefiles, LaTeXDoc.py

339
COPYING Normal file
View File

@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
675 Mass Ave, Cambridge, MA 02139, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
Appendix: How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19yy name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

1
ChangeLog Normal file
View File

@ -0,0 +1 @@

79
INSTALL Normal file
View File

@ -0,0 +1,79 @@
For rebuilding from source, here are some guidelines to follow. For
developers who may be adding functionality to the program, be sure to read
the last section of this documen: "FINAL WORDS".
SUPER-SHORT VERSION:
You should be able to just run "./configure && make". But if you make any
significant changes or experience any problems, you may wish to run
"./autogen.sh && make" to regenerate everything.
This will call aclocal if necessary, then automake, which creates
Makefile.in from Makefile.am rules. Then it calls autoconf, which will
generate configure from configure.in and the Makefile.{am,in} sources.
Finally, autogen calls configure to generate the final files necessary for
building gramps.
SHORT VERSION:
Execute:
aclocal
automake --add-missing --gnu && autoconf && make
HTML documentation is built from SGML sources via jw. It is known to work
with docbook-utils-0.6.9. There is a problem with 0.6.10, which seems to
have some messed up dsl files. If you have difficulty building the HTML
documentation with your version of jw, then remove "doc" from the SUBDIRS
list in the top-level Makefile and send a report of where the failure was to
the gramps-devel list. This distribution is tested with the style sheets
and PNG support from the gnome-doc-tools-2-1 package.
MORE INFO: Version and package info is now set in configure.in through a
call to the AM_INIT_AUTOMAKE macro. The results are stored in variables
PACKAGE and VERSION, which then get substituted wherever necessary.
(gramps.sh, gramps.spec, src/const.py, asst. Makefiles, etc.) We also
manually set the RELEASE variable for setting things like "pre" or minor
bugfix issues. * Note: Using @VERSION@ in the manuals has the advantage that
the current manual always states that it describes current version of
gramps. The disadvantage is that this becomes misleading if the manual
isn't regularly updated. Keep in mind this is GRAMPS version and not
*manual* version. Another problem is that the standard GNOME SGML
documentation make rules (sgmldocs.make) have their own rule, but automake
generates its own rule and this introduces a conflict.
"make (un)install" now runs scrollkeeper-update to ensure
documentation database is up to date. Scrollkeeper v. > 0.1.4 should in
principle work, v. > 0.2 should see no problems.
VERBOSE, UGLY DETAILS FOR DEVELOPERS:
Using automake/autoconf adds many, MANY build targets to the makefiles.
Basically, we only care about the main and "install" targets. However,
there are some others that bear further notice:
* make dist -- will create a lovely gramps-{VERSION}.tar.gz archive with
everything needed to distribute, including the HTML documentation just in
case Joe User doen't know about or have a compatable jw/db2html. After
running "make dist" you can create the rpms using
"rpm -ta gramps-{VERSION}.tar.gz". How nice is that?
* make clean -- only gets rid of byte-compiled stuff like .so files.
* make distclean -- improves on clean by eliminating configuration (*.in,
config.*, Makefiles, and converted documentation.) stuff. This is generally
what you (as a developer) will want for testing "fresh" compiles.
* make trans -- We add this one on our own for building the template.po file.
Another caveat of the automake mantra is that new/overriding make
targets/rules/defines should generally go in the Makefile.am files rather
than Makefile.in.
* Note: Another beauty of the automake mechanism (and having automake macros
in the configure script) is that once the scripts have been made, a change
to any .am file will trigger "make" to regenerate the Makefile.in/configure
scripts as appropriate. It is _very_ convenient.
FINAL WORDS: automake "thinks" of a distribution in terms of "SOURCES", such
as raw C code, "COMPILED OBJECTS" like executables and libraries, and
"DATA", such as images, scripts, and documentation. Thus, for gramps we
concentrate on DATA-type objects. We must tell automake what objects are
important. We do this by adding to the EXTRA_DIST variable in the various
Makefile.am files before running automake.

30
Makefile.am Normal file
View File

@ -0,0 +1,30 @@
# copyright (C) 2000 Sun Microsystems, Inc.
SUBDIRS = src doc omf-install
EXTRA_DIST = autogen.sh gramps.spec.in
bin_SCRIPTS = gramps
grampsdocdir = $(datadir)/doc/gramps-$(VERSION)
scrollkeeper_localstate_dir = $(localstatedir)/lib/scrollkeeper
gramps: gramps.sh
cp gramps.sh gramps
dist-hook: gramps.spec
cp gramps.spec $(distdir)
# Build/rebuild the catalog
install-data-hook:
rm -rf $(DESTDIR)$(scrollkeeper_localstate_dir)
$(mkinstalldirs) $(DESTDIR)$(scrollkeeper_localstate_dir)
$(mkinstalldirs) $(DESTDIR)$(localstatedir)/log
scrollkeeper-rebuilddb -p $(DESTDIR)$(scrollkeeper_localstate_dir)
# Remove generated files
uninstall-local:
-rm -rf $(DESTDIR)$(gramps_localstate_dir)
-rm -f $(DESTDIR)$(localstatedir)/log/gramps.log
-rm -f $(DESTDIR)$(localstatedir)/log/gramps.log.1

18
Makefile.comm Normal file
View File

@ -0,0 +1,18 @@
# Generated automatically from Makefile.comm.in by configure.
# Hold variable definitions needed by slave Makefiles
prefix = /usr/local
exec_prefix = ${prefix}
bindir = ${exec_prefix}/bin
datadir = ${prefix}/share/gramps
INSTALL = /usr/bin/install -c
sharedir = ${prefix}/share/gramps
GNOMEHELP = ${prefix}/share/gnome/help
GM = gramps-manual
EG = extending-gramps
DB2HTML =
# Ensure the correct "/bin/sh" for interpreting commands
# in case the user has some other shell environment
SHELL = /bin/sh

490
Makefile.in Normal file
View File

@ -0,0 +1,490 @@
# Makefile.in generated by automake 1.6.3 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
# Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# copyright (C) 2000 Sun Microsystems, Inc.
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = .
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
EXEEXT = @EXEEXT@
OBJEXT = @OBJEXT@
PATH_SEPARATOR = @PATH_SEPARATOR@
AMTAR = @AMTAR@
AWK = @AWK@
BINSH = @BINSH@
CC = @CC@
DEPDIR = @DEPDIR@
DISABLE_SCROLLKEEPER = @DISABLE_SCROLLKEEPER@
GNOMEHELP = @GNOMEHELP@
HAVE_GNOME_CONFIG = @HAVE_GNOME_CONFIG@
HAVE_JW = @HAVE_JW@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INTLLIBS = @INTLLIBS@
JW = @JW@
LANGUAGES = @LANGUAGES@
LIBS = @LIBS@
MOFILES = @MOFILES@
MSGFMT = @MSGFMT@
P15_INCLUDES = @P15_INCLUDES@
P20_INCLUDES = @P20_INCLUDES@
P21_INCLUDES = @P21_INCLUDES@
P22_INCLUDES = @P22_INCLUDES@
PACKAGE = @PACKAGE@
POFILES = @POFILES@
PYTHON = @PYTHON@
PYTHON22 = @PYTHON22@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
PYTHON_VERSION = @PYTHON_VERSION@
RELEASE = @RELEASE@
SCROLLKEEPER_CONFIG = @SCROLLKEEPER_CONFIG@
SCROLLKEEPER_REQUIRED = @SCROLLKEEPER_REQUIRED@
STRIP = @STRIP@
VERSION = @VERSION@
VERSIONSTRING = @VERSIONSTRING@
ZIP = @ZIP@
am__include = @am__include@
am__quote = @am__quote@
install_sh = @install_sh@
pkgpyexecdir = @pkgpyexecdir@
pkgpythondir = @pkgpythondir@
pyexecdir = @pyexecdir@
pythondir = @pythondir@
SUBDIRS = src doc omf-install
EXTRA_DIST = autogen.sh gramps.spec.in
bin_SCRIPTS = gramps
grampsdocdir = $(datadir)/doc/gramps-$(VERSION)
scrollkeeper_localstate_dir = $(localstatedir)/lib/scrollkeeper
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_CLEAN_FILES = gramps.spec gramps.sh
SCRIPTS = $(bin_SCRIPTS)
DIST_SOURCES =
RECURSIVE_TARGETS = info-recursive dvi-recursive install-info-recursive \
uninstall-info-recursive all-recursive install-data-recursive \
install-exec-recursive installdirs-recursive install-recursive \
uninstall-recursive check-recursive installcheck-recursive
DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \
Makefile.in NEWS TODO aclocal.m4 configure configure.in \
gramps.sh.in gramps.spec.in install-sh missing mkinstalldirs \
py-compile
DIST_SUBDIRS = $(SUBDIRS)
all: all-recursive
.SUFFIXES:
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)
$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
cd $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): configure.in
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
gramps.spec: $(top_builddir)/config.status gramps.spec.in
cd $(top_builddir) && $(SHELL) ./config.status $@
gramps.sh: $(top_builddir)/config.status gramps.sh.in
cd $(top_builddir) && $(SHELL) ./config.status $@
binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
install-binSCRIPTS: $(bin_SCRIPTS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(bindir)
@list='$(bin_SCRIPTS)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
if test -f $$d$$p; then \
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
echo " $(binSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(bindir)/$$f"; \
$(binSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(bindir)/$$f; \
else :; fi; \
done
uninstall-binSCRIPTS:
@$(NORMAL_UNINSTALL)
@list='$(bin_SCRIPTS)'; for p in $$list; do \
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
rm -f $(DESTDIR)$(bindir)/$$f; \
done
uninstall-info-am:
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
@set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ETAGS = etags
ETAGSFLAGS =
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = .
distdir = $(PACKAGE)-$(VERSION)
am__remove_distdir = \
{ test ! -d $(distdir) \
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -fr $(distdir); }; }
GZIP_ENV = --best
distcleancheck_listfiles = find . -type f -print
distdir: $(DISTFILES)
$(am__remove_distdir)
mkdir $(distdir)
$(mkinstalldirs) $(distdir)/. $(distdir)/src
@list='$(DISTFILES)'; for file in $$list; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkinstalldirs) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d $(distdir)/$$subdir \
|| mkdir $(distdir)/$$subdir \
|| exit 1; \
(cd $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$(top_distdir)" \
distdir=../$(distdir)/$$subdir \
distdir) \
|| exit 1; \
fi; \
done
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="${top_distdir}" distdir="$(distdir)" \
dist-hook
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r $(distdir)
dist-gzip: distdir
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
dist dist-all: distdir
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
$(am__remove_distdir)
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
chmod -R a-w $(distdir); chmod a+w $(distdir)
mkdir $(distdir)/=build
mkdir $(distdir)/=inst
chmod a-w $(distdir)
dc_install_base=`$(am__cd) $(distdir)/=inst && pwd` \
&& cd $(distdir)/=build \
&& ../configure --srcdir=.. --prefix=$$dc_install_base \
$(DISTCHECK_CONFIGURE_FLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
&& (test `find $$dc_install_base -type f -print | wc -l` -le 1 \
|| { echo "ERROR: files left after uninstall:" ; \
find $$dc_install_base -type f -print ; \
exit 1; } >&2 ) \
&& $(MAKE) $(AM_MAKEFLAGS) dist-gzip \
&& rm -f $(distdir).tar.gz \
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
$(am__remove_distdir)
@echo "$(distdir).tar.gz is ready for distribution" | \
sed 'h;s/./=/g;p;x;p;x'
distcleancheck: distclean
if test '$(srcdir)' = . ; then \
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
exit 1 ; \
fi
test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left after distclean:" ; \
$(distcleancheck_listfiles) ; \
exit 1; } >&2
check-am: all-am
check: check-recursive
all-am: Makefile $(SCRIPTS)
installdirs: installdirs-recursive
installdirs-am:
$(mkinstalldirs) $(DESTDIR)$(bindir)
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic mostlyclean-am
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
distclean-am: clean-am distclean-generic distclean-tags
dvi: dvi-recursive
dvi-am:
info: info-recursive
info-am:
install-data-am:
@$(NORMAL_INSTALL)
$(MAKE) $(AM_MAKEFLAGS) install-data-hook
install-exec-am: install-binSCRIPTS
install-info: install-info-recursive
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf autom4te.cache
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic
uninstall-am: uninstall-binSCRIPTS uninstall-info-am uninstall-local
uninstall-info: uninstall-info-recursive
.PHONY: $(RECURSIVE_TARGETS) GTAGS all all-am check check-am clean \
clean-generic clean-recursive dist dist-all dist-gzip distcheck \
distclean distclean-generic distclean-recursive distclean-tags \
distcleancheck distdir dvi dvi-am dvi-recursive info info-am \
info-recursive install install-am install-binSCRIPTS \
install-data install-data-am install-data-recursive \
install-exec install-exec-am install-exec-recursive \
install-info install-info-am install-info-recursive install-man \
install-recursive install-strip installcheck installcheck-am \
installdirs installdirs-am installdirs-recursive \
maintainer-clean maintainer-clean-generic \
maintainer-clean-recursive mostlyclean mostlyclean-generic \
mostlyclean-recursive tags tags-recursive uninstall \
uninstall-am uninstall-binSCRIPTS uninstall-info-am \
uninstall-info-recursive uninstall-local uninstall-recursive
gramps: gramps.sh
cp gramps.sh gramps
dist-hook: gramps.spec
cp gramps.spec $(distdir)
# Build/rebuild the catalog
install-data-hook:
rm -rf $(DESTDIR)$(scrollkeeper_localstate_dir)
$(mkinstalldirs) $(DESTDIR)$(scrollkeeper_localstate_dir)
$(mkinstalldirs) $(DESTDIR)$(localstatedir)/log
scrollkeeper-rebuilddb -p $(DESTDIR)$(scrollkeeper_localstate_dir)
# Remove generated files
uninstall-local:
-rm -rf $(DESTDIR)$(gramps_localstate_dir)
-rm -f $(DESTDIR)$(localstatedir)/log/gramps.log
-rm -f $(DESTDIR)$(localstatedir)/log/gramps.log.1
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

362
NEWS Normal file
View File

@ -0,0 +1,362 @@
Version 0.7.3
* New Russian (Alex Roitman) and Danish (Lars Lundin) translations.
GRAMPS now supports English, Italian, German, French, Spanish,
Brazilian-Portuguese, Swedish, Danish, and Russian.
* Custom filter editor allows you to create your personal complex
filters that can be applied to reports to select the people that
you want. Tools->Utilites->Custom Filter Editor to access the
filter builder. (Thanks to Jeff Ollie for some major contributions
here).
* New report - Complete Individual Report. Allows you to produce a
more complete form of the Individual Summary. You can use filters
to select all ancestors, all decendants, or any custom filter you
want to create more of a 'book' form of a report.
* On-the-fly document generation instead of pre-built HTML files
(Thanks to Don Peterson)
* Web page generation now generates a two column list, along with
labels.
* GEDCOM impovements, including the ability to use GRAMPS as a GEDCOM
viewer (accepts a GEDCOM file as an argument).
Version 0.7.2
* New Brazilian-Portuguese translation (Marcos Bedinelli)
* Python Imaging Library no longer required for several report
formats.
* Better sizing of images in reports (Bruce DeGrasse)
* An image subdirectory name can now be specified in the WebPage
generation. This allows you to specify the subdirectory (or
absence of a subdirectory) where images are placed when generating
a web site.
* Merging allows you to choose the GRAMPS ID of the merged person.
* Better handling of auto completion of names, places, and other
items.
* Ability to rerun Startup dialog when necessary
* More information in the Startup dialog
* Fewer intermediate files when handling images for reports
* Reports are now plugins, stored in the DocGen library
* Filter out control characters on GEDCOM import
* New document format generators for SVG and PostScript.
* Improved document format generators for LaTeX (Donald Peterson),
KWord (Bruce DeGrasse), and AbiWord.
* Names now have a type (e.g. "Married Name", "Birth Name")
associated with them.
* Eliminated the intermediate dialog box on importing - GRAMPS
now always appends to the current database.
* If an imported GEDCOM contains REFN tags, they are correlated
to the GRAMPS ID if possible.
Version 0.7.1
* A database must now be open at all times. Prevents the problem of
not having a place to put files.
* Several drop down menus for names have been replaced with
autocompletion text boxes.
* Autosave - allows the database to be saved to a backup file
periodically.
* New Descendant Graph dialog.
* Reorganization of reports.
* New preferences dialog.
* Configurable guessing of last names for new children.
* Slightly improved incomplete date handling.
* More sort columns and improved sorting in the lists.
* New tooltips (Don Peterson)
* Improved navigation in the Pedigree View (Shane Hathaway)
* Italian translation (Marco Molteni)
Version 0.7.0
* LD_PRELOAD set to handle Mandrake 8.1 shared library problems.
* Drag and drop copying of events, address, attributes, and URLs.
* Improved GEDCOM. GRAMPS now understands many more of the "quirks"
of the GEDCOM produced by other programs. In addition, GRAMPS can
now tailor its GEDCOM output several other programs. An XML data
file is used to describe to GRAMPS the types of quirks each
format uses.
* Support for French Republican, Hebrew, and Julian calendars.
* LDS ordinance support.
* Cleaned up report dialog code.
* Bug fixes in GEDCOM reading and relationship calculator.
* Toolbar may display Icons and Text, Text only, or Icons only. This
helps in some of the translations, where the long text forced the
toolbar to be unusually large.
* Dragging and dropping media objects can optionally display property
dialogs.
* All toolbar icons have tooltips.
* Keyboard shortcuts for bookmark saving.
* Find dialog supports autocompletion, and has the more standard shortcut
of C-F.
* Change in XML database format to provides better support for dates.
* Added entries to the Help menu to jump to the GRAMPS home page and the
GRAMPS mailing list page.
Version 0.6.2
* Fixed SuSE 7.3/lib-imlib problem.
* Improved GEDCOM import/export. Gramps now passes the GEDCHK program
and can now properly handle the quirks in names, notes, and parent/child
relationships from PAF, Legacy, FTW, Brother's Keeper, and Family Origins.
* After an Add Spouse, make the new spouse display in the Family View
interface.
Version 0.6.1
* Fixed Family View/Pedigree View button swap
* Updated Spanish translation
Version 0.6.0
* Support for QUAY, NCHI, and CAUS on GEDCOM import. GEDCOM
import is significantly faster.
* Support for multiple sources per item.
* Support for revision control. RCS based revision control is
available.
* Confidence level moved to SourceReference instead of object.
* All fields of birth and death events are editable. Clicking the
Edit button brings up the event editor. Birth and death fields
on the Edit Person dialog are now read only.
* Support for unknown gender.
* Central image/media repository added. All images in a gallery
are references to these media objects. Media objects can have
global properties (in the repository) or local properties (in
each gallery).
* Media types are beyond images are now supported (PDF, MP3,
word processor documents, etc.)
* Drag and drop of images from one gallery to another. Drag and
drop from file managers into the gallery. Drag and drop from a
web page to a gallery.
* Drag and drop reordering of children in children lists.
* Drag and drop reordering of images in a gallery.
* Autocompletion support on most entry boxes with drop down menus.
* Plugins can be reloaded without re-starting gramps.
* Two people can be selected and directly merged from the main
person list.
* Two places can be selected and directly merged from the main
place list.
* The "Find and Merge" functionality has been improved to make it
easier to find matches.
* Web page generation is significantly faster.
* Many plugins enhanced. Descendant browser can jump to an Edit Person
display, Event Comparison can now save and load complex filters,
etc.
* User had significant more control over the format of the internal
GRAMPS' ids. You can now set a prefix for each type (such as "I-"
for individuals) or specify more powerful formatting using C-like
format statements (such as "I-%04d").
* Adoption relationships are visible on the pedigree view (seen as
a dotted line).
* Reordering GRAMPS' ids attempts to preserve the integer originally
assigned to the object.
* The person view can be sorted by GRAMPS id.
* KWord format generated is now compatible with KWord 1.1. Images may
now be included in KWord documents (requires Python Imaging Library).
Tables are not working yet. I can figure out how to format a KWord
table.
Version 0.5.1
* Bug fixes
* Allow gramps' ids to be edited
* Added Jesper Zedlitz's PAF for Palm export
* Progress report on GEDCOM import
* Add a new person from the parent selection dialog
* Improved configure script for FreeBSD
* Documenation improvements
* Slight performance improvements reading large databases
Version 0.5.0
* New pedegree form which can display 3, 4, or 5 generations
depending on the screen size. Supports better navigation.
* Added a Find function to quickly find people.
* Implemented Place objects, allowing additional information
to be stored about a place.
* New icons for Person View and Family View.
* Online documentation.
* Pressing enter on qualifier field for a filter will apply
the filter.
* New verification tool added to look for odd things in the
database.
* Improvements in GEDCOM import, including handling some
Family Tree Maker pecularities.
* Spanish translation is now available. This brings the languages
to English, Spanish, Swedish, German, and French.
Version 0.4.1
* Tool/Report menus added to top level menu bar
* Extract Titles and Nicknames plugin improved to provide more
information
* Several bug fixes, including the problem of swapping father/
mother relationships in families
* Significant improvements in speed for updating displays after
adding, editing, or deleting people, and for applying filters.
* Added Bruce DeGrasse's Detailed Ancestral Report. This will
eventually replace the current Ancestral Report.
Version 0.4.0
* Redesigned Family page. More complex family relationships can be
handled.
* ISO date format supported
* Places are stored in a pulldown menu
* gramps ID can be displayed in many lists
* Multiple selection in Add Children box
* Internal gramps ID now a string instead of an integer
* Double clicking on a name in the Pedegree view brings up the edit
box for that person
* Support for same sex parent families has been added
* Complete rework of Edit Person dialog
* Added privacy flag and confidence level to events, attributes, etc.
* Automatically detect gzip'ed XML vs. XML
* Added option to write either gzip'ed XML or straight XML
* Warn on closing the edit person and marriage/relationshp window
when modifications have been made.
* French translation
* New plugin from Jesper Zedlitz that implements a graphical
representation of the people in the database, allowing you to
reposition people according to your own desires.
* XML is indented properly
* XML DTD available
Version 0.3.2
* Fixed Style Editor on WebPage.py, to allow styles to be edited.
* WebPage generator now lists more information, including sources.
* May have ironed out the PyXML/Python/SAX issues once and for all,
cleaning up the python 1.5/2.X problems.
* Added the ability to set default directories for reports and
databases.
* Fixed major bug that added a marriage and divorce to every record
that was viewed in the family viewer.
* Fixed bug that was dropping images
* Many, many other bug fixes.
* Improved many of the translations.
Version 0.3.1
* Improved Web Site generation (changed from Individual Web Pages)
* Faster load times for XML database
* Fixed unicode problems with Python 2.0
* Improved GEDCOM exporter
* Use the GRAMPSDIR environment variable in the shell script to determine
the root path instead of dynamically doing it by attempting to look
at __file__ in const.py
* Added better GEDCOM importing for files generated by Brother's
Keeper and Reunion.
Version 0.3.0
* Support for RTF (export to MSWord) and limited support for KWord
and LaTeX added.
* User defined styles for reports. Allows the selection of fonts,
sizes, colors, alignment, and many other features in output
reports. Styles can be saved for future use.
* Improved report formats
* Initial German translation. Please note that the German translation
is new, and it will take a while before it is fully in sync with the
program. It will probably take a release or two before it is as
stable as the Swedish translation (it can take a while to provide the
translations, and the code is changing, so it takes a while to flush
things out).
* Output format preference and page size preference can be set in the
preferences menu.
* Names can now have sources and notes.
* Lots of bug fixes
* Fixes to GEDCOM importer
Version 0.2.0
* New GEDCOM importer. This new importer understands the GEDCOM
file structure, and intelligently parses the file. More
information is extracted from the GEDCOM file. Guessing the
context of information is no longer done, so the data should go
into the right place. The display dialog now displays useful and
interesting information as the file is loaded. The importer
has been checked with file generated Personal Ancestral File,
Brother's Keeper, DISGEN, the GEDCOM Torture test, and even the
sometimes strange output of Family Tree Maker.
* Better support for sources. Source button on the main page, and
sources are entered from the main screen, instead of being about
five layers deep.
* Events, sources, attributes, and addresses can now have both
sources and notes.
* Limited configurability in status bar display. Instead of just a
name, you can have a name, the internal ID and a name, or a user
selectable attribute and a name.
* A user selectable attribute can be displayed on the Edit Person
display along with the gramps internal ID. The attribute is
specified in the preferences settings, and the value is taken
from the person's attribute list.
* Images now load faster. Thumbnail images are created and maintained
by gramps, eliminating the need to rescale images everytime a
gallery is displayed.
* Paper size preference can now be specified in the preferences
dialog. Once this is set, gramps will make this the default for
report generators. Eventually, you will be able to do the same
for output format preference. This button is current disabled.
* Generating slightly better XML. Maintaining compatibility with
the older files.
Version 0.1.5
* Plenty of bug fixes in the report generators and merging due to the
previous addition of date ranges.
* Added PDF file type generation for reports. Depends on the reportlab
package (available at www.reportlab.com). If the package is not
installed, gramps will run, but without PDF generation ability.
* Will use the Python Imaging Library if present to handle images. If
not, it will revert to the old method of using Imagick (convert).
* The user can select an attribute (from the attribute list) to display
on the Edit Person window.
* The internal gramps ID is now displayed on the Edit Person window.
* Marriage types can now be recorded.
* Addresses now use a single date instead of multiple dates, since
dates can now deal with ranges.
* Due to a bug in Python 2.0/GTK interaction, list colors are disabled
for Python 2.0 and above.
* configure script now properly deals with Python include paths,
eliminating the need to hand edit the src/Makefile to get gramps to
run under Python 2.X.
* Photos are now displayed properly again in the Edit Person gallery.
* Family notes are now implemented.
Version 0.1.4
* Implemented date ranges. Valid forms are "from <date> to <date>" and
"between <date> and <date>".
* Better support for partial dates. A question mark can optionally be
used for a placeholder for a year if the year is unknown. Illegal
date formats issue a warning upon an attempt to save the date.
* Start of internationalization (i18n) support. Had to include a single
C file to allow libglade to understand translations. This means that
binary releases are no longer going to be platform independant.
* Start of a generic output formatter for report generation. Currently
supports HTML, OpenOffice (625+), and AbiWord (0.7.13+). Allows
control of paragraph and font styles.
* Added into CVS on sourceforge
* Fixed quite a few bugs
Version 0.1.3
* Allow the user to specifiy their preferred numerical date input format,
either DD/MM/YY or MM/DD/YY on the preferences dialog box.
* Handles file problems a bit more gracefully.
* Use ISO-8859-1 character set instead of ASCII to support languages other
than English. Eventually this should go to unicode, but python 1.5.2
does not have good unicode support. Python 2.X/Gnome 2.X will be the
migration for this feature.
* Handle ANSEL encoding for import and exporting GEDCOM files.
* Fixed a bug in the selection of parents, which did not accept new parents
if previous parents did not exist.
Version 0.1.2
* Allow the user the option to display alternate names in the person
list. Alternate names in the list have an '*' appended to the end
of the name.
* Merge function now gives the user the option of saving the name of
the merged individual as an alternate name if the names are not
the same.
* Added the "Alternate Birth" and "Alternate Death" to the event list,
to allow other birthdates to be recorded. Gramps makes a distinction
between the birthdate/deathdate and the alternates.
* GEDCOM import and export adapted to load/save alternate birth and
death dates. The first "BIRT" and "DEAT" tags are the ones used
for the primary dates, the others are loaded as alternates.
* Added the ability to store web page addresses for each person. From
the edit person page, the "Go" button brings up a web browser to
display the page.
* Fixed a bug in the relationship calculator that caused a traceback
when the person selected was a direct ancestor of the active person.
* Added the suffix field to the alternate name entry on the Edit Person
form.

65
README Normal file
View File

@ -0,0 +1,65 @@
Please read the COPYING file first.
If building from source, also read the INSTALL file (at least through the
"SUPER-SHORT VERSION") before going further.
Requirements
--------------------------------
Python 1.5.2 or greater
Gnome 1.2 or greater
PyGnome 1.0.53 or greater
If you are using python 1.5.2, you may also need PyXML 0.6.2 or
greater. Many distributions already provide this, but if your
installation does not have it, you can get it from
http://sourceforge.net/project/showfiles.php?group_id=6473
Documentation
---------------------------------
Gramps documentation is supplied in the form of SGML files, which will be
installed in the GNOME help path(*). Recent versions of Nautilus and Galeon
can generate HTML on-the-fly documents from these. For more information on
building HTML files (including info about packages that do and do not work
with the documentation) see the INSTALL file. To generate HTML
documentation the following packages *MUST* installed:
* db2html >= 0.6.9 (jw >= 1.1) to convert the SGML -> HTML
* gnome-doc-tools-2-1 for the GNOME documentation style sheets
The former is part of the docbook-utils package, the latter can be found
from the developer section at gnome.org. (note that docbook-utils 0.6.10 is
buggy)
One also needs png support for sgml, which should be a part of the
gnome-doc-tools package. The /etc/sgml/catalog file should
contain an entry pointing to PNG support. If configured properly, your
db2html should automatically look up and use the /etc/sgml/catalog file.
Of course, current HTML documentation can also be found on the gramps website,
http://gramps.sourceforge.net/help.html
(*) More precisely, they are installed in ${prefix}/share/gnome/help, where
${prefix} is given by the --prefix= option to configure. If this is
different from where your standard GNOME installation looks for help files
and documentation, then set your GNOMEDIR environment variable to the
${prefix} path before starting gramps. For example, if you are installing
gramps in /usr/local/, then type the following:
in tcsh: setenv GNOMEDIR /usr/local/
in bash: GNOMEDIR=/usr/local/ ; export GNOMEDIR
Building on non-Linux systems: i18n support and GNU make
--------------------------------------------------------
Linux has libintl (GNU gettext) built-in the C library. Other systems
are likely to have libintl as a separate or optional library. Also,
other systems may have a different make utility.
On those systems, like FreeBSD, you must tell configure where to find
the libintl library and the libintl.h include file:
CPPFLAGS="-I/usr/local/include -L/usr/local/lib" ./configure --prefix=/usr/local
Once you have done this, if make fails, use gmake (the name FreeBSD
gives to GNU make) instead.
--------------------------------
Donald Allingham
dallingham@users.sourceforge.net

31
TODO Normal file
View File

@ -0,0 +1,31 @@
* Allow for multiple notes. A tabbed interface would be really useful,
since there are no titles for notes. Not all objects would necessarily
need multiple notes. Determine which ones should and shouldn't.
* Drag and drop should display the icon we are dragging instead of just
the default icon. Nautilus does this very effectively, and GTK has
support for this.
* Provide an "import" of a gramps package. Not too difficult to do this,
since there is already a ReadTarFile class which will unpackage the
file. Needs have an interface built around it.
* Catch uncaught exceptions at the top level, notifiy the user, and
store the results in a file that can be emailed. Have the start of
this with the gramps.err file, but most users don't realize that
this file has been created. Some type of notification is needed.
* Speed up the reading of the database. The python XML routines are not
as fast as I would like, and it can take a minute or so to read a
large database. This is way too slow.
* Finish the generic load of revision control interfaces to allow a
revision control plugin system. Most of the work is already done.
* Extend the gramps package exporting to export to a ISO-9660 CD-ROM
image. Thumbnails would need to be exported for this as well, since
the CD-ROM would be read-only after burning.
* Disable the save buttons if gramps database is marked read-only. Disable
the adding of media objects as well, since this will cause gramps to
try to create a thumbnail in a readonly database.
* OpenOffice zip file is not handled very gracefully. Uses the "system"
call to generate the zip file using the hard coded path of /usr/bin/zip.
Python 2.0 provides a zip interface, so this may need to hold off until
the move is made to Python 2.0.
* Sort all lists
* Startup tips.
* And a whole lot more....

939
aclocal.m4 vendored Normal file
View File

@ -0,0 +1,939 @@
# aclocal.m4 generated automatically by aclocal 1.6.3 -*- Autoconf -*-
# Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002
# Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
# Do all the work for Automake. -*- Autoconf -*-
# This macro actually does too much some checks are only needed if
# your package does certain things. But this isn't really a big deal.
# Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002
# Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# serial 8
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4,
# will think it sees a *use*, and therefore will trigger all it's
# C support machinery. Also note that it means that autoscan, seeing
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
AC_PREREQ([2.52])
# Autoconf 2.50 wants to disallow AM_ names. We explicitly allow
# the ones we care about.
m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
# AM_INIT_AUTOMAKE([OPTIONS])
# -----------------------------------------------
# The call with PACKAGE and VERSION arguments is the old style
# call (pre autoconf-2.50), which is being phased out. PACKAGE
# and VERSION should now be passed to AC_INIT and removed from
# the call to AM_INIT_AUTOMAKE.
# We support both call styles for the transition. After
# the next Automake release, Autoconf can make the AC_INIT
# arguments mandatory, and then we can depend on a new Autoconf
# release and drop the old call support.
AC_DEFUN([AM_INIT_AUTOMAKE],
[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
AC_REQUIRE([AC_PROG_INSTALL])dnl
# test to see if srcdir already configured
if test "`cd $srcdir && pwd`" != "`pwd`" &&
test -f $srcdir/config.status; then
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
fi
# Define the identity of the package.
dnl Distinguish between old-style and new-style calls.
m4_ifval([$2],
[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
AC_SUBST([PACKAGE], [$1])dnl
AC_SUBST([VERSION], [$2])],
[_AM_SET_OPTIONS([$1])dnl
AC_SUBST([PACKAGE], [AC_PACKAGE_TARNAME])dnl
AC_SUBST([VERSION], [AC_PACKAGE_VERSION])])dnl
_AM_IF_OPTION([no-define],,
[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
# Some tools Automake needs.
AC_REQUIRE([AM_SANITY_CHECK])dnl
AC_REQUIRE([AC_ARG_PROGRAM])dnl
AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
AM_MISSING_PROG(AUTOCONF, autoconf)
AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
AM_MISSING_PROG(AUTOHEADER, autoheader)
AM_MISSING_PROG(MAKEINFO, makeinfo)
AM_MISSING_PROG(AMTAR, tar)
AM_PROG_INSTALL_SH
AM_PROG_INSTALL_STRIP
# We need awk for the "check" target. The system "awk" is bad on
# some platforms.
AC_REQUIRE([AC_PROG_AWK])dnl
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
_AM_IF_OPTION([no-dependencies],,
[AC_PROVIDE_IFELSE([AC_PROG_][CC],
[_AM_DEPENDENCIES(CC)],
[define([AC_PROG_][CC],
defn([AC_PROG_][CC])[_AM_DEPENDENCIES(CC)])])dnl
AC_PROVIDE_IFELSE([AC_PROG_][CXX],
[_AM_DEPENDENCIES(CXX)],
[define([AC_PROG_][CXX],
defn([AC_PROG_][CXX])[_AM_DEPENDENCIES(CXX)])])dnl
])
])
# Copyright 2002 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# AM_AUTOMAKE_VERSION(VERSION)
# ----------------------------
# Automake X.Y traces this macro to ensure aclocal.m4 has been
# generated from the m4 files accompanying Automake X.Y.
AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.6"])
# AM_SET_CURRENT_AUTOMAKE_VERSION
# -------------------------------
# Call AM_AUTOMAKE_VERSION so it can be traced.
# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
[AM_AUTOMAKE_VERSION([1.6.3])])
# Helper functions for option handling. -*- Autoconf -*-
# Copyright 2001, 2002 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# serial 2
# _AM_MANGLE_OPTION(NAME)
# -----------------------
AC_DEFUN([_AM_MANGLE_OPTION],
[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
# _AM_SET_OPTION(NAME)
# ------------------------------
# Set option NAME. Presently that only means defining a flag for this option.
AC_DEFUN([_AM_SET_OPTION],
[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
# _AM_SET_OPTIONS(OPTIONS)
# ----------------------------------
# OPTIONS is a space-separated list of Automake options.
AC_DEFUN([_AM_SET_OPTIONS],
[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
# -------------------------------------------
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
#
# Check to make sure that the build environment is sane.
#
# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# serial 3
# AM_SANITY_CHECK
# ---------------
AC_DEFUN([AM_SANITY_CHECK],
[AC_MSG_CHECKING([whether build environment is sane])
# Just in case
sleep 1
echo timestamp > conftest.file
# Do `set' in a subshell so we don't clobber the current shell's
# arguments. Must try -L first in case configure is actually a
# symlink; some systems play weird games with the mod time of symlinks
# (eg FreeBSD returns the mod time of the symlink's containing
# directory).
if (
set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
if test "$[*]" = "X"; then
# -L didn't work.
set X `ls -t $srcdir/configure conftest.file`
fi
rm -f conftest.file
if test "$[*]" != "X $srcdir/configure conftest.file" \
&& test "$[*]" != "X conftest.file $srcdir/configure"; then
# If neither matched, then we have a broken ls. This can happen
# if, for instance, CONFIG_SHELL is bash and it inherits a
# broken ls alias from the environment. This has actually
# happened. Such a system could not be considered "sane".
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
alias in your environment])
fi
test "$[2]" = conftest.file
)
then
# Ok.
:
else
AC_MSG_ERROR([newly created file is older than distributed files!
Check your system clock])
fi
AC_MSG_RESULT(yes)])
# -*- Autoconf -*-
# Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# serial 3
# AM_MISSING_PROG(NAME, PROGRAM)
# ------------------------------
AC_DEFUN([AM_MISSING_PROG],
[AC_REQUIRE([AM_MISSING_HAS_RUN])
$1=${$1-"${am_missing_run}$2"}
AC_SUBST($1)])
# AM_MISSING_HAS_RUN
# ------------------
# Define MISSING if not defined so far and test if it supports --run.
# If it does, set am_missing_run to use it, otherwise, to nothing.
AC_DEFUN([AM_MISSING_HAS_RUN],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
# Use eval to expand $SHELL
if eval "$MISSING --run true"; then
am_missing_run="$MISSING --run "
else
am_missing_run=
AC_MSG_WARN([`missing' script is too old or missing])
fi
])
# AM_AUX_DIR_EXPAND
# Copyright 2001 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
#
# Of course, Automake must honor this variable whenever it calls a
# tool from the auxiliary directory. The problem is that $srcdir (and
# therefore $ac_aux_dir as well) can be either absolute or relative,
# depending on how configure is run. This is pretty annoying, since
# it makes $ac_aux_dir quite unusable in subdirectories: in the top
# source directory, any form will work fine, but in subdirectories a
# relative path needs to be adjusted first.
#
# $ac_aux_dir/missing
# fails when called from a subdirectory if $ac_aux_dir is relative
# $top_srcdir/$ac_aux_dir/missing
# fails if $ac_aux_dir is absolute,
# fails when called from a subdirectory in a VPATH build with
# a relative $ac_aux_dir
#
# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
# are both prefixed by $srcdir. In an in-source build this is usually
# harmless because $srcdir is `.', but things will broke when you
# start a VPATH build or use an absolute $srcdir.
#
# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
# and then we would define $MISSING as
# MISSING="\${SHELL} $am_aux_dir/missing"
# This will work as long as MISSING is not called from configure, because
# unfortunately $(top_srcdir) has no meaning in configure.
# However there are other variables, like CC, which are often used in
# configure, and could therefore not use this "fixed" $ac_aux_dir.
#
# Another solution, used here, is to always expand $ac_aux_dir to an
# absolute PATH. The drawback is that using absolute paths prevent a
# configured tree to be moved without reconfiguration.
# Rely on autoconf to set up CDPATH properly.
AC_PREREQ([2.50])
AC_DEFUN([AM_AUX_DIR_EXPAND], [
# expand $ac_aux_dir to an absolute path
am_aux_dir=`cd $ac_aux_dir && pwd`
])
# AM_PROG_INSTALL_SH
# ------------------
# Define $install_sh.
# Copyright 2001 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
AC_DEFUN([AM_PROG_INSTALL_SH],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
install_sh=${install_sh-"$am_aux_dir/install-sh"}
AC_SUBST(install_sh)])
# AM_PROG_INSTALL_STRIP
# Copyright 2001 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# One issue with vendor `install' (even GNU) is that you can't
# specify the program used to strip binaries. This is especially
# annoying in cross-compiling environments, where the build's strip
# is unlikely to handle the host's binaries.
# Fortunately install-sh will honor a STRIPPROG variable, so we
# always use install-sh in `make install-strip', and initialize
# STRIPPROG with the value of the STRIP variable (set by the user).
AC_DEFUN([AM_PROG_INSTALL_STRIP],
[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
# Installed binaries are usually stripped using `strip' when the user
# run `make install-strip'. However `strip' might not be the right
# tool to use in cross-compilation environments, therefore Automake
# will honor the `STRIP' environment variable to overrule this program.
dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
if test "$cross_compiling" != no; then
AC_CHECK_TOOL([STRIP], [strip], :)
fi
INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])
# serial 4 -*- Autoconf -*-
# Copyright 1999, 2000, 2001 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4,
# will think it sees a *use*, and therefore will trigger all it's
# C support machinery. Also note that it means that autoscan, seeing
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
# _AM_DEPENDENCIES(NAME)
# ----------------------
# See how the compiler implements dependency checking.
# NAME is "CC", "CXX", "GCJ", or "OBJC".
# We try a few techniques and use that to set a single cache variable.
#
# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
# dependency, and given that the user is not expected to run this macro,
# just rely on AC_PROG_CC.
AC_DEFUN([_AM_DEPENDENCIES],
[AC_REQUIRE([AM_SET_DEPDIR])dnl
AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
AC_REQUIRE([AM_MAKE_INCLUDE])dnl
AC_REQUIRE([AM_DEP_TRACK])dnl
ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
[$1], CXX, [depcc="$CXX" am_compiler_list=],
[$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
[$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
[depcc="$$1" am_compiler_list=])
AC_CACHE_CHECK([dependency style of $depcc],
[am_cv_$1_dependencies_compiler_type],
[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
# We make a subdir and do the tests there. Otherwise we can end up
# making bogus files that we don't know about and never remove. For
# instance it was reported that on HP-UX the gcc test will end up
# making a dummy file named `D' -- because `-MD' means `put the output
# in D'.
mkdir conftest.dir
# Copy depcomp to subdir because otherwise we won't find it if we're
# using a relative directory.
cp "$am_depcomp" conftest.dir
cd conftest.dir
am_cv_$1_dependencies_compiler_type=none
if test "$am_compiler_list" = ""; then
am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
fi
for depmode in $am_compiler_list; do
# We need to recreate these files for each test, as the compiler may
# overwrite some of them when testing with obscure command lines.
# This happens at least with the AIX C compiler.
echo '#include "conftest.h"' > conftest.c
echo 'int i;' > conftest.h
echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf
case $depmode in
nosideeffect)
# after this tag, mechanisms are not by side-effect, so they'll
# only be used when explicitly requested
if test "x$enable_dependency_tracking" = xyes; then
continue
else
break
fi
;;
none) break ;;
esac
# We check with `-c' and `-o' for the sake of the "dashmstdout"
# mode. It turns out that the SunPro C++ compiler does not properly
# handle `-M -o', and we need to detect this.
if depmode=$depmode \
source=conftest.c object=conftest.o \
depfile=conftest.Po tmpdepfile=conftest.TPo \
$SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 &&
grep conftest.h conftest.Po > /dev/null 2>&1 &&
${MAKE-make} -s -f confmf > /dev/null 2>&1; then
am_cv_$1_dependencies_compiler_type=$depmode
break
fi
done
cd ..
rm -rf conftest.dir
else
am_cv_$1_dependencies_compiler_type=none
fi
])
AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
])
# AM_SET_DEPDIR
# -------------
# Choose a directory name for dependency files.
# This macro is AC_REQUIREd in _AM_DEPENDENCIES
AC_DEFUN([AM_SET_DEPDIR],
[rm -f .deps 2>/dev/null
mkdir .deps 2>/dev/null
if test -d .deps; then
DEPDIR=.deps
else
# MS-DOS does not allow filenames that begin with a dot.
DEPDIR=_deps
fi
rmdir .deps 2>/dev/null
AC_SUBST([DEPDIR])
])
# AM_DEP_TRACK
# ------------
AC_DEFUN([AM_DEP_TRACK],
[AC_ARG_ENABLE(dependency-tracking,
[ --disable-dependency-tracking Speeds up one-time builds
--enable-dependency-tracking Do not reject slow dependency extractors])
if test "x$enable_dependency_tracking" != xno; then
am_depcomp="$ac_aux_dir/depcomp"
AMDEPBACKSLASH='\'
fi
AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
AC_SUBST([AMDEPBACKSLASH])
])
# Generate code to set up dependency tracking. -*- Autoconf -*-
# Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
#serial 2
# _AM_OUTPUT_DEPENDENCY_COMMANDS
# ------------------------------
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
[for mf in $CONFIG_FILES; do
# Strip MF so we end up with the name of the file.
mf=`echo "$mf" | sed -e 's/:.*$//'`
# Check whether this is an Automake generated Makefile or not.
# We used to match only the files named `Makefile.in', but
# some people rename them; so instead we look at the file content.
# Grep'ing the first line is not enough: some people post-process
# each Makefile.in and add a new line on top of each file to say so.
# So let's grep whole file.
if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
dirpart=`AS_DIRNAME("$mf")`
else
continue
fi
grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue
# Extract the definition of DEP_FILES from the Makefile without
# running `make'.
DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
test -z "$DEPDIR" && continue
# When using ansi2knr, U may be empty or an underscore; expand it
U=`sed -n -e '/^U = / s///p' < "$mf"`
test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
# We invoke sed twice because it is the simplest approach to
# changing $(DEPDIR) to its actual value in the expansion.
for file in `sed -n -e '
/^DEP_FILES = .*\\\\$/ {
s/^DEP_FILES = //
:loop
s/\\\\$//
p
n
/\\\\$/ b loop
p
}
/^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
# Make sure the directory exists.
test -f "$dirpart/$file" && continue
fdir=`AS_DIRNAME(["$file"])`
AS_MKDIR_P([$dirpart/$fdir])
# echo "creating $dirpart/$file"
echo '# dummy' > "$dirpart/$file"
done
done
])# _AM_OUTPUT_DEPENDENCY_COMMANDS
# AM_OUTPUT_DEPENDENCY_COMMANDS
# -----------------------------
# This macro should only be invoked once -- use via AC_REQUIRE.
#
# This code is only required when automatic dependency tracking
# is enabled. FIXME. This creates each `.P' file that we will
# need in order to bootstrap the dependency handling code.
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
[AC_CONFIG_COMMANDS([depfiles],
[test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
[AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
])
# Copyright 2001 Free Software Foundation, Inc. -*- Autoconf -*-
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# serial 2
# AM_MAKE_INCLUDE()
# -----------------
# Check to see how make treats includes.
AC_DEFUN([AM_MAKE_INCLUDE],
[am_make=${MAKE-make}
cat > confinc << 'END'
doit:
@echo done
END
# If we don't find an include directive, just comment out the code.
AC_MSG_CHECKING([for style of include used by $am_make])
am__include="#"
am__quote=
_am_result=none
# First try GNU make style include.
echo "include confinc" > confmf
# We grep out `Entering directory' and `Leaving directory'
# messages which can occur if `w' ends up in MAKEFLAGS.
# In particular we don't look at `^make:' because GNU make might
# be invoked under some other name (usually "gmake"), in which
# case it prints its new name instead of `make'.
if test "`$am_make -s -f confmf 2> /dev/null | fgrep -v 'ing directory'`" = "done"; then
am__include=include
am__quote=
_am_result=GNU
fi
# Now try BSD make style include.
if test "$am__include" = "#"; then
echo '.include "confinc"' > confmf
if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
am__include=.include
am__quote="\""
_am_result=BSD
fi
fi
AC_SUBST(am__include)
AC_SUBST(am__quote)
AC_MSG_RESULT($_am_result)
rm -f confinc confmf
])
# AM_CONDITIONAL -*- Autoconf -*-
# Copyright 1997, 2000, 2001 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# serial 5
AC_PREREQ(2.52)
# AM_CONDITIONAL(NAME, SHELL-CONDITION)
# -------------------------------------
# Define a conditional.
AC_DEFUN([AM_CONDITIONAL],
[ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
AC_SUBST([$1_TRUE])
AC_SUBST([$1_FALSE])
if $2; then
$1_TRUE=
$1_FALSE='#'
else
$1_TRUE='#'
$1_FALSE=
fi
AC_CONFIG_COMMANDS_PRE(
[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
AC_MSG_ERROR([conditional \"$1\" was never defined.
Usually this means the macro was only invoked conditionally.])
fi])])
# Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# AM_PATH_PYTHON([MINIMUM-VERSION])
# Adds support for distributing Python modules and packages. To
# install modules, copy them to $(pythondir), using the python_PYTHON
# automake variable. To install a package with the same name as the
# automake package, install to $(pkgpythondir), or use the
# pkgpython_PYTHON automake variable.
# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as
# locations to install python extension modules (shared libraries).
# Another macro is required to find the appropriate flags to compile
# extension modules.
# If your package is configured with a different prefix to python,
# users will have to add the install directory to the PYTHONPATH
# environment variable, or create a .pth file (see the python
# documentation for details).
# If the MINIUMUM-VERSION argument is passed, AM_PATH_PYTHON will
# cause an error if the version of python installed on the system
# doesn't meet the requirement. MINIMUM-VERSION should consist of
# numbers and dots only.
AC_DEFUN([AM_PATH_PYTHON],
[
dnl Find a Python interpreter. Python versions prior to 1.5 are not
dnl supported because the default installation locations changed from
dnl $prefix/lib/site-python in 1.4 to $prefix/lib/python1.5/site-packages
dnl in 1.5.
m4_define([_AM_PYTHON_INTERPRETER_LIST],
[python python2 python2.2 python2.1 python2.0 python1.6 python1.5])
m4_if([$1],[],[
dnl No version check is needed.
# Find any Python interpreter.
AC_PATH_PROG([PYTHON], _AM_PYTHON_INTERPRETER_LIST)],[
dnl A version check is needed.
if test -n "$PYTHON"; then
# If the user set $PYTHON, use it and don't search something else.
AC_MSG_CHECKING([whether $PYTHON version >= $1])
AM_PYTHON_CHECK_VERSION([$PYTHON], [$1],
[AC_MSG_RESULT(yes)],
[AC_MSG_ERROR(too old)])
else
# Otherwise, try each interpreter until we find one that satisfies
# VERSION.
AC_CACHE_CHECK([for a Python interpreter with version >= $1],
[am_cv_pathless_PYTHON],[
for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST : ; do
if test "$am_cv_pathless_PYTHON" = : ; then
AC_MSG_ERROR([no suitable Python interpreter found])
fi
AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break])
done])
# Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON.
AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON])
fi
])
dnl Query Python for its version number. Getting [:3] seems to be
dnl the best way to do this; it's what "site.py" does in the standard
dnl library.
AC_CACHE_CHECK([for $am_cv_pathless_PYTHON version], [am_cv_python_version],
[am_cv_python_version=`$PYTHON -c "import sys; print sys.version[[:3]]"`])
AC_SUBST([PYTHON_VERSION], [$am_cv_python_version])
dnl Use the values of $prefix and $exec_prefix for the corresponding
dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made
dnl distinct variables so they can be overridden if need be. However,
dnl general consensus is that you shouldn't need this ability.
AC_SUBST([PYTHON_PREFIX], ['${prefix}'])
AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}'])
dnl At times (like when building shared libraries) you may want
dnl to know which OS platform Python thinks this is.
AC_CACHE_CHECK([for $am_cv_pathless_PYTHON platform],
[am_cv_python_platform],
[am_cv_python_platform=`$PYTHON -c "import sys; print sys.platform"`])
AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform])
dnl Set up 4 directories:
dnl pythondir -- where to install python scripts. This is the
dnl site-packages directory, not the python standard library
dnl directory like in previous automake betas. This behaviour
dnl is more consistent with lispdir.m4 for example.
dnl
dnl Also, if the package prefix isn't the same as python's prefix,
dnl then the old $(pythondir) was pretty useless.
AC_SUBST([pythondir],
[$PYTHON_PREFIX"/lib/python"$PYTHON_VERSION/site-packages])
dnl pkgpythondir -- $PACKAGE directory under pythondir. Was
dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is
dnl more consistent with the rest of automake.
dnl Maybe this should be put in python.am?
AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE])
dnl pyexecdir -- directory for installing python extension modules
dnl (shared libraries) Was PYTHON_SITE_EXEC in previous betas.
AC_SUBST([pyexecdir],
[${PYTHON_EXEC_PREFIX}/lib/python${PYTHON_VERSION}/site-packages])
dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE)
dnl Maybe this should be put in python.am?
AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE])
])
# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
# ---------------------------------------------------------------------------
# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
# Run ACTION-IF-FALSE otherwise.
# This test uses sys.hexversion instead of the string equivalant (first
# word of sys.version), in order to cope with versions such as 2.2c1.
# hexversion has been introduced in Python 1.5.2; it's probably not
# worth to support older versions (1.5.1 was released on October 31, 1998).
AC_DEFUN([AM_PYTHON_CHECK_VERSION],
[prog="import sys, string
# split strings by '.' and convert to numeric. Append some zeros
# because we need at least 4 digits for the hex conversion.
minver = map(int, string.split('$2', '.')) + [[0, 0, 0]]
minverhex = 0
for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[[i]]
sys.exit(sys.hexversion < minverhex)"
AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])
# Copyright 2001 Free Software Foundation, Inc. -*- Autoconf -*-
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# AM_RUN_LOG(COMMAND)
# -------------------
# Run COMMAND, save the exit status in ac_status, and log it.
# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
AC_DEFUN([AM_RUN_LOG],
[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
(exit $ac_status); }])

96
autogen.sh Executable file
View File

@ -0,0 +1,96 @@
#!/bin/sh
# Run this to generate all the initial makefiles, etc.
# shamelessly borrowed and hacked from the Galeon source distribution
srcdir=`dirname $0`
test -z "$srcdir" && srcdir=.
PKG_NAME="gramps"
(test -f $srcdir/configure.in \
&& test -f $srcdir/src/gramps_main.py) || {
echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
echo " top-level $PKG_NAME directory"
exit 1
}
DIE=0
(autoconf --version) < /dev/null > /dev/null 2>&1 || {
echo
echo "**Error**: You must have \`autoconf' installed to compile $PKG_NAME."
echo "Download the appropriate package for your distribution,"
echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
DIE=1
}
(automake --version) < /dev/null > /dev/null 2>&1 || {
echo
echo "**Error**: You must have \`automake' installed to compile $PKG_NAME."
echo "Get ftp://ftp.gnu.org/pub/gnu/automake/automake-1.6.tar.gz"
echo "(or a newer version if it is available)"
DIE=1
NO_AUTOMAKE=yes
}
# if no automake, don't bother testing for aclocal
test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || {
echo
echo "**Error**: Missing \`aclocal'. The version of \`automake'"
echo "installed doesn't appear recent enough."
echo "Get ftp://ftp.gnu.org/pub/gnu/automake/automake-1.6.tar.gz"
echo "(or a newer version if it is available)"
DIE=1
}
if test "$DIE" -eq 1; then
exit 1
fi
if test -z "$*"; then
echo "**Warning**: I am going to run \`configure' with no arguments."
echo "If you wish to pass any to it, please specify them on the"
echo \`$0\'" command line."
echo
fi
case $CC in
xlc )
am_opt=--include-deps;;
esac
dr=$srcdir
echo processing $dr
( cd $dr
aclocalinclude="$ACLOCAL_FLAGS"
echo "Running aclocal $aclocalinclude ..."
aclocal $aclocalinclude || {
echo
echo "**Error**: aclocal failed. This may mean that you have not"
echo "installed all of the packages you need, or you may need to"
echo "set ACLOCAL_FLAGS to include \"-I \$prefix/share/aclocal\""
echo "for the prefix where you installed the packages whose"
echo "macros were not found"
exit 1
}
echo "Running automake --gnu $am_opt ..."
automake --add-missing --gnu $am_opt ||
{ echo "**Error**: automake failed."; exit 1; }
echo "Running autoconf ..."
autoconf || { echo "**Error**: autoconf failed."; exit 1; }
) || exit 1
echo "Setting py-compile script executable ..."
chmod 755 py-compile
if test x$NOCONFIGURE = x; then
echo Running $srcdir/configure $conf_flags "$@" ...
$srcdir/configure $conf_flags "$@" \
&& echo Now type \`make\' to compile $PKG_NAME || exit 1
else
echo Skipping configure process.
fi

4941
configure vendored Executable file

File diff suppressed because it is too large Load Diff

293
configure.in Normal file
View File

@ -0,0 +1,293 @@
dnl Process this file with autoconf to produce a configure script.
dnl May need to run automake && aclocal first
AC_INIT(src/gramps.py)
AM_INIT_AUTOMAKE(gramps, 0.9.0pre1)
RELEASE=rc4
VERSIONSTRING=$VERSION
if test x"$RELEASE" != "x"
then
VERSIONSTRING="$VERSION-$RELEASE"
fi
AC_SUBST(PACKAGE)
AC_SUBST(VERSION)
AC_SUBST(RELEASE)
AC_SUBST(VERSIONSTRING)
AC_PATH_PROG(MSGFMT, msgfmt)
AC_SUBST(MSGFMT)
LANGUAGES="sv de fr es it pt_BR ru da_DK cs"
AC_SUBST(LANGUAGES)
DISTLANGS=
POFILES=
MOFILES=
for lang in $LANGUAGES; do
POFILES="$POFILES $lang.po"
MOFILES="$MOFILES $lang.mo"
done
AC_SUBST(POFILES)
AC_SUBST(MOFILES)
dnl Checks for programs.
dnl We first only check for python >= 1.5
AM_PATH_PYTHON(2.2)
dnl override automatic python detection with our own place
pythondir=\${prefix}/share
pyexecdir=\${prefix}/share
pkgpythondir=\${prefix}/share/\${PACKAGE}
pkgpyexecdir=\${prefix}/share/\${PACKAGE}
AC_PATH_PROG(BINSH, sh)
changequote(<<, >>)dnl
PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[:3]"`
changequote([, ])dnl
if test "$PYTHON_VERSION" != "2.2"
then
AC_PATH_PROG(PYTHON22, python2.2)
else
PYTHON22=$PYTHON
fi
AC_PATH_PROG(ZIP, zip)
AC_PROG_INSTALL
AC_PROG_MAKE_SET
AC_PROG_CC
AC_CHECK_HEADER(libintl.h)
AC_CHECK_LIB(c,textdomain,LIBS="",
[ AC_CHECK_LIB(intl,textdomain,
LIBS="-lintl",
AC_MSG_ERROR("Could not find internationalization libraries"))
])
dnl Check for programs
AC_CHECK_PROG(HAVE_GNOME_CONFIG, gnome-config, "YES", "NO")
GNOMEHELP=`gnome-config --prefix`
dnl Check if python bindings for gtk are installed
AC_MSG_CHECKING(Python bindings for sax/xml)
changequote(,)
cat > conftest.py <<EOF
try:
from xml.sax import make_parser, handler
f = open("conftest.out", "w")
f.write("YES")
f.close()
except ImportError:
try:
from _xmlplus.sax import make_parser, handler
f = open("conftest.out", "w")
f.write("YES")
f.close()
except ImportError:
f = open("conftest.out", "w")
f.write("NO")
f.close()
EOF
changequote([, ])
$PYTHON conftest.py
has_sax=`cat conftest.out`
rm -f conftest.out conftest.py
if test "YES" != $has_sax
then
AC_MSG_ERROR([
**** The python interpreter can't find the SAX/XML bindings.])
fi
AC_MSG_RESULT(ok)
AC_MSG_CHECKING(Python bindings for gtk)
changequote(,)
cat > conftest.py <<EOF
try:
import gobject
f = open("conftest.out", "w")
f.write("YES")
f.close()
except ImportError:
f = open("conftest.out", "w")
f.write("NO")
f.close()
EOF
changequote([, ])
$PYTHON conftest.py
has_pygtk=`cat conftest.out`
rm -f conftest.out conftest.py
if test "YES" != $has_pygtk
then
AC_MSG_ERROR([
**** The python interpreter can't find the python bindings for gtk 2.0.])
fi
AC_MSG_RESULT(ok)
AC_MSG_CHECKING(Python bindings for GNOME)
changequote(,)
cat > conftest.py <<EOF
try:
import gnome, gnome.ui
f = open("conftest.out", "w")
f.write("YES")
f.close()
except ImportError:
f = open("conftest.out", "w")
f.write("NO")
f.close()
EOF
changequote([, ])
$PYTHON conftest.py
has_pygnome=`cat conftest.out`
rm -f conftest.out conftest.py
if test "YES" != $has_pygnome
then
AC_MSG_ERROR([
**** The python interpreter can't find the python bindings for GNOME.])
fi
AC_MSG_RESULT(ok)
AC_MSG_CHECKING(Python/libglade bindings)
changequote(,)
cat > conftest.py <<EOF
try:
import gtk.glade
f = open("conftest.out", "w")
f.write("YES")
f.close()
except ImportError:
f = open("conftest.out", "w")
f.write("NO")
f.close()
EOF
changequote([, ])
$PYTHON conftest.py
has_pygtk=`cat conftest.out`
rm -f conftest.out conftest.py
if test "YES" != $has_pygtk
then
AC_MSG_ERROR([
**** The python interpreter can't find the python bindings for libglade.])
fi
AC_MSG_RESULT(ok)
AC_MSG_CHECKING(Python bindings for gconf)
changequote(,)
cat > conftest.py <<EOF
try:
import gconf
f = open("conftest.out", "w")
f.write("YES")
f.close()
except ImportError:
f = open("conftest.out", "w")
f.write("NO")
f.close()
EOF
changequote([, ])
$PYTHON conftest.py
has_gconf=`cat conftest.out`
rm -f conftest.out conftest.py
if test "YES" != $has_gconf
then
AC_MSG_ERROR([
**** The python interpreter can't find the python bindings for gconf.])
fi
AC_MSG_RESULT(ok)
dnl Checks for libraries.
dnl Checks for header files.
AC_MSG_CHECKING(for headers required to compile python extensions)
if test "$PYTHON22" != ""; then
py_prefix=`$PYTHON22 -c "import sys; print sys.prefix"`
py_exec_prefix=`$PYTHON22 -c "import sys; print sys.exec_prefix"`
P22_INCLUDES="-I${py_prefix}/include/python2.2"
if test "$py_prefix" != "$py_exec_prefix"; then
P22_INCLUDES="$P22_INCLUDES -I${py_exec_prefix}/include/python2.2"
fi
if test -f "${py_exec_prefix}/include/python2.2/Python.h"
then
INTLLIBS="${INTLLIBS}intl22.so "
fi
fi
AC_MSG_RESULT(ok)
dnl ======================================================
dnl == Modern documentation tools (scrollkeeper) checks
dnl == We may need a more recent version (GNOME2 will use
dnl == scrollkeeper > 0.3) but basic scrollkeeper instructions
dnl == use 0.1.4 example so we'll just check for that
dnl ======================================================
SCROLLKEEPER_REQUIRED=0.1.4
AC_SUBST(SCROLLKEEPER_REQUIRED)
dnl First see that *some* version of scrollkeeper is installed
AC_PATH_PROG(SCROLLKEEPER_CONFIG, scrollkeeper-config, no)
if test x$SCROLLKEEPER_CONFIG = xno; then
AC_MSG_ERROR(Couldn't find scrollkeeper-config. Please install the scrollkeeper package.)
DISABLE_SCROLLKEEPER=1
AC_SUBST(DISABLE_SCROLLKEEPER)
fi
dnl ======================================================
dnl == GNOME modified DTD's need jw, not db2html
dnl ======================================================
AC_PATH_PROG(JW, jw, no)
if test x$JW = xno; then
HAVE_JW="no"
else
HAVE_JW="yes"
fi
AC_SUBST(HAVE_JW)
dnl ======================================================
dnl == end of modern doc tests
dnl ======================================================
AC_SUBST(BINSH)
AC_SUBST(PYTHON)
AC_SUBST(PYTHON_VERSION)
AC_SUBST(GNOMEHELP)
AC_SUBST(LIBS)
AC_SUBST(P15_INCLUDES)
AC_SUBST(P20_INCLUDES)
AC_SUBST(P21_INCLUDES)
AC_SUBST(P22_INCLUDES)
AC_SUBST(INTLLIBS)
AC_OUTPUT([
Makefile
src/Makefile
src/const.py
src/docgen/Makefile
src/filters/Makefile
src/plugins/Makefile
src/data/Makefile
src/data/templates/Makefile
src/po/Makefile
doc/Makefile
doc/gramps-manual/Makefile
doc/gramps-manual/C/Makefile
doc/extending-gramps/Makefile
doc/extending-gramps/C/Makefile
omf-install/Makefile
gramps.spec
gramps.sh])

11
doc/Makefile.am Normal file
View File

@ -0,0 +1,11 @@
# Process this file with automake to produce Makefile.in
SUBDIRS = gramps-manual extending-gramps
man_IN_FILES = gramps.1.in
man_MANS = ${man_IN_FILES:.1.in=.1}
EXTRA_DIST = $(man_MANS) $(man_IN_FILES) sgmldocs.make
gramps.1: $(top_builddir)/config.status gramps.1.in
cd $(top_builddir) && CONFIG_FILES=doc/$@ $(SHELL) ./config.status

409
doc/Makefile.in Normal file
View File

@ -0,0 +1,409 @@
# Makefile.in generated by automake 1.6.3 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
# Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# Process this file with automake to produce Makefile.in
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
EXEEXT = @EXEEXT@
OBJEXT = @OBJEXT@
PATH_SEPARATOR = @PATH_SEPARATOR@
AMTAR = @AMTAR@
AWK = @AWK@
BINSH = @BINSH@
CC = @CC@
DEPDIR = @DEPDIR@
DISABLE_SCROLLKEEPER = @DISABLE_SCROLLKEEPER@
GNOMEHELP = @GNOMEHELP@
HAVE_GNOME_CONFIG = @HAVE_GNOME_CONFIG@
HAVE_JW = @HAVE_JW@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INTLLIBS = @INTLLIBS@
JW = @JW@
LANGUAGES = @LANGUAGES@
LIBS = @LIBS@
MOFILES = @MOFILES@
MSGFMT = @MSGFMT@
P15_INCLUDES = @P15_INCLUDES@
P20_INCLUDES = @P20_INCLUDES@
P21_INCLUDES = @P21_INCLUDES@
P22_INCLUDES = @P22_INCLUDES@
PACKAGE = @PACKAGE@
POFILES = @POFILES@
PYTHON = @PYTHON@
PYTHON22 = @PYTHON22@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
PYTHON_VERSION = @PYTHON_VERSION@
RELEASE = @RELEASE@
SCROLLKEEPER_CONFIG = @SCROLLKEEPER_CONFIG@
SCROLLKEEPER_REQUIRED = @SCROLLKEEPER_REQUIRED@
STRIP = @STRIP@
VERSION = @VERSION@
VERSIONSTRING = @VERSIONSTRING@
ZIP = @ZIP@
am__include = @am__include@
am__quote = @am__quote@
install_sh = @install_sh@
pkgpyexecdir = @pkgpyexecdir@
pkgpythondir = @pkgpythondir@
pyexecdir = @pyexecdir@
pythondir = @pythondir@
SUBDIRS = gramps-manual extending-gramps
man_IN_FILES = gramps.1.in
man_MANS = ${man_IN_FILES:.1.in=.1}
EXTRA_DIST = $(man_MANS) $(man_IN_FILES) sgmldocs.make
subdir = doc
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_CLEAN_FILES =
DIST_SOURCES =
NROFF = nroff
MANS = $(man_MANS)
RECURSIVE_TARGETS = info-recursive dvi-recursive install-info-recursive \
uninstall-info-recursive all-recursive install-data-recursive \
install-exec-recursive installdirs-recursive install-recursive \
uninstall-recursive check-recursive installcheck-recursive
DIST_COMMON = Makefile.am Makefile.in
DIST_SUBDIRS = $(SUBDIRS)
all: all-recursive
.SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu doc/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
uninstall-info-am:
man1dir = $(mandir)/man1
install-man1: $(man1_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(man1dir)
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
case "$$i" in \
*.1*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
else file=$$i; fi; \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
case "$$ext" in \
1*) ;; \
*) ext='1' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \
$(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \
done
uninstall-man1:
@$(NORMAL_UNINSTALL)
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
case "$$i" in \
*.1*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \
rm -f $(DESTDIR)$(man1dir)/$$inst; \
done
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
@set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ETAGS = etags
ETAGSFLAGS =
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = ..
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@list='$(DISTFILES)'; for file in $$list; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkinstalldirs) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d $(distdir)/$$subdir \
|| mkdir $(distdir)/$$subdir \
|| exit 1; \
(cd $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$(top_distdir)" \
distdir=../$(distdir)/$$subdir \
distdir) \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-recursive
all-am: Makefile $(MANS)
installdirs: installdirs-recursive
installdirs-am:
$(mkinstalldirs) $(DESTDIR)$(man1dir)
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic mostlyclean-am
distclean: distclean-recursive
distclean-am: clean-am distclean-generic distclean-tags
dvi: dvi-recursive
dvi-am:
info: info-recursive
info-am:
install-data-am: install-man
install-exec-am:
install-info: install-info-recursive
install-man: install-man1
installcheck-am:
maintainer-clean: maintainer-clean-recursive
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic
uninstall-am: uninstall-info-am uninstall-man
uninstall-info: uninstall-info-recursive
uninstall-man: uninstall-man1
.PHONY: $(RECURSIVE_TARGETS) GTAGS all all-am check check-am clean \
clean-generic clean-recursive distclean distclean-generic \
distclean-recursive distclean-tags distdir dvi dvi-am \
dvi-recursive info info-am info-recursive install install-am \
install-data install-data-am install-data-recursive \
install-exec install-exec-am install-exec-recursive \
install-info install-info-am install-info-recursive install-man \
install-man1 install-recursive install-strip installcheck \
installcheck-am installdirs installdirs-am \
installdirs-recursive maintainer-clean maintainer-clean-generic \
maintainer-clean-recursive mostlyclean mostlyclean-generic \
mostlyclean-recursive tags tags-recursive uninstall \
uninstall-am uninstall-info-am uninstall-info-recursive \
uninstall-man uninstall-man1 uninstall-recursive
gramps.1: $(top_builddir)/config.status gramps.1.in
cd $(top_builddir) && CONFIG_FILES=doc/$@ $(SHELL) ./config.status
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -0,0 +1,10 @@
SGML_FILES =
figs =
docname = extending-gramps
lang = C
omffile = extending-gramps-C.omf
sgml_ents =
include ${top_srcdir}/doc/sgmldocs.make
dist-hook: app-dist-hook

View File

@ -0,0 +1,240 @@
# Makefile.in generated by automake 1.6.3 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
# Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ../../..
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
EXEEXT = @EXEEXT@
OBJEXT = @OBJEXT@
PATH_SEPARATOR = @PATH_SEPARATOR@
AMTAR = @AMTAR@
AWK = @AWK@
BINSH = @BINSH@
CC = @CC@
DEPDIR = @DEPDIR@
DISABLE_SCROLLKEEPER = @DISABLE_SCROLLKEEPER@
GNOMEHELP = @GNOMEHELP@
HAVE_GNOME_CONFIG = @HAVE_GNOME_CONFIG@
HAVE_JW = @HAVE_JW@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INTLLIBS = @INTLLIBS@
JW = @JW@
LANGUAGES = @LANGUAGES@
LIBS = @LIBS@
MOFILES = @MOFILES@
MSGFMT = @MSGFMT@
P15_INCLUDES = @P15_INCLUDES@
P20_INCLUDES = @P20_INCLUDES@
P21_INCLUDES = @P21_INCLUDES@
P22_INCLUDES = @P22_INCLUDES@
PACKAGE = @PACKAGE@
POFILES = @POFILES@
PYTHON = @PYTHON@
PYTHON22 = @PYTHON22@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
PYTHON_VERSION = @PYTHON_VERSION@
RELEASE = @RELEASE@
SCROLLKEEPER_CONFIG = @SCROLLKEEPER_CONFIG@
SCROLLKEEPER_REQUIRED = @SCROLLKEEPER_REQUIRED@
STRIP = @STRIP@
VERSION = @VERSION@
VERSIONSTRING = @VERSIONSTRING@
ZIP = @ZIP@
am__include = @am__include@
am__quote = @am__quote@
install_sh = @install_sh@
pkgpyexecdir = @pkgpyexecdir@
pkgpythondir = @pkgpythondir@
pyexecdir = @pyexecdir@
pythondir = @pythondir@
SGML_FILES =
figs =
docname = extending-gramps
lang = C
omffile = extending-gramps-C.omf
sgml_ents =
subdir = doc/extending-gramps/C
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_CLEAN_FILES =
DIST_SOURCES =
DIST_COMMON = Makefile.am Makefile.in
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu doc/extending-gramps/C/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
uninstall-info-am:
tags: TAGS
TAGS:
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = ../../..
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@list='$(DISTFILES)'; for file in $$list; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkinstalldirs) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="${top_distdir}" distdir="$(distdir)" \
dist-hook
check-am: all-am
check: check-am
all-am: Makefile
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic mostlyclean-am
distclean: distclean-am
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
info: info-am
info-am:
install-data-am:
install-exec-am:
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic
uninstall-am: uninstall-info-am
.PHONY: all all-am check check-am clean clean-generic distclean \
distclean-generic distdir dvi dvi-am info info-am install \
install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-generic uninstall uninstall-am uninstall-info-am
include ${top_srcdir}/doc/sgmldocs.make
dist-hook: app-dist-hook
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -0,0 +1,14 @@
<?xml version="1.0" standalone="no"?>
<omf>
<resource>
<title>
Writing GRAMPS Extensions
</title>
<subject>
<category>GNOME|Applications</category>
</subject>
<format mime="text/sgml"/>
<identifier url="extending-gramps.sgml"/>
<language code="C"/>
</resource>
</omf>

View File

@ -0,0 +1,774 @@
<!DOCTYPE article PUBLIC "-//GNOME//DTD DocBook PNG Variant V1.1//EN"[
<!ENTITY version "0.5.0"> <!-- replace with application version -->
]>
<!-- =============Document Header ============================= -->
<article id="index"> <!-- please do not change the id -->
<artheader>
<title>Writing Extentions for gramps</title>
<copyright>
<year>2001</year>
<holder>Donald N. Allingham</holder>
</copyright>
<!-- translators: uncomment this:
<copyright>
<year>2001</year>
<holder>ME-THE-TRANSLATOR (Latin translation)</holder>
</copyright>
-->
<!-- do not put authorname in the header except in copyright - use
section "authors" below -->
<!-- Use this legal notice for online documents which depend on -->
<!-- core GNOME packages. -->
<legalnotice id="legalnotice">
<para>
Permission is granted to copy, distribute and/or modify this
document under the terms of the <ulink type="help"
url="gnome-help:fdl"><citetitle>GNU Free Documentation
License</citetitle></ulink>, Version 1.1 or any later version
published by the Free Software Foundation with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy
of the license can be found <ulink type="help"
url="gnome-help:fdl">here</ulink>.
</para>
<para>
Many of the names used by companies to distinguish their products
and services are claimed as trademarks. Where those names appear
in any GNOME documentation, and those trademarks are made aware to
the members of the GNOME Documentation Project, the names have
been printed in caps or initial caps.
</para>
</legalnotice>
<!-- Use this legal notice for documents which are placed on -->
<!-- the web, shipped in any way other than online documents -->
<!-- (eg. PS, PDF, or RTF), or which do not depend on the -->
<!-- core GNOME distribution. -->
<!-- -->
<!-- If you use this version, you must place the following -->
<!-- line in the document declaration at the top of your -->
<!-- document: -->
<!-- <!ENTITY FDL SYSTEM "fdl.sgml"> -->
<!-- and the following line at the bottom of your document -->
<!-- after the last </sect1>. -->
<!-- &FDL; -->
<!--
<legalnotice id="legalnotice">
<para>
Permission is granted to copy, distribute and/or modify this
document under the terms of the <link linkend="fdl"><citetitle>GNU
Free Documentation License</citetitle></link>, Version 1.1 or any
later version published by the Free Software Foundation with no
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license can be found in <xref linkend="fdl">.
</para>
<para>
Many of the names used by companies to distinguish their products
and services are claimed as trademarks. Where those names appear
in any GNOME documentation, and those trademarks are made aware to
the members of the GNOME Documentation Project, the names have
been printed in caps or initial caps.
</para>
</legalnotice>
-->
<!-- This is the manual version, not application version. -->
<releaseinfo>
This is version 1.0 of the Writing Extentions for gramps manual.
</releaseinfo>
</artheader>
<!-- ============= Introduction ============================== -->
<sect1 id="intro">
<title>Introduction</title>
<para>
<application>gramps</application> was intended from the start to
allow the user to extend it through a plugin system. Five types of
plugins are supported - filters, reports, tools, import filters,
and export filters. In a way, an export filter can be viewed as a
special type of report, and an import filter can be viewed as a
special type of tool.
</para>
<para>
All plugins are written in the <application>python</application>
language.
</para>
<sect2 id="intro-filter">
<title>Filters</title>
<para>
A filter is a plugin that be used to temporarily display or hide
individuals in the <interface>People View</interface>. The
filter is the simplest form of plugin, which only needs to
determine if a person meets or fails to meet its criteria. It
operates on a single person at a time.
</para>
<para>
Filters should never alter a database.
</para>
</sect2>
<sect2 id="intro-report">
<title>Reports</title>
<para>
A report is a plugin that generates output. The output may be in
either a interactive, graphical form, or as an output
file. Report plugins are passed a reference to the internal
database and a reference to the active person, which allows the
plugn to operate on a single person, the entire database, or
anything in between.
</para>
<para>
Plugins that conform to the reportplugin interface appear in the
<menuchoice>
<guimenu>Reports</guimenu>
</menuchoice>
menu and in the <interface>Report Selection</interface> dialog
box.
</para>
<para>
A report should never alter the database.
</para>
</sect2>
<sect2 id="intro-tool">
<title>Tools</title>
<para>
A tool is a plugin that alters the database. It may perform
something as small changing the case of some text to something
as complex as merging redundant individuals. Tools plugins are
passed a reference to the internal database, the active person,
and a callback function. The callback function is used to notify
the main program if it needs to update the display with any
modified information.
</para>
<para>
Plugins that conform to the tool plugin interface appear in the
<menuchoice>
<guimenu>Tools</guimenu>
</menuchoice>
menu and in the <interface>Tool Selection</interface> dialog
box.
</para>
<para>
A tool is allowed (and usually expected) to alter the database.
</para>
</sect2>
<sect2 id="intro-import">
<title>Import Filters</title>
<para>
An import filter is a plugin that adds information from another
source to the database. It is similar to a tool, but is called
differently to allow gramps to distinguish it from a tool.
</para>
<para>
Plugins that conform to the import filter calling syntax appear
in the
<menuchoice>
<guimenu>File</guimenu>
<guisubmenu>Import</guisubmenu>
</menuchoice>
menu.
</para>
<para>
An import filter is allowed to modify the database.
</para>
</sect2>
<sect2 id="intro-export">
<title>Export Filters</title>
<para>
An export filter is a plugin that translates the gramps database
into the format expected by another program. Since it generates
an output file, it is similar to a report generator. However,
its calling syntax is different, so that gramps knows how to
distiguish it from a report generator.
</para>
<para>
Plugins that conform to the export filter calling syntax appear
in the
<menuchoice>
<guimenu>File</guimenu>
<guisubmenu>Export</guisubmenu>
</menuchoice>
menu.
</para>
<para>
An export filter should not alter the database.
</para>
</sect2>
</sect1>
<!-- ============= Writing Filters ============================= -->
<sect1 id="writingfilters">
<title>Writing Filters</title>
<para>
Users can create their own filters and add them to
<application>gramps</application>. By adding the filter to the
user's private filter directory (<filename
class="directory">~/.gramps/filters</filename>), the filter will
be automatically recognized the next time that the program is
started.
</para>
<sect2 id="createfilter">
<title>Creating a filter</title>
<para>
Each filter is a class derived from the
<function>Filter.Filter</function> class. The
<function>__init__</function> task may be overridden, but if so,
should call the <function>__init__</function> function on the
<function>Filter.Filter</function> class. The parent class
provides the variable <function>self.text</function>, which
contains the text string passed as the qualifier. This string
provides additional information provided by the user. For
example, if the filter is used to match names, the qualifier
would be used to provide the name that is being compared
against.
</para>
<para>
All filter classes must define a <function>match</function>
function. The function takes one argument (other than
<function>self</function>), which is an object of type
<function>Person</function> to compare against. The function
should return a 1 if the person matches the filter, or a zero if
the person does not.
</para>
<para>
Each filter must be registered, so that
<application>gramps</application> knows about it. This is
accomplished by calling the
<function>Filter.register_filter</function> function. This
function takes three arguments - the filter class, a
description, and flag that indicates if the qualifier string is
needed. The description string appears in the pull down
interface within <application>gramps</application>, and helps
the user choose the appropriate filter. The qualifier flag tells
<application>gramps</application> whether or not the filter
needs a qualifier string. If this flag is 0,
<application>gramps</application> will disable the entry of a
qualifier string.
</para>
<figure id="filtersrc">
<title>Sample filter implementation</title>
<programlisting>
import Filter
import string
# class definition
class SubString(Filter.Filter):
def match(self,person):
name = person.getPrimaryName().getName()
return string.find(name,self.text) >= 0
Filter.register_filter(SubString,
description="Names that contain a substring",
qualifier=1)
</programlisting>
</figure>
</sect2>
</sect1>
<!-- ============= Writing Reports ============================= -->
<sect1 id="writingreports">
<title>Writing Reports</title>
<para>
Users can create their own report generators and add them to
<application>gramps</application>. By adding the report generator
to the user's private plugin directory (<filename
class="directory">~/.gramps/plugins</filename>), the report
generator will be automatically recognized the next time that the
program is started.
</para>
<sect2 id="createreport">
<title>Creating a report generator</title>
<para>
Fewer restrictions are made on report generators than on
filters. The report generator is passed the current
<application>gramps</application> database and the active
person. The generator needs to take special care to make sure
that it does not alter the database in anyway.
</para>
<para>
A report generator is a function that takes two arguments
&mdash; a database (of type <function>RelDataBase</function>)
and the currently selected person (of type
<function>Person</function>). When called, this task should
generate the desired report.
</para>
<para>
This function's implementation can be as simple as generating
output without the user's intervention, or it could display a
graphical interface to allow the user to select options and
customize a report.
</para>
<para>
As with filters, the report generator must be registered before
<application>gramps</application> will understand it. The report
generator is registered using the
<function>Plugins.register_report</function>. This function
takes five arguments.
</para>
<itemizedlist>
<listitem>
<para>
<guilabel>The report generation task</guilabel> This task
that generates the report.
</para>
</listitem>
<listitem>
<para>
<guilabel>The report category</guilabel> The category in
which the report is grouped in the
<menuchoice><guimenu>Reports</guimenu></menuchoice> menu and
in the <interface>Report Selection</interface> dialog.
</para>
</listitem>
<listitem>
<para>
<guilabel>The report name</guilabel>
The name of the report.
</para>
</listitem>
<listitem>
<para>
<guilabel>A text description of the report</guilabel> The
description appears in the report selection tool to provide
the user with a description of what the tools does.
</para>
</listitem>
<listitem>
<para>
<guilabel>A graphic logo in XPM format</guilabel> This may
be either a path to a filename, or a list of strings
containting the XPM data. If a filename is specified, care
must be taken to make sure the file location is relocatable
and can be determined at runtime.
</para>
</listitem>
</itemizedlist>
<para>
While only the task and report name are required, it is
recommended to provide all five parameters.
</para>
<figure id="reportsrc">
<title>Sample report implementation</title>
<programlisting>
import Plugins
def report(database,person):
... actual code ...
Plugins.register_report(
task=report,
category="Category",
name="Report Name",
description="A text descripition of the report generator",
xpm="%s/myfile.xpm" % os.path.dirname(__file__)
)
</programlisting>
</figure>
</sect2>
<sect2 id="alittlehelp">
<title>A little help - Format Interfaces</title>
<para>
<application>gramps</application> provides some help with
writing reports. Several generic python classes exist that aid
in the writing of report generators. These classes provide an
abstract interface for a type of document, such as a drawing,
word processor document, or a spreadsheet. From these core
classes, <application>gramps</application> derives interfaces to
various document formats. This means that by coding to the
generic word processing class (<function>TextDoc</function>), a
report generator can instant access to multiple file formats
(such as HTML, OpenOffice, and AbiWord).
</para>
<para>
This scheme of deriving a output format from a generic base
class also makes it easier to add new formats. Creating a new
derivied class targeting a different format (such as
<application>KWord</application> or
<application>LaTeX</application>) makes it easy for existing
report generators to use the new formats.
</para>
</sect2>
</sect1>
<!-- ============= Writing Tools ============================= -->
<sect1 id="writingtools">
<title>Writing Tools</title>
<para>
Users can create their own tools and add them to
<application>gramps</application>. By adding the tool to the
user's private plugin directory (<filename
class="directory">~/.gramps/plugins</filename>), the tool will be
automatically recognized the next time that
<application>gramps</application> is started.
</para>
<para>
Unlike a report generator, a tool is allowed to modify the
database. The tool is passed the current
<application>gramps</application> database, the active person,
and a callback function. The callback function should be called
with a non-zero argument upon completion of the tool if the
database has been altered.
</para>
<para>
As with filters and report generators, tools must be registered
before <application>gramps</application> will understand it. The
tool is registered using the
<function>Plugins.register_tool</function>. This function takes
four arguments.
</para>
<itemizedlist>
<listitem>
<para>
<guilabel>The tool task</guilabel> This task
that executes the tool.
</para>
</listitem>
<listitem>
<para>
<guilabel>The tool category</guilabel> The category in which
the tool is grouped in the
<menuchoice><guimenu>Tools</guimenu></menuchoice> menu and in
the <interface>Tool Selection</interface> dialog.
</para>
</listitem>
<listitem>
<para>
<guilabel>The tool name</guilabel>
The name of the tool.
</para>
</listitem>
<listitem>
<para>
<guilabel>A text description of the tool</guilabel> The
description appears in the Tool Selection dialog to provide
the user with a description of what the tool does.
</para>
</listitem>
</itemizedlist>
<para>
While only the task and report name are required, it is
recommended to provide all five parameters.
</para>
<figure id="toolsrc">
<title>Sample tool implementation</title>
<programlisting>
import Plugins
def tool(database,person,callback):
... actual code ...
callback(1)
Plugins.register_tool(
task=tool,
category="Category",
name="Tool Name",
description="A text descripition of the tool"
)
</programlisting>
</figure>
</sect1>
<!-- ============= Import Filters ============================= -->
<sect1 id="writingimportfilters">
<title>Writing Import Filters</title>
<para>
Import filters are similar to tools, since they are allowed to
modify the databases. An import filter is a task that accepts
three arguments &mdash; a database, the filename of the file that
is to be imported, and a callback function.
</para>
<para>
The database may or may not have data already in it. The import
filter cannot assume that data neither already exists nor that the
database is empty.
</para>
<para>
The callback function is different from the callback function used
for tools. The import filter's callback function is used to
indicate progress and update the status bar during the import
process. The function takes a value between 0.0 and 1.0, where 0.0
represents the start of the import and 1.0 represents the
completion of the import.
</para>
<para>
As with the other plugin types, an import filter must be
registered with <application>gramps</application>. This is
accomplished by calling the
<function>Plugins.register_import</function> task. The
<function>Plugins.register_import</function> accepts two arguments
&mdash; the function the performs the import and a string
providing a brief description. This description is used as the
menu entry under the
<menuchoice>
<guimenu>File</guimenu>
<guisubmenu>Import</guisubmenu>
</menuchoice>
menu.
</para>
<figure id="importexample">
<title>Sample Import Implementation</title>
<programlisting>
import Plugins
def gedcom_import(database,filename,callback):
... actual code ...
Plugins.register_import(gedcom_import,"GEDCOM import")
</programlisting>
</figure>
</sect1>
<!-- ============= Export Filters ============================= -->
<sect1 id="writingexportfilters">
<title>Writing Export Filters</title>
<para>
Export filters are similar to report generators. They are not
allowed to modify the database. An export filter accepts three
arguments &mdash; a database, the filename of the file that is to
be written, and a callback function.
</para>
<para>
The callback function is indentical from the callback function
used for import filters. The export filter's callback function is
used to indicate progress and update the status bar during the
export process. The function takes a value between 0.0 and 1.0,
where 0.0 represents the start of the export and 1.0 represents
the completion of the export.
</para>
<para>
As with the other plugin types, an export filter must be
registered with <application>gramps</application>. This is
accomplished by calling the
<function>Plugins.register_export</function> task. The
<function>Plugins.register_export</function> accepts two arguments
&mdash; the function the performs the import and a string
providing a brief description. This description is used as the
menu entry under the
<menuchoice>
<guimenu>File</guimenu>
<guisubmenu>Export</guisubmenu>
</menuchoice>
menu.
</para>
<figure id="exportexample">
<title>Sample Export Implementation</title>
<programlisting>
import Plugins
def gedcom_export(database,filename,callback):
... actual code ...
Plugins.register_export(gedcom_export,"GEDCOM export")
</programlisting>
</figure>
</sect1>
<sect1 id="commontasks">
<title>Common tasks</title>
<para>
While this manual does not document the
<application>gramps</application> database interface, this section
shows a few common tasks.
</para>
<sect2 id="gettingnames">
<title>Printing names of people</title>
<para>
This example shows how to display the name of people in the
database. It assumes that the database is called
<function>db</function>. To get a list of people, it calls the
<function>getPersonMap</function> method, which returns a map of
<application>gramps</application> ID to
<function>Person</function> objects. Calling the
<function>valus</function> method of the returned map returns a
list of people. For each person, the primary name is extracted,
and then the <function>Name</function> object's
<function>getName</function> method is called to build a
presentable name from the individual name components.
</para>
<figure id="displaynames">
<title>Displaying names</title>
<programlisting>
for person in db.getPersonMap().values():
name = person.getPrimaryName()
print name.getName()
</programlisting>
</figure>
</sect2>
<sect2 id="listingevents">
<title>Displaying the events of person</title>
<para>
This example shows how to display the public events associated
with a person. It assumes that the person is called
<function>person</function>.
</para>
<figure id="eventexample">
<title>Displaying Event Information</title>
<programlisting>
for event in person.getEventList():
if event.getPrivacy() == 0:
print "Event:",event.getName()
print "Date:",event.getDate()
print "Place:",event.getPlaceName()
</programlisting>
</figure>
</sect2>
<sect2 id="printfamily">
<title>Print the members of each family</title>
<para>
This example shows how to display the parents and children of
each family in the database. It assumes that the database is called
<function>db</function>.
</para>
<figure id="familyexample">
<title>Displaying Family Information</title>
<programlisting>
for family in db.getFamilyMap().values:
print "-------------------"
print "Family ID:",family.getId()
father = family.getFather()
if father != None:
print "Father:",father.getPrimaryName().getName()
mother = family.getMother()
if mother != None:
print "Mother:",mother.getPrimaryName().getName()
for child in family.getChildList():
print "Child:",child.getPrimaryName().getName()
</programlisting>
</figure>
</sect2>
<sect2 id="personsfamily">
<title>Display the marriages/relationships of a person</title>
<para>
This example shows how to display the families and relationships
in which the person is considered a spouse or parent. It assumes
that the person is called <function>person</function>.
</para>
<para>
Relationships between people can be complex. Because someone is
male, does not necessarily mean that the person will be
considered the "Father" of a relationship. In relationships of
type "Partners", the "father" and "mother" of the relationship
should be of the same gender. So to determine the spouse of a
person, it is usually best to compare the person against what is
returned by <function>getFather</function> and
<function>getMother</function> to find the one that is not
equal. It should also be noted that the
<function>getFather</function> and
<function>getMother</function> methods will return None if noone
has been associated with that role in the family.
</para>
<figure id="relexample">
<title>Displaying Relationship Information</title>
<programlisting>
for family in person.getFamilyList():
print "-------------------"
print "Family ID:",family.getId()
print "Relationship Type:",family.getRelationship()
father = family.getFather()
if father != None and father != person:
print "Spouse:",father.getPrimaryName().getName()
mother = family.getMother()
if mother != None and mother != person:
print "Spouse:",mother.getPrimaryName().getName()
</programlisting>
</figure>
</sect2>
</sect1>
<!-- ============= Authors ================================ -->
<sect1 id="authors">
<title>Authors</title>
<para>
<application>gramps</application> was written by Don Allingham
(<email>dallingham@users.sourceforge.net</email>). To find more
information about <application>gramps</application>, please visit
the <ulink url="http://gramps.sourceforge.net" type="http">gramps
web page</ulink>.
</para>
<para>
This manual was written by Don Allingham
(<email>dallingham@users.sourceforge.net</email>).
</para>
<!-- For translations: uncomment this:
<para>
Latin translation was done by ME
(<email>MYNAME@MYADDRESS</email>). Please send all comments and
suggestions regarding this translation to SOMEWHERE.
</para>
-->
</sect1>
<!-- ============= Application License ============================= -->
<sect1 id="license">
<title>License</title>
<para>
This program is free software; you can redistribute it and/or
modify it under the terms of the <ulink type="help"
url="gnome-help:gpl"> <citetitle>GNU General Public
License</citetitle></ulink> as published by the Free Software
Foundation; either version 2 of the License, or (at your option)
any later version.
</para>
<para>
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
<citetitle>GNU General Public License</citetitle> for more
details.
</para>
<para>
A copy of the <citetitle>GNU General Public License</citetitle> is
included as an appendix to the <citetitle>GNOME Users
Guide</citetitle>. You may also obtain a copy of the
<citetitle>GNU General Public License</citetitle> from the Free
Software Foundation by visiting <ulink type="http"
url="http://www.fsf.org">their Web site</ulink> or by writing to
<address>
Free Software Foundation, Inc. <street>59 Temple Place</street> -
Suite 330 <city>Boston</city>, <state>MA</state>
<postcode>02111-1307</postcode> <country>USA</country>
</address>
</para>
</sect1>
</article>

View File

@ -0,0 +1,345 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML
><HEAD
><TITLE
>Writing Extentions for gramps</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
"><LINK
REL="NEXT"
TITLE="Writing Filters"
HREF="x57.html"></HEAD
><BODY
CLASS="ARTICLE"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="ARTICLE"
><DIV
CLASS="TITLEPAGE"
><H1
CLASS="TITLE"
><A
NAME="AEN2">Writing Extentions for gramps</H1
><P
CLASS="COPYRIGHT"
><A
HREF="ln7.html"
>Copyright</A
> &copy; 2001 by Donald N. Allingham</P
><HR
WIDTH="75%"
ALIGN="CENTER"
COLOR="#000000"
SIZE="1"></DIV
><DIV
CLASS="TOC"
><DL
><DT
><B
>Table of Contents</B
></DT
><DT
><A
HREF="t1.html#intro"
>Introduction</A
></DT
><DT
><A
HREF="x57.html"
>Writing Filters</A
></DT
><DT
><A
HREF="x83.html"
>Writing Reports</A
></DT
><DT
><A
HREF="x131.html"
>Writing Tools</A
></DT
><DT
><A
HREF="x162.html"
>Writing Import Filters</A
></DT
><DT
><A
HREF="x177.html"
>Writing Export Filters</A
></DT
></DL
></DIV
>
<DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="intro">Introduction</H1
>
<P
> <TT
CLASS="APPLICATION"
>gramps</TT
> was intended from the start to
allow the user to extend it through a plugin system. Five types of
plugins are supported - filters, reports, tools, import filters,
and export filters. In a way, an export filter can be viewed as a
special type of report, and an import filter can be viewed as a
special type of tool.
</P
>
<P
> All plugins are written in the <TT
CLASS="APPLICATION"
>python</TT
>
language.
</P
>
<DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="intro-filter">Filters</H2
>
<P
> A filter is a plugin that be used to temporarily display or hide
individuals in the <SPAN
CLASS="INTERFACE"
>People View</SPAN
>. The
filter is the simplest form of plugin, which only needs to
determine if a person meets or fails to meet its criteria. It
operates on a single person at a time.
</P
>
<P
> Filters should never alter a database.
</P
>
</DIV
>
<DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="intro-report">Reports</H2
>
<P
> A report is a plugin that generates output. The output may be in
either a interactive, graphical form, or as an output
file. Report plugins are passed a reference to the internal
database and a reference to the active person, which allows the
plugn to operate on a single person, the entire database, or
anything in between.
</P
>
<P
> Plugins that conform to the reportplugin interface appear in the
+ + + + + + + + + +<B
CLASS="GUIMENU"
>Reports</B
>+
+ + + + + + + +
menu and in the <SPAN
CLASS="INTERFACE"
>Report Selection</SPAN
> dialog
box.
</P
>
<P
> A report should never alter the database.
</P
>
</DIV
>
<DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="intro-tool">Tools</H2
>
<P
> A tool is a plugin that alters the database. It may perform
something as small changing the case of some text to something
as complex as merging redundant individuals. Tools plugins are
passed a reference to the internal database, the active person,
and a callback function. The callback function is used to notify
the main program if it needs to update the display with any
modified information.
</P
>
<P
> Plugins that conform to the tool plugin interface appear in the
+ + + + + + + + + +<B
CLASS="GUIMENU"
>Tools</B
>+
+ + + + + + + +
menu and in the <SPAN
CLASS="INTERFACE"
>Tool Selection</SPAN
> dialog
box.
</P
>
<P
> A tool is allowed (and usually expected) to alter the database.
</P
>
</DIV
>
<DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="intro-import">Import Filters</H2
>
<P
> An import filter is a plugin that adds information from another
source to the database. It is similar to a tool, but is called
differently to allow gramps to distinguish it from a tool.
</P
>
<P
> Plugins that conform to the import filter calling syntax appear
in the
+ + + + + + + + + +<B
CLASS="GUIMENU"
>File</B
>+
+ + + + + + + + + + -&gt;<B
CLASS="GUISUBMENU"
>Import</B
>+
+ + + + + + + +
menu.
</P
>
<P
> An import filter is allowed to modify the database.
</P
>
</DIV
>
<DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="intro-export">Export Filters</H2
>
<P
> An export filter is a plugin that translates the gramps database
into the format expected by another program. Since it generates
an output file, it is similar to a report generator. However,
its calling syntax is different, so that gramps knows how to
distiguish it from a report generator.
</P
>
<P
> Plugins that conform to the export filter calling syntax appear
in the
+ + + + + + + + + +<B
CLASS="GUIMENU"
>File</B
>+
+ + + + + + + + + + -&gt;<B
CLASS="GUISUBMENU"
>Export</B
>+
+ + + + + + + +
menu.
</P
>
<P
> An export filter should not alter the database.
</P
>
</DIV
>
</DIV
>
</DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="x57.html"
ACCESSKEY="N"
>Next &#62;&#62;&#62;</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Writing Filters</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>

View File

@ -0,0 +1,133 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML
><HEAD
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
"><LINK
REL="HOME"
TITLE="Writing Extentions for gramps"
HREF="t1.html"><LINK
REL="UP"
TITLE="Writing Extentions for gramps"
HREF="t1.html#AEN2"><LINK
REL="NEXT"
TITLE="Writing Filters"
HREF="x57.html"></HEAD
><BODY
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>Writing Extentions for gramps</TH
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="LEGALNOTICE"
><A
NAME="legalnotice"><P
></P
> <P
> Permission is granted to copy, distribute and/or modify this
document under the terms of the <A
HREF="gnome-help:fdl"
TARGET="_top"
><I
CLASS="CITETITLE"
>GNU Free Documentation
License</I
></A
>, Version 1.1 or any later version
published by the Free Software Foundation with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy
of the license can be found <A
HREF="gnome-help:fdl"
TARGET="_top"
>here</A
>.
</P
>
<P
> Many of the names used by companies to distinguish their products
and services are claimed as trademarks. Where those names appear
in any GNOME documentation, and those trademarks are made aware to
the members of the GNOME Documentation Project, the names have
been printed in caps or initial caps.
</P
>
<P
></P
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="t1.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>&nbsp;</TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="t1.html#AEN2"
ACCESSKEY="U"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>&nbsp;</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 995 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 964 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 944 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 843 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 846 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 922 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1,345 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML
><HEAD
><TITLE
>Writing Extentions for gramps</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
"><LINK
REL="NEXT"
TITLE="Writing Filters"
HREF="x57.html"></HEAD
><BODY
CLASS="ARTICLE"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="ARTICLE"
><DIV
CLASS="TITLEPAGE"
><H1
CLASS="TITLE"
><A
NAME="AEN2">Writing Extentions for gramps</H1
><P
CLASS="COPYRIGHT"
><A
HREF="ln7.html"
>Copyright</A
> &copy; 2001 by Donald N. Allingham</P
><HR
WIDTH="75%"
ALIGN="CENTER"
COLOR="#000000"
SIZE="1"></DIV
><DIV
CLASS="TOC"
><DL
><DT
><B
>Table of Contents</B
></DT
><DT
><A
HREF="t1.html#intro"
>Introduction</A
></DT
><DT
><A
HREF="x57.html"
>Writing Filters</A
></DT
><DT
><A
HREF="x83.html"
>Writing Reports</A
></DT
><DT
><A
HREF="x131.html"
>Writing Tools</A
></DT
><DT
><A
HREF="x162.html"
>Writing Import Filters</A
></DT
><DT
><A
HREF="x177.html"
>Writing Export Filters</A
></DT
></DL
></DIV
>
<DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="intro">Introduction</H1
>
<P
> <TT
CLASS="APPLICATION"
>gramps</TT
> was intended from the start to
allow the user to extend it through a plugin system. Five types of
plugins are supported - filters, reports, tools, import filters,
and export filters. In a way, an export filter can be viewed as a
special type of report, and an import filter can be viewed as a
special type of tool.
</P
>
<P
> All plugins are written in the <TT
CLASS="APPLICATION"
>python</TT
>
language.
</P
>
<DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="intro-filter">Filters</H2
>
<P
> A filter is a plugin that be used to temporarily display or hide
individuals in the <SPAN
CLASS="INTERFACE"
>People View</SPAN
>. The
filter is the simplest form of plugin, which only needs to
determine if a person meets or fails to meet its criteria. It
operates on a single person at a time.
</P
>
<P
> Filters should never alter a database.
</P
>
</DIV
>
<DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="intro-report">Reports</H2
>
<P
> A report is a plugin that generates output. The output may be in
either a interactive, graphical form, or as an output
file. Report plugins are passed a reference to the internal
database and a reference to the active person, which allows the
plugn to operate on a single person, the entire database, or
anything in between.
</P
>
<P
> Plugins that conform to the reportplugin interface appear in the
+ + + + + + + + + +<B
CLASS="GUIMENU"
>Reports</B
>+
+ + + + + + + +
menu and in the <SPAN
CLASS="INTERFACE"
>Report Selection</SPAN
> dialog
box.
</P
>
<P
> A report should never alter the database.
</P
>
</DIV
>
<DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="intro-tool">Tools</H2
>
<P
> A tool is a plugin that alters the database. It may perform
something as small changing the case of some text to something
as complex as merging redundant individuals. Tools plugins are
passed a reference to the internal database, the active person,
and a callback function. The callback function is used to notify
the main program if it needs to update the display with any
modified information.
</P
>
<P
> Plugins that conform to the tool plugin interface appear in the
+ + + + + + + + + +<B
CLASS="GUIMENU"
>Tools</B
>+
+ + + + + + + +
menu and in the <SPAN
CLASS="INTERFACE"
>Tool Selection</SPAN
> dialog
box.
</P
>
<P
> A tool is allowed (and usually expected) to alter the database.
</P
>
</DIV
>
<DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="intro-import">Import Filters</H2
>
<P
> An import filter is a plugin that adds information from another
source to the database. It is similar to a tool, but is called
differently to allow gramps to distinguish it from a tool.
</P
>
<P
> Plugins that conform to the import filter calling syntax appear
in the
+ + + + + + + + + +<B
CLASS="GUIMENU"
>File</B
>+
+ + + + + + + + + + -&gt;<B
CLASS="GUISUBMENU"
>Import</B
>+
+ + + + + + + +
menu.
</P
>
<P
> An import filter is allowed to modify the database.
</P
>
</DIV
>
<DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="intro-export">Export Filters</H2
>
<P
> An export filter is a plugin that translates the gramps database
into the format expected by another program. Since it generates
an output file, it is similar to a report generator. However,
its calling syntax is different, so that gramps knows how to
distiguish it from a report generator.
</P
>
<P
> Plugins that conform to the export filter calling syntax appear
in the
+ + + + + + + + + +<B
CLASS="GUIMENU"
>File</B
>+
+ + + + + + + + + + -&gt;<B
CLASS="GUISUBMENU"
>Export</B
>+
+ + + + + + + +
menu.
</P
>
<P
> An export filter should not alter the database.
</P
>
</DIV
>
</DIV
>
</DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="x57.html"
ACCESSKEY="N"
>Next &#62;&#62;&#62;</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Writing Filters</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>

View File

@ -0,0 +1,282 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML
><HEAD
><TITLE
>Writing Tools</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
"><LINK
REL="HOME"
TITLE="Writing Extentions for gramps"
HREF="t1.html"><LINK
REL="PREVIOUS"
TITLE="Writing Reports"
HREF="x83.html"><LINK
REL="NEXT"
TITLE="Writing Import Filters"
HREF="x162.html"></HEAD
><BODY
CLASS="SECT1"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>Writing Extentions for gramps</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="x83.html"
ACCESSKEY="P"
>&#60;&#60;&#60; Previous</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="x162.html"
ACCESSKEY="N"
>Next &#62;&#62;&#62;</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="writingtools">Writing Tools</H1
>
<P
> Users can create their own tools and add them to
<TT
CLASS="APPLICATION"
>gramps</TT
>. By adding the tool to the
user's private plugin directory (<TT
CLASS="FILENAME"
>~/.gramps/plugins</TT
>), the tool will be
automatically recognized the next time that
<TT
CLASS="APPLICATION"
>gramps</TT
> is started.
</P
>
<P
> Unlike a report generator, a tool is allowed to modify the
database. The tool is passed the current
<TT
CLASS="APPLICATION"
>gramps</TT
> database, the active person,
and a callback function. The callback function should be called
with a non-zero argument upon completion of the tool if the
database has been altered.
</P
>
<P
> As with filters and report generators, tools must be registered
before <TT
CLASS="APPLICATION"
>gramps</TT
> will understand it. The
tool is registered using the
<TT
CLASS="FUNCTION"
>Plugins.register_tool</TT
>. This function takes
four arguments.
</P
>
<P
></P
><UL
><LI
> <P
> <TT
CLASS="GUILABEL"
><B
>The tool task</B
></TT
> This task
that executes the tool.
</P
>
</LI
><LI
> <P
> <TT
CLASS="GUILABEL"
><B
>The tool category</B
></TT
> The category in which
the tool is grouped in the
<B
CLASS="GUIMENU"
>Tools</B
> menu and in
the <SPAN
CLASS="INTERFACE"
>Tool Selection</SPAN
> dialog.
</P
>
</LI
><LI
> <P
> <TT
CLASS="GUILABEL"
><B
>The tool name</B
></TT
>
The name of the tool.
</P
>
</LI
><LI
> <P
> <TT
CLASS="GUILABEL"
><B
>A text description of the tool</B
></TT
> The
description appears in the Tool Selection dialog to provide
the user with a description of what the tool does.
</P
>
</LI
></UL
>
<P
> While only the task and report name are required, it is
recommended to provide all five parameters.
</P
>
<DIV
CLASS="FIGURE"
><A
NAME="toolsrc">
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>&#13;import Plugins
def tool(database,person,callback):
... actual code ...
callback(1)
Plugins.register_tool(
task=tool,
category="Category",
name="Tool Name",
description="A text descripition of the tool"
)
</PRE
></TD
></TR
></TABLE
>
<P
><B
>Figure 3. Sample tool implementation</B
></P
></DIV
>
</DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="x83.html"
ACCESSKEY="P"
>&#60;&#60;&#60; Previous</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="t1.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="x162.html"
ACCESSKEY="N"
>Next &#62;&#62;&#62;</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Writing Reports</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Writing Import Filters</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>

View File

@ -0,0 +1,219 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML
><HEAD
><TITLE
>Writing Import Filters</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
"><LINK
REL="HOME"
TITLE="Writing Extentions for gramps"
HREF="t1.html"><LINK
REL="PREVIOUS"
TITLE="Writing Tools"
HREF="x131.html"><LINK
REL="NEXT"
TITLE="Writing Export Filters"
HREF="x177.html"></HEAD
><BODY
CLASS="SECT1"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>Writing Extentions for gramps</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="x131.html"
ACCESSKEY="P"
>&#60;&#60;&#60; Previous</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="x177.html"
ACCESSKEY="N"
>Next &#62;&#62;&#62;</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="writingimportfilters">Writing Import Filters</H1
>
<P
> Import filters are similar to tools, since they are allowed to
modify the databases. An import filter is a task that accepts
three arguments a database, the filename of the file that
is to be imported, and a callback function.
</P
>
<P
> The database may or may not have data already in it. The import
filter cannot assume that data neither already exists nor that the
database is empty.
</P
>
<P
> The callback function is different from the callback function used
for tools. The import filter's callback function is used to
indicate progress and update the status bar during the import
process. The function takes a value between 0.0 and 1.0, where 0.0
represents the start of the import and 1.0 represents the
completion of the import.
</P
>
<P
> As with the other plugin types, an import filter must be
registered with <TT
CLASS="APPLICATION"
>gramps</TT
>. This is
accomplished by calling the
<TT
CLASS="FUNCTION"
>Plugins.register_import</TT
> task. The
<TT
CLASS="FUNCTION"
>Plugins.register_import</TT
> accepts two arguments
the function the performs the import and a string
providing a brief description. This description is used as the
menu entry under the
+ + + + + +<B
CLASS="GUIMENU"
>File</B
>+
+ + + + + + -&gt;<B
CLASS="GUISUBMENU"
>Import</B
>+
+ + + +
menu.
</P
>
<DIV
CLASS="FIGURE"
><A
NAME="importexample">
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>&#13;import Plugins
def gedcom_import(database,filename,callback):
... actual code ...
Plugins.register_import(gedcom_import,"GEDCOM import")
</PRE
></TD
></TR
></TABLE
>
<P
><B
>Figure 4. Sample Import Implementation</B
></P
></DIV
>
</DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="x131.html"
ACCESSKEY="P"
>&#60;&#60;&#60; Previous</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="t1.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="x177.html"
ACCESSKEY="N"
>Next &#62;&#62;&#62;</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Writing Tools</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Writing Export Filters</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>

View File

@ -0,0 +1,180 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML
><HEAD
><TITLE
>Writing Export Filters</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
"><LINK
REL="HOME"
TITLE="Writing Extentions for gramps"
HREF="t1.html"><LINK
REL="PREVIOUS"
TITLE="Writing Import Filters"
HREF="x162.html"></HEAD
><BODY
CLASS="SECT1"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>Writing Extentions for gramps</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="x162.html"
ACCESSKEY="P"
>&#60;&#60;&#60; Previous</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
>&nbsp;</TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="writingexportfilters">Writing Export Filters</H1
>
<P
> Export filters are similar to report generators. They are not
allowed to modify the database. An export filter accepts three
arguments a database, the filename of the file that is to
be written, and a callback function.
</P
>
<P
> The callback function is indentical from the callback function
used for import filters. The export filter's callback function is
used to indicate progress and update the status bar during the
export process. The function takes a value between 0.0 and 1.0,
where 0.0 represents the start of the export and 1.0 represents
the completion of the export.
</P
>
<P
> As with the other plugin types, an export filter must be
registered with <TT
CLASS="APPLICATION"
>gramps</TT
>. This is
accomplished by calling the
<TT
CLASS="FUNCTION"
>Plugins.register_export</TT
> task. The
<TT
CLASS="FUNCTION"
>Plugins.register_export</TT
> accepts two arguments
the function the performs the import and a string
providing a brief description. This description is used as the
menu entry under the
+ + + + + +<B
CLASS="GUIMENU"
>File</B
>+
+ + + + + + -&gt;<B
CLASS="GUISUBMENU"
>Export</B
>+
+ + + +
menu.
</P
>
<DIV
CLASS="FIGURE"
><A
NAME="exportexample"> <P
><B
>Figure 5. </B
></P
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="x162.html"
ACCESSKEY="P"
>&#60;&#60;&#60; Previous</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="t1.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>&nbsp;</TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Writing Import Filters</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>&nbsp;</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>

View File

@ -0,0 +1,276 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML
><HEAD
><TITLE
>Writing Filters</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
"><LINK
REL="HOME"
TITLE="Writing Extentions for gramps"
HREF="t1.html"><LINK
REL="PREVIOUS"
TITLE="Writing Extentions for gramps"
HREF="t1.html"><LINK
REL="NEXT"
TITLE="Writing Reports"
HREF="x83.html"></HEAD
><BODY
CLASS="SECT1"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>Writing Extentions for gramps</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="t1.html"
ACCESSKEY="P"
>&#60;&#60;&#60; Previous</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="x83.html"
ACCESSKEY="N"
>Next &#62;&#62;&#62;</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="writingfilters">Writing Filters</H1
>
<P
> Users can create their own filters and add them to
<TT
CLASS="APPLICATION"
>gramps</TT
>. By adding the filter to the
user's private filter directory (<TT
CLASS="FILENAME"
>~/.gramps/filters</TT
>), the filter will
be automatically recognized the next time that the program is
started.
</P
>
<DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="createfilter">Creating a filter</H2
>
<P
> Each filter is a class derived from the
<TT
CLASS="FUNCTION"
>Filter.Filter</TT
> class. The
<TT
CLASS="FUNCTION"
>__init__</TT
> task may be overridden, but if so,
should call the <TT
CLASS="FUNCTION"
>__init__</TT
> function on the
<TT
CLASS="FUNCTION"
>Filter.Filter</TT
> class. The parent class
provides the variable <TT
CLASS="FUNCTION"
>self.text</TT
>, which
contains the text string passed as the qualifier. This string
provides additional information provided by the user. For
example, if the filter is used to match names, the qualifier
would be used to provide the name that is being compared
against.
</P
>
<P
> All filter classes must define a <TT
CLASS="FUNCTION"
>match</TT
>
function. The function takes one argument (other than
<TT
CLASS="FUNCTION"
>self</TT
>), which is an object of type
<TT
CLASS="FUNCTION"
>Person</TT
> to compare against. The function
should return a 1 if the person matches the filter, or a zero if
the person does not.
</P
>
<P
> Each filter must be registered, so that
<TT
CLASS="APPLICATION"
>gramps</TT
> knows about it. This is
accomplished by calling the
<TT
CLASS="FUNCTION"
>Filter.register_filter</TT
> function. This
function takes three arguments - the filter class, a
description, and flag that indicates if the qualifier string is
needed. The description string appears in the pull down
interface within <TT
CLASS="APPLICATION"
>gramps</TT
>, and helps
the user choose the appropriate filter. The qualifier flag tells
<TT
CLASS="APPLICATION"
>gramps</TT
> whether or not the filter
needs a qualifier string. If this flag is 0,
<TT
CLASS="APPLICATION"
>gramps</TT
> will disable the entry of a
qualifier string.
</P
>
<DIV
CLASS="FIGURE"
><A
NAME="filtersrc">
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>&#13;import Filter
import string
# class definition
class SubString(Filter.Filter):
def match(self,person):
name = person.getPrimaryName().getName()
return string.find(name,self.text) &#62;= 0
Filter.register_filter(SubString,
description="Names that contain a substring",
qualifier=1)
</PRE
></TD
></TR
></TABLE
>
<P
><B
>Figure 1. Sample filter implementation</B
></P
></DIV
>
</DIV
>
</DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="t1.html"
ACCESSKEY="P"
>&#60;&#60;&#60; Previous</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="t1.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="x83.html"
ACCESSKEY="N"
>Next &#62;&#62;&#62;</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Writing Extentions for gramps</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Writing Reports</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>

View File

@ -0,0 +1,369 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML
><HEAD
><TITLE
>Writing Reports</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
"><LINK
REL="HOME"
TITLE="Writing Extentions for gramps"
HREF="t1.html"><LINK
REL="PREVIOUS"
TITLE="Writing Filters"
HREF="x57.html"><LINK
REL="NEXT"
TITLE="Writing Tools"
HREF="x131.html"></HEAD
><BODY
CLASS="SECT1"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>Writing Extentions for gramps</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="x57.html"
ACCESSKEY="P"
>&#60;&#60;&#60; Previous</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="x131.html"
ACCESSKEY="N"
>Next &#62;&#62;&#62;</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="writingreports">Writing Reports</H1
>
<P
> Users can create their own report generators and add them to
<TT
CLASS="APPLICATION"
>gramps</TT
>. By adding the report generator
to the user's private plugin directory (<TT
CLASS="FILENAME"
>~/.gramps/plugins</TT
>), the report
generator will be automatically recognized the next time that the
program is started.
</P
>
<DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="createreport">Creating a report generator</H2
>
<P
> Fewer restrictions are made on report generators than on
filters. The report generator is passed the current
<TT
CLASS="APPLICATION"
>gramps</TT
> database and the active
person. The generator needs to take special care to make sure
that it does not alter the database in anyway.
</P
>
<P
> A report generator is a function that takes two arguments
a database (of type <TT
CLASS="FUNCTION"
>RelDataBase</TT
>)
and the currently selected person (of type
<TT
CLASS="FUNCTION"
>Person</TT
>). When called, this task should
generate the desired report.
</P
>
<P
> This function's implementation can be as simple as generating
output without the user's intervention, or it could display a
graphical interface to allow the user to select options and
customize a report.
</P
>
<P
> As with filters, the report generator must be registered before
<TT
CLASS="APPLICATION"
>gramps</TT
> will understand it. The report
generator is registered using the
<TT
CLASS="FUNCTION"
>Plugins.register_report</TT
>. This function
takes five arguments.
</P
>
<P
></P
><UL
><LI
> <P
> <TT
CLASS="GUILABEL"
><B
>The report generation task</B
></TT
> This task
that generates the report.
</P
>
</LI
><LI
> <P
> <TT
CLASS="GUILABEL"
><B
>The report category</B
></TT
> The category in
which the report is grouped in the
<B
CLASS="GUIMENU"
>Reports</B
> menu and
in the <SPAN
CLASS="INTERFACE"
>Report Selection</SPAN
> dialog.
</P
>
</LI
><LI
> <P
> <TT
CLASS="GUILABEL"
><B
>The report name</B
></TT
>
The name of the report.
</P
>
</LI
><LI
> <P
> <TT
CLASS="GUILABEL"
><B
>A text description of the report</B
></TT
> The
description appears in the report selection tool to provide
the user with a description of what the tools does.
</P
>
</LI
><LI
> <P
> <TT
CLASS="GUILABEL"
><B
>A graphic logo in XPM format</B
></TT
> This may
be either a path to a filename, or a list of strings
containting the XPM data. If a filename is specified, care
must be taken to make sure the file location is relocatable
and can be determined at runtime.
</P
>
</LI
></UL
>
<P
> While only the task and report name are required, it is
recommended to provide all five parameters.
</P
>
<DIV
CLASS="FIGURE"
><A
NAME="reportsrc">
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>&#13;import Plugins
def report(database,person):
... actual code ...
Plugins.register_report(
task=report,
category="Category",
name="Report Name",
description="A text descripition of the report generator",
xpm="%s/myfile.xpm" % os.path.dirname(__file__)
)
</PRE
></TD
></TR
></TABLE
>
<P
><B
>Figure 2. Sample report implementation</B
></P
></DIV
>
</DIV
>
<DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="alittlehelp">A little help - Format Interfaces</H2
>
<P
> <TT
CLASS="APPLICATION"
>gramps</TT
> provides some help with
writing reports. Several generic python classes exist that aid
in the writing of report generators. These classes provide an
abstract interface for a type of document, such as a drawing,
word processor document, or a spreadsheet. From these core
classes, <TT
CLASS="APPLICATION"
>gramps</TT
> derives interfaces to
various document formats. This means that by coding to the
generic word processing class (<TT
CLASS="FUNCTION"
>TextDoc</TT
>), a
report generator can instant access to multiple file formats
(such as HTML, OpenOffice, and AbiWord).
</P
>
<P
> This scheme of deriving a output format from a generic base
class also makes it easier to add new formats. Creating a new
derivied class targeting a different format (such as
<TT
CLASS="APPLICATION"
>KWord</TT
> or
<TT
CLASS="APPLICATION"
>LaTeX</TT
>) makes it easy for existing
report generators to use the new formats.
</P
>
</DIV
>
</DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="x57.html"
ACCESSKEY="P"
>&#60;&#60;&#60; Previous</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="t1.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="x131.html"
ACCESSKEY="N"
>Next &#62;&#62;&#62;</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Writing Filters</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Writing Tools</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>

View File

@ -0,0 +1,345 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML
><HEAD
><TITLE
>Writing Extentions for gramps</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
"><LINK
REL="NEXT"
TITLE="Writing Filters"
HREF="x57.html"></HEAD
><BODY
CLASS="ARTICLE"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="ARTICLE"
><DIV
CLASS="TITLEPAGE"
><H1
CLASS="TITLE"
><A
NAME="AEN2">Writing Extentions for gramps</H1
><P
CLASS="COPYRIGHT"
><A
HREF="ln7.html"
>Copyright</A
> &copy; 2001 by Donald N. Allingham</P
><HR
WIDTH="75%"
ALIGN="CENTER"
COLOR="#000000"
SIZE="1"></DIV
><DIV
CLASS="TOC"
><DL
><DT
><B
>Table of Contents</B
></DT
><DT
><A
HREF="t1.html#intro"
>Introduction</A
></DT
><DT
><A
HREF="x57.html"
>Writing Filters</A
></DT
><DT
><A
HREF="x83.html"
>Writing Reports</A
></DT
><DT
><A
HREF="x131.html"
>Writing Tools</A
></DT
><DT
><A
HREF="x162.html"
>Writing Import Filters</A
></DT
><DT
><A
HREF="x177.html"
>Writing Export Filters</A
></DT
></DL
></DIV
>
<DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="intro">Introduction</H1
>
<P
> <TT
CLASS="APPLICATION"
>gramps</TT
> was intended from the start to
allow the user to extend it through a plugin system. Five types of
plugins are supported - filters, reports, tools, import filters,
and export filters. In a way, an export filter can be viewed as a
special type of report, and an import filter can be viewed as a
special type of tool.
</P
>
<P
> All plugins are written in the <TT
CLASS="APPLICATION"
>python</TT
>
language.
</P
>
<DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="intro-filter">Filters</H2
>
<P
> A filter is a plugin that be used to temporarily display or hide
individuals in the <SPAN
CLASS="INTERFACE"
>People View</SPAN
>. The
filter is the simplest form of plugin, which only needs to
determine if a person meets or fails to meet its criteria. It
operates on a single person at a time.
</P
>
<P
> Filters should never alter a database.
</P
>
</DIV
>
<DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="intro-report">Reports</H2
>
<P
> A report is a plugin that generates output. The output may be in
either a interactive, graphical form, or as an output
file. Report plugins are passed a reference to the internal
database and a reference to the active person, which allows the
plugn to operate on a single person, the entire database, or
anything in between.
</P
>
<P
> Plugins that conform to the reportplugin interface appear in the
+ + + + + + + + + +<B
CLASS="GUIMENU"
>Reports</B
>+
+ + + + + + + +
menu and in the <SPAN
CLASS="INTERFACE"
>Report Selection</SPAN
> dialog
box.
</P
>
<P
> A report should never alter the database.
</P
>
</DIV
>
<DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="intro-tool">Tools</H2
>
<P
> A tool is a plugin that alters the database. It may perform
something as small changing the case of some text to something
as complex as merging redundant individuals. Tools plugins are
passed a reference to the internal database, the active person,
and a callback function. The callback function is used to notify
the main program if it needs to update the display with any
modified information.
</P
>
<P
> Plugins that conform to the tool plugin interface appear in the
+ + + + + + + + + +<B
CLASS="GUIMENU"
>Tools</B
>+
+ + + + + + + +
menu and in the <SPAN
CLASS="INTERFACE"
>Tool Selection</SPAN
> dialog
box.
</P
>
<P
> A tool is allowed (and usually expected) to alter the database.
</P
>
</DIV
>
<DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="intro-import">Import Filters</H2
>
<P
> An import filter is a plugin that adds information from another
source to the database. It is similar to a tool, but is called
differently to allow gramps to distinguish it from a tool.
</P
>
<P
> Plugins that conform to the import filter calling syntax appear
in the
+ + + + + + + + + +<B
CLASS="GUIMENU"
>File</B
>+
+ + + + + + + + + + -&gt;<B
CLASS="GUISUBMENU"
>Import</B
>+
+ + + + + + + +
menu.
</P
>
<P
> An import filter is allowed to modify the database.
</P
>
</DIV
>
<DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="intro-export">Export Filters</H2
>
<P
> An export filter is a plugin that translates the gramps database
into the format expected by another program. Since it generates
an output file, it is similar to a report generator. However,
its calling syntax is different, so that gramps knows how to
distiguish it from a report generator.
</P
>
<P
> Plugins that conform to the export filter calling syntax appear
in the
+ + + + + + + + + +<B
CLASS="GUIMENU"
>File</B
>+
+ + + + + + + + + + -&gt;<B
CLASS="GUISUBMENU"
>Export</B
>+
+ + + + + + + +
menu.
</P
>
<P
> An export filter should not alter the database.
</P
>
</DIV
>
</DIV
>
</DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="x57.html"
ACCESSKEY="N"
>Next &#62;&#62;&#62;</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Writing Filters</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>

View File

View File

@ -0,0 +1,4 @@
# Process this file with automake to produce Makefile.in
SUBDIRS = C

View File

@ -0,0 +1,352 @@
# Makefile.in generated by automake 1.6.3 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
# Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# Process this file with automake to produce Makefile.in
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ../..
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
EXEEXT = @EXEEXT@
OBJEXT = @OBJEXT@
PATH_SEPARATOR = @PATH_SEPARATOR@
AMTAR = @AMTAR@
AWK = @AWK@
BINSH = @BINSH@
CC = @CC@
DEPDIR = @DEPDIR@
DISABLE_SCROLLKEEPER = @DISABLE_SCROLLKEEPER@
GNOMEHELP = @GNOMEHELP@
HAVE_GNOME_CONFIG = @HAVE_GNOME_CONFIG@
HAVE_JW = @HAVE_JW@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INTLLIBS = @INTLLIBS@
JW = @JW@
LANGUAGES = @LANGUAGES@
LIBS = @LIBS@
MOFILES = @MOFILES@
MSGFMT = @MSGFMT@
P15_INCLUDES = @P15_INCLUDES@
P20_INCLUDES = @P20_INCLUDES@
P21_INCLUDES = @P21_INCLUDES@
P22_INCLUDES = @P22_INCLUDES@
PACKAGE = @PACKAGE@
POFILES = @POFILES@
PYTHON = @PYTHON@
PYTHON22 = @PYTHON22@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
PYTHON_VERSION = @PYTHON_VERSION@
RELEASE = @RELEASE@
SCROLLKEEPER_CONFIG = @SCROLLKEEPER_CONFIG@
SCROLLKEEPER_REQUIRED = @SCROLLKEEPER_REQUIRED@
STRIP = @STRIP@
VERSION = @VERSION@
VERSIONSTRING = @VERSIONSTRING@
ZIP = @ZIP@
am__include = @am__include@
am__quote = @am__quote@
install_sh = @install_sh@
pkgpyexecdir = @pkgpyexecdir@
pkgpythondir = @pkgpythondir@
pyexecdir = @pyexecdir@
pythondir = @pythondir@
SUBDIRS = C
subdir = doc/extending-gramps
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_CLEAN_FILES =
DIST_SOURCES =
RECURSIVE_TARGETS = info-recursive dvi-recursive install-info-recursive \
uninstall-info-recursive all-recursive install-data-recursive \
install-exec-recursive installdirs-recursive install-recursive \
uninstall-recursive check-recursive installcheck-recursive
DIST_COMMON = Makefile.am Makefile.in
DIST_SUBDIRS = $(SUBDIRS)
all: all-recursive
.SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu doc/extending-gramps/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
uninstall-info-am:
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
@set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ETAGS = etags
ETAGSFLAGS =
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = ../..
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@list='$(DISTFILES)'; for file in $$list; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkinstalldirs) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d $(distdir)/$$subdir \
|| mkdir $(distdir)/$$subdir \
|| exit 1; \
(cd $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$(top_distdir)" \
distdir=../$(distdir)/$$subdir \
distdir) \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-recursive
all-am: Makefile
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic mostlyclean-am
distclean: distclean-recursive
distclean-am: clean-am distclean-generic distclean-tags
dvi: dvi-recursive
dvi-am:
info: info-recursive
info-am:
install-data-am:
install-exec-am:
install-info: install-info-recursive
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic
uninstall-am: uninstall-info-am
uninstall-info: uninstall-info-recursive
.PHONY: $(RECURSIVE_TARGETS) GTAGS all all-am check check-am clean \
clean-generic clean-recursive distclean distclean-generic \
distclean-recursive distclean-tags distdir dvi dvi-am \
dvi-recursive info info-am info-recursive install install-am \
install-data install-data-am install-data-recursive \
install-exec install-exec-am install-exec-recursive \
install-info install-info-am install-info-recursive install-man \
install-recursive install-strip installcheck installcheck-am \
installdirs installdirs-am installdirs-recursive \
maintainer-clean maintainer-clean-generic \
maintainer-clean-recursive mostlyclean mostlyclean-generic \
mostlyclean-recursive tags tags-recursive uninstall \
uninstall-am uninstall-info-am uninstall-info-recursive \
uninstall-recursive
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -0,0 +1,53 @@
SGML_FILES = gramps-manual.sgml
figs = \
figures/addmedia.png \
figures/druidpg1.png \
figures/editbookmarks.png \
figures/ep-address.png \
figures/ep-altname.png \
figures/ep-attributes.png \
figures/ep-event.png \
figures/ep-gallery.png \
figures/ep-general.png \
figures/ep-internet.png \
figures/ep-lds.png \
figures/ep-notes.png \
figures/familyview.png \
figures/filter.png \
figures/globalmedia.png \
figures/gotobookmark.png \
figures/localmedia.png \
figures/mainwin.png \
figures/mediaview.png \
figures/opendb.png \
figures/pedegreesel.png \
figures/pedegreeview.png \
figures/peoplelist.png \
figures/placelist.png \
figures/prefs-bars.png \
figures/prefs-colors.png \
figures/prefs-dates.png \
figures/prefs-disp.png \
figures/prefs-find.png \
figures/prefs-gen.png \
figures/prefs-guess.png \
figures/prefs-ids.png \
figures/prefs-main.png \
figures/prefs-media.png \
figures/prefs-report.png \
figures/prefs-research.png \
figures/prefs-revision.png \
figures/reportsel.png \
figures/revcontrol.png \
figures/savecomment.png \
figures/sourcelist.png \
figures/sourcerefsel.png \
figures/toolsel.png
docname = gramps-manual
lang = C
omffile = gramps-manual-C.omf
sgml_ents =
include $(top_srcdir)/doc/sgmldocs.make
dist-hook: app-dist-hook

View File

@ -0,0 +1,461 @@
# Makefile.in generated by automake 1.6.3 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
# Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# To use this template:
# 1) Define: figs, docname, lang, omffile, sgml_ents although figs,
# omffile, and sgml_ents may be empty in your Makefile.am which
# will "include" this one
# 2) Figures must go under figures/ and be in PNG format
# 3) You should only have one document per directory
#
# Note that this makefile forces the directory name under
# $prefix/share/gnome/help/ to be the same as the SGML filename
# of the document. This is required by GNOME. eg:
# $prefix/share/gnome/help/fish_applet/C/fish_applet.sgml
# ^^^^^^^^^^^ ^^^^^^^^^^^
# Definitions:
# figs A list of screenshots which will be included in EXTRA_DIST
# Note that these should reside in figures/ and should be .png
# files, or you will have to make modifications below.
# docname This is the name of the SGML file: <docname>.sgml
# lang This is the document locale
# omffile This is the name of the OMF file. Convention is to name
# it <docname>-<locale>.omf.
# sgml_ents This is a list of SGML entities which must be installed
# with the main SGML file and included in EXTRA_DIST.
# eg:
# figs = \
# figures/fig1.png \
# figures/fig2.png
# docname = scrollkeeper-manual
# lang = C
# omffile=scrollkeeper-manual-C.omf
# sgml_ents = fdl.sgml
# include $(top_srcdir)/help/sgmldocs.make
# dist-hook: app-dist-hook
#
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ../../..
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
EXEEXT = @EXEEXT@
OBJEXT = @OBJEXT@
PATH_SEPARATOR = @PATH_SEPARATOR@
AMTAR = @AMTAR@
AWK = @AWK@
BINSH = @BINSH@
CC = @CC@
DEPDIR = @DEPDIR@
DISABLE_SCROLLKEEPER = @DISABLE_SCROLLKEEPER@
GNOMEHELP = @GNOMEHELP@
HAVE_GNOME_CONFIG = @HAVE_GNOME_CONFIG@
HAVE_JW = @HAVE_JW@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INTLLIBS = @INTLLIBS@
JW = @JW@
LANGUAGES = @LANGUAGES@
LIBS = @LIBS@
MOFILES = @MOFILES@
MSGFMT = @MSGFMT@
P15_INCLUDES = @P15_INCLUDES@
P20_INCLUDES = @P20_INCLUDES@
P21_INCLUDES = @P21_INCLUDES@
P22_INCLUDES = @P22_INCLUDES@
PACKAGE = @PACKAGE@
POFILES = @POFILES@
PYTHON = @PYTHON@
PYTHON22 = @PYTHON22@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
PYTHON_VERSION = @PYTHON_VERSION@
RELEASE = @RELEASE@
SCROLLKEEPER_CONFIG = @SCROLLKEEPER_CONFIG@
SCROLLKEEPER_REQUIRED = @SCROLLKEEPER_REQUIRED@
STRIP = @STRIP@
VERSION = @VERSION@
VERSIONSTRING = @VERSIONSTRING@
ZIP = @ZIP@
am__include = @am__include@
am__quote = @am__quote@
install_sh = @install_sh@
pkgpyexecdir = @pkgpyexecdir@
pkgpythondir = @pkgpythondir@
pyexecdir = @pyexecdir@
pythondir = @pythondir@
SGML_FILES = gramps-manual.sgml
figs = \
figures/addmedia.png \
figures/druidpg1.png \
figures/editbookmarks.png \
figures/ep-address.png \
figures/ep-altname.png \
figures/ep-attributes.png \
figures/ep-event.png \
figures/ep-gallery.png \
figures/ep-general.png \
figures/ep-internet.png \
figures/ep-lds.png \
figures/ep-notes.png \
figures/familyview.png \
figures/filter.png \
figures/globalmedia.png \
figures/gotobookmark.png \
figures/localmedia.png \
figures/mainwin.png \
figures/mediaview.png \
figures/opendb.png \
figures/pedegreesel.png \
figures/pedegreeview.png \
figures/peoplelist.png \
figures/placelist.png \
figures/prefs-bars.png \
figures/prefs-colors.png \
figures/prefs-dates.png \
figures/prefs-disp.png \
figures/prefs-find.png \
figures/prefs-gen.png \
figures/prefs-guess.png \
figures/prefs-ids.png \
figures/prefs-main.png \
figures/prefs-media.png \
figures/prefs-report.png \
figures/prefs-research.png \
figures/prefs-revision.png \
figures/reportsel.png \
figures/revcontrol.png \
figures/savecomment.png \
figures/sourcelist.png \
figures/sourcerefsel.png \
figures/toolsel.png
docname = gramps-manual
lang = C
omffile = gramps-manual-C.omf
sgml_ents =
docdir = $(datadir)/gnome/help/$(docname)/$(lang)
doc_DATA = index.html
sgml_files = $(sgml_ents) $(docname).sgml
omf_dir = $(top_srcdir)/omf-install
EXTRA_DIST = $(sgml_files) $(doc_DATA) $(omffile) $(figs)
CLEANFILES = omf_timestamp
# when doing a distclean, we also want to clear out html files:
CONFIG_CLEAN_FILES = index.html $(docname)/*.html $(docname)/stylesheet-images/*.gif
subdir = doc/gramps-manual/C
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
DIST_SOURCES =
DATA = $(doc_DATA)
DIST_COMMON = Makefile.am Makefile.in
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/doc/sgmldocs.make $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu doc/gramps-manual/C/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
uninstall-info-am:
docDATA_INSTALL = $(INSTALL_DATA)
install-docDATA: $(doc_DATA)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(docdir)
@list='$(doc_DATA)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f="`echo $$p | sed -e 's|^.*/||'`"; \
echo " $(docDATA_INSTALL) $$d$$p $(DESTDIR)$(docdir)/$$f"; \
$(docDATA_INSTALL) $$d$$p $(DESTDIR)$(docdir)/$$f; \
done
uninstall-docDATA:
@$(NORMAL_UNINSTALL)
@list='$(doc_DATA)'; for p in $$list; do \
f="`echo $$p | sed -e 's|^.*/||'`"; \
echo " rm -f $(DESTDIR)$(docdir)/$$f"; \
rm -f $(DESTDIR)$(docdir)/$$f; \
done
tags: TAGS
TAGS:
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = ../../..
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
$(mkinstalldirs) $(distdir)/figures
@list='$(DISTFILES)'; for file in $$list; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkinstalldirs) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="${top_distdir}" distdir="$(distdir)" \
dist-hook
check-am: all-am
check: check-am
all-am: Makefile $(DATA)
installdirs:
$(mkinstalldirs) $(DESTDIR)$(docdir)
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic mostlyclean-am
distclean: distclean-am
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
info: info-am
info-am:
install-data-am: install-docDATA
install-exec-am:
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic
uninstall-am: uninstall-docDATA uninstall-info-am uninstall-local
.PHONY: all all-am check check-am clean clean-generic distclean \
distclean-generic distdir dvi dvi-am info info-am install \
install-am install-data install-data-am install-docDATA \
install-exec install-exec-am install-info install-info-am \
install-man install-strip installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic uninstall uninstall-am \
uninstall-docDATA uninstall-info-am uninstall-local
all: index.html omf
omf: omf_timestamp
omf_timestamp: $(omffile)
-for file in $(omffile); do \
scrollkeeper-preinstall $(docdir)/$(docname).sgml $$file $(omf_dir)/$$file; \
done
touch omf_timestamp
index.html: $(docname)/index.html
-cp $(docname)/index.html .
# The weird srcdir trick is because the db2html from the Cygnus RPMs
# cannot handle relative filenames.
# The t1 test is for certain versions of jw that create cryptic
# html pages, o fwhich the index is called "t1". Also, the jw
# script from docbook-utils 0.6.9 does not copy the template
# stylesheet-images directory like the db2html script does, so
# we give it a little help (at least for now)
$(docname)/index.html: $(docname).sgml
-srcdir=`cd $(srcdir) && pwd`; \
if test "$(HAVE_JW)" = 'yes' ; then \
if test -f /usr/share/sgml/docbook/dsssl-stylesheets/images/next.gif ; then \
mkdir -p $$srcdir/$(docname)/stylesheet-images ; \
cp /usr/share/sgml/docbook/dsssl-stylesheets/images/*.gif $$srcdir/$(docname)/stylesheet-images/ ; \
fi; \
jw -c /etc/sgml/catalog $$srcdir/$(docname).sgml -o $$srcdir/$(docname); \
else \
db2html $$srcdir/$(docname).sgml; \
fi
if test -f $(docname)/t1.html; then \
cd $(srcdir)/$(docname) && cp t1.html index.html; \
cd $(srcdir); \
fi
$(docname).sgml: $(sgml_ents)
-ourdir=`cd . && pwd`; \
cd $(srcdir); \
cp $(sgml_ents) $$ourdir
app-dist-hook: index.html
-$(mkinstalldirs) $(distdir)/$(docname)/stylesheet-images
-$(mkinstalldirs) $(distdir)/figures
-cp $(srcdir)/$(docname)/*.html $(distdir)/$(docname)
-for file in $(srcdir)/$(docname)/*.css; do \
basefile=`echo $$file | sed -e 's,^.*/,,'`; \
cp $$file $(distdir)/$(docname)/$$basefile ; \
done
-for file in $(srcdir)/$(docname)/stylesheet-images/*.gif; do \
basefile=`echo $$file | sed -e 's,^.*/,,'`; \
cp $$file $(distdir)/$(docname)/stylesheet-images/$$basefile ; \
done
-if [ -e topic.dat ]; then \
cp $(srcdir)/topic.dat $(distdir); \
fi
install-data-am: index.html omf
-$(mkinstalldirs) $(DESTDIR)$(docdir)/stylesheet-images
-$(mkinstalldirs) $(DESTDIR)$(docdir)/figures
-cp $(srcdir)/$(sgml_files) $(DESTDIR)$(docdir)
-for file in $(srcdir)/$(docname)/*.html $(srcdir)/$(docname)/*.css; do \
basefile=`echo $$file | sed -e 's,^.*/,,'`; \
$(INSTALL_DATA) $$file $(DESTDIR)$(docdir)/$$basefile; \
done
-for file in $(srcdir)/figures/*.png; do \
basefile=`echo $$file | sed -e 's,^.*/,,'`; \
$(INSTALL_DATA) $$file $(DESTDIR)$(docdir)/figures/$$basefile; \
done
-for file in $(srcdir)/$(docname)/stylesheet-images/*.gif; do \
basefile=`echo $$file | sed -e 's,^.*/,,'`; \
$(INSTALL_DATA) $$file $(DESTDIR)$(docdir)/stylesheet-images/$$basefile; \
done
-if [ -e $(srcdir)/topic.dat ]; then \
$(INSTALL_DATA) $(srcdir)/topic.dat $(DESTDIR)$(docdir); \
fi
$(docname).ps: $(srcdir)/$(docname).sgml
-srcdir=`cd $(srcdir) && pwd`; \
db2ps $$srcdir/$(docname).sgml
$(docname).rtf: $(srcdir)/$(docname).sgml
-srcdir=`cd $(srcdir) && pwd`; \
db2ps $$srcdir/$(docname).sgml
uninstall-local:
-for file in $(srcdir)/$(docname)/stylesheet-images/*.gif; do \
basefile=`echo $$file | sed -e 's,^.*/,,'`; \
rm -f $(docdir)/stylesheet-images/$$basefile; \
done
-for file in $(srcdir)/figures/*.png; do \
basefile=`echo $$file | sed -e 's,^.*/,,'`; \
rm -f $(docdir)/figures/$$basefile; \
done
-for file in $(srcdir)/$(docname)/*.html $(srcdir)/$(docname)/*.css; do \
basefile=`echo $$file | sed -e 's,^.*/,,'`; \
rm -f $(DESTDIR)$(docdir)/$$basefile; \
done
-for file in $(sgml_files); do \
rm -f $(DESTDIR)$(docdir)/$$file; \
done
-rmdir $(DESTDIR)$(docdir)/stylesheet-images
-rmdir $(DESTDIR)$(docdir)/figures
-rmdir $(DESTDIR)$(docdir)
dist-hook: app-dist-hook
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,14 @@
<?xml version="1.0" standalone="no"?>
<omf>
<resource>
<title>
GRAMPS User Manual
</title>
<subject>
<category>GNOME|Applications</category>
</subject>
<format mime="text/sgml"/>
<identifier url="gramps-manual.sgml"/>
<language code="C"/>
</resource>
</omf>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,222 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML
><HEAD
><TITLE
>GRAMPS User Manual</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
"><LINK
REL="NEXT"
TITLE="Running GRAMPS for the first time."
HREF="x28.html"></HEAD
><BODY
CLASS="ARTICLE"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="ARTICLE"
><DIV
CLASS="TITLEPAGE"
><H1
CLASS="TITLE"
><A
NAME="AEN2">GRAMPS User Manual</H1
><P
CLASS="COPYRIGHT"
><A
HREF="ln7.html"
>Copyright</A
> &copy; 2001 by Donald N. Allingham</P
><HR
WIDTH="75%"
ALIGN="CENTER"
COLOR="#000000"
SIZE="1"></DIV
><DIV
CLASS="TOC"
><DL
><DT
><B
>Table of Contents</B
></DT
><DT
><A
HREF="t1.html#intro"
>Introduction</A
></DT
><DT
><A
HREF="x28.html"
>Running GRAMPS for the first time.</A
></DT
><DT
><A
HREF="x41.html"
>Getting Started</A
></DT
><DT
><A
HREF="x84.html"
>People View</A
></DT
><DT
><A
HREF="x129.html"
>Editing a person's data</A
></DT
></DL
></DIV
>
<DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="intro">Introduction</H1
>
<P
> <TT
CLASS="APPLICATION"
>GRAMPS</TT
> is an acronym for the
Genealogical Research and Analysis Management Programming System.
It was conceived under the concept that most genealogy programs
were designed to provide the researcher the capability to input
information related to a particular family tree. Most of these
programs have allowed for the arranging and storing of information
consistent with the GEDCOM standards. They usually provide a
means for displaying descendant or ancestral relationships by
means of graphical displays, charts, or reports. These may be
augmented with pictures or other media to enhance the data. Most
provide for inputting data on unconnected individuals/families
that may or may not have a relationship to the primary surname
being researched. Various other enhancements may also be provided
in the genealogical program that allows for different degrees of
importing and exporting data from other programs and printing of
the data contained in the various reports. GRAMPS, on the other
hand, attempts to provide all of the common capabilities of these
programs, but, more importantly, to provide a capability not
common to these programs. This is the ability to input any bits
and pieces of information directly into GRAMPS and
rearrange/manipulate any/all data events in the entire data base
(in any order or sequence) to assist the user in doing research,
analysis and correlation with the potential of filling
relationship gaps. In short, a tool that provides a way to input
all your research into one place and do your analysis and
correlation using the speed, power, and accuracy of your computer
instead of pencils and unmanageable reams of paper.
</P
>
<P
> To run <TT
CLASS="APPLICATION"
>GRAMPS</TT
>, select
-&gt;<B
CLASS="GUISUBMENU"
>Programs</B
>+
+ -&gt;<B
CLASS="GUISUBMENU"
>Applications</B
>+
+ -&gt;<B
CLASS="GUIMENUITEM"
>gramps</B
>+
+ + + + + +
from the <B
CLASS="GUIMENU"
>Main Menu</B
>, or type
<B
CLASS="COMMAND"
>gramps</B
> on the command line.
</P
>
<P
> This document describes version 0.7.3 of
<TT
CLASS="APPLICATION"
>GRAMPS</TT
>.
</P
>
</DIV
>
</DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="x28.html"
ACCESSKEY="N"
>Next &#62;&#62;&#62;</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Running GRAMPS for the first time.</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>

View File

@ -0,0 +1,133 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML
><HEAD
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
"><LINK
REL="HOME"
TITLE="GRAMPS User Manual"
HREF="t1.html"><LINK
REL="UP"
TITLE="GRAMPS User Manual"
HREF="t1.html#AEN2"><LINK
REL="NEXT"
TITLE="Running GRAMPS for the first time."
HREF="x28.html"></HEAD
><BODY
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>GRAMPS User Manual</TH
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="LEGALNOTICE"
><A
NAME="legalnotice"><P
></P
> <P
> Permission is granted to copy, distribute and/or modify this document
under the terms of the <A
HREF="gnome-help:fdl"
TARGET="_top"
><I
CLASS="CITETITLE"
>GNU Free Documentation
License</I
></A
>, Version 1.1 or any later version
published by the Free Software Foundation with no Invariant Sections,
no Front-Cover Texts, and no Back-Cover Texts. A copy of the license
can be found <A
HREF="gnome-help:fdl"
TARGET="_top"
>here</A
>.
</P
>
<P
> Many of the names used by companies to distinguish their products and
services are claimed as trademarks. Where those names appear in any
GNOME documentation, and those trademarks are made aware to the members
of the GNOME Documentation Project, the names have been printed in caps
or initial caps.
</P
>
<P
></P
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="t1.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>&nbsp;</TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="t1.html#AEN2"
ACCESSKEY="U"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>&nbsp;</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 995 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 964 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 944 B

Some files were not shown because too many files have changed in this diff Show More