xtext-core/gradle/manifest-gen.gradle

100 lines
3.1 KiB
Groovy
Raw Normal View History

/*
* The MANIFEST.MF files of this project are maintained manually. We have to make sure
* that the Bundle-Version entries have the current timestamp in their qualifier using
* the same format as generated by Tycho for Eclipse plug-ins. We also have to generate
* a proper MANIFEST.MF for the source bundles.
*/
def baseVersion = project.version
if (baseVersion.endsWith('-SNAPSHOT'))
baseVersion = baseVersion.substring(0, baseVersion.length() - 9)
else if (baseVersion.split('\\.').length == 4)
baseVersion = baseVersion.substring(0, baseVersion.lastIndexOf('.'))
def qualifiedVersion = baseVersion + '.v' + buildTime
//------------------------------------------------------
// Copy the existing manifest and insert the qualifier
ext.manifestReplacements = new HashMap()
manifestReplacements.put(baseVersion + '.qualifier', qualifiedVersion)
def eclipseSourceReferences() {
def rootPath = java.nio.file.Paths.get(project.rootProject.projectDir.canonicalPath)
def projectPath = java.nio.file.Paths.get(project.projectDir.canonicalPath)
def relativePath = rootPath.relativize(projectPath)
def url = grgit.remote.list().findAll{ it.name == "origin" }.first().url
def commitId = grgit.head().id
return "scm:git:${url};path=\"${relativePath}\"" + (commitId ? ";commitId=${commitId}" : "")
}
manifestReplacements.put("eclipseSourceReferences", eclipseSourceReferences())
File manifestFile = project.file("$buildDir/tmp/genManifest/MANIFEST.MF")
task genManifest(type: Copy) {
inputs.property('qualifiedVersion', qualifiedVersion)
from "META-INF/MANIFEST.MF"
into "$buildDir/tmp/genManifest/"
doLast {
def f = manifestFile
def text = f.text
for (e in manifestReplacements.entrySet()) {
text = text.replace(e.key, e.value)
}
def writer = new PrintWriter(f)
writer.print(text)
writer.close()
}
}
task configureManifest {
dependsOn genManifest
doLast {
if (manifestFile.isFile()) {
jar.manifest {
from manifestFile
}
}
}
}
jar {
dependsOn configureManifest, genManifest
}
//------------------------------------------------------
// Generate a manifest for the source bundle
def sourcesManifestFile = "$buildDir/tmp/genSourcesManifest/MANIFEST.MF"
2016-11-18 08:21:41 +00:00
task genSourcesManifest {
outputs.file(sourcesManifestFile)
inputs.property('qualifiedVersion', qualifiedVersion)
inputs.property('projectName', project.name)
inputs.property('projectTitle', project.findProperty('title')).optional(true)
2016-11-18 08:21:41 +00:00
doLast {
def f = new File(sourcesManifestFile)
f.parentFile.mkdirs()
def writer = new PrintWriter(f)
writer.println("Manifest-Version: 1.0")
writer.println("Bundle-ManifestVersion: 2")
writer.println("Bundle-SymbolicName: ${project.name}.source")
writer.println("Bundle-Version: ${qualifiedVersion}")
if (project.hasProperty('title'))
writer.println("Bundle-Name: ${project.title} Sources")
else
writer.println("Bundle-Name: Sources")
writer.println("Bundle-Vendor: Eclipse Xtext")
writer.println("Eclipse-SourceBundle: ${project.name};version=\"${qualifiedVersion}\"")
2016-11-18 08:21:41 +00:00
writer.close()
}
}
sourcesJar {
dependsOn genSourcesManifest
manifest {
from sourcesManifestFile
}
}