blob: 9e62f1ad96e9b5493b206452053ec595f6d35fd6 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import org.apache.tools.ant.filters.ReplaceTokens
apply plugin: 'osgi'
group = 'org.codehaus.groovy'
archivesBaseName = 'groovy'
ext.srcSpec = copySpec {
from(projectDir) {
exclude 'target',
'benchmark',
'subprojects/*/target',
'buildSrc/target',
buildDir.path,
'classes/**',
'cruise/**',
'security/groovykeys',
'.clover/*',
'local.build.properties',
'gradle/wrapper',
'gradlew',
'gradlew.bat',
'cobertura.ser',
'junitvmwatcher*.properties',
'out',
'artifactory.properties', // generated by the CI server
'gradle.properties.gz', // generated by the CI server
'**/*.iml', // used by Intellij IDEA
'**/*.ipr', // used by Intellij IDEA
'**/*.iws', // used by Intellij IDEA
'.settings', // used by Eclipse
'.gradle', // used by Gradle
'buildSrc/.gradle' // used by Gradle
}
}
ext.docSpec = copySpec {
into('html/api') {
from javadocAll.destinationDir
}
into('html/gapi') {
from groovydocAll.destinationDir
}
into('html/documentation') {
from "$buildDir/asciidoc/html5"
}
into('html/groovy-jdk') {
from docGDK.destinationDir
}
into('licenses') {
from 'licenses'
include 'asciidoc-style-license.txt'
include 'jquery-js-license.txt'
include 'normalize-stylesheet-license.txt'
}
from "$projectDir/licenses/LICENSE-DOC"
from "$projectDir/notices/NOTICE-BASE"
rename 'LICENSE-DOC', 'LICENSE'
rename 'NOTICE-BASE', 'NOTICE'
}
task copy(type: Copy) {
into "$buildDir/meta"
}
ext.allManifest = manifest {
attributes('Built-By': System.properties['user.name'],
'Extension-Name': 'groovy',
'Specification-Title': 'Groovy: a powerful, dynamic language for the JVM',
'Specification-Version': groovyBundleVersion,
'Specification-Vendor': 'The Apache Software Foundation',
'Implementation-Title': 'Groovy: a powerful, dynamic language for the JVM',
'Implementation-Version': groovyBundleVersion,
'Implementation-Vendor': 'The Apache Software Foundation',
'Bundle-ManifestVersion': '2',
'Bundle-Name': 'Groovy Runtime',
'Bundle-Description': 'Groovy Runtime',
'Bundle-Version': groovyBundleVersion,
'Bundle-Vendor': 'The Apache Software Foundation',
'Bundle-ClassPath': '.',
'Eclipse-BuddyPolicy': 'dependent',
'DynamicImport-Package': '*',
'Main-class': 'groovy.ui.GroovyMain')
}
ext.groovyOsgiManifest = {
// Exclude the Bnd-LastModified attribute as it always triggers a rebuild without being really needed.
from(allManifest) {
eachEntry { details ->
if (details.key == 'Bnd-LastModified') {
details.exclude()
}
}
}
version = groovyBundleVersion
instruction '-nouses', 'true'
instruction 'Export-Package', "*;version=${groovyBundleVersion}"
classpath = sourceSets.main.runtimeClasspath
}
ext.subprojectOsgiManifest = {
// Exclude attributes not needed for subprojects.
from(allManifest) {
eachEntry { details ->
if (details.key in ['Bnd-LastModified', 'Extension-Name', 'Bundle-Name', 'Bundle-Description', 'Main-class']) {
details.exclude()
}
}
}
version = groovyBundleVersion
instruction '-nouses', 'true'
instruction 'Export-Package', "*;version=${groovyBundleVersion}"
classpath = sourceSets.main.runtimeClasspath
}
jar {
dependsOn('dgmConverter')
metaInf {
from("$projectDir/licenses/LICENSE-JARJAR")
from("$projectDir/licenses") {
into('licenses')
include('asm-license.txt')
include('antlr2-license.txt')
}
from("$projectDir/notices/NOTICE-JARJAR")
from('src/main/META-INF/groovy-release-info.properties') {
filter(rootProject.propertiesFilter, org.apache.tools.ant.filters.ReplaceTokens)
}
rename { String filename -> filename == 'LICENSE-JARJAR' ? 'LICENSE' : filename == 'NOTICE-JARJAR' ? 'NOTICE' : filename }
}
exclude '**/package-info.class', 'META-INF/groovy-release-info.properties'
}
allprojects {
task jarjar(type:Jar, dependsOn: jar) {
destinationDir = jar.destinationDir
baseName = jar.baseName
appendix = jar.appendix?"${jar.appendix}-jarjar":"jarjar"
classifier = jar.classifier
includeEmptyDirs = false
def target = new File("${archivePath}.tmp")
def targetTmp = new File("${archivePath}.tmp.1.tmp")
doFirst {
from zipTree(target)
def keepUntouched = [
'org/codehaus/groovy/cli/GroovyPosixParser*.class',
'groovy/util/CliBuilder*.class',
'groovy/util/OptionAccessor*.class',
'org/codehaus/groovy/tools/shell/util/HelpFormatter*.class'
].join(',')
boolean isRoot = project == rootProject
def gradleProject = project
ant {
taskdef name: 'jarjar', classname: 'com.tonicsystems.jarjar.JarJarTask', classpath: rootProject.configurations.tools.asPath
jarjar(jarfile: targetTmp) {
zipfileset(
src: jar.archivePath,
excludes: keepUntouched)
// only groovy core will include the dependencies repackaged
if (isRoot) {
configurations.runtime.files.findAll { file ->
['antlr', 'asm', 'commons-cli'].any {
file.name.startsWith(it)
} && ['asm-attr', 'asm-util', 'asm-analysis'].every { !file.name.startsWith(it) }
}.each { jarjarFile ->
// explanation of excludes:
// GROOVY-7386: stop copy of incorrect maven meta info
// GROOVY-8387: we don't want module-info.class from any dependencies
zipfileset(src: jarjarFile, excludes: 'META-INF/maven/commons-cli/commons-cli/*,META-INF/*,module-info.class')
}
zipfileset(src: configurations.runtime.files.find { file -> file.name.startsWith('asm-util') },
includes: 'org/objectweb/asm/util/Printer.class,org/objectweb/asm/util/Textifier.class,org/objectweb/asm/util/Trace*')
}
rule pattern: 'antlr.**', result: 'groovyjarjarantlr.@1'
rule pattern: 'org.objectweb.**', result: 'groovyjarjarasm.@1'
rule pattern: 'org.apache.commons.cli.**', result: 'groovyjarjarcommonscli.@1'
}
}
def manifestSpec = isRoot ? groovyOsgiManifest : subprojectOsgiManifest
manifest = osgiManifest {
symbolicName = gradleProject.name
instruction 'Import-Package', '*;resolution:=optional'
classesDir = targetTmp
}
manifest(manifestSpec)
def manifestPath = "${temporaryDir}/META-INF/MANIFEST.MF"
manifest.writeTo(manifestPath)
ant.copy(file: targetTmp, tofile: target)
ant.jar(destfile: target, update: true, manifest: manifestPath) {
zipfileset(
src: jar.archivePath,
includes: keepUntouched)
}
}
doLast {
target.delete()
ant.delete(file: targetTmp, quiet: true, deleteonexit: true)
}
}
if (project.name in ['groovy', 'groovy-test']) {
task grooidjar(type: Jar) {
onlyIf {
!rootProject.useIndy()
}
destinationDir = jar.destinationDir
baseName = jar.baseName
appendix = jar.appendix
classifier = jar.classifier ? "${jar.classifier}grooid" : 'grooid'
includeEmptyDirs = false
def target = new File("${archivePath}.tmp")
boolean isRootProject = project==rootProject
doFirst {
from zipTree(target)
ant {
taskdef name: 'jarjar', classname: 'com.tonicsystems.jarjar.JarJarTask', classpath: rootProject.configurations.tools.asPath
jarjar(jarfile: target) {
zipfileset(dir: "$rootProject.projectDir/notices/", includes: isRootProject ? 'NOTICE-GROOIDJARJAR' : 'NOTICE-GROOID', fullpath: 'META-INF/NOTICE')
zipfileset(src: jarjar.archivePath, excludes: 'META-INF/NOTICE')
if (isRootProject) {
zipfileset(src: rootProject.configurations.runtime.files.find { it.name.startsWith('openbeans') }, excludes: 'META-INF/*')
}
rule pattern: 'com.googlecode.openbeans.**', result: 'groovyjarjaropenbeans.@1'
rule pattern: 'org.apache.harmony.beans.**', result: 'groovyjarjarharmonybeans.@1'
rule pattern: 'java.beans.**', result: 'groovyjarjaropenbeans.@1'
}
}
}
doLast {
target.delete()
}
}
jarjar.finalizedBy(grooidjar)
}
}
subprojects { sp ->
jar {
metaInf {
if (file("${projectDir}/LICENSE").exists()) {
from "${projectDir}/LICENSE"
} else {
from "${rootProject.projectDir}/licenses/LICENSE-BASE"
}
if (file("${projectDir}/NOTICE").exists()) {
from "${projectDir}/NOTICE"
} else {
from "${rootProject.projectDir}/notices/NOTICE-BASE"
}
from("${rootProject.projectDir}/src/main/META-INF/groovy-release-info.properties") {
filter(rootProject.propertiesFilter, org.apache.tools.ant.filters.ReplaceTokens)
}
rename { String filename -> filename == 'LICENSE-BASE' ? 'LICENSE' : filename == 'NOTICE-BASE' ? 'NOTICE' : filename }
}
exclude '**/package-info.class', 'META-INF/groovy-release-info.properties'
}
}
def moduleJars() {
modules()*.jar.archivePath
}
def mergeModuleDescriptors() {
new File("$buildDir/tmp/").mkdirs()
def extensionClasses = []
def staticExtensionClasses = []
modules().collect {
new File("${it.buildDir}/classes/main/META-INF/services/org.codehaus.groovy.runtime.ExtensionModule")
}.findAll { it.exists() }.each {
def props = new Properties()
props.load(it.newInputStream())
extensionClasses += props.get('extensionClasses').split(',').findAll { it }
staticExtensionClasses += props.get('staticExtensionClasses').split(',').findAll { it }
}
def descriptor = new File("$buildDir/tmp/org.codehaus.groovy.runtime.ExtensionModule")
descriptor.withWriter('UTF-8') {
it << '# This is a generated file, do not edit\n'
it << 'moduleName=groovy-all\n'
it << "moduleVersion=${project.version}\n"
it << "extensionClasses=${extensionClasses.join(',')}\n"
it << "staticExtensionClasses=${staticExtensionClasses.join(',')}\n"
}
descriptor
}
task replaceJarWithJarJar(dependsOn: allprojects.jarjar ) {
description = "Overwrites normal JAR files with their JARJAR version"
doLast {
allprojects {
def jarjarFile = tasks.jarjar.archivePath
if (jarjarFile) {
file(jar.archivePath).delete()
ant.copy(file: jarjarFile, tofile: jar.archivePath)
jarjarFile.delete()
}
}
}
inputs.files(allprojects.jarjar.archivePath)
outputs.files(allprojects.jar.archivePath)
}
allprojects {
rootProject.replaceJarWithJarJar.mustRunAfter(test)
}
task jarAll(type: Jar, dependsOn: replaceJarWithJarJar) {
inputs.files(allprojects.jar.archivePath)
ext.metaInfDir = "$buildDir/tmp/groovy-all-metainf"
baseName = 'groovy-all'
includeEmptyDirs = false
if (rootProject.useIndy()) {
classifier = 'indy'
}
doLast {
def manifestPath = "$ext.metaInfDir/MANIFEST.MF"
manifest.writeTo(manifestPath)
copy {
from "$projectDir/notices/NOTICE-ALLJARJAR"
into owner.ext.metaInfDir
rename('NOTICE-ALLJARJAR', 'NOTICE')
}
copy {
from "$projectDir/licenses"
into "$owner.ext.metaInfDir/licenses"
include 'normalize-stylesheet-license.txt'
include 'jsr223-license.txt'
include 'jline2-license.txt'
}
copy {
from "$projectDir/licenses/LICENSE-ALLJARJAR"
into owner.ext.metaInfDir
rename('LICENSE-ALLJARJAR', 'LICENSE')
}
copy {
from(mergeModuleDescriptors())
into "$owner.ext.metaInfDir/services"
}
copy {
into "$owner.ext.metaInfDir"
}
logger.info 'Packaging with jarjar'
def archivePathTmp = new File("${archivePath}.1.tmp")
ant {
taskdef name: 'jarjar', classname: 'com.tonicsystems.jarjar.JarJarTask', classpath: configurations.tools.asPath
jarjar(jarfile: archivePathTmp, manifest: "$owner.ext.metaInfDir/MANIFEST.MF") {
zipfileset(dir: "$owner.ext.metaInfDir", prefix: 'META-INF')
zipfileset(src: jar.archivePath, excludes:'META-INF/NOTICE,META-INF/LICENSE')
moduleJars().each {
zipfileset(src: it, excludes:'META-INF/NOTICE,META-INF/LICENSE')
}
}
}
manifest = osgiManifest {
symbolicName = 'groovy-all'
instruction 'Import-Package', '*;resolution:=optional'
classesDir = archivePathTmp
}
manifest groovyOsgiManifest
manifestPath = "${temporaryDir}/META-INF/MANIFEST.MF"
manifest.writeTo(manifestPath)
ant {
copy(file: archivePathTmp, tofile: archivePath)
jar(destfile: archivePath, update: true, index: true, manifest: manifestPath) {
zipfileset(src: jar.archivePath, excludes:'META-INF')
}
delete(file: archivePathTmp, quiet: true, deleteonexit: true)
}
}
}
allprojects {
task jarWithIndy(type: GradleBuild) {
onlyIf rootProject.indyCapable
description = 'Triggers an external build generating the indy jar'
buildFile = 'build.gradle'
startParameter.projectProperties['indy'] = true
tasks = ['jar']
}
}
task jarAllWithIndy(type: GradleBuild) {
onlyIf rootProject.indyCapable
description = 'Triggers an external build generating the indy jarAll'
buildFile = 'build.gradle'
startParameter.projectProperties['indy'] = true
tasks = ['jarAll']
}
task jarAllAll(dependsOn: [jarAll, jarAllWithIndy]) {
description = 'Generates groovy-all and groovy-all-indy jars'
doFirst {
if (useIndy()) {
logger.lifecycle('InvokeDynamic support was activated but needs to be off for this pass. Disabling.')
ext.useIndy = false
}
}
}
allprojects {
tasks.withType(Test) { task ->
jarAll.mustRunAfter(task)
jarAllWithIndy.mustRunAfter(task)
}
}
task sourceAllJar(type: Jar, dependsOn: { modules()*.sourceJar + rootProject.sourceJar }) {
with sourceJar.rootSpec
modules()*.sourceJar.each {
with it.rootSpec
}
baseName = 'groovy-all'
classifier = rootProject.useIndy() ? 'indy-sources' : 'sources'
}
allprojects {
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = rootProject.useIndy() ? 'indy-javadoc' : 'javadoc'
from javadoc.destinationDir
}
task groovydocJar(type: Jar, dependsOn: groovydoc) {
classifier = rootProject.useIndy() ? 'indy-groovydoc' : 'groovydoc'
from groovydoc.destinationDir
}
}
task javadocAllJar(type: Jar, dependsOn: javadocAll) {
baseName = 'groovy-all'
classifier = rootProject.useIndy() ? 'indy-javadoc' : 'javadoc'
from javadocAll.destinationDir
}
task groovydocAllJar(type: Jar, dependsOn: groovydocAll) {
baseName = 'groovy-all'
classifier = rootProject.useIndy() ? 'indy-groovydoc' : 'groovydoc'
from groovydocAll.destinationDir
}
ext.distSpec = copySpec {
from("$projectDir/licenses/LICENSE-BINZIP")
from("$projectDir/notices/NOTICE-BINZIP")
rename { String filename -> filename == 'LICENSE-BINZIP' ? 'LICENSE' : filename == 'NOTICE-BINZIP' ? 'NOTICE' : filename }
into('lib') {
from jar.archivePath
from {
configurations.runtime.findAll {
it.name.endsWith('jar') && !it.name.startsWith('openbeans-') && !it.name.startsWith('asm-') && !it.name.startsWith('antlr-') } +
modules()*.jar.archivePath +
modules().configurations.runtime*.findAll {
it.name.endsWith('jar') && !it.name.contains('livetribe-jsr223') && !it.name.matches(/groovy-\d.*/) &&
!it.name.startsWith('asm-') && !it.name.startsWith('antlr-') && !it.name.startsWith('openbeans-')
}.flatten() as Set
}
from('src/bin/groovy.icns')
}
into('indy') {
from { new File(jar.archivePath.parent, "${jar.baseName}-${jar.version}-indy.jar") }
from {
modules()*.jar.collect { j ->
new File(j.archivePath.parent, "${j.baseName}-${j.version}-indy.jar")
}
}
}
into('grooid') {
from { new File(jar.archivePath.parent, "${jar.baseName}-${jar.version}-grooid.jar") }
from {
modules()*.jar.collect { j ->
new File(j.archivePath.parent, "${j.baseName}-${j.version}-grooid.jar")
}
}
}
into('conf') {
from 'src/conf'
}
into('bin') {
from('src/bin') {
filter(ReplaceTokens, tokens: [GROOVYJAR:jar.archiveName])
fileMode = 0755
exclude 'groovy.icns'
}
from('src/tools/org/codehaus/groovy/tools/groovy.ico')
}
into('licenses') {
from 'licenses'
include 'antlr2-license.txt'
include 'asm-license.txt'
include 'hamcrest-license.txt'
include 'jline2-license.txt'
include 'jsr166y-license.txt'
include 'jsr223-license.txt'
include 'junit-license.txt'
include 'xstream-license.txt'
}
into('embeddable') {
from jarAll.archivePath
from { new File(jarAll.destinationDir, "${jarAll.baseName}-${jarAll.version}-indy.jar") }
}
}
task distBin(type: Zip, dependsOn: [jar, jarAllAll, replaceJarWithJarJar]) {
baseName = 'apache-groovy'
appendix = 'binary'
into("groovy-$version") {
with distSpec
}
}
task distDoc(type: Zip, dependsOn: doc) {
baseName = 'apache-groovy'
appendix = 'docs'
into("groovy-$version") {
with docSpec
}
}
task syncDoc(type: Copy, dependsOn: doc) {
inputs.files javadoc.outputs.files
inputs.files groovydoc.outputs.files
destinationDir(file("$buildDir/html"))
into('api') {
from javadoc.destinationDir
}
into('gapi') {
from groovydoc.destinationDir
}
// groovy-jdk already at the correct place
}
task distSrc(type: Zip) {
baseName = 'apache-groovy'
appendix = 'src'
into("groovy-$version")
with srcSpec
}
def installDir = {
project.hasProperty('groovy_installPath')?project.groovy_installPath:
System.properties.installDirectory ?: "$buildDir/install"
}
task installGroovy(type: Sync, dependsOn: [checkCompatibility, distBin]) {
description 'Generates a groovy distribution into an install directory'
doLast {
logger.lifecycle "Groovy installed under ${installDir()}"
}
with distSpec
into installDir
}
import org.gradle.api.file.DuplicatesStrategy
task dist(type: Zip, dependsOn: [checkCompatibility, distBin, distSrc, distDoc, syncDoc]) {
description = 'Generates the binary, sources, documentation and full distributions'
baseName = 'apache-groovy'
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
appendix 'sdk'
into "groovy-$version"
from("$projectDir/licenses/LICENSE-SDK")
from("$projectDir/notices/NOTICE-SDK")
rename { String filename -> filename == 'LICENSE-SDK' ? 'LICENSE' : filename == 'NOTICE-SDK' ? 'NOTICE' : filename }
with distSpec
into('doc') {
with docSpec
}
into('src') {
with srcSpec
}
if ((version.endsWith('SNAPSHOT') && !groovyBundleVersion.endsWith('SNAPSHOT'))
|| (!version.endsWith('SNAPSHOT') && groovyBundleVersion.endsWith('SNAPSHOT'))) {
throw new GradleException("Incoherent versions. Found groovyVersion=$version and groovyBundleVersion=$groovyBundleVersion")
}
}
task updateLicenses {
description = 'Updates the various LICENSE files'
ext.licensesDir = "${projectDir}/licenses"
ext.licenseBaseFile = "${licensesDir}/LICENSE-BASE"
ext.licenseSrcFile = "${projectDir}/LICENSE"
ext.licenseDocGeneratorFile = "${projectDir}/subprojects/groovy-docgenerator/LICENSE"
ext.licenseGroovyDocFile = "${projectDir}/subprojects/groovy-groovydoc/LICENSE"
ext.licenseGroovyshFile = "${projectDir}/subprojects/groovy-groovysh/LICENSE"
ext.licenseJsr223File = "${projectDir}/subprojects/groovy-jsr223/LICENSE"
ext.licenseAllJarJarFile = "${licensesDir}/LICENSE-ALLJARJAR"
ext.licenseBinZipFile = "${licensesDir}/LICENSE-BINZIP"
ext.licenseDocFile = "${licensesDir}/LICENSE-DOC"
ext.licenseJarJarFile = "${licensesDir}/LICENSE-JARJAR"
ext.licenseSdkFile = "${licensesDir}/LICENSE-SDK"
inputs.files(licenseBaseFile, fileTree(licensesDir).include('*.txt'))
outputs.files(licenseAllJarJarFile, licenseBinZipFile, licenseDocFile, licenseJarJarFile, licenseSrcFile,
licenseDocGeneratorFile, licenseGroovyDocFile, licenseGroovyshFile, licenseJsr223File, licenseSdkFile)
doLast {
def srcFiles = fileTree(licensesDir).include('*-SRC*.txt').sort { it.name }
def docFiles = fileTree(licensesDir).include('*-DOC*.txt').sort { it.name }
def jarjarFiles = fileTree(licensesDir).include('*-JARJAR*.txt').sort { it.name }
def allJarjarFiles = fileTree(licensesDir) {
include '*-JARJAR*.txt'
include '*-ALLJARJAR*.txt'
}.sort { it.name }
def binzipFiles = fileTree(licensesDir) {
include '*-JARJAR*.txt'
include '*-ALLJARJAR*.txt'
include '*-BINZIP*.txt'
}.sort { it.name }
def docgeneratorFiles = fileTree(licensesDir).include('normalize-stylesheet-groovy-docgenerator.txt')
def groovydocFiles = fileTree(licensesDir).include('normalize-stylesheet-groovy-groovydoc.txt')
def groovyshFiles = fileTree(licensesDir).include('jline2-patch-ALLJARJAR-SRC.txt')
def jsr223Files = fileTree(licensesDir).include('jsr223-ALLJARJAR-SRC.txt')
def licenseHdr = '\n\n------------------------------------------------------------------------\n\n'
[
(licenseAllJarJarFile) : allJarjarFiles,
(licenseBinZipFile) : binzipFiles,
(licenseDocFile) : docFiles,
(licenseJarJarFile) : jarjarFiles,
(licenseSrcFile) : srcFiles,
(licenseDocGeneratorFile): docgeneratorFiles,
(licenseGroovyDocFile) : groovydocFiles,
(licenseGroovyshFile) : groovyshFiles,
(licenseJsr223File) : jsr223Files,
].each { outFile, inFiles ->
file(outFile).withWriter('utf-8') { writer ->
writer << ([file(licenseBaseFile)] + inFiles).collect { it.text.replaceAll(/[\n\r]*$/, '') }.join(licenseHdr) + '\n'
}
}
file(licenseSdkFile).withWriter { writer ->
writer << [
file(licenseBinZipFile).text,
"This convenience zip embeds Groovy's src and doc zips.\nSee also src/LICENSE " +
"and doc/LICENSE files for additional license information."
].join(licenseHdr) + '\n'
}
}
}
task updateNotices {
description = 'Updates the various NOTICE files'
ext.noticesDir = "${projectDir}/notices"
ext.noticeBaseFile = "${noticesDir}/NOTICE-BASE"
ext.noticeSrcFile = "${projectDir}/NOTICE"
ext.noticeGroovyConsoleFile = "${projectDir}/subprojects/groovy-console/NOTICE"
ext.noticeAllJarJarFile = "${noticesDir}/NOTICE-ALLJARJAR"
ext.noticeBinZipFile = "${noticesDir}/NOTICE-BINZIP"
ext.noticeGrooidFile = "${noticesDir}/NOTICE-GROOID"
ext.noticeGrooidJarJarFile = "${noticesDir}/NOTICE-GROOIDJARJAR"
ext.noticeJarJarFile = "${noticesDir}/NOTICE-JARJAR"
ext.noticeSdkFile = "${noticesDir}/NOTICE-SDK"
inputs.files(noticeBaseFile, fileTree(noticesDir).include('*.txt'))
outputs.files(noticeAllJarJarFile, noticeBinZipFile, noticeGrooidFile, noticeGrooidJarJarFile,
noticeJarJarFile, noticeSrcFile, noticeGroovyConsoleFile, noticeSdkFile)
doLast {
def srcFiles = fileTree(noticesDir).include('*-SRC*.txt').sort { it.name }
def grooidFiles = fileTree(noticesDir).include('*-GROOID*.txt').sort { it.name }
def jarjarFiles = fileTree(noticesDir).include('*-JARJAR*.txt').sort { it.name }
def grooidJarjarFiles = fileTree(noticesDir) {
include '*-JARJAR*.txt'
include '*-GROOID*.txt'
}.sort { it.name }
def allJarjarFiles = fileTree(noticesDir) {
include '*-JARJAR*.txt'
include '*-ALLJARJAR*.txt'
}.sort { it.name }
def binzipFiles = fileTree(noticesDir) {
include '*-JARJAR*.txt'
include '*-ALLJARJAR*.txt'
include '*-GROOID*.txt'
include '*-BINZIP*.txt'
}.sort { it.name }
def groovyconsoleFiles = fileTree(noticesDir).include('silkicons-ALLJARJAR-SRC.txt')
[
(noticeAllJarJarFile): allJarjarFiles,
(noticeBinZipFile): binzipFiles,
(noticeGrooidFile): grooidFiles,
(noticeGrooidJarJarFile): grooidJarjarFiles,
(noticeJarJarFile): jarjarFiles,
(noticeSrcFile): srcFiles,
(noticeGroovyConsoleFile): groovyconsoleFiles,
].each { outFile, inFiles ->
file(outFile).withWriter('utf-8') { writer ->
writer << ([file(noticeBaseFile)] + inFiles).collect {
it.text.replaceAll(/[\n\r]*$/, '')
}.join('\n\n')
}
}
file(noticeSdkFile).withWriter { writer ->
writer << [
file(noticeBinZipFile).text,
"This convenience zip embeds Groovy's src and doc zips.\nSee also src/NOTICE " +
"and doc/NOTICE files for additional notice information."
].join('\n\n')
}
}
}