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.