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 exchange * binaries: + 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 * logging + 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') * 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 + 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: + 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 * testcases + must be called "test_module-under-test_case-description.c" * performance tests + must be called "perf_module-under-test_case-description.c"