# HACKING -*- org -*- #+TITLE: Hacking notes for Libassuan #+STARTUP: showall * How to contribute The following stuff explains some basic procedures you need to follow if you want to contribute code or documentation. ** No more ChangeLog files Do not modify any of the ChangeLog files in Libassuan. Starting on December 1st, 2011 we put change information only in the GIT commit log, and generate a top-level ChangeLog file from logs at "make dist" time. As such, there are strict requirements on the form of the commit log messages. The old ChangeLog files have all be renamed to ChangeLog-2011 ** Coding standards Please follow the GNU coding standards. If you are in doubt consult the existing code as an example. Do no re-indent code without a need. If you really need to do it, use a separate commit for such a change. See below for the required commit log format. ** Commit log requirements Your commit log should always start with a one-line summary, the second line should be blank, and the remaining lines are usually ChangeLog-style entries for all affected files. However, it's fine -- even recommended -- to write a few lines of prose describing the change, when the summary and ChangeLog entries don't give enough of the big picture. Omit the leading TABs that you're used to seeing in a "real" ChangeLog file, but keep the maximum line length at 72 or smaller, so that the generated ChangeLog lines, each with its leading TAB, will not exceed 80 columns. Here is an example of a commit message: #+begin_example Make new functions also visible on non-W32. * src/system-posix.c (__assuan_read, __assuan_write, __assuan_recvmsg) (__assuan_sendmsg, __assuan_waitpid): Make functions global. * src/libassuan.vers: Add above functions. * configure.ac: Set version to 2.1.0-git. -- Note that everything after the above tear off marker will not be copied to the ChangeLog during a "make dist". You may use this to add extra information about this commit which are mostly relevant for your co-hackers. Recall that the ChangeLog itself fulfills requirements of the GPL and is useful for quick history checks of a released version. Developers will use the git log. #+end_example If you don't want a ChangeLog entry at all, use this: #+begin_example Give examples for commit logs. -- Because the tear off line is the first line of the body, not even the summary line will be copied to the ChangeLog. Using only the tear off line without any text is often useful for commits like "Typo and grammar fixes." #+end_example ** License policy Libassuan is currently licensed under the LGPLv2+ with tools and the manual being under the GPLv3+. We may eventually update to a newer version of the licenses or a combination of them. It is thus important, that all contributed code allows for an update of the license; in particular we can't accept code under the GPL or LGPL without the "or any later version" term. Being developed as part of GnuPG-2, Libassuan used to have a strict policy of requiring copyright assignments to the FSF. To avoid this major organizational overhead and to allow inclusion of code, not copyrighted by the FSF, this policy has been relaxed. It is now also possible to contribute code by asserting that the contribution is in accordance to the "Libassuan Developer's Certificate of Origin" as found in the file "DCO". (Except for a slight wording change, this DCO is identical to the one used by the Linux kernel.) If your want to contribute code or documentation to Libassuan and you didn't signed a copyright assignment with the FSF in the past, you need to take these simple steps: - Decide which mail address you want to use. Please have your real name in the address and not a pseudonym. Anonymous contributions can only be done if you find a proxy who certifies for you. - If your employer or school might claim ownership of code written by you; you need to talk to them to make sure that you have the right to contribute under the DCO. - Send an OpenPGP signed mail to the gnupg-devel@gnupg.org mailing list from your mail address. Include a copy of the DCO as found in the official master branch. Insert your name and email address into the DCO in the same way you want to use it later. Example: Signed-off-by: Joe R. Hacker (If you really need it, you may perform simple transformations of the mail address: Replacing "@" by " at " or "." by " dot ".) - That's it. From now on you only need to add a "Signed-off-by:" line with your name and mail address to the commit message. It is recommended to send the patches using a PGP/MIME signed mail.