File:  [NetBSD Developer Wiki] / wikisrc / pkgsrc / how_to_convert_autotools_to_meson.mdwn
Revision 1.3: download - view: text, annotated - select for diffs
Tue Nov 10 19:32:35 2020 UTC (3 years ago) by nia
Branches: MAIN
CVS tags: HEAD
say where to look for flags

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_CONFIUGRE=	yes
	USE_LIBTOOL=	yes

Neither meson or cmake (another increasingly popular alternative) uses
libtool to make shared libraries.

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.

CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb