Please comply with the following rules when hacking on Avahi:

 * Before commiting check with "git st" that all built files are ignored
   by git. To change the list of ignored files use

       $VISUAL .gitignore

   This is similar to the ".cvsignore" file in CVS times.

 * Don't forget to add the autoconf config.h inclusion to all C source files:

   #ifdef HAVE_CONFIG_H
   #include <config.h>
   #endif

   This needs to be placed in in .c files only. NOT IN HEADER FILES!

 * Don't hardcode any paths in source files. Either use the -D option of gcc
   for C sources or use "sed" to replace them based on a .in file.

 * Never forget that Avahi should be buildable without DBUS, GTK or python!

 * Before commiting, test your code! In case of C consider running it
   a few times through valgrind, to make sure that you got everything
   right.  You have to call libtool explicitly when running valgrind
   on binaries that depend on shared objects. e.g:

       libtool --mode=execute valgrind ./avahi-daemon

   Please note that valgrind can't find you all bugs. Please check
   your code thrice with your brain before committing. Valgrind is
   only a final check.

 * Whenever you add a new Makefile.am, C (.c or .h) source file, shell or
   python script please add this legal blurb to its header:

   For Makefile.am, python and shell code:

<snip>
# This file is part of avahi.
#
# avahi is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# avahi 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 Lesser General Public
# License along with avahi; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA.
</snip>

   For C source code:

<snip>
/***
  This file is part of avahi.

  avahi is free software; you can redistribute it and/or modify it
  under the terms of the GNU Lesser General Public License as
  published by the Free Software Foundation; either version 2.1 of the
  License, or (at your option) any later version.

  avahi 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 Lesser General
  Public License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with avahi; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  USA.
***/
</snip>
