I think the best way to configure WebKit is to use a separate data file, 
neither a header nor a makefile or similar, that defines the options in a 
single place with clear syntax. Then everything else is generated from that. 
Such a system could cover runtime flags as well, which are even more scattered 
around the project than compile-time flags.

Moving logic from build files to the header is probably a move in the right 
direction, though of course it carries risk, particularly for less tested 
configurations.

-  Maciej

> On May 10, 2020, at 5:13 PM, Darin Adler <da...@apple.com> wrote:
> 
> Hi folks.
> 
> The Platform.h configuration file family has been useful for WebKit for a 
> long time. We created it to try to organize configuration options in WebKit 
> so the would not be spread out through the whole project.
> 
> One way to look at these, particularly the ENABLE options, is as a set of 
> configuration options that let each consumer of the WebKit source code create 
> a unique flavor of WebKit with the particular features they want enabled 
> turned on and others turned off. Another is to think of this as a mechanism 
> for keeping decisions made by the WebKit contributors organized and easy to 
> understand.
> 
> If these truly are WebKit consumer options, then it’s important they be set 
> as part of the build process. The macros can be defined with a build and 
> configuration system outside WebKit, and the Platform.h headers should 
> interpret those values correctly.
> 
> On the other hand, if we are just trying to keep our decisions straight, then 
> it would be best if the logic for what is on and what is off by in the header 
> files, written with preprocessor macro logic, and not spread across multiple 
> make files and scripts.
> 
> Thus I think the pattern on macOS, for example, of setting these in .xcconfig 
> files doesn’t make a lot of sense. I think the .xcconfig files should compute 
> the things that need to be determined about the build environment, but the 
> configuration decisions should be in files like PlatformHaveCocoa.h, for 
> example.
> 
> I think the guideline should be like this:
> 
> All code to compute configuration should be in the Platform.h files, not in 
> makefiles, with only the following exceptions:
> 
> 1) Options like ENABLE(XXX) that some ports wish to offer as options to 
> people building WebKit can have overridden values in makefiles. But even 
> these options should have sensible defaults in the Platform.h headers that 
> express the current status of the port from the point of view of the port’s 
> maintainers. Ideally we’d find a way to not repeat these default settings 
> twice.
> 
> 2) In some cases, the build machinery needs to contribute to things like 
> feature detection. So on some platforms, things like HAVE(READLINE) would be 
> set correctly by the build system.
> 
> Options intended to be set by the environment would carefully be wrapped in 
> #ifndef.
> 
> But other options, which simply express relationships between configuration 
> elements, are designed to be set by Platform.h and not overridden by the 
> environment, and so they would not be wrapped in #ifndef. Many HAVE options 
> and most USE options would fall into this category.
> 
> What do you all think?
> 
> — Darin
> _______________________________________________
> webkit-dev mailing list
> webkit-dev@lists.webkit.org
> https://lists.webkit.org/mailman/listinfo/webkit-dev

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

Reply via email to