|author||Florian Dold <email@example.com>||2019-09-18 19:18:54 +0200|
|committer||Florian Dold <firstname.lastname@example.org>||2019-09-18 19:18:54 +0200|
1 files changed, 83 insertions, 3 deletions
diff --git a/onboarding.rst b/onboarding.rst
index cb3044c..ea0ae83 100644
@@ -1,6 +1,7 @@
Developer Onboarding Manual
+.. contents:: Table of Contents
@@ -385,11 +386,89 @@ Code coverage is done with the Gcov / Lcov
\*nightly\* (once a day) by a Buildbot worker. The coverage results are
then published at ``https://lcov.taler.net/``.
+These are the general coding style rules for Taler.
+* Baseline rules are to follow GNU guidelines, modified or extended
+ by the GNUnet style: https://gnunet.org/style
+* include files (very similar to GNUnet):
+ * if installed, must start with "``taler_``" (exception: platform.h),
+ and MUST live in src/include/
+ * if NOT installed, must NOT start with "``taler_``" and
+ MUST NOT live in src/include/ and
+ SHOULD NOT be included from outside of their own directory
+ * end in "_lib" for "simple" libraries
+ * end in "_plugin" for plugins
+ * end in "_service" for libraries accessing a service, i.e. the exchange
+ * taler-exchange-xxx: exchange programs
+ * taler-merchant-xxx: merchant programs (demos)
+ * taler-wallet-xxx: wallet programs
+ * plugins should be libtaler_plugin_xxx_yyy.so: plugin yyy for API xxx
+ * libtalerxxx: library for API xxx
+ * tools use their full name in GNUNET_log_setup
+ (i.e. 'taler-exchange-keyup') and log using plain 'GNUNET_log'.
+ * pure libraries (without associated service) use 'GNUNET_log_from'
+ with the component set to their library name (without lib or '.so'),
+ which should also be their directory name (i.e. 'util')
+ * plugin libraries (without associated service) use 'GNUNET_log_from'
+ with the component set to their type and plugin name (without lib or '.so'),
+ which should also be their directory name (i.e. 'exchangedb-postgres')
+ * libraries with associated service) use 'GNUNET_log_from'
+ with the name of the service, which should also be their
+ directory name (i.e. 'exchange')
+ * same rules as for GNUnet
+* exported symbols
+ * must start with TALER_[SUBSYSTEMNAME]_ where SUBSYSTEMNAME
+ MUST match the subdirectory of src/ in which the symbol is defined
+ * from libtalerutil start just with ``TALER_``, without subsystemname
+ * if scope is ONE binary and symbols are not in a shared library,
+ use binary-specific prefix (such as TMH = taler-exchange-httpd) for
+ globals, possibly followed by the subsystem (TMH_DB_xxx).
+ * structs that are 'packed' and do not contain pointers and are
+ thus suitable for hashing or similar operations are distinguished
+ by adding a "P" at the end of the name. (NEW) Note that this
+ convention does not hold for the GNUnet-structs (yet).
+ * structs that are used with a purpose for signatures, additionally
+ get an "S" at the end of the name.
+* private (library-internal) symbols (including structs and macros)
+ * must not start with ``TALER_`` or any other prefix
+ * must be called "test_module-under-test_case-description.c"
+* performance tests
+ * must be called "perf_module-under-test_case-description.c"
This chapter is a VERY ABSTRACT description of how testing is
implemented in Taler, and in NO WAY wants to substitute the reading of
@@ -458,3 +537,4 @@ to tamper with the data exchanged by A and B.
Please refer to the Twister codebase (under the ``test`` directory) in
order to see how to configure it.