Inspired by commit 8b10799c (Fix iswblank() compilation error when
configured --without-wc-funcs., 2026-01-26) I decided to take a look at
the CI builds run on sr.ht.

My two main ideas were to use different build configurations and to
compile with -Werror to make any warning abort the CI. I dropped the
configure and build stage and added stages for each configuration which
contain the configure and the build step. The inlined patches below are
merely meant to get some feedback or start a discussion.

I tried having a better way to add -Werror to CFLAGS, but failed.

Some thoughts:
- I don't think having a built run on Debian Stable is really
  meaningful. Debian stable is most of the time quite old and only
  selected patches will be backported. I would suggest to pick something
  more bleeding edge like Arch.
- I like having Alpine Linux because of musl.
- I've tested a build for NetBSD which uses signed char which can give
  warnings with some functions, but mutt seems to be OK. I will keep
  NetBSD enabled in my sr.ht repo.
- I also added OpenBSD with their configure options used in ports.
- sr.ht only allows four build manifests to run for each push. If more
  than four are present a random pick will run. I don't like this idea,
  because it makes the CI somewhat non-deterministic.
- I don't think -pedantic is really helpful, but creates some PITA when
  used with -Werror. I had to add some workarounds to get a non-failing
  build.

If someone has good ideas what other build configurations to add, I will
test them.

Below are the patches I ended up with. I omitted the changed manifests
and only inserted the newly added OpenBSD one. The 'original' stage is
what was used before. If there is some consensus here I will send proper
patches.

Ideas?

Kevin, feel free to reject, a simple 'no' is enough. :-)

commit b317691396a4f5a2505ccc095e17135f2bbd9081
Author: Rene Kita <[email protected]>
Date:   2026-02-04T09:12:18+01:00

    Remove unused variable

diff --git a/mbyte.c b/mbyte.c
index f7c29662..762e7f25 100644
--- a/mbyte.c
+++ b/mbyte.c
@@ -107,7 +107,7 @@ static size_t wcrtomb_iconv (char *s, wchar_t wc, iconv_t 
cd)
   char buf[MB_LEN_MAX+1];
   ICONV_CONST char *ib;
   char *ob;
-  size_t ibl, obl, r;
+  size_t ibl, obl;
 
   if (s)
   {
@@ -117,7 +117,7 @@ static size_t wcrtomb_iconv (char *s, wchar_t wc, iconv_t 
cd)
     ib = buf;
     ob = s;
     obl = MB_LEN_MAX;
-    r = iconv (cd, &ib, &ibl, &ob, &obl);
+    iconv (cd, &ib, &ibl, &ob, &obl);
   }
   else
   {
@@ -125,7 +125,7 @@ static size_t wcrtomb_iconv (char *s, wchar_t wc, iconv_t 
cd)
     ibl = 1;
     ob = buf;
     obl = sizeof (buf);
-    r = iconv (cd, &ib, &ibl, &ob, &obl);
+    iconv (cd, &ib, &ibl, &ob, &obl);
   }
   return ob - s;
 }

commit 31f3299b356e4bdbfad2d9f2eb447c908c2869d9
Author: Rene Kita <[email protected]>
Date:   2026-02-04T07:07:34+01:00

    Silence warning

diff --git a/mutt_ssl.c b/mutt_ssl.c
index ee08f943..762377e1 100644
--- a/mutt_ssl.c
+++ b/mutt_ssl.c
@@ -708,6 +708,7 @@ static void ssl_err (sslsockdata *data, int err)
       errmsg = "unknown error";
   }
 
+  (void)errmsg;  /* Silence warning when configured with --disable-debug */
   muttdbg(1, "SSL error: %s", errmsg);
 }
 

commit 9b4284ade52b786e665c2daf8a784588a580a127
Author: Rene Kita <[email protected]>
Date:   2026-02-04T10:02:29+01:00

    Fix build error for --without-wc-funcs on FreeBSD
    
    mbyte.c:417:5: error: redefinition of '__wcwidth'
    417 | int wcwidth (wchar_t wc)

diff --git a/mbyte.c b/mbyte.c
index 762e7f25..7a9de4c9 100644
--- a/mbyte.c
+++ b/mbyte.c
@@ -414,6 +414,7 @@ int wcwidth_ja (wchar_t ucs)
 
 int wcwidth_ucs(wchar_t ucs);
 
+#ifndef HAVE_WCHAR_H
 int wcwidth (wchar_t wc)
 {
   if (!Charset_is_utf8)
@@ -438,6 +439,7 @@ int wcwidth (wchar_t wc)
   }
   return wcwidth_ucs (wc);
 }
