4 ms·
Can you use a foreach loop?
by bonzini 4y ago
Can you use a foreach loop?
- oldgradstudent 4y agoI'm sure I can use any number of ugly workarounds. In many large projects, the build system is necessarily large and complicated. It should be treated like any other code, and would massively benefit from the most basic tool for writing clean, readable code - user-defined functions. Sadly, as much as Meson is tempting in other respects, without user-defined functions, it is unfit for human consumption. The excuse Meson uses, that user-defined functions would make it Turing-complete and therefore not statically analyzable is totally false. Adding user-defined functions without recursion does not make the language Turing-complete. On the contrary, as long as there is no recursion, you can inline the functions and create an equivalent code without functions.
- tristan957 4y ago> it is unfit for human consumption. Surely this is hyperbole since some of the largest open source projects consider it a viable build system. Systemd, Mesa, GStreamer, GNOME, Postgres. Would I be correct in assuming that you are coming at this conversation having never tried Meson?
- oldgradstudent 4y ago> Would I be correct in assuming that you are coming at this conversation having never tried Meson? I tried to port the project I've previously mentioned here from CMake to Meson build, but could not find a way of doing it with Meson build in a satisfactory way. The lack of user-defined functions is a show stopper because I have a complicated multis-stage build process. It is also very different between platform. Having to repeat parts of this process is disqualifying. A programming language, and a build language is a programming language, without user-defined functions is unfit for human consumption.
- bonzini 4y agoQEMU also has a complicated multi stage build process, and using foreach was not a workaround. Each directory sets up what it wants to build in a dictionary, and then the main meson.build does all the steps.
- oldgradstudent 4y agoSo it's like having ad hoc, informally-specified, bug-ridden functions calls, just without argument checking, type checking, localized error reporting, etc?
- bonzini 4y agoNo, not really. It's just a different, data flow based approach. The only thing I would use user-defined functions for is to structure the meson.build file in top-down manner, but each function would be called just once.
- sfpotter 4y agoCan you use a script written in another programming language to generate your intermediate targets?
- oldgradstudent 4y agoSure, I can write a script to do that. The script can examine the dependencies, see if any of them changed and then rebuild only if needed. It's like Greenspun's tenth law[1]: > Any sufficiently complicated build script contains an ad hoc, informally-specified, bug-ridden, slow implementation of make. But then, what do I need Meson for? [1] https://en.wikipedia.org/wiki/Greenspun%27s_tenth_rule https://en.wikipedia.org/wiki/Greenspun%27s_tenth_rule
- sfpotter 4y agoThat's not what I meant. Of course, if you wanted to roll your own build system, you could do that. But hopefully you're aware that's not what I'm suggesting. Meson provides custom targets, so Meson itself would examine the dependencies and rebuild if needed: https://mesonbuild.com/Custom-build-targets.html https://mesonbuild.com/Custom-build-targets.html Obviously this might not do what you need specifically, but it does deal with some of the use cases for user-defined functions.
- camgunz 4y agoHonestly, and I'm saying this with kindness, you are super hung up on Meson not having user-defined functions and their use of "Turing complete". Others have pointed out there are perfectly reasonable workarounds (external scripts and foreach loops aren't really that ugly), but you're just so miffed you refuse to consider them. A lot of build systems won't support what you're asking here. Most don't do multi-stage builds, most don't have the concept of functions, many rely on external tools (autotools, pkg-config, etc). They're not "unfit for human consumption", which is pretty offensive to the people who chose Meson for their projects as well as Meson developers. I get that you're offended by the situation. I might even agree with you in principle. But you're all over a Meson release thread, their 1.0 release thread even, shitting all over them, on Christmas Eve! Lighten up!