Merge branch 'develop' into bug/JAL-3753_resources_duplicated_in_jalview_jar
[jalview.git] / build.gradle
index 3651689..789aaea 100644 (file)
@@ -167,8 +167,6 @@ ext {
   //cloverTestClassesDir = cloverClassesDir
   cloverDb = string("${cloverBuildDir}/clover.db")
 
-  resourceClassesDir = useClover ? cloverClassesDir : classesDir
-
   testSourceDir = useClover ? cloverTestInstrDir : testDir
   testClassesDir = useClover ? cloverTestClassesDir : "${jalviewDir}/${test_output_dir}"
 
@@ -181,7 +179,6 @@ ext {
   getdownAppBase = string("${getdown_channel_base}/${getdownDir}")
   getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher}")
   getdownAppDistDir = getdown_app_dir_alt
-  buildProperties = string("${resourceDir}/${build_properties_file}")
   reportRsyncCommand = false
   jvlChannelName = CHANNEL.toLowerCase()
   install4jSuffix = CHANNEL.substring(0, 1).toUpperCase() + CHANNEL.substring(1).toLowerCase(); // BUILD -> Build
@@ -252,11 +249,19 @@ ext {
     // DEVELOP-RELEASE is usually associated with a Jalview release series so set the version
     JALVIEW_VERSION=JALVIEW_VERSION+"-develop"
     
+    channelPropertiesFile = string("${channel_properties_dir}/develop_properties")
+    getdownImagesDir = "${getdown_images_dir}/develop"
+    getdownBgColour = "000000"
+    getdownFgColour = "FFFFFF"
+    getdownLightFgColour = "CCCCFF"
     install4jSuffix = "Develop"
     install4jDSStore = "DS_Store-DEVELOP"
     install4jDMGBackgroundImage = "jalview_dmg_background-DEVELOP.png"
     install4jExtraScheme = "jalviewd"
     install4jInstallerName = "${jalview_name} Develop Installer"
+    install4jMacIconsFile = string("${install4j_utils_dir}/develop/${install4j_mac_icons_file}")
+    install4jWindowsIconsFile = string("${install4j_utils_dir}/develop/${install4j_windows_icons_file}")
+    install4jPngIconFile = string("${install4j_utils_dir}/develop/${install4j_png_icon_file}")
     break
 
     case "TEST-RELEASE":
@@ -439,12 +444,16 @@ ext {
     install4jHomeDir = System.getProperty("user.home") + install4jHomeDir.substring(1)
   }
 
+  resourceBuildDir = string("${buildDir}/resources")
+  resourcesBuildDir = string("${resourceBuildDir}/resources_build")
+  helpBuildDir = string("${resourceBuildDir}/help_build")
+  docBuildDir = string("${resourceBuildDir}/doc_build")
 
-
+  buildProperties = string("${resourcesBuildDir}/${build_properties_file}")
   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}")
+  helpFile = string("${helpBuildDir}/${help_dir}/help.jhm")
 
 
   relativeBuildDir = file(jalviewDirAbsolutePath).toPath().relativize(buildDir.toPath())
@@ -482,16 +491,14 @@ sourceSets {
     }
 
     resources {
-      srcDirs resourceDir
-      srcDirs += helpParentDir
+      srcDirs = [ resourcesBuildDir, docBuildDir, helpBuildDir ]
     }
 
-    jar.destinationDir = file("${jalviewDir}/${package_dir}")
-
     compileClasspath = files(sourceSets.main.java.outputDir)
     compileClasspath += fileTree(dir: "${jalviewDir}/${libDir}", include: ["*.jar"])
 
     runtimeClasspath = compileClasspath
+    runtimeClasspath += files(sourceSets.main.resources.srcDirs)
   }
 
   clover {
@@ -528,6 +535,7 @@ sourceSets {
     compileClasspath += fileTree(dir: "${jalviewDir}/${utils_dir}/testnglibs", include: ["**/*.jar"])
 
     runtimeClasspath = compileClasspath
+    runtimeClasspath += files(sourceSets.test.resources.srcDirs)
   }
 
 }