+#endif /* HAVE_WCHAR_H */
 
 size_t utf8rtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *_ps)
 {

commit 3a9124ac97f3f74d66c25be77f86d662854b6f76
Author: Rene Kita <[email protected]>
Date:   2026-02-06T11:39:11+01:00

    Add sr.ht build manifest for OpenBSD

diff --git a/.builds/openbsd.yml b/.builds/openbsd.yml
new file mode 100644
index 00000000..e82180b5
--- /dev/null
+++ b/.builds/openbsd.yml
@@ -0,0 +1,85 @@
+image: openbsd/latest
+packages:
+- autoconf-2.72p0
+- automake-1.18
+- gettext-runtime
+- gettext-tools
+- gpgme
+- indexinfo
+- kyotocabinet
+- libassuan
+- libgpg-error
+- libiconv
+- libidn2
+- libunistring
+- qdbm
+sources:
+- https://git.sr.ht/~mutt/mutt
+environment:
+  AUTOCONF_VERSION: 2.72
+  AUTOMAKE_VERSION: 1.18
+  LDFLAGS: -L/usr/local/lib
+tasks:
+- default: |
+    cd mutt
+    autoreconf -if
+    ./configure
+    # Work around warning from -pedantic
+    make 'CFLAGS=-Wall -pedantic -Werror -Wno-c23-extensions' md5.o
+    make -j4 CFLAGS='-Wall -pedantic -Werror'
+- without-wc-funcs: |
+    cd mutt
+    autoreconf -if
+    ./configure \
+        --without-wc-funcs
+    # Work around warning from -pedantic
+    make 'CFLAGS=-Wall -pedantic -Werror -Wno-c23-extensions' md5.o
+    make -j4 CFLAGS='-Wall -pedantic -Werror'
+- original: |
+    cd mutt
+    autoreconf -if
+    ./configure \
+        --enable-gpgme \
+        --enable-pop \
+        --enable-imap \
+        --enable-smtp \
+        --enable-hcache \
+        --enable-sidebar \
+        --with-kyotocabinet=/usr/local \
+        --with-mailpath=/var/spool/mail \
+        --with-curses \
+        --with-ssl \
+        --without-sasl \
+        --with-libiconv-prefix=/usr/local \
+        --with-libintl-prefix=/usr/local
+      # Work around warning in /usr/local/include/kclangc.h
+      make hcversion.h
+      make 'CFLAGS=-Wall -pedantic -Werror -Wno-strict-prototypes' hcache.o
+      # Work around warning from -pedantic
+      make 'CFLAGS=-Wall -pedantic -Werror -Wno-c23-extensions' md5.o
+      make -j4 CFLAGS='-Wall -pedantic -Werror'
+- openbsd: |
+    cd mutt
+    autoreconf -if
+    ./configure \
+      --enable-compressed \
+      --enable-debug \
+      --enable-external_dotlock \
+      --disable-fcntl \
+      --enable-flock \
+      --with-idn2 \
+      --enable-imap \
+      --enable-pop \
+      --enable-sidebar \
+      --enable-smtp \
+      --mandir=${PREFIX}/man \
+      --with-docdir="${PREFIX}/share/doc/mutt" \
+      --with-ssl \
+      --enable-hcache \
+      --with-qdbm
+      # Work around warning in /usr/local/include/kclangc.h
+      make hcversion.h
+      make 'CFLAGS=-Wall -pedantic -Werror -Wno-strict-prototypes' hcache.o
+      # Work around warning from -pedantic
+      make 'CFLAGS=-Wall -pedantic -Werror -Wno-c23-extensions' md5.o
+      make -j4 CFLAGS='-Wall -pedantic -Werror'

commit 02cdc4d6c1e3786bd28a5a0245fe9772d4de31f7
Author: Rene Kita <[email protected]>
Date:   2026-02-03T18:11:43+01:00

    Drop -Wno-long-long from CFLAGS
    
    We already require C99.

diff --git a/configure.ac b/configure.ac
index a58b152b..bc7d7137 100644
--- a/configure.ac
+++ b/configure.ac
@@ -956,7 +956,7 @@ AC_ARG_ENABLE(warnings, 
AS_HELP_STRING([--disable-warnings],[Turn off compiler w
 fi])
 
 if test x$GCC = xyes && test $mutt_cv_warnings = yes; then
-  CFLAGS="-Wall -pedantic -Wno-long-long $CFLAGS"
+  CFLAGS="-Wall -pedantic $CFLAGS"
 fi
 
 AC_ARG_ENABLE(nfs-fix, AS_HELP_STRING([--enable-nfs-fix],[Work around an NFS 
with broken attributes caching]),

commit 8385ea5af95a2bf165147f8c459c3a8d7d90e0a7
Author: Rene Kita <[email protected]>
Date:   2026-02-03T18:15:22+01:00

    Do not limit use of warnings to GCC
    
    These are not compiler specific warnings, use them everywhere.

diff --git a/configure.ac b/configure.ac
index bc7d7137..33d483d2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -955,7 +955,7 @@ AC_ARG_ENABLE(warnings, 
AS_HELP_STRING([--disable-warnings],[Turn off compiler w
         mutt_cv_warnings=no
 fi])
 
-if test x$GCC = xyes && test $mutt_cv_warnings = yes; then
+if test $mutt_cv_warnings = yes; then
   CFLAGS="-Wall -pedantic $CFLAGS"
 fi
 

Reply via email to