What's the current state of this?

Are you still looking for input on what's described below?

On 15/03/2013, at 1:38 AM, Adam Murdoch <adam.murd...@gradleware.com> wrote:

> Hi,
> 
> There's now a first cut of the new source set DSL in master. Right now, it 
> pretty much just mirrors the old structure: a project has a set of 
> 'functional source sets', and each functional source set has a single 
> 'language source set' for each supported language. The next step is to 
> introduce some flexibility in this model, so that you can use it to model 
> other structures. In particular, we want to be able to group source in more 
> interesting ways:
> 
> - Group multiple source sets of a given language to be compiled together. For 
> example, when building the 'release' variant of my Android application, I 
> want to take the 'main' java source and the 'release' java source and compile 
> them together as a single batch.
> - Group multiple source sets of different languages to be compiled together. 
> For example, I want to take my 'main' java source and my 'main' groovy source 
> and compile them together as a single (logical) batch.
> - Group multiple source sets together to form some logical thing. For 
> example, I want to take my 'main' java source and 'main' resource and 'main' 
> groovy source and bundle them together in a 'main' source set that I can pass 
> around as a single thing and add as input to various things or publish or 
> whatever.
> 
> When we add a source set to a binary, we need to be able to turn it into the 
> language specific views in order to compile it (or whatever it is we need to 
> do with it). For example, for Java source we need to know the Java language 
> level that the source conforms to and the compile dependencies that the 
> source has, plus some general stuff like the character encoding that the 
> source files use.
> 
> Ideally, this language specific view is read-only (and even better if it is 
> immutable) and somewhat more general than the view you would use to configure 
> the source sets.
> 
> The current plan is to have language-independent composite source sets and 
> language-specific (and strongly typed) source sets. The language source sets 
> are the 'atomic' groups of source, which you can combine in whichever way you 
> like by creating a composite source set and adding the appropriate source 
> sets to it. A composite source set would accept both language and composite 
> source sets. These source sets would all be configurable.
> 
> In addition to this, we would have a separate set of strongly typed 
> interfaces that define the language specific stuff you need to consume the 
> source. You can ask a source set to turn itself into one of these views (it 
> may just return `this`). The aim here is to keep separate the consumption of 
> source set from how they are defined and configured, and so allow many 
> different ways that source sets can be defined and built, but a consistent 
> way to plug them in as inputs to something else.
> 
> Things get a bit tricky when source sets need to be combined into a single 
> set, as the strategy for merging the language-specific stuff is, itself, 
> language-specific. There are a few approaches we could take:
> 
> 1. Composite source sets know how to combine language source sets. They would 
> need help from the language specific plugins for this, possibly by a language 
> plugin registering a converter of some kind.
> 
> 2. Composite source sets are just dumb collections of source sets. When you 
> add a composite source set to a binary, it is equivalent to adding each of 
> its children separately. A language plugin may make available a language 
> source set implementation that can combine other language source sets of the 
> same type, and you need to wire these up yourself.
> 
> 3. Composite source sets are just dumb collections of source sets as for #2, 
> and all language source sets can contain other language source set of the 
> same type.
> 
> At this stage, I think we'll probably go with #1, as it means that the 
> aggregation is completely the source set's business (though the source set 
> may ask some plugins for help), and nothing to do with the consumer.
> 
> Regardless, for any of these options, to add support for a new language you 
> need to provide a language specific source set, plus some strategy for 
> merging the language source sets, plus some rules for what to do when the 
> language source sets are added to a binary.
> 
> 
> --
> Adam Murdoch
> Gradle Co-founder
> http://www.gradle.org
> VP of Engineering, Gradleware Inc. - Gradle Training, Support, Consulting
> http://www.gradleware.com
> 
> Join us at the Gradle Summit 2013, June 13th and 14th in Santa Clara, CA: 
> http://www.gradlesummit.com
> 

-- 
Luke Daley
Principal Engineer, Gradleware 
http://gradleware.com

Join me at the Gradle Summit 2013, June 13th and 14th in Santa Clara, CA: 
http://www.gradlesummit.com


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to