Files
libgphoto2/HACKING
Hans Ulrich Niedermann 605a20fe86 covertly introduce important policy changes :-)
git-svn-id: https://svn.code.sf.net/p/gphoto/code/trunk/libgphoto2@3132 67ed7778-7388-44ab-90cf-0a291f65f57c
2001-11-20 20:47:42 +00:00

112 lines
2.7 KiB
Plaintext

If you want to hack on gphoto2 (or a camera driver for gphoto2),
please follow some rules to make our work easier:
licensing
---------
We urge you to license your contributions under the LGPL so we can
distribute gphoto2 under the LGPL as well.
patches
-------
... are always welcome. Please have something like
cvs -z4 -q
diff -u3 -p
update -dP
checkout -P
in $HOME/.cvsrc and send us the output of "cvs diff some_file.c".
camlib
------
Camera libraries are often very sensitive to changes. Therefore,
before you commit any changes, double check with the author that your
changes won't break the driver.
If you want to write a driver for gphoto2, the easiest way to do so
would be to copy over the contents of camlibs/template and fill in
your code.
Use something like CHECK_RESULT (see for example
libgphoto2/filesys.c).
Let's say you write a driver called sillycam. Please set up a file
called library.c containing all gphoto2-specific code (like
camera_init) and another two files called sillycam.c and sillycam.h
containing the "magic", that is all gp_port_[read,write] functions and
the basic logic of the communication. This makes it easier for us to
adapt your code if anything should change in the gphoto2-API.
Use the port provided by camera->port.
Use the filesystem provided by camera->fs and set up the callbacks so
that libgphoto2 can cache listings and file-information.
libgphoto2
----------
If you add code, use the coding style of that file. This is, code like
int
my_func (int arg)
{
int var, res;
/*
* This is a multiline
* comment. Use TAB for
* indentation!
*/
res = gp_some_action (var);
/* This is a simple one-line comment */
if (res < 0) {
gp_log (GP_LOG_DEBUG, "Error happened!");
/* Note that we _don't_ indent the case statements */
switch (res) {
case GP_ERROR:
gp_log (GP_LOG_DEBUG, "Generic error");
break;
default:
gp_log (GP_LOG_DEBUG, "Not a generic error");
}
return (res);
}
return (GP_OK);
}
Please always check the return value of gp_-functions! We defined some
handy macros all over the place (like CHECK_RESULT) - by using those,
you'll avoid lots of if {} else {}.
Emacs users may define and use a gphoto-c-mode by putting the
following stuff into their .emacs file:
-----8<------------------------------------------------
;;* gphoto-c-mode
;;*=====================================================================
(defun gphoto-c-mode ()
"C mode with adjusted defaults for gphoto hacking"
(interactive)
(c-mode)
(c-set-style "linux")
(setq indent-tabs-mode t)
(font-lock-mode))
;;
(setq auto-mode-alist (cons '("/home/user/src/gphoto.*\\.[ch]$" . gphoto-c-mode)
auto-mode-alist))
-----8<------------------------------------------------
Local Variables:
mode:text
End: