| And when you drive for hours, arrive to find you nowhere gone, you've just been |
| mouthing "brum, brum", rocking wheel, of course you have, the heap is rusted |
| through and off the road since you drove drunk through thirteen school yards, |
| laughing like Prescott. |
| |
| Then welcome, ah, oo costrinzi welcome, in OProfile. |
| |
| Please talk to the list before starting on something. We're not too scary. |
| |
| You can find some documentation on how OProfile works in doc/internals.html |
| |
| Here's a short list of some stuff you need to know to get started. Don't forget |
| to read doc/CodingStyle |
| |
| Source organisation |
| ------------------- |
| |
| module/ |
| |
| The 2.4 module code. Sub-directories contain architecture-specific code. |
| |
| daemon/ |
| |
| The daemon. liblegacy/ contains the daemon core for 2.4 |
| |
| utils/ |
| |
| Scripts for managing the daemon etc. |
| |
| doc/ |
| |
| User and developer documentation |
| |
| events/ |
| |
| Textual performance counter event descriptions. |
| |
| libpp/ |
| |
| Classes for handling profiles |
| |
| pp/ |
| |
| The post-profiling tools for showing results |
| |
| libabi/ |
| |
| opimport and its ABI support library |
| |
| libdb/ |
| |
| The sample file access library |
| |
| libop/ |
| |
| C language oprofile-specific helper stuff |
| |
| libopt++/ |
| |
| A simple C++ library for parsing command lines |
| |
| libregex/ |
| |
| C++ demangling pattern matching for smart demangling feature. |
| |
| libutil/ |
| libutil++/ |
| |
| Generic helpers |
| |
| gui/ |
| |
| The GUI for starting oprofile |
| |
| m4/ |
| |
| Autoconf macros for ./configure stage |
| |
| Tools |
| ----- |
| |
| You'll need autoconf 2.13+ and automake 2.5+ when using CVS. Don't forget to |
| autogen.sh first. |
| |
| We still currently support gcc 2.91.66. Please bear this in mind. |
| |
| Shell Scripts |
| ------------- |
| |
| Any shell scripts should aim to be as compatible as possible with different |
| shells and "bashisms" etc. should not be used. Busybox is often used instead |
| of bash on embedded devices for example. |
| |
| Making patches, commit rights |
| ----------------------------- |
| |
| Patches should be in diff -u format, appliable by patch -p1 in the top-level |
| source directory. Patches should not include changes to generated files. |
| |
| Even trivial patches must have a change log entry in the usual format (see |
| ChangeLog). Refer to bug numbers in the change log if relevant. |
| |
| When you submit a patch, we ask that you include a "Signed-off-by" |
| line; for example: |
| Signed-off-by: Random J Developer <random@developer.example.org> |
| |
| Including this line with your patch implies that you have read and comply with |
| the "Developer's Certificate of Origin 1.1" (DCO). This is the same process |
| the kernel community uses to try to ensure the originality of patches. The |
| DCO can be found in <kernel-source>/Documentation/SubmittingPatches, item 11, |
| "Sign your work". For convenience, a copy of the DCO is included below. |
| |
| Developer's Certificate of Origin 1.1 |
| |
| By making a contribution to this project, I certify that: |
| |
| (a) The contribution was created in whole or in part by me and I |
| have the right to submit it under the open source license |
| indicated in the file; or |
| |
| (b) The contribution is based upon previous work that, to the best |
| of my knowledge, is covered under an appropriate open source |
| license and I have the right under that license to submit that |
| work with modifications, whether created in whole or in part |
| by me, under the same open source license (unless I am |
| permitted to submit under a different license), as indicated |
| in the file; or |
| |
| (c) The contribution was provided directly to me by some other |
| person who certified (a), (b) or (c) and I have not modified |
| it. |
| |
| (d) I understand and agree that this project and the contribution |
| are public and that a record of the contribution (including all |
| personal information I submit with it, including my sign-off) is |
| maintained indefinitely and may be redistributed consistent with |
| this project or the open source license(s) involved. |
| |
| |
| |
| If you make a change visible to the user in some way, you should check the |
| website for any needed changes. Patches to oprofile-www CVS are preferred |
| but a notification of what needs changing is good enough. Any changes that |
| affect the docs (man-pages or oprofile.xml) must include documentation updates |
| as appropriate. Also see below. |
| |
| You may after a while be given direct commit rights. You should be |
| subscribed to both the main list and the commits mailing list if you do. |
| Your cvs commit message only needs to briefly describe what your change |
| does - the change log should have the detailed description. Any |
| non-trivial change needs approval from either John, Phil or Maynard, |
| unless stated otherwise. The CVS tree will freeze occassionally for |
| release, in which case no commits are allowed at all without agreement |
| of John, Phil, or Maynard. CVS admin changes (-kb, .cvsignore etc.) do |
| not need a change log, and neither does changes to TODO. If you make a |
| change that affects the user (feature improvement, new feature, bug fix, |
| UI change), see the next section. |
| |
| The oprofile website |
| -------------------- |
| |
| The oprofile website source is stored in the oprofile-www CVS module, excepting |
| the doc/ and srcdoc/ directories, which are updated by hand at release time. |
| The visible website (http://oprofile.sf.net/) must always describe the last |
| *released* version of OProfile, but the CVS contents should be up to date with |
| the CVS code. This means that if you make a user-visible change as described |
| in the last section, you should update the files in oprofile-www and commit. |
| You can do "cvs update" in home/groups/o/op/oprofile/htdocs/cvs on sourceforge |
| to get http://oprofile.sf.net/cvs/, so you can check your changes work (and |
| validate: see http://www.htmlhelp.com/tools/validator/). |
| |
| Any user-visible change should have a short description in the file |
| release-notes/release-<nextversion> in the oprofile-www CVS module. |
| Do not document bug fixes that were not in the last released version. |
| |
| CVS branches |
| ------------ |
| |
| You may need at some point to do your work on a CVS branch, if it's |
| particularly invasive. CVS is a PITA in this respect unfortunately. It's |
| strongly recommended that you merge changes from the trunk to your branch at |
| regular intervals. |
| |
| To create a branch, create a branch tag : |
| |
| cvs rtag -b BRANCH_WHATEVER oprofile |
| |
| And add a merge tag (in the trunk repository): |
| |
| cvs rtag BRANCH_WHATEVER_MERGE oprofile |
| |
| Now make your changes on the branch as you wish. When you want to merge some |
| fixes from the trunk in your branch, do something like this on a branch |
| checkout : |
| |
| cvs update -j BRANCH_WHATEVER_MERGE -j HEAD |
| |
| Fix up any conflicts and commit it the changes to the branch. Now move the |
| merge tag along for the next merge (in the trunk repository) : |
| |
| cvs rtag -F BRANCH_WHATEVER_MERGE oprofile |
| |
| When the time comes to merge the branch changes back into the trunk, I |
| recommend just doing a diff -Naur on the two trees, which will make sure CVS |
| hasn't done anything unusual. Don't forget to list your branch on the website |
| CVS page. |