build: make meson the default build system

We still support autotools for now, but it is no longer the default.
This commit is contained in:
Dirk-Jan C. Binnema 2021-08-28 11:25:05 +03:00
parent 286d6f70c8
commit 975604d3ee
5 changed files with 94 additions and 61 deletions

43
Makefile.meson Normal file
View File

@ -0,0 +1,43 @@
## Copyright (C) 2008-2021 Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 3 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software Foundation,
## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# Makefile with some useful targets for meson/ninja
NINJA ?= ninja
BUILDDIR ?= $(CURDIR)/build
MESON ?= meson
all: $(BUILDDIR)
$(NINJA) -C $(BUILDDIR)
$(BUILDDIR):
$(MESON) $(BUILDDIR)
check: test
test: $(BUILDDIR)
@cd $(BUILDDIR); $(MESON) test
dist: $(BUILDDIR)
@cd $(BUILDDIR); $(MESON) dist
install: $(BUILDDIR)
@cd $(BUILDDIR); $(MESON) install
clean:
@test -d $(BUILDDIR) && $(NINJA) -C $(BUILDDIR) clean

View File

@ -1,34 +1,29 @@
#!/bin/sh
# Run this to generate all the initial makefiles, etc.
echo "*** meson build setup"
test -f mu/mu.cc || {
echo "*** Run this script from the top-level mu source directory"
exit 1
}
# opportunistically; usually not needed, but occasionally it'll
# avoid build errors that would otherwise confuse users.
test -f Makefile && {
echo "*** clear out old things"
make distclean 2> /dev/null
}
BUILDDIR=build
command -V autoreconf > /dev/null
command -v meson 2> /dev/null
if [ $? != 0 ]; then
echo "*** No autoreconf found, please install it ***"
echo "*** No meson found, please install it ***"
exit 1
fi
rm -f config.cache
rm -rf autom4te.cache
autoreconf --force --install --verbose || exit $?
if test -z "$*"; then
echo "# Configuring without parameters"
# we could remove build/ but let's avoid rm -rf risks...
if test -d ${BUILDDIR}; then
meson --reconfigure ${BUILDDIR}
else
echo "# Configure with parameters $*"
meson ${BUILDDIR} $@
fi
./configure --config-cache $@
# Add a Makefile with some useful target
cp Makefile.meson Makefile
echo "*** Now run 'ninja -C ${BUILDDIR}' to build mu"

View File

@ -363,6 +363,10 @@ AS_IF([test "x$ac_cv_header_wordexp_h" != "xyes"],[
echo " --maildir=/home/user/Maildir"
])
echo "NOTE: autotools support has been deprecated and will be removed"
echo " after the next stable release. use the meson build instead"
echo
echo "Now, type 'make' (or 'gmake') to build mu"
echo

View File

