= Patch Guidelines == =
Any invasive or non-trivial patches should preferably adhere to the following recommendations:
* Search the [http://sourceforge.net/mailarchive/forum.php?
forum_id= 1919 flightgear-devel list archives] ([http://www.flightgear.org/mail.html old]) for any relevant discussion and then post to the flightgear-devel mailing list describing your idea and discussing the scope of effort required.
* Try to make your patch optionally minimally invasive:
** provide compile time switches to generally enable or disable your modifications (i.e. using #ifdefs, [http://sources.redhat.com/autobook/ autoconf and automake] macros) That way, you will ensure that your patch can
be easily disabled (excluded from compilation while remaining in the source tree) if it should cause trouble while any issues are addressed. This applies in particular if your patch introduces any extra dependencies (i.e. libraries).** provide capabilities to enable or disable your code modifications at startup time or even at runtime, using command line options or preferably the PropertyTree and some simple GUI dialog to enable developers and users to decide whether they want to activate your code. That way, it can be ensured that your code doesn't interfere with any other FlightGear components. This will make potential bug tracking much easier.
* Try to carefully document those passages in your source code that:
** are non-obvious
** are hackish or workarounds
** use code where you yourself aren't entirely sure if you're doing the right thing
** are known to negatively interfere with other FlightGear code
* Try to make sure that your code isn't platform-specific. Hence, it is generally a good idea to make any contributions as cross-platform capable as possible
* If you need to print output to the terminal, make sure to use the SG_LOG logging mechanism, using the appropriate log level. Use this command sparingly, as excessive logging information has negative impact on framerate, especially on some platforms. When committing a patch, make sure you have either removed or commented out any cout or cerr statements that you have used during private debugging sessions.
=== Patch Format === TODO: unified diff vs. tarball (compressed archives) === Howto Create Patches === fg-submit script As of March 2007, a bash script "fg-submit" is available that simplifies the preparation of patches that are to be submitted to the maintainers. It can be found in '/source/scripts/tools'. It compares your changes to cvs, creates a diff file and an archive containing your changed files and the diff file. Run this script from within the CVS directory containing your changes. Usage: $ cd $FG_ROOT/Aircraft/foo $ fg-submit TODO: links to diff/patch tutorials link to diff/patch utilities for various platforms recommended: KDiff3 (QT based cross platform, GUI frontend to GNU diff/patch) http://kdiff3.sourceforge.net === Where to Send Patches === '''Developers with CVS access :'''