On Feb 11, 2013, at 3:33 PM, Dirk Pranke wrote:

> On Mon, Feb 11, 2013 at 3:26 PM, Kevin Ollivier <kev...@theolliviers.com> 
> wrote:
>> 
>> On Feb 11, 2013, at 2:01 PM, Martin Robinson wrote:
>> 
>>> On Mon, Feb 11, 2013 at 1:41 PM, Kevin Ollivier <kev...@theolliviers.com> 
>>> wrote:
>>> 
>>>> Actually, it will, if anything, increase the workload. Because I use waf, 
>>>> I am able to use Python to auto-generate the list of sources to build. In 
>>>> other words, I tell it to build all sources in a defined list of base 
>>>> source directories, along with all sources in baseDirectory/portName 
>>>> subdirs (where in this case I set portName to wx) and 
>>>> FileName<portName>.cpp (e.g. FileNameWX.cpp if the port is wx), along with 
>>>> some additional similar rules for USE defines, like CF. Then if there are 
>>>> exceptions to these rules, I just filter them out of the results or 
>>>> explicitly add files when I need to, say if I need to compile a single Mac 
>>>> port source file. Since the WebKit tree is well-structured, this approach 
>>>> works quite well, with me having to define exceptions fairly rarely. The 
>>>> main issue I run into seems to be derived sources files that are no longer 
>>>> built / used but are still being generated. The performance hit of this is 
>>>> about 1 added second to my build, though on slower mach
 in
>> es it might be a couple seconds. For me, it's negligible given the benefit I 
>> get from it.
>>> 
>>> If I understand correctly, gyp is also capable of this kind of
>>> wildcard inclusion and exclusion. This will be the tool that allows
>>> the gyp build to be shared among many ports with the same source
>>> lists.
>> 
>> Yes, but that is not what I see when I check, say, 
>> Source/WebCore/WebCore.gypi. Which, BTW, has had around 500 revisions in it 
>> over the past 6 months in comparison to the ~10 lines of changes to source 
>> files in my patch-in-progress. So while gyp itself might have that feature 
>> in it, for whatever reason, the WebKit projects do not utilize that feature 
>> right now, so in practice, a switch to gyp means a switch away from 
>> rule-based compilation.
>> 
> 
> There's two different things going on here: ease of maintenance, and
> reproducibility. Using wildcards in the (meta-)build file itself can
> make things easier but make it harder to get reproducible builds since
> you might accidentally include files in the tree you didn't want.
> 
> When you're on a minority port, having wildcards certainly makes your
> life easier because you don't have to track every change we make
> explicitly, and it's probably easier for you to ensure you're doing
> things correctly in your own checkouts, so you don't have to worry
> about reproducibility as much.

If the filesystem always follows clearly defined rules, then I'd argue that 
reproducibility would not be an issue, though. WebKit currently doesn't always, 
but the vast majority of times it does. The cases where it doesn't are few and 
far between, and I don't think fixes would be all that difficult. You can 
always create specific locations, like perhaps a Shared directory, for any 
special cases that should explicitly be added by more than one, but a subset 
of, ports, and can't be properly encapsulated into a feature or use define. 
(For example, the WhateverNone.cpp are one of the special exceptions I have to 
account for, and they could go in there.)

I think the concern is really that this approach seems 'implicit' rather than 
'explicit'. With clear filesystem rules, though, it's not actually implicit. A 
file going into one of the directories listed as a primary build dir means it 
is to be built by all ports. So long as the project defines said rules, the act 
of putting it there is explicit, and expresses intent. This also, BTW, 
addresses the problem of old stuff being left in the tree. To remove it from 
the build, you have to remove it, so you can just leave it sitting in the tree 
for someone to stumble across later. (I'm pretty sure a number of the 
exceptions I define in waf are actually examples of this.)

> On the other hand, if you were to convert to using the same gypi files
> we were using, then you wouldn't have to track every change we make,
> either; you'd get them for free.

Yes, but this mechanism relies on WebKit's policies about fixing others' build 
systems to be effective. waf, on the other hand, removes that task almost 
entirely. Plus, see my other comments about all the other benefits of using a 
meta-build system. (And BTW, on that topic, in newer versions of waf there is 
even a "build system kit" that provides a starting point for building your own 
build system off of waf. :)

Thanks,

Kevin

> -- Dirk

_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-dev

Reply via email to