~ubuntu-branches/ubuntu/raring/kactivities/raring-proposed

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
.\" " " " " " " " " " " " " " " " " " " " " " " " " " " "
.\"                                                     "
.\" It is best to view this file with the man tool:     "
.\" man ./README.developers                             "
.\"                                                     "
.\" " " " " " " " " " " " " " " " " " " " " " " " " " " "


.TH README KAMD  2012-08-29 "KDE" "KActivities Developers"

.SH COMMIT POLICY

Every non-trivial patch must go through the review before it goes into the
master branch.

    http://git.reviewboard.kde.org
        repository: kactivities
        groups:     plasma
        people:     Ivan Cukic

If you don't have an account for identity.kde.org, you can send smaller
patches to the plasma-devel@kde.org mailing list, or (please don't) directly
to the repository maintainer (see MAINTAINER file).


.SH CODE POLICY

The code needs to follow KDElibs coding style in *all* parts of the project,
not only the library. You can find more information about the style here:
http://techbase.kde.org/Policies/Kdelibs_Coding_Style

Macros in CMakeLists.txt should be lowercase throughout the project,
and indentation should be 4, with the closing parenthesis in the same level
as the content.

.SH COMPILER COMPATIBILITY

The library (src/lib) needs to be compilable with all compilers that the
latest version of Qt (4.x) supports.

Other parts require modern compilers. You can (and should) use more modern
C++ coding practices. Including auto, lambdas, smart pointers etc. You can
use anything that GCC 4.5 can compile.

These are the compilers you need to test your patches against:
    - GCC 4.5
    - GCC 4.7
    - LLVM/Clang 3.1

When you set up different builds alongside the main one, you  can use
scripts/commit.sh to build them all before committing. The script
calls git commit if all builds finished successfully. See the script
for more info.


.SH FILE NAMING

The library files are lower-case, apart from the pretty headers.
The service, and the rest of the repository should be in camel-case
(with the exception of source files that don't have corresponding
headers, or vice-versa).


.SH CONVENIENCE MACROS AND METHODS

There are some convenience macros and methods defined in the headers placed
in the service/utils/ directory.

.TP
.B nullptr
nullptr.h defines nullptr macro if the compiler doesn't support it. It is
defined as 0 which is far from perfect, but works good enough on obsolete
compilers.

.TP
.B _override
override.h defines _override to express explicit virtual overrides. Will
expand to nothing on obsolete compilers.

.TP
.B val
val.h defines a macro 'val' that expands to 'const auto'. People tend not
to use the const keyword even when they are defining a variable that will
not change. This way, it is easier to do so. For example, instead of writing:

    const QString path = KStandardDirs::locateLocal("data", ...);
    const int id = object->id();

you can (and should) write this:

    val path = KStandardDirs::locateLocal("data", ...);
    val id   = object->id();

This should be always last included header since other parts of the project
or upstream libraries could have used val as a variable name.

.TP
.B D_PTR
d_ptr.h and d_ptr_implementation.h define a smart pointer way of doing
the d-ptr (aka pimpl) idiom.

.TP
.B remove_if
remove_if.h is a generic implementation of the erase-remove idiom

.TP
.B for_each_assoc, find_if_assoc
for_each_assoc.h and find_if_assoc.h define the for_each and find_if
algorithms for associative containers. Works with both Qt and STL containers.