<feed xmlns='http://www.w3.org/2005/Atom'>
<title>~irc/github.com/solanum-ircd/solanum.git/include, branch amdj/fix-buildsys-headers</title>
<subtitle>https://github.com/solanum-ircd/solanum</subtitle>
<id>https://cgit.space/~irc/github.com/solanum-ircd/solanum.git/atom/include?h=amdj%2Ffix-buildsys-headers</id>
<link rel='self' href='https://cgit.space/~irc/github.com/solanum-ircd/solanum.git/atom/include?h=amdj%2Ffix-buildsys-headers'/>
<link rel='alternate' type='text/html' href='https://cgit.space/~irc/github.com/solanum-ircd/solanum.git/'/>
<updated>2026-05-14T23:51:12Z</updated>
<entry>
<title>Clean up include/stdinc.h and librb/include/rb_lib.h</title>
<updated>2026-05-14T23:51:12Z</updated>
<author>
<name>Aaron Jones</name>
</author>
<published>2026-05-04T08:46:15Z</published>
<link rel='alternate' type='text/html' href='https://cgit.space/~irc/github.com/solanum-ircd/solanum.git/commit/?id=2f62754caef32904f589a54edd9856c592b6164e'/>
<id>urn:sha1:2f62754caef32904f589a54edd9856c592b6164e</id>
<content type='text'>
- Unconditionally require stdbool.h in IRCd

  We are a C99 project anyway (configure.ac and meson.build both
  require a C99 compiler), so this header will always be present

  This removes the awful hack defining bool, true, and false in
  its absense, which was creating build errors when using meson,
  because meson.build did not set the HAVE_STDBOOL_H macro

- Modernise definition of alloca(3) according to GNU guidance

  This was in both librb and IRCd, while it only needs to be in
  the former

- Fix missing endianness check in librb/meson.build

  IRCd and librb both use the WORDS_BIGENDIAN macro, which was
  only being set by their configure.ac (with the AC_C_BIGENDIAN
  M4 macro)

  Since IRCd's stdinc.h includes librb's rb_lib.h, which then
  includes librb's librb-config.h, which would have the macro
  defined there, we only need to check for it in librb, so we
  can remove the endianness check from IRCd's configure.ac and
  don't need to add it to IRCd's meson.build

- Use __has_attribute to detect whether compiler attributes are
  available

  This is supported by gcc (5+), clang (2.9+), and ICC (17+)

- Add a __noreturn macro for __attribute__((__noreturn__)) and
  adjust the codebase to use that

- Remove inclusion of headers that are only used by librb

- Remove inclusion of headers that are included in rb_lib.h
  because stdinc.h includes rb_lib.h anyway

- Remove the checks for headers and functions from the IRCd
  configure.ac and meson.build that are only used by librb

- Alphabetise checks for headers and functions (by the name of
  the macro they define) in the meson.build files

- Use check_header() instead of has_header() in meson to see if
  it is actually possible to compile code using the header

- Remove dead code using srand48(3) which has never been
  compiled because neither build system has ever set the
  HAVE_SRAND48 macro and the surrounding code makes no use of
  this libc RNG

- Remove the TLS defines from IRCd's meson.build because librb's
  meson.build already defines them and IRCd pulls those in
