[PATCH 1/2] Use script to test build configurations
Rene Kita <[email protected]> Mon, 1 Jun 2026 09:17:56 +0200
| Newsgroups | gmane.mail.mutt.devel |
|---|---|
| Message-ID | <[email protected]> |
This centralizes the configure command line arguments used for CI builds
in a single script. It makes it easier to test locally and keeps the
manifests dry.
Differences among the manifests are mostly kept as they were, this
can/should be cleaned up in future commit.
---
.builds/alpine.yml | 31 +++---------
.builds/archlinux.yml | 31 +++---------
.builds/build | 111 ++++++++++++++++++++++++++++++++++++++++++
.builds/debian.yml | 30 +++---------
.builds/freebsd.yml | 30 +++---------
.builds/openbsd.yml | 48 +++---------------
doc/devel-notes.txt | 2 +
7 files changed, 143 insertions(+), 140 deletions(-)
create mode 100755 .builds/build
diff --git a/.builds/alpine.yml b/.builds/alpine.yml
index bdd8934c..243253d9 100644
--- a/.builds/alpine.yml
+++ b/.builds/alpine.yml
@@ -15,6 +15,8 @@ packages:
- tcc-libs-static
sources:
- https://git.sr.ht/~mutt/mutt
+environment:
+ NPROC: '8'
tasks:
- check: |
cd mutt
@@ -24,37 +26,16 @@ tasks:
- default: |
cd mutt
- autoreconf -if
- ./configure
- make -j4 CFLAGS='-Wall -Werror'
+ ./.builds/build default
- without-wc-funcs: |
cd mutt
- autoreconf -if
- ./configure \
- --without-wc-funcs
- make -j4 CFLAGS='-Wall -Werror'
+ ./.builds/build without_wc_funcs
- original: |
cd mutt
- autoreconf -if
- ./configure \
- --enable-gpgme \
- --enable-pop \
- --enable-imap \
- --enable-smtp \
- --enable-hcache \
- --enable-sidebar \
- --without-included-gettext \
- --with-mailpath=/var/spool/mail \
- --with-curses \
- --with-ssl \
- --with-sasl \
- --with-idn2
- make -j4 CFLAGS='-Wall -Werror'
+ ./.builds/build original
- tcc: |
cd mutt
- autoreconf -if
- CC=tcc ./configure
- make -j4 CFLAGS='-Wall -Werror'
+ ./.builds/build tcc
diff --git a/.builds/archlinux.yml b/.builds/archlinux.yml
index dd34b98b..95419a66 100644
--- a/.builds/archlinux.yml
+++ b/.builds/archlinux.yml
@@ -15,6 +15,8 @@ packages:
- tcc-libs-static
sources:
- https://git.sr.ht/~mutt/mutt
+environment:
+ NPROC: '8'
tasks:
- check: |
cd mutt
@@ -24,37 +26,16 @@ tasks:
- default: |
cd mutt
- autoreconf -if
- ./configure
- make -j4 CFLAGS='-Wall -Werror'
+ ./.builds/build default
- without-wc-funcs: |
cd mutt
- autoreconf -if
- ./configure \
- --without-wc-funcs
- make -j4 CFLAGS='-Wall -Werror'
+ ./.builds/build without_wc_funcs
- original: |
cd mutt
- autoreconf -if
- ./configure \
- --enable-gpgme \
- --enable-pop \
- --enable-imap \
- --enable-smtp \
- --enable-hcache \
- --enable-sidebar \
- --without-included-gettext \
- --with-mailpath=/var/spool/mail \
- --with-curses \
- --with-ssl \
- --with-sasl \
- --with-idn2
- make -j4 CFLAGS='-Wall -Werror'
+ ./.builds/build original
- tcc: |
cd mutt
- autoreconf -if
- CC=tcc ./configure
- make -j4 CFLAGS='-Wall -Werror'
+ ./.builds/build tcc
diff --git a/.builds/build b/.builds/build
new file mode 100755
index 00000000..d97051d4
--- /dev/null
+++ b/.builds/build
@@ -0,0 +1,111 @@
+#!/bin/sh
+
+# Build and test multiple build configurations
+# USAGE: build [conf]...
+
+# Environment: CFLAGS and NPROC, see below.
+
+# If the script is called without any arguments it will automagically collect
+# all build configurations and run them all.
+
+# Every build configuration is a function. Make sure the function name is at
+# the start of the line and does only contain characters a-z and '_'. Function
+# names starting with an underscore are utility functions and will not be
+# collected.
+
+cflags="-Werror $CFLAGS"
+dft_flags="$cflags"
+nproc=${NPROC:-1}
+
+_die()
+{
+ >&2 printf "FAILED: Task: %s Step: %s\n" "$2" "$3"
+ exit "$1"
+}
+
+
+default()
+{
+ ./configure
+}
+
+openbsd()
+{
+ ./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
+}
+
+original()
+{
+ ./configure \
+ --enable-gpgme \
+ --enable-pop \
+ --enable-imap \
+ --enable-smtp \
+ --enable-hcache \
+ --enable-sidebar \
+ --without-included-gettext \
+ --with-mailpath=/var/spool/mail \
+ --with-curses \
+ --with-ssl \
+ --with-sasl \
+ --with-idn2
+}
+
+original_freebsd()
+{
+ ./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
+}
+
+tcc()
+{
+ CC=tcc ./configure
+}
+
+without_wc_funcs()
+{
+ ./configure \
+ --without-wc-funcs
+}
+
+# If no arguments were passed, get all the above function names (except _die)
+# and drop the parentheses.
+# shellcheck disable=SC2046
+test "$1" || set -- $(sed -n '/^[a-z][a-z_]\{1,\}()$/s/()//p' "$0")
+
+autoreconf -fi
+
+for conf
+do
+ cflags="$dft_flags"
+ make distclean || :
+ $conf || _die "$?" "$conf" configure
+ make -j"$nproc" CFLAGS="$cflags" || _die "$?" "$conf" make
+done
diff --git a/.builds/debian.yml b/.builds/debian.yml
index b536ebbf..66aacd77 100644
--- a/.builds/debian.yml
+++ b/.builds/debian.yml
@@ -16,6 +16,8 @@ packages:
- tcc
sources:
- https://git.sr.ht/~mutt/mutt
+environment:
+ NPROC: '8'
tasks:
- check: |
cd mutt
@@ -25,36 +27,16 @@ tasks:
- default: |
cd mutt
- autoreconf -if
- ./configure
- make -j4 CFLAGS='-Wall -Werror'
+ ./.builds/build default
- without-wc-funcs: |
cd mutt
- autoreconf -if
- ./configure \
- --without-wc-funcs
- make -j4 CFLAGS='-Wall -Werror'
+ ./.builds/build without_wc_funcs
- original: |
cd mutt
- autoreconf -if
- ./configure \
- --enable-gpgme \
- --enable-pop \
- --enable-imap \
- --enable-smtp \
- --enable-hcache \
- --enable-sidebar \
- --without-included-gettext \
- --with-mailpath=/var/spool/mail \
- --with-curses \
- --with-ssl \
- --with-sasl
- make -j4 CFLAGS='-Wall -Werror'
+ ./.builds/build original
- tcc: |
cd mutt
- autoreconf -if
- CC=tcc ./configure
- make -j4 CFLAGS='-Wall -Werror'
+ ./.builds/build tcc
diff --git a/.builds/freebsd.yml b/.builds/freebsd.yml
index 0e17d23b..d8e4398a 100644
--- a/.builds/freebsd.yml
+++ b/.builds/freebsd.yml
@@ -17,6 +17,8 @@ packages:
- urlview
sources:
- https://git.sr.ht/~mutt/mutt
+environment:
+ NPROC: '8'
tasks:
- check: |
cd mutt
@@ -26,32 +28,12 @@ tasks:
- default: |
cd mutt
- autoreconf -if
- ./configure
- make -j4 CFLAGS='-Wall -Werror'
+ ./.builds/build default
- without-wc-funcs: |
cd mutt
- autoreconf -if
- ./configure \
- --without-wc-funcs
- make -j4 CFLAGS='-Wall -Werror'
+ ./.builds/build without_wc_funcs
-- original: |
+- original_freebsd: |
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
- make -j4 CFLAGS='-Wall -Werror'
+ ./.builds/build original_freebsd
diff --git a/.builds/openbsd.yml b/.builds/openbsd.yml
index bdfee93c..9816354c 100644
--- a/.builds/openbsd.yml
+++ b/.builds/openbsd.yml
@@ -20,6 +20,7 @@ environment:
AUTOCONF_VERSION: 2.72
AUTOMAKE_VERSION: 1.18
LDFLAGS: -L/usr/local/lib
+ NPROC: '8'
tasks:
- check: |
cd mutt
@@ -29,53 +30,16 @@ tasks:
- default: |
cd mutt
- autoreconf -if
- ./configure
- make -j4 CFLAGS='-Wall -Werror'
+ ./.builds/build default
- without-wc-funcs: |
cd mutt
- autoreconf -if
- ./configure \
- --without-wc-funcs
- make -j4 CFLAGS='-Wall -Werror'
+ ./.builds/build without_wc_funcs
-- original: |
+- original_freebsd: |
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
- make -j4 CFLAGS='-Wall -Werror'
+ ./.builds/build original_freebsd
- 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
- make -j4 CFLAGS='-Wall -Werror'
+ ./.builds/build openbsd
diff --git a/doc/devel-notes.txt b/doc/devel-notes.txt
index 30edbed5..91db9380 100644
--- a/doc/devel-notes.txt
+++ b/doc/devel-notes.txt
@@ -159,6 +159,8 @@ in the top-level source directory reports no errors/warnings.
Documentation changes should be validated by running 'make validate'
in the doc subdirectory.
+You can test the most important build configurations by running
+.builds/build (which is also run by the CI system in use).
String comparisons
------------------
--
2.51.0