diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-03 17:31:29 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-03 17:31:29 +0200 |
| commit | 8a4eba043008bf76266c6e707f80a1194f1b5dfa (patch) | |
| tree | 9eebbddc6a239ea9e2f00dfb3736e92c05d4b392 | |
| parent | 466163878545722c642289c74ce551821d179854 (diff) | |
| download | qtmaildir-8a4eba043008bf76266c6e707f80a1194f1b5dfa.tar.gz qtmaildir-8a4eba043008bf76266c6e707f80a1194f1b5dfa.zip | |
build: add a SlackBuild under assets/slackbuild
Packages the application for Slackware, following SBo conventions with
two deliberate departures: the tag is _danix rather than _SBo and the
package type is txz rather than tgz, since this is not an SBo
submission. sbolint reports exactly those two as errors and nothing
else; the template comments it warned about are gone.
Written against the install layout the build really produces, checked by
staging it: one binary, one .desktop entry and one scalable icon, no
libraries and no man or info pages. The template's .la removal, man and
info compression and perllocal.pod cleanup would all act on nothing
here, so they are left out rather than carried along as dead code.
doinst.sh keeps only the desktop-database and icon-cache updates.
The download URL and checksum are verified rather than assumed: sbodl
fetches the tarball and reports "md5sum matches OK".
Adds QTMAILDIR_BUILD_TESTS, defaulting to ON so the ordinary build is
unchanged. A packaging build has no use for the test binaries, and
building them pulls in Qt6::Test to produce nothing that ships. Note the
0.4.0 tarball predates this option, so with that source the flag is
accepted but does nothing; the README says so.
notmuch is the only dependency outside Slackware. Qt6 including
WebEngine, gmime and cmake are all stock, which is what REQUIRES
reflects.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
| -rw-r--r-- | CMakeLists.txt | 17 | ||||
| -rw-r--r-- | README.md | 23 | ||||
| -rw-r--r-- | assets/slackbuild/README | 28 | ||||
| -rw-r--r-- | assets/slackbuild/doinst.sh | 9 | ||||
| -rwxr-xr-x | assets/slackbuild/qtmaildir.SlackBuild | 114 | ||||
| -rw-r--r-- | assets/slackbuild/qtmaildir.info | 10 | ||||
| -rw-r--r-- | assets/slackbuild/slack-desc | 19 | ||||
| -rw-r--r-- | docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md | 2 |
8 files changed, 218 insertions, 4 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 827b806..e974dd8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,16 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) -find_package(Qt6 6.5 REQUIRED COMPONENTS Widgets WebEngineWidgets Test) +# Off for a packaging build, which has no use for the test binaries and would +# otherwise pull in Qt6::Test and compile the whole suite to produce nothing +# that ships. +option(QTMAILDIR_BUILD_TESTS "Build the test suite" ON) + +set(QTMAILDIR_QT_COMPONENTS Widgets WebEngineWidgets) +if(QTMAILDIR_BUILD_TESTS) + list(APPEND QTMAILDIR_QT_COMPONENTS Test) +endif() +find_package(Qt6 6.5 REQUIRED COMPONENTS ${QTMAILDIR_QT_COMPONENTS}) # notmuch ships no pkg-config file; locate it by hand. find_path(NOTMUCH_INCLUDE_DIR notmuch.h) @@ -27,6 +36,8 @@ configure_file( ${CMAKE_CURRENT_BINARY_DIR}/generated/qtmaildir/version.h @ONLY) -enable_testing() add_subdirectory(src) -add_subdirectory(tests) +if(QTMAILDIR_BUILD_TESTS) + enable_testing() + add_subdirectory(tests) +endif() @@ -60,6 +60,29 @@ A single test binary, for a tighter loop: ./build/tests/test_keymap ``` +Packaging builds do not need the tests, and building them pulls in `Qt6::Test` +to produce nothing that ships: + +```bash +cmake -S . -B build -DQTMAILDIR_BUILD_TESTS=OFF +``` + +### Slackware package + +`assets/slackbuild/` holds a SlackBuild. It follows SBo conventions, with two +deliberate departures: the tag is `_danix` rather than `_SBo`, and the package +type is `txz` rather than `tgz`, since this is not an SBo submission. `sbolint` +reports exactly those two as errors and nothing else. + +```bash +cd assets/slackbuild +# fetch the source tarball named in qtmaildir.info next to the script +sudo ./qtmaildir.SlackBuild +``` + +`notmuch` is the only dependency outside Slackware itself; Qt6 (WebEngine +included), gmime and cmake are all stock. + ## Configuration `~/.config/qtmaildir/qtmaildir.conf`, INI format. diff --git a/assets/slackbuild/README b/assets/slackbuild/README new file mode 100644 index 0000000..3a61b70 --- /dev/null +++ b/assets/slackbuild/README @@ -0,0 +1,28 @@ +qtmaildir is a Qt6 desktop client for reading and organizing a local +Maildir that notmuch has indexed. It is a GUI counterpart to neomutt for +the parts of mail handling that are easier with a mouse and a real HTML +renderer. + +It does no network protocol work at all: there is no POP, IMAP or SMTP, +and no sync implementation. Mail arrives in your Maildir by whatever you +already use (mbsync, offlineimap, fetchmail) and is indexed by +'notmuch new'. Fetching is delegated to a command you configure, so it +joins the lock that already serializes your script against cron rather +than running a second mbsync over the same Maildir. Sending is not +implemented. + +You need a working notmuch database before qtmaildir is useful; it does +not create or configure one. The Maildir path is deliberately not +configurable, since notmuch already stores it as database.path. + +Qt6 (including WebEngine), gmime and cmake are part of Slackware, so +notmuch is the only dependency that is not. + +Configuration lives at ~/.config/qtmaildir/qtmaildir.conf and is +documented in /usr/doc/qtmaildir-$VERSION/README.md. + +This package is built with the test suite disabled +(-DQTMAILDIR_BUILD_TESTS=OFF), which skips the Qt6::Test dependency and +builds nothing that would ship. Note that this option was added after +0.4.0 was tagged: with the 0.4.0 tarball the flag is accepted but has no +effect, so that build still compiles the tests and needs Qt6::Test. diff --git a/assets/slackbuild/doinst.sh b/assets/slackbuild/doinst.sh new file mode 100644 index 0000000..65c7e2e --- /dev/null +++ b/assets/slackbuild/doinst.sh @@ -0,0 +1,9 @@ +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 +fi + +if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then + if [ -x /usr/bin/gtk-update-icon-cache ]; then + /usr/bin/gtk-update-icon-cache -f usr/share/icons/hicolor >/dev/null 2>&1 + fi +fi diff --git a/assets/slackbuild/qtmaildir.SlackBuild b/assets/slackbuild/qtmaildir.SlackBuild new file mode 100755 index 0000000..c968cbc --- /dev/null +++ b/assets/slackbuild/qtmaildir.SlackBuild @@ -0,0 +1,114 @@ +#!/bin/bash + +# Slackware build script for qtmaildir + +# Copyright 2026 Danilo M. <danix@danix.xyz> +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=qtmaildir +VERSION=${VERSION:-0.4.0} +BUILD=${BUILD:-1} +# Not _SBo: this is not an SBo submission. sbolint reports the tag and the +# package type as errors for that reason; both are deliberate. +TAG=${TAG:-_danix} +PKGTYPE=${PKGTYPE:-txz} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/SBo} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +elif [ "$ARCH" = "aarch64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xvf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +# QTMAILDIR_BUILD_TESTS=OFF skips the test suite, which needs Qt6::Test and +# produces nothing that ships. +mkdir -p build +cd build + cmake \ + -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ + -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLIB_SUFFIX=${LIBDIRSUFFIX} \ + -DQTMAILDIR_BUILD_TESTS=OFF \ + -DCMAKE_BUILD_TYPE=Release .. + make + make install/strip DESTDIR=$PKG +cd .. + +# The package installs one binary, one .desktop entry and one scalable icon. +# No libraries, no man or info pages, so the usual .la removal, man/info +# compression and perllocal.pod cleanup have nothing to act on here. + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a \ + CHANGELOG.md LICENSE README.md \ + $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/assets/slackbuild/qtmaildir.info b/assets/slackbuild/qtmaildir.info new file mode 100644 index 0000000..8871525 --- /dev/null +++ b/assets/slackbuild/qtmaildir.info @@ -0,0 +1,10 @@ +PRGNAM="qtmaildir" +VERSION="0.4.0" +HOMEPAGE="https://git.danix.xyz/qtmaildir" +DOWNLOAD="https://git.danix.xyz/qtmaildir/snapshot/qtmaildir-0.4.0.tar.gz" +MD5SUM="5180b2847dbc8d81e79639af3329da62" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="notmuch" +MAINTAINER="Danilo M." +EMAIL="danix@danix.xyz" diff --git a/assets/slackbuild/slack-desc b/assets/slackbuild/slack-desc new file mode 100644 index 0000000..e4292cd --- /dev/null +++ b/assets/slackbuild/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +qtmaildir: qtmaildir (Qt6 mail client for notmuch-indexed Maildirs) +qtmaildir: +qtmaildir: A desktop client for reading and organizing a local Maildir that +qtmaildir: notmuch has indexed. A GUI counterpart to neomutt for the parts of +qtmaildir: mail handling that are easier with a mouse and a real HTML renderer. +qtmaildir: +qtmaildir: It does no network protocol work at all: no POP, IMAP or SMTP. +qtmaildir: Mail arrives by whatever you already use and is indexed by +qtmaildir: 'notmuch new'. Fetching is delegated to a command you configure. +qtmaildir: +qtmaildir: Homepage: https://git.danix.xyz/qtmaildir diff --git a/docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md b/docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md index 3def99d..cac1570 100644 --- a/docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md +++ b/docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md @@ -50,7 +50,7 @@ taking that too literally. | 8 | No buttons or menu entries for archive, undo, etc | discoverability | M | **done** | | 9 | No in-app view of configured shortcuts | discoverability | S | **done** | | 10 | Reaching an account's inbox takes two steps | workflow | S | open | -| 11 | Icon, `.desktop` file, SlackBuild | packaging | M | **partly done**: icon and `.desktop` landed, SlackBuild open | +| 11 | Icon, `.desktop` file, SlackBuild | packaging | M | **done** | | 13 | No visual feedback that an action stuck | feedback | S | **done** | | 14 | Tag column unreadable, tags need another home | presentation | M | **done** | | 15 | Attachments are parsed but unreachable from the UI | information | M | **done** | |
