On 16/04/2013, at 9:09 PM, Luke Daley <luke.da...@gradleware.com> wrote:
> What's the current state of this? > > Are you still looking for input on what's described below? Yes. > > 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 > > -- 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