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 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 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 /usr/local/bin:) % gnucash-env gdb /usr/bin/guile [gdb output] % gdb> run -e main -s /usr/local/libexec/gnucash/overrides/gnucash --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 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_has_table bugs, and then the program exited prematurely for no appearenet reason. :-( If you know how to fix this, please update tehse instructions.