Package: ronin
A straightforward but powerful build system based onNinjaandPython, suitable for projects both big and
small.Rōnin comes infrustration-free
packaging. Let’s build all
the things!FeaturesCurrently supported out-of-the-box: allgcclanguages,Java,Rust,Go,Vala/Genie,pkg-config,Qt tools,sdl2-config, andbinutils.It’s also easy to integrate your favoritetesting
framework.“Based on Python” means that not only is it written in Python, but also
it usesPython as the DSLfor build scripts. Many build systems
invent their own DSLs, but Rōnin intentionally uses a language that
already exists. There’s no hidden cost to this design choice: build
scripts are pretty much as concise and coherent as any specialized DSL.
Youdon’tneed to be an expert in Python to use Rōnin, but its power
is at your fingertips if you need it.Rōnin supportsUnicodethroughout: Ninja files are created in UTF-8
by default and you can include Unicode characters in your build scripts.Python 3 is recommended, but Rōnin can also run on Python 2.7.DownloadThe latest release is available onPyPI, so you can install withpip,easy_install, orsetuptools. On Debian/Ubuntu:sudo apt install python3-pip
sudo -H pip3 install roninSince Ninja is just one small self-contained executable, it’s easy to
get it by downloading thelatest
release. Just make
sure it’s in your execution path, or run your build script with--setninja.command=and give it the full path toninja. Older
versions (they work fine) may also be available in your operating
system. On Debian/Ubuntu:sudo apt install ninja-buildDocumentationAn undocumented system is a broken system. We strive for coherent,
comprehensive, and up-to-date documentation.A detailed user manual is available on thewiki.If you prefer to learn by example,there are
many.Rich API docs available onRead the
Docs.FeelingsGuiding lights:Powerful does not have to mean hard to use:optionalauto-configuration with sensible,overridabledefaults.Complex does not have to mean complicated: handle
cross-compilation and other multi-configuration builds in a single
script with minimal duplication of effort.Design principles:Don’t hide functionality behind complexity: the architecture
should be straightforward. For example, if the user wants to
manipulate a compiler command line, let them do it easily. Too many
build systems bungle this and make it either impossible or very
difficult to do something that would be trivial using a shell script.Pour some sugar on me: make common tasks easier with sweet
utility functions. But make sure that sugar is optional, allowing the
script to be more verbose when more control is necessary.Don’t reinvent wheels: if Python or Ninja do something for us,
use it. The build script is a plain Python program without any
unnecessary cleverness. The generated Ninja file looks like something
you could have created manually.FAQDo we really need another build system?Yes. The other existing
ones have convoluted architectures, impossible to opt-out-from
automatic features, or are otherwise hostile to straightforward
hacking. After so much wasted time fighting build systems to make
them work for us, the time came to roll out a new one that does it
right.Python is too hard. Why not create a simpler DSL?Others have done
it, and it seems that the costs outweigh the benefits. Making a new
language is not trivial. Making arobustlanguage could take years
of effort. Python is here right now, with a huge ecosystem of
libraries and tools. Yes, it introduces a learning curve, but getting
familiar with Python is useful for so many practical reasons beyond
writing build scripts for Rōnin. That said, if someone wants to
contribute a simple DSL as an optional extra, we will consider!Why require Ninja, a binary, instead of building everything in 100%
Python?Because it’s silly to reinvent wheels, especially when the
wheels are so good. Ninja is a one-trick pony that does its job
extremely well. But it’s just too low-level for most users, hence the
need for a frontend.Why Ninja? It’s already yesterday’s news! There are even faster
builders.Eh, if you ignore the initial configuration phase, and are
properly multithreading your build (-jflag in Make), then the
time you wait for the build to finish ends up depending on your
compiler, not the build system. Ninja was chosen because of its
marvelous minimalism, not its speed. Ninja is actuallynot
muchfasterthan Make. For a similarly minimalist build system, seetup.Similar Projectsbfg9000: “bfg9000 is a
cross-platform build configuration system with an emphasis on making
it easy to define how to build your software.”emk: “A Python-based build
tool.”Craftr: “Craftr is a next generation build
system based on Ninja and Python that features modular and
cross-platform build definitions at the flexibility of a Python
script and provides access to multiple levels of build automation
abstraction.”Meson: “Meson is an open source build
system meant to be both extremely fast, and, even more importantly,
as user friendly as possible.”pyrate: “pyrate is
a small python based build file generator targeting ninja(s).”Waf: “The meta build system.”