@ -23,7 +23,7 @@ mu4e_meta = configure_file(
'VERSION' : meson.project_version(),
# project_build_root() with meson >= 0.56
'abs_top_builddir': join_paths(meson.build_root()),
'MU_DOC_DIR' : join_paths(datadir, 'doc', 'mu')
'MU_DOC_DIR' : join_paths(datadir, 'doc', 'mu'),
})
@ -53,6 +53,13 @@ mu4e_srcs=[
'obsolete/org-mu4e.el',
]
#
# with (development) emacs 28.50 / native compilation this doesn't
# _quite_ work; see: https://debbugs.gnu.org/db/47/47987.html
#
lispdir = join_paths(datadir, 'emacs', 'site-lisp', 'mu4e')
foreach src : mu4e_srcs
target_name= '@BASENAME@.elc'
target_path = join_paths(meson.current_build_dir(), target_name)
@ -61,6 +68,8 @@ foreach src : mu4e_srcs
build_by_default: true,
input: src,
output: target_name,
install_dir: lispdir,
install: true,
command: [emacs,
'--no-init-file',
'--batch',
@ -70,6 +79,9 @@ foreach src : mu4e_srcs
'--funcall', 'batch-byte-compile', '@INPUT@'])
endforeach
# also install the sources.
install_data(mu4e_srcs, install_dir: lispdir)
if makeinfo.found()
custom_target('mu4e_info',

View File

@ -266,38 +266,20 @@ details depend on your distribution. If you're using another
distribution (or another OS), the below can at least be helpful in
identifying the packages to install.
We provide some instructions for Debian, Ubuntu and Fedora; if those do not
apply to you, you can follow either @ref{Building from a release tarball} or
@ref{Building from git}.
We provide some instructions for Debian, Ubuntu and Fedora; if those
do not apply to you, you can follow either @ref{Building from a
release tarball} or @ref{Building from git}.
@subsection Dependencies for Debian/Ubuntu
@example
$ sudo apt-get install libgmime-3.0-dev libxapian-dev
# get emacs 25 or higher if you don't have it yet
$ sudo apt-get install emacs
# optional
$ sudo apt-get install guile-2.2-dev html2text xdg-utils
# optional: only needed for msg2pdf and mug (toy gtk+ frontend)
$ sudo apt-get install libwebkitgtk-3.0-dev
$ sudo apt-get install libgmime-3.0-dev libxapian-dev emacs
@end example
@subsection Dependencies for Fedora
@example
$ sudo yum install gmime30-devel xapian-core-devel
# get emacs 25 or higher if you don't have it yet
$ sudo yum install emacs
# optional
$ sudo yum install html2text xdg-utils guile22-devel
# optional: only needed for msg2pdf and mug (toy gtk+ frontend)
$ sudo yum install webkitgtk3-devel
$ sudo yum install gmime30-devel xapian-core-devel emacs
@end example
@subsection Building on Msys2
@ -348,10 +330,18 @@ Xapian, GMime and their dependencies must be installed.
@subsection Building from git
@anchor{Building from git}
Alternatively, if you build from the git repository or use a tarball
like the ones that @t{github} produces, the instructions are slightly
different, and require you to have autotools (@t{autoconf},
@t{automake}, @t{libtool}, @t{texinfo}) installed:
By default, @t{mu} use the Meson@footnote{@url{https://mesonbuild.com/}} build-system.
@example
$ git clone git://github.com/djcb/mu.git
$ cd mu
$ meson build && ninja -C build
$ sudo ninja -C install
@end example
For now, you can also use the (deprecated) @t{autotools} build setup,
assuming you have autotools (@t{autoconf}, @t{automake}, @t{libtool},
@t{texinfo}) installed:
@example
# get from git (alternatively, use a github tarball)
@ -368,29 +358,18 @@ $ sudo make install
After this, @t{mu} and @t{mu4e} should be installed @footnote{there's
a hard dependency between versions of @t{mu4e} and @t{mu} --- you
cannot combine different versions} on your system, and be available
from the command line and in Emacs.
from the command line and in Emacs.
You may need to restart Emacs, so it can find @t{mu4e} in its
@code{load-path}. If, even after restarting, Emacs cannot find
@t{mu4e}, you may need to add it to your @code{load-path} explicitly; check
where @t{mu4e} is installed, and add something like the following to your
configuration before trying again:
@t{mu4e}, you may need to add it to your @code{load-path} explicitly;
check where @t{mu4e} is installed, and add something like the
following to your configuration before trying again:
@lisp
;; the exact path may differ --- check it
(add-to-list 'load-path "/usr/local/share/emacs/site-lisp/mu4e")
@end lisp
@subsection Building using the meson build system
As an (experimental) alternative to the @t{autotools}-build, it is possible to use
the Meson@footnote{@url{https://mesonbuild.com/}} build-system instead.
@example
$ git clone git://github.com/djcb/mu.git
$ cd mu
$ meson build && ninja -C build
$ sudo ninja -C install
@end example
@subsection mu4e and emacs customization