Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[RFC 0132] Meson Builds Nix #132
base: master
Are you sure you want to change the base?
[RFC 0132] Meson Builds Nix #132
Changes from 14 commits
9714f41
85759af
003393e
3e0be88
d4497fd
18c732d
a843fb1
0bf382d
6c3f5d2
bd4bfe9
e1a0620
0060937
265020c
b7b859b
3eea629
8650a36
ab2dec1
6980048
b58c8b6
17069b6
9821ad2
ab42c2f
3111e49
9d89692
dca9276
38f3c44
714457b
894946b
72dec20
6d8f6bd
94eb5c7
934555d
16e2033
8dadf6a
587d349
86bc4bc
9ad0874
5e621af
3de1372
c5a9e48
3f1182c
e361407
a228c6f
aef0827
212bf63
4df4944
0a41323
e071944
d8904e9
680e6b8
0430b71
61ad7c4
afca581
9bb63e0
e6b4e05
719562c
e4715c4
f37cedd
5b0a734
56c86fa
b03e5b6
File filter
Filter by extension
Conversations
Jump to
There are no files selected for viewing
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you provide examples to changes that affect compatibility? Are there issues you can link?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@asymmetric bunch of stuff; some of the issues were to do with hardcoded library dependencies that are set up differently on *BSD, the wrong versions of some headers were included on BSD (sometimes headers have names that differ). there were also issues with locating external components iirc.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Right, but I was suggesting these issues could be mentioned in the RFC itself, possibly with references!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thats a fair point, but more detailed info of these issues would require someone to attempt building nix on multiple different platforms, and take notes. not saying its a bad idea/shouldnt be done but it would take some time
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree with @asymmetric, this needs some concrete examples for the point to really stand
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
NixOS/nix#6991 << example :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, and that PR has a very illuminating comment from me:
This issue has been separately discovered by a variety of people building nix for use as a packager manager but not as an OS. Meson would solve the problem for free, as part of providing functionality that Make doesn't have and is apparently needed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I can see why that could be so in the long run, but it's an indirect and non totally obvious consequence. It's probably worth explaining a bit more
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe @p01arst0rm can provide more tangible evidence for it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
meson allows standardised methods of creating targets; dependencies, libraries, binary files, macros, etc. due to design these blocks are incredibly easy to understand in their design, and the implementation of each is standard no matter the project; each of these implementations is heavil documented, explain how and how not to format these targets. meson code is well known for being self documenting;- not in a "read the code and you'll understand it maybe", more like every single piece of standard meson code explains exactly what its doing and includes a short essay of exceptional documentation regarding its use. this style is so influential that competing build systems are already attempting to follow in mesons' footsteps. the only time things maaay get confusing are when you start creating non standard targets to do weird things (known as custom_targets). good meson code should have as little of these as possible.
tldr meson code easy to read and lots of docs means you're never looking at a meson build command confused about what it does.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I trust you on that, but I'd rather see this written in the RFC than hidden in a comment thread ;)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would definitely keep this drawback in mind and explore alternatives that don't expand the bootstrap closure.
Maybe you could also mention what the current bootstrap closure is?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@asymmetric please read the prior PR to read discussions; meson does not increase bootstrap dependencies, it dramatically decreases them. available tools are provided that only require a working c compiler; c --> muon --> samurai --> nix. the benefit & end goal of this is removing gnu userland tools as a requirement of building, dramatically decreasing the amount of tools needed for bootstrapping.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You mean NixOS/nix#3160?
Didn't you say in the RFC that Meson is in Python? What I wanted to say with my comment is to emphasize the idea that we shouldn't increase the bootstrap closure, and so I approve that you mentioned it and provided alternatives that don't increase it.
But AFAIU Python is not part of the current Nix bootstrap closure, so if we use straight Meson, rather than muon and/or Ninja, we would indeed increase it. Is that correct?
If that's the case, why wouldn't we choose muon directly?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Who said that muon isn't "directly" chosen?
Maybe the confusion here is that the RFC is to use "Meson" the buildsystem description DSL, but not specifically to bootstrap Nix with "Meson" the reference implementation of "Meson".
What's the goal of this review comment? To rename this RFC to
???
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That was indeed the thing that confused me
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe we need a line in the RFC that says "meson the dsl language != meson.py the tool"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As far as I know, M4 (the somewhat obscure macro language) and Bash, and whatever autoconf brings.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
some required build programs include
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For the sake of completeness there should probably also be an item here about bazel, buck & friends
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe it is well summarized on the examples of waf and premake.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not exactly. The argument against them is that they are a language-specific DSL, but that's not the case of Bazel or Buck.
They do have a bootstrap problem ofc, but it's a different one (single implem, lots of deps)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A different one, and considerably worse than Meson. Cmake would be way better than them.
I do not believe they deserve more than a mention. If anyone is interested on picking Buck or Bazel or Imake, kudos to them!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Well now, let's be fair, there's definitely more than one implementation of Bazel.
The original design of it is Google's internal closed-source thing designed specifically to meet Google's distributed cloud computing needs, after all. ;) Bazel itself is just an open-source attempt to make
BUILD
/*.bzl
files look like an acceptable thing for other projects to include to make Google's life easier. ;)There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My list of complaints:
I know nothing about them
They are built in Java
There is no alternative implementation in another language like C or C++ or even Python
I do not like Java
Java support on Nixpkgs is not the best in this planet
Bootstrap Java is a hell:
Java is heavier than Python
Have I said I do not like Java?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yep sounds about right 🤣
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe too late. Has Zig been considered? It claims being an alternative:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the entire point of meson is it offers the ability to compile all projects regardless of source language, build environment, linker, or compiler configurations. it offers flexibility and simplicity which allows easy maintainability into the future. the zig buildsystem is designed for c/c++ and is not nearly as well documented or flexible.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also Zig is oriented to Zig itself, while Meson is general-purpose.
Using Zig as Autotools replacement would be as worse as - or even worser than - using Bazel or Waf.