X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=build.gradle;h=d32a6b2460b907f19a2ad7611df9ea6e27dc50dd;hb=refs%2Fheads%2FJalview-JS%2Fdevelop_with_gradle_build;hp=09d20f3f43e7209dd67f77f2eaf1ae4b17684e04;hpb=ae5ce37bfa1c480c7f1ec8a5874cc09e050da26d;p=jalview.git diff --git a/build.gradle b/build.gradle index 09d20f3..d32a6b2 100644 --- a/build.gradle +++ b/build.gradle @@ -1,15 +1,13 @@ 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 org.gradle.plugins.ide.eclipse.model.Output +import org.gradle.plugins.ide.eclipse.model.Library import groovy.transform.ExternalizeMethods buildscript { dependencies { classpath 'org.openclover:clover:4.3.1' - classpath 'org.apache.commons:commons-compress:1.18' } } @@ -30,16 +28,20 @@ repositories { } } +dependencies { + compile 'org.apache.commons:commons-compress:1.18' +} + mainClassName = launcherClass -def cloverInstrDir = file("$buildDir/$cloverSourcesInstrDir") -def classes = "$jalviewDir/$classesDir" +def cloverInstrDir = file("${buildDir}/${cloverSourcesInstrDir}") +def classes = "${jalviewDir}/${classesDir}" if (clover.equals("true")) { use_clover = true - classes = "$buildDir/$cloverClassesDir" + classes = "${buildDir}/${cloverClassesDir}" } else { use_clover = false - classes = "$jalviewDir/$classesDir" + classes = "${jalviewDir}/${classesDir}" } // configure classpath/args for j8/j11 compilation @@ -51,97 +53,118 @@ def compile_source_compatibility def compile_target_compatibility ext { - getdownWebsiteDir = jalviewDir + '/' + getdown_website_dir + '/' + JAVA_VERSION + // local build environment properties + def localProps = "${jalviewDirAbsolutePath}/local.properties" + if (file(localProps).exists()) { + try { + def p = new Properties() + def localPropsFIS = new FileInputStream(localProps) + p.load(localPropsFIS) + localPropsFIS.close() + p.each { + key, val -> + def over = getProperty(key) != null + setProperty(key, val) + if (over) { + println("Overriding property '${key}' with local.properties value '${val}'") + } + } + } catch (Exception e) { + System.out.println("Exception reading local.properties") + } + } + + getdownWebsiteDir = "${jalviewDir}/${getdown_website_dir}/${JAVA_VERSION}" getdownDir = "" reportRsyncCmd = false buildDist = true - buildProperties = buildPropertiesFile - getdownLauncher = jalviewDir + '/' + getdown_lib_dir + '/' + getdown_launcher + buildProperties = build_properties_file + getdownLauncher = "${jalviewDir}/${getdown_lib_dir}/${getdown_launcher}" switch (CHANNEL) { case "BUILD": // TODO: get bamboo build artifact URL for getdown artifacts getdown_channel_base = bamboo_channelbase - getdown_channel_name = bamboo_planKey + '/'+JAVA_VERSION - getdown_app_base = bamboo_channelbase + bamboo_planKey + bamboo_getdown_channel_suffix + '/'+JAVA_VERSION + getdown_channel_name = "${bamboo_planKey}/${JAVA_VERSION}" + getdown_app_base = "${bamboo_channelbase}/${bamboo_planKey}${bamboo_getdown_channel_suffix}/${JAVA_VERSION}" getdown_app_dir = getdown_app_dir_alt - buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile + buildProperties = "${jalviewDir}/${classesDir}/${build_properties_file}" break case "RELEASE": getdown_channel_name = CHANNEL.toLowerCase() - getdownDir = getdown_channel_name + "/" + JAVA_VERSION - getdown_app_base = getdown_channel_base + "/" + getdownDir + getdownDir = "${getdown_channel_name}/${JAVA_VERSION}" + getdown_app_base = "${getdown_channel_base}/${getdownDir}" getdown_app_dir = getdown_app_dir_release - buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile + buildProperties = "${jalviewDir}/${classesDir}/${build_properties_file}" reportRsyncCommand = true break case "ARCHIVE": - getdown_channel_name = CHANNEL.toLowerCase()+"/"+JALVIEW_VERSION - getdownDir = getdown_channel_name + "/" + JAVA_VERSION - getdown_app_base = getdown_channel_base + "/" + getdownDir + getdown_channel_name = CHANNEL.toLowerCase()+"/${JALVIEW_VERSION}" + getdownDir = "${getdown_channel_name}/${JAVA_VERSION}" + getdown_app_base = "${getdown_channel_base}/${getdownDir}" getdown_app_dir = getdown_app_dir_alt - if (!file(ARCHIVEDIR+"/"+packageDir).exists()) { + if (!file("${ARCHIVEDIR}/${packageDir}").exists()) { print "Must provide an ARCHIVEDIR value to produce an archive distribution" exit } else { - packageDir = ARCHIVEDIR + "/" + packageDir - buildProperties = ARCHIVEDIR +"/" + classesDir + "/" + buildPropertiesFile + packageDir = "${ARCHIVEDIR}/${packageDir}" + buildProperties = "${ARCHIVEDIR}/${classesDir}/${build_properties_file}" buildDist = false } reportRsyncCommand = true break case "ARCHIVELOCAL": - getdown_channel_name = "archive" + "/" + JALVIEW_VERSION - getdownDir = getdown_channel_name + "/" + JAVA_VERSION + getdown_channel_name = "archive/${JALVIEW_VERSION}" + getdownDir = "${getdown_channel_name}/${JAVA_VERSION}" getdown_app_base = file(getdownWebsiteDir).toURI().toString() getdown_app_dir = getdown_app_dir_alt - if (!file(ARCHIVEDIR+"/"+packageDir).exists()) { + if (!file("${ARCHIVEDIR}/${packageDir}").exists()) { print "Must provide an ARCHIVEDIR value to produce an archive distribution" exit } else { - packageDir = ARCHIVEDIR + "/" + packageDir - buildProperties = ARCHIVEDIR +"/" + classesDir + "/" + buildPropertiesFile + packageDir = "${ARCHIVEDIR}/${packageDir}" + buildProperties = "${ARCHIVEDIR}/${classesDir}/${build_properties_file}" buildDist = false } reportRsyncCommand = true - getdownLauncher = jalviewDir + '/' + getdown_lib_dir + '/' + getdown_launcher_local + getdownLauncher = "${jalviewDir}/${getdown_lib_dir}/${getdown_launcher_local}" break case "DEVELOP": getdown_channel_name = CHANNEL.toLowerCase() - getdownDir = getdown_channel_name + "/" + JAVA_VERSION - getdown_app_base = getdown_channel_base + "/" + getdownDir + getdownDir = "${getdown_channel_name}/${JAVA_VERSION}" + getdown_app_base = "${getdown_channel_base}/${getdownDir}" getdown_app_dir = getdown_app_dir_alt - buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile + buildProperties = "${jalviewDir}/${classesDir}/${build_properties_file}" reportRsyncCommand = true break case "TEST-RELEASE": getdown_channel_name = CHANNEL.toLowerCase() - getdownDir = getdown_channel_name + "/" + JAVA_VERSION - getdown_app_base = getdown_channel_base + "/" + getdownDir + getdownDir = "${getdown_channel_name}/${JAVA_VERSION}" + getdown_app_base = "${getdown_channel_base}/${getdownDir}" getdown_app_dir = getdown_app_dir_alt - buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile + buildProperties = "${jalviewDir}/${classesDir}/${build_properties_file}" reportRsyncCommand = true break case ~/^SCRATCH(|-[-\w]*)$/: getdown_channel_name = CHANNEL - getdownDir = getdown_channel_name + "/" + JAVA_VERSION - getdown_app_base = getdown_channel_base + "/" + getdownDir + getdownDir = "${getdown_channel_name}/${JAVA_VERSION}" + getdown_app_base = "${getdown_channel_base}/${getdownDir}" getdown_app_dir = getdown_app_dir_alt - buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile + buildProperties = "${jalviewDir}/${classesDir}/${build_properties_file}" reportRsyncCommand = true break case "LOCAL": getdown_app_base = file(getdownWebsiteDir).toURI().toString() getdown_app_dir = getdown_app_dir_alt - buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile - getdownLauncher = jalviewDir + '/' + getdown_lib_dir + '/' + getdown_launcher_local + buildProperties = "${jalviewDir}/${classesDir}/${build_properties_file}" + getdownLauncher = "${jalviewDir}/${getdown_lib_dir}/${getdown_launcher_local}" break default: // something wrong specified @@ -151,19 +174,20 @@ ext { } - println("Using a "+CHANNEL+" profile. appbase="+getdown_app_base) - getdownAppDir = getdownWebsiteDir + '/' + getdown_app_dir - //getdownJ11libDir = getdownWebsiteDir + '/' + getdown_j11lib_dir - getdownResourceDir = getdownWebsiteDir + '/' + getdown_resource_dir - getdownInstallDir = getdownWebsiteDir + '/' + getdown_install_dir - getdownFilesDir = jalviewDir + '/' + getdown_files_dir + '/' + JAVA_VERSION + '/' - getdownFilesInstallDir = getdownFilesDir+"/"+getdown_install_dir + getdownAppDir = "${getdownWebsiteDir}/${getdown_app_dir}" + //getdownJ11libDir = "${getdownWebsiteDir}/${getdown_j11lib_dir}" + getdownResourceDir = "${getdownWebsiteDir}/${getdown_resource_dir}" + getdownInstallDir = "${getdownWebsiteDir}/${getdown_install_dir}" + getdownFilesDir = "${jalviewDir}/${getdown_files_dir}/${JAVA_VERSION}/" + getdownFilesInstallDir = "${getdownFilesDir}/${getdown_install_dir}" /* compile without modules -- using classpath libraries - modules_compileClasspath = fileTree(dir: "$jalviewDir/$j11modDir", include: ["*.jar"]) + modules_compileClasspath = fileTree(dir: "${jalviewDir}/${j11modDir}", include: ["*.jar"]) modules_runtimeClasspath = modules_compileClasspath */ gitHash = "" gitBranch = "" + + println("Using a ${CHANNEL} profile.") } def JAVA_INTEGER_VERSION @@ -219,28 +243,30 @@ if (JAVA_VERSION.equals("1.8")) { ] */ } else { - throw new GradleException("JAVA_VERSION=$JAVA_VERSION not currently supported by Jalview") + throw new GradleException("JAVA_VERSION=${JAVA_VERSION} not currently supported by Jalview") } + sourceSets { main { java { - srcDirs "$jalviewDir/$sourceDir" - outputDir = file("$classes") + srcDirs "${jalviewDir}/${sourceDir}" + outputDir = file("${classes}") } resources { - srcDirs "$jalviewDir/$resourceDir" + srcDirs "${jalviewDir}/${resourceDir}" } - jar.destinationDir = file("$jalviewDir/$packageDir") + jar.destinationDir = file("${jalviewDir}/${packageDir}") compileClasspath = files(sourceSets.main.java.outputDir) - compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"]) + compileClasspath += fileTree(dir: "${jalviewDir}/${libDir}", include: ["*.jar"]) runtimeClasspath = compileClasspath } + clover { java { srcDirs = [ cloverInstrDir ] @@ -253,16 +279,16 @@ sourceSets { compileClasspath = configurations.cloverRuntime + files( sourceSets.clover.java.outputDir ) compileClasspath += files(sourceSets.main.java.outputDir) compileClasspath += sourceSets.main.compileClasspath - compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"]) - compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"]) + compileClasspath += fileTree(dir: "${jalviewDir}/${utilsDir}", include: ["**/*.jar"]) + compileClasspath += fileTree(dir: "${jalviewDir}/${libDir}", include: ["*.jar"]) runtimeClasspath = compileClasspath } test { java { - srcDirs "$jalviewDir/$testSourceDir" - outputDir = file("$jalviewDir/$testOutputDir") + srcDirs "${jalviewDir}/${testSourceDir}" + outputDir = file("${jalviewDir}/${testOutputDir}") } resources { @@ -277,13 +303,15 @@ sourceSets { compileClasspath += files(sourceSets.main.java.outputDir) } - compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"]) - compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"]) + compileClasspath += fileTree(dir: "${jalviewDir}/${libDir}", include: ["*.jar"]) + compileClasspath += fileTree(dir: "${jalviewDir}/${utilsDir}/testnglibs", include: ["**/*.jar"]) + compileClasspath += fileTree(dir: "${jalviewDir}/${utilsDir}/testlibs", include: ["**/*.jar"]) runtimeClasspath = compileClasspath } } + // clover bits dependencies { if (use_clover) { @@ -292,14 +320,16 @@ dependencies { } } + configurations { cloverRuntime cloverRuntime.extendsFrom cloverCompile } + eclipse { project { - name = "Jalview with gradle build" + name = eclipse_project_name natures 'org.eclipse.jdt.core.javanature', 'org.eclipse.jdt.groovy.core.groovyNature', @@ -312,117 +342,90 @@ eclipse { classpath { //defaultOutputDir = sourceSets.main.java.outputDir def removeThese = [] - configurations.each{ if (it.isCanBeResolved()) { - removeThese += it + configurations.each{ + if (it.isCanBeResolved()) { + removeThese += it + } } - } - minusConfigurations += removeThese - plusConfigurations = [ ] - file { + minusConfigurations += removeThese + plusConfigurations = [ ] + file { - whenMerged { cp -> - def removeTheseToo = [] - HashMap addedSrcPath = new HashMap<>(); - cp.entries.each { entry -> - if (entry.kind == 'src') { - if (addedSrcPath.getAt(entry.path) || !(entry.path == "src" || entry.path == "test")) { - removeTheseToo += entry - } else { - addedSrcPath.putAt(entry.path, true) + whenMerged { cp -> + def removeTheseToo = [] + HashMap alreadyAddedSrcPath = new HashMap<>(); + cp.entries.each { entry -> + if (entry.kind == 'src') { + if (alreadyAddedSrcPath.getAt(entry.path) || !(entry.path == sourceDir || entry.path == testSourceDir)) { + removeTheseToo += entry + } else { + alreadyAddedSrcPath.putAt(entry.path, true) + } } } - } - cp.entries.removeAll(removeTheseToo) - - print ("CP="+cp.inspect()) - - cp.entries += new Output("bin/main") - cp.entries += new Library(fileReference(helpParentDir)) - cp.entries += new Library(fileReference(resourceDir)) - - HashMap addedLibPath = new HashMap<>(); - - // changing from sourcesets.main.classpath to specific Java version lib - //sourceSets.main.compileClasspath.each{ - fileTree("$jalviewDir/$libDistDir").include("**/*.jar").include("*.jar").each { - //don't 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 - return - } - def itPath = it.toString() - if (itPath.startsWith(jalviewDirAbsolutePath+"/")) { - itPath = itPath.substring(jalviewDirAbsolutePath.length()+1) - } - if (addedLibPath.get(itPath)) { - //println("Not adding duplicate entry "+itPath) - } else { - //println("Adding entry "+itPath) - cp.entries += new Library(fileReference(itPath)) - addedLibPath.put(itPath, true) - } - } + cp.entries.removeAll(removeTheseToo) - // changing from sourcesets.main.classpath to specific Java version lib - //sourceSets.test.compileClasspath.each{ - fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"]).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 - return false // groovy "break" in .each loop + if (file("${jalviewDir}/${eclipse_bin_dir}/main").isDirectory()) { + cp.entries += new Output("${eclipse_bin_dir}/main") } - def itPath = it.toString() - if (itPath.startsWith(jalviewDirAbsolutePath+"/")) { - itPath = itPath.substring(jalviewDirAbsolutePath.length()+1) - } - if (addedLibPath.get(itPath)) { - // don't duplicate - } else { - 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) + if (file(helpParentDir).isDirectory()) { + cp.entries += new Library(fileReference(helpParentDir)) } + if (file(resourceDir).isDirectory()) { + cp.entries += new Library(fileReference(resourceDir)) } - } - // withXml changes ignored by buildship, these add the "test=true" attribute - withXml { - def node = it.asNode() + HashMap alreadyAddedLibPath = new HashMap<>(); - 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" } + sourceSets.main.compileClasspath.findAll { it.name.endsWith(".jar") }.each { + //don't 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 return } - } - def addTestAttribute = true - srcTestAttributes.each{a -> - if (a.name() == "attribute" && a.attributes().getAt("name") == "test") { - addTestAttribute = false + def itPath = it.toString() + if (itPath.startsWith("${jalviewDirAbsolutePath}/")) { + // make relative path + itPath = itPath.substring(jalviewDirAbsolutePath.length()+1) + } + if (alreadyAddedLibPath.get(itPath)) { + //println("Not adding duplicate entry "+itPath) + } else { + //println("Adding entry "+itPath) + cp.entries += new Library(fileReference(itPath)) + alreadyAddedLibPath.put(itPath, true) } } - 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"]) + //fileTree(dir: "$jalviewDir/$utilsDir", include: ["test*/*.jar"]).each { + sourceSets.test.compileClasspath.findAll { it.name.endsWith(".jar") }.any { + //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 + return false // groovy "continue" in .any closure + } + + def itPath = it.toString() + if (itPath.startsWith("${jalviewDirAbsolutePath}/")) { + itPath = itPath.substring(jalviewDirAbsolutePath.length()+1) + } + if (alreadyAddedLibPath.get(itPath)) { + // don't duplicate + } else { + def lib = new Library(fileReference(itPath)) + lib.entryAttributes["test"] = "true" + cp.entries += lib + alreadyAddedLibPath.put(itPath, true) } } - } // withXML + + } // whenMerged + } // file containers 'org.eclipse.buildship.core.gradleclasspathcontainer' + } // classpath jdt { @@ -431,10 +434,11 @@ eclipse { targetCompatibility = compile_target_compatibility javaRuntimeName = eclipse_java_runtime_name + // add in jalview project specific properties/preferences into eclipse core preferences file { withProperties { props -> def jalview_prefs = new Properties() - def ins = new FileInputStream(jalviewDirAbsolutePath+"/"+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 -> @@ -444,12 +448,15 @@ eclipse { } } } - } - //synchronizationTasks eclipseClasspath - //autoBuildTasks eclipseClasspath + } // jdt + + synchronizationTasks "eclipseSynchronizationTask" + autoBuildTasks "eclipseAutoBuildTask" + } + task cloverInstr() { // only instrument source, we build test classes as normal inputs.files files (sourceSets.main.allJava) // , fileTree(dir:"$jalviewDir/$testSourceDir", include: ["**/*.java"])) @@ -489,7 +496,6 @@ task cloverReport { com.atlassian.clover.reporters.xml.XMLReporter.runReport(args) } } - // end clover bits @@ -504,6 +510,7 @@ compileJava { } + compileTestJava { if (use_clover) { dependsOn compileCloverJava @@ -531,21 +538,29 @@ compileCloverJava { classpath += configurations.cloverRuntime } + clean { - delete sourceSets.main.java.outputDir + doFirst { + delete sourceSets.main.java.outputDir + } } + cleanTest { - delete sourceSets.test.java.outputDir - delete cloverInstrDir + doFirst { + delete sourceSets.test.java.outputDir + delete cloverInstrDir + } } + // format is a string like date.format("dd MMMM yyyy") def getDate(format) { def date = new Date() return date.format(format) } + task setGitVals { def hashStdOut = new ByteArrayOutputStream() exec { @@ -567,11 +582,12 @@ task setGitVals { outputs.upToDateWhen { false } } + task createBuildProperties(type: WriteProperties) { dependsOn setGitVals - inputs.dir("$jalviewDir/$sourceDir") - inputs.dir("$classes") - inputs.dir("$jalviewDir/$resourceDir") + inputs.dir("${jalviewDir}/${sourceDir}") + inputs.dir("${jalviewDir}/${resourceDir}") + file(buildProperties).getParentFile().mkdirs() outputFile (buildProperties) // taking time specific comment out to allow better incremental builds comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd HH:mm:ss") @@ -582,15 +598,19 @@ task createBuildProperties(type: WriteProperties) { outputs.file(outputFile) } -def buildingHTML = "$jalviewDir/$docDir/building.html" -task deleteBuildingHTML(type: Delete) { - delete buildingHTML + +def buildingHTML = "${jalviewDir}/${docDir}/building.html" +task cleanBuildingHTML(type: Delete) { + doFirst { + delete buildingHTML + } } + task convertBuildingMD(type: Exec) { - dependsOn deleteBuildingHTML - def buildingMD = "$jalviewDir/$docDir/building.md" - def css = "$jalviewDir/$docDir/github.css" + dependsOn cleanBuildingHTML + def buildingMD = "${jalviewDir}/${docDir}/building.md" + def css = "${jalviewDir}/${docDir}/github.css" def pandoc = null pandoc_exec.split(",").each { @@ -620,33 +640,38 @@ task convertBuildingMD(type: Exec) { inputs.file(css) outputs.file(buildingHTML) } + + clean { - delete buildingHTML + doFirst { + delete buildingHTML + } } + task syncDocs(type: Sync) { dependsOn convertBuildingMD - def syncDir = "$classes/$docDir" - from fileTree("$jalviewDir/$docDir") + def syncDir = "${classes}/${docDir}" + from fileTree("${jalviewDir}/${docDir}") into syncDir } -def helpFile = "$classes/$helpDir/help.jhm" +def helpFile = "${classes}/${helpDir}/help.jhm" task copyHelp(type: Copy) { - def inputDir = "$jalviewDir/$helpParentDir/$helpDir" - def outputDir = "$classes/$helpDir" + def inputDir = "${jalviewDir}/${helpParentDir}/${helpDir}" + def outputDir = "${classes}/${helpDir}" from(inputDir) { exclude '**/*.gif' - exclude '**/*.jpg' - exclude '**/*.png' - filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['Version-Rel': JALVIEW_VERSION,'Year-Rel': getDate("yyyy")]) + exclude '**/*.jpg' + exclude '**/*.png' + filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['Version-Rel': JALVIEW_VERSION,'Year-Rel': getDate("yyyy")]) } from(inputDir) { include '**/*.gif' - include '**/*.jpg' - include '**/*.png' + include '**/*.jpg' + include '**/*.png' } into outputDir @@ -655,22 +680,24 @@ task copyHelp(type: Copy) { outputs.dir(outputDir) } + task syncLib(type: Sync) { - def syncDir = "$classes/$libDistDir" - from fileTree("$jalviewDir/$libDistDir") + def syncDir = "${classes}/${libDistDir}" + from fileTree("${jalviewDir}/${libDistDir}") into syncDir } + task syncResources(type: Sync) { - from "$jalviewDir/$resourceDir" + from "${jalviewDir}/${resourceDir}" include "**/*.*" - exclude "install4j" - into "$classes" + into "${classes}" preserve { include "**" } } + task prepare { dependsOn syncResources dependsOn syncDocs @@ -701,65 +728,76 @@ test { sourceCompatibility = compile_source_compatibility targetCompatibility = compile_target_compatibility jvmArgs += additional_compiler_args - print ("Setting target compatibility to "+targetCompatibility+"\n") + } + task buildIndices(type: JavaExec) { dependsOn copyHelp classpath = sourceSets.main.compileClasspath main = "com.sun.java.help.search.Indexer" - workingDir = "$classes/$helpDir" + workingDir = "${classes}/${helpDir}" def argDir = "html" args = [ argDir ] - inputs.dir("$workingDir/$argDir") - - outputs.dir("$classes/doc") - outputs.dir("$classes/help") - outputs.file("$workingDir/JavaHelpSearch/DOCS") - outputs.file("$workingDir/JavaHelpSearch/DOCS.TAB") - outputs.file("$workingDir/JavaHelpSearch/OFFSETS") - outputs.file("$workingDir/JavaHelpSearch/POSITIONS") - outputs.file("$workingDir/JavaHelpSearch/SCHEMA") - outputs.file("$workingDir/JavaHelpSearch/TMAP") + inputs.dir("${workingDir}/${argDir}") + + outputs.dir("${classes}/doc") + outputs.dir("${classes}/help") + outputs.file("${workingDir}/JavaHelpSearch/DOCS") + outputs.file("${workingDir}/JavaHelpSearch/DOCS.TAB") + outputs.file("${workingDir}/JavaHelpSearch/OFFSETS") + outputs.file("${workingDir}/JavaHelpSearch/POSITIONS") + outputs.file("${workingDir}/JavaHelpSearch/SCHEMA") + outputs.file("${workingDir}/JavaHelpSearch/TMAP") } + task compileLinkCheck(type: JavaCompile) { options.fork = true - classpath = files("$jalviewDir/$utilsDir") - 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") + classpath = files("${jalviewDir}/${utilsDir}") + 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") } -def helplinkscheckertouchfile = file("$jalviewDir/$utilsDir/HelpLinksChecker.touch") + task linkCheck(type: JavaExec) { dependsOn prepare, compileLinkCheck - classpath = files("$jalviewDir/$utilsDir") + + def helpLinksCheckerOutFile = file("${jalviewDir}/${utilsDir}/HelpLinksChecker.out") + classpath = files("${jalviewDir}/${utilsDir}") main = "HelpLinksChecker" workingDir = jalviewDir - def help = "$classes/$helpDir" - args = [ "$classes/$helpDir", "-nointernet" ] - - doLast { - helplinkscheckertouchfile.createNewFile() - } - - inputs.dir("$classes/$helpDir") - outputs.file(helplinkscheckertouchfile) + def help = "${classes}/${helpDir}" + args = [ "${classes}/${helpDir}", "-nointernet" ] + + def outFOS = new FileOutputStream(helpLinksCheckerOutFile, false) // false == don't append + def errFOS = outFOS + standardOutput = new org.apache.tools.ant.util.TeeOutputStream( + outFOS, + standardOutput) + errorOutput = new org.apache.tools.ant.util.TeeOutputStream( + outFOS, + errorOutput) + + inputs.dir("${classes}/${helpDir}") + outputs.file(helpLinksCheckerOutFile) } // import the pubhtmlhelp target -ant.properties.basedir = "$jalviewDir" -ant.properties.helpBuildDir = jalviewDirAbsolutePath+"/$classes/$helpDir" -ant.importBuild "$utilsDir/publishHelp.xml" +ant.properties.basedir = "${jalviewDir}" +ant.properties.helpBuildDir = "${jalviewDirAbsolutePath}/${classes}/${helpDir}" +ant.importBuild "${utilsDir}/publishHelp.xml" task cleanPackageDir(type: Delete) { - delete fileTree("$jalviewDir/$packageDir").include("*.jar") + doFirst { + delete fileTree(dir: "${jalviewDir}/${packageDir}", include: "*.jar") + } } jar { @@ -774,7 +812,7 @@ jar { "Codebase": application_codebase } - destinationDir = file("$jalviewDir/$packageDir") + destinationDir = file("${jalviewDir}/${packageDir}") archiveName = rootProject.name+".jar" exclude "cache*/**" @@ -783,24 +821,27 @@ jar { exclude "**/*.jar" exclude "**/*.jar.*" - inputs.dir("$classes") - outputs.file("$jalviewDir/$packageDir/$archiveName") + inputs.dir("${classes}") + outputs.file("${jalviewDir}/${packageDir}/${archiveName}") } + task copyJars(type: Copy) { - from fileTree("$classes").include("**/*.jar").include("*.jar").files - into "$jalviewDir/$packageDir" + from fileTree(dir: "${classes}", include: "**/*.jar").files + into "${jalviewDir}/${packageDir}" } + // doing a Sync instead of Copy as Copy doesn't deal with "outputs" very well task syncJars(type: Sync) { - from fileTree("$jalviewDir/$libDistDir").include("**/*.jar").include("*.jar").files - into "$jalviewDir/$packageDir" + from fileTree(dir: "${jalviewDir}/${libDistDir}", include: "**/*.jar").files + into "${jalviewDir}/${packageDir}" preserve { include jar.archiveName } } + task makeDist { group = "build" description = "Put all required libraries in dist" @@ -810,9 +851,10 @@ task makeDist { dependsOn cleanPackageDir dependsOn syncJars dependsOn jar - outputs.dir("$jalviewDir/$packageDir") + outputs.dir("${jalviewDir}/${packageDir}") } + task cleanDist { dependsOn cleanPackageDir dependsOn cleanTest @@ -824,7 +866,7 @@ shadowJar { if (buildDist) { dependsOn makeDist } - from ("$jalviewDir/$libDistDir") { + from ("${jalviewDir}/${libDistDir}") { include("*.jar") } manifest { @@ -836,6 +878,7 @@ shadowJar { minimize() } + task getdownWebsite() { group = "distribution" description = "Create the getdown minimal app folder, and website folder for this version of jalview. Website folder also used for offline app installer" @@ -843,10 +886,6 @@ task getdownWebsite() { dependsOn makeDist } - // clean the getdown website and files dir before creating getdown folders - delete project.ext.getdownWebsiteDir - delete project.ext.getdownFilesDir - def getdownWebsiteResourceFilenames = [] def getdownTextString = "" def getdownResourceDir = project.ext.getdownResourceDir @@ -854,22 +893,26 @@ task getdownWebsite() { def getdownResourceFilenames = [] doFirst { + // clean the getdown website and files dir before creating getdown folders + delete project.ext.getdownWebsiteDir + delete project.ext.getdownFilesDir + copy { from buildProperties - rename(buildPropertiesFile, getdown_build_properties) + rename(build_properties_file, getdown_build_properties) into project.ext.getdownAppDir } - getdownWebsiteResourceFilenames += getdown_app_dir+"/"+getdown_build_properties + getdownWebsiteResourceFilenames += "${getdown_app_dir}/${getdown_build_properties}" // go through properties looking for getdown_txt_... def props = project.properties.sort { it.key } - if (getdown_alt_java_min_version.length() > 0) { - props.put("getdown_txt_java_min_version", getdown_alt_java_min_version) - } - if (getdown_alt_java_max_version.length() > 0) { - props.put("getdown_txt_java_max_version", getdown_alt_java_max_version) - } - props.put("getdown_txt_multi_java_location", getdown_alt_multi_java_location) + if (getdown_alt_java_min_version.length() > 0) { + props.put("getdown_txt_java_min_version", getdown_alt_java_min_version) + } + if (getdown_alt_java_max_version.length() > 0) { + props.put("getdown_txt_java_max_version", getdown_alt_java_max_version) + } + props.put("getdown_txt_multi_java_location", getdown_alt_multi_java_location) props.put("getdown_txt_appbase", getdown_app_base) props.each{ prop, val -> @@ -877,7 +920,7 @@ task getdownWebsite() { if (prop.startsWith("getdown_txt_multi_")) { def key = prop.substring(18) val.split(",").each{ v -> - def line = key + " = " + v + "\n" + def line = "${key} = ${v}\n" getdownTextString += line } } else { @@ -889,16 +932,16 @@ task getdownWebsite() { r = file(val) } else if (val.indexOf('/') > 0) { // relative path (relative to jalviewDir) - r = file( jalviewDir + '/' + val ) + r = file( "${jalviewDir}/${val}" ) } if (r.exists()) { - val = getdown_resource_dir + '/' + r.getName() + val = "${getdown_resource_dir}/" + r.getName() getdownWebsiteResourceFilenames += val getdownResourceFilenames += r.getPath() } } if (! prop.startsWith("getdown_txt_resource")) { - def line = prop.substring(12) + " = " + val + "\n" + def line = prop.substring(12) + " = ${val}\n" getdownTextString += line } } @@ -906,7 +949,7 @@ task getdownWebsite() { } getdownWebsiteResourceFilenames.each{ filename -> - getdownTextString += "resource = "+filename+"\n" + getdownTextString += "resource = ${filename}\n" } getdownResourceFilenames.each{ filename -> copy { @@ -925,7 +968,8 @@ task getdownWebsite() { } } codeFiles.sort().each{f -> - def line = "code = " + getdown_app_dir + '/' + f.getName() + "\n" + def name = f.getName() + def line = "code = ${getdown_app_dir}/${name}\n" getdownTextString += line copy { from f.getPath() @@ -936,9 +980,10 @@ task getdownWebsite() { // NOT USING MODULES YET, EVERYTHING SHOULD BE IN dist /* if (JAVA_VERSION.equals("11")) { - def j11libFiles = fileTree(dir: "$jalviewDir/$j11libDir", include: ["*.jar"]).getFiles() + def j11libFiles = fileTree(dir: "${jalviewDir}/${j11libDir}", include: ["*.jar"]).getFiles() j11libFiles.sort().each{f -> - def line = "code = " + getdown_j11lib_dir + '/' + f.getName() + "\n" + def name = f.getName() + def line = "code = ${getdown_j11lib_dir}/${name}\n" getdownTextString += line copy { from f.getPath() @@ -950,13 +995,13 @@ task getdownWebsite() { // 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 = " + getdown_launcher_new + "\n" - getdownTextString += "class = " + mainClass + "\n" + getdownTextString += "resource = ${getdown_launcher_new}\n" + getdownTextString += "class = ${mainClass}\n" - def getdown_txt = file(project.ext.getdownWebsiteDir + "/getdown.txt") + def getdown_txt = file("${project.ext.getdownWebsiteDir}/getdown.txt") getdown_txt.write(getdownTextString) - def launch_jvl = file(project.ext.getdownWebsiteDir + "/" + getdown_launch_jvl) + def launch_jvl = file("${project.ext.getdownWebsiteDir}/${getdown_launch_jvl}") launch_jvl.write("appbase="+props.get("getdown_txt_appbase")) copy { @@ -977,7 +1022,7 @@ task getdownWebsite() { copy { from getdown_txt from getdownLauncher - from getdownWebsiteDir+"/"+getdown_build_properties + from "${getdownWebsiteDir}/${getdown_build_properties}" if (file(getdownLauncher).getName() != getdown_launcher) { rename(file(getdownLauncher).getName(), getdown_launcher) } @@ -994,7 +1039,7 @@ task getdownWebsite() { from getdown_txt from launch_jvl from getdownLauncher - from getdownWebsiteDir+"/"+getdown_build_properties + from "${getdownWebsiteDir}/${getdown_build_properties}" if (file(getdownLauncher).getName() != getdown_launcher) { rename(file(getdownLauncher).getName(), getdown_launcher) } @@ -1002,39 +1047,41 @@ task getdownWebsite() { } copy { - from getdownResourceDir - into project.ext.getdownFilesDir + '/' + getdown_resource_dir + from getdownResourceDir + into "${project.ext.getdownFilesDir}/${getdown_resource_dir}" } } if (buildDist) { - inputs.dir(jalviewDir + '/' + packageDir) + inputs.dir("${jalviewDir}/${packageDir}") } outputs.dir(project.ext.getdownWebsiteDir) outputs.dir(project.ext.getdownFilesDir) } + task getdownDigest(type: JavaExec) { group = "distribution" description = "Digest the getdown website folder" dependsOn getdownWebsite doFirst { - classpath = files(getdownWebsiteDir + '/' + getdown_launcher) + classpath = files("${getdownWebsiteDir}/${getdown_launcher}") } main = "com.threerings.getdown.tools.Digester" args project.ext.getdownWebsiteDir inputs.dir(project.ext.getdownWebsiteDir) - outputs.file(project.ext.getdownWebsiteDir + '/' + "digest2.txt") + outputs.file("${project.ext.getdownWebsiteDir}/digest2.txt") } + task getdown() { group = "distribution" description = "Create the minimal and full getdown app folder for installers and website and create digest file" dependsOn getdownDigest doLast { if (reportRsyncCommand) { - def fromDir = getdownWebsiteDir + (getdownWebsiteDir.endsWith("/")?"":"/") - def toDir = getdown_rsync_dest + "/" + getdownDir + (getdownDir.endsWith("/")?"":"/") + def fromDir = getdownWebsiteDir + (getdownWebsiteDir.endsWith('/')?'':'/') + def toDir = "${getdown_rsync_dest}/${getdownDir}" + (getdownDir.endsWith('/')?'':'/') println "LIKELY RSYNC COMMAND:" println "mkdir -p '$toDir'\nrsync -avh --delete '$fromDir' '$toDir'" if (RUNRSYNC == "true") { @@ -1049,11 +1096,15 @@ task getdown() { } } + clean { - delete project.ext.getdownWebsiteDir - delete project.ext.getdownFilesDir + doFirst { + delete project.ext.getdownWebsiteDir + delete project.ext.getdownFilesDir + } } + install4j { def install4jHomeDir = "/opt/install4j" def hostname = "hostname".execute().text.trim() @@ -1074,20 +1125,21 @@ install4j { } } + def install4jConf def macosJavaVMDir def macosJavaVMTgz def windowsJavaVMDir def windowsJavaVMTgz -def install4jDir = "$jalviewDir/$install4jResourceDir" -def install4jConfFile = "jalview-installers-java"+JAVA_VERSION+".install4j" -install4jConf = "$install4jDir/$install4jConfFile" +def install4jDir = "${jalviewDir}/${install4jResourceDir}" +def install4jConfFile = "jalview-installers-java${JAVA_VERSION}.install4j" +install4jConf = "${install4jDir}/${install4jConfFile}" task copyInstall4jTemplate(type: Copy) { - macosJavaVMDir = System.env.HOME+"/buildtools/jre/openjdk-java_vm/getdown/macos-jre"+JAVA_VERSION+"/jre" - macosJavaVMTgz = System.env.HOME+"/buildtools/jre/openjdk-java_vm/install4j/tgz/macos-jre"+JAVA_VERSION+".tar.gz" - windowsJavaVMDir = System.env.HOME+"/buildtools/jre/openjdk-java_vm/getdown/windows-jre"+JAVA_VERSION+"/jre" - windowsJavaVMTgz = System.env.HOME+"/buildtools/jre/openjdk-java_vm/install4j/tgz/windows-jre"+JAVA_VERSION+".tar.gz" + macosJavaVMDir = "${System.env.HOME}/buildtools/jre/openjdk-java_vm/getdown/macos-jre${JAVA_VERSION}/jre" + macosJavaVMTgz = "${System.env.HOME}/buildtools/jre/openjdk-java_vm/install4j/tgz/macos-jre${JAVA_VERSION}.tar.gz" + windowsJavaVMDir = "${System.env.HOME}/buildtools/jre/openjdk-java_vm/getdown/windows-jre${JAVA_VERSION}/jre" + windowsJavaVMTgz = "${System.env.HOME}/buildtools/jre/openjdk-java_vm/install4j/tgz/windows-jre${JAVA_VERSION}.tar.gz" from (install4jDir) { include install4jTemplate rename (install4jTemplate, install4jConfFile) @@ -1120,7 +1172,7 @@ task copyInstall4jTemplate(type: Copy) { doLast { // include file associations in installer - def installerFileAssociationsXml = file("$install4jDir/$install4jInstallerFileAssociations").text + def installerFileAssociationsXml = file("${install4jDir}/${install4jInstallerFileAssociations}").text ant.replaceregexp( byline: false, flags: "s", @@ -1142,38 +1194,44 @@ task copyInstall4jTemplate(type: Copy) { } } + task installers(type: com.install4j.gradle.Install4jTask) { group = "distribution" description = "Create the install4j installers" dependsOn getdown dependsOn copyInstall4jTemplate projectFile = file(install4jConf) - println("Using projectFile "+projectFile) variables = [majorVersion: version.substring(2, 11), build: 001, OSX_KEYSTORE: OSX_KEYSTORE, JSIGN_SH: JSIGN_SH] - destination = "$jalviewDir/$install4jBuildDir/$JAVA_VERSION" + destination = "${jalviewDir}/${install4jBuildDir}/${JAVA_VERSION}" buildSelected = true if (OSX_KEYPASS) { macKeystorePassword=OSX_KEYPASS + } + doFirst { + println("Using projectFile "+projectFile) } inputs.dir(project.ext.getdownWebsiteDir) inputs.file(install4jConf) inputs.dir(macosJavaVMDir) inputs.dir(windowsJavaVMDir) - outputs.dir("$jalviewDir/$install4jBuildDir/$JAVA_VERSION") - + outputs.dir("${jalviewDir}/${install4jBuildDir}/${JAVA_VERSION}") } + clean { - delete install4jConf + doFirst { + delete install4jConf + } } + task sourceDist (type: Tar) { def VERSION_UNDERSCORES = JALVIEW_VERSION.replaceAll("\\.", "_") - def outputFileName = project.name + "_" + VERSION_UNDERSCORES + ".tar.gz" + def outputFileName = "${project.name}_${VERSION_UNDERSCORES}.tar.gz" // cater for buildship < 3.1 [3.0.1 is max version in eclipse 2018-09] try { archiveFileName = outputFileName @@ -1190,7 +1248,7 @@ task sourceDist (type: Tar) { ,"benchmarking/*" ,"**/.*" ,"*.class" - ,"**/*.class","$j11modDir/**/*.jar","appletlib","**/*locales" + ,"**/*.class","${j11modDir}/**/*.jar","appletlib","**/*locales" ,"*locales/**", ,"utils/InstallAnywhere"] def PROCESS_FILES=[ "AUTHORS", @@ -1230,7 +1288,7 @@ task sourceDist (type: Tar) { exclude (getdown_website_dir) // exluding these as not using jars as modules yet - exclude ("$j11modDir/**/*.jar") + exclude ("${j11modDir}/**/*.jar") } // from (jalviewDir) { // // explicit includes for stuff that seemed to not get included @@ -1240,10 +1298,892 @@ task sourceDist (type: Tar) { // } } + task helppages { dependsOn copyHelp dependsOn pubhtmlhelp - inputs.dir("$classes/$helpDir") - outputs.dir("$helpOutputDir") + inputs.dir("${classes}/${helpDir}") + outputs.dir("${helpOutputDir}") +} + + +def jalviewjsBuildDir +def jalviewjsSiteDir +def jalviewjsTransferSiteJsDir +def jalviewjsTransferSiteLibDir +def jalviewjsTransferSiteSwingJsDir +def jalviewjsTransferSiteCoreDir +task jalviewjsSitePath { + def relativeBuildDir = file(jalviewDirAbsolutePath).toPath().relativize(buildDir.toPath()) + jalviewjsBuildDir = "${relativeBuildDir}/jalviewjs" + jalviewjsSiteDir = "${jalviewjsBuildDir}/${jalviewjs_site_dir}" + jalviewjsTransferSiteJsDir = "${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_js" + jalviewjsTransferSiteLibDir = "${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_lib" + jalviewjsTransferSiteSwingJsDir = "${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_swingjs" + jalviewjsTransferSiteCoreDir = "${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_core" +} + + +def eclipseWorkspace +task jalviewjsSetEclipseWorkspace { + def propKey = "jalviewjs_eclipse_workspace" + def propVal = null + if (project.hasProperty(propKey)) { + propVal = project.getProperty(propKey) + if (propVal.startsWith("~/")) { + propVal = System.getProperty("user.home") + propVal.substring(1) + } + } + def propsFileName = "${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_eclipse_workspace_location_file}" + def propsFile = file(propsFileName) + def eclipseWsDir = propVal + def props = new Properties() + + if (( eclipseWsDir == null || !file(eclipseWsDir).exists() ) && propsFile.exists()) { + def ins = new FileInputStream(propsFileName) + props.load(ins) + ins.close() + if (props.getProperty(propKey, null) != null) { + eclipseWsDir = props.getProperty(propKey) + } + } + + def writeProps = false + if (eclipseWsDir == null || !file(eclipseWsDir).exists()) { + def tempDir = File.createTempDir() + eclipseWsDir = tempDir.getAbsolutePath() + writeProps = true + } + eclipseWorkspace = file(eclipseWsDir) + + doFirst { + if (writeProps) { + props.setProperty(propKey, eclipseWsDir) + propsFile.parentFile.mkdirs() + def bytes = new ByteArrayOutputStream() + props.store(bytes, null) + def propertiesString = bytes.toString() + propsFile.text = propertiesString + } + + println("ECLIPSE WORKSPACE: "+eclipseWorkspace.getPath()) + } + + //inputs.property(propKey, eclipseWsDir) // eclipseWsDir only gets set once this task runs, so will be out-of-date + outputs.file(propsFileName) + outputs.upToDateWhen { eclipseWorkspace.exists() } +} + + +def eclipseBinary +def eclipseVersion +def eclipseDebug = false +def eclipseVersionSuffix = "" +task jalviewjsEclipsePaths { + def eclipseProduct + + def eclipseRoot = jalviewjs_eclipse_root + if (eclipseRoot.startsWith("~/")) { + eclipseRoot = System.getProperty("user.home") + eclipseRoot.substring(1) + } + if (OperatingSystem.current().isMacOsX()) { + eclipseRoot += "/Eclipse.app" + eclipseBinary = "${eclipseRoot}/Contents/MacOS/eclipse" + eclipseProduct = "${eclipseRoot}/Contents/Eclipse/.eclipseproduct" + } else if (OperatingSystem.current().isWindows()) { // check these paths!! + if (file("${eclipseRoot}/eclipse").isDirectory() && file("${eclipseRoot}/eclipse/.eclipseproduct").exists()) { + eclipseRoot += "/eclipse.exe" + } + eclipseBinary = "${eclipseRoot}/eclipse" + eclipseProduct = "${eclipseRoot}/.eclipseproduct" + } else { // linux or unix + if (file("${eclipseRoot}/eclipse").isDirectory() && file("${eclipseRoot}/eclipse/.eclipseproduct").exists()) { + eclipseRoot += "/eclipse" + } + eclipseBinary = "${eclipseRoot}/eclipse" + eclipseProduct = "${eclipseRoot}/.eclipseproduct" + } + + eclipseVersion = "4.13" // default + def assumedVersion = true + if (file(eclipseProduct).exists()) { + def fis = new FileInputStream(eclipseProduct) + def props = new Properties() + props.load(fis) + eclipseVersion = props.getProperty("version") + fis.close() + assumedVersion = false + } + + def propKey = "eclipse_debug" + eclipseDebug = (project.hasProperty(propKey) && project.getProperty(propKey).equals("true")) + + doFirst { + if (!assumedVersion) { + println("ECLIPSE VERSION=${eclipseVersion}") + } + } +} + + +task eclipseSetup { + dependsOn eclipseProject + dependsOn eclipseClasspath + dependsOn eclipseJdt +} + + +// this version (type: Copy) will delete anything in the eclipse dropins folder that isn't in fromDropinsDir +task jalviewjsEclipseCopyDropins(type: Copy) { + dependsOn jalviewjsEclipsePaths + + def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjs_eclipse_dropins_dir}", include: "*.jar") + inputFiles += file("${jalviewDir}/${jalviewjs_j2s_plugin}") + def outputDir = "${jalviewDir}/${jalviewjsBuildDir}/${jalviewjs_eclipse_tmp_dropins_dir}" + + from inputFiles + into outputDir +} + + +// this eclipse -clean doesn't actually work +task jalviewjsCleanEclipse(type: Exec) { + dependsOn eclipseSetup + dependsOn jalviewjsEclipsePaths + dependsOn jalviewjsEclipseCopyDropins + + executable(eclipseBinary) + args(["-nosplash", "--launcher.suppressErrors", "-data", eclipseWorkspace.getPath(), "-clean", "-console", "-consoleLog"]) + if (eclipseDebug) { + args += "-debug" + } + args += "-l" + + def inputString = """exit +y +""" + def inputByteStream = new ByteArrayInputStream(inputString.getBytes()) + standardInput = inputByteStream +} + +/* not really working yet +jalviewjsEclipseCopyDropins.finalizedBy jalviewjsCleanEclipse +*/ + + +task jalviewjsTransferUnzipSwingJs { + dependsOn jalviewjsSitePath + + def file_zip = "${jalviewDir}/${jalviewjs_swingjs_zip}" + + doLast { + copy { + from zipTree(file_zip) + into "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}" + } + } + + inputs.file file_zip + outputs.dir "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}" +} + + +task jalviewjsTransferUnzipLib { + dependsOn jalviewjsSitePath + + def zipFiles = fileTree(dir: "${jalviewDir}/${jalviewjs_libjs_dir}", include: "*.zip") + + doLast { + zipFiles.each { file_zip -> + copy { + from zipTree(file_zip) + into "${jalviewDir}/${jalviewjsTransferSiteLibDir}" + } + } + } + + inputs.files zipFiles + outputs.dir "${jalviewDir}/${jalviewjsTransferSiteLibDir}" +} + + +task jalviewjsTransferUnzipAllLibs { + dependsOn jalviewjsTransferUnzipSwingJs + dependsOn jalviewjsTransferUnzipLib +} + + +task jalviewjsCreateJ2sSettings(type: WriteProperties) { + group "JalviewJS" + description "Create the .j2s file from the j2s.* properties" + + dependsOn jalviewjsSitePath + + outputFile ("${jalviewDir}/${jalviewjs_j2s_settings}") + def j2s_props = project.properties.findAll { it.key.startsWith("j2s.") }.sort { it.key } + def siteDirProperty = "j2s.site.directory" + def setSiteDir = false + j2s_props.each { prop, val -> + if (val != null) { + if (prop == siteDirProperty) { + if (!(val.startsWith('/') || val.startsWith("file://") )) { + val = "${jalviewDir}/${jalviewjsTransferSiteJsDir}/${val}" + } + setSiteDir = true + } + property(prop,val) + } + if (!setSiteDir) { // default site location, don't override specifically set property + property(siteDirProperty,"${jalviewDir}/${jalviewjsTransferSiteJsDir}") + } + } + inputs.properties(j2s_props) + outputs.file(outputFile) +} + + +task jalviewjsEclipseSetup { + dependsOn jalviewjsEclipseCopyDropins + dependsOn jalviewjsSetEclipseWorkspace + dependsOn jalviewjsCreateJ2sSettings +} + + +task jalviewjsSyncAllLibs (type: Sync) { + dependsOn jalviewjsSitePath + dependsOn jalviewjsTransferUnzipAllLibs + def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjsTransferSiteLibDir}") + inputFiles += fileTree(dir: "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}") + def outputDir = "${jalviewDir}/${jalviewjsSiteDir}" + + from inputFiles + into outputDir + def outputFiles = [] + rename { filename -> + outputFiles += "${outputDir}/${filename}" + null + } + preserve { + include "**" + } + outputs.files outputFiles + inputs.files inputFiles +} + + +task jalviewjsSyncResources (type: Sync) { + dependsOn jalviewjsSitePath + def inputFiles = fileTree(dir: "${jalviewDir}/${resourceDir}") + def outputDir = "${jalviewDir}/${jalviewjsSiteDir}/${jalviewjs_j2s_subdir}" + + from inputFiles + into outputDir + def outputFiles = [] + rename { filename -> + outputFiles += "${outputDir}/${filename}" + null + } + preserve { + include "**" + } + outputs.files outputFiles + inputs.files inputFiles +} + + +task jalviewjsSyncSiteResources (type: Sync) { + dependsOn jalviewjsSitePath + def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjs_site_resource_dir}") + def outputDir = "${jalviewDir}/${jalviewjsSiteDir}" + + from inputFiles + into outputDir + def outputFiles = [] + rename { filename -> + outputFiles += "${outputDir}/${filename}" + null + } + preserve { + include "**" + } + outputs.files outputFiles + inputs.files inputFiles +} + + +task jalviewjsSyncBuildProperties (type: Sync) { + dependsOn jalviewjsSitePath + dependsOn createBuildProperties + def inputFiles = [file(buildProperties)] + def outputDir = "${jalviewDir}/${jalviewjsSiteDir}/${jalviewjs_j2s_subdir}" + + from inputFiles + into outputDir + def outputFiles = [] + rename { filename -> + outputFiles += "${outputDir}/${filename}" + null + } + preserve { + include "**" + } + outputs.files outputFiles + inputs.files inputFiles +} + + +task jalviewjsProjectImport(type: Exec) { + dependsOn eclipseSetup + dependsOn jalviewjsEclipsePaths + dependsOn jalviewjsEclipseSetup + + doFirst { + // do not run a headless import when we claim to be in Eclipse + if (ECLIPSE_IDE_DEVELOPER.equals("true")) { + throw new StopExecutionException("Not running headless import whilst ECLIPSE_IDE_DEVELOPER is '"+ECLIPSE_IDE_DEVELOPER+"'") + } + } + + //def projdir = eclipseWorkspace.getPath()+"/.metadata/.plugins/org.eclipse.core.resources/.projects/jalview/org.eclipse.jdt.core" + def projdir = eclipseWorkspace.getPath()+"/.metadata/.plugins/org.eclipse.core.resources/.projects/jalview" + executable(eclipseBinary) + args(["-nosplash", "--launcher.suppressErrors", "-application", "com.seeq.eclipse.importprojects.headlessimport", "-data", eclipseWorkspace.getPath(), "-import", jalviewDirAbsolutePath]) + if (eclipseDebug) { + args += "-debug" + } + args += [ "--launcher.appendVmargs", "-vmargs", "-Dorg.eclipse.equinox.p2.reconciler.dropins.directory=${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_eclipse_tmp_dropins_dir}" ] + + inputs.file("${jalviewDir}/.project") + outputs.upToDateWhen { + file(projdir).exists() + } +} + + +task jalviewjsTranspile(type: Exec) { + dependsOn jalviewjsEclipseSetup + dependsOn jalviewjsProjectImport + dependsOn jalviewjsEclipsePaths + + doFirst { + // do not run a headless transpile when we claim to be in Eclipse + if (ECLIPSE_IDE_DEVELOPER.equals("true")) { + throw new StopExecutionException("Not running headless transpile whilst ECLIPSE_IDE_DEVELOPER is '"+ECLIPSE_IDE_DEVELOPER+"'") + } + } + + executable(eclipseBinary) + args(["-nosplash", "--launcher.suppressErrors", "-application", "org.eclipse.jdt.apt.core.aptBuild", "-data", eclipseWorkspace, "-${jalviewjs_eclipse_build_arg}", eclipse_project_name ]) + if (eclipseDebug) { + args += "-debug" + } + args += [ "--launcher.appendVmargs", "-vmargs", "-Dorg.eclipse.equinox.p2.reconciler.dropins.directory=${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_eclipse_tmp_dropins_dir}" ] + + def stdout + def stderr + doFirst { + stdout = new ByteArrayOutputStream() + stderr = new ByteArrayOutputStream() + + def logOutFileName = "${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_j2s_transpile_stdout}" + def logOutFile = file(logOutFileName) + logOutFile.createNewFile() + logOutFile.text = """ROOT: ${jalviewjs_eclipse_root} +BINARY: ${eclipseBinary} +VERSION: ${eclipseVersion} +WORKSPACE: ${eclipseWorkspace} +DEBUG: ${eclipseDebug} +---- +""" + def logOutFOS = new FileOutputStream(logOutFile, true) // true == append + // combine stdout and stderr + def logErrFOS = logOutFOS + + if (jalviewjs_j2s_to_console.equals("true")) { + standardOutput = new org.apache.tools.ant.util.TeeOutputStream( + new org.apache.tools.ant.util.TeeOutputStream( + logOutFOS, + stdout), + standardOutput) + errorOutput = new org.apache.tools.ant.util.TeeOutputStream( + new org.apache.tools.ant.util.TeeOutputStream( + logErrFOS, + stderr), + errorOutput) + } else { + standardOutput = new org.apache.tools.ant.util.TeeOutputStream( + logOutFOS, + stdout) + errorOutput = new org.apache.tools.ant.util.TeeOutputStream( + logErrFOS, + stderr) + } + } + + doLast { + if (stdout.toString().contains("Error processing ")) { + // j2s did not complete transpile + //throw new TaskExecutionException("Error during transpilation:\n${stderr}\nSee eclipse transpile log file '${jalviewDir}/${jalviewjsBuildDir}/${jalviewjs_j2s_transpile_stdout}'") + throw new GradleException("Error during transpilation:\n${stderr}\nSee eclipse transpile log file '${jalviewDir}/${jalviewjsBuildDir}/${jalviewjs_j2s_transpile_stdout}'") + } + } + + inputs.dir("${jalviewDir}/${sourceDir}") + outputs.dir("${jalviewDir}/${jalviewjsTransferSiteJsDir}") + outputs.upToDateWhen( { file("${jalviewDir}/${jalviewjsTransferSiteJsDir}${jalviewjs_server_resource}").exists() } ) +} + + +def jalviewjsCallCore(FileCollection list, String prefixFile, String suffixFile, String jsfile, String zjsfile, File logOutFile, Boolean logOutConsole) { + + def stdout = new ByteArrayOutputStream() + def stderr = new ByteArrayOutputStream() + + def coreFile = file(jsfile) + def msg = "" + msg = "Generating ${jsfile}" + println(msg) + logOutFile.createNewFile() + logOutFile.append(msg+"\n") + + def coreTop = file(prefixFile) + def coreBottom = file(suffixFile) + coreFile.getParentFile().mkdirs() + coreFile.createNewFile() + coreFile.write( coreTop.text ) + list.each { + f -> + if (f.exists()) { + def t = f.text + t.replaceAll("Clazz\\.","Clazz_") + t.replaceAll("Class__","Clazz._") + coreFile.append( t ) + } else { + msg = "...file '"+f.getPath()+"' does not exist, skipping" + println(msg) + logOutFile.append(msg+"\n") + } + } + coreFile.append( coreBottom.text ) + + msg = "Generating ${zjsfile}" + println(msg) + logOutFile.append(msg+"\n") + def logOutFOS = new FileOutputStream(logOutFile, true) // true == append + def logErrFOS = logOutFOS + + javaexec { + classpath = files(["${jalviewDir}/tools/closure_compiler.jar"]) + args = [ "--js", jsfile, "--js_output_file", zjsfile ] + + msg = "\nRunning '"+commandLine.join(' ')+"'\n" + println(msg) + logOutFile.append(msg+"\n") + + if (logOutConsole) { + standardOutput = new org.apache.tools.ant.util.TeeOutputStream( + new org.apache.tools.ant.util.TeeOutputStream( + logOutFOS, + stdout), + standardOutput) + errorOutput = new org.apache.tools.ant.util.TeeOutputStream( + new org.apache.tools.ant.util.TeeOutputStream( + logErrFOS, + stderr), + errorOutput) + } else { + standardOutput = new org.apache.tools.ant.util.TeeOutputStream( + logOutFOS, + stdout) + errorOutput = new org.apache.tools.ant.util.TeeOutputStream( + logErrFOS, + stderr) + } + } + msg = "--" + println(msg) + logOutFile.append(msg+"\n") +} + + +def jalviewjsJalviewTemplateName = "JalviewJS" +def jalviewjsJalviewCoreName = "_jalview" +task jalviewjsNoTranspileBuildAllCores { + dependsOn jalviewjsSitePath + dependsOn jalviewjsTransferUnzipSwingJs + + def j2sDir = "${jalviewDir}/${jalviewjsTransferSiteJsDir}/${jalviewjs_j2s_subdir}" + def jsDir = "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}/${jalviewjs_js_subdir}" + def outputDir = "${jalviewDir}/${jalviewjsTransferSiteCoreDir}/${jalviewjs_j2s_subdir}/core" + def prefixFile = "${jsDir}/core/coretop2.js" + def suffixFile = "${jsDir}/core/corebottom2.js" + + inputs.file prefixFile + inputs.file suffixFile + + def classlistFiles = [] + // add the classlists found int the jalviewjs_classlists_dir + fileTree(dir: "${jalviewDir}/${jalviewjs_classlists_dir}", include: "*.txt").each { + file -> + def name = file.getName() - ".txt" + classlistFiles += [ + 'file': file, + 'name': name + ] + } + + // _jmol and _jalview cores. Add any other peculiar classlist.txt files here + classlistFiles += [ 'file': file("${jalviewDir}/${jalviewjs_classlist_jmol}"), 'name': "_jvjmol" ] + classlistFiles += [ 'file': file("${jalviewDir}/${jalviewjs_classlist_jalview}"), 'name': jalviewjsJalviewCoreName ] + + def classlists = [] + + classlistFiles.each { + hash -> + + def file = hash['file'] + if (! file.exists()) { + println("...classlist file '"+file.getPath()+"' does not exist, skipping") + return false // this is a "continue" in groovy .each closure + } + def name = hash['name'] + if (name == null) { + name = file.getName() - ".txt" + } + + def filelist = [] + file.eachLine { + line -> + filelist += line + } + def list = fileTree(dir: j2sDir, includes: filelist) + + def jsfile = "${outputDir}/core${name}.js" + def zjsfile = "${outputDir}/core${name}.z.js" + + classlists += [ + 'jsfile': jsfile, + 'zjsfile': zjsfile, + 'list': list + ] + + inputs.file(file) + inputs.files(list) + outputs.file(jsfile) + outputs.file(zjsfile) + } + + // _stevesoft core. add any cores without a classlist here (and the inputs and outputs) + def stevesoftClasslist = [ + 'jsfile': "${outputDir}/core_stevesoft.js", + 'zjsfile': "${outputDir}/core_stevesoft.z.js", + 'list': fileTree(dir: j2sDir, include: "com/stevesoft/pat/**/*.js") + ] + classlists += stevesoftClasslist + inputs.files(stevesoftClasslist['list']) + outputs.file(stevesoftClasslist['jsfile']) + outputs.file(stevesoftClasslist['zjsfile']) + + doFirst { + def logOutFile = file("${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_j2s_closure_stdout}") + logOutFile.getParentFile().mkdirs() + logOutFile.createNewFile() + logOutFile.write(getDate("yyyy-MM-dd HH:mm:ss")+" jalviewjsNoTranspileBuildAllCores\n----\n") + + classlists.each { + jalviewjsCallCore(it.list, prefixFile, suffixFile, it.jsfile, it.zjsfile, logOutFile, jalviewjs_j2s_to_console.equals("true")) + } + } + +} + + +jalviewjsNoTranspileBuildAllCores.mustRunAfter jalviewjsTranspile + + +task jalviewjsBuildAllCores { + group "JalviewJS" + description "Build the core js lib closures listed in the classlists dir" + dependsOn jalviewjsTranspile + dependsOn jalviewjsNoTranspileBuildAllCores +} + + +def jalviewjsJalviewCoreHtmlFile +task jalviewjsPublishCoreTemplate(type: Sync) { + dependsOn jalviewjsSitePath + dependsOn jalviewjsBuildAllCores + + def inputFile = file("${jalviewDir}/${j2s_template_html}") + def outputDir = "${jalviewDir}/${jalviewjsTransferSiteCoreDir}" + + from inputFile + into outputDir + def outputFiles = [] + jalviewjsJalviewCoreHtmlFile = "${jalviewjsJalviewTemplateName}_${jalviewjsJalviewCoreName}.html" + rename { filename -> + outputFiles += "${outputDir}/${filename}" + if (filename.equals(inputFile.getName())) { + return jalviewjsJalviewCoreHtmlFile + } + return null + } + filter(ReplaceTokens, beginToken: '_', endToken: '_', tokens: ['MAIN': '"'+mainClass+'"', 'CODE': "null", 'NAME': jalviewjsJalviewTemplateName]) + filter(ReplaceTokens, beginToken: '', endToken: '', tokens: ['NONE': jalviewjsJalviewCoreName]) + preserve { + include "**" + } + outputs.files outputFiles + inputs.files inputFile +} + + +task jalviewjsNoTranspileSyncCore (type: Sync) { + dependsOn jalviewjsSitePath + dependsOn jalviewjsNoTranspileBuildAllCores + dependsOn jalviewjsPublishCoreTemplate + def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjsTransferSiteCoreDir}") + def outputDir = "${jalviewDir}/${jalviewjsSiteDir}" + + from inputFiles + into outputDir + def outputFiles = [] + rename { filename -> + outputFiles += "${outputDir}/${filename}" + null + } + preserve { + include "**" + } + outputs.files outputFiles + inputs.files inputFiles +} + + +task jalviewjsSyncCore (type: Sync) { + dependsOn jalviewjsTranspile + dependsOn jalviewjsNoTranspileSyncCore + dependsOn "jalviewjsBuildAllCores" +} + + +// this Copy version of TransferSiteJs will delete anything else in the target dir +task jalviewjsCopyTransferSiteJs(type: Copy) { + dependsOn jalviewjsTranspile + from "${jalviewDir}/${jalviewjsTransferSiteJsDir}" + into "${jalviewDir}/${jalviewjsSiteDir}" +} + + +// this Sync version of TransferSite is used by buildship to keep the website automatically up to date when a file changes +task jalviewjsNoTranspileSyncTransferSiteJs(type: Sync) { + from "${jalviewDir}/${jalviewjsTransferSiteJsDir}" + include "**/*.*" + into "${jalviewDir}/${jalviewjsSiteDir}" + preserve { + include "**" + } +} + +jalviewjsSyncAllLibs.mustRunAfter jalviewjsCopyTransferSiteJs +jalviewjsSyncResources.mustRunAfter jalviewjsCopyTransferSiteJs +jalviewjsSyncSiteResources.mustRunAfter jalviewjsCopyTransferSiteJs +jalviewjsSyncBuildProperties.mustRunAfter jalviewjsCopyTransferSiteJs + +jalviewjsSyncAllLibs.mustRunAfter jalviewjsNoTranspileSyncTransferSiteJs +jalviewjsSyncResources.mustRunAfter jalviewjsNoTranspileSyncTransferSiteJs +jalviewjsSyncSiteResources.mustRunAfter jalviewjsNoTranspileSyncTransferSiteJs +jalviewjsSyncBuildProperties.mustRunAfter jalviewjsNoTranspileSyncTransferSiteJs + + +task jalviewjsNoTranspilePrepareSite { + dependsOn jalviewjsSyncAllLibs + dependsOn jalviewjsSyncResources + dependsOn jalviewjsSyncSiteResources + dependsOn jalviewjsSyncBuildProperties + dependsOn jalviewjsNoTranspileSyncCore +} + + +task jalviewjsPrepareSite { + group "JalviewJS" + description "Prepares the website folder including unzipping files and copying resources" + dependsOn jalviewjsSyncAllLibs + dependsOn jalviewjsSyncResources + dependsOn jalviewjsSyncSiteResources + dependsOn jalviewjsSyncBuildProperties + dependsOn jalviewjsSyncCore +} + + +task jalviewjsBuildSite { + group "JalviewJS" + description "Builds the whole website including transpiled code" + dependsOn jalviewjsCopyTransferSiteJs + dependsOn jalviewjsPrepareSite +} + + +task cleanJalviewjsSite { + doFirst { + delete "${jalviewDir}/${jalviewjsTransferSiteJsDir}" + delete "${jalviewDir}/${jalviewjsTransferSiteLibDir}" + delete "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}" + delete "${jalviewDir}/${jalviewjsTransferSiteCoreDir}" + delete "${jalviewDir}/${jalviewjsSiteDir}" + } +} + + +task jalviewjsSiteTar(type: Tar) { + group "JalviewJS" + description "Creates a tar.gz file for the website" + dependsOn jalviewjsBuildSite + def outputFilename = "jalviewjs-site-${JALVIEW_VERSION}.tar.gz" + try { + archiveFileName = outputFilename + } catch (Exception e) { + archiveName = outputFilename + } + + compression Compression.GZIP + + from "${jalviewDir}/${jalviewjsSiteDir}" + into jalviewjs_site_dir // this is inside the tar file + + inputs.dir("${jalviewDir}/${jalviewjsSiteDir}") +} + + +task jalviewjsServer { + group "JalviewJS" + def filename = "jalviewjsTest.html" + description "Starts a webserver on localhost to test the website. See ${filename} to access local site on most recently used port." + dependsOn jalviewjsSitePath + def htmlFile = "${jalviewDirAbsolutePath}/${filename}" + doLast { + + SimpleHttpFileServerFactory factory = new SimpleHttpFileServerFactory() + def port = Integer.valueOf(jalviewjs_server_port) + def start = port + def running = false + def url + def urlcore + while(port < start+1000 && !running) { + try { + def doc_root = new File("${jalviewDirAbsolutePath}/${jalviewjsSiteDir}") + def jalviewjsServer = factory.start(doc_root, port) + running = true + url = jalviewjsServer.getResourceUrl(jalviewjs_server_resource) + urlcore = jalviewjsServer.getResourceUrl(jalviewjsJalviewCoreHtmlFile) + println("SERVER STARTED with document root ${doc_root}.") + println("Go to "+url+" . Run gradle --stop to stop (kills all gradle daemons).") + println("For debug: "+url+"?j2sdebug") + println("For core: "+urlcore) + + file(htmlFile).text = """ +

