Warning, /pim/kmail/src/HACKING is written in an unsupported language. File is not indexed.

0001 Getting Involved
0002 ================
0003 
0004 If you want to code on KMail - don't be shy, just start hacking and send in patches!
0005 
0006 See the "Committing" section on how to send patches.
0007 
0008 Some starting points are:
0009 
0010 General information about contributing to KDE:
0011 https://community.kde.org/Get_Involved
0012 
0013 Building KDE:
0014 https://community.kde.org/Guidelines_and_HOWTOs/Build_from_source
0015 To hack on KMail, you'll first need to set up a build environment, which is described here.
0016 
0017 Generally, you just need to set up your build environment, modify the code and then send patches.
0018 The best thing is probably to scratch an itch of yours, e.g. fixing a bug that is annoying you
0019 or writing a feature that you are interested in. Have a look at bugs.kde.org to see the current
0020 KMail bugs and wishes (although some entries on the bug tracker are outdated). For working on KMail,
0021 some C++ knowledge is required. Qt, KDE and KMail knowledge can probably be picked up by reading
0022 code on experimenting with it (and by reading the documentation, of course!).
0023 
0024 Communication
0025 =============
0026 
0027 If you need help, have questions or patches, come to the #kontact IRC channel or write to the
0028 KDE PIM mailinglist, see https://mail.kde.org/mailman/listinfo/kde-pim. If you write to the
0029 mailinglist without being subscribed to it, say so in your mail so subscribers know to CC you in
0030 their reply. You can also write to the maintainer directly. No questions are too stupid to
0031 ask, but make sure you read some of the pages linked from this document.
0032 
0033 Documentation
0034 =============
0035 
0036 The auto-generated KDE PIM documentation can be found at https://api.kde.org/kdepim/index.html. The
0037 Note that many classes are not documented or the documentation is outdated. You'll have to read the
0038 code in order to understand it in those cases.
0039 
0040 See https://community.kde.org for many other KDE related developer documentation and tutorials.
0041 
0042 Some related RFCs are (see http://www.faqs.org/rfcs/):
0043 RFC4155 - The application/mbox Media Type
0044 RFC2822 - Internet Message Format
0045 RFC2045-2049 - Multipurpose Internet Mail Extensions (MIME)
0046 RFC2183 - Communicating Presentation Information in Internet Messages
0047 RFC2231 - MIME Parameter Value and Encoded Word Extensions: Character Sets, Languages, and
0048             Continuations
0049 RFC1847 - Security Multiparts for MIME: Multipart/Signed and Multipart/Encrypted
0050 RFC2633 - S/MIME Version 3 Message Specification
0051 RFC3156 - MIME Security with OpenPGP
0052 RFC2298 - An Extensible Message Format for Message Disposition Notifications
0053 RFC2557 - MIME Encapsulation of Aggregate Documents, such as HTML (MHTML)
0054 RFC1939 - Post Office Protocol (POP) - Version 3
0055 RFC1734 - POP3 AUTHentication command
0056 RFC2449 - POP3 Extension Mechanism
0057 RFC2821 - Simple Mail Transfer Protocol (SMTP)
0058 RFC1869 - SMTP Service Extensions
0059 RFC1870 - SMTP Service Extension for Message Size Declaration
0060 RFC2554 - SMTP Service Extension for Authentication
0061 RFC2920 - SMTP Service Extension for Command Pipelining
0062 RFC3501 - Internet Message Access Protocol (IMAP) - VERSION 4rev1
0063 
0064 The above list is incomplete. Some of those technologies are implemented in KDE PIM libraries, not
0065 in KMail itself.
0066 
0067 Branches
0068 ========
0069 
0070 KMail has several branches in the following locations:
0071 
0072 1. master
0073 This is where the main development takes place. It will be released together with the next major
0074 release of KDE Applications. New features should always be committed against this branch.
0075 
0076 2. the stable branch for KDE Applications (e.g. 17.08.x)
0077 Important bugfixes should be committed against this stable branch, and subsequently merged into
0078 the master branch. The fix can then be released together with the next minor version of KDE
0079 Applications (e.g. 17.08.{x+1}).
0080 
0081 Committing
0082 ==========
0083 
0084 Before you commit (or send a patch)
0085 - Make sure it compiles
0086 - Review the output of svn diff to avoid committing unwanted changes
0087 - Test your changes
0088 - Make sure the coding style is correct
0089 
0090 To select the correct branch, see the Branches section above.
0091 
0092 If you don't have commit access, add the patch (output of git diff) for the KMail repository at
0093 https://phabricator.kde.org/differential/ and add the KDE PIM group as reviewer.
0094 
0095 Larger changes, for example new features, should be reviewed first, even if you have commit access.
0096 
0097 Follow the other KDE polices in https://community.kde.org/Policies/Commit_Policy.
0098 
0099 If ever any argument or conflict should arise over a commit, the following applies (taken from the
0100 old COMMITPOLICY document):
0101 "In the result of a conflict over a commit to the KMail section of KDE SVN
0102  a resolution to this conflict, that is the decision to keep or revert the
0103  commit can be decided by a unanimous agreement of the maintainers, or
0104  failing that a resolution to the conflict will be decided by a vote of KMail
0105  core developers."
0106 
0107 Coding Style and other polices
0108 ==============================
0109 
0110 KMail is more than 10 years old, and has inconsistent coding style in many places. However, new code
0111 should obey to the standard KMail coding style, to keep things as consistent as possible.
0112 
0113 Please don't mix commits that change the coding style of existing code to the standard coding style
0114 with other changes. So when committing coding style fixes, the commit should not change anything
0115 else. You can use the SVN_SILENT keyword then.
0116 
0117 KMail follows the KDE coding style (https://techbase.kde.org/Policies/Frameworks_Coding_Style) with
0118 some exceptions, mentioned below. Note that most of the rest of KDE PIM also follows the KMail
0119 style. You should also read the coding style document for Kontact, which can be found at
0120 https://cgit.kde.org/kontact.git/tree/HACKING. All of it also applies to KMail.
0121 
0122 Please don't argue against this style, we're stuck with that anyway (changing the style to something
0123 else would mess up the svn annotate function)
0124 
0125 Other things to keep in mind:
0126 
0127 - No #defines, except for include guards or conditional compiling.
0128   Use real constants, inline functions and template functions instead.
0129 
0130 - Don't use the "KM" prefix for new classes anymore, put the class into the "KMail" namespace
0131   instead.
0132 
0133 - New files must have a license header.
0134 
0135 - Use KConfigXT for new global settings (see kmail.kcfg) whenever possible.
0136 
0137 - When changing the way config data is stored, you need to make sure older config files can still be
0138   read. For this, write a kconfig update script, see the kconf_update directory for examples. See
0139   https://techbase.kde.org/Development/Tools/Using_kconf_update for more documentation on this.