@@ -548,14 +556,12 @@ eclipse {
 
   classpath {
     //defaultOutputDir = sourceSets.main.java.outputDir
-    def removeThese = []
-    configurations.each{
-      if (it.isCanBeResolved()) {
-        removeThese += it
+    configurations.each{ c->
+      if (c.isCanBeResolved()) {
+        minusConfigurations += [c]
       }
     }
 
-    minusConfigurations += removeThese
     plusConfigurations = [ ]
     file {
 
@@ -1005,38 +1011,6 @@ def getDate(format) {
 }
 
 
-task createBuildProperties(type: WriteProperties) {
-  group = "build"
-  description = "Create the ${buildProperties} file"
-  
-  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)
-}
-
-
-clean {
-  doFirst {
-    delete buildProperties
-  }
-}
-
-
-task cleanBuildingHTML(type: Delete) {
-  doFirst {
-    delete buildingHTML
-  }
-}
-
-
 def convertMdToHtml (FileTree mdFiles, File cssFile) {
   MutableDataSet options = new MutableDataSet()
 
@@ -1115,9 +1089,39 @@ def convertMdToHtml (FileTree mdFiles, File cssFile) {
 }
 
 
+task copyDocs(type: Copy) {
+  def inputDir = "${jalviewDir}/${doc_dir}"
+  def outputDir = "${docBuildDir}/${doc_dir}"
+  from(inputDir) {
+    include('**/*.txt')
+    include('**/*.md')
+    include('**/*.html')
+    include('**/*.xml')
+    filter(ReplaceTokens,
+      beginToken: '$$',
+      endToken: '$$',
+      tokens: [
+        'Version-Rel': JALVIEW_VERSION,
+        'Year-Rel': getDate("yyyy")
+      ]
+    )
+  }
+  from(inputDir) {
+    exclude('**/*.txt')
+    exclude('**/*.md')
+    exclude('**/*.html')
+    exclude('**/*.xml')
+  }
+  into outputDir
+
+  inputs.dir(inputDir)
+  outputs.dir(outputDir)
+}
+
+
 task convertMdFiles {
-  dependsOn cleanBuildingHTML
-  def mdFiles = fileTree(dir: "${jalviewDir}/${doc_dir}", include: "*.md")
+  dependsOn copyDocs
+  def mdFiles = fileTree(dir: docBuildDir, include: "*.md")
   def cssFile = file("${jalviewDir}/${flexmark_css}")
 
   doLast {
@@ -1136,21 +1140,16 @@ task convertMdFiles {
 }
 
 
-task syncDocs(type: Sync) {
-  dependsOn convertMdFiles
-  def syncDir = "${classesDir}/${doc_dir}"
-  from fileTree("${jalviewDir}/${doc_dir}")
-  into syncDir
-}
-
-
 task copyHelp(type: Copy) {
   def inputDir = helpSourceDir
-  def outputDir = "${resourceClassesDir}/${help_dir}"
+  def outputDir = "${helpBuildDir}/${help_dir}"
   from(inputDir) {
-    exclude '**/*.gif'
-    exclude '**/*.jpg'
-    exclude '**/*.png'
+    include('**/*.txt')
+    include('**/*.md')
+    include('**/*.html')
+    include('**/*.hs')
+    include('**/*.xml')
+    include('**/*.jhm')
     filter(ReplaceTokens,
       beginToken: '$$',
       endToken: '$$',
@@ -1161,9 +1160,12 @@ task copyHelp(type: Copy) {
     )
   }
   from(inputDir) {
-    include '**/*.gif'
-    include '**/*.jpg'
-    include '**/*.png'
+    exclude('**/*.txt')
+    exclude('**/*.md')
+    exclude('**/*.html')
+    exclude('**/*.hs')
+    exclude('**/*.xml')
+    exclude('**/*.jhm')
   }
   into outputDir
 
@@ -1173,40 +1175,76 @@ task copyHelp(type: Copy) {
 }
 
 
-task syncLib(type: Sync) {
-  def syncDir = "${resourceClassesDir}/${libDistDir}"
-  from fileTree("${jalviewDir}/${libDistDir}")
-  into syncDir
+task copyResources(type: Copy) {
+  def inputDir = resourceDir
+  def outputDir = resourcesBuildDir
+  from(inputDir) {
+    include('**/*.txt')
+    include('**/*.md')
+    include('**/*.html')
+    include('**/*.xml')
+    filter(ReplaceTokens,
+      beginToken: '$$',
+      endToken: '$$',
+      tokens: [
+        'Version-Rel': JALVIEW_VERSION,
+        'Year-Rel': getDate("yyyy")
+      ]
+    )
+  }
+  from(inputDir) {
+    exclude('**/*.txt')
+    exclude('**/*.md')
+    exclude('**/*.html')
+    exclude('**/*.xml')
+  }
+  into outputDir
+
+  inputs.dir(inputDir)
+  outputs.dir(outputDir)
 }
 
 
-task syncResources(type: Sync) {
-  dependsOn createBuildProperties
-  from resourceDir
-  include "**/*.*"
-  into "${resourceClassesDir}"
-  preserve {
-    include "**"
-  }
+task createBuildProperties(type: WriteProperties) {
+  dependsOn copyResources
+  group = "build"
+  description = "Create the ${buildProperties} file"
+  
+  inputs.dir(sourceDir)
+  inputs.dir(resourcesBuildDir)
+  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 prepare {
-  dependsOn syncResources
-  dependsOn syncDocs
+  dependsOn copyResources
+  dependsOn copyDocs
   dependsOn copyHelp
+  dependsOn createBuildProperties
+  dependsOn convertMdFiles
 }
 
 
+compileJava.dependsOn prepare
+run.dependsOn compileJava
+//run.dependsOn prepare
+
+
 //testReportDirName = "test-reports" // note that test workingDir will be $jalviewDir
 test {
   dependsOn prepare
-  //dependsOn compileJava ////? DELETE
 
   if (useClover) {
     dependsOn cloverClasses
    } else { //?
-     dependsOn compileJava //?
+    dependsOn compileJava //?
   }
 
   useTestNG() {
@@ -1219,7 +1257,6 @@ test {
   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}'")
@@ -1241,7 +1278,7 @@ task buildIndices(type: JavaExec) {
   dependsOn copyHelp
   classpath = sourceSets.main.compileClasspath
   main = "com.sun.java.help.search.Indexer"
-  workingDir = "${classesDir}/${help_dir}"
+  workingDir = "${helpBuildDir}/${help_dir}"
   def argDir = "html"
   args = [ argDir ]
   inputs.dir("${workingDir}/${argDir}")
@@ -1277,7 +1314,7 @@ task linkCheck(type: JavaExec) {
   classpath = files("${jalviewDir}/${utils_dir}")
   main = "HelpLinksChecker"
   workingDir = jalviewDir
-  args = [ "${classesDir}/${help_dir}", "-nointernet" ]
+  args = [ "${helpBuildDir}/${help_dir}", "-nointernet" ]
 
   def outFOS = new FileOutputStream(helpLinksCheckerOutFile, false) // false == don't append
   def errFOS = outFOS
@@ -1288,13 +1325,14 @@ task linkCheck(type: JavaExec) {
     outFOS,
     errorOutput)
 
-  inputs.dir("${classesDir}/${help_dir}")
+  inputs.dir(helpBuildDir)
   outputs.file(helpLinksCheckerOutFile)
 }
 
+
 // import the pubhtmlhelp target
 ant.properties.basedir = "${jalviewDir}"
-ant.properties.helpBuildDir = "${jalviewDirAbsolutePath}/${classes_dir}/${help_dir}"
+ant.properties.helpBuildDir = "${helpBuildDir}/${help_dir}"
 ant.importBuild "${utils_dir}/publishHelp.xml"
 
 
@@ -1309,16 +1347,18 @@ jar {
   dependsOn linkCheck
   dependsOn buildIndices
   dependsOn createBuildProperties
+  dependsOn prepare
 
   manifest {
     attributes "Main-Class": main_class,
     "Permissions": "all-permissions",
-    "Application-Name": "Jalview Desktop",
-    "Codebase": application_codebase
+    "Application-Name": install4jApplicationName,
+    "Codebase": application_codebase,
+    "Implementation-Version": JALVIEW_VERSION
   }
 
-  destinationDir = file("${jalviewDir}/${package_dir}")
-  archiveName = rootProject.name+".jar"
+  destinationDirectory = file("${jalviewDir}/${package_dir}")
+  archiveFileName = rootProject.name+".jar"
 
   exclude "cache*/**"
   exclude "*.jar"
@@ -1326,8 +1366,11 @@ jar {
   exclude "**/*.jar"
   exclude "**/*.jar.*"
 
-  inputs.dir(classesDir)
-  outputs.file("${jalviewDir}/${package_dir}/${archiveName}")
+  inputs.dir(sourceSets.main.java.outputDir)
+  sourceSets.main.resources.srcDirs.each{ dir ->
+    inputs.dir(dir)
+  }
+  outputs.file("${destinationDirectory}/${archiveFileName}")
 }
 
 
@@ -1339,10 +1382,11 @@ task copyJars(type: Copy) {
 
 // doing a Sync instead of Copy as Copy doesn't deal with "outputs" very well
 task syncJars(type: Sync) {
+  dependsOn jar
   from fileTree(dir: "${jalviewDir}/${libDistDir}", include: "**/*.jar").files
   into "${jalviewDir}/${package_dir}"
   preserve {
-    include jar.archiveName
+    include jar.archiveFileName.getOrNull()
   }
 }
 
@@ -1366,6 +1410,7 @@ task cleanDist {
   dependsOn clean
 }
 
+
 shadowJar {
   group = "distribution"
   description = "Create a single jar file with all dependency libraries merged. Can be run with java -jar"
@@ -1376,7 +1421,8 @@ shadowJar {
     include("*.jar")
   }
   manifest {
-    attributes 'Implementation-Version': JALVIEW_VERSION
+    attributes "Implementation-Version": JALVIEW_VERSION,
+    "Application-Name": install4jApplicationName
   }
   mainClassName = shadow_jar_main_class
   mergeServiceFiles()
@@ -1849,12 +1895,7 @@ 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
-  }
+  archiveFileName = outputFileName
   
   compression Compression.GZIP
   
@@ -1944,7 +1985,7 @@ task helppages {
   dependsOn copyHelp
   dependsOn pubhtmlhelp
   
-  inputs.dir("${classesDir}/${help_dir}")
+  inputs.dir("${helpBuildDir}/${help_dir}")
   outputs.dir("${buildDir}/distributions/${help_dir}")
 }
 
@@ -2748,11 +2789,7 @@ task jalviewjsSiteTar(type: Tar) {
   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
-  }
+  archiveFileName = outputFilename
 
   compression Compression.GZIP