gnucash/HACKING
Joshua Sled d53ab1fdd2 Updates for new program invocation method, path conventions.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@12356 57a11ea4-9604-0410-9ed3-97b8803252fd
2006-01-15 22:19:13 +00:00

164 lines
5.1 KiB
Plaintext

Hacking Guidelines
==================
This document is an introduction to hacking on GnuCash.
Related Documents
-----------------
In addition to this file, you should read the README file, which
explains the details of getting the CVS source, building GnuCash,
and creating patches for submission.
The src/doc/design directory contains a preliminary design document
which you should read as well. You should also feel free to hack on
the design document.
Coding Style Conventions
------------------------
General:
* When modifying a file, the style convention in that file should be
followed.
* When creating a new file, the style of existing files should be
followed.
* When creating lots of new files in a new directory, you may use
your own coding standards, but please try to stick as closely as
possible to the GNU coding standards.
* Do not submit patches that consist of (gratuitous) stylistic changes.
C:
* Use ISO C.
* Use glib memory routines where possible. This means you should be
using g_malloc(), g_new(), g_free(), etc., instead of malloc(),
free(), etc. Do not mix glib memory calls with libc calls!
* Where possible, use glib data abstractions instead of rolling your
own. Glib linked lists and pointer arrays are very convenient and
have been extensively used and tested.
* All gnucash functions and global variables are prefixed with gnc_
* Use static functions whenever possible
* Use const whenever possible
Scheme:
* All gnucash functions and global variables are prefixed with gnc:
* All global variables are enclosed in ** (i.e. gnc:*load-path*)
* All private functions are enclosed in __ (i.e. gnc:_do-not-call_)
* All C functions wrapped with g-wrap have dashes in place of underscores.
(xaccSplitGetBalance --> gnc:split-get-balance).
Dave Peticolas <dave@krondo.com>
August 22, 2000
=====================================================================
TIPS AND HINTS
=====================================================================
Starting Gnucash from the build tree:
-------------------------------------
To run gnucash from your build tree:
-- edit ./src/bin/overrides/gnucash and replace gnucash-env with
./src/bin/overrides/gnucash-build-env
-- then start gnucash by saying ./src/bin/overrides/gnucash
-- Make sure you undo this change before installing gnucash
Getting Trace Messages From GnuCash:
------------------------------------
Note that piping stdout from gnucash to a file causes gnucash to crash.
Don't know why, this is a bug that needs to be fixed. Here's another
way to get trace messages into a file:
-- edit src/engine/gnc-trace.c, adjust values in the array
gnc_log_modules[] to what you want to have for a given module.
-- edit gnc_log_init() to fopen() the log file where you want
messages to go to.
Starting GnuCash in GDB
-----------------------
To run gdb on an installed version of gnucash (installed in /opt/gnc/unstable:)
% /opt/gnc/unstable/bin/gnucash-env gdb /opt/gnc/unstable/bin/gnucash-bin
[gdb output]
% gdb> run [--g-fatal-warnings]
To run gdb on the version in your build tree:
% ./src/bin/overrides/gnucash-build-env gdb /usr/bin/guile
[gdb output]
% gdb> run -e main -s ./src/bin/overrides/gnucash --g-fatal-warnings
You'll also probably want to know about these:
% gdb> catch fork
% gdb> set follow-fork-mode child
-----
It may be the case that running GDB from within emacs doesn't work for you,
with the following error:
[C-u M-x gdb /opt/gnucash-cvs/bin/gnucash-env gdb /opt/gnucash-cvs/bin/gnucash-bin
...in buffer *gud-gdb*:]
/opt/gnucash-cvs/libexec/gnucash/overrides/gnucash-env: line 28: exec: -d: invalid option
exec: usage: exec [-cl] [-a name] file [redirection ...]
jsled needed to re-define a gud.el function as such:
(defun gud-gdb-massage-args (file args)
(let ((l (copy-list args)))
(nconc l (list "-cd" (expand-file-name default-directory) "-fullname"))))
Using Electric Fence with GnuCash
---------------------------------
% configure --enable-efence
(except this doesn't actually enable efence :-( need to hack
configure.in and add $LIBS = -lefence and re-run ./autogen.sh)
Don't know why, efence does not currently work with gnucash:
I get a bunch of errors:
warning: Cannot initialize thread debugging library: unknown thread_db error '22'
If you know how to fix this, please update tehse instructions.
Using Valgrind with GnuCash
---------------------------
-- run ./src/bin/overrides/gnucash-valgrind
However, I did not find valgrind to be useful. It reported a bunch of
guile bugs, some g_hash_table bugs, and then the program exited prematurely
for no appearenet reason. :-(
For the moment, use the supressions in src/valgrind-gnucash.supp
This file needs to be cleaned up in two ways:
1/ There are a bunch of duplicate supressions in the file.
* The supressions in place were auto-generated by valgrind itself
[--gen-suppressions=yes], and it makes no effort to output the
suppression only once.
2/ There are a bunch of suppressions which need to not be supressions, but
instead just not be generated by valgrind.