Revert "JAL-3210 Added jalviewjsBuildAllClosures. Improved incrementality of jalviewj...
[jalview.git] / build.gradle
index 51f95ac..a88c42f 100644 (file)
@@ -36,6 +36,7 @@ if (file(localProps).exists()) {
         }
     }
   } catch (Exception e) {
+    System.out.println("Exception reading local.properties")
   }
 }
 
@@ -77,7 +78,7 @@ ext {
   getdownDir = ""
   reportRsyncCmd = false
   buildDist = true
-  buildProperties = buildPropertiesFile
+  buildProperties = build_properties_file
   getdownLauncher = "${jalviewDir}/${getdown_lib_dir}/${getdown_launcher}"
   switch (CHANNEL) {
 
@@ -87,7 +88,7 @@ ext {
     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":
@@ -95,7 +96,7 @@ ext {
     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
 
@@ -109,7 +110,7 @@ ext {
       exit
     } else {
       packageDir = "${ARCHIVEDIR}/${packageDir}"
-      buildProperties = "${ARCHIVEDIR}/${classesDir}/${buildPropertiesFile}"
+      buildProperties = "${ARCHIVEDIR}/${classesDir}/${build_properties_file}"
       buildDist = false
     }
     reportRsyncCommand = true
@@ -125,7 +126,7 @@ ext {
       exit
     } else {
       packageDir = "${ARCHIVEDIR}/${packageDir}"
-      buildProperties = "${ARCHIVEDIR}/${classesDir}/${buildPropertiesFile}"
+      buildProperties = "${ARCHIVEDIR}/${classesDir}/${build_properties_file}"
       buildDist = false
     }
     reportRsyncCommand = true
@@ -137,7 +138,7 @@ ext {
     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
 
@@ -146,7 +147,7 @@ ext {
     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
 
@@ -155,14 +156,14 @@ ext {
     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}"
+    buildProperties = "${jalviewDir}/${classesDir}/${build_properties_file}"
     getdownLauncher = "${jalviewDir}/${getdown_lib_dir}/${getdown_launcher_local}"
     break
 
@@ -444,6 +445,9 @@ eclipse {
     }
 
   } // jdt
+  
+  synchronizationTasks "eclipseSynchronizationTask"
+  autoBuildTasks "eclipseAutoBuildTask"
 
 }
 
@@ -571,8 +575,8 @@ task setGitVals {
 task createBuildProperties(type: WriteProperties) {
   dependsOn setGitVals
   inputs.dir("${jalviewDir}/${sourceDir}")
-  inputs.dir("${classes}")
   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")
@@ -869,7 +873,7 @@ task getdownWebsite() {
 
     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}"
@@ -1270,12 +1274,16 @@ task helppages  {
 
 def jalviewjsBuildDir
 def jalviewjsSiteDir
-def jalviewjsTransferSiteDir
+def jalviewjsTransferSiteJsDir
+def jalviewjsTransferSiteLibDir
+def jalviewjsTransferSiteCoreDir
 task jalviewjsSitePath {
   def relativeBuildDir = file(jalviewDirAbsolutePath).toPath().relativize(buildDir.toPath())
   jalviewjsBuildDir = "${relativeBuildDir}/jalviewjs"
   jalviewjsSiteDir = "${jalviewjsBuildDir}/${jalviewjs_site_dir}"
-  jalviewjsTransferSiteDir = "${jalviewjsBuildDir}/tmp/site"
+  jalviewjsTransferSiteJsDir = "${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_js"
+  jalviewjsTransferSiteLibDir = "${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_lib"
+  jalviewjsTransferSiteCoreDir = "${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_core"
 }
 
 def eclipseWorkspace
@@ -1454,7 +1462,8 @@ y
 jalviewjsEclipseCopyDropins.finalizedBy jalviewjsCleanEclipse
 */
 
-task jalviewjsUnzipFiles {
+def jalviewjsTransferSiteUnzipDir
+task jalviewjsTransferUnzipLib {
   dependsOn jalviewjsSitePath
 
   def zipFiles = fileTree(dir: "${jalviewDir}/${jalviewjs_libjs_dir}", include: "*.zip")
@@ -1464,13 +1473,13 @@ task jalviewjsUnzipFiles {
     zipFiles.each { file_zip -> 
       copy {
         from zipTree(file_zip)
-        into "${jalviewDir}/${jalviewjsSiteDir}"
+        into "${jalviewDir}/${jalviewjsTransferSiteLibDir}"
       }
     }
   }
 
   inputs.files zipFiles
-  outputs.dir "${jalviewDir}/${jalviewjsSiteDir}"
+  outputs.dir "${jalviewDir}/${jalviewjsTransferSiteLibDir}"
 }
 
 task jalviewjsCreateJ2sSettings(type: WriteProperties) {
@@ -1487,14 +1496,14 @@ task jalviewjsCreateJ2sSettings(type: WriteProperties) {
     if (val != null) {
       if (prop == siteDirProperty) {
         if (!(val.startsWith('/') || val.startsWith("file://") )) {
-          val = "${jalviewDir}/${jalviewjsTransferSiteDir}/${val}"
+          val = "${jalviewDir}/${jalviewjsTransferSiteJsDir}/${val}"
         }
         setSiteDir = true
       }
       property(prop,val)
     }
     if (!setSiteDir) { // default site location, don't override specifically set property
-      property(siteDirProperty,"${jalviewDir}/${jalviewjsTransferSiteDir}")
+      property(siteDirProperty,"${jalviewDir}/${jalviewjsTransferSiteJsDir}")
     }
   }
   inputs.properties(j2s_props)
@@ -1507,7 +1516,47 @@ task jalviewjsEclipseSetup {
   dependsOn jalviewjsCreateJ2sSettings
 }
 
-task jalviewjsCopyResources (type: Sync) {
+task jalviewjsSyncLib (type: Sync) {
+  dependsOn jalviewjsSitePath
+  dependsOn jalviewjsTransferUnzipLib
+  def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjsTransferSiteLibDir}")
+  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 jalviewjsSitePath
+  dependsOn "jalviewjsBuildAllCores"
+  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 jalviewjsSyncResources (type: Sync) {
   dependsOn jalviewjsSitePath
   def inputFiles = fileTree(dir: "${jalviewDir}/${resourceDir}")
   def outputDir = "${jalviewDir}/${jalviewjsSiteDir}/${jalviewjs_j2s_subdir}"
@@ -1526,7 +1575,7 @@ task jalviewjsCopyResources (type: Sync) {
   inputs.files inputFiles
 }
 
-task jalviewjsCopySiteResources (type: Sync) {
+task jalviewjsSyncSiteResources (type: Sync) {
   dependsOn jalviewjsSitePath
   def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjs_site_resource_dir}")
   def outputDir = "${jalviewDir}/${jalviewjsSiteDir}"
@@ -1545,6 +1594,26 @@ task jalviewjsCopySiteResources (type: Sync) {
   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
@@ -1627,27 +1696,44 @@ DEBUG: ${eclipseDebug}
   }
 
   inputs.dir("${jalviewDir}/${sourceDir}")
-  outputs.dir("${jalviewDir}/${jalviewjsTransferSiteDir}")
-  outputs.upToDateWhen( { file("${jalviewDir}/${jalviewjsTransferSiteDir}${jalviewjs_server_resource}").exists() } )
+  outputs.dir("${jalviewDir}/${jalviewjsTransferSiteJsDir}")
+  outputs.upToDateWhen( { file("${jalviewDir}/${jalviewjsTransferSiteJsDir}${jalviewjs_server_resource}").exists() } )
 }
 
+// this Copy version of TransferSite will delete anything else in the target dir
 task jalviewjsCopyTransferSite(type: Copy) {
   dependsOn jalviewjsTranspile
-  from "${jalviewDir}/${jalviewjsTransferSiteDir}"
+  from "${jalviewDir}/${jalviewjsTransferSiteJsDir}"
   into "${jalviewDir}/${jalviewjsSiteDir}"
 }
 
-jalviewjsUnzipFiles.mustRunAfter jalviewjsCopyTransferSite
-jalviewjsCopyResources.mustRunAfter jalviewjsCopyTransferSite
-jalviewjsCopySiteResources.mustRunAfter jalviewjsCopyTransferSite
+// this Sync version of TransferSite is used by buildship to keep the website automatically up to date when a file changes
+task jalviewjsSyncTransferSite(type: Sync) {
+  from "${jalviewDir}/${jalviewjsTransferSiteJsDir}"
+  include "**/*.*"
+  into "${jalviewDir}/${jalviewjsSiteDir}"
+  preserve {
+    include "**"
+  }
+}
+
+jalviewjsSyncLib.mustRunAfter jalviewjsCopyTransferSite
+jalviewjsSyncResources.mustRunAfter jalviewjsCopyTransferSite
+jalviewjsSyncSiteResources.mustRunAfter jalviewjsCopyTransferSite
+jalviewjsSyncBuildProperties.mustRunAfter jalviewjsCopyTransferSite
+
+jalviewjsSyncLib.mustRunAfter jalviewjsSyncTransferSite
+jalviewjsSyncResources.mustRunAfter jalviewjsSyncTransferSite
+jalviewjsSyncSiteResources.mustRunAfter jalviewjsSyncTransferSite
+jalviewjsSyncBuildProperties.mustRunAfter jalviewjsSyncTransferSite
 
 task jalviewjsPrepareSite {
   group "JalviewJS"
   description "Prepares the website folder including unzipping files and copying resources"
-  dependsOn jalviewjsSitePath
-  dependsOn jalviewjsUnzipFiles
-  dependsOn jalviewjsCopyResources
-  dependsOn jalviewjsCopySiteResources
+  dependsOn jalviewjsSyncLib
+  dependsOn jalviewjsSyncResources
+  dependsOn jalviewjsSyncSiteResources
+  dependsOn jalviewjsSyncBuildProperties
 }
 
 task jalviewjsBuildSite {
@@ -1659,7 +1745,7 @@ task jalviewjsBuildSite {
 
 task cleanJalviewjsSite {
   doFirst {
-    delete "${jalviewDir}/${jalviewjsTransferSiteDir}"
+    delete "${jalviewDir}/${jalviewjsTransferSiteJsDir}"
     delete "${jalviewDir}/${jalviewjsSiteDir}"
   }
 }
@@ -1685,9 +1771,10 @@ task jalviewjsSiteTar(type: Tar) {
 
 task jalviewjsServer {
   group "JalviewJS"
-  description "Starts a webserver on localhost to test the website"
+  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}/jalviewjsTest.html"
+  def htmlFile = "${jalviewDirAbsolutePath}/${filename}"
   doLast {
 
     SimpleHttpFileServerFactory factory = new SimpleHttpFileServerFactory()
@@ -1746,33 +1833,125 @@ task jalviewjs {
 }
 
 
-task jalviewjsIDECopyTransferSite(type: Copy) {
-  from "${jalviewDir}/${jalviewjsTransferSiteDir}"
+task jalviewjsIDE_CopyTransferSite(type: Copy) {
+  from "${jalviewDir}/${jalviewjsTransferSiteJsDir}"
   into "${jalviewDir}/${jalviewjsSiteDir}"
 }
 
-task jalviewjsIDEj2s {
-  group "JalviewJS in Eclipse"
+task jalviewjsIDE_j2s {
+  group "00 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
+task jalviewjsIDE_AssembleSite {
+  group "00 JalviewJS in Eclipse"
+  description "Assembles the Eclipse transpiled site and unzips supporting zipfiles"
+  dependsOn jalviewjsIDE_CopyTransferSite
   dependsOn jalviewjsPrepareSite
 }
 
-task jalviewjsIDESiteClean {
-  group "JalviewJS in Eclipse"
+task jalviewjsIDE_SiteClean {
+  group "00 JalviewJS in Eclipse"
   description "Deletes the Eclipse transpiled site"
   dependsOn cleanJalviewjsSite
 }
 
-task jalviewjsIDEServer {
-  group "JalviewJS in Eclipse"
+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_j2s
+}
+
+// buildship runs this at build time
+task eclipseAutoBuildTask {
+  dependsOn jalviewjsSyncTransferSite
+  dependsOn jalviewjsPrepareSite
+}
+
+
+
+
+
+
+
+
+// closure
+def jalviewjsCallCore(String name, FileCollection list, String jsDir, String outputDir) {
+  def coreFileName = "core${name}.js"
+  def coreFilePath = "${outputDir}/${coreFileName}"
+  def coreFile = file(coreFilePath)
+  println("...Generating ${coreFilePath}")
+
+  def coreTop = file("${jsDir}/core/coretop2.js")
+  def coreBottom = file("${jsDir}/core/corebottom2.js")
+  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 {
+      println("...file ${line} does not exist, skipping")
+    }
+  }
+  coreFile.append( coreBottom.text )
+
+  def coreZFileName = "core${name}.z.js"
+  def coreZFilePath = "${outputDir}/${coreZFileName}"
+  def coreZFile = file(coreZFilePath)
+  println("...Generating ${coreZFilePath}")
+
+  javaexec {
+    classpath = files(["${jalviewDir}/tools/closure_compiler.jar"])
+    args = [ "--js", coreFileName, "--js_output_file", coreZFileName ]
+    workingDir = outputDir
+  }
+
+  return [ coreFile, coreZFile ]
+}
+
+def jalviewjsToJs(String name, String classlist, String jsDir, String j2sDir, String outputDir) {
+  def filelist = []
+  file(classlist).eachLine {
+    line ->
+    filelist += line
+  }
+  def list = fileTree(dir: j2sDir, includes: filelist)
+  /*
+  def list = files()
+  file(classlist).eachLine {
+    line ->
+    list += file("${j2sDir}/${line}")
+  }
+  */
+
+  return jalviewjsCallCore(name, list, jsDir, outputDir)
+// publish-core-template ... here?
+}
+
+task jalviewjsBuildAllCores {
+  group "JalviewJS"
+  description "Build the core js lib closures"
+
+  dependsOn jalviewjsSitePath
+  dependsOn jalviewjsTransferUnzipLib
+  dependsOn jalviewjsTranspile
+
+  fileTree(dir: "${jalviewDir}/${jalviewjs_classlists_dir}", include: "*.txt").each {
+    file ->
+    def name = file.getName() - ".txt"
+
+    jalviewjsToJs(name, file.getAbsolutePath(), "${jalviewDir}/${jalviewjsTransferSiteLibDir}/${jalviewjs_js_subdir}", "${jalviewDir}/${jalviewjsTransferSiteJsDir}/${jalviewjs_j2s_subdir}", "${jalviewDir}/${jalviewjsTransferSiteCoreDir}/${jalviewjs_j2s_subdir}/core")
+  }
+}