4 ms·
> 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
by 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.
- oldgradstudent 4y agoOf course I have custom build scripts that build a target from its dependencies. The point is that there are several such targets as part of building a single plugin. It is the build system that decides whether to run such build script and in what order in order to build the final result, depending on which sources and intermediate targets were updated. The entire point of having functions is to capture a "recipe" for building one type of target, and then be able to reuse it again and again.
- sfpotter 4y agoSounds like Meson isn't a very good match for your use case. That's too bad. Good thing there are other tools like CMake which are a better fit for you. It seems like you have also lost some time attempting to port your build over to Meson and failed, which was probably really frustrating. As a result, you really dislike Meson, going so far as to call it "unfit for human consumption". Many other people like Meson, and many large projects have gone so far as to switch to using Meson. It's great that it worked for them, and it's OK that it didn't work for you.