JAL-3594 New way for build.gradle to override properties with channel based propertie...
[jalview.git] / build.gradle
index c3e89e5..bdc50d0 100644 (file)
@@ -57,24 +57,12 @@ def string(Object o) {
   return o == null ? "" : o.toString()
 }
 
-
-ext {
-  jalviewDirAbsolutePath = file(jalviewDir).getAbsolutePath()
-  jalviewDirRelativePath = jalviewDir
-
-  // local build environment properties
-  // can be "projectDir/local.properties"
-  def localProps = "${projectDir}/local.properties"
-  def propsFile = null;
-  if (file(localProps).exists()) {
-    propsFile = localProps
+def overrideProperties(def propsFileName) {
+  if (propsFileName == null) {
+    return
   }
-  // or "../projectDir_local.properties"
-  def dirLocalProps = projectDir.getParent() + "/" + projectDir.getName() + "_local.properties"
-  if (file(dirLocalProps).exists()) {
-    propsFile = dirLocalProps
-  }
-  if (propsFile != null) {
+  def propsFile = file(propsFileName)
+  if (propsFile != null && propsFile.exists()) {
     try {
       def p = new Properties()
       def localPropsFIS = new FileInputStream(propsFile)
@@ -82,18 +70,40 @@ ext {
       localPropsFIS.close()
       p.each {
         key, val -> 
-          def oldval = findProperty(key)
-          setProperty(key, val)
-          if (oldval != null) {
+          def oldval
+          if (project.hasProperty(key)) {
+            oldval = project.findProperty(key)
+            project.setProperty(key, val)
             println("Overriding property '${key}' ('${oldval}') with ${file(propsFile).getName()} value '${val}'")
           } else {
-            println("Setting unknown property '${key}' with ${file(propsFile).getName()}s value '${val}'")
+            ext.setProperty(key, val)
+            println("Setting ext property '${key}' with ${file(propsFile).getName()}s value '${val}'")
           }
+          //true
       }
     } catch (Exception e) {
-      System.out.println("Exception reading local.properties")
+      println("Exception reading local.properties")
+      e.printStackTrace()
     }
   }
+}
+
+ext {
+  jalviewDirAbsolutePath = file(jalviewDir).getAbsolutePath()
+  jalviewDirRelativePath = jalviewDir
+
+  getdownChannelName = CHANNEL.toLowerCase()
+  // default to "release". Currently only has different cosmetics for "develop", "release"
+  propertiesChannelName = getdownChannelName == "develop" ? getdownChannelName : "release"
+  // Import channel_properties
+  channelDir = string("${jalviewDir}/${channel_properties_dir}/${propertiesChannelName}")
+  channelGradleProperties = string("${channelDir}/channel_gradle.properties")
+  overrideProperties(channelGradleProperties)
+  // local build environment properties
+  // can be "projectDir/local.properties"
+  overrideProperties("${projectDir}/local.properties")
+  // or "../projectDir_local.properties"
+  overrideProperties(projectDir.getParent() + "/" + projectDir.getName() + "_local.properties")
 
   ////  
   // Import releaseProps from the RELEASE file
@@ -172,13 +182,14 @@ ext {
 
   getdownWebsiteDir = string("${jalviewDir}/${getdown_website_dir}/${JAVA_VERSION}")
   buildDist = true
+  buildProperties = null
 
   // the following values might be overridden by the CHANNEL switch
-  getdownChannelName = CHANNEL.toLowerCase()
   getdownDir = string("${getdownChannelName}/${JAVA_VERSION}")
   getdownAppBase = string("${getdown_channel_base}/${getdownDir}")
   getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher}")
   getdownAppDistDir = getdown_app_dir_alt
+  getdownImagesDir = string("${jalviewDir}/${getdown_images_dir}")
   reportRsyncCommand = false
   jvlChannelName = CHANNEL.toLowerCase()
   install4jSuffix = CHANNEL.substring(0, 1).toUpperCase() + CHANNEL.substring(1).toLowerCase(); // BUILD -> Build
@@ -187,6 +198,9 @@ ext {
   install4jInstallerName = "${jalview_name} Non-Release Installer"
   install4jExecutableName = jalview_name.replaceAll("[^\\w]+", "_").toLowerCase()
   install4jExtraScheme = "jalviewx"
+  install4jMacIconsFile = string("${install4j_images_dir}/${install4j_mac_icons_file}")
+  install4jWindowsIconsFile = string("${install4j_images_dir}/${install4j_windows_icons_file}")
+  install4jPngIconFile = string("${install4j_images_dir}/${install4j_png_icon_file}")
   switch (CHANNEL) {
 
     case "BUILD":
@@ -249,19 +263,11 @@ 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":
@@ -318,7 +324,13 @@ ext {
   }
   // override getdownAppBase if requested
   if (findProperty("getdown_appbase_override") != null) {
-    getdownAppBase = string(getProperty("getdown_appbase_override"))
+    // revert to LOCAL if empty string
+    if (string(getdown_appbase_override) == "") {
+      getdownAppBase = file(getdownWebsiteDir).toURI().toString()
+      getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher_local}")
+    } else {
+      getdownAppBase = string(getdown_appbase_override)
+    }
     println("Overriding getdown appbase with '${getdownAppBase}'")
   }
   // sanitise file name for jalview launcher file for this channel
@@ -449,7 +461,9 @@ ext {
   helpBuildDir = string("${resourceBuildDir}/help_build")
   docBuildDir = string("${resourceBuildDir}/doc_build")
 
-  buildProperties = string("${resourcesBuildDir}/${build_properties_file}")
+  if (buildProperties == null) {
+    buildProperties = string("${resourcesBuildDir}/${build_properties_file}")
+  }
   buildingHTML = string("${jalviewDir}/${doc_dir}/building.html")
   helpParentDir = string("${jalviewDir}/${help_parent_dir}")
   helpSourceDir = string("${helpParentDir}/${help_dir}")
@@ -1177,6 +1191,9 @@ task copyHelp(type: Copy) {
 
 
 task copyResources(type: Copy) {
+  group = "build"
+  description = "Copy (and make text substitutions in) the resources dir to the build area"
+
   def inputDir = resourceDir
   def outputDir = resourcesBuildDir
   from(inputDir) {
@@ -1205,6 +1222,19 @@ task copyResources(type: Copy) {
   outputs.dir(outputDir)
 }
 
+task copyChannelResources(type: Copy) {
+  dependsOn copyResources
+  group = "build"
+  description = "Copy the channel resources dir to the build resources area"
+
+  def inputDir = "${channelDir}/${resource_dir}"
+  def outputDir = resourcesBuildDir
+  from inputDir
+  into outputDir
+
+  inputs.dir(inputDir)
+  outputs.dir(outputDir)
+}
 
 task createBuildProperties(type: WriteProperties) {
   dependsOn copyResources
@@ -1243,12 +1273,12 @@ task buildIndices(type: JavaExec) {
   outputs.file("${workingDir}/JavaHelpSearch/TMAP")
 }
 
-
 task prepare {
   dependsOn copyResources
   dependsOn copyDocs
   dependsOn copyHelp
   dependsOn createBuildProperties
+  dependsOn copyChannelResources
   dependsOn convertMdFiles
   dependsOn buildIndices
 }
@@ -1467,6 +1497,14 @@ task getdownWebsite() {
     if (getdownAltMultiJavaLocation != null && getdownAltMultiJavaLocation.length() > 0) {
       props.put("getdown_txt_multi_java_location", getdownAltMultiJavaLocation)
     }
+    if (getdownImagesDir != null && file(getdownImagesDir).exists()) {
+      props.put("getdown_txt_ui.background_image", "${getdownImagesDir}/${getdown_background_image}")
+      props.put("getdown_txt_ui.instant_background_image", "${getdownImagesDir}/${getdown_instant_background_image}")
+      props.put("getdown_txt_ui.error_background", "${getdownImagesDir}/${getdown_error_background}")
+      props.put("getdown_txt_ui.progress_image", "${getdownImagesDir}/${getdown_progress_image}")
+      props.put("getdown_txt_ui.icon", "${getdownImagesDir}/${getdown_icon}")
+      props.put("getdown_txt_ui.mac_dock_icon", "${getdownImagesDir}/${getdown_mac_dock_icon}")
+    }
 
     props.put("getdown_txt_title", jalview_name)
     props.put("getdown_txt_ui.name", install4jApplicationName)
@@ -1851,6 +1889,10 @@ task installers(type: com.install4j.gradle.Install4jTask) {
     'UNIX_APPLICATION_FOLDER': install4jUnixApplicationFolder,
     'EXECUTABLE_NAME': install4jExecutableName,
     'EXTRA_SCHEME': install4jExtraScheme,
+    'MAC_ICONS_FILE': install4jMacIconsFile,
+    'WINDOWS_ICONS_FILE': install4jWindowsIconsFile,
+    'PNG_ICON_FILE': install4jPngIconFile,
+
   ]
 
   //println("INSTALL4J VARIABLES:")