--- /dev/null
+/* Convention for properties. Read from gradle.properties, use lower_case_underlines for property names.
+ * For properties set within build.gradle, use camelCaseNoSpace.
+ */
+import org.apache.tools.ant.filters.ReplaceTokens
+
+
+
+
+plugins {
+ id 'java'
+}
+
+
+
+// in ext the values are cast to Object. Ensure string values are cast as String (and not GStringImpl) for later use
+def string(Object o) {
+ return o == null ? "" : o.toString()
+}
+
+
+ext {
+ jalviewDirAbsolutePath = file(jalviewDir).getAbsolutePath()
+ jalviewDirRelativePath = jalviewDir
+
+
+ ////
+ // Import releaseProps from the RELEASE file
+ // or a file specified via JALVIEW_RELEASE_FILE if defined
+ // Expect jalview.version and target release branch in jalview.release
+ def releaseProps = new Properties();
+ def releasePropFile = findProperty("JALVIEW_RELEASE_FILE");
+ def defaultReleasePropFile = "${jalviewDirAbsolutePath}/RELEASE";
+ try {
+ (new File(releasePropFile!=null ? releasePropFile : defaultReleasePropFile)).withInputStream {
+ releaseProps.load(it)
+ }
+ } catch (Exception fileLoadError) {
+ throw new Error("Couldn't load release properties file "+(releasePropFile==null ? defaultReleasePropFile : "from custom location: releasePropFile"),fileLoadError);
+ }
+ ////
+ // Set JALVIEW_VERSION if it is not already set
+ if (findProperty("JALVIEW_VERSION")==null || "".equals(JALVIEW_VERSION)) {
+ JALVIEW_VERSION = releaseProps.get("jalview.version")
+ }
+
+
+ // essentials
+ bareSourceDir = string(source_dir)
+ sourceDir = string("${jalviewDir}/${bareSourceDir}")
+ resourceDir = string("${jalviewDir}/${resource_dir}")
+ bareTestSourceDir = string(test_source_dir)
+ testDir = string("${jalviewDir}/${bareTestSourceDir}")
+
+ classesDir = string("${jalviewDir}/${classes_dir}")
+
+
+ resourceClassesDir = classesDir
+
+ testSourceDir = testDir
+ testClassesDir = "${jalviewDir}/${test_output_dir}"
+
+ buildProperties = string("${classesDir}/${build_properties_file}")
+ gitHash = string("")
+ gitBranch = string("")
+
+ println("Using a ${CHANNEL} profile.")
+
+ additional_compiler_args = []
+ // configure classpath/args for j8/j11 compilation
+ if (JAVA_VERSION.equals("1.8")) {
+ JAVA_INTEGER_VERSION = string("8")
+ //libDir = j8libDir
+ libDir = j11libDir
+ libDistDir = j8libDir
+ compile_source_compatibility = 1.8
+ compile_target_compatibility = 1.8
+ } else if (JAVA_VERSION.equals("11")) {
+ JAVA_INTEGER_VERSION = string("11")
+ libDir = j11libDir
+ libDistDir = j11libDir
+ compile_source_compatibility = 11
+ compile_target_compatibility = 11
+ } else if (JAVA_VERSION.equals("12") || JAVA_VERSION.equals("13")) {
+ JAVA_INTEGER_VERSION = JAVA_VERSION
+ libDir = j11libDir
+ libDistDir = j11libDir
+ compile_source_compatibility = JAVA_VERSION
+ compile_target_compatibility = JAVA_VERSION
+ } else {
+ throw new GradleException("JAVA_VERSION=${JAVA_VERSION} not currently supported by Jalview")
+ }
+
+
+
+
+ buildingHTML = string("${jalviewDir}/${doc_dir}/building.html")
+ helpFile = string("${resourceClassesDir}/${help_dir}/help.jhm")
+ helpParentDir = string("${jalviewDir}/${help_parent_dir}")
+ helpSourceDir = string("${helpParentDir}/${help_dir}")
+
+
+ // ENDEXT
+}
+
+
+sourceSets {
+ main {
+ java {
+ srcDirs sourceDir
+ outputDir = file(classesDir)
+ }
+
+ resources {
+ srcDirs resourceDir
+ srcDirs += helpParentDir
+ }
+
+ jar.destinationDir = file("${jalviewDir}/${package_dir}")
+
+ compileClasspath = files(sourceSets.main.java.outputDir)
+ compileClasspath += fileTree(dir: "${jalviewDir}/${libDir}", include: ["*.jar"])
+
+ runtimeClasspath = compileClasspath
+ }
+
+ test {
+ java {
+ srcDirs testSourceDir
+ outputDir = file(testClassesDir)
+ }
+
+ resources {
+ srcDirs = sourceSets.main.resources.srcDirs
+ }
+
+ compileClasspath = files( sourceSets.test.java.outputDir )
+ compileClasspath += sourceSets.main.compileClasspath
+ compileClasspath += fileTree(dir: "${jalviewDir}/${utils_dir}/testnglibs", include: ["**/*.jar"])
+
+ runtimeClasspath = compileClasspath
+ }
+
+}
+
+
+
+
+compileJava {
+
+ doFirst {
+ sourceCompatibility = compile_source_compatibility
+ targetCompatibility = compile_target_compatibility
+ options.compilerArgs = additional_compiler_args
+ print ("Setting target compatibility to "+targetCompatibility+"\n")
+ }
+
+}
+
+
+compileTestJava {
+ doFirst {
+ sourceCompatibility = compile_source_compatibility
+ targetCompatibility = compile_target_compatibility
+ options.compilerArgs = additional_compiler_args
+ print ("Setting target compatibility to "+targetCompatibility+"\n")
+ }
+}
+
+
+clean {
+ doFirst {
+ delete sourceSets.main.java.outputDir
+ }
+}
+
+
+cleanTest {
+ doFirst {
+ delete sourceSets.test.java.outputDir
+ }
+}
+
+
+// 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 {
+ commandLine "git", "rev-parse", "--short", "HEAD"
+ standardOutput = hashStdOut
+ ignoreExitValue true
+ }
+
+ def branchStdOut = new ByteArrayOutputStream()
+ exec {
+ commandLine "git", "rev-parse", "--abbrev-ref", "HEAD"
+ standardOutput = branchStdOut
+ ignoreExitValue true
+ }
+
+ gitHash = hashStdOut.toString().trim()
+ gitBranch = branchStdOut.toString().trim()
+
+ outputs.upToDateWhen { false }
+}
+
+
+task createBuildProperties(type: WriteProperties) {
+ dependsOn setGitVals
+ inputs.dir(sourceDir)
+ inputs.dir(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")
+ //comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd")
+ property "BUILD_DATE", getDate("HH:mm:ss dd MMMM yyyy")
+ property "VERSION", JALVIEW_VERSION
+ property "INSTALLATION", INSTALLATION+" git-commit:"+gitHash+" ["+gitBranch+"]"
+ outputs.file(outputFile)
+}
+
+
+task cleanBuildingHTML(type: Delete) {
+ doFirst {
+ delete buildingHTML
+ }
+}
+
+
+task convertBuildingMD(type: Exec) {
+ dependsOn cleanBuildingHTML
+ def buildingMD = "${jalviewDir}/${doc_dir}/building.md"
+ def css = "${jalviewDir}/${doc_dir}/github.css"
+
+ def pandoc = null
+ pandoc_exec.split(",").each {
+ if (file(it.trim()).exists()) {
+ pandoc = it.trim()
+ return true
+ }
+ }
+
+ def hostname = "hostname".execute().text.trim()
+ def buildtoolsPandoc = System.getProperty("user.home")+"/buildtools/pandoc/bin/pandoc"
+ if ((pandoc == null || ! file(pandoc).exists()) && file(buildtoolsPandoc).exists()) {
+ pandoc = System.getProperty("user.home")+"/buildtools/pandoc/bin/pandoc"
+ }
+
+ 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("Cannot find pandoc. Skipping convert building.md to HTML")
+ }
+ }
+
+ ignoreExitValue true
+
+ inputs.file(buildingMD)
+ inputs.file(css)
+ outputs.file(buildingHTML)
+}
+
+
+clean {
+ doFirst {
+ delete buildingHTML
+ }
+}
+
+
+task syncDocs(type: Sync) {
+ dependsOn convertBuildingMD
+ def syncDir = "${resourceClassesDir}/${doc_dir}"
+ from fileTree("${jalviewDir}/${doc_dir}")
+ into syncDir
+
+}
+
+
+task copyHelp(type: Copy) {
+ def inputDir = helpSourceDir
+ def outputDir = "${resourceClassesDir}/${help_dir}"
+ from(inputDir) {
+ exclude '**/*.gif'
+ 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'
+ }
+ into outputDir
+
+ inputs.dir(inputDir)
+ outputs.files(helpFile)
+ outputs.dir(outputDir)
+}
+
+
+task syncResources(type: Sync) {
+ from resourceDir
+ include "**/*.*"
+ into "${resourceClassesDir}"
+ preserve {
+ include "**"
+ }
+}
+
+
+task prepare {
+ dependsOn syncResources
+ dependsOn syncDocs
+ dependsOn copyHelp
+}
+
+
+//testReportDirName = "test-reports" // note that test workingDir will be $jalviewDir
+test {
+ dependsOn prepare
+ //dependsOn compileJava ////? DELETE
+
+ dependsOn compileJava //?
+
+ useTestNG() {
+ includeGroups testng_groups
+ excludeGroups testng_excluded_groups
+ preserveOrder true
+ useDefaultListeners=true
+ }
+
+ maxHeapSize = "1024m"
+
+ workingDir = jalviewDir
+ //systemProperties 'clover.jar' System.properties.clover.jar
+ def testLaf = project.findProperty("test_laf")
+ if (testLaf != null) {
+ println("Setting Test LaF to '${testLaf}'")
+ systemProperty "laf", testLaf
+ }
+ def testHiDPIScale = project.findProperty("test_HiDPIScale")
+ if (testHiDPIScale != null) {
+ println("Setting Test HiDPI Scale to '${testHiDPIScale}'")
+ systemProperty "sun.java2d.uiScale", testHiDPIScale
+ }
+ sourceCompatibility = compile_source_compatibility
+ targetCompatibility = compile_target_compatibility
+ jvmArgs += additional_compiler_args
+
+ doFirst {
+ }
+}
+
+
+task buildIndices(type: JavaExec) {
+ dependsOn copyHelp
+ classpath = sourceSets.main.compileClasspath
+ main = "com.sun.java.help.search.Indexer"
+ workingDir = "${classesDir}/${help_dir}"
+ def argDir = "html"
+ args = [ argDir ]
+ inputs.dir("${workingDir}/${argDir}")
+
+ outputs.dir("${classesDir}/doc")
+ outputs.dir("${classesDir}/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}/${utils_dir}")
+ destinationDir = file("${jalviewDir}/${utils_dir}")
+ source = fileTree(dir: "${jalviewDir}/${utils_dir}", include: ["HelpLinksChecker.java", "BufferedLineReader.java"])
+
+ inputs.file("${jalviewDir}/${utils_dir}/HelpLinksChecker.java")
+ inputs.file("${jalviewDir}/${utils_dir}/HelpLinksChecker.java")
+ outputs.file("${jalviewDir}/${utils_dir}/HelpLinksChecker.class")
+ outputs.file("${jalviewDir}/${utils_dir}/BufferedLineReader.class")
+}
+
+
+task linkCheck(type: JavaExec) {
+ dependsOn prepare, compileLinkCheck
+
+ def helpLinksCheckerOutFile = file("${jalviewDir}/${utils_dir}/HelpLinksChecker.out")
+ classpath = files("${jalviewDir}/${utils_dir}")
+ main = "HelpLinksChecker"
+ workingDir = jalviewDir
+ args = [ "${classesDir}/${help_dir}", "-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("${classesDir}/${help_dir}")
+ outputs.file(helpLinksCheckerOutFile)
+}
+
+// import the pubhtmlhelp target
+ant.properties.basedir = "${jalviewDir}"
+ant.properties.helpBuildDir = "${jalviewDirAbsolutePath}/${classes_dir}/${help_dir}"
+ant.importBuild "${utils_dir}/publishHelp.xml"
+
+
+task cleanPackageDir(type: Delete) {
+ doFirst {
+ delete fileTree(dir: "${jalviewDir}/${package_dir}", include: "*.jar")
+ }
+}
+
+jar {
+ dependsOn linkCheck
+ dependsOn buildIndices
+ dependsOn createBuildProperties
+
+ manifest {
+ attributes "Main-Class": main_class,
+ "Permissions": "all-permissions",
+ "Application-Name": "Jalview Desktop",
+ "Codebase": application_codebase
+ }
+
+ destinationDir = file("${jalviewDir}/${package_dir}")
+ archiveName = rootProject.name+".jar"
+
+ exclude "cache*/**"
+ exclude "*.jar"
+ exclude "*.jar.*"
+ exclude "**/*.jar"
+ exclude "**/*.jar.*"
+
+ inputs.dir(classesDir)
+ outputs.file("${jalviewDir}/${package_dir}/${archiveName}")
+}