On Bazel and Open Source
julipedia.meroh.net
julipedia.meroh.net
I think there is probably room for a blaze-lite that relaxes a few of the restrictions blaze requires and is written in an easier to deploy language. Go perhaps?
The build rule language and the correct dependency specification and tracking are the most important pieces to have in my opinion. You could drop the expectation that all the dependencies including the compiler toolchain are in the source repo without losing too much.
It's all Python. It's built so you can include one Python file in your source tree and install nothing but Python.
A relatively small core handles dependency tracking and shuffling flags from the user to tasks. I can't believe how fast it is, considering it is reading the files and computing hashes.
While user scripts have access to all of Python, you can limit yourself and write rules in a high level build rule style that's only slightly more Pythonic than Bazel, et al. Basically it's bld.program(source=['main.c'], use=['foo']) or bld(features='c cprogram', source=['main.c'], use=['foo']) instead of cc_binary(srcs=['main.c'], deps=[':foo']).
Adding rules can be done in various ways, including genrule-style shell commands, registering a task class by file extension, and a very flexible system of registering methods to hook into the "features" attribute.
With surprisingly little work, you can layer your own build language on top of the core modules. Demos are provided that parse makefiles or generate rules by searching the source directory with no user script [2].
Relative to the OP's concerns, a configure step is required and can search the system, call pkg-config, write config.h, etc. Arbitrary command line options can be added by shared tools and user scripts. Install, dist, and distclean are all there.
[1] - https://waf.io/
[2] - https://github.com/waf-project/waf/tree/master/build_system_...
AFAICT, both are written in Python, which is a more palatable dependency than Java. Hm actually Buck is mostly Java, with a Python buck.py program.
I think GYP is more like a build system generator than a build system. It was more like autoconf (although quite different semantically). The original goal was to generate Visual Studio and XCode projects. And it also generates Ninja files.
Blaze/Bazel is not as portable, since it doesn't do Windows.
I guess the OP needs to update his Java knowledge.
Out of my head without searching the Internet, I am aware of JVMs for Aix, HP-UX, Solaris, GNU/Linux, Windows, OS/400, z/OS and their respective processors.
Not counting the amount of hardware vendors offering commercial JVMs like IBM, Atego, Aicas, IS2T
Which sums it up to x86, x86-64, ARM (including Cortex ones), MIPS, PowerPC, RX and a few others.
But lets just bash Java for brownie points.
FWIW, have used autotools, but mostly use scons.
Build systems can be eye-opening. tup, redo, memoize.py and Bazel all demonstrate different, interesting paradigms.
Build systems are never fun, agreed. That's not the point. The point of Bazel is having one that is correct and efficient. That makes a huge difference, though not with the same out-of-box-experience as the "easier to use" build systems.
We'll see where this goes, but I'd encourage you to recognize the difference in what is being attempted here (admittedly, not for the first time, but this design has a pretty established track record... note the comments here of people actually missing the Google build system).
But a good tool, however mundane the task, will always be fun. This is my second Law of Engineering.
It absolutely is a POV thing. There is a reason why Make wasn't implemented with the features and design objectives of Bazel.
> But a good tool, however mundane the task, will always be fun. This is my second Law of Engineering.
A good tool will always be fun where "good" is based on your criteria, which is based on your context.
Unfortunately swtoolkit seems to be dead since a couple years ago.