dub -> meson

rikki cattermole rikki at cattermole.co.nz
Wed Apr 17 06:52:46 UTC 2019


On 17/04/2019 6:43 PM, Petar Kirov [ZombineDev] wrote:
> On Tuesday, 16 April 2019 at 16:42:24 UTC, H. S. Teoh wrote:
>> On Tue, Apr 16, 2019 at 06:13:30AM +0000, JN via Digitalmars-d wrote: 
>> [...]
>>
>> What we really need is a dub replacement that has a different, more 
>> flexible design that can accomodate things that people want to do, 
>> that the current dub simply cannot due to its design limitations.  
>> There are some promising ideas in the other thread about improving 
>> dub, and I hope that discussion will eventually lead to a redesign / 
>> revamp of dub that makes it more viable for my use case.
>>
>>
>> T
> 
> IMO, the best course of action is:
> 1.0. Create a generic foundation based on DAG for describing targets and 
> their relations.
> This can start as a completely independent project with zero dependencies.
> 
> 1.1. On top of this core functionality we can add an interoperability 
> layer that allows exporting this abstract representation to other build 
> system formats.
> 
> 1.2. We can reuse the existing build systems written in D as a build 
> backend.
> 
> 2.0. Integrate the new build system foundation in Dub 2.0:
> 
> 2.1 Replace dub's current execution code with this new core while 
> keeping backwards compatibility with existing dub projects
> 
> 2.2 `dub build` consists of two general steps: 1) fetching dependencies 
> 2) building each project in the set { dependencies..., top-level project 
> } in topological order. (Of course there are many other (sub)steps, 
> which I'm mentioning here for simplicity.) Now that in 2.1 we replaced 
> Dub's existing execution code with the new build foundation we have the 
> option to not execute those steps directly, but instead use Dub as a 
> meta build-system which can generate build description for other build 
> systems to execute.
> 
> 2.3 Allow describing complex builds based on the foundation layer. This 
> can be done either declaratively, directly in dub.json / dub.sdl, or dub 
> can call to a D script that generates a JSON describing the build 
> dependencies that the core described in 1.1 can read.

That's going to require a ton of work and refactoring.
But it would be well worth funding after "1.0".


More information about the Digitalmars-d mailing list