Added Telugu translations (RHBZ#559237).
[libguestfs.git] / HACKING
1 PLEASE LOOK AT THE TOP OF EACH FILE BEFORE EDITING TO SEE WHETHER IT
2 IS AUTOMATICALLY GENERATED OR NOT.
3
4 Adding a new action
5 ----------------------------------------------------------------------
6
7 All action functions are generated automatically, so there are only
8 two files you need to edit:
9
10 (1) src/generator.ml: Add your new action, parameters, description,
11 etc. to the big list called 'functions' at the top of this file.
12
13 (2) Edit/create a C file in daemon/ subdirectory which implements your
14 'do_action' function.  Take a look at one of the numerous examples
15 there.
16
17 Formatting
18 ----------------------------------------------------------------------
19
20 Try to use GNU / Emacs default formatting, following the convention
21 used elsewhere in the source.
22
23 Please make sure that the code compiles without warnings.
24
25 Please test any changes.
26
27 Useful targets:
28   make syntax-check    Checks the syntax of the C code.
29   make check           Runs the test suite.
30
31 Enable warnings, and fix any you find:
32   ./configure --enable-gcc-warnings
33
34 Code indentation
35 ----------------------------------------------------------------------
36 Our C source code generally adheres to some basic code-formatting
37 conventions.  The existing code base is not totally consistent on this
38 front, but we do prefer that contributed code be formatted similarly.
39 In short, use spaces-not-TABs for indentation, use 2 spaces for each
40 indentation level, and other than that, follow the K&R style.
41
42 If you use Emacs, add the following to one of one of your start-up files
43 (e.g., ~/.emacs), to help ensure that you get indentation right:
44
45   ;;; In libguestfs, indent with spaces everywhere (not TABs).
46   ;;; Exceptions: Makefile and ChangeLog modes.
47   (add-hook 'find-file-hook
48       '(lambda () (if (and buffer-file-name
49                            (string-match "/libguestfs\\>" (buffer-file-name))
50                            (not (string-equal mode-name "Change Log"))
51                            (not (string-equal mode-name "Makefile")))
52                       (setq indent-tabs-mode nil))))
53
54   ;;; When editing C sources in libguestfs, use this style.
55   (defun libguestfs-c-mode ()
56     "C mode with adjusted defaults for use with libguestfs."
57     (interactive)
58     (c-set-style "K&R")
59     (setq c-indent-level 2)
60     (setq c-basic-offset 2))
61   (add-hook 'c-mode-hook
62             '(lambda () (if (string-match "/libguestfs\\>" (buffer-file-name))
63                             (libguestfs-c-mode))))
64
65 Directories
66 ----------------------------------------------------------------------
67
68 appliance/
69         The qemu appliance, build scripts and so on.
70
71 capitests/
72         Automated tests of the C API.
73
74 contrib/
75         Outside contributions, experimental parts.
76
77 csharp/
78         Experimental C# bindings.
79
80 daemon/
81         The daemon that runs inside the guest and carries out actions.
82
83 examples/
84         The examples.
85
86 fish/
87         Guestfish (the command-line program / shell)
88
89 fuse/
90         FUSE (userspace filesystem) built on top of libguestfs.
91
92 haskell/
93         Haskell bindings.
94
95 hivex/
96         Hive extraction library, for reading Windows Registry files.
97         See hivex/README for more details.
98
99 images/
100         Some guest images to test against.  These are gzipped to save
101         space.  You have to unzip them before use.
102
103         Also contains some files used by the test suite.
104
105 inspector/
106         Virtual machine image inspector (virt-inspector).
107
108 java/
109         Java bindings.
110
111 m4/
112         M4 macros used by autoconf.
113
114 ocaml/
115         OCaml bindings.
116
117 po/
118         Translations.
119
120 perl/
121         Perl bindings.
122
123 python/
124         Python bindings.
125
126 regressions/
127         Regression tests.
128
129 ruby/
130         Ruby bindings.
131
132 tools/
133         Command line tools like virt-cat, virt-df, virt-edit and more.
134         In versions <= 1.0.73 these were all in separate directories
135         like cat/, df/, edit/, but since then we moved them all into
136         one directory to simplify builds.
137
138 src/
139         Source code to the C library.
140         Also contains the crucial generator program.
141
142 test-tool/
143         Interactive qemu/kernel test tool.
144
145 Debugging
146 ----------------------------------------------------------------------
147
148 It's a good idea to use guestfish to try out new commands.
149
150 Debugging the daemon is a problem because it runs inside a minimal
151 qemu environment.  However you can print messages from the daemon, and
152 they will show up if you use 'guestfish -v'.
153
154 Patches
155 ----------------------------------------------------------------------
156
157 Submit patches to the mailing list:
158 http://www.redhat.com/mailman/listinfo/libguestfs
159 and CC to rjones@redhat.com
160
161 I18N
162 ----------------------------------------------------------------------
163
164 We support i18n (gettext anyhow) in the library.
165
166 However many messages come from the daemon, and we don't translate
167 those at the moment.  One reason is that the appliance generally has
168 all locale files removed from it, because they take up a lot of space.
169 So we'd have to readd some of those, as well as copying our PO files
170 into the appliance.
171
172 Debugging messages are never translated, since they are intended for
173 the programmers.
174
175 Extended printf
176 ----------------------------------------------------------------------
177
178 In the daemon code we have created custom printf formatters %Q and %R,
179 which are used to do shell quoting.
180
181 %Q => Simple shell quoted string.  Any spaces or other shell characters
182       are escaped for you.
183
184 %R => Same as %Q except the string is treated as a path which is prefixed
185       by the sysroot.
186
187 eg.
188
189 asprintf (&cmd, "cat %R", path);
190 ==> "cat /sysroot/some\ path\ with\ spaces"
191
192 Note: Do NOT use these when you are passing parameters to the
193 command{,r,v,rv}() functions.  These parameters do NOT need to be
194 quoted because they are not passed via the shell (instead, straight to
195 exec).  You probably want to use the sysroot_path() function however.