dri-devel.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
From: "Kai Wasserbäch" <kai@dev.carbon-project.org>
To: dri-devel@lists.freedesktop.org, mesa-dev@lists.freedesktop.org
Cc: Dylan Baker <dylan@pnwbakers.com>
Subject: Re: [Mesa-dev] [RFC libdrm 0/2] Replace the build system with meson
Date: Tue, 21 Mar 2017 19:36:31 +0100	[thread overview]
Message-ID: <793fefc2-bdbf-dbf7-e4a1-1f7dc12cf940@dev.carbon-project.org> (raw)
In-Reply-To: <149011764799.7993.7028908780598864763@localhost.localdomain>


[-- Attachment #1.1.1: Type: text/plain, Size: 7680 bytes --]

Hey Dylan,
Dylan Baker wrote on 21.03.2017 18:34:
> Quoting Kai Wasserbäch (2017-03-21 09:50:52)
>> I've just a few points, since I'm not too enthused by the prospect of having to
>> deal with yet another build system with yet another slightly different syntax.
>> But ultimately this is only a "my 2 cents" e-mail, since others are way deeper
>> involved with Mesa and their opinion is what matters in the end. Anyway, here
>> goes nothing.
>>
>> This might be a dumb question but isn't Meson (through wrap files) one of the
>> build systems that download crap from all over the internet silently? Ie. making
>> a packager's/distribution's life hell? There is
>> <https://github.com/mesonbuild/meson/wiki/Wrap-dependency-system-manual#toggling-between-distro-packages-and-embedded-source>
>> but that seems to imply a silent fallback to downloading stuff. I would rather
>> have a configure step that fails if a dependency is not met instead of building
>> something that can't be distributed. Or is there a magic "--distribution-build"
>> flag? If there isn't I would rather see a switch to CMake (as others have
>> pointed out in this thread: many projects in the vicinity of Mesa already use
>> CMake), but I get that there's a lot of hate for CMake (even though the Meson
>> syntax looks a lot like CMake, so I'm not really sure why?) and such a switch
>> would be unlikely.
> 
> I hadn't even noticed wrap before. Looking at it wraps they seem to be mainly
> aimed at windows and osx, where bundling is the norm, and not Linux and the BSDs
> where it's not. What I would expect if the windows guys wanted to use wrap is
> that we would have something like this:
> 
> if host_machine.system() != 'windows'
>     dep_zlib = dependency('zlib', version : '>1.0.0')
> else
>     subproj_zlib = subproject('zlib')
>     dep_zlib = subproj_zlib.get_variable('zlib_dep')
> endif
> 
> Which would make the dependency a hard requirement for non-windows system (i.e.
> the configure fails if zlib isn't found *except* on windows), and windows could
> fall back to wraps.
> 
> I have no plans to implement wrap for mesa in the port I would do, and would NAK
> any patches that used wrap on Linux or BSD. The windows devs can make their own
> choice on how to handle dependencies (I have no idea what their development
> environment looks like and don't want to make that choice for them). I agree
> with you it's not the way that Linux or BSD works, we have competent package
> management solutions without the need to automatically download sources.

I hope the rest of the Mesa project would follow such a rule. Because if there's
something I absolutely hate about all those "new" build systems, then it's their
tendency to just download stuff and build/include that. This seems to have risen
with Node and now spread into Rust and other parts of the FLOSS eco-system.

> As for cmake. I've written enough cmake in piglit to last me a lifetime, meson
> and cmake are the difference between python and perl, there may be some
> superficial similarities, but they are *not* the same. One of the things I'll
> reiterate that impressed me the most about meson is that it's syntax is simple,
> not Turring-complete, and opinionated.
> 
> In fact, piglit is the best reason not not use cmake I can come up with. There
> is an (admittedly clever) hack to allow building tests for each of the API's
> supported (GL, GLES1, and GLES2+). It does this by re-reunning the cmake for
> each API, which means you can't put things in the tests directory that can only
> be run once. Every time I try to make changes to the Cmake I spend about an hour
> trying to figure out why some code I've implemented doesn't work, only to
> remember that. Build systems aren't programming languages, they shouldn't be
> interesting, they should be declarative; cmake is a full scripting language with
> enough warts to make bash look cuddly.

Hm, I have written a lot of CMakeFiles.txt and so far I've always been rather
happy with them. Not sure what Piglit is doing though.

>> Dylan Baker wrote on 16.03.2017 22:25:
>>> Why bother, and why would we want this?
>>>
>>> First it's written in python, which means the potential developer base
>>> is massive. And it provides a recursive view for humans, but a
>>> non-recursive view for the system. This is the best of both worlds,
>>> humans can organize the build system in a way that makes sense, and the
>>> machine gets a non-recursive build system. It also uses ninja rather
>>> than make, and ninja is faster than make inherently.
>>
>> Well, CMake (and probably others), see
>> <https://cmake.org/cmake/help/latest/generator/Ninja.html>, can use/generate for
>> ninja too.
> 
> Sure, I think we've gone over this in the rather long thread, ninja is really
> just a "nice to have" since it's faster than make. The real advantages are:
> 1) one build system for linux and windows (reducing from 3 to 2 build systems)

CMake or SCons would do the same AFAICS. Plus CMake seems to be used in the
Android eco-system already
(<https://developer.android.com/ndk/guides/cmake.html>), which might mean it
could be easier for the Android downstreams of Mesa? Not sure on that though.

> 2) meson much simpler than autotools, scons, or (especially) cmake

OTOH CMake gives you CTest/CDash
(<https://cmake.org/cmake/help/latest/manual/ctest.1.html>), CPack
(<https://cmake.org/cmake/help/latest/manual/cpack.1.html>), dependency
visualisation
(<https://cmake.org/cmake/help/latest/module/CMakeGraphVizOptions.html>) and
many other things for (basically) free. Maybe that warrants some complexity?

> 3) recursive meson files, flat ninja file.

IIRC you would also get the same with CMake if you target Ninja.

>>> Meson is also a
>>> simpler syntax than autotools or cmake it's not Turing Complete by
>>> design nor does it expose python, again, by design. This allows meson
>>> itself to be reimplemented in a another language if python becomes a
>>> dead-end or a bottle-neck. It also makes it much easier to understand
>>> what the build system is doing.
>>>
>>> What's different about using meson?
>>>
>>> Well, apart from a faster builds and less magic in the build system? The
>>> configure flags are different, it uses -D<opt>=<value> more like cmake
>>> than the --enable or --with flags of autotools, although oddly it uses
>>> --prefix and friends when calling meson, but not with mesonconf, there's
>>> a bug opened on this. Meson also doesn't support in-tree builds at all;
>>> all builds are done out of tree. It also doesn't provide a "make dist"
>>> target, fortunately there's this awesome tool called git, and it
>>> provides a "git archive" command that does much the same thing. Did I
>>> mention it's fast?
>>
>> Nothing against git archive, but you then would need to maintain .gitattributes
>> in addition to the build system input files, correct? Right now the distribution
>> rules are just in the Makefile.in files, making them more visible and less
>> easily forgotten.
> 
> I've never had to use gitattributes for anything, are you thinking for setting
> export-ignore and export-subst?

Yep. AFAICT we have several files which aren't distributed if you do "make
dist". Those would need to be excluded from a tarball built with git archive as
well. AFAIK that's done through having .gitattributes files in the tree.

Anyway, I don't want to bikeshed here, so I'll be silent as long as any possible
future build system doesn't download stuff behind my back.

Thanks for your reply!

Cheers,
Kai


[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2017-03-21 18:36 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-16 21:25 [RFC libdrm 0/2] Replace the build system with meson Dylan Baker
2017-03-16 21:25 ` [RFC libdrm 1/2] Port build system to meson Dylan Baker
2017-03-16 21:25 ` [RFC libdrm 2/2] remove autotools build Dylan Baker
2017-03-16 21:32 ` [RFC libdrm 0/2] Replace the build system with meson Ilia Mirkin
2017-03-16 21:57   ` Dylan Baker
2017-03-17 10:05     ` Neil Armstrong
2017-03-16 22:36 ` Marek Olšák
2017-03-16 23:11   ` Dylan Baker
2017-03-17  1:53     ` Marek Olšák
2017-03-17  4:15       ` Dylan Baker
2017-03-17 21:18         ` Marek Olšák
2017-03-22 17:26   ` Jose Fonseca
2017-03-22 17:50     ` [Mesa-dev] " Marek Olšák
2017-03-16 23:35 ` Emil Velikov
2017-03-17  0:21   ` Dylan Baker
2017-03-17  0:41     ` Emil Velikov
2017-03-17  2:03       ` Jason Ekstrand
2017-03-17  2:28         ` Brian Paul
2017-03-22 17:59           ` Jose Fonseca
2017-03-22 20:57             ` [Mesa-dev] " Dylan Baker
2017-03-22 22:02               ` Rob Clark
2017-03-22 22:15                 ` Eric Anholt
2017-03-22 22:33                   ` Dylan Baker
2017-03-24 14:03               ` Jose Fonseca
2017-03-24 14:22                 ` [Mesa-dev] " Daniel Stone
2017-03-24 15:47                   ` Jose Fonseca
2017-03-25 20:15                     ` [Mesa-dev] " Rob Clark
2017-03-24 16:23                 ` Bas Nieuwenhuizen
2017-03-17  4:12         ` Dylan Baker
2017-03-17  6:02           ` Jonathan Gray
2017-03-20 13:55         ` [Mesa-dev] " Emil Velikov
2017-03-20 18:30           ` Matt Turner
2017-03-20 19:39             ` [Mesa-dev] " Emil Velikov
2017-03-20 21:28               ` Timothy Arceri
2017-03-20 21:38                 ` Jason Ekstrand
2017-03-21  5:00                 ` Jonathan Gray
2017-03-21 16:00                   ` Matt Turner
2017-03-23 12:23                   ` Jonathan Gray
2017-03-23 18:31                   ` Emil Velikov
2017-03-21 15:57               ` [Mesa-dev] " Matt Turner
2017-03-21 17:16                 ` Emil Velikov
2017-03-21 18:06                   ` Matt Turner
2017-03-21 18:56                     ` [Mesa-dev] " Emil Velikov
2017-03-21 19:08                       ` Jason Ekstrand
2017-03-21 19:10                       ` [Mesa-dev] " Matt Turner
2017-03-22 17:16                         ` Emil Velikov
2017-03-24 20:59                     ` Chad Versace
2017-03-24 20:44                 ` [Mesa-dev] " Chad Versace
2017-03-28 16:59                   ` Emil Velikov
2017-03-28 23:19                     ` Timothy Arceri
2017-03-21  5:10             ` Jonathan Gray
2017-03-21 16:11               ` [Mesa-dev] " Matt Turner
2017-03-24 16:58             ` randyf
2017-03-20 19:29           ` Rob Clark
2017-03-21 14:44 ` Jani Nikula
2017-03-21 15:13   ` Grazvydas Ignotas
2017-03-21 15:15     ` Ilia Mirkin
2017-03-21 16:16     ` Dylan Baker
2017-03-21 16:22   ` Dylan Baker
2017-03-22  4:23     ` [Mesa-dev] " Jonathan Gray
2017-03-22  8:24     ` Jani Nikula
2017-03-22 21:05       ` Dylan Baker
2017-03-23  8:13         ` Jani Nikula
2017-03-21 16:50 ` Kai Wasserbäch
2017-03-21 17:34   ` Dylan Baker
2017-03-21 18:36     ` Kai Wasserbäch [this message]
2017-03-21 21:16       ` Dylan Baker
2017-03-22 16:40 ` Alex Deucher
2017-03-22 17:07   ` Rob Clark
2017-03-22 20:10     ` [Mesa-dev] " Dylan Baker
2017-03-22 21:48       ` Rob Clark
2017-03-23 21:56         ` Greg Hackmann
2017-03-23 22:14           ` Colin Cross
2017-03-23 23:56             ` Dylan Baker
2017-03-24  0:03               ` [Mesa-dev] " Colin Cross
2017-03-24 16:54                 ` Dylan Baker
2017-03-23  1:18       ` [Mesa-dev] " Jonathan Gray
2017-03-23  1:38         ` Rob Clark
2017-03-24 13:42           ` Jose Fonseca
2017-03-24 17:13             ` Dylan Baker
2017-03-24 17:51               ` Eric Anholt
2017-03-24 18:34                 ` [Mesa-dev] " Daniel Stone
2017-03-24 19:10             ` Kristian Høgsberg
2017-03-24 19:44               ` Jose Fonseca
2017-03-24 20:08                 ` Kristian Høgsberg
2017-03-24 21:16                   ` Jose Fonseca
2017-03-24 21:20                     ` Jason Ekstrand
2017-03-24 21:34                     ` [Mesa-dev] " Rob Clark
2017-03-25  1:25                     ` Dylan Baker
2017-03-24 21:09               ` [Mesa-dev] " Rob Clark
2017-03-23 11:39       ` Emil Velikov
2017-03-23 17:54         ` Dylan Baker
2017-03-25  1:06         ` Kenneth Graunke
2017-03-22 22:30   ` [Mesa-dev] " Eric Anholt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=793fefc2-bdbf-dbf7-e4a1-1f7dc12cf940@dev.carbon-project.org \
    --to=kai@dev.carbon-project.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=dylan@pnwbakers.com \
    --cc=mesa-dev@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).