cyrus-imapd2
Build times (auto-updated)
- x86_64: 1m36s (2026-10-19 15:00 UTC, MAKEFLAGS=-j6)
- armv6h: 40m29s (2026-10-20 00:39 UTC, remote, serial)
- armv7h: 15m24s (2026-10-20 00:39 UTC, remote, MAKEFLAGS=-j1)
2026-10-19: content-free rebuild for perl 5.44 ABI bump, x86_64 only, pkgrel 2.5 -> 2.6
User found via pacman -Qqo '/usr/lib/perl5/5.42' that this package (and
perl-crypt-ssleay) owned files under the old perl-versioned path on this
host. Real current perl is actually 5.44.0-1 (the archbuild chroot already
syncs to it; the host’s own pacman -Si was just reporting a stale cached sync
db until a plain pacman -Sy). Content-free rebuild, no PKGBUILD edit beyond
the adapted/ X.Y pkgrel bump (per the established rule: content-free rebuilds
always get X.Y, not a plain integer, even where the current rebuild has no
actual content change). x86_64 only, per explicit request –
i686/pentium4/armv6h/armv7h untouched, still at 2.5.17-2.5.
Publish raced with a concurrently-running perl-crypt-ssleay rebuild:
launched both repo_release.sh calls at once (different packages, thought
independent), but repo_publish.sh’s repo-add step takes a lockfile on the
shared remote archlinuxaba.db.tar.gz for a given arch – both hit
x86_64’s db at the same time, one lost the race
(ERROR: Failed to acquire lockfile ... Held by process <pid>). Build+sign+
upload still succeeded for the losing side, just the db-add step failed, so the
package sat uploaded but not actually in the repo index
(repo_arch_status.sh showed not published despite the file existing
remotely). Fixed by rerunning scripts/repo_publish.sh directly on the
already-signed local .pkg.tar.zst/.sig files once the other publish
finished – no rebuild needed. Lesson: don’t run two repo_release.sh
invocations concurrently even for unrelated packages if they might publish to
the same arch’s db around the same time – serialize them, or accept needing
this exact recovery step.
While investigating, found this is NOT the only package in this project’s own
tree with perl XS bindings needing the same treatment –
maintained/obexftp also ships a compiled OBEXFTP.so under
vendor_perl/auto (built via its -DENABLE_PERL=YES SWIG bindings). Found by
enumerating every locally-installed package owning a .so under
/usr/lib/perl5/5.42/vendor_perl/*/auto/ and cross-checking against
arch/{maintained,adapted,private,owned} – everything else in that list
(graphicsmagick, imagemagick, net-snmp, the various official perl-* XS
packages, rrdtool, subversion, xmms2, etc.) comes straight from upstream Arch
repos, not tracked here, so Arch’s own perl-rebuild cycle covers those.
2026-10-20: ARM catch-up to 2.5.17-2.6 (“the cluster is up”)
Once the remote build boards were confirmed back online, ran the armv6h/armv7h
rebuild that was deliberately deferred above:
REPO_BUILD_ONLY_ARCH="armv6h armv7h" repo_release.sh adapted/cyrus-imapd2.
Built and published cleanly on both (armv6h 40m29s, armv7h 15m24s). Note:
the eurobuild5 board’s perl is still 5.42 (its perl bindings installed under
/usr/lib/perl5/5.42/site_perl/...), not 5.44 like the local x86_64 chroot –
each remote board syncs its own packages independently, so ARM and local-arch
perl versions can legitimately differ; not a bug. i686/pentium4 remain at
2.5.17-2.5, untouched – outside this round’s scope (x86_64 + ARM only).
Build times (auto-updated)
- i686: 1m10s (2026-09-10 07:20 UTC, serial)
- x86_64: 1m15s (2026-09-10 07:21 UTC, serial)
- armv6h: 38m55s (2026-09-10 08:00 UTC, remote)
- armv7h: 14m54s (2026-09-10 08:00 UTC, remote)
- pentium4: 3m24s (2026-09-10 18:25 UTC, serial)
- Path: arch/adapted/cyrus-imapd2
2026-08-20: renamed pkgname to match the real AUR package; fixed a real 32-bit-only pointer-type bug
- This directory is descended from a plain “cyrus-imapd” AUR PKGBUILD
(maintainer Carsten Feuls), but the directory itself is named/intended to be
the separate, actual AUR
cyrus-imapd2package – the internalpkgname=had never been updated to match, the same class of directory/pkgname mismatch hit earlier this session withtrojita-git. Fixed the same way: kept a_pkgname=cyrus-imapdvar for the real upstream source references (tarball URL,$srcdirsubdirectory,cdtargets), setpkgname=cyrus-imapd2for everything package-identity-related (install=, licenses/doc install dirs). Renamedcyrus-imapd.install->cyrus-imapd2.installto match. Addedprovides/conflicts/replaces=('cyrus-imapd')(on top of the pre-existingimap-server/pop3-server) so it properly supersedes a plaincyrus-imapdinstall, matching the real AUR cyrus-imapd2’s own semantics.pkgrel2.1 -> 2.2 for the rename. - User had a reference copy at
/data/INSTALL/cyrus-imapd-2-from-eurobuild3with two useful patches this directory already had integrated (cyrus-imapd-2.5.17-perl-5.36-assert.patch,cyrus-imapd-2.5.17-mib-missing-semicocon-util-funcs.patch) – confirmed identical content, no changes needed there. Both patches are small local fixes (not fetched from an obscure/one-off source), so nosrc/mirror upload needed for them. CC=gcc CFLAGS='-fPIC -std=gnu17'(wasCC=clang, undeclared makedepend) – root cause:imap/mboxlist.hdeclares callback params as old K&R-style unprototyped function pointers, which clang tolerated but GCC’s current default standard (gnu23) now rejects as a hard incompatible-pointer-types error.-std=gnu17restores the looser semantics this code was written for.- New 32-bit-only bug found this build (i686 failed even with the gnu17 fix
applied, x86_64 succeeded):
imap/mboxevent.c:831declaredunsigned long len = 0;butlib/map.h’smap_refresh()/map_free()prototypes takesize_t *len. On x86_64,size_tandunsigned longare the identical 8-byte type, so this was silently fine. On i686,size_tisunsigned int– a genuinely distinct type fromunsigned longdespite matching 4-byte width – so GCC’s-Wincompatible-pointer-types(a hard error by default in current GCC) rejected it. This is a real, narrow, pre-existing upstream bug (latent on 64-bit, only surfaces as a build error on 32-bit); fixed with a new patch,cyrus-imapd-2.5.17-mboxevent-size_t-pointer-mismatch.patch(unsigned long len->size_t len, one-line change).pkgrel2.2 -> 2.3. - Result: builds and publishes cleanly on x86_64 and i686.
armv6h/armv7hare declared inarch=()but skipped both times (SKIPPED armv6h/armv7h (no local extra-*-build)) – no local archbuild chroot for those arches on this workstation, not a package problem.pentium4was never inarch=()to begin with (inherited from the original AUR package, not evaluated this round – would be worth trying given how narrow the i686 fix was, if picked up again). sed -i'' 's/gettid/_gettid/g' lib/cyrusdb_berkeley.cinline fix inbuild()still not converted to a proper patch file (per the project’s “patch files, not inline edits” convention) – left as-is, not addressed this round. ## 2026-09-10: content-free rebuild for armv6h/armv7h coverage, pkgrel 2.3 -> 2.4
Requested alongside private/optdb5.3 – pure rebuild-for-coverage, no PKGBUILD
content change. armv6h/armv7h were skipped in the 2026-08-20 build above for
lack of a local chroot; now covered by the eurobuild4/eurobuild5
remote-build boards. pkgrel 2.3 -> 2.4 (the existing adapted/ X.Y rule,
unconditional regardless of content-change status – see
memory/PKGREL_VS_PKGVER.md).
Board collision with private/optdb5.3’s own armv7h build, same session:
both packages requested together, and repo_build.sh launches all of a
package’s remote archs concurrently with each other (by design, they’re
independent boards) – but optdb5.3 and cyrus-imapd2 both need armv7h, i.e.
the same board (eurobuild5). optdb5.3’s armv7h job had a ~2min head start
when cyrus-imapd2’s own armv7h job launched on the same board (eurobuild5
is single-core/low-RAM, per remote_build.conf’s own comment – running two
builds on it at once was a real risk, not just theoretical). Killed
cyrus-imapd2’s armv7h remote job (the repo_build_remote.sh/ssh process
pair, confirmed no orphaned process left on the board afterward) while leaving
optdb5.3’s alone (further along) and cyrus-imapd2’s own armv6h (a
different board, eurobuild4) untouched. repo_build.sh handled the killed
job gracefully – reported armv7h FAILED, still signed/published the 3 archs
that did succeed (i686/x86_64/armv6h). Retried armv7h alone afterward
via REPO_BUILD_ONLY_ARCH=armv7h ./scripts/repo_release.sh adapted/cyrus-imapd2
once eurobuild5 was confirmed free – built and published cleanly. Takeaway
for next time: check arch=() overlap across all remote-mapped archs, not
just whether two packages are literally the same package, before launching
multiple repo_release.sh runs concurrently – the collision is per-board, not
per-package.
New finding, unrelated to the rebuild itself: namcap flagged a real
missing runtime dependency during this build –
cyrus-imapd2 E: Dependency jansson detected and not included (libraries ['usr/lib/libjansson.so.4'] needed in files ['usr/lib/libcyrus_imap.so.0.0.0']).
Pre-existing (not introduced by this rebuild, depends=() wasn’t touched), not
fixed this round – next real edit to this PKGBUILD should add jansson to
depends=().
2026-09-10 (same day): fixed the jansson dependency, pkgrel 2.4 -> 2.5
Added jansson to depends=() (real content change, plain adapted/ X.Y
bump). Cleaned a stale leftover armv7h build artifact in
/data/INSTALL/cyrus-imapd2 first (left over from the earlier armv7h-only
retry’s fetch step, not cleaned up automatically) – per the “check stale
artifacts before build” convention, since repo-add is last-write-wins by
pkgname and a stale file could have silently clobbered this publish. Confirmed
both remote boards (eurobuild4/eurobuild5) free before launching this time,
no collision. Rebuilt and published cleanly on all 4 wished archs
(i686/x86_64/armv6h/armv7h); namcap’s missing-jansson warning is gone
from this build’s log. armv6h took notably longer this time (38m55s vs the
previous run) – board load variance, not a regression to chase.
- Lesson: a K&R-implicit-declaration fix (
-std=gnu17) and a strict-pointer-type-mismatch fix (size_tvsunsigned long) look similar (both show up as-Wincompatible-pointer-typeserrors, both only bite on GCC’s stricter modern defaults) but are different root causes needing different fixes – worth checking whether an i686-only build failure surviving an existing K&R fix is actually a second, arch-width-dependent type mismatch rather than the same bug recurring.
2026-09-10 (later same day): added pentium4, no pkgrel bump needed
User asked why pentium4 was missing – answer: it was simply never in arch=()
at all (inherited unevaluated from the original AUR PKGBUILD), not a build
failure. Added it. Initially bumped pkgrel 2.5 -> 2.6 out of habit (the
adapted/ X.Y rule) – user caught it: “Are you sure we have to bump pkgrel
here… Because we are just adding new subarchs.” Correct: a purely-additive
arch=() edit (new arch only, no already-published arch touched) needs no bump
at all – there’s no existing publish for that arch to version-skew against.
Reverted to 2.5, built pentium4 alone (REPO_BUILD_ONLY_ARCH=pentium4).
Built and published cleanly in 3m24s, no arch-specific fixes needed – confirms
the earlier hunch that the narrow i686 size_t fix would carry over fine. Full
writeup of the general rule in memory/PKGREL_VS_PKGVER.md’s “A purely-additive
arch=() edit needs no pkgrel bump at all” section.