</content>
</entry>
<entry>
<title>Automatically rehash when modules change conf</title>
<updated>2026-04-29T16:12:34Z</updated>
<author>
<name>Ryan Schmidt</name>
</author>
<published>2026-04-11T04:05:08Z</published>
<link rel='alternate' type='text/html' href='https://cgit.space/~irc/github.com/solanum-ircd/solanum.git/commit/?id=eacc3388cd75060a1ece9209c24c85bc20b65ff7'/>
<id>urn:sha1:eacc3388cd75060a1ece9209c24c85bc20b65ff7</id>
<content type='text'>
When loading a module that modifies config (add/remove conf items or top
conf sections), we now queue a rehash operation so that new config can
be immediately applied. A new rb_defer_once() function was added to
deduplicate these rehash requests so that at most one rehash will occur
regardless of how many modules change conf.
</content>
</entry>
<entry>
<title>Unify the preprocessor macro for OpenSSL support</title>
<updated>2026-03-22T15:19:53Z</updated>
<author>
<name>Aaron Jones</name>
</author>
<published>2026-03-22T03:00:11Z</published>
<link rel='alternate' type='text/html' href='https://cgit.space/~irc/github.com/solanum-ircd/solanum.git/commit/?id=6ac4d0e24e4b872b9f30adc743cf743e964d75d1'/>
<id>urn:sha1:6ac4d0e24e4b872b9f30adc743cf743e964d75d1</id>
<content type='text'>
Commit 9a1ee1b64ed660164197 introduced support for building IRCd
with Meson.  It defines the "HAVE_OPENSSL" preprocessor macro
for both IRCd and librb.  While librb does use that macro, IRCd
unfortunately uses only the "HAVE_LIBCRYPTO" macro instead, set
implicitly by AC_CHECK_LIB from autotools.

Make the autotools build system define HAVE_OPENSSL (to unify
IRCd with librb) and change IRCd to use that.
</content>
</entry>
<entry>
<title>Tidy up module loading code</title>
<updated>2026-03-22T00:10:35Z</updated>
<author>
<name>Aaron Jones</name>
</author>
<published>2026-03-11T03:57:11Z</published>
<link rel='alternate' type='text/html' href='https://cgit.space/~irc/github.com/solanum-ircd/solanum.git/commit/?id=232c2c13c64f3b1373eef16645b90bdb3233210d'/>
<id>urn:sha1:232c2c13c64f3b1373eef16645b90bdb3233210d</id>
<content type='text'>
The existing code had several defects:

- Core module file names were hardcoded, while autoloaded non-
  core module filenames were not.  Code that loaded core modules
  had a different but in some places duplicated structure to the
  code that loaded autoloaded modules.

- Module loading for autoloaded modules happened in dentry
  order, making it unpredictable from one server to the next, or
  even across instances of `make install` on the same server.

- Module loading for autoloaded modules did not verify that the
  dentry was a file before trying to load it.

- An IRCd start (or a conftest) only printed lines about loading
  modules mentioned in the configuration file.

- The configuration file was parsed before loading core and
  autoloaded modules, meaning any modules specified in the
  configuration file would be loaded first.

- Once a module was loaded, it was added to the head of the
  module list, making MODLIST show them in reverse loaded order
  (newest (re)loaded modules at the top of the list).

These are addressed as follows:

- We now scan the core and autoload module directories and use
  this to determine which modules to load.

- We now sort the dentries according to their filename before
  iterating them to load them, making module load order finally
  deterministic.

- We now test if a dentry is actually a file before trying to
  load it.

- We now print a message to the console (if running in
  foreground or conftest mode) when loading any module,
  including core and autoloaded modules.

- The message printed to the console now has the IRCd module
  directory prefix stripped from it if it matches.

- The configuration file is now parsed after loading core and
  autoload modules.

- The modules are added to the module list in the order that
  they are loaded. This now makes MODLIST show the order that
  modules were (re)loaded in.

Modifications to two modules are part of this effort:

- The autoload module `m_alias` relied upon the alias dict not
  being NULL when loaded, but this is only the case after the
  configuration file has been parsed.

  The module already had a "rehash" hook to destroy all existing
  aliases and create new ones, so we can just make the module do
  nothing on load (remove its modinit function) and change it to
  use the "conf_read_end" hook instead of the "rehash" hook, and
  it will still create aliases after the configuration file is
  subsequently parsed.

  With this modification, there are now no in-tree consumers of
  the "rehash" hook.

- The autoload module `m_services` iterated `service_list` upon
  loading it, which will now be empty (a no-op) since the module
  is loaded before configuration file is parsed.

  This module too handles the configuration file being parsed
  with a "conf_read_end" hook and takes the appropriate action,
  so we can just remove this code from its modinit function.

