Hello,
After almost a year of effort I finally have Gradle 4.5.1[1] bootstrapped just 
from the sources and passing most of its unit tests (excluded are tests 
requiring additional dependencies or not compatible with build 
containerization), along with some notable dependencies like Spock 2 test 
framework and half of JUnit 5 test framework - 
https://github.com/TarCV/gradle-guix . Still, I had to exclude some 
dependencies and remove some features from Gradle to limit scope of this 
effort. Namely, nothing depending on IntelliJ, Kotlin[2], Scala, Play!, and 
JRuby is included, also some smaller dependencies required just for 
unit/integration tests are excluded along with the tests.
I want to contribute these build receipts to Guix. So my plan is to implement 
more or less the following steps as PRs:
* Fix Groovy to be compiled to 1.8 bytecode (as it is defined in the upstream, 
see https://github.com/apache/groovy/blob/GROOVY_3_0_5/build.gradle#L79) to 
allow calling Groovy without requiring JDK 10+
* Fix Groovy JDK enhancements not working because some resources are missing in 
Groovy JARs
* Merge Groovy JARs where the upstream release doesn't have separate JARs. 
Otherwise, groovy-ant is broken and Gradle requires hacks to make its 
dependency on Groovy work.
* Make groovy-test visible
* Fix Plexus Container metadata in maven-3.0-model-builder
* Update AssertJ package (or create a new package for a newer version)
* Replace install phases with install-from-pom.xml for all packages Gradle 
depends on
* Contribute the remaining dependencies and Gradle
Please correct me if some of the above ideas are wrong courses of action.

Also, I'm not sure about these things and would be glad if someone can help 
with them:
* On my machine Guix can't download Maven Polyglot (version by Sonatype) from 
SWH, see https://codeberg.org/guix/guix/issues/3590 , so I had to set the 
package source URL to a random fork having the required commit. Not sure how to 
debug this.
* Grafting breaks JARs containing native binaries (because grafting patches 
store paths in these binaries but doesn't patch CRCs to match) and breaks JARs 
built from grafted inputs or inputs having dependencies on grafted inputs 
(because grafting patches store paths in META-INF/INDEX.LST but doesn't patch 
its CRC to match). Is there some workaround/fix for this?

[1] 4.5.1 is the newest version not having a lot of Kotlin DSL build scripts or 
sources. Also, a disclaimer: my build receipts don't work with grafting 
enabled, see the last paragraph for why.
[2] I was able to build Kotlin up to 1.1.2-5 following and continuing Emmanuel 
Bourg's and Julien Lepiller's steps, see https://github.com/TarCV/kotlin-guix. 
However, I don't think contributing these build receipts to Guix is a good 
idea. Building Kotlin this way requires hundreds of patches and takes half a 
day on my machine. Instead, I want to try to transpile core Kotlin compiler to 
Java.

Regards,
Constantine Tarasov

Reply via email to