muon
muon copied to clipboard
An implementation of the meson build system in c99
muon
muon is an implementation of the meson build system in c99 with minimal
dependencies.
Non-features
- bug-for-bug compatibility with meson. In fact,
muonaspires to be stricter than meson in cases where meson's implementation seems error prone.muonuses the official meson documentation as its specification. - cli compatibility with meson.
muonhas different flags, subcommands, etc., and should not be renamed/symlinked to meson.
Other differences from meson are described in doc/differences.md
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 (bugs notwithstanding!) with the core of
meson for c and c++.
Things missing include:
- cross-compilation support
- build optimizations like pch and unity
- several
b_options - dependencies with a custom configuration tool
- all modules except for
fsandpkgconfig. (a smallpythonmodule shim is also available)
If you want to contribute, try using muon to build your favorite project.
Patches and bug reports welcome!
Dependencies
Bootstrap:
c99- ninja-compatible build tool
Bootstrap with libpkgconf support:
libpkgconfpkgconforpkg-configsh
[wrap-file] support:
libcurllibarchive
Documentation:
scdocfor muon.1 and meson.build.5python3py3-yaml
Tests:
python3
Building
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:
mkdir build
c99 -Iinclude src/amalgam.c -o build/muon
However, this version of muon will never be able to look up any dependencies.
If are going to need dependency() to work, use the provided bootstrapping
script, which links in libpkgconf if it is available.
./bootstrap.sh build
Stage 2:
build/muon setup build
ninja -C build
Testing
build/muon -C build test
muon has a few of its own tests for core language features, but the majority
of the tests are copied from the meson project.
Installation
build/muon -C build install
Contributing
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.