Historically, the NMSetting types were in public headers. Theoretically,
that allowed users to subtype our classes. However in practice that was
impossible because they lacked required access to internal functions to
fully create an NMSetting class outside of libnm. And it also was not
useful, because you simply cannot extend libnm by subtyping a libnm
class. And supporting such a use case would be hard and limit what we can
do in libnm.
Having GObject structs in public headers also require that we don't
change it's layout. The ABI of those structs must not change, if anybody
out there was actually subclassing our GObjects.
In libnm 1.34 (commit
|
||
|---|---|---|
| .. | ||
| meson.build | ||
| nm-core-internal.h | ||
| nm-keyfile-internal.h | ||
| nm-keyfile-utils.h | ||
| nm-meta-setting-base-impl.h | ||
| nm-meta-setting-base.h | ||
| README.md | ||
libnm-core-intern
This contains header files only, which are also part of
the internal API of libnm-core-impl.
libnm-core-impl is a static library that (among others) implements
libnm-core-public (which is a part of the public API of libnm).
This library gets statically linked into libnm and NetworkManager.
Hence, those components can also access internal (but not private) API of
libnm-core-impl, and this API is in libnm-core-intern.
These headers can thus be included by anybody who statically links with
libnm-core-impl (including libnm-core-impl itself).
The directory should not be added to the include search path, instead
users should explicitly #include "libnm-core-intern/nm-core-internal.h")
There is no source code here and no static library to link against.