chiark / gitweb /
Adjust --version output to more closely match GNU standards
[disorder] / README.developers
CommitLineData
91d9a42d 1Dependencies:
2
3 * You'll need, in addition to the packages mentioned in README:
4 Automake 1.10 1.7 is no good; 1.8/9 might work
5 Autoconf 2.61 Slightly older might work too
6 Libtool 1.5.22 1.4 is no good
7 Bazaar (bzr) You might be able to manage without
8 Python 2.4
9
10 * On Debian and derivatives this should work:
11
12 apt-get install gcc libc-dev automake autoconf libtool libgtk2.0-dev \
13 libgc-dev libgcrypt-dev libpcre3-dev libvorbis-dev \
14 libao-dev libmad0-dev libasound2-dev libdb4.3-dev \
15 libflac-dev
16
17 * Please report unstated dependencies (here, README or debian/control).
18
b30155e3
RK
19Building:
20
21 * Compiled versions of configure and the makefiles are including in bzr, so
22 if you didn't use a source tarball, you must start as follows:
23
d558cce2
RK
24 bash ./prepare
25 ./configure -C
b30155e3
RK
26 make
27
28 * On FreeBSD you must use gmake.
29
91d9a42d 30Testing:
31
32 * There is an extensive test suite in lib/test.c and tests/*.py. You can
33 run the tests with 'make check'. If possible please add tests for new
34 code to at least one of these. At the very least the existing tests
35 should continue to pass.
36
37 * The tests will not currently pass in an ASCII locale. This is essentially
38 unavoidable given the need to test Unicode support. ISO 8859-1 or UTF-8
39 locales should be OK for the time being.
40
41APIs And Formats:
42
43 * To support a new sound API:
44 1) Teach configure.ac how to detect any libraries required.
45 2) Define a new BACKEND_ value and update configuration.[ch] for it.
46 3) Create a suitable server/speaker-*.c along the pattern of the existing
47 ones.
48 4) If possible create a suitable lib/mixer-*.c. This doesn't make sense
49 for all APIs (e.g. network), but even for those it does, playback
50 support without volume control support is likely to be acceptable (even
51 if inferior to full support).
52 5) Update doc/disorder_config.5.in.
53 6) If relevant, create a suitable clients/playrtp-*.c and update
54 doc/disorder-playrtp.1.in.
55
56 * To support a new file format:
57 1) Teach configure.ac how to detect any libraries required.
58 2) Add a new section to server/decode.c. NB this file may be split into
59 several bits one day.
60 3) Add a new section to plugins/tracklength.c. Again this file may be
61 split up in a future version.
62 4) Update default_players[] in lib/configuration.c.
63 5) Update doc/disorder_config.5.in.
64
65The Server:
66
67 * The server's command implementations must not block. Waiting for a little
0590cedc
RK
68 disk IO is OK but blocking for extended periods on long-lasting
69 transactions or external resources is not acceptable; it will wedge the
70 server for all other users.
71
72 Long-running subprocesses should use subprograms (rather than forking but
73 not execing) if reasonably possible; see c_stats() for an example.
74 c_reminder() is probably in the grey area.
91d9a42d 75
76 * The server process does not use threads and I would like to keep it that
77 way.
78
79 * The server uses the Boehm garbage collector. This eliminates the need to
80 call free() and similar functions in many cases, though teardown calls to
81 that do more than free GC-allocated memory (such as fclose()) are still
82 required.
83
84 * DisOrder's *printf calls, such as byte_xasprintf(), are mostly preferred
85 within the server to the ones built into libc. An important distinction
86 is that they will always accept UTF-8 strings whereas the built-in ones
87 may reject them in non-UTF-8 locales (for instance Glibc does this) with
88 EILSEQ. Only where the data is guaranteed to be ASCII may the libc
89 functions be used.
90
91 * To add a new configuration directive:
92 1) Add a new entry to the struct in lib/configuration.h
93 2) Add a new table entry to conf[] in lib/configuration.c
94 3) If the directive is entirely unlike existing ones add a new type_
95 to lib/configuration.c
96 4) Set the default if non-0 in config_default(). In some cases
97 config_postdefaults() may be more appropriate.
98 5) Document the new directive in doc/disorder_config.5.in
99
100 * To add a new command:
101 1) Add a new c_ function and table entry in server/server.c
102 2) Document the new command in doc/disorder_protocol.5.in
103 3) Add a new function to lib/client.c
104 4) Add a new function to lib/eclient.c
105 5) Add a new function to python/disorder.py.in
106 6) Add a new command to clients/disorder.c and update doc/disorder.1.in
107 7) Add a new test somewhere in tests/*.py
108 Depending on the purpose of the command it may be acceptable to leave out
109 some of the client side work - for instance commands only ever used by the
110 web interface are not implemented in lib/eclient.c.
111
112 * See disorder_protocol(5) for details of how the status code is
113 constructed, and the existing commands for examples.
114
115 * If the command needs a new right to be defined then update lib/rights.[ch]
116 and doc/disorder_config.5.in. New rights should definitely be mentioned
117 in README.upgrades as existing users will not automatically get new rights
118 even if they are in default_rights. If the new right should not be in
119 default_rights by default then you must update config_postdefaults().
120
121Web Interface:
122
123 * The web interface does not use Javascript or Flash and I would like to
0590cedc
RK
124 keep it that way. Clever use of CSS is OK provided it works well on the
125 mainstream browsers.
91d9a42d 126
127 * I know that the web template syntax is rather nasty. Perhaps it will be
128 improved in a future version.
129
130 * Update templates/help.html for any changes you make.
131
132Disobedience:
133
134 * Disobedience does not currently use threads and I'd prefer to keep it that
135 way.
136
137 * Disobedience uses the Boehm garbage collector but not for GTK+/GLIB's
138 memory allocation, as they are incompatible with it. So you still have to
139 do somewhat manual memory management for GTK+ objects. Fortunately it has
140 its own refcounting system which does most of the work for you.
141
142 * Lengthy operations must not block. In practice this seems to be a less of
143 a problem for Disobedience than the server. Use the GLIB event loop to
144 deal with long-running operations if you do need any.
145
146 * Update doc/disobedience.1.in for any changes you make.
147
0590cedc
RK
148New Platforms:
149
150 * It is not mandatory to have an entry in configure's 'case $host' section,
151 but may well be convenient.
152
153 * Complete support for a new platform implies updating scripts/setup.in and
154 scripts/teardown.in as well as getting the software to build and work (but
155 this doesn't mean that patches that don't achieve this will be rejected).
156
91d9a42d 157Code And Patches:
158
159 * Please follow the existing layout conventions.
160
161 * Please try to write doc comments for new functions, types, etc using the
162 same syntax as the existing ones. Doxygen can be used to turn this into
0590cedc
RK
163 reference documentation (see http://www.stack.nl/~dimitri/doxygen/) but
164 really the point is to have good inline code documentation, not the
165 Doxygen output as such.
91d9a42d 166
167 * More importantly, new configuration directives, protocol commands,
168 interface features etc should be documented in the relevant places.
169
170 * If you add new dependencies please update README, README.developers and
171 debian/control.
172
173 * New dependencies that are not in Debian stable are likely to be rejected.
174 (But if your new feature only makes sense on a given platform then
175 obviously its new dependencies don't need to be available elsewhere.)
176
177 * Please submit patches either using 'diff -u', or by publishing a bzr
178 branch somewhere I can get at it.
179
180 * Please make it clear that your changes can be distributed under DisOrder's
181 licence (which is "GPL v2 or later").
182
183Local Variables:
184mode:text
185fill-column:79
186End: