How to convert autotools to meson
GNU's build system ("autotools", ./configure, etc) was previously the main one used by most of the open source world. However, lots of high profile projects (GNOME, etc) have been switching from it to a new python-based one, called meson.
Many things in pkgsrc have needed to be updated to use meson, so here's a guide on doing it properly.
Basics
You won't need the following, so delete them:
GNU_CONFIGURE= yes
USE_LIBTOOL= yes
USE_PKGLOCALEDIR= yes
Neither meson or cmake (another increasingly popular alternative) uses libtool to make shared libraries.
USE_PKGLOCALEDIR
is also actively harmful here.
You will need the following:
.include "../../devel/meson/build.mk"
Tools
Only the following tools are generally needed:
USE_TOOLS+= pkg-config msgfmt xgettext
Nearly every meson package needs pkg-config, since it's the main way it resolves dependencies. This also means that dependencies where the buildlink isn't included won't be detected.
meson does not use intltool or other gettext tools than xgettext
and msgfmt. If your package uses i18n.gettext
in a meson.build
file
it needs xgettext, and if it uses i18n.merge_file
it needs msgfmt.
It's easy to check this with grep.
Python
Every Meson project uses Python to build, but many don't install Python scripts and don't need it to run, so you should add the following:
PYTHON_FOR_BUILD_ONLY= tool
If the build process needs a python3
, python2
, or python
binary to
execute scripts during the build, you should also include the following:
.include "../../lang/python/tool.mk"
This will automatically create a python executable with the appropriate suffix (or lack of suffix) for the duration of the build.
pkgconfig overrides
Libraries that use meson generally generate .pc files for use by pkg-config. This happens during the build, while previously they would have been pregenerated.
You should search for .pc files after the build is complete and set the appropriate flags:
PKGCONFIG_OVERRIDE_STAGE= pre-install
PKGCONFIG_OVERRIDE+= output/meson-private/glesv2.pc
This is necessary so that pkgsrc sets the correct runtime path for libraries.
Remove any old references to nonexistent .pc files from the old build system in the PKGCONFIG_OVERRIDE.
gettext issues on NetBSD
NetBSD includes an (old, pre-GPLv3?) version of msgfmt. This doesn't have the new --desktop or --xml flags, so you'll get a build error if a package attempts to use these.
There's an easy workaround:
.include "../../mk/bsd.prefs.mk"
# msgfmt: unknown option -- desktop
.if ${OPSYS} == "NetBSD"
TOOLS_PLATFORM.msgfmt=
.endif
Flags
Flags of the following form:
CONFIGURE_ARGS+= --enable-opengl
Generally now take the following form:
MESON_ARGS+= -Dopengl=true
Check the meson_options.txt
file.