From: Ben Soares Date: Mon, 20 Sep 2021 16:48:27 +0000 (+0100) Subject: JAL-3521 Created a patch file to transform build.gradle into debian_build.gradle X-Git-Tag: Release_2_11_2_0~34^2~5 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=e08a7a63004567e4f29a3f7a0dfd5bf7e288d7ed;p=jalview.git JAL-3521 Created a patch file to transform build.gradle into debian_build.gradle --- diff --git a/utils/debian/build_gradle.patch b/utils/debian/build_gradle.patch new file mode 100644 index 0000000..867a576 --- /dev/null +++ b/utils/debian/build_gradle.patch @@ -0,0 +1,2739 @@ +--- a/build.gradle 2021-09-20 17:46:04.088152106 +0100 ++++ b/build.gradle 2021-09-20 17:46:09.180302062 +0100 +@@ -2,16 +2,6 @@ + * For properties set within build.gradle, use camelCaseNoSpace. + */ + import org.apache.tools.ant.filters.ReplaceTokens +-import org.gradle.internal.os.OperatingSystem +-import org.gradle.plugins.ide.internal.generator.PropertiesPersistableConfigurationObject +-import org.gradle.api.internal.PropertiesTransformer +-import org.gradle.util.ConfigureUtil +-import org.gradle.plugins.ide.eclipse.model.Output +-import org.gradle.plugins.ide.eclipse.model.Library +-import java.security.MessageDigest +-import groovy.transform.ExternalizeMethods +-import groovy.util.XmlParser +-import groovy.xml.XmlUtil + import com.vladsch.flexmark.util.ast.Node + import com.vladsch.flexmark.html.HtmlRenderer + import com.vladsch.flexmark.parser.Parser +@@ -24,34 +14,17 @@ + import com.vladsch.flexmark.ext.toc.TocExtension + + buildscript { +- repositories { +- mavenCentral() +- mavenLocal() +- } + dependencies { + classpath "com.vladsch.flexmark:flexmark-all:0.62.0" + } + } + +- + plugins { + id 'java' + id 'application' +- id 'eclipse' +- id "com.diffplug.gradle.spotless" version "3.28.0" +- id 'com.github.johnrengelman.shadow' version '4.0.3' +- id 'com.install4j.gradle' version '8.0.10' +- id 'com.dorongold.task-tree' version '1.5' // only needed to display task dependency tree with gradle task1 [task2 ...] taskTree + id 'com.palantir.git-version' version '0.12.3' + } + +-repositories { +- jcenter() +- mavenCentral() +- mavenLocal() +-} +- +- + // 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() +@@ -96,19 +69,11 @@ + jalviewDirAbsolutePath = file(jalviewDir).getAbsolutePath() + jalviewDirRelativePath = jalviewDir + +- getdownChannelName = CHANNEL.toLowerCase() +- // default to "default". Currently only has different cosmetics for "develop", "release", "default" +- propertiesChannelName = ["develop", "release", "test-release", "jalviewjs", "jalviewjs-release" ].contains(getdownChannelName) ? getdownChannelName : "default" +- // Import channel_properties ++ propertiesChannelName = "release" + channelDir = string("${jalviewDir}/${channel_properties_dir}/${propertiesChannelName}") + channelGradleProperties = string("${channelDir}/channel_gradle.properties") + overrideProperties(channelGradleProperties, false) +- // local build environment properties +- // can be "projectDir/local.properties" +- overrideProperties("${projectDir}/local.properties", true) +- // or "../projectDir_local.properties" +- overrideProperties(projectDir.getParent() + "/" + projectDir.getName() + "_local.properties", true) +- ++ + //// + // Import releaseProps from the RELEASE file + // or a file specified via JALVIEW_RELEASE_FILE if defined +@@ -128,41 +93,6 @@ + if (findProperty("JALVIEW_VERSION")==null || "".equals(JALVIEW_VERSION)) { + JALVIEW_VERSION = releaseProps.get("jalview.version") + } +- +- // this property set when running Eclipse headlessly +- j2sHeadlessBuildProperty = string("net.sf.j2s.core.headlessbuild") +- // this property set by Eclipse +- eclipseApplicationProperty = string("eclipse.application") +- // CHECK IF RUNNING FROM WITHIN ECLIPSE +- def eclipseApplicationPropertyVal = System.properties[eclipseApplicationProperty] +- IN_ECLIPSE = eclipseApplicationPropertyVal != null && eclipseApplicationPropertyVal.startsWith("org.eclipse.ui.") +- // BUT WITHOUT THE HEADLESS BUILD PROPERTY SET +- if (System.properties[j2sHeadlessBuildProperty].equals("true")) { +- println("Setting IN_ECLIPSE to ${IN_ECLIPSE} as System.properties['${j2sHeadlessBuildProperty}'] == '${System.properties[j2sHeadlessBuildProperty]}'") +- IN_ECLIPSE = false +- } +- if (IN_ECLIPSE) { +- println("WITHIN ECLIPSE IDE") +- } else { +- println("HEADLESS BUILD") +- } +- +- J2S_ENABLED = (project.hasProperty('j2s.compiler.status') && project['j2s.compiler.status'] != null && project['j2s.compiler.status'] == "enable") +- if (J2S_ENABLED) { +- println("J2S ENABLED") +- } +- /* *-/ +- System.properties.sort { it.key }.each { +- key, val -> println("SYSTEM PROPERTY ${key}='${val}'") +- } +- /-* *-/ +- if (false && IN_ECLIPSE) { +- jalviewDir = jalviewDirAbsolutePath +- } +- */ +- +- // datestamp +- buildDate = new Date().format("yyyyMMdd") + + // essentials + bareSourceDir = string(source_dir) +@@ -173,214 +103,18 @@ + + classesDir = string("${jalviewDir}/${classes_dir}") + +- // clover +- useClover = clover.equals("true") +- cloverBuildDir = "${buildDir}/clover" +- cloverInstrDir = file("${cloverBuildDir}/clover-instr") +- cloverClassesDir = file("${cloverBuildDir}/clover-classes") +- cloverReportDir = file("${buildDir}/reports/clover") +- cloverTestInstrDir = file("${cloverBuildDir}/clover-test-instr") +- cloverTestClassesDir = file("${cloverBuildDir}/clover-test-classes") +- //cloverTestClassesDir = cloverClassesDir +- cloverDb = string("${cloverBuildDir}/clover.db") +- +- testSourceDir = useClover ? cloverTestInstrDir : testDir +- testClassesDir = useClover ? cloverTestClassesDir : "${jalviewDir}/${test_output_dir}" +- +- getdownWebsiteDir = string("${jalviewDir}/${getdown_website_dir}/${JAVA_VERSION}") +- buildDist = true +- buildProperties = null +- +- // the following values might be overridden by the CHANNEL switch +- 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}") ++ useClover = false ++ ++ resourceClassesDir = classesDir ++ ++ testSourceDir = testDir ++ testClassesDir = "${jalviewDir}/${test_output_dir}" ++ ++ buildProperties = string("${classesDir}/${build_properties_file}") + getdownSetAppBaseProperty = false // whether to pass the appbase and appdistdir to the application +- reportRsyncCommand = false +- jvlChannelName = CHANNEL.toLowerCase() +- install4jSuffix = CHANNEL.substring(0, 1).toUpperCase() + CHANNEL.substring(1).toLowerCase(); // BUILD -> Build +- install4jDMGDSStore = "${install4j_images_dir}/${install4j_dmg_ds_store}" +- install4jDMGBackgroundImage = "${install4j_images_dir}/${install4j_dmg_background}" +- install4jInstallerName = "${jalview_name} Non-Release Installer" +- install4jExecutableName = install4j_executable_name +- 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}") +- install4jBackground = string("${install4j_images_dir}/${install4j_background}") +- switch (CHANNEL) { +- +- case "BUILD": +- // TODO: get bamboo build artifact URL for getdown artifacts +- getdown_channel_base = bamboo_channelbase +- getdownChannelName = string("${bamboo_planKey}/${JAVA_VERSION}") +- getdownAppBase = string("${bamboo_channelbase}/${bamboo_planKey}${bamboo_getdown_channel_suffix}/${JAVA_VERSION}") +- jvlChannelName += "_${getdownChannelName}" +- // automatically add the test group Not-bamboo for exclusion +- if ("".equals(testng_excluded_groups)) { +- testng_excluded_groups = "Not-bamboo" +- } +- install4jExtraScheme = "jalviewb" +- break + +- case [ "RELEASE", "JALVIEWJS-RELEASE" ]: +- getdownAppDistDir = getdown_app_dir_release +- reportRsyncCommand = true +- install4jSuffix = "" +- install4jInstallerName = "${jalview_name} Installer" +- break +- +- case "ARCHIVE": +- getdownChannelName = CHANNEL.toLowerCase()+"/${JALVIEW_VERSION}" +- getdownDir = string("${getdownChannelName}/${JAVA_VERSION}") +- getdownAppBase = string("${getdown_channel_base}/${getdownDir}") +- if (!file("${ARCHIVEDIR}/${package_dir}").exists()) { +- throw new GradleException("Must provide an ARCHIVEDIR value to produce an archive distribution") +- } else { +- package_dir = string("${ARCHIVEDIR}/${package_dir}") +- buildProperties = string("${ARCHIVEDIR}/${classes_dir}/${build_properties_file}") +- buildDist = false +- } +- reportRsyncCommand = true +- install4jExtraScheme = "jalviewa" +- break +- +- case "ARCHIVELOCAL": +- getdownChannelName = string("archive/${JALVIEW_VERSION}") +- getdownDir = string("${getdownChannelName}/${JAVA_VERSION}") +- getdownAppBase = file(getdownWebsiteDir).toURI().toString() +- if (!file("${ARCHIVEDIR}/${package_dir}").exists()) { +- throw new GradleException("Must provide an ARCHIVEDIR value to produce an archive distribution") +- } else { +- package_dir = string("${ARCHIVEDIR}/${package_dir}") +- buildProperties = string("${ARCHIVEDIR}/${classes_dir}/${build_properties_file}") +- buildDist = false +- } +- reportRsyncCommand = true +- getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher_local}") +- install4jSuffix = "Archive" +- install4jExtraScheme = "jalviewa" +- break +- +- case "DEVELOP": +- reportRsyncCommand = true +- getdownSetAppBaseProperty = true +- // DEVELOP-RELEASE is usually associated with a Jalview release series so set the version +- JALVIEW_VERSION=JALVIEW_VERSION+"-d${buildDate}" +- +- install4jSuffix = "Develop" +- install4jExtraScheme = "jalviewd" +- install4jInstallerName = "${jalview_name} Develop Installer" +- break +- +- case "TEST-RELEASE": +- reportRsyncCommand = true +- // Don't ignore transpile errors for release build +- if (jalviewjs_ignore_transpile_errors.equals("true")) { +- jalviewjs_ignore_transpile_errors = "false" +- println("Setting jalviewjs_ignore_transpile_errors to 'false'") +- } +- JALVIEW_VERSION = JALVIEW_VERSION+"-test" +- install4jSuffix = "Test" +- install4jExtraScheme = "jalviewt" +- install4jInstallerName = "${jalview_name} Test Installer" +- break +- +- case ~/^SCRATCH(|-[-\w]*)$/: +- getdownChannelName = CHANNEL +- JALVIEW_VERSION = JALVIEW_VERSION+"-"+CHANNEL +- +- getdownDir = string("${getdownChannelName}/${JAVA_VERSION}") +- getdownAppBase = string("${getdown_channel_base}/${getdownDir}") +- reportRsyncCommand = true +- install4jSuffix = "Scratch" +- break +- +- case "TEST-LOCAL": +- if (!file("${LOCALDIR}").exists()) { +- throw new GradleException("Must provide a LOCALDIR value to produce a local distribution") +- } else { +- getdownAppBase = file(file("${LOCALDIR}").getAbsolutePath()).toURI().toString() +- getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher_local}") +- } +- JALVIEW_VERSION = "TEST" +- install4jSuffix = "Test-Local" +- install4jExtraScheme = "jalviewt" +- install4jInstallerName = "${jalview_name} Test Installer" +- break +- +- case [ "LOCAL", "JALVIEWJS" ]: +- JALVIEW_VERSION = "TEST" +- getdownAppBase = file(getdownWebsiteDir).toURI().toString() +- getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher_local}") +- install4jExtraScheme = "jalviewl" +- break +- +- default: // something wrong specified +- throw new GradleException("CHANNEL must be one of BUILD, RELEASE, ARCHIVE, DEVELOP, TEST-RELEASE, SCRATCH-..., LOCAL [default]") +- break +- +- } +- // override getdownAppBase if requested +- if (findProperty("getdown_appbase_override") != null) { +- // 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 if (string(getdown_appbase_override).startsWith("file://")) { +- getdownAppBase = string(getdown_appbase_override) +- 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 +- jvlChannelName = jvlChannelName.replaceAll("[^\\w\\-]+", "_") +- // install4j application and folder names +- if (install4jSuffix == "") { +- install4jApplicationName = "${jalview_name}" +- install4jBundleId = "${install4j_bundle_id}" +- install4jWinApplicationId = install4j_release_win_application_id +- } else { +- install4jApplicationName = "${jalview_name} ${install4jSuffix}" +- install4jBundleId = "${install4j_bundle_id}-" + install4jSuffix.toLowerCase() +- // add int hash of install4jSuffix to the last part of the application_id +- def id = install4j_release_win_application_id +- def idsplitreverse = id.split("-").reverse() +- idsplitreverse[0] = idsplitreverse[0].toInteger() + install4jSuffix.hashCode() +- install4jWinApplicationId = idsplitreverse.reverse().join("-") +- } +- // sanitise folder and id names +- // install4jApplicationFolder = e.g. "Jalview Build" +- install4jApplicationFolder = install4jApplicationName +- .replaceAll("[\"'~:/\\\\\\s]", "_") // replace all awkward filename chars " ' ~ : / \ +- .replaceAll("_+", "_") // collapse __ +- install4jInternalId = install4jApplicationName +- .replaceAll(" ","_") +- .replaceAll("[^\\w\\-\\.]", "_") // replace other non [alphanumeric,_,-,.] +- .replaceAll("_+", "") // collapse __ +- //.replaceAll("_*-_*", "-") // collapse _-_ +- install4jUnixApplicationFolder = install4jApplicationName +- .replaceAll(" ","_") +- .replaceAll("[^\\w\\-\\.]", "_") // replace other non [alphanumeric,_,-,.] +- .replaceAll("_+", "_") // collapse __ +- .replaceAll("_*-_*", "-") // collapse _-_ +- .toLowerCase() +- +- getdownWrapperLink = install4jUnixApplicationFolder // e.g. "jalview_local" +- getdownAppDir = string("${getdownWebsiteDir}/${getdownAppDistDir}") +- //getdownJ11libDir = "${getdownWebsiteDir}/${getdown_j11lib_dir}" +- getdownResourceDir = string("${getdownWebsiteDir}/${getdown_resource_dir}") +- getdownInstallDir = string("${getdownWebsiteDir}/${getdown_install_dir}") +- getdownFilesDir = string("${jalviewDir}/${getdown_files_dir}/${JAVA_VERSION}/") +- getdownFilesInstallDir = string("${getdownFilesDir}/${getdown_install_dir}") +- /* compile without modules -- using classpath libraries +- modules_compileClasspath = fileTree(dir: "${jalviewDir}/${j11modDir}", include: ["*.jar"]) +- modules_runtimeClasspath = modules_compileClasspath +- */ ++ install4jApplicationName = "${jalview_name}" ++ + def details = versionDetails() + gitHash = details.gitHash + gitBranch = details.branchName +@@ -396,71 +130,16 @@ + libDistDir = j8libDir + compile_source_compatibility = 1.8 + compile_target_compatibility = 1.8 +- // these are getdown.txt properties defined dependent on the JAVA_VERSION +- getdownAltJavaMinVersion = string(findProperty("getdown_alt_java8_min_version")) +- getdownAltJavaMaxVersion = string(findProperty("getdown_alt_java8_max_version")) +- // this property is assigned below and expanded to multiple lines in the getdown task +- getdownAltMultiJavaLocation = string(findProperty("getdown_alt_java8_txt_multi_java_location")) +- // this property is for the Java library used in eclipse +- eclipseJavaRuntimeName = string("JavaSE-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 +- getdownAltJavaMinVersion = string(findProperty("getdown_alt_java11_min_version")) +- getdownAltJavaMaxVersion = string(findProperty("getdown_alt_java11_max_version")) +- getdownAltMultiJavaLocation = string(findProperty("getdown_alt_java11_txt_multi_java_location")) +- eclipseJavaRuntimeName = string("JavaSE-11") +- /* compile without modules -- using classpath libraries +- additional_compiler_args += [ +- '--module-path', modules_compileClasspath.asPath, +- '--add-modules', j11modules +- ] +- */ +- } 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 +- getdownAltJavaMinVersion = string(findProperty("getdown_alt_java11_min_version")) +- getdownAltJavaMaxVersion = string(findProperty("getdown_alt_java11_max_version")) +- getdownAltMultiJavaLocation = string(findProperty("getdown_alt_java11_txt_multi_java_location")) +- eclipseJavaRuntimeName = string("JavaSE-11") +- /* compile without modules -- using classpath libraries +- additional_compiler_args += [ +- '--module-path', modules_compileClasspath.asPath, +- '--add-modules', j11modules +- ] +- */ + } else { + throw new GradleException("JAVA_VERSION=${JAVA_VERSION} not currently supported by Jalview") + } + +- +- // for install4j +- JAVA_MIN_VERSION = JAVA_VERSION +- JAVA_MAX_VERSION = JAVA_VERSION +- def jreInstallsDir = string(jre_installs_dir) +- if (jreInstallsDir.startsWith("~/")) { +- jreInstallsDir = System.getProperty("user.home") + jreInstallsDir.substring(1) +- } +- macosJavaVMDir = string("${jreInstallsDir}/jre-${JAVA_INTEGER_VERSION}-mac-x64/jre") +- macosJavaVMTgz = string("${jreInstallsDir}/tgz/jre-${JAVA_INTEGER_VERSION}-mac-x64.tar.gz") +- windowsJavaVMDir = string("${jreInstallsDir}/jre-${JAVA_INTEGER_VERSION}-windows-x64/jre") +- windowsJavaVMTgz = string("${jreInstallsDir}/tgz/jre-${JAVA_INTEGER_VERSION}-windows-x64.tar.gz") +- linuxJavaVMDir = string("${jreInstallsDir}/jre-${JAVA_INTEGER_VERSION}-linux-x64/jre") +- linuxJavaVMTgz = string("${jreInstallsDir}/tgz/jre-${JAVA_INTEGER_VERSION}-linux-x64.tar.gz") +- install4jDir = string("${jalviewDir}/${install4j_utils_dir}") +- install4jConfFileName = string("jalview-install4j-conf.install4j") +- install4jConfFile = file("${install4jDir}/${install4jConfFileName}") +- install4jHomeDir = install4j_home_dir +- if (install4jHomeDir.startsWith("~/")) { +- install4jHomeDir = System.getProperty("user.home") + install4jHomeDir.substring(1) +- } +- + resourceBuildDir = string("${buildDir}/resources") + resourcesBuildDir = string("${resourceBuildDir}/resources_build") + helpBuildDir = string("${resourceBuildDir}/help_build") +@@ -474,31 +153,6 @@ + helpSourceDir = string("${helpParentDir}/${help_dir}") + helpFile = string("${helpBuildDir}/${help_dir}/help.jhm") + +- +- relativeBuildDir = file(jalviewDirAbsolutePath).toPath().relativize(buildDir.toPath()) +- jalviewjsBuildDir = string("${relativeBuildDir}/jalviewjs") +- jalviewjsSiteDir = string("${jalviewjsBuildDir}/${jalviewjs_site_dir}") +- if (IN_ECLIPSE) { +- jalviewjsTransferSiteJsDir = string(jalviewjsSiteDir) +- } else { +- jalviewjsTransferSiteJsDir = string("${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_js") +- } +- jalviewjsTransferSiteLibDir = string("${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_lib") +- jalviewjsTransferSiteSwingJsDir = string("${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_swingjs") +- jalviewjsTransferSiteCoreDir = string("${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_core") +- jalviewjsJalviewCoreHtmlFile = string("") +- jalviewjsJalviewCoreName = string(jalviewjs_core_name) +- jalviewjsCoreClasslists = [] +- jalviewjsJalviewTemplateName = string(jalviewjs_name) +- jalviewjsJ2sSettingsFileName = string("${jalviewDir}/${jalviewjs_j2s_settings}") +- jalviewjsJ2sAltSettingsFileName = string("${jalviewDir}/${jalviewjs_j2s_alt_settings}") +- jalviewjsJ2sProps = null +- jalviewjsJ2sPlugin = jalviewjs_j2s_plugin +- +- eclipseWorkspace = null +- eclipseBinary = string("") +- eclipseVersion = string("") +- eclipseDebug = false + // ENDEXT + } + +@@ -517,27 +171,12 @@ + compileClasspath = files(sourceSets.main.java.outputDir) + compileClasspath += fileTree(dir: "${jalviewDir}/${libDir}", include: ["*.jar"]) + +- runtimeClasspath = compileClasspath +- runtimeClasspath += files(sourceSets.main.resources.srcDirs) +- } +- +- clover { +- java { +- srcDirs cloverInstrDir +- outputDir = cloverClassesDir +- } + +- resources { +- srcDirs = sourceSets.main.resources.srcDirs +- } +- +- compileClasspath = files( sourceSets.clover.java.outputDir ) +- //compileClasspath += files( testClassesDir ) ++ compileClasspath = files(sourceSets.main.java.outputDir) + compileClasspath += fileTree(dir: "${jalviewDir}/${libDir}", include: ["*.jar"]) +- compileClasspath += fileTree(dir: "${jalviewDir}/${clover_lib_dir}", include: ["*.jar"]) +- compileClasspath += fileTree(dir: "${jalviewDir}/${utils_dir}/testnglibs", include: ["**/*.jar"]) + + runtimeClasspath = compileClasspath ++ runtimeClasspath += files(sourceSets.main.resources.srcDirs) + } + + test { +@@ -557,453 +196,41 @@ + runtimeClasspath = compileClasspath + runtimeClasspath += files(sourceSets.test.resources.srcDirs) + } +- +-} +- +- +-// eclipse project and settings files creation, also used by buildship +-eclipse { +- project { +- name = eclipse_project_name +- +- natures 'org.eclipse.jdt.core.javanature', +- 'org.eclipse.jdt.groovy.core.groovyNature', +- 'org.eclipse.buildship.core.gradleprojectnature' +- +- buildCommand 'org.eclipse.jdt.core.javabuilder' +- buildCommand 'org.eclipse.buildship.core.gradleprojectbuilder' +- } +- +- classpath { +- //defaultOutputDir = sourceSets.main.java.outputDir +- configurations.each{ c-> +- if (c.isCanBeResolved()) { +- minusConfigurations += [c] +- } +- } +- +- plusConfigurations = [ ] +- file { +- +- whenMerged { cp -> +- def removeTheseToo = [] +- HashMap alreadyAddedSrcPath = new HashMap<>(); +- cp.entries.each { entry -> +- // This conditional removes all src classpathentries that a) have already been added or b) aren't "src" or "test". +- // e.g. this removes the resources dir being copied into bin/main, bin/test AND bin/clover +- // we add the resources and help/help dirs in as libs afterwards (see below) +- if (entry.kind == 'src') { +- if (alreadyAddedSrcPath.getAt(entry.path) || !(entry.path == bareSourceDir || entry.path == bareTestSourceDir)) { +- removeTheseToo += entry +- } else { +- alreadyAddedSrcPath.putAt(entry.path, true) +- } +- } +- +- } +- cp.entries.removeAll(removeTheseToo) +- +- //cp.entries += new Output("${eclipse_bin_dir}/main") +- if (file(helpParentDir).isDirectory()) { +- cp.entries += new Library(fileReference(helpParentDir)) +- } +- if (file(resourceDir).isDirectory()) { +- cp.entries += new Library(fileReference(resourceDir)) +- } +- +- HashMap alreadyAddedLibPath = new HashMap<>(); +- +- sourceSets.main.compileClasspath.findAll { it.name.endsWith(".jar") }.any { +- //don't want to add outputDir as eclipse is using its own output dir in bin/main +- if (it.isDirectory() || ! it.exists()) { +- // don't add dirs to classpath, especially if they don't exist +- return false // groovy "continue" in .any closure +- } +- def itPath = it.toString() +- if (itPath.startsWith("${jalviewDirAbsolutePath}/")) { +- // make relative path +- itPath = itPath.substring(jalviewDirAbsolutePath.length()+1) +- } +- if (alreadyAddedLibPath.get(itPath)) { +- //println("Not adding duplicate entry "+itPath) +- } else { +- //println("Adding entry "+itPath) +- cp.entries += new Library(fileReference(itPath)) +- alreadyAddedLibPath.put(itPath, true) +- } +- } +- +- sourceSets.test.compileClasspath.findAll { it.name.endsWith(".jar") }.any { +- //no longer want to add outputDir as eclipse is using its own output dir in bin/main +- if (it.isDirectory() || ! it.exists()) { +- // don't add dirs to classpath +- return false // groovy "continue" in .any closure +- } +- +- def itPath = it.toString() +- if (itPath.startsWith("${jalviewDirAbsolutePath}/")) { +- itPath = itPath.substring(jalviewDirAbsolutePath.length()+1) +- } +- if (alreadyAddedLibPath.get(itPath)) { +- // don't duplicate +- } else { +- def lib = new Library(fileReference(itPath)) +- lib.entryAttributes["test"] = "true" +- cp.entries += lib +- alreadyAddedLibPath.put(itPath, true) +- } +- } +- +- } // whenMerged +- +- } // file +- +- containers 'org.eclipse.buildship.core.gradleclasspathcontainer' +- +- } // classpath +- +- jdt { +- // for the IDE, use java 11 compatibility +- sourceCompatibility = compile_source_compatibility +- targetCompatibility = compile_target_compatibility +- javaRuntimeName = eclipseJavaRuntimeName +- +- // add in jalview project specific properties/preferences into eclipse core preferences +- file { +- withProperties { props -> +- def jalview_prefs = new Properties() +- def ins = new FileInputStream("${jalviewDirAbsolutePath}/${eclipse_extra_jdt_prefs_file}") +- jalview_prefs.load(ins) +- ins.close() +- jalview_prefs.forEach { t, v -> +- if (props.getAt(t) == null) { +- props.putAt(t, v) +- } +- } +- // codestyle file -- overrides previous formatter prefs +- def csFile = file("${jalviewDirAbsolutePath}/${eclipse_codestyle_file}") +- if (csFile.exists()) { +- XmlParser parser = new XmlParser() +- def profiles = parser.parse(csFile) +- def profile = profiles.'profile'.find { p -> (p.'@kind' == "CodeFormatterProfile" && p.'@name' == "Jalview") } +- if (profile != null) { +- profile.'setting'.each { s -> +- def id = s.'@id' +- def value = s.'@value' +- if (id != null && value != null) { +- props.putAt(id, value) +- } +- } +- } +- } +- } +- } +- +- } // jdt +- +- if (IN_ECLIPSE) { +- // Don't want these to be activated if in headless build +- synchronizationTasks "eclipseSynchronizationTask" +- //autoBuildTasks "eclipseAutoBuildTask" +- +- } +-} +- +- +-/* hack to change eclipse prefs in .settings files other than org.eclipse.jdt.core.prefs */ +-// Class to allow updating arbitrary properties files +-class PropertiesFile extends PropertiesPersistableConfigurationObject { +- public PropertiesFile(PropertiesTransformer t) { super(t); } +- @Override protected void load(Properties properties) { } +- @Override protected void store(Properties properties) { } +- @Override protected String getDefaultResourceName() { return ""; } +- // This is necessary, because PropertiesPersistableConfigurationObject fails +- // if no default properties file exists. +- @Override public void loadDefaults() { load(new StringBufferInputStream("")); } +-} +- +-// Task to update arbitrary properties files (set outputFile) +-class PropertiesFileTask extends PropertiesGeneratorTask { +- private final PropertiesFileContentMerger file; +- public PropertiesFileTask() { file = new PropertiesFileContentMerger(getTransformer()); } +- protected PropertiesFile create() { return new PropertiesFile(getTransformer()); } +- protected void configure(PropertiesFile props) { +- file.getBeforeMerged().execute(props); file.getWhenMerged().execute(props); +- } +- public void file(Closure closure) { ConfigureUtil.configure(closure, file); } +-} +- +-task eclipseUIPreferences(type: PropertiesFileTask) { +- description = "Generate Eclipse additional settings" +- def filename = "org.eclipse.jdt.ui.prefs" +- outputFile = "$projectDir/.settings/${filename}" as File +- file { +- withProperties { +- it.load new FileInputStream("$projectDir/utils/eclipse/${filename}" as String) ++ /* test { ++ java { ++ srcDirs testSourceDir ++ outputDir = file(testClassesDir) + } +- } +-} + +-task eclipseGroovyCorePreferences(type: PropertiesFileTask) { +- description = "Generate Eclipse additional settings" +- def filename = "org.eclipse.jdt.groovy.core.prefs" +- outputFile = "$projectDir/.settings/${filename}" as File +- file { +- withProperties { +- it.load new FileInputStream("$projectDir/utils/eclipse/${filename}" as String) ++ resources { ++ srcDirs = sourceSets.main.resources.srcDirs + } +- } +-} +- +-task eclipseAllPreferences { +- dependsOn eclipseJdt +- dependsOn eclipseUIPreferences +- dependsOn eclipseGroovyCorePreferences +-} +- +-eclipseUIPreferences.mustRunAfter eclipseJdt +-eclipseGroovyCorePreferences.mustRunAfter eclipseJdt +- +-/* end of eclipse preferences hack */ +- +- +-// clover bits +- +- +-task cleanClover { +- doFirst { +- delete cloverBuildDir +- delete cloverReportDir +- } +-} +- +- +-task cloverInstrJava(type: JavaExec) { +- group = "Verification" +- description = "Create clover instrumented source java files" +- +- dependsOn cleanClover +- +- inputs.files(sourceSets.main.allJava) +- outputs.dir(cloverInstrDir) +- +- //classpath = fileTree(dir: "${jalviewDir}/${clover_lib_dir}", include: ["*.jar"]) +- classpath = sourceSets.clover.compileClasspath +- main = "com.atlassian.clover.CloverInstr" +- +- def argsList = [ +- "--encoding", +- "UTF-8", +- "--initstring", +- cloverDb, +- "--destdir", +- cloverInstrDir.getPath(), +- ] +- def srcFiles = sourceSets.main.allJava.files +- argsList.addAll( +- srcFiles.collect( +- { file -> file.absolutePath } +- ) +- ) +- args argsList.toArray() +- +- doFirst { +- delete cloverInstrDir +- println("Clover: About to instrument "+srcFiles.size() +" files") +- } +-} +- +- +-task cloverInstrTests(type: JavaExec) { +- group = "Verification" +- description = "Create clover instrumented source test files" +- +- dependsOn cleanClover +- +- inputs.files(testDir) +- outputs.dir(cloverTestInstrDir) +- +- classpath = sourceSets.clover.compileClasspath +- main = "com.atlassian.clover.CloverInstr" +- +- def argsList = [ +- "--encoding", +- "UTF-8", +- "--initstring", +- cloverDb, +- "--srcdir", +- testDir, +- "--destdir", +- cloverTestInstrDir.getPath(), +- ] +- args argsList.toArray() +- +- doFirst { +- delete cloverTestInstrDir +- println("Clover: About to instrument test files") +- } +-} +- +- +-task cloverInstr { +- group = "Verification" +- description = "Create clover instrumented all source files" +- +- dependsOn cloverInstrJava +- dependsOn cloverInstrTests +-} +- +- +-cloverClasses.dependsOn cloverInstr +- +- +-task cloverConsoleReport(type: JavaExec) { +- group = "Verification" +- description = "Creates clover console report" +- +- onlyIf { +- file(cloverDb).exists() +- } +- +- inputs.dir cloverClassesDir +- +- classpath = sourceSets.clover.runtimeClasspath +- main = "com.atlassian.clover.reporters.console.ConsoleReporter" +- +- if (cloverreport_mem.length() > 0) { +- maxHeapSize = cloverreport_mem +- } +- if (cloverreport_jvmargs.length() > 0) { +- jvmArgs Arrays.asList(cloverreport_jvmargs.split(" ")) +- } +- +- def argsList = [ +- "--alwaysreport", +- "--initstring", +- cloverDb, +- "--unittests" +- ] +- +- args argsList.toArray() +-} +- +- +-task cloverHtmlReport(type: JavaExec) { +- group = "Verification" +- description = "Creates clover HTML report" +- +- onlyIf { +- file(cloverDb).exists() +- } +- +- def cloverHtmlDir = cloverReportDir +- inputs.dir cloverClassesDir +- outputs.dir cloverHtmlDir +- +- classpath = sourceSets.clover.runtimeClasspath +- main = "com.atlassian.clover.reporters.html.HtmlReporter" +- +- if (cloverreport_mem.length() > 0) { +- maxHeapSize = cloverreport_mem +- } +- if (cloverreport_jvmargs.length() > 0) { +- jvmArgs Arrays.asList(cloverreport_jvmargs.split(" ")) +- } +- +- def argsList = [ +- "--alwaysreport", +- "--initstring", +- cloverDb, +- "--outputdir", +- cloverHtmlDir +- ] +- +- if (cloverreport_html_options.length() > 0) { +- argsList += cloverreport_html_options.split(" ") +- } +- +- args argsList.toArray() +-} +- +- +-task cloverXmlReport(type: JavaExec) { +- group = "Verification" +- description = "Creates clover XML report" +- +- onlyIf { +- file(cloverDb).exists() +- } +- +- def cloverXmlFile = "${cloverReportDir}/clover.xml" +- inputs.dir cloverClassesDir +- outputs.file cloverXmlFile +- +- classpath = sourceSets.clover.runtimeClasspath +- main = "com.atlassian.clover.reporters.xml.XMLReporter" +- +- if (cloverreport_mem.length() > 0) { +- maxHeapSize = cloverreport_mem +- } +- if (cloverreport_jvmargs.length() > 0) { +- jvmArgs Arrays.asList(cloverreport_jvmargs.split(" ")) +- } +- +- def argsList = [ +- "--alwaysreport", +- "--initstring", +- cloverDb, +- "--outfile", +- cloverXmlFile +- ] +- +- if (cloverreport_xml_options.length() > 0) { +- argsList += cloverreport_xml_options.split(" ") +- } + +- args argsList.toArray() +-} +- +- +-task cloverReport { +- group = "Verification" +- description = "Creates clover reports" +- +- dependsOn cloverXmlReport +- dependsOn cloverHtmlReport +-} +- +- +-compileCloverJava { ++ compileClasspath = files( sourceSets.test.java.outputDir ) ++ compileClasspath += sourceSets.main.compileClasspath ++ compileClasspath += fileTree(dir: "${jalviewDir}/${utils_dir}/testnglibs", include: ["** REMOVE_THIS_GAP /*.jar"]) + +- doFirst { +- sourceCompatibility = compile_source_compatibility +- targetCompatibility = compile_target_compatibility +- options.compilerArgs += additional_compiler_args +- print ("Setting target compatibility to "+targetCompatibility+"\n") ++ runtimeClasspath = compileClasspath + } +- //classpath += configurations.cloverRuntime ++*/ + } +-// end clover bits + + + compileJava { +- // JBP->BS should the print statement in doFirst refer to compile_target_compatibility ? + sourceCompatibility = compile_source_compatibility + targetCompatibility = compile_target_compatibility + options.compilerArgs = additional_compiler_args +- options.encoding = "UTF-8" + doFirst { + print ("Setting target compatibility to "+compile_target_compatibility+"\n") + } +- + } + + + compileTestJava { +- sourceCompatibility = compile_source_compatibility +- targetCompatibility = compile_target_compatibility +- options.compilerArgs = additional_compiler_args + doFirst { ++ sourceCompatibility = compile_source_compatibility ++ targetCompatibility = compile_target_compatibility ++ options.compilerArgs = additional_compiler_args + print ("Setting target compatibility to "+targetCompatibility+"\n") + } + } +@@ -1017,7 +244,6 @@ + + + cleanTest { +- dependsOn cleanClover + doFirst { + delete sourceSets.test.java.outputDir + } +@@ -1306,12 +532,7 @@ + //testReportDirName = "test-reports" // note that test workingDir will be $jalviewDir + test { + dependsOn prepare +- +- if (useClover) { +- dependsOn cloverClasses +- } else { //? +- dependsOn compileJava //? +- } ++ dependsOn compileJava //? + + useTestNG() { + includeGroups testng_groups +@@ -1323,6 +544,7 @@ + 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}'") +@@ -1338,9 +560,6 @@ + jvmArgs += additional_compiler_args + + doFirst { +- if (useClover) { +- println("Running tests " + (useClover?"WITH":"WITHOUT") + " clover") +- } + } + } + +@@ -1420,1752 +639,7 @@ + sourceSets.main.resources.srcDirs.each{ dir -> + inputs.dir(dir) + } +- outputs.file("${outputDir}/${archiveFileName}") +-} +- +- +-task copyJars(type: Copy) { +- from fileTree(dir: classesDir, include: "**/*.jar").files +- into "${jalviewDir}/${package_dir}" +-} +- +- +-// 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.archiveFileName.getOrNull() +- } +-} +- +- +-task makeDist { +- group = "build" +- description = "Put all required libraries in dist" +- // order of "cleanPackageDir", "copyJars", "jar" important! +- jar.mustRunAfter cleanPackageDir +- syncJars.mustRunAfter cleanPackageDir +- dependsOn cleanPackageDir +- dependsOn syncJars +- dependsOn jar +- outputs.dir("${jalviewDir}/${package_dir}") +-} +- +- +-task cleanDist { +- dependsOn cleanPackageDir +- dependsOn cleanTest +- dependsOn clean +-} +- +- +-shadowJar { +- group = "distribution" +- description = "Create a single jar file with all dependency libraries merged. Can be run with java -jar" +- if (buildDist) { +- dependsOn makeDist +- } +- from ("${jalviewDir}/${libDistDir}") { +- include("*.jar") +- } +- manifest { +- attributes "Implementation-Version": JALVIEW_VERSION, +- "Application-Name": install4jApplicationName +- } +- mainClassName = shadow_jar_main_class +- mergeServiceFiles() +- classifier = "all-"+JALVIEW_VERSION+"-j"+JAVA_VERSION +- minimize() +-} +- +- +-task getdownWebsite() { +- group = "distribution" +- description = "Create the getdown minimal app folder, and website folder for this version of jalview. Website folder also used for offline app installer" +- if (buildDist) { +- dependsOn makeDist +- } +- +- def getdownWebsiteResourceFilenames = [] +- def getdownTextString = "" +- def getdownResourceDir = getdownResourceDir +- def getdownResourceFilenames = [] +- +- doFirst { +- // clean the getdown website and files dir before creating getdown folders +- delete getdownWebsiteDir +- delete getdownFilesDir +- +- copy { +- from buildProperties +- rename(file(buildProperties).getName(), getdown_build_properties) +- into getdownAppDir +- } +- getdownWebsiteResourceFilenames += "${getdownAppDistDir}/${getdown_build_properties}" +- +- // set some getdown_txt_ properties then go through all properties looking for getdown_txt_... +- def props = project.properties.sort { it.key } +- if (getdownAltJavaMinVersion != null && getdownAltJavaMinVersion.length() > 0) { +- props.put("getdown_txt_java_min_version", getdownAltJavaMinVersion) +- } +- if (getdownAltJavaMaxVersion != null && getdownAltJavaMaxVersion.length() > 0) { +- props.put("getdown_txt_java_max_version", getdownAltJavaMaxVersion) +- } +- 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) +- +- // start with appbase +- getdownTextString += "appbase = ${getdownAppBase}\n" +- props.each{ prop, val -> +- if (prop.startsWith("getdown_txt_") && val != null) { +- if (prop.startsWith("getdown_txt_multi_")) { +- def key = prop.substring(18) +- val.split(",").each{ v -> +- def line = "${key} = ${v}\n" +- getdownTextString += line +- } +- } else { +- // file values rationalised +- if (val.indexOf('/') > -1 || prop.startsWith("getdown_txt_resource")) { +- def r = null +- if (val.indexOf('/') == 0) { +- // absolute path +- r = file(val) +- } else if (val.indexOf('/') > 0) { +- // relative path (relative to jalviewDir) +- r = file( "${jalviewDir}/${val}" ) +- } +- if (r.exists()) { +- val = "${getdown_resource_dir}/" + r.getName() +- getdownWebsiteResourceFilenames += val +- getdownResourceFilenames += r.getPath() +- } +- } +- if (! prop.startsWith("getdown_txt_resource")) { +- def line = prop.substring(12) + " = ${val}\n" +- getdownTextString += line +- } +- } +- } +- } +- +- getdownWebsiteResourceFilenames.each{ filename -> +- getdownTextString += "resource = ${filename}\n" +- } +- getdownResourceFilenames.each{ filename -> +- copy { +- from filename +- into getdownResourceDir +- } +- } +- +- def getdownWrapperScripts = [ getdown_bash_wrapper_script, getdown_powershell_wrapper_script, getdown_batch_wrapper_script ] +- getdownWrapperScripts.each{ script -> +- def s = file( "${jalviewDir}/utils/getdown/${getdown_wrapper_script_dir}/${script}" ) +- if (s.exists()) { +- copy { +- from s +- into "${getdownWebsiteDir}/${getdown_wrapper_script_dir}" +- } +- getdownTextString += "resource = ${getdown_wrapper_script_dir}/${script}\n" +- } +- } +- +- def codeFiles = [] +- fileTree(file(package_dir)).each{ f -> +- if (f.isDirectory()) { +- def files = fileTree(dir: f, include: ["*"]).getFiles() +- codeFiles += files +- } else if (f.exists()) { +- codeFiles += f +- } +- } +- codeFiles.sort().each{f -> +- def name = f.getName() +- def line = "code = ${getdownAppDistDir}/${name}\n" +- getdownTextString += line +- copy { +- from f.getPath() +- into getdownAppDir +- } +- } +- +- // NOT USING MODULES YET, EVERYTHING SHOULD BE IN dist +- /* +- if (JAVA_VERSION.equals("11")) { +- def j11libFiles = fileTree(dir: "${jalviewDir}/${j11libDir}", include: ["*.jar"]).getFiles() +- j11libFiles.sort().each{f -> +- def name = f.getName() +- def line = "code = ${getdown_j11lib_dir}/${name}\n" +- getdownTextString += line +- copy { +- from f.getPath() +- into getdownJ11libDir +- } +- } +- } +- */ +- +- // getdown-launcher.jar should not be in main application class path so the main application can move it when updated. Listed as a resource so it gets updated. +- //getdownTextString += "class = " + file(getdownLauncher).getName() + "\n" +- getdownTextString += "resource = ${getdown_launcher_new}\n" +- getdownTextString += "class = ${main_class}\n" +- // Not setting these properties in general so that getdownappbase and getdowndistdir will default to release version in jalview.bin.Cache +- if (getdownSetAppBaseProperty) { +- getdownTextString += "jvmarg = -Dgetdowndistdir=${getdownAppDistDir}\n" +- getdownTextString += "jvmarg = -Dgetdownappbase=${getdownAppBase}\n" +- } +- +- def getdown_txt = file("${getdownWebsiteDir}/getdown.txt") +- getdown_txt.write(getdownTextString) +- +- def getdownLaunchJvl = getdown_launch_jvl_name + ( (jvlChannelName != null && jvlChannelName.length() > 0)?"-${jvlChannelName}":"" ) + ".jvl" +- def launchJvl = file("${getdownWebsiteDir}/${getdownLaunchJvl}") +- launchJvl.write("appbase=${getdownAppBase}") +- +- // files going into the getdown website dir: getdown-launcher.jar +- copy { +- from getdownLauncher +- rename(file(getdownLauncher).getName(), getdown_launcher_new) +- into getdownWebsiteDir +- } +- +- // files going into the getdown website dir: getdown-launcher(-local).jar +- copy { +- from getdownLauncher +- if (file(getdownLauncher).getName() != getdown_launcher) { +- rename(file(getdownLauncher).getName(), getdown_launcher) +- } +- into getdownWebsiteDir +- } +- +- // files going into the getdown website dir: ./install dir and files +- if (! (CHANNEL.startsWith("ARCHIVE") || CHANNEL.startsWith("DEVELOP"))) { +- copy { +- from getdown_txt +- from getdownLauncher +- from "${getdownAppDir}/${getdown_build_properties}" +- if (file(getdownLauncher).getName() != getdown_launcher) { +- rename(file(getdownLauncher).getName(), getdown_launcher) +- } +- into getdownInstallDir +- } +- +- // and make a copy in the getdown files dir (these are not downloaded by getdown) +- copy { +- from getdownInstallDir +- into getdownFilesInstallDir +- } +- } +- +- // files going into the getdown files dir: getdown.txt, getdown-launcher.jar, channel-launch.jvl, build_properties +- copy { +- from getdown_txt +- from launchJvl +- from getdownLauncher +- from "${getdownWebsiteDir}/${getdown_build_properties}" +- if (file(getdownLauncher).getName() != getdown_launcher) { +- rename(file(getdownLauncher).getName(), getdown_launcher) +- } +- into getdownFilesDir +- } +- +- // and ./resources (not all downloaded by getdown) +- copy { +- from getdownResourceDir +- into "${getdownFilesDir}/${getdown_resource_dir}" +- } +- } +- +- if (buildDist) { +- inputs.dir("${jalviewDir}/${package_dir}") +- } +- outputs.dir(getdownWebsiteDir) +- outputs.dir(getdownFilesDir) +-} +- +- +-// a helper task to allow getdown digest of any dir: `gradle getdownDigestDir -PDIGESTDIR=/path/to/my/random/getdown/dir +-task getdownDigestDir(type: JavaExec) { +- group "Help" +- description "A task to run a getdown Digest on a dir with getdown.txt. Provide a DIGESTDIR property via -PDIGESTDIR=..." +- +- def digestDirPropertyName = "DIGESTDIR" +- doFirst { +- classpath = files(getdownLauncher) +- def digestDir = findProperty(digestDirPropertyName) +- if (digestDir == null) { +- throw new GradleException("Must provide a DIGESTDIR value to produce an alternative getdown digest") +- } +- args digestDir +- } +- main = "com.threerings.getdown.tools.Digester" +-} +- +- +-task getdownDigest(type: JavaExec) { +- group = "distribution" +- description = "Digest the getdown website folder" +- dependsOn getdownWebsite +- doFirst { +- classpath = files(getdownLauncher) +- } +- main = "com.threerings.getdown.tools.Digester" +- args getdownWebsiteDir +- inputs.dir(getdownWebsiteDir) +- outputs.file("${getdownWebsiteDir}/digest2.txt") +-} +- +- +-task getdown() { +- group = "distribution" +- description = "Create the minimal and full getdown app folder for installers and website and create digest file" +- dependsOn getdownDigest +- doLast { +- if (reportRsyncCommand) { +- def fromDir = getdownWebsiteDir + (getdownWebsiteDir.endsWith('/')?'':'/') +- def toDir = "${getdown_rsync_dest}/${getdownDir}" + (getdownDir.endsWith('/')?'':'/') +- println "LIKELY RSYNC COMMAND:" +- println "mkdir -p '$toDir'\nrsync -avh --delete '$fromDir' '$toDir'" +- if (RUNRSYNC == "true") { +- exec { +- commandLine "mkdir", "-p", toDir +- } +- exec { +- commandLine "rsync", "-avh", "--delete", fromDir, toDir +- } +- } +- } +- } +-} +- +- +-tasks.withType(JavaCompile) { +- options.encoding = 'UTF-8' +-} +- +- +-clean { +- doFirst { +- delete getdownWebsiteDir +- delete getdownFilesDir +- } +-} +- +- +-install4j { +- if (file(install4jHomeDir).exists()) { +- // good to go! +- } else if (file(System.getProperty("user.home")+"/buildtools/install4j").exists()) { +- install4jHomeDir = System.getProperty("user.home")+"/buildtools/install4j" +- } else if (file("/Applications/install4j.app/Contents/Resources/app").exists()) { +- install4jHomeDir = "/Applications/install4j.app/Contents/Resources/app" +- } +- installDir(file(install4jHomeDir)) +- +- mediaTypes = Arrays.asList(install4j_media_types.split(",")) +-} +- +- +-task copyInstall4jTemplate { +- def install4jTemplateFile = file("${install4jDir}/${install4j_template}") +- def install4jFileAssociationsFile = file("${install4jDir}/${install4j_installer_file_associations}") +- inputs.file(install4jTemplateFile) +- inputs.file(install4jFileAssociationsFile) +- inputs.property("CHANNEL", { CHANNEL }) +- outputs.file(install4jConfFile) +- +- doLast { +- def install4jConfigXml = new XmlParser().parse(install4jTemplateFile) +- +- // turn off code signing if no OSX_KEYPASS +- if (OSX_KEYPASS == "") { +- install4jConfigXml.'**'.codeSigning.each { codeSigning -> +- codeSigning.'@macEnabled' = "false" +- } +- install4jConfigXml.'**'.windows.each { windows -> +- windows.'@runPostProcessor' = "false" +- } +- } +- +- // turn off checksum creation for LOCAL channel +- def e = install4jConfigXml.application[0] +- if (CHANNEL == "LOCAL") { +- e.'@createChecksums' = "false" +- } else { +- e.'@createChecksums' = "true" +- } +- +- // put file association actions where placeholder action is +- def install4jFileAssociationsText = install4jFileAssociationsFile.text +- def fileAssociationActions = new XmlParser().parseText("${install4jFileAssociationsText}") +- install4jConfigXml.'**'.action.any { a -> // .any{} stops after the first one that returns true +- if (a.'@name' == 'EXTENSIONS_REPLACED_BY_GRADLE') { +- def parent = a.parent() +- parent.remove(a) +- fileAssociationActions.each { faa -> +- parent.append(faa) +- } +- // don't need to continue in .any loop once replacements have been made +- return true +- } +- } +- +- // use Windows Program Group with Examples folder for RELEASE, and Program Group without Examples for everything else +- // NB we're deleting the /other/ one! +- // Also remove the examples subdir from non-release versions +- def customizedIdToDelete = "PROGRAM_GROUP_RELEASE" +- // 2.11.1.0 NOT releasing with the Examples folder in the Program Group +- if (false && CHANNEL=="RELEASE") { // remove 'false && ' to include Examples folder in RELEASE channel +- customizedIdToDelete = "PROGRAM_GROUP_NON_RELEASE" +- } else { +- // remove the examples subdir from Full File Set +- def files = install4jConfigXml.files[0] +- def fileset = files.filesets.fileset.find { fs -> fs.'@customizedId' == "FULL_FILE_SET" } +- def root = files.roots.root.find { r -> r.'@fileset' == fileset.'@id' } +- def mountPoint = files.mountPoints.mountPoint.find { mp -> mp.'@root' == root.'@id' } +- def dirEntry = files.entries.dirEntry.find { de -> de.'@mountPoint' == mountPoint.'@id' && de.'@subDirectory' == "examples" } +- dirEntry.parent().remove(dirEntry) +- } +- install4jConfigXml.'**'.action.any { a -> +- if (a.'@customizedId' == customizedIdToDelete) { +- def parent = a.parent() +- parent.remove(a) +- return true +- } +- } +- +- // write install4j file +- install4jConfFile.text = XmlUtil.serialize(install4jConfigXml) +- } +-} +- +- +-clean { +- doFirst { +- delete install4jConfFile +- } +-} +- +- +-task installers(type: com.install4j.gradle.Install4jTask) { +- group = "distribution" +- description = "Create the install4j installers" +- dependsOn getdown +- dependsOn copyInstall4jTemplate +- +- projectFile = install4jConfFile +- +- // create an md5 for the input files to use as version for install4j conf file +- def digest = MessageDigest.getInstance("MD5") +- digest.update( +- (file("${install4jDir}/${install4j_template}").text + +- file("${install4jDir}/${install4j_info_plist_file_associations}").text + +- file("${install4jDir}/${install4j_installer_file_associations}").text).bytes) +- def filesMd5 = new BigInteger(1, digest.digest()).toString(16) +- if (filesMd5.length() >= 8) { +- filesMd5 = filesMd5.substring(0,8) +- } +- def install4jTemplateVersion = "${JALVIEW_VERSION}_F${filesMd5}_C${gitHash}" +- // make install4jBuildDir relative to jalviewDir +- def install4jBuildDir = "${install4j_build_dir}/${JAVA_VERSION}" +- +- variables = [ +- 'JALVIEW_NAME': jalview_name, +- 'JALVIEW_APPLICATION_NAME': install4jApplicationName, +- 'JALVIEW_DIR': "../..", +- 'OSX_KEYSTORE': OSX_KEYSTORE, +- 'OSX_APPLEID': OSX_APPLEID, +- 'OSX_ALTOOLPASS': OSX_ALTOOLPASS, +- 'JSIGN_SH': JSIGN_SH, +- 'JRE_DIR': getdown_app_dir_java, +- 'INSTALLER_TEMPLATE_VERSION': install4jTemplateVersion, +- 'JALVIEW_VERSION': JALVIEW_VERSION, +- 'JAVA_MIN_VERSION': JAVA_MIN_VERSION, +- 'JAVA_MAX_VERSION': JAVA_MAX_VERSION, +- 'JAVA_VERSION': JAVA_VERSION, +- 'JAVA_INTEGER_VERSION': JAVA_INTEGER_VERSION, +- 'VERSION': JALVIEW_VERSION, +- 'MACOS_JAVA_VM_DIR': macosJavaVMDir, +- 'WINDOWS_JAVA_VM_DIR': windowsJavaVMDir, +- 'LINUX_JAVA_VM_DIR': linuxJavaVMDir, +- 'MACOS_JAVA_VM_TGZ': macosJavaVMTgz, +- 'WINDOWS_JAVA_VM_TGZ': windowsJavaVMTgz, +- 'LINUX_JAVA_VM_TGZ': linuxJavaVMTgz, +- 'COPYRIGHT_MESSAGE': install4j_copyright_message, +- 'BUNDLE_ID': install4jBundleId, +- 'INTERNAL_ID': install4jInternalId, +- 'WINDOWS_APPLICATION_ID': install4jWinApplicationId, +- 'MACOS_DMG_DS_STORE': install4jDMGDSStore, +- 'MACOS_DMG_BG_IMAGE': install4jDMGBackgroundImage, +- 'WRAPPER_LINK': getdownWrapperLink, +- 'BASH_WRAPPER_SCRIPT': getdown_bash_wrapper_script, +- 'POWERSHELL_WRAPPER_SCRIPT': getdown_powershell_wrapper_script, +- 'WRAPPER_SCRIPT_BIN_DIR': getdown_wrapper_script_dir, +- 'INSTALLER_NAME': install4jInstallerName, +- 'INSTALL4J_UTILS_DIR': install4j_utils_dir, +- 'GETDOWN_WEBSITE_DIR': getdown_website_dir, +- 'GETDOWN_FILES_DIR': getdown_files_dir, +- 'GETDOWN_RESOURCE_DIR': getdown_resource_dir, +- 'GETDOWN_DIST_DIR': getdownAppDistDir, +- 'GETDOWN_ALT_DIR': getdown_app_dir_alt, +- 'GETDOWN_INSTALL_DIR': getdown_install_dir, +- 'INFO_PLIST_FILE_ASSOCIATIONS_FILE': install4j_info_plist_file_associations, +- 'BUILD_DIR': install4jBuildDir, +- 'APPLICATION_CATEGORIES': install4j_application_categories, +- 'APPLICATION_FOLDER': install4jApplicationFolder, +- 'UNIX_APPLICATION_FOLDER': install4jUnixApplicationFolder, +- 'EXECUTABLE_NAME': install4jExecutableName, +- 'EXTRA_SCHEME': install4jExtraScheme, +- 'MAC_ICONS_FILE': install4jMacIconsFile, +- 'WINDOWS_ICONS_FILE': install4jWindowsIconsFile, +- 'PNG_ICON_FILE': install4jPngIconFile, +- 'BACKGROUND': install4jBackground, +- +- ] +- +- //println("INSTALL4J VARIABLES:") +- //variables.each{k,v->println("${k}=${v}")} +- +- destination = "${jalviewDir}/${install4jBuildDir}" +- buildSelected = true +- +- if (install4j_faster.equals("true") || CHANNEL.startsWith("LOCAL")) { +- faster = true +- disableSigning = true +- disableNotarization = true +- } +- +- if (OSX_KEYPASS) { +- macKeystorePassword = OSX_KEYPASS +- } +- +- if (OSX_ALTOOLPASS) { +- appleIdPassword = OSX_ALTOOLPASS +- disableNotarization = false +- } else { +- disableNotarization = true +- } +- +- doFirst { +- println("Using projectFile "+projectFile) +- if (!disableNotarization) { println("Will notarize OSX App DMG") } +- } +- //verbose=true +- +- inputs.dir(getdownWebsiteDir) +- inputs.file(install4jConfFile) +- inputs.file("${install4jDir}/${install4j_info_plist_file_associations}") +- inputs.dir(macosJavaVMDir) +- inputs.dir(windowsJavaVMDir) +- outputs.dir("${jalviewDir}/${install4j_build_dir}/${JAVA_VERSION}") +-} +- +- +-spotless { +- java { +- eclipse().configFile(eclipse_codestyle_file) +- } +-} +- +- +-task sourceDist(type: Tar) { +- group "distribution" +- description "Create a source .tar.gz file for distribution" +- +- dependsOn createBuildProperties +- dependsOn convertMdFiles +- +- def VERSION_UNDERSCORES = JALVIEW_VERSION.replaceAll("\\.", "_") +- def outputFileName = "${project.name}_${VERSION_UNDERSCORES}.tar.gz" +- archiveFileName = outputFileName +- +- compression Compression.GZIP +- +- into project.name +- +- def EXCLUDE_FILES=[ +- "build/*", +- "bin/*", +- "test-output/", +- "test-reports", +- "tests", +- "clover*/*", +- ".*", +- "benchmarking/*", +- "**/.*", +- "*.class", +- "**/*.class","$j11modDir/**/*.jar","appletlib","**/*locales", +- "*locales/**", +- "utils/InstallAnywhere", +- "**/*.log", +- ] +- def PROCESS_FILES=[ +- "AUTHORS", +- "CITATION", +- "FEATURETODO", +- "JAVA-11-README", +- "FEATURETODO", +- "LICENSE", +- "**/README", +- "RELEASE", +- "THIRDPARTYLIBS", +- "TESTNG", +- "build.gradle", +- "gradle.properties", +- "**/*.java", +- "**/*.html", +- "**/*.xml", +- "**/*.gradle", +- "**/*.groovy", +- "**/*.properties", +- "**/*.perl", +- "**/*.sh", +- ] +- def INCLUDE_FILES=[ +- ".settings/org.eclipse.jdt.core.jalview.prefs", +- ] +- +- from(jalviewDir) { +- exclude (EXCLUDE_FILES) +- include (PROCESS_FILES) +- filter(ReplaceTokens, +- beginToken: '$$', +- endToken: '$$', +- tokens: [ +- 'Version-Rel': JALVIEW_VERSION, +- 'Year-Rel': getDate("yyyy") +- ] +- ) +- } +- from(jalviewDir) { +- exclude (EXCLUDE_FILES) +- exclude (PROCESS_FILES) +- exclude ("appletlib") +- exclude ("**/*locales") +- exclude ("*locales/**") +- exclude ("utils/InstallAnywhere") +- +- exclude (getdown_files_dir) +- exclude (getdown_website_dir) +- +- // exluding these as not using jars as modules yet +- exclude ("${j11modDir}/**/*.jar") +- } +- from(jalviewDir) { +- include(INCLUDE_FILES) +- } +-// from (jalviewDir) { +-// // explicit includes for stuff that seemed to not get included +-// include(fileTree("test/**/*.")) +-// exclude(EXCLUDE_FILES) +-// exclude(PROCESS_FILES) +-// } +- +- from(file(buildProperties).getParent()) { +- include(file(buildProperties).getName()) +- rename(file(buildProperties).getName(), "build_properties") +- filter({ line -> +- line.replaceAll("^INSTALLATION=.*\$","INSTALLATION=Source Release"+" git-commit\\\\:"+gitHash+" ["+gitBranch+"]") +- }) +- } +- +-} +- +- +-task helppages { +- dependsOn copyHelp +- dependsOn pubhtmlhelp +- +- inputs.dir("${helpBuildDir}/${help_dir}") +- outputs.dir("${buildDir}/distributions/${help_dir}") +-} +- +- +-task j2sSetHeadlessBuild { +- doFirst { +- IN_ECLIPSE = false +- } +-} +- +- +-task jalviewjsEnableAltFileProperty(type: WriteProperties) { +- group "jalviewjs" +- description "Enable the alternative J2S Config file for headless build" +- +- outputFile = jalviewjsJ2sSettingsFileName +- def j2sPropsFile = file(jalviewjsJ2sSettingsFileName) +- def j2sProps = new Properties() +- if (j2sPropsFile.exists()) { +- try { +- def j2sPropsFileFIS = new FileInputStream(j2sPropsFile) +- j2sProps.load(j2sPropsFileFIS) +- j2sPropsFileFIS.close() +- +- j2sProps.each { prop, val -> +- property(prop, val) +- } +- } catch (Exception e) { +- println("Exception reading ${jalviewjsJ2sSettingsFileName}") +- e.printStackTrace() +- } +- } +- if (! j2sProps.stringPropertyNames().contains(jalviewjs_j2s_alt_file_property_config)) { +- property(jalviewjs_j2s_alt_file_property_config, jalviewjs_j2s_alt_file_property) +- } +-} +- +- +-task jalviewjsSetEclipseWorkspace { +- def propKey = "jalviewjs_eclipse_workspace" +- def propVal = null +- if (project.hasProperty(propKey)) { +- propVal = project.getProperty(propKey) +- if (propVal.startsWith("~/")) { +- propVal = System.getProperty("user.home") + propVal.substring(1) +- } +- } +- def propsFileName = "${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_eclipse_workspace_location_file}" +- def propsFile = file(propsFileName) +- def eclipseWsDir = propVal +- def props = new Properties() +- +- def writeProps = true +- if (( eclipseWsDir == null || !file(eclipseWsDir).exists() ) && propsFile.exists()) { +- def ins = new FileInputStream(propsFileName) +- props.load(ins) +- ins.close() +- if (props.getProperty(propKey, null) != null) { +- eclipseWsDir = props.getProperty(propKey) +- writeProps = false +- } +- } +- +- if (eclipseWsDir == null || !file(eclipseWsDir).exists()) { +- def tempDir = File.createTempDir() +- eclipseWsDir = tempDir.getAbsolutePath() +- writeProps = true +- } +- eclipseWorkspace = file(eclipseWsDir) +- +- doFirst { +- // do not run a headless transpile when we claim to be in Eclipse +- if (IN_ECLIPSE) { +- println("Skipping task ${name} as IN_ECLIPSE=${IN_ECLIPSE}") +- throw new StopExecutionException("Not running headless transpile whilst IN_ECLIPSE is '${IN_ECLIPSE}'") +- } else { +- println("Running task ${name} as IN_ECLIPSE=${IN_ECLIPSE}") +- } +- +- if (writeProps) { +- props.setProperty(propKey, eclipseWsDir) +- propsFile.parentFile.mkdirs() +- def bytes = new ByteArrayOutputStream() +- props.store(bytes, null) +- def propertiesString = bytes.toString() +- propsFile.text = propertiesString +- print("NEW ") +- } else { +- print("EXISTING ") +- } +- +- println("ECLIPSE WORKSPACE: "+eclipseWorkspace.getPath()) +- } +- +- //inputs.property(propKey, eclipseWsDir) // eclipseWsDir only gets set once this task runs, so will be out-of-date +- outputs.file(propsFileName) +- outputs.upToDateWhen { eclipseWorkspace.exists() && propsFile.exists() } +-} +- +- +-task jalviewjsEclipsePaths { +- def eclipseProduct +- +- def eclipseRoot = jalviewjs_eclipse_root +- if (eclipseRoot.startsWith("~/")) { +- eclipseRoot = System.getProperty("user.home") + eclipseRoot.substring(1) +- } +- if (OperatingSystem.current().isMacOsX()) { +- eclipseRoot += "/Eclipse.app" +- eclipseBinary = "${eclipseRoot}/Contents/MacOS/eclipse" +- eclipseProduct = "${eclipseRoot}/Contents/Eclipse/.eclipseproduct" +- } else if (OperatingSystem.current().isWindows()) { // check these paths!! +- if (file("${eclipseRoot}/eclipse").isDirectory() && file("${eclipseRoot}/eclipse/.eclipseproduct").exists()) { +- eclipseRoot += "/eclipse" +- } +- eclipseBinary = "${eclipseRoot}/eclipse.exe" +- eclipseProduct = "${eclipseRoot}/.eclipseproduct" +- } else { // linux or unix +- if (file("${eclipseRoot}/eclipse").isDirectory() && file("${eclipseRoot}/eclipse/.eclipseproduct").exists()) { +- eclipseRoot += "/eclipse" +-println("eclipseDir exists") +- } +- eclipseBinary = "${eclipseRoot}/eclipse" +- eclipseProduct = "${eclipseRoot}/.eclipseproduct" +- } +- +- eclipseVersion = "4.13" // default +- def assumedVersion = true +- if (file(eclipseProduct).exists()) { +- def fis = new FileInputStream(eclipseProduct) +- def props = new Properties() +- props.load(fis) +- eclipseVersion = props.getProperty("version") +- fis.close() +- assumedVersion = false +- } +- +- def propKey = "eclipse_debug" +- eclipseDebug = (project.hasProperty(propKey) && project.getProperty(propKey).equals("true")) +- +- doFirst { +- // do not run a headless transpile when we claim to be in Eclipse +- if (IN_ECLIPSE) { +- println("Skipping task ${name} as IN_ECLIPSE=${IN_ECLIPSE}") +- throw new StopExecutionException("Not running headless transpile whilst IN_ECLIPSE is '${IN_ECLIPSE}'") +- } else { +- println("Running task ${name} as IN_ECLIPSE=${IN_ECLIPSE}") +- } +- +- if (!assumedVersion) { +- println("ECLIPSE VERSION=${eclipseVersion}") +- } +- } +-} +- +- +-task printProperties { +- group "Debug" +- description "Output to console all System.properties" +- doFirst { +- System.properties.each { key, val -> System.out.println("Property: ${key}=${val}") } +- } +-} +- +- +-task eclipseSetup { +- dependsOn eclipseProject +- dependsOn eclipseClasspath +- dependsOn eclipseJdt +-} +- +- +-// this version (type: Copy) will delete anything in the eclipse dropins folder that isn't in fromDropinsDir +-task jalviewjsEclipseCopyDropins(type: Copy) { +- dependsOn jalviewjsEclipsePaths +- +- def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjs_eclipse_dropins_dir}", include: "*.jar") +- inputFiles += file("${jalviewDir}/${jalviewjsJ2sPlugin}") +- def outputDir = "${jalviewDir}/${jalviewjsBuildDir}/${jalviewjs_eclipse_tmp_dropins_dir}" +- +- from inputFiles +- into outputDir +-} +- +- +-// this eclipse -clean doesn't actually work +-task jalviewjsCleanEclipse(type: Exec) { +- dependsOn eclipseSetup +- dependsOn jalviewjsEclipsePaths +- dependsOn jalviewjsEclipseCopyDropins +- +- executable(eclipseBinary) +- args(["-nosplash", "--launcher.suppressErrors", "-data", eclipseWorkspace.getPath(), "-clean", "-console", "-consoleLog"]) +- if (eclipseDebug) { +- args += "-debug" +- } +- args += "-l" +- +- def inputString = """exit +-y +-""" +- def inputByteStream = new ByteArrayInputStream(inputString.getBytes()) +- standardInput = inputByteStream +-} +- +-/* not really working yet +-jalviewjsEclipseCopyDropins.finalizedBy jalviewjsCleanEclipse +-*/ +- +- +-task jalviewjsTransferUnzipSwingJs { +- def file_zip = "${jalviewDir}/${jalviewjs_swingjs_zip}" +- +- doLast { +- copy { +- from zipTree(file_zip) +- into "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}" +- } +- } +- +- inputs.file file_zip +- outputs.dir "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}" +-} +- +- +-task jalviewjsTransferUnzipLib { +- def zipFiles = fileTree(dir: "${jalviewDir}/${jalviewjs_libjs_dir}", include: "*.zip") +- +- doLast { +- zipFiles.each { file_zip -> +- copy { +- from zipTree(file_zip) +- into "${jalviewDir}/${jalviewjsTransferSiteLibDir}" +- } +- } +- } +- +- inputs.files zipFiles +- outputs.dir "${jalviewDir}/${jalviewjsTransferSiteLibDir}" +-} +- +- +-task jalviewjsTransferUnzipAllLibs { +- dependsOn jalviewjsTransferUnzipSwingJs +- dependsOn jalviewjsTransferUnzipLib +-} +- +- +-task jalviewjsCreateJ2sSettings(type: WriteProperties) { +- group "JalviewJS" +- description "Create the alternative j2s file from the j2s.* properties" +- +- jalviewjsJ2sProps = project.properties.findAll { it.key.startsWith("j2s.") }.sort { it.key } +- def siteDirProperty = "j2s.site.directory" +- def setSiteDir = false +- jalviewjsJ2sProps.each { prop, val -> +- if (val != null) { +- if (prop == siteDirProperty) { +- if (!(val.startsWith('/') || val.startsWith("file://") )) { +- val = "${jalviewDir}/${jalviewjsTransferSiteJsDir}/${val}" +- } +- setSiteDir = true +- } +- property(prop,val) +- } +- if (!setSiteDir) { // default site location, don't override specifically set property +- property(siteDirProperty,"${jalviewDirRelativePath}/${jalviewjsTransferSiteJsDir}") +- } +- } +- outputFile = jalviewjsJ2sAltSettingsFileName +- +- if (! IN_ECLIPSE) { +- inputs.properties(jalviewjsJ2sProps) +- outputs.file(jalviewjsJ2sAltSettingsFileName) +- } +-} +- +- +-task jalviewjsEclipseSetup { +- dependsOn jalviewjsEclipseCopyDropins +- dependsOn jalviewjsSetEclipseWorkspace +- dependsOn jalviewjsCreateJ2sSettings +-} +- +- +-task jalviewjsSyncAllLibs (type: Sync) { +- dependsOn jalviewjsTransferUnzipAllLibs +- def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjsTransferSiteLibDir}") +- inputFiles += fileTree(dir: "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}") +- 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 buildResources +- +- def inputFiles = fileTree(dir: resourcesBuildDir) +- 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 jalviewjsSyncSiteResources (type: Sync) { +- def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjs_site_resource_dir}") +- 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 jalviewjsSyncBuildProperties (type: Sync) { +- 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 +- dependsOn jalviewjsEclipseSetup +- +- doFirst { +- // do not run a headless import when we claim to be in Eclipse +- if (IN_ECLIPSE) { +- println("Skipping task ${name} as IN_ECLIPSE=${IN_ECLIPSE}") +- throw new StopExecutionException("Not running headless import whilst IN_ECLIPSE is '${IN_ECLIPSE}'") +- } else { +- println("Running task ${name} as IN_ECLIPSE=${IN_ECLIPSE}") +- } +- } +- +- //def projdir = eclipseWorkspace.getPath()+"/.metadata/.plugins/org.eclipse.core.resources/.projects/jalview/org.eclipse.jdt.core" +- def projdir = eclipseWorkspace.getPath()+"/.metadata/.plugins/org.eclipse.core.resources/.projects/jalview" +- executable(eclipseBinary) +- args(["-nosplash", "--launcher.suppressErrors", "-application", "com.seeq.eclipse.importprojects.headlessimport", "-data", eclipseWorkspace.getPath(), "-import", jalviewDirAbsolutePath]) +- if (eclipseDebug) { +- args += "-debug" +- } +- args += [ "--launcher.appendVmargs", "-vmargs", "-Dorg.eclipse.equinox.p2.reconciler.dropins.directory=${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_eclipse_tmp_dropins_dir}" ] +- if (!IN_ECLIPSE) { +- args += [ "-D${j2sHeadlessBuildProperty}=true" ] +- args += [ "-D${jalviewjs_j2s_alt_file_property}=${jalviewjsJ2sAltSettingsFileName}" ] +- } +- +- inputs.file("${jalviewDir}/.project") +- outputs.upToDateWhen { +- file(projdir).exists() +- } +-} +- + +-task jalviewjsTranspile(type: Exec) { +- dependsOn jalviewjsEclipseSetup +- dependsOn jalviewjsProjectImport +- dependsOn jalviewjsEclipsePaths +- if (!IN_ECLIPSE) { +- dependsOn jalviewjsEnableAltFileProperty +- } +- +- doFirst { +- // do not run a headless transpile when we claim to be in Eclipse +- if (IN_ECLIPSE) { +- println("Skipping task ${name} as IN_ECLIPSE=${IN_ECLIPSE}") +- throw new StopExecutionException("Not running headless transpile whilst IN_ECLIPSE is '${IN_ECLIPSE}'") +- } else { +- println("Running task ${name} as IN_ECLIPSE=${IN_ECLIPSE}") +- } +- } +- +- executable(eclipseBinary) +- args(["-nosplash", "--launcher.suppressErrors", "-application", "org.eclipse.jdt.apt.core.aptBuild", "-data", eclipseWorkspace, "-${jalviewjs_eclipse_build_arg}", eclipse_project_name ]) +- if (eclipseDebug) { +- args += "-debug" +- } +- args += [ "--launcher.appendVmargs", "-vmargs", "-Dorg.eclipse.equinox.p2.reconciler.dropins.directory=${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_eclipse_tmp_dropins_dir}" ] +- if (!IN_ECLIPSE) { +- args += [ "-D${j2sHeadlessBuildProperty}=true" ] +- args += [ "-D${jalviewjs_j2s_alt_file_property}=${jalviewjsJ2sAltSettingsFileName}" ] +- } +- +- def stdout +- def stderr +- doFirst { +- stdout = new ByteArrayOutputStream() +- stderr = new ByteArrayOutputStream() +- +- def logOutFileName = "${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_j2s_transpile_stdout}" +- def logOutFile = file(logOutFileName) +- logOutFile.createNewFile() +- logOutFile.text = """ROOT: ${jalviewjs_eclipse_root} +-BINARY: ${eclipseBinary} +-VERSION: ${eclipseVersion} +-WORKSPACE: ${eclipseWorkspace} +-DEBUG: ${eclipseDebug} +----- +-""" +- def logOutFOS = new FileOutputStream(logOutFile, true) // true == append +- // combine stdout and stderr +- def logErrFOS = logOutFOS +- +- if (jalviewjs_j2s_to_console.equals("true")) { +- standardOutput = new org.apache.tools.ant.util.TeeOutputStream( +- new org.apache.tools.ant.util.TeeOutputStream( +- logOutFOS, +- stdout), +- System.out) +- errorOutput = new org.apache.tools.ant.util.TeeOutputStream( +- new org.apache.tools.ant.util.TeeOutputStream( +- logErrFOS, +- stderr), +- System.err) +- } else { +- standardOutput = new org.apache.tools.ant.util.TeeOutputStream( +- logOutFOS, +- stdout) +- errorOutput = new org.apache.tools.ant.util.TeeOutputStream( +- logErrFOS, +- stderr) +- } +- } +- +- doLast { +- if (stdout.toString().contains("Error processing ")) { +- // j2s did not complete transpile +- //throw new TaskExecutionException("Error during transpilation:\n${stderr}\nSee eclipse transpile log file '${jalviewDir}/${jalviewjsBuildDir}/${jalviewjs_j2s_transpile_stdout}'") +- if (jalviewjs_ignore_transpile_errors.equals("true")) { +- println("IGNORING TRANSPILE ERRORS") +- println("See eclipse transpile log file '${jalviewDir}/${jalviewjsBuildDir}/${jalviewjs_j2s_transpile_stdout}'") +- } else { +- throw new GradleException("Error during transpilation:\n${stderr}\nSee eclipse transpile log file '${jalviewDir}/${jalviewjsBuildDir}/${jalviewjs_j2s_transpile_stdout}'") +- } +- } +- } +- +- inputs.dir("${jalviewDir}/${sourceDir}") +- outputs.dir("${jalviewDir}/${jalviewjsTransferSiteJsDir}") +- outputs.upToDateWhen( { file("${jalviewDir}/${jalviewjsTransferSiteJsDir}${jalviewjs_server_resource}").exists() } ) +-} +- +- +-def jalviewjsCallCore(String name, FileCollection list, String prefixFile, String suffixFile, String jsfile, String zjsfile, File logOutFile, Boolean logOutConsole) { +- +- def stdout = new ByteArrayOutputStream() +- def stderr = new ByteArrayOutputStream() +- +- def coreFile = file(jsfile) +- def msg = "" +- msg = "Creating core for ${name}...\nGenerating ${jsfile}" +- println(msg) +- logOutFile.createNewFile() +- logOutFile.append(msg+"\n") +- +- def coreTop = file(prefixFile) +- def coreBottom = file(suffixFile) +- coreFile.getParentFile().mkdirs() +- coreFile.createNewFile() +- coreFile.write( coreTop.getText("UTF-8") ) +- list.each { +- f -> +- if (f.exists()) { +- def t = f.getText("UTF-8") +- t.replaceAll("Clazz\\.([^_])","Clazz_${1}") +- coreFile.append( t ) +- } else { +- msg = "...file '"+f.getPath()+"' does not exist, skipping" +- println(msg) +- logOutFile.append(msg+"\n") +- } +- } +- coreFile.append( coreBottom.getText("UTF-8") ) +- +- msg = "Generating ${zjsfile}" +- println(msg) +- logOutFile.append(msg+"\n") +- def logOutFOS = new FileOutputStream(logOutFile, true) // true == append +- def logErrFOS = logOutFOS +- +- javaexec { +- classpath = files(["${jalviewDir}/${jalviewjs_closure_compiler}"]) +- main = "com.google.javascript.jscomp.CommandLineRunner" +- jvmArgs = [ "-Dfile.encoding=UTF-8" ] +- args = [ "--compilation_level", "SIMPLE_OPTIMIZATIONS", "--warning_level", "QUIET", "--charset", "UTF-8", "--js", jsfile, "--js_output_file", zjsfile ] +- maxHeapSize = "2g" +- +- msg = "\nRunning '"+commandLine.join(' ')+"'\n" +- println(msg) +- logOutFile.append(msg+"\n") +- +- if (logOutConsole) { +- standardOutput = new org.apache.tools.ant.util.TeeOutputStream( +- new org.apache.tools.ant.util.TeeOutputStream( +- logOutFOS, +- stdout), +- standardOutput) +- errorOutput = new org.apache.tools.ant.util.TeeOutputStream( +- new org.apache.tools.ant.util.TeeOutputStream( +- logErrFOS, +- stderr), +- errorOutput) +- } else { +- standardOutput = new org.apache.tools.ant.util.TeeOutputStream( +- logOutFOS, +- stdout) +- errorOutput = new org.apache.tools.ant.util.TeeOutputStream( +- logErrFOS, +- stderr) +- } +- } +- msg = "--" +- println(msg) +- logOutFile.append(msg+"\n") +-} +- +- +-task jalviewjsBuildAllCores { +- group "JalviewJS" +- description "Build the core js lib closures listed in the classlists dir" +- dependsOn jalviewjsTranspile +- dependsOn jalviewjsTransferUnzipSwingJs +- +- def j2sDir = "${jalviewDir}/${jalviewjsTransferSiteJsDir}/${jalviewjs_j2s_subdir}" +- def swingJ2sDir = "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}/${jalviewjs_j2s_subdir}" +- def libJ2sDir = "${jalviewDir}/${jalviewjsTransferSiteLibDir}/${jalviewjs_j2s_subdir}" +- def jsDir = "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}/${jalviewjs_js_subdir}" +- def outputDir = "${jalviewDir}/${jalviewjsTransferSiteCoreDir}/${jalviewjs_j2s_subdir}/core" +- def prefixFile = "${jsDir}/core/coretop2.js" +- def suffixFile = "${jsDir}/core/corebottom2.js" +- +- inputs.file prefixFile +- inputs.file suffixFile +- +- def classlistFiles = [] +- // add the classlists found int the jalviewjs_classlists_dir +- fileTree(dir: "${jalviewDir}/${jalviewjs_classlists_dir}", include: "*.txt").each { +- file -> +- def name = file.getName() - ".txt" +- classlistFiles += [ +- 'file': file, +- 'name': name +- ] +- } +- +- // _jmol and _jalview cores. Add any other peculiar classlist.txt files here +- //classlistFiles += [ 'file': file("${jalviewDir}/${jalviewjs_classlist_jmol}"), 'name': "_jvjmol" ] +- classlistFiles += [ 'file': file("${jalviewDir}/${jalviewjs_classlist_jalview}"), 'name': jalviewjsJalviewCoreName ] +- +- jalviewjsCoreClasslists = [] +- +- classlistFiles.each { +- hash -> +- +- def file = hash['file'] +- if (! file.exists()) { +- //println("...classlist file '"+file.getPath()+"' does not exist, skipping") +- return false // this is a "continue" in groovy .each closure +- } +- def name = hash['name'] +- if (name == null) { +- name = file.getName() - ".txt" +- } +- +- def filelist = [] +- file.eachLine { +- line -> +- filelist += line +- } +- def list = fileTree(dir: j2sDir, includes: filelist) +- +- def jsfile = "${outputDir}/core${name}.js" +- def zjsfile = "${outputDir}/core${name}.z.js" +- +- jalviewjsCoreClasslists += [ +- 'jsfile': jsfile, +- 'zjsfile': zjsfile, +- 'list': list, +- 'name': name +- ] +- +- inputs.file(file) +- inputs.files(list) +- outputs.file(jsfile) +- outputs.file(zjsfile) +- } +- +- // _stevesoft core. add any cores without a classlist here (and the inputs and outputs) +- def stevesoftClasslistName = "_stevesoft" +- def stevesoftClasslist = [ +- 'jsfile': "${outputDir}/core${stevesoftClasslistName}.js", +- 'zjsfile': "${outputDir}/core${stevesoftClasslistName}.z.js", +- 'list': fileTree(dir: j2sDir, include: "com/stevesoft/pat/**/*.js"), +- 'name': stevesoftClasslistName +- ] +- jalviewjsCoreClasslists += stevesoftClasslist +- inputs.files(stevesoftClasslist['list']) +- outputs.file(stevesoftClasslist['jsfile']) +- outputs.file(stevesoftClasslist['zjsfile']) +- +- // _all core +- def allClasslistName = "_all" +- def allJsFiles = fileTree(dir: j2sDir, include: "**/*.js") +- allJsFiles += fileTree( +- dir: libJ2sDir, +- include: "**/*.js", +- excludes: [ +- // these exlusions are files that the closure-compiler produces errors for. Should fix them +- "**/org/jmol/jvxl/readers/IsoIntersectFileReader.js", +- "**/org/jmol/export/JSExporter.js" +- ] +- ) +- allJsFiles += fileTree( +- dir: swingJ2sDir, +- include: "**/*.js", +- excludes: [ +- // these exlusions are files that the closure-compiler produces errors for. Should fix them +- "**/sun/misc/Unsafe.js", +- "**/swingjs/jquery/jquery-editable-select.js", +- "**/swingjs/jquery/j2sComboBox.js", +- "**/sun/misc/FloatingDecimal.js" +- ] +- ) +- def allClasslist = [ +- 'jsfile': "${outputDir}/core${allClasslistName}.js", +- 'zjsfile': "${outputDir}/core${allClasslistName}.z.js", +- 'list': allJsFiles, +- 'name': allClasslistName +- ] +- // not including this version of "all" core at the moment +- //jalviewjsCoreClasslists += allClasslist +- inputs.files(allClasslist['list']) +- outputs.file(allClasslist['jsfile']) +- outputs.file(allClasslist['zjsfile']) +- +- doFirst { +- def logOutFile = file("${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_j2s_closure_stdout}") +- logOutFile.getParentFile().mkdirs() +- logOutFile.createNewFile() +- logOutFile.write(getDate("yyyy-MM-dd HH:mm:ss")+" jalviewjsBuildAllCores\n----\n") +- +- jalviewjsCoreClasslists.each { +- jalviewjsCallCore(it.name, it.list, prefixFile, suffixFile, it.jsfile, it.zjsfile, logOutFile, jalviewjs_j2s_to_console.equals("true")) +- } +- } +- +-} +- +- +-def jalviewjsPublishCoreTemplate(String coreName, String templateName, File inputFile, String outputFile) { +- copy { +- from inputFile +- into file(outputFile).getParentFile() +- rename { filename -> +- if (filename.equals(inputFile.getName())) { +- return file(outputFile).getName() +- } +- return null +- } +- filter(ReplaceTokens, +- beginToken: '_', +- endToken: '_', +- tokens: [ +- 'MAIN': '"'+main_class+'"', +- 'CODE': "null", +- 'NAME': jalviewjsJalviewTemplateName+" [core ${coreName}]", +- 'COREKEY': jalviewjs_core_key, +- 'CORENAME': coreName +- ] +- ) +- } +-} +- +- +-task jalviewjsPublishCoreTemplates { +- dependsOn jalviewjsBuildAllCores +- def inputFileName = "${jalviewDir}/${j2s_coretemplate_html}" +- def inputFile = file(inputFileName) +- def outputDir = "${jalviewDir}/${jalviewjsTransferSiteCoreDir}" +- +- def outputFiles = [] +- jalviewjsCoreClasslists.each { cl -> +- def outputFile = "${outputDir}/${jalviewjsJalviewTemplateName}_${cl.name}.html" +- cl['outputfile'] = outputFile +- outputFiles += outputFile +- } +- +- doFirst { +- jalviewjsCoreClasslists.each { cl -> +- jalviewjsPublishCoreTemplate(cl.name, jalviewjsJalviewTemplateName, inputFile, cl.outputfile) +- } +- } +- inputs.file(inputFile) +- outputs.files(outputFiles) +-} +- +- +-task jalviewjsSyncCore (type: Sync) { +- dependsOn jalviewjsBuildAllCores +- dependsOn jalviewjsPublishCoreTemplates +- 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 +-} +- +- +-// this Copy version of TransferSiteJs will delete anything else in the target dir +-task jalviewjsCopyTransferSiteJs(type: Copy) { +- dependsOn jalviewjsTranspile +- from "${jalviewDir}/${jalviewjsTransferSiteJsDir}" +- into "${jalviewDir}/${jalviewjsSiteDir}" +-} +- +- +-// this Sync version of TransferSite is used by buildship to keep the website automatically up to date when a file changes +-task jalviewjsSyncTransferSiteJs(type: Sync) { +- from "${jalviewDir}/${jalviewjsTransferSiteJsDir}" +- include "**/*.*" +- into "${jalviewDir}/${jalviewjsSiteDir}" +- preserve { +- include "**" +- } +-} +- +- +-jalviewjsSyncAllLibs.mustRunAfter jalviewjsCopyTransferSiteJs +-jalviewjsSyncResources.mustRunAfter jalviewjsCopyTransferSiteJs +-jalviewjsSyncSiteResources.mustRunAfter jalviewjsCopyTransferSiteJs +-jalviewjsSyncBuildProperties.mustRunAfter jalviewjsCopyTransferSiteJs +- +-jalviewjsSyncAllLibs.mustRunAfter jalviewjsSyncTransferSiteJs +-jalviewjsSyncResources.mustRunAfter jalviewjsSyncTransferSiteJs +-jalviewjsSyncSiteResources.mustRunAfter jalviewjsSyncTransferSiteJs +-jalviewjsSyncBuildProperties.mustRunAfter jalviewjsSyncTransferSiteJs +- +- +-task jalviewjsPrepareSite { +- group "JalviewJS" +- description "Prepares the website folder including unzipping files and copying resources" +- dependsOn jalviewjsSyncAllLibs +- dependsOn jalviewjsSyncResources +- dependsOn jalviewjsSyncSiteResources +- dependsOn jalviewjsSyncBuildProperties +- dependsOn jalviewjsSyncCore +-} +- +- +-task jalviewjsBuildSite { +- group "JalviewJS" +- description "Builds the whole website including transpiled code" +- dependsOn jalviewjsCopyTransferSiteJs +- dependsOn jalviewjsPrepareSite +-} +- +- +-task cleanJalviewjsTransferSite { +- doFirst { +- delete "${jalviewDir}/${jalviewjsTransferSiteJsDir}" +- delete "${jalviewDir}/${jalviewjsTransferSiteLibDir}" +- delete "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}" +- delete "${jalviewDir}/${jalviewjsTransferSiteCoreDir}" +- } +-} +- +- +-task cleanJalviewjsSite { +- dependsOn cleanJalviewjsTransferSite +- doFirst { +- delete "${jalviewDir}/${jalviewjsSiteDir}" +- } +-} +- +- +-task jalviewjsSiteTar(type: Tar) { +- group "JalviewJS" +- description "Creates a tar.gz file for the website" +- dependsOn jalviewjsBuildSite +- def outputFilename = "jalviewjs-site-${JALVIEW_VERSION}.tar.gz" +- archiveFileName = outputFilename +- +- compression Compression.GZIP +- +- from "${jalviewDir}/${jalviewjsSiteDir}" +- into jalviewjs_site_dir // this is inside the tar file +- +- inputs.dir("${jalviewDir}/${jalviewjsSiteDir}") +-} +- +- +-task jalviewjsServer { +- group "JalviewJS" +- 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." +- def htmlFile = "${jalviewDirAbsolutePath}/${filename}" +- doLast { +- +- def factory +- try { +- def f = Class.forName("org.gradle.plugins.javascript.envjs.http.simple.SimpleHttpFileServerFactory") +- factory = f.newInstance() +- } catch (ClassNotFoundException e) { +- throw new GradleException("Unable to create SimpleHttpFileServerFactory") +- } +- def port = Integer.valueOf(jalviewjs_server_port) +- def start = port +- def running = false +- def url +- def jalviewjsServer +- while(port < start+1000 && !running) { +- try { +- def doc_root = new File("${jalviewDirAbsolutePath}/${jalviewjsSiteDir}") +- jalviewjsServer = factory.start(doc_root, port) +- running = true +- url = jalviewjsServer.getResourceUrl(jalviewjs_server_resource) +- println("SERVER STARTED with document root ${doc_root}.") +- println("Go to "+url+" . Run gradle --stop to stop (kills all gradle daemons).") +- println("For debug: "+url+"?j2sdebug") +- println("For verbose: "+url+"?j2sverbose") +- } catch (Exception e) { +- port++; +- } +- } +- def htmlText = """ +-

JalviewJS Test. <${url}>

+-

JalviewJS Test with debug. <${url}?j2sdebug>

+-

JalviewJS Test with verbose. <${url}?j2sdebug>

+- """ +- jalviewjsCoreClasslists.each { cl -> +- def urlcore = jalviewjsServer.getResourceUrl(file(cl.outputfile).getName()) +- htmlText += """ +-

${jalviewjsJalviewTemplateName} [core ${cl.name}]. <${urlcore}>

+- """ +- println("For core ${cl.name}: "+urlcore) +- } +- +- file(htmlFile).text = htmlText +- } +- +- outputs.file(htmlFile) +- outputs.upToDateWhen({false}) +-} +- +- +-task cleanJalviewjsAll { +- group "JalviewJS" +- description "Delete all configuration and build artifacts to do with JalviewJS build" +- dependsOn cleanJalviewjsSite +- dependsOn jalviewjsEclipsePaths +- +- doFirst { +- delete "${jalviewDir}/${jalviewjsBuildDir}" +- delete "${jalviewDir}/${eclipse_bin_dir}" +- if (eclipseWorkspace != null && file(eclipseWorkspace.getAbsolutePath()+"/.metadata").exists()) { +- delete file(eclipseWorkspace.getAbsolutePath()+"/.metadata") +- } +- delete jalviewjsJ2sAltSettingsFileName +- } +- +- outputs.upToDateWhen( { false } ) +-} +- +- +-task jalviewjsIDE_checkJ2sPlugin { +- group "00 JalviewJS in Eclipse" +- description "Compare the swingjs/net.sf.j2s.core(-j11)?.jar file with the Eclipse IDE's plugin version (found in the 'dropins' dir)" +- +- doFirst { +- def j2sPlugin = string("${jalviewDir}/${jalviewjsJ2sPlugin}") +- def j2sPluginFile = file(j2sPlugin) +- def eclipseHome = System.properties["eclipse.home.location"] +- if (eclipseHome == null || ! IN_ECLIPSE) { +- throw new StopExecutionException("Cannot find running Eclipse home from System.properties['eclipse.home.location']. Skipping J2S Plugin Check.") +- } +- def eclipseJ2sPluginDirs = [ "${eclipseHome}/dropins" ] +- def altPluginsDir = System.properties["org.eclipse.equinox.p2.reconciler.dropins.directory"] +- if (altPluginsDir != null && file(altPluginsDir).exists()) { +- eclipseJ2sPluginDirs += altPluginsDir +- } +- def foundPlugin = false +- def j2sPluginFileName = j2sPluginFile.getName() +- def eclipseJ2sPlugin +- def eclipseJ2sPluginFile +- eclipseJ2sPluginDirs.any { dir -> +- eclipseJ2sPlugin = "${dir}/${j2sPluginFileName}" +- eclipseJ2sPluginFile = file(eclipseJ2sPlugin) +- if (eclipseJ2sPluginFile.exists()) { +- foundPlugin = true +- return true +- } +- } +- if (!foundPlugin) { +- def msg = "Eclipse J2S Plugin is not installed (could not find '${j2sPluginFileName}' in\n"+eclipseJ2sPluginDirs.join("\n")+"\n)\nTry running task jalviewjsIDE_copyJ2sPlugin" +- System.err.println(msg) +- throw new StopExecutionException(msg) +- } +- +- def digest = MessageDigest.getInstance("MD5") +- +- digest.update(j2sPluginFile.text.bytes) +- def j2sPluginMd5 = new BigInteger(1, digest.digest()).toString(16).padLeft(32, '0') +- +- digest.update(eclipseJ2sPluginFile.text.bytes) +- def eclipseJ2sPluginMd5 = new BigInteger(1, digest.digest()).toString(16).padLeft(32, '0') +- +- if (j2sPluginMd5 != eclipseJ2sPluginMd5) { +- def msg = "WARNING! Eclipse J2S Plugin '${eclipseJ2sPlugin}' is different to this commit's version '${j2sPlugin}'" +- System.err.println(msg) +- throw new StopExecutionException(msg) +- } else { +- def msg = "Eclipse J2S Plugin '${eclipseJ2sPlugin}' is the same as '${j2sPlugin}' (this is good)" +- println(msg) +- } +- } +-} +- +-task jalviewjsIDE_copyJ2sPlugin { +- group "00 JalviewJS in Eclipse" +- description "Copy the swingjs/net.sf.j2s.core(-j11)?.jar file into the Eclipse IDE's 'dropins' dir" +- +- doFirst { +- def j2sPlugin = string("${jalviewDir}/${jalviewjsJ2sPlugin}") +- def j2sPluginFile = file(j2sPlugin) +- def eclipseHome = System.properties["eclipse.home.location"] +- if (eclipseHome == null || ! IN_ECLIPSE) { +- throw new StopExecutionException("Cannot find running Eclipse home from System.properties['eclipse.home.location']. NOT copying J2S Plugin.") +- } +- def eclipseJ2sPlugin = "${eclipseHome}/dropins/${j2sPluginFile.getName()}" +- def eclipseJ2sPluginFile = file(eclipseJ2sPlugin) +- def msg = "WARNING! Copying this commit's j2s plugin '${j2sPlugin}' to Eclipse J2S Plugin '${eclipseJ2sPlugin}'\n* May require an Eclipse restart" +- System.err.println(msg) +- copy { +- from j2sPlugin +- eclipseJ2sPluginFile.getParentFile().mkdirs() +- into eclipseJ2sPluginFile.getParent() +- } +- } +-} +- +- +-task jalviewjsIDE_j2sFile { +- group "00 JalviewJS in Eclipse" +- description "Creates the .j2s file" +- dependsOn jalviewjsCreateJ2sSettings +-} +- +- +-task jalviewjsIDE_SyncCore { +- group "00 JalviewJS in Eclipse" +- description "Build the core js lib closures listed in the classlists dir and publish core html from template" +- dependsOn jalviewjsSyncCore +-} +- +- +-task jalviewjsIDE_SyncSiteAll { +- dependsOn jalviewjsSyncAllLibs +- dependsOn jalviewjsSyncResources +- dependsOn jalviewjsSyncSiteResources +- dependsOn jalviewjsSyncBuildProperties +-} +- +- +-cleanJalviewjsTransferSite.mustRunAfter jalviewjsIDE_SyncSiteAll +- +- +-task jalviewjsIDE_PrepareSite { +- group "00 JalviewJS in Eclipse" +- description "Sync libs and resources to site dir, but not closure cores" +- +- dependsOn jalviewjsIDE_SyncSiteAll +- //dependsOn cleanJalviewjsTransferSite // not sure why this clean is here -- will slow down a re-run of this task +-} +- +- +-task jalviewjsIDE_AssembleSite { +- group "00 JalviewJS in Eclipse" +- description "Assembles unzipped supporting zipfiles, resources, site resources and closure cores into the Eclipse transpiled site" +- dependsOn jalviewjsPrepareSite +-} +- +- +-task jalviewjsIDE_SiteClean { +- group "00 JalviewJS in Eclipse" +- description "Deletes the Eclipse transpiled site" +- dependsOn cleanJalviewjsSite +-} +- +- +-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 or gradle refresh +-task eclipseSynchronizationTask { +- //dependsOn eclipseSetup +- dependsOn createBuildProperties +- if (J2S_ENABLED) { +- dependsOn jalviewjsIDE_j2sFile +- dependsOn jalviewjsIDE_checkJ2sPlugin +- dependsOn jalviewjsIDE_PrepareSite +- } +-} +- +- +-// buildship runs this at build time or project refresh +-task eclipseAutoBuildTask { +- //dependsOn jalviewjsIDE_checkJ2sPlugin +- //dependsOn jalviewjsIDE_PrepareSite ++ outputs.file("${outputDir}/${archiveFileName}") + } + +- +-task jalviewjs { +- group "JalviewJS" +- description "Build the site" +- dependsOn jalviewjsBuildSite +-}