JAL-3521 Moved the debian build.gradle to utils/debian/build.gradle.debian
[jalview.git] / utils / debian / build.gradle.debian
diff --git a/utils/debian/build.gradle.debian b/utils/debian/build.gradle.debian
new file mode 100644 (file)
index 0000000..042baf5
--- /dev/null
@@ -0,0 +1,461 @@
+/* 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}")
+}