~lattis/muon

meson implementation in C

Vincent Torri via muon

2 days ago

Vincent Torri via muon

2 days ago
muon logo

#muon

muon is an implementation of the meson build system in c99 with minimal dependencies.

#Features

  • muon analyze - a static analyzer for meson.build files. Capable of doing type inference, checking unused variables, undeclared variables, etc.
  • muon fmt - a meson.build code formatter
  • An interactive stepping debugger with the dbg() function.
  • Fast

#Status

muon is close to feature-complete with the core of meson for c and c++.

See the status page for more detailed information.

Things missing include:

  • cross-compilation support
  • build optimizations like pch and unity
  • some b_ options
  • dependencies with a custom configuration tool
  • many modules

Other differences from meson are described in doc/differences.md

If you want to contribute, try using muon to build your favorite project. Patches and bug reports welcome!

#Dependencies

Essential:

  • c99
  • a ninja-compatible build tool (samu can be optionally bootstrapped with tools/bootstrap_ninja.sh)

For pkgconf support:

  • libpkgconf
  • pkgconf or pkg-config

For [wrap-file] support:

  • libcurl
  • libarchive

To build documentation:

  • scdoc for muon.1 and meson.build.5
  • python3 and py3-yaml for meson-reference.3

To run most project tests:

  • python3

#Install

If you already have meson or muon and are not interested in bootstrapping, you can just do a typical meson configure, build, install:

$meson setup build
cd build
ninja build
$meson test
$meson install

Otherwise, you must bootstrap muon.

The bootstrapping process has two stages. The first stage produces a muon binary capable of building itself (but not necessarily anything else). The second stage produces the final binary.

Stage 1:

./bootstrap.sh build

Optionally, if your system does not provide a ninja-compatible build tool, you may use the provided ninja bootstrapping script.

./tools/bootstrap_ninja.sh build
ninja=build/samu

Stage 2:

build/muon setup build
$ninja -C build
build/muon -C build test
build/muon -C build install

#Contribute

Please refer to the contributing guide before sending patches. Send patches on the mailing list, report issues on the issue tracker, and discuss in #muon on libera.chat.

#License

muon is licensed under the GPL version 3 (see LICENSE). Tests under tests/project were copied from the meson project tests and are licensed under Apache 2.0.

#Credits

Although I had already had the idea to re-implement meson in C, I was initially inspired to actually go out and do it when I saw boson. muon's code was originally based on boson, though has since been almost completely rewritten.