JalviewJS Test. <${url}>

+

JalviewJS Test with debug. <${url}?j2sdebug<

+

${jalviewjsJalviewTemplateName} Core Test. <${urlcore}>

+ """ + + } catch (Exception e) { + port++; + } + } + + } + + outputs.file(htmlFile) + outputs.upToDateWhen({false}) +} + + +task cleanJalviewjsAll { + group "JalviewJS" + description "Delete all configuration and build artifacts to do with JalviewJS build" + dependsOn cleanJalviewjsSite + dependsOn jalviewjsEclipsePaths + + doFirst { + delete "${jalviewDir}/${jalviewjsBuildDir}" + delete "${jalviewDir}/${eclipse_bin_dir}" + if (eclipseWorkspace != null && file(eclipseWorkspace.getAbsolutePath()+"/.metadata").exists()) { + delete file(eclipseWorkspace.getAbsolutePath()+"/.metadata") + } + delete "${jalviewDir}/${jalviewjs_j2s_settings}" + } + + outputs.upToDateWhen( { false } ) +} + + + +task jalviewjsIDE_CopyTransferSiteJs(type: Copy) { + from "${jalviewDir}/${jalviewjsTransferSiteJsDir}" + into "${jalviewDir}/${jalviewjsSiteDir}" +} + + +task jalviewjsIDE_j2sFile { + group "00 JalviewJS in Eclipse" + description "Creates the .j2s file" + dependsOn jalviewjsCreateJ2sSettings +} + + +task jalviewjsIDE_BuildAllCores { + group "00 JalviewJS in Eclipse" + description "Build the core js lib closures listed in the classlists dir" + dependsOn jalviewjsNoTranspileBuildAllCores +} + + +task jalviewjsIDE_AssembleSite { + group "00 JalviewJS in Eclipse" + description "Assembles the Eclipse transpiled site and unzips supporting zipfiles" + dependsOn jalviewjsIDE_CopyTransferSiteJs + dependsOn jalviewjsNoTranspilePrepareSite +} + + +task jalviewjsIDE_SiteClean { + group "00 JalviewJS in Eclipse" + description "Deletes the Eclipse transpiled site" + dependsOn cleanJalviewjsSite +} + + +task jalviewjsIDE_Server { + group "00 JalviewJS in Eclipse" + description "Starts a webserver on localhost to test the website" + dependsOn jalviewjsServer +} + + +// buildship runs this at import +task eclipseSynchronizationTask { + dependsOn eclipseSetup + dependsOn jalviewjsIDE_j2sFile +} + + +// buildship runs this at build time +task eclipseAutoBuildTask { + dependsOn jalviewjsNoTranspileSyncTransferSiteJs + dependsOn jalviewjsNoTranspilePrepareSite +} + + + + + + + + +task jalviewjs { + group "JalviewJS" + description "Build the site" + dependsOn jalviewjsBuildSite }