2017-11-30 19:30:19 +01:00
|
|
|
# IRCd Library API
|
2017-09-12 18:37:44 +02:00
|
|
|
|
2018-01-04 22:34:32 +01:00
|
|
|
#### Project Namespaces
|
2017-11-25 23:18:01 +01:00
|
|
|
|
2018-01-23 15:12:35 +01:00
|
|
|
* `IRCD_` Preprocessor #define, macro, and environmental variables.
|
|
|
|
* `RB_` Build system related preprocessor #defines and macros (legacy).
|
2018-01-04 22:34:32 +01:00
|
|
|
* `ircd_` C namespace and demangled bindings.
|
|
|
|
* `ircd::` C++ namespace scope.
|
2018-01-19 13:07:12 +01:00
|
|
|
* `X-IRCd-` HTTP header key namespace.
|
|
|
|
* `ircd.` Matrix event type namespace.
|
2018-01-04 22:34:32 +01:00
|
|
|
|
|
|
|
#### What To Include
|
|
|
|
|
|
|
|
##### libircd headers are organized into several aggregates groups
|
2017-11-25 23:18:01 +01:00
|
|
|
|
|
|
|
As a C++ project there are a lot of header files. Header files depend on other
|
|
|
|
header files. We don't expect the developer of a compilation unit to figure out
|
|
|
|
an exact list of header files necessary to include for that unit. Instead we
|
|
|
|
have aggregated groups of header files which are then precompiled. These
|
|
|
|
aggregations are mostly oriented around a specific project dependency.
|
|
|
|
|
2018-01-04 22:34:32 +01:00
|
|
|
> Note: The term 'stack' may be found in place of the preferred term 'group'
|
|
|
|
in other documentation.
|
|
|
|
|
|
|
|
- Standard Include group `<ircd/ircd.h>` is the main header group. This group
|
2017-11-25 23:18:01 +01:00
|
|
|
involves the standard library and most of libircd. This is what an embedder
|
|
|
|
will be working with. These headers will expose our own interfaces wrapping
|
2018-01-04 22:34:32 +01:00
|
|
|
3rd party dependencies which are not included there.
|
|
|
|
|
|
|
|
There are actually two files in play here: `<ircd/stdinc.h>` and `<ircd/ircd.h>`.
|
|
|
|
We have to offer two different pre-compilations: one with `-fPIC`
|
|
|
|
and one without. Therefor the contents are in `<ircd/stdinc.h>` and the
|
|
|
|
preprocessor determination for which is in `<ircd/ircd.h>`.
|
2017-11-25 23:18:01 +01:00
|
|
|
|
2018-01-04 22:34:32 +01:00
|
|
|
- Boost ASIO include group `<ircd/asio.h>` is a header group exposing the
|
2017-11-25 23:18:01 +01:00
|
|
|
boost::asio library. We only involve this header in compilation units working
|
|
|
|
directly with asio for networking et al. Involving this header file slows down
|
2018-01-04 22:34:32 +01:00
|
|
|
compilation compared with the standard group.
|
2017-11-25 23:18:01 +01:00
|
|
|
|
2018-01-04 22:34:32 +01:00
|
|
|
- Boost Spirit include group `<ircd/spirit.h>` is a header group exposing the
|
2017-11-25 23:18:01 +01:00
|
|
|
spirit parser framework to compilation units which involve formal grammars.
|
|
|
|
Involving this header is a *monumental* slowdown when compiling.
|
|
|
|
|
2018-01-04 22:34:32 +01:00
|
|
|
- JavaScript include group `<ircd/js/js.h>` is a header group exposing symbols
|
2017-11-25 23:18:01 +01:00
|
|
|
from the SpiderMonkey JS engine. Alternatively, <ircd/js.h> is part of the
|
2018-01-04 22:34:32 +01:00
|
|
|
standard include group which includes any wrapping to hide SpiderMonkey.
|
2017-09-12 18:37:44 +02:00
|
|
|
|
2018-01-04 22:34:32 +01:00
|
|
|
- MAPI include group `<ircd/mapi.h>` is the standard header group for modules.
|
|
|
|
This group is an extension to the standard include group but has specific
|
2017-11-25 23:18:01 +01:00
|
|
|
tools for pluggable modules which are not part of the libircd core.
|