All other modules' modinit functions have been audited for
behaviour like this; there was nothing of note.
</content>
</entry>
<entry>
<title>Add no-implicit-names client capability</title>
<updated>2026-03-19T10:27:23Z</updated>
<author>
<name>Ryan Schmidt</name>
</author>
<published>2026-03-18T23:42:09Z</published>
<link rel='alternate' type='text/html' href='https://cgit.space/~irc/github.com/solanum-ircd/solanum.git/commit/?id=f06fda5bbc1ce6a5fc858fc85f290e51fbd74e70'/>
<id>urn:sha1:f06fda5bbc1ce6a5fc858fc85f290e51fbd74e70</id>
<content type='text'>
This has been recently ratified and suppresses NAMES output during
channel joins when enabled, providing for a decent chunk of bandwidth
savings.
</content>
</entry>
<entry>
<title>build: add Meson buildsystem</title>
<updated>2026-03-17T22:39:01Z</updated>
<author>
<name>Valentin Lorentz</name>
</author>
<published>2026-03-15T00:46:40Z</published>
<link rel='alternate' type='text/html' href='https://cgit.space/~irc/github.com/solanum-ircd/solanum.git/commit/?id=9a1ee1b64ed660164197e6362bcbedba2a9175ca'/>
<id>urn:sha1:9a1ee1b64ed660164197e6362bcbedba2a9175ca</id>
<content type='text'>
</content>
</entry>
<entry>
<title>build: split serno generation out into a script</title>
<updated>2026-03-17T22:39:01Z</updated>
<author>
<name>Valentin Lorentz</name>
</author>
<published>2026-03-15T00:31:44Z</published>
<link rel='alternate' type='text/html' href='https://cgit.space/~irc/github.com/solanum-ircd/solanum.git/commit/?id=6ba61b33f7ec557c02c1a631b83f9fc334c3fbee'/>
<id>urn:sha1:6ba61b33f7ec557c02c1a631b83f9fc334c3fbee</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Remove channel::kick_on_split_riding</title>
<updated>2026-03-17T21:43:28Z</updated>
<author>
<name>Ryan Schmidt</name>
</author>
<published>2026-01-22T16:52:57Z</published>
<link rel='alternate' type='text/html' href='https://cgit.space/~irc/github.com/solanum-ircd/solanum.git/commit/?id=57e26e3086880efdae80f234e3c41f731a6a5d93'/>
<id>urn:sha1:57e26e3086880efdae80f234e3c41f731a6a5d93</id>
<content type='text'>
This feature had numerous pitfalls (such as not checking +beI) and
services does it better than we can. Remove it and alert opers that the
feature no longer exists if they had it configured.
</content>
</entry>
<entry>
<title>Unconditionally include &lt;stdint.h&gt; in stdinc.h</title>
<updated>2026-03-17T20:22:38Z</updated>
<author>
<name>Ryan Schmidt</name>
</author>
<published>2026-03-15T23:58:01Z</published>
<link rel='alternate' type='text/html' href='https://cgit.space/~irc/github.com/solanum-ircd/solanum.git/commit/?id=71abb2e257dbc3bb23cc514cfe822746104f306f'/>
<id>urn:sha1:71abb2e257dbc3bb23cc514cfe822746104f306f</id>
<content type='text'>
Previously we relied on an inclusion from librb-config.h which was
generated via the configure script. This seemed unwise, so add it to our
list of standard includes. This replaces a superfluous include of
stdio.h since we included it twice for some reason (check two lines down
from the changed line for the other location)
</content>
</entry>
<entry>
<title>Adjust unsigned int -&gt; uint64_t for all caps</title>
<updated>2026-03-17T20:22:38Z</updated>
<author>
<name>Ryan Schmidt</name>
</author>
<published>2026-03-15T23:28:55Z</published>
<link rel='alternate' type='text/html' href='https://cgit.space/~irc/github.com/solanum-ircd/solanum.git/commit/?id=3253a979e4d9230fbad9a1fb9e6fc8a81aebc4ce'/>
<id>urn:sha1:3253a979e4d9230fbad9a1fb9e6fc8a81aebc4ce</id>
<content type='text'>
The previous commit addressed the issue with (most) function signatures,
but forgot to update the caps themselves to be 64-bit. This fixes that,
and finishes the remaining overlooked function signatures.
</content>
</entry>
</feed>
