X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=build.gradle;h=c2c4599ae9360a1d9f6307200978cadc718cda9f;hb=71d8702f4f5f12c9c2f1dcb119091704dc738522;hp=92d2021d24546de8124da4f50cc23fdda9bd4233;hpb=176826a5bd29270ff6155eef4cb027af2d3ae1b0;p=jalview.git diff --git a/build.gradle b/build.gradle index 92d2021..c2c4599 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,10 @@ import org.apache.tools.ant.filters.ReplaceTokens +//import org.apache.tools.ant.filters.ReplaceRegexp import org.gradle.internal.os.OperatingSystem +import org.gradle.plugins.ide.eclipse.model.* + + +import groovy.transform.ExternalizeMethods buildscript { dependencies { @@ -47,21 +52,18 @@ def compile_target_compatibility ext { // where the getdown channel will be built. - // TODO: consider allowing this expression to be overrriden by -P arg - getdownWebsiteDir = jalviewDir + '/' + getdown_website_dir + '/' + JAVA_VERSION + '/' + // TODO: consider allowing this expression to be overridden by -P arg + getdownWebsiteDir = jalviewDir + '/' + getdown_website_dir + '/' + JAVA_VERSION getdownAppDir = getdownWebsiteDir + '/' + getdown_app_dir getdownJ11libDir = getdownWebsiteDir + '/' + getdown_j11lib_dir getdownResourceDir = getdownWebsiteDir + '/' + getdown_resource_dir getdownLauncher = jalviewDir + '/' + getdown_launcher getdownFilesDir = jalviewDir + '/' + getdown_files_dir + '/' + JAVA_VERSION + '/' - getdownLib1 = jalviewDir + '/' + getdown_lib1 - def getdownChannel = getdown_channel_name - if (getdown_channel_name.equals("COMMIT")) { - getdownChannel = getGitHash() - } - getdown_app_base = getdown_channel_base+"/"+getdownChannel+"/"+JAVA_VERSION+"/" + getdown_app_base = getdown_channel_base+"/"+getdown_channel_name+"/"+JAVA_VERSION+"/" modules_compileClasspath = fileTree(dir: "$jalviewDir/$j11modDir", include: ["*.jar"]) modules_runtimeClasspath = modules_compileClasspath + gitHash = "" + gitBranch = "" } def JAVA_INTEGER_VERSION @@ -149,8 +151,8 @@ sourceSets { } else { compileClasspath += files(sourceSets.main.java.outputDir) } - compileClasspath += sourceSets.main.compileClasspath - compileClasspath += files( sourceSets.main.resources.srcDirs) + //compileClasspath += sourceSets.main.compileClasspath + //compileClasspath += files( sourceSets.main.resources.srcDirs) compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"]) compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"]) @@ -190,7 +192,6 @@ eclipse { removeThese += it } } - containers 'org.eclipse.buildship.core.gradleclasspathcontainer' minusConfigurations += removeThese plusConfigurations = [ ] @@ -209,31 +210,11 @@ eclipse { } } cp.entries.removeAll(removeTheseToo) - } - - withXml { - def node = it.asNode() - def srcTestAttributes - node.children().each{ cpe -> - def attributes = cpe.attributes() - if (attributes.get("kind") == "src" && attributes.get("path") == "test") { - srcTestAttributes = cpe.find { a -> a.name() == "attributes" } - return - } - } - def addTestAttribute = true - srcTestAttributes.each{a -> - if (a.name() == "attribute" && a.attributes().getAt("name") == "test") { - addTestAttribute = false - } - } - if (addTestAttribute) { - srcTestAttributes.append(new Node(null, "attribute", [name:"test", value:"true"])) - } - - node.appendNode('classpathentry', [kind:"output", path:"bin/main"]) - node.appendNode('classpathentry', [kind:"lib", path:helpParentDir]) - node.appendNode('classpathentry', [kind:"lib", path:resourceDir]) + + cp.entries += new Output("bin/main") + cp.entries += new Library(fileReference(helpParentDir)) + cp.entries += new Library(fileReference(resourceDir)) + HashMap addedLibPath = new HashMap<>(); def allPaths = sourceSets.test.compileClasspath + sourceSets.main.compileClasspath sourceSets.main.compileClasspath.each{ @@ -241,7 +222,6 @@ eclipse { //no longer want to add outputDir as eclipse is using its own output dir in bin/main if (it.isDirectory() || ! it.exists()) { // don't add dirs to classpath - //println("Not adding directory "+it) return } def itPath = it.toString() @@ -252,36 +232,69 @@ eclipse { //println("Not adding duplicate entry "+itPath) } else { //println("Adding entry "+itPath) - node.appendNode('classpathentry', [kind:"lib", path:itPath]) + cp.entries += new Library(fileReference(itPath)) addedLibPath.put(itPath, true) } } + sourceSets.test.compileClasspath.each{ //if ((it.isDirectory() || ! it.exists()) && ! (it.equals(sourceSets.main.java.outputDir))) { //no longer want to add outputDir as eclipse is using its own output dir in bin/main if (it.isDirectory() || ! it.exists()) { // don't add dirs to classpath - //println("Not adding directory "+it) - return + return false // groovy "break" in .each loop } def itPath = it.toString() if (itPath.startsWith(jalviewDirAbsolutePath+"/")) { itPath = itPath.substring(jalviewDirAbsolutePath.length()+1) } if (addedLibPath.get(itPath)) { - //println("Not adding duplicate entry "+itPath) + // don't duplicate } else { - //println("Adding entry "+itPath) - node.appendNode('classpathentry', [kind:"lib", path:itPath]) - .appendNode('attributes') - .appendNode('attribute', [name:"test", value:"true"]) + def lib = new Library(fileReference(itPath)) + // this doesn't work... yet. Adding test=true attribute using withXml below + //def attrs = new Node(null, 'attributes', ["test":"true"]) + //lib.appendNode(attrs) // + cp.entries += lib addedLibPath.put(itPath, true) } } - } + } - } - } + // withXml changes ignored by buildship, these add the "test=true" attribute + withXml { + def node = it.asNode() + + def srcTestAttributes + node.children().each{ cpe -> + def attributes = cpe.attributes() + if (attributes.get("kind") == "src" && attributes.get("path") == "test") { + srcTestAttributes = cpe.find { a -> a.name() == "attributes" } + return + } + } + def addTestAttribute = true + srcTestAttributes.each{a -> + if (a.name() == "attribute" && a.attributes().getAt("name") == "test") { + addTestAttribute = false + } + } + if (addTestAttribute) { + srcTestAttributes.append(new Node(null, "attribute", [name:"test", value:"true"])) + } + + node.children().each{ cpe -> + def attributes = cpe.attributes() + if (attributes.get("kind") == "lib" && attributes.get("path").startsWith("utils/")) { + cpe.appendNode('attributes') + .appendNode('attribute', [name:"test", value:"true"]) + } + } + } // withXML + } // file + + containers 'org.eclipse.buildship.core.gradleclasspathcontainer' + } // classpath jdt { // for the IDE, use java 11 compatibility @@ -292,7 +305,7 @@ eclipse { file { withProperties { props -> def jalview_prefs = new Properties() - def ins = new FileInputStream(eclipse_extra_jdt_prefs_file) + def ins = new FileInputStream(jalviewDirAbsolutePath+"/"+eclipse_extra_jdt_prefs_file) jalview_prefs.load(ins) ins.close() jalview_prefs.forEach { t, v -> @@ -303,8 +316,10 @@ eclipse { } } } - -} + + //synchronizationTasks eclipseClasspath + //autoBuildTasks eclipseClasspath +} task cloverInstr() { // only instrument source, we build test classes as normal @@ -323,7 +338,7 @@ task cloverInstr() { com.atlassian.clover.CloverInstr.mainImpl(args) } } - + task cloverReport { group = "Verification" @@ -402,36 +417,40 @@ def getDate(format) { return date.format(format) } -def getGitHash() { - def stdout = new ByteArrayOutputStream() - exec { - commandLine "git", "rev-parse", "--short", "HEAD" - standardOutput = stdout - workingDir = jalviewDir +task setGitHash(type: Exec) { + workingDir = jalviewDir + commandLine "git", "rev-parse", "--short", "HEAD" + standardOutput = new ByteArrayOutputStream() + project.ext.gitHash = { + return standardOutput.toString().trim() } - return stdout.toString().trim() } -def getGitBranch() { - def stdout = new ByteArrayOutputStream() - exec { - commandLine "git", "rev-parse", "--abbrev-ref", "HEAD" - standardOutput = stdout - workingDir = jalviewDir +task setGitBranch(type: Exec) { + workingDir = jalviewDir + commandLine "git", "rev-parse", "--abbrev-ref", "HEAD" + standardOutput = new ByteArrayOutputStream() + project.ext.gitBranch = { + return standardOutput.toString().trim() } - return stdout.toString().trim() +} + +task setGitVals { + dependsOn setGitHash + dependsOn setGitBranch } task createBuildProperties(type: WriteProperties) { + dependsOn setGitVals inputs.dir("$jalviewDir/$sourceDir") inputs.dir("$jalviewDir/$resourceDir") outputFile "$classes/$buildPropertiesFile" - /* taking time/date specific comment out to allow better incremental builds */ + // taking time specific comment out to allow better incremental builds //comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd HH:mm:ss") comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd") property "BUILD_DATE", getDate("dd MMMM yyyy") property "VERSION", JALVIEW_VERSION - property "INSTALLATION", INSTALLATION+" git-commit:"+getGitHash()+" ["+getGitBranch()+"]" + property "INSTALLATION", INSTALLATION+" git-commit:"+project.ext.gitHash+" ["+project.ext.gitBranch+"]" outputs.file(outputFile) outputs.dir("$classes") } @@ -538,6 +557,8 @@ task compileLinkCheck(type: JavaCompile) { destinationDir = file("$jalviewDir/$utilsDir") source = fileTree(dir: "$jalviewDir/$utilsDir", include: ["HelpLinksChecker.java", "BufferedLineReader.java"]) + inputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.java") + inputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.java") outputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.class") outputs.file("$jalviewDir/$utilsDir/BufferedLineReader.class") } @@ -550,7 +571,6 @@ task linkCheck(type: JavaExec) { workingDir = jalviewDir def help = "$classes/$helpDir" args = [ "$classes/$helpDir", "-nointernet" ] - //args = [ "$classesDir/$helpDir", "-nointernet" ] doFirst { helplinkscheckeroutputfile.createNewFile() @@ -647,6 +667,9 @@ task getdownWebsite() { props.put("getdown_txt_java_min_version", getdown_alt_java_min_version) props.put("getdown_txt_multi_java_location", getdown_alt_multi_java_location) + if (getdown_local == "true") { + getdown_app_base = file(getdownWebsiteDir).toURI().toString() + } props.put("getdown_txt_appbase", getdown_app_base) props.each{ prop, val -> if (prop.startsWith("getdown_txt_") && val != null) { @@ -722,7 +745,9 @@ task getdownWebsite() { } */ - getdownTextString += "code = " + file(getdownLauncher).getName() + "\n" + // getdown-launcher.jar should not be in main application class path so the main application can move it when updated. Listed as a resource so it gets updated. + //getdownTextString += "class = " + file(getdownLauncher).getName() + "\n" + getdownTextString += "resource = " + file(getdownLauncher).getName() + "\n" getdownTextString += "class = " + mainClass + "\n" def getdown_txt = file(project.ext.getdownWebsiteDir + "/getdown.txt") @@ -744,11 +769,6 @@ task getdownWebsite() { } copy { - from getdownLib1 - into project.ext.getdownFilesDir + '/' + packageDir - } - - copy { from jalviewDir + '/' + project.getProperty('getdown_txt_ui.background_image') from jalviewDir + '/' + project.getProperty('getdown_txt_ui.error_background') from jalviewDir + '/' + project.getProperty('getdown_txt_ui.progress_image') @@ -767,10 +787,10 @@ task getdownDigest(type: JavaExec) { group = "distribution" description = "Digest the getdown website folder" dependsOn getdownWebsite - classpath = files(jalviewDir + '/' + getdown_core) - classpath file(jalviewDir + '/' + getdown_lib1) + classpath = files(jalviewDir + '/' + getdown_core, jalviewDir+'/'+getdown_launcher) main = "com.threerings.getdown.tools.Digester" args project.ext.getdownWebsiteDir + inputs.dir(project.ext.getdownWebsiteDir) outputs.file(project.ext.getdownWebsiteDir + '/' + "digest2.txt") } @@ -800,6 +820,9 @@ install4j { } installDir = file(install4jHomeDir) mediaTypes = Arrays.asList(install4jMediaTypes.split(",")) + if (install4jFaster.equals("true")) { + faster = true + } } def install4jConf @@ -820,15 +843,50 @@ task copyInstall4jTemplate(type: Copy) { include install4jTemplate rename (install4jTemplate, install4jConfFile) filter(ReplaceTokens, beginToken: '', endToken: '', tokens: ['9999999999': JAVA_VERSION]) - filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['JAVA_VERSION': JAVA_VERSION, 'JAVA_INTEGER_VERSION': JAVA_INTEGER_VERSION, 'VERSION': JALVIEW_VERSION, 'MACOS_JAVA_VM_DIR': macosJavaVMDir, 'MACOS_JAVA_VM_TGZ': macosJavaVMTgz, 'WINDOWS_JAVA_VM_DIR': windowsJavaVMDir, 'WINDOWS_JAVA_VM_TGZ': windowsJavaVMTgz]) + filter(ReplaceTokens, beginToken: '$$', endToken: '$$', + tokens: [ + 'JAVA_VERSION': JAVA_VERSION, + 'JAVA_INTEGER_VERSION': JAVA_INTEGER_VERSION, + 'VERSION': JALVIEW_VERSION, + 'MACOS_JAVA_VM_DIR': macosJavaVMDir, + 'MACOS_JAVA_VM_TGZ': macosJavaVMTgz, + 'WINDOWS_JAVA_VM_DIR': windowsJavaVMDir, + 'WINDOWS_JAVA_VM_TGZ': windowsJavaVMTgz, + 'INSTALL4JINFOPLISTFILEASSOCIATIONS': install4jInfoPlistFileAssociations, + 'COPYRIGHT_MESSAGE': install4jCopyrightMessage, + 'MACOS_BUNDLE_ID': install4jMacOSBundleId + ] + ) if (OSX_KEYPASS=="") { filter(ReplaceTokens, beginToken: 'codeSigning macEnabled="', endToken: '"', tokens: ['true':'codeSigning macEnabled="false"']) filter(ReplaceTokens, beginToken: 'runPostProcessor="true" ',endToken: 'Processor', tokens: ['post':'runPostProcessor="false" postProcessor']) } } into install4jDir - inputs.files("$install4jDir/$install4jTemplate") outputs.files(install4jConf) + + doLast { + // include file associations in installer + def installerFileAssociationsXml = file("$install4jDir/$install4jInstallerFileAssociations").text + ant.replaceregexp( + byline: false, + flags: "s", + match: '', + replace: installerFileAssociationsXml, + file: install4jConf + ) + /* + // include uninstaller applescript app files in dmg + def installerDMGUninstallerXml = file("$install4jDir/$install4jDMGUninstallerAppFiles").text + ant.replaceregexp( + byline: false, + flags: "s", + match: '', + replace: installerDMGUninstallerXml, + file: install4jConf + ) + */ + } } task installers(type: com.install4j.gradle.Install4jTask) {