build: bump to 1.14.0-pre1, bump some required versions

Bump the required versions of some libraries / emacs slightly so we can get rid
of some special-casing and work-arounds. These are mostly based on Ubuntu 24.04
LTS, which is rather conservative; so should hopefully not inconvenience any
users.

- compiler: we now require C++20 instead of C++17
- glib & friends: 2.60 => 2.80
- xapian: 1.4 => 1.4.22
- emacs 26.3 => 28.1

Ubuntu 24.04 actually has Emacs 29.3, but that'd perhaps be too big a jump.
This commit is contained in:
Dirk-Jan C. Binnema
2026-01-20 21:57:17 +02:00
committed by Seth Ladygo
parent 30b2d2a9fe
commit 06b4625e61
6 changed files with 46 additions and 45 deletions

View File

@ -1,17 +1,19 @@
#+STARTUP:showall
* NEWS (user visible changes & bigger non-visible ones)
* 1.4 (released on January 24, 2026)
The 1.14 series continues where the 1.12 series left off, with just some
version updates & depreciations.
* 1.12 (released on February 24, 2024)
The 1.12 series has been "stable" for a fairly long time, and gained some
The 1.12 series has been "stable" for a fairly long time, and gained many
changes in the mean-time. Most of the changes are for bug fixes and
documentation improvements, but some new features are available as well. Those
are listed below, with the version in which they first appeared.
We decided to put off a new development series (1.13 -> 1.14) until
incompatible changes are required; for now working in the 1.12 series seems a
good way to get improvements to users more quickly.
** Some highlights
- Significant speedups in both ~mu~ and ~mu4e~

View File

