diff --git a/doc/coding-style.txt b/doc/coding-style.txt new file mode 100644 index 000000000..2215ab0ad --- /dev/null +++ b/doc/coding-style.txt @@ -0,0 +1,54 @@ +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 + +Naming conventions: +=================== + +* 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 mint + +* binaries: + + taler-mint-xxx: mint 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 + +* logging + + tools use their full name in GNUNET_log_setup + (i.e. 'taler-mint-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. 'mintdb-postgres') + + libraries with associated service) use 'GNUNET_log_from' + with the name of the service, which should also be their + directory name (i.e. 'mint') + +* configuration + + 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 + +* private (library-internal) symbols (including structs and macros) + + must not start with TALER_ or any other prefix + +* testcases + + must be called "test_module-under-test_case-description.c" + +* performance tests + + must be called "perf_module-under-test_case-description.c"