X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=build.gradle;h=3adbf24e4fc3f59b81705fcda0fc66b0eebae6d8;hb=f2e7617539acaac951b40d7a85fce7095522616c;hp=3aa4c4541258b317225fabeec33ec8c992442330;hpb=7d8ba6c44b69e49f071c082d19470c399ff84255;p=jalview.git diff --git a/build.gradle b/build.gradle index 3aa4c45..3adbf24 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,6 +28,10 @@ repositories { } } +dependencies { + compile 'org.apache.commons:commons-compress:1.18' +} + mainClassName = launcherClass def cloverInstrDir = file("$buildDir/$cloverSourcesInstrDir") def classes = "$jalviewDir/$classesDir" @@ -56,10 +58,14 @@ ext { reportRsyncCmd = false buildDist = true buildProperties = buildPropertiesFile + 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_app_dir = getdown_app_dir_alt buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile break @@ -103,6 +109,7 @@ ext { buildDist = false } reportRsyncCommand = true + getdownLauncher = jalviewDir + '/' + getdown_lib_dir + '/' + getdown_launcher_local break case "DEVELOP": @@ -136,6 +143,7 @@ ext { 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 break default: // something wrong specified @@ -150,13 +158,16 @@ ext { //getdownJ11libDir = getdownWebsiteDir + '/' + getdown_j11lib_dir getdownResourceDir = getdownWebsiteDir + '/' + getdown_resource_dir getdownInstallDir = getdownWebsiteDir + '/' + getdown_install_dir - getdownLauncher = jalviewDir + '/' + getdown_launcher 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_runtimeClasspath = modules_compileClasspath + */ gitHash = "" gitBranch = "" + + jalviewjsServer = "" } def JAVA_INTEGER_VERSION @@ -189,10 +200,12 @@ if (JAVA_VERSION.equals("1.8")) { getdown_alt_java_max_version = getdown_alt_java11_max_version getdown_alt_multi_java_location = getdown_alt_java11_txt_multi_java_location eclipse_java_runtime_name = "JavaSE-11" + /* compile without modules -- using classpath libraries additional_compiler_args += [ '--module-path', ext.modules_compileClasspath.asPath, '--add-modules', j11modules ] + */ } else if (JAVA_VERSION.equals("12") || JAVA_VERSION.equals("13")) { JAVA_INTEGER_VERSION = JAVA_VERSION libDir = j11libDir @@ -203,10 +216,12 @@ if (JAVA_VERSION.equals("1.8")) { getdown_alt_java_max_version = getdown_alt_java11_max_version getdown_alt_multi_java_location = getdown_alt_java11_txt_multi_java_location eclipse_java_runtime_name = "JavaSE-11" + /* compile without modules -- using classpath libraries additional_compiler_args += [ '--module-path', ext.modules_compileClasspath.asPath, '--add-modules', j11modules ] + */ } else { throw new GradleException("JAVA_VERSION=$JAVA_VERSION not currently supported by Jalview") } @@ -230,6 +245,7 @@ sourceSets { runtimeClasspath = compileClasspath } + clover { java { srcDirs = [ cloverInstrDir ] @@ -266,8 +282,9 @@ 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/$utilsDir/testnglibs", include: ["**/*.jar"]) + compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir/testlibs", include: ["**/*.jar"]) runtimeClasspath = compileClasspath } @@ -288,7 +305,7 @@ configurations { eclipse { project { - name = "Jalview with gradle build" + name = eclipse_project_name natures 'org.eclipse.jdt.core.javanature', 'org.eclipse.jdt.groovy.core.groovyNature', @@ -301,117 +318,89 @@ eclipse { classpath { //defaultOutputDir = sourceSets.main.java.outputDir def removeThese = [] - configurations.each{ if (it.isCanBeResolved()) { - removeThese += it - } - } - - 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) - } - } + configurations.each{ + if (it.isCanBeResolved()) { + removeThese += it } - 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<>(); + minusConfigurations += removeThese + plusConfigurations = [ ] + file { - // 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) + whenMerged { cp -> + def removeTheseToo = [] + HashMap alreadyAddedSrcPath = new HashMap<>(); + cp.entries.each { entry -> + if (entry.kind == 'src') { + if (alreadyAddedSrcPath.getAt(entry.path) || !(entry.path == "src" || entry.path == "test")) { + removeTheseToo += entry + } else { + alreadyAddedSrcPath.putAt(entry.path, 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 - } - def itPath = it.toString() - if (itPath.startsWith(jalviewDirAbsolutePath+"/")) { - itPath = itPath.substring(jalviewDirAbsolutePath.length()+1) + if (file(eclipse_bin_dir+"/main").isDirectory()) { + cp.entries += new Output(eclipse_bin_dir+"/main") } - 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") }.each { + //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 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 { @@ -420,6 +409,7 @@ 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() @@ -433,10 +423,9 @@ eclipse { } } } - } - //synchronizationTasks eclipseClasspath - //autoBuildTasks eclipseClasspath + } // jdt + } task cloverInstr() { @@ -594,10 +583,13 @@ task convertBuildingMD(type: Exec) { pandoc = System.getProperty("user.home")+"/buildtools/pandoc/bin/pandoc" } - if (pandoc != null && file(pandoc).exists()) { - commandLine pandoc, '-s', '-o', buildingHTML, '--metadata', 'pagetitle="Building Jalview from Source"', '--toc', '-H', css, buildingMD - } else { - commandLine "true" + doFirst { + if (pandoc != null && file(pandoc).exists()) { + commandLine pandoc, '-s', '-o', buildingHTML, '--metadata', 'pagetitle="Building Jalview from Source"', '--toc', '-H', css, buildingMD + } else { + println("Cannot find pandoc. Skipping convert building.md to HTML") + throw new StopExecutionException() + } } ignoreExitValue true @@ -627,7 +619,7 @@ task copyHelp(type: Copy) { exclude '**/*.gif' exclude '**/*.jpg' exclude '**/*.png' - filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['Version-Rel': JALVIEW_VERSION]) + filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['Version-Rel': JALVIEW_VERSION,'Year-Rel': getDate("yyyy")]) } from(inputDir) { include '**/*.gif' @@ -721,7 +713,7 @@ task compileLinkCheck(type: JavaCompile) { outputs.file("$jalviewDir/$utilsDir/BufferedLineReader.class") } -def helplinkscheckeroutputfile = file("$jalviewDir/$utilsDir/HelpLinksChecker.out") +def helplinkscheckertouchfile = file("$jalviewDir/$utilsDir/HelpLinksChecker.touch") task linkCheck(type: JavaExec) { dependsOn prepare, compileLinkCheck classpath = files("$jalviewDir/$utilsDir") @@ -730,14 +722,20 @@ task linkCheck(type: JavaExec) { def help = "$classes/$helpDir" args = [ "$classes/$helpDir", "-nointernet" ] - doFirst { - helplinkscheckeroutputfile.createNewFile() - standardOutput new FileOutputStream(helplinkscheckeroutputfile, false) + doLast { + helplinkscheckertouchfile.createNewFile() } - outputs.file(helplinkscheckeroutputfile) + inputs.dir("$classes/$helpDir") + outputs.file(helplinkscheckertouchfile) } +// import the pubhtmlhelp target +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") } @@ -947,6 +945,9 @@ task getdownWebsite() { copy { from getdownLauncher + if (file(getdownLauncher).getName() != getdown_launcher) { + rename(file(getdownLauncher).getName(), getdown_launcher) + } into project.ext.getdownWebsiteDir } @@ -955,6 +956,9 @@ task getdownWebsite() { from getdown_txt from getdownLauncher from getdownWebsiteDir+"/"+getdown_build_properties + if (file(getdownLauncher).getName() != getdown_launcher) { + rename(file(getdownLauncher).getName(), getdown_launcher) + } into getdownInstallDir } @@ -969,6 +973,9 @@ task getdownWebsite() { from launch_jvl from getdownLauncher from getdownWebsiteDir+"/"+getdown_build_properties + if (file(getdownLauncher).getName() != getdown_launcher) { + rename(file(getdownLauncher).getName(), getdown_launcher) + } into getdownFilesDir } @@ -989,7 +996,9 @@ task getdownDigest(type: JavaExec) { group = "distribution" description = "Digest the getdown website folder" dependsOn getdownWebsite - classpath = files(jalviewDir + '/' + getdown_core, jalviewDir+'/'+getdown_launcher) + doFirst { + classpath = files(getdownWebsiteDir + '/' + getdown_launcher) + } main = "com.threerings.getdown.tools.Digester" args project.ext.getdownWebsiteDir inputs.dir(project.ext.getdownWebsiteDir) @@ -1139,3 +1148,488 @@ clean { delete install4jConf } +task sourceDist (type: Tar) { + + def VERSION_UNDERSCORES = JALVIEW_VERSION.replaceAll("\\.", "_") + 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 + } catch (Exception e) { + archiveName = outputFileName + } + + compression Compression.GZIP + + into project.name + + def EXCLUDE_FILES=["build/*","bin/*","test-output/","test-reports","tests","clover*/*" + ,".*" + ,"benchmarking/*" + ,"**/.*" + ,"*.class" + ,"**/*.class","$j11modDir/**/*.jar","appletlib","**/*locales" + ,"*locales/**", + ,"utils/InstallAnywhere"] + def PROCESS_FILES=[ "AUTHORS", + "CITATION", + "FEATURETODO", + "JAVA-11-README", + "FEATURETODO", + "LICENSE", + "**/README", + "RELEASE", + "THIRDPARTYLIBS","TESTNG", + "build.gradle", + "gradle.properties", + "**/*.java", + "**/*.html", + "**/*.xml", + "**/*.gradle", + "**/*.groovy", + "**/*.properties", + "**/*.perl", + "**/*.sh"] + + from(jalviewDir) { + exclude (EXCLUDE_FILES) + include (PROCESS_FILES) + filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['Version-Rel': JALVIEW_VERSION,'Year-Rel': getDate("yyyy")]) + } + from(jalviewDir) { + exclude (EXCLUDE_FILES) + exclude (PROCESS_FILES) + exclude ("appletlib") + exclude ("**/*locales") + exclude ("*locales/**") + exclude ("utils/InstallAnywhere") + + exclude (getdown_files_dir) + exclude (getdown_website_dir) + + // exluding these as not using jars as modules yet + exclude ("$j11modDir/**/*.jar") +} +// from (jalviewDir) { +// // explicit includes for stuff that seemed to not get included +// include(fileTree("test/**/*.")) +// exclude(EXCLUDE_FILES) +// exclude(PROCESS_FILES) +// } +} + +task helppages { + dependsOn copyHelp + dependsOn pubhtmlhelp + + inputs.dir("$classes/$helpDir") + outputs.dir("$helpOutputDir") +} + +def jalviewjsBuildDir +def jalviewjsSiteDir +def jalviewjsTransferSiteDir +task jalviewjsSitePath { + def relativeBuildDir = file(jalviewDirAbsolutePath).toPath().relativize(buildDir.toPath()) + jalviewjsBuildDir = "${relativeBuildDir}/jalviewjs" + if (jalviewjs_site_dir.startsWith("/")) { + jalviewjsSiteDir = jalviewjs_site_dir + } else { + jalviewjsSiteDir = jalviewjsBuildDir + "/" + jalviewjs_site_dir + } + jalviewjsTransferSiteDir = jalviewjsBuildDir + "/tmp/site" +} + +def eclipseWorkspace +task jalviewjsSetEclipseWorkspace { + def propKey = "jalviewjs_eclipse_workspace" + def propsFileName = "${jalviewjsBuildDir}/${jalviewjs_eclipse_workspace_location_file}" + def props = new Properties() + def eclipseWsDir + def propVal = null + if (project.hasProperty(propKey)) { + propVal = project.getProperty(propKey) + eclipseWsDir = propVal + } + if (( eclipseWsDir == null || !file(eclipseWsDir).exists() ) && file(propsFileName).exists()) { + def ins = new FileInputStream("${jalviewDirAbsolutePath}/${propsFileName}") + props.load(ins) + ins.close() + if (props.getProperty(propKey, null) != null) { + eclipseWsDir = props.getProperty(propKey) + } + } + + if (eclipseWsDir == null || !file(eclipseWsDir).exists()) { + def tempDir = File.createTempDir() + eclipseWsDir = tempDir.getAbsolutePath() + props.setProperty(propKey, eclipseWsDir) + def propsFile = file(propsFileName) + propsFile.parentFile.mkdirs() + propsFile.createNewFile() // doesn't affect existing file + def outs = new FileOutputStream(propsFile, false) + props.store(outs, null) + outs.close() + } + + eclipseWorkspace = file(eclipseWsDir) + + println("ECLIPSE WORKSPACE: "+eclipseWorkspace.getPath()) + + inputs.property(propKey, propVal) + outputs.file(propsFileName) +} + + +task jalviewjsUnzipFiles { + dependsOn jalviewjsSitePath + + def zipFiles = fileTree(dir: jalviewjs_utils_dir+"/"+jalviewjs_libjs_dir).include("*.zip") + zipFiles += jalviewjs_utils_dir+"/"+jalviewjs_swingjs_zip + + doLast { + zipFiles.each { file_zip -> + copy { + from zipTree(file_zip) + into jalviewjsSiteDir + } + } + } + + inputs.files zipFiles + outputs.dir jalviewjsSiteDir +} + +def eclipseDropinsDir +def eclipseBinary +def eclipseVersion +def fromDropinsDir +task jalviewjsEclipsePaths { + def eclipseRoot + def eclipseProduct + eclipseRoot = jalviewjs_eclipse_root + if (eclipseRoot.startsWith("~")) { + eclipseRoot = System.getProperty("user.home") + eclipseRoot.substring(1) + } + if (OperatingSystem.current().isMacOsX()) { + eclipseRoot += "/Eclipse.app" + eclipseDropinsDir = eclipseRoot+"/Contents/Eclipse/dropins" + 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" + } + eclipseDropinsDir = eclipseRoot+"/dropins" + eclipseBinary = eclipseRoot+"/eclipse" + eclipseProduct = eclipseRoot+"/.eclipseproduct" + } else { // linux or unix + if (file(eclipseRoot+"/eclipse").isDirectory() && file(eclipseRoot+"/eclipse/.eclipseproduct").exists()) { + eclipseRoot += "/eclipse" + } + eclipseDropinsDir = eclipseRoot+"/dropins" + eclipseBinary = eclipseRoot+"/eclipse" + eclipseProduct = eclipseRoot+"/.eclipseproduct" + } + + def fis = new FileInputStream(eclipseProduct) + def props = new Properties() + props.load(fis) + eclipseVersion = props.getProperty("version") + fis.close() + println("ECLIPSE_VERSION=${eclipseVersion}") + String[] v = eclipseVersion.split("\\.") + def v0 = Integer.valueOf(v[0]) + def v1 = Integer.valueOf(v[1]) + if (v0 < 4 || ( v0 == 4 && v1 < 13 )) { + fromDropinsDir = "eclipse/dropins_4.12" + } else { + fromDropinsDir = "eclipse/dropins_4.13" + } +} + +task jalviewjsEclipseCopyDropins { + dependsOn jalviewjsEclipsePaths + def inputFiles = fileTree(dir: jalviewjs_utils_dir+"/"+fromDropinsDir, include: "*.jar") + def outputDir = eclipseDropinsDir + + inputs.files inputFiles + inputFiles.each { file -> + outputs.file(outputDir+"/"+file.name) + } + + doLast { + def outputFiles = [] + inputFiles.each { file -> + copy { + from file + into outputDir + } + } + } +} + +task jalviewjsCreateJ2sSettings(type: WriteProperties) { + dependsOn jalviewjsSitePath + outputFile (jalviewDir+"/"+jalviewjs_j2s_settings) + def props = project.properties.sort { it.key } + def siteDirProperty = "j2s.site.directory" + def setSiteDir = false + props.each { prop, val -> + if (prop.startsWith("j2s.") && val != null) { + if (prop == siteDirProperty) { + if (!(val.startsWith("/") || val.startsWith("file://") )) { + val = jalviewjsTransferSiteDir+"/"+val + } + setSiteDir = true + } + property(prop,val) + } + if (!setSiteDir) { + property(siteDirProperty,jalviewjsTransferSiteDir) + } + } + outputs.file(outputFile) +} + +task jalviewjsEclipseSetup { + dependsOn jalviewjsEclipseCopyDropins + dependsOn jalviewjsSetEclipseWorkspace + dependsOn jalviewjsCreateJ2sSettings +} + +task jalviewjsCopyResources (type: Copy) { + dependsOn jalviewjsSitePath + def inputFiles = fileTree(dir: jalviewjs_resource_dir) + def outputDir = jalviewjsSiteDir+"/"+jalviewjs_j2s_subdir + + from inputFiles + into outputDir + def outputFiles = [] + rename { filename -> + outputFiles += outputDir+"/"+filename + null + } + outputs.files outputFiles + inputs.files inputFiles +} + +task jalviewjsCopySiteResources (type: Copy) { + dependsOn jalviewjsSitePath + def inputFiles = fileTree(dir: jalviewjs_utils_dir+"/"+jalviewjs_site_resource_dir) + def outputDir = jalviewjsSiteDir + + from inputFiles + into outputDir + def outputFiles = [] + rename { filename -> + outputFiles += outputDir+"/"+filename + null + } + outputs.files outputFiles + inputs.files inputFiles +} + +task cleanJalviewjs { + //delete jalviewjsBuildDir + //delete jalviewDir+"/"+eclipse_bin_dir + //delete file(eclipseWorkspace.getAbsolutePath()+"/.metadata") + //delete jalviewDir+"/"+jalviewjs_j2s_settings +} + +task jalviewjsProjectImport(type: Exec) { + // work out how to do this! + dependsOn eclipseProject + dependsOn eclipseClasspath + dependsOn eclipseJdt + dependsOn jalviewjsEclipsePaths + dependsOn jalviewjsEclipseSetup + executable(eclipseBinary) + args(["-nosplash", "--launcher.suppressErrors", "-application", "com.seeq.eclipse.importprojects.headlessimport", "-data", eclipseWorkspace.getPath(), "-import", jalviewDirAbsolutePath]) + + def projdir = eclipseWorkspace.getPath()+"/.metadata/.plugins/org.eclipse.core.resources/.projects/jalview/org.eclipse.jdt.core" + inputs.file(jalviewDir+"/.project") + outputs.dir(projdir) + outputs.upToDateWhen { file(projdir).exists() } +} + +task jalviewjsTranspile(type: Exec) { + dependsOn jalviewjsEclipseSetup + dependsOn jalviewjsProjectImport + dependsOn jalviewjsEclipsePaths + executable(eclipseBinary) + args(["-nosplash", "--launcher.suppressErrors", "-application", "org.eclipse.jdt.apt.core.aptBuild", "-data", eclipseWorkspace, "-"+jalviewjs_eclipseBuildArg, eclipse_project_name ]) + + def stdout + def stderr + doFirst { + stdout = new ByteArrayOutputStream() + stderr = new ByteArrayOutputStream() + + def logOutFileName = "${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_j2s_stdout}" + def logOutFile = file(logOutFileName) + logOutFile.createNewFile() + def logOutFOS = new FileOutputStream(logOutFile, false) + //def logErrFileName = "${jalviewjsBuildDir}/${jalviewjs_j2s_stderr}" + //def logErrFile = file(logFileName) + //logErrFile.createNewFile() + //def logErrFOS = new FileErrputStream(logErrFile, false) + // 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 GradleException("Error during transpilation:\n${stderr}\nSee eclipse transpile log file '${jalviewjsBuildDir}/${jalviewjs_j2s_stdout}'") + } + } + + inputs.dir(sourceDir) + outputs.dir(eclipse_bin_dir+"/main") + outputs.dir(jalviewjsTransferSiteDir) + +} + +task jalviewjsCopyTransferSite(type: Copy) { + dependsOn jalviewjsTranspile + from jalviewjsTransferSiteDir + into jalviewjsSiteDir +} + +jalviewjsUnzipFiles.mustRunAfter jalviewjsCopyTransferSite +jalviewjsCopyResources.mustRunAfter jalviewjsCopyTransferSite +jalviewjsCopySiteResources.mustRunAfter jalviewjsCopyTransferSite + +task jalviewjsPrepareSite { + group "JalviewJS" + description "Prepares the website folder including unzipping files and copying resources" + dependsOn jalviewjsSitePath + dependsOn jalviewjsUnzipFiles + dependsOn jalviewjsCopyResources + dependsOn jalviewjsCopySiteResources +} + +task jalviewjsBuildSite { + group "JalviewJS" + description "Builds the whole website including transpiled code" + dependsOn jalviewjsCopyTransferSite + dependsOn jalviewjsPrepareSite +} + +task cleanJalviewjsSite { + delete jalviewjsTransferSiteDir + delete 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 jalviewjsSiteDir + into jalviewjs_site_dir // this is inside the tar file + + inputs.dir(jalviewjsSiteDir) +} + +task jalviewjsServer { + group "JalviewJS" + description "Starts a webserver on localhost to test the website" + dependsOn jalviewjsSitePath + def htmlFile = "${jalviewDirAbsolutePath}/jalviewjsTest.html" + doLast { + + SimpleHttpFileServerFactory factory = new SimpleHttpFileServerFactory() + def port = Integer.valueOf(jalviewjs_server_port) + def start = port + def running = false + def url + while(port < start+1000 && !running) { + try { + def doc_root = new File(jalviewDirAbsolutePath +"/"+ jalviewjsSiteDir) + jalviewjsServer = factory.start(doc_root, port) + running = true + url = jalviewjsServer.getResourceUrl(jalviewjs_server_resource) + 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") + + file(htmlFile).text = """ +

Jalview JS Test. <${url}>

+

Jalview JS Test with debug. <${url}?j2sdebug<

+ """ + + } catch (Exception e) { + port++; + } + } + + } + + outputs.file(htmlFile) +} + +task jalviewjs { + group "JalviewJS" + description "Build the site" + dependsOn jalviewjsBuildSite +} + + +task jalviewjsIDECopyTransferSite(type: Copy) { + from jalviewjsTransferSiteDir + into jalviewjsSiteDir +} + +task jalviewjsIDEj2s { + group "JalviewJS in Eclipse" + description "Creates the .j2s file" + dependsOn jalviewjsCreateJ2sSettings +} + +task jalviewjsIDEBuildSite { + group "JalviewJS in Eclipse" + description "Copies the Eclipse transpiled site and unzips supporting zipfiles" + dependsOn jalviewjsIDECopyTransferSite + dependsOn jalviewjsPrepareSite +} + +task cleanJalviewjsIDESite { + group "JalviewJS in Eclipse" + description "Deletes the Eclipse transpiled site" + dependsOn cleanJalviewjsSite +} + +task jalviewjsIDEServer { + group "JalviewJS in Eclipse" + description "Starts a webserver on localhost to test the website" + dependsOn jalviewjsServer +} +