@ -45,14 +45,22 @@ version 3]] (or higher).
* Versions
*mu* attempts to balance development speed and stability. For this, every few
months there is a stable version (e.g. ~1.12.12~); development then continues in
in ~master~, with ~-pre<n>~ (e.g. ~1.12.14-pre3~): ~-pre~-suffixed versions refer to the
current _development_ code, until it is released (and then looses its ~-pre~ suffix,
i.e., becomes the ~1.12.14~ release).
*mu* attempts to balance development speed and stability.
So if you want stability, grab the [[https://github.com/djcb/mu/releases/][release]]; if you are more
adventurous/impatient, git ~master~ is there as well.
Active development takes place on ~master~ (the 1.14 series), and we maintain
~release/1.12~ as well. When possible, fixes (but not features) from ~master~ are
back-ported to ~release/1.12~.
Every few months, we release a stable version (e.g. ~1.14.0~); development then
continues in ~master~, with ~-pre<n>~ (e.g. ~1.14.1-pre1~): ~-pre~-suffixed versions
refer to the current _development_ code, until it is released (and then looses its
~-pre~ suffix, i.e., becomes the ~1.14.1~ release).
Hence, if you want to track active development, use ~master~; if you want to avoid
any changes except bug-fixes, use a 1.12 [[https://github.com/djcb/mu/releases/][release]]; otherwise, track ~master~.
Overall, we try to avoid incompatible changes, but sometimes this is necessary,
for example to update the versions of required libraries
* Installation
@ -66,13 +74,13 @@ as a Linux distribution. Many have packages available.
To be able to build ~mu~, ensure you have:
- a C++17 compiler (~gcc~ and ~clang~ are known to work)
- a C++20 compiler (~gcc~ and ~clang~ are known to work)
- development packages for /Xapian/ and /GMime/ and /GLib/ (see ~meson.build~ for the
versions)
- basic tools such as ~make~, ~sed~, ~grep~
- ~meson~
For ~mu4e~, you also need ~emacs~.
For ~mu4e~, you also need ~emacs~, version 28 or later.
Note, support for Windows is very much _experimental_, that is, it works for some
people, but we can't really support it due to lack of the specific expertise.

View File

@ -33,8 +33,10 @@
#include <utils/mu-result.hh>
#include <utils/mu-utils.hh>
/* starting with 1.4.6, Xapian supports C++ move semantics,
* but only with XAPIAN_MOVE_SEMANTICS defined
/*
* starting with 1.4.6, Xapian supports C++ move semantics,
* but only with XAPIAN_MOVE_SEMANTICS defined. We require
* at lest 1.4.22 so we can define it.
*/
#ifndef XAPIAN_MOVE_SEMANTICS
#define XAPIAN_MOVE_SEMANTICS

View File

@ -17,18 +17,18 @@
################################################################################
# project setup
project('mu', ['c', 'cpp'],
version: '1.12.15',
meson_version: '>= 0.56.0',
version: '1.14.0-pre1',
meson_version: '>= 1.5.1',
license: 'GPL-3.0-or-later',
default_options : [
'buildtype=debugoptimized',
'warning_level=3',
'c_std=c11',
'cpp_std=c++17'])
'cpp_std=c++20'])
# hard-code the date here (for reproducibility); we derive the dates used in
# e.g. documentation from this.
mu_date='2026-01-15'
mu_date='2026-01-20'
# installation paths
prefixdir = get_option('prefix')
@ -200,11 +200,14 @@ endif
################################################################################
# hard dependencies
#
glib_dep = dependency('glib-2.0', version: '>= 2.60')
gobject_dep = dependency('gobject-2.0', version: '>= 2.60')
gio_dep = dependency('gio-2.0', version: '>= 2.60')
gio_unix_dep = dependency('gio-unix-2.0', version: '>= 2.60')
gmime_dep = dependency('gmime-3.0', version: '>= 3.2')
# glib & friends
glib_dep = dependency('glib-2.0', version: '>= 2.80')
gobject_dep = dependency('gobject-2.0', version: '>= 2.80')
gio_dep = dependency('gio-2.0', version: '>= 2.80')
gio_unix_dep = dependency('gio-unix-2.0', version: '>= 2.80')
# gmime
gmime_dep = dependency('gmime-3.0', version: '>= 3.2.13')
# note: g_mime_object_write_content_to_stream is not available
# in the gmime we still support for normal mu build.; we only need
@ -215,13 +218,9 @@ gmime_scm_ok = cc.has_function('g_mime_object_write_content_to_stream',
thread_dep = dependency('threads')
# we need Xapian 1.4
xapian_dep = dependency('xapian-core', version:'>= 1.4', required:true)
# we need Xapian 1.4.22 or higher
xapian_dep = dependency('xapian-core', version:'>= 1.4.22', required:true)
xapver = xapian_dep.version()
if xapver.version_compare('>= 1.4.6')
message('xapian ' + xapver + ' supports c++ move-semantics')
config_h_data.set('HAVE_XAPIAN_MOVE_SEMANTICS', 1)
endif
if xapver.version_compare('>= 1.4.23')
message('xapian ' + xapver + ' supports ngrams')
config_h_data.set('HAVE_XAPIAN_FLAG_NGRAMS', 1)
@ -363,10 +362,9 @@ subdir('mu')
# emacs -- needed for mu4e compilation
emacs_name=get_option('emacs')
emacs_min_version='26.3'
emacs_min_version='28.1'
emacs=find_program([emacs_name], version: '>=' + emacs_min_version, required:false)
if emacs.found()
emacs28 = find_program([emacs_name], version: '>=28', required:false)
subdir('man')
subdir('mu4e')
else

View File

@ -66,6 +66,7 @@ mu4e_srcs=[
'mu4e-server.el',
'mu4e-speedbar.el',
'mu4e-thread.el',
'mu4e-transient.el',
'mu4e-update.el',
'mu4e-vars.el',
'mu4e-view.el',
@ -76,16 +77,6 @@ mu4e_srcs=[
# 'bc'->byte-compile. The above should always be byte-compiled.
mu4e_bc_srcs = mu4e_srcs
# emacs 28 is guaranteed to have transient
# not very elegant, but
# https://stackoverflow.com/questions/49221792/byte-compile-file-only-when-library-is-found
mu4e_srcs += 'mu4e-transient.el'
if emacs28.found()
mu4e_bc_srcs += 'mu4e-transient.el'
else
message('mu4e-transient.el cannot be byte-compiled')
endif
# do have we have dbus support?
mu4e_srcs += 'mu4e-dbus.el'
emacs_dbus = run_command(emacs, '--batch', '--eval', '(kill-emacs (if (featurep \'dbusbind) 0 1))',

View File

@ -110,8 +110,8 @@ Otherwise, completely quit mu4e, including automatic updating."
(defun mu4e--check-requirements ()
"Check for the settings required for running mu4e."
(unless (>= emacs-major-version 26)
(mu4e-error "Emacs >= 25.x is required for mu4e"))
(unless (>= emacs-major-version 28)
(mu4e-error "Emacs >= 28.x is required for mu4e"))
(when (mu4e-server-properties)
(unless (string= (mu4e-server-version) mu4e-mu-version)
(mu4e-error "The mu server has version %s, but we need %s"