4 ms·
> In particular, Meson was going to refuse to accept the MSVC+gfortran combination that was in use in conda-forge. This sounds like a bug? The point of a build
by tedunangst 3y ago
> In particular, Meson was going to refuse to accept the MSVC+gfortran combination that was in use in conda-forge.
This sounds like a bug? The point of a build tool is to run the commands you tell it, not tell you, sorry dave.
- rbancroft 3y agoThe article is well-written and detailed, however I was taken aback by the claim that meson is 'widely used for C & C++ projects'. I've come across bazel more often than meson. I guess because meson is written in python it seemed like a good choice for SciPy, and it worked out in the end so congratulations. But yeah, I think CMake is still the gold standard despite all its quirks, complexities and problems.
- bsder 3y agoMeson is a front end. Edit: Caution: This statement is incorrect--It can generate CMakefiles as a backend. It can also generate build files for MSVC. It can also generate standard Makefiles. Edit: Corrected downstream. CMake can make Ninja files which Meson also makes. I got this backwards but kept the edit so people won't get confused. CMake is NOT a gold standard. CMake is an agglomerative disaster. For example: try getting CMake to accept zig as your compiler. "Oh, your compiler command has a space in it? So sorry. I'm going to put everything after the space in all manner of weird places. Some correct--some broken--some totally random." If you're lucky CMake crashes with an inscrutable message. If you're unlucky, you wind up with a compiler command that fails in bizarre ways and no way to figure out why CMake is doing what it did. This is my experience with CMake every damn time--some absolutely inscrutable bug pops up until I figure out how to route around it. If I'm really unlucky, I have to file a bug report with CMake as I can't route around it. Sure, if some unfortunate soul has beaten CMake into submission and produced a functioning CMakefile, CMake works. If YOU are the poor slob having to create that CMakefile, you are in for worlds and worlds and worlds of pain.
- spookie 3y agoI agree, I stay away from CMake whenever possible. I've tried so much to understand it, and yet, it kicks me around like a pinata
- akoboldfrying 3y agoSame. By now I almost have an allergic reaction to thinking about using it. I know the basic thing I'm trying to do is not going to work, and that I'm going to wind up opening 20 browser tabs that alternate between (1) trying to understand from first principles how to do it properly (and getting frustrated going around in circles through their labyrinthine yet thoroughly incomplete docs), and (2) just desperately searching the rest of the web for the right incantation to whisper (and getting frustrated by all the blog posts and forum answers that describe how to do the thing before they went and changed how everything works). Feeling the rage and despair build as hours roll by, and you're still staring at a screen full of the most cretinous syntax ever excreted into the world.
- bonzini 3y agoNote that Meson does not generate CMake files. It generates MSVC or ninja files.
- wenc 3y agoProjects that use Meson https://mesonbuild.com/Users.html https://mesonbuild.com/Users.html Includes Gimp, Gtk+, nautilus, Postgres, qemu, Wayland…
- deleted 3y ago[deleted]
- galangalalgol 3y agoI thought conan was the standard? Or what about hunter? Vcpkg? And now with modules getting added to the language and being supported ro varying degrees by all these options, I don't understand how the c++ ecosystem won't fracture into a pile of unusable garbage.
- spookie 3y agoVcpkg is a Microsoft thing. No project I know, besides those targeting Windows only even consider it. But, I'm probably biased by my software choices.
- galangalalgol 3y agoI know orojects that have chosen it for linux only work, but I got the feeling they regretted it. Conan is what I was using before I switched to cargo, and it was fine as long as everything in your tree was conan. Dependencies you could wrap, but dependents were a headache.
- davisp 3y agoIf you’ve ever wished that CMake’s ExternalProject pattern could be lit on fire, launched into the sea, fished out of the sea and then incinerated via tactical nuclear strike before bundling up the ashes that are then launched into the sun, vcpkg is definitely something you should look into. I’m no Microsoft fanboy. I’ve been in software dev for roughly 20 years at this point so generally view anything from Microsoft with genuine suspicion, so I get the hesitation to take it seriously. But it works across the big three (Windows, Linux, macOS) and is MIT licensed so I’d definitely recommend giving it a whirl. The only serious knock against it is that they went the OG Homebrew route with a single Git repo containing all of their ports (equivalent to Homebrew Formulae). And then whoever designed the Git repo approach also knew slightly too much about Git internals and leveraged tree-ish refs as part of the versioning design which is just weird and confuses anyone that’s not spent time tearing into Git’s object model. So basically, vcpkg is honestly a good tool that does what it does fairly well. It may not do everything you need, but if it can it’s amazing. Also, the buried lede here is how vcpkg handles binary caching. Think of it like sccache but at the dependency level. I’ve seen it drop CI runs from over an hour to 10m purely because it helps skip building dependencies without resorting to bespoke caching strategies.
- gavinhoward 3y agoI agree. Disclaimer: author of a soon-to-be released Meson competitor. But one obscure, little gem of a rant that taught me what you just said is [1]. tl;dr: Build systems should run the commands you tell them to run, period. Because sometimes, the programmer actually does know what he's doing. I am ashamed to admit that before I read that comment, I was thinking about making my build system magical. But after reading that comment, I realized that "magic" is why people hate build systems. [1]: https://ofekshilon.com/2016/08/30/cmake-rants/#comment-29273 https://ofekshilon.com/2016/08/30/cmake-rants/#comment-29273
- chubot 3y agoI read this 2021 comment/rant and didn't find it illuminating or insightful I just want a tool that doesn’t make ANY assumptions about compiler flags or compilers or how my project directory structure is laid out. I can do the leg work of inputting all the exact parameters and build configurations into the tool. I just need the tool to incrementally compile my code in a parallel fashion without HACKS That's exactly what Ninja is, and it's existed since 2012. CMake is a flawed generator for Ninja, but you can write your own. I did that for my project, as explained here - https://lobste.rs/s/qnb7xt/ninja_is_enough_build_system#c_tutskb https://lobste.rs/s/qnb7xt/ninja_is_enough_build_system#c_tu...
- gavinhoward 3y agoUnderstandable that you wouldn't find it insightful. I found it insightful because I didn't know. Also, how angry the commenter was; I'd been struggling to figure out why people hate build systems, and the hate pouring out from that comment was palpable enough to point me in the right direction. Anyway, I've already read your comments on lobste.rs, and I'm glad it's worked for you. Ninja is great (my build system will be able to read Ninja files), but there are two major problems. First, you still need a generator. Most people don't think about reinventing the wheel like you do, so CMake still comes up. And a generator can still have the magic that people hate. Second, it's still limited in what you can do. Sometimes, you need something more complex to make your build happen. Ninja can definitely take care of the 95% case, and I actually will encourage people to use it before they use mine. I'm only going to be targeting the people with the 5% case, or that hate all of the widely-used generators. I fall into the latter category myself.
- aidenn0 3y agoMeson does more than run the command you tell it, it can also synthesize those commands (so you can support MSVC/gcc/clang without writing build rules). If you ask it to synthesize a command for a combination it doesn't know about, of course it's going to tell you "sorry dave"
- tedunangst 3y agoYeah, sure, 40 years ago make had implicit rules for building .o files from .c files so you didn't have to write them, but if you told it your compiler was going to be bananac, it wouldn't refuse to run.
- bonzini 3y agoIt's the MSVC linker that would complain. The problem is that the C runtimes used by MSVC and gfortran (whose own runtime library is written in C) are not ABI-compatible. The hack that numpy used was to link the Fortran objects into a DLL to add a level of indirection (the import library) that would pacify MSVC. So there was some extra work needed to create these DLLs. Either in the build description files, or in Meson. The SciPy people didn't want to implement this indirection in either place, and the Meson developers were not eager to help them either (they did help in general, for example with Fortran and Cython support; but they don't want to provide footguns) because it was indeed a hack. It only worked because the Fortran side didn't use files that were opened on the Python/C side, for example. https://web.archive.org/web/20180711144501/https://pav.iki.fi/blog/2017-10-08/pywingfortran.html#building-python-wheels-with-fortran-for-windows https://web.archive.org/web/20180711144501/https://pav.iki.f...
- bsder 3y agoThank you for the clarification. Meson refusing to do something and the developers not deeming that a bug seemed really unusual.
- bonzini 3y agoOh, Meson is definitely a "sorry Dave" kind of build system. In many cases it's extremely opinionated, though I have only found a couple cases that get into "infuriating" territory. It does compensate by generally preserving a lot more sanity than its competitors, and having a readable and maintainable description of the build system.
- spookie 3y agoI appreciate the sanity it brings. More software should be like that, as you implied. Or, so I read as such.
- deleted 3y ago[deleted]