From: Jim Procter Date: Mon, 13 Dec 2021 16:54:57 +0000 (+0000) Subject: JAL-3746 update Jalview 2.12 branch from build.gradle for 2.11.2 X-Git-Url: http://source.jalview.org/gitweb/?p=jalview.git;a=commitdiff_plain;h=e68e9b25ed87ed716ea1f348305d40861d6fa911 JAL-3746 update Jalview 2.12 branch from build.gradle for 2.11.2 --- diff --git a/build.gradle b/build.gradle index 180d4ad..17407a9 100644 --- a/build.gradle +++ b/build.gradle @@ -40,8 +40,9 @@ plugins { 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.4' + 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 { @@ -51,29 +52,19 @@ repositories { } + // in ext the values are cast to Object. Ensure string values are cast as String (and not GStringImpl) for later use def string(Object o) { return o == null ? "" : o.toString() } - -ext { - jalviewDirAbsolutePath = file(jalviewDir).getAbsolutePath() - jalviewDirRelativePath = jalviewDir - - // 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(String propsFileName, boolean output = false) { + 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()) { + println("Using properties from file '${propsFileName}'") try { def p = new Properties() def localPropsFIS = new FileInputStream(propsFile) @@ -81,18 +72,43 @@ ext { localPropsFIS.close() p.each { key, val -> - def oldval = findProperty(key) - setProperty(key, val) - if (oldval != null) { - println("Overriding property '${key}' ('${oldval}') with ${file(propsFile).getName()} value '${val}'") + def oldval + if (project.hasProperty(key)) { + oldval = project.findProperty(key) + project.setProperty(key, val) + if (output) { + 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) + if (output) { + println("Setting ext property '${key}' with ${file(propsFile).getName()}s value '${val}'") + } } } } 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 "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 + 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 @@ -146,6 +162,9 @@ ext { } */ + // datestamp + buildDate = new Date().format("yyyyMMdd") + // essentials bareSourceDir = string(source_dir) sourceDir = string("${jalviewDir}/${bareSourceDir}") @@ -166,29 +185,32 @@ ext { //cloverTestClassesDir = cloverClassesDir cloverDb = string("${cloverBuildDir}/clover.db") - resourceClassesDir = useClover ? cloverClassesDir : classesDir - 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 - 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 - buildProperties = string("${resourceDir}/${build_properties_file}") + getdownImagesDir = string("${jalviewDir}/${getdown_images_dir}") + 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 - install4jDSStore = "DS_Store-NON-RELEASE" - install4jDMGBackgroundImage = "jalview_dmg_background-NON-RELEASE.png" + install4jDMGDSStore = "${install4j_images_dir}/${install4j_dmg_ds_store}" + install4jDMGBackgroundImage = "${install4j_images_dir}/${install4j_dmg_background}" install4jInstallerName = "${jalview_name} Non-Release Installer" - install4jExecutableName = jalview_name.replaceAll("[^\\w]+", "_").toLowerCase() + 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": @@ -204,12 +226,10 @@ ext { install4jExtraScheme = "jalviewb" break - case "RELEASE": + case [ "RELEASE", "JALVIEWJS-RELEASE" ]: getdownAppDistDir = getdown_app_dir_release reportRsyncCommand = true install4jSuffix = "" - install4jDSStore = "DS_Store" - install4jDMGBackgroundImage = "jalview_dmg_background.png" install4jInstallerName = "${jalview_name} Installer" break @@ -247,13 +267,11 @@ ext { case "DEVELOP": reportRsyncCommand = true - + getdownSetAppBaseProperty = true // DEVELOP-RELEASE is usually associated with a Jalview release series so set the version - JALVIEW_VERSION=JALVIEW_VERSION+"-develop" + JALVIEW_VERSION=JALVIEW_VERSION+"-d${buildDate}" install4jSuffix = "Develop" - install4jDSStore = "DS_Store-DEVELOP" - install4jDMGBackgroundImage = "jalview_dmg_background-DEVELOP.png" install4jExtraScheme = "jalviewd" install4jInstallerName = "${jalview_name} Develop Installer" break @@ -267,8 +285,6 @@ ext { } JALVIEW_VERSION = JALVIEW_VERSION+"-test" install4jSuffix = "Test" - install4jDSStore = "DS_Store-TEST-RELEASE" - install4jDMGBackgroundImage = "jalview_dmg_background-TEST.png" install4jExtraScheme = "jalviewt" install4jInstallerName = "${jalview_name} Test Installer" break @@ -292,13 +308,11 @@ ext { } JALVIEW_VERSION = "TEST" install4jSuffix = "Test-Local" - install4jDSStore = "DS_Store-TEST-RELEASE" - install4jDMGBackgroundImage = "jalview_dmg_background-TEST.png" install4jExtraScheme = "jalviewt" install4jInstallerName = "${jalview_name} Test Installer" break - case "LOCAL": + case [ "LOCAL", "JALVIEWJS" ]: JALVIEW_VERSION = "TEST" getdownAppBase = file(getdownWebsiteDir).toURI().toString() getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher_local}") @@ -312,7 +326,16 @@ 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 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 @@ -348,6 +371,7 @@ ext { .replaceAll("_*-_*", "-") // collapse _-_ .toLowerCase() + getdownWrapperLink = install4jUnixApplicationFolder // e.g. "jalview_local" getdownAppDir = string("${getdownWebsiteDir}/${getdownAppDistDir}") //getdownJ11libDir = "${getdownWebsiteDir}/${getdown_j11lib_dir}" getdownResourceDir = string("${getdownWebsiteDir}/${getdown_resource_dir}") @@ -358,8 +382,9 @@ ext { modules_compileClasspath = fileTree(dir: "${jalviewDir}/${j11modDir}", include: ["*.jar"]) modules_runtimeClasspath = modules_compileClasspath */ - gitHash = string("") - gitBranch = string("") + def details = versionDetails() + gitHash = details.gitHash + gitBranch = details.branchName println("Using a ${CHANNEL} profile.") @@ -395,16 +420,16 @@ ext { '--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 + } else if (JAVA_VERSION.equals("17")) { + JAVA_INTEGER_VERSION = string("17") + libDir = j17libDir + libDistDir = j17libDir + compile_source_compatibility = 17 + compile_target_compatibility = 17 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") + eclipseJavaRuntimeName = string("JavaSE-17") /* compile without modules -- using classpath libraries additional_compiler_args += [ '--module-path', modules_compileClasspath.asPath, @@ -437,12 +462,18 @@ ext { install4jHomeDir = System.getProperty("user.home") + install4jHomeDir.substring(1) } + resourceBuildDir = string("${buildDir}/resources") + resourcesBuildDir = string("${resourceBuildDir}/resources_build") + helpBuildDir = string("${resourceBuildDir}/help_build") + docBuildDir = string("${resourceBuildDir}/doc_build") - + if (buildProperties == null) { + buildProperties = string("${resourcesBuildDir}/${build_properties_file}") + } buildingHTML = string("${jalviewDir}/${doc_dir}/building.html") - helpFile = string("${resourceClassesDir}/${help_dir}/help.jhm") helpParentDir = string("${jalviewDir}/${help_parent_dir}") helpSourceDir = string("${helpParentDir}/${help_dir}") + helpFile = string("${helpBuildDir}/${help_dir}/help.jhm") relativeBuildDir = file(jalviewDirAbsolutePath).toPath().relativize(buildDir.toPath()) @@ -457,6 +488,7 @@ ext { 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}") @@ -480,16 +512,14 @@ sourceSets { } resources { - srcDirs resourceDir - srcDirs += helpParentDir + srcDirs = [ resourcesBuildDir, docBuildDir, helpBuildDir ] } - jar.destinationDir = file("${jalviewDir}/${package_dir}") - compileClasspath = files(sourceSets.main.java.outputDir) compileClasspath += fileTree(dir: "${jalviewDir}/${libDir}", include: ["*.jar"]) runtimeClasspath = compileClasspath + runtimeClasspath += files(sourceSets.main.resources.srcDirs) } clover { @@ -526,6 +556,7 @@ sourceSets { compileClasspath += fileTree(dir: "${jalviewDir}/${utils_dir}/testnglibs", include: ["**/*.jar"]) runtimeClasspath = compileClasspath + runtimeClasspath += files(sourceSets.test.resources.srcDirs) } } @@ -546,14 +577,12 @@ eclipse { classpath { //defaultOutputDir = sourceSets.main.java.outputDir - def removeThese = [] - configurations.each{ - if (it.isCanBeResolved()) { - removeThese += it + configurations.each{ c-> + if (c.isCanBeResolved()) { + minusConfigurations += [c] } } - minusConfigurations += removeThese plusConfigurations = [ ] file { @@ -1003,64 +1032,6 @@ def getDate(format) { } -task setGitVals { - - doFirst { - def hashStdOut = new ByteArrayOutputStream() - def resultHash = exec { - commandLine "git", "rev-parse", "--short", "HEAD" - standardOutput = hashStdOut - ignoreExitValue true - } - - def branchStdOut = new ByteArrayOutputStream() - def resultBranch = exec { - commandLine "git", "rev-parse", "--abbrev-ref", "HEAD" - standardOutput = branchStdOut - ignoreExitValue true - } - - gitHash = resultHash.getExitValue() == 0 ? hashStdOut.toString().trim() : "NO_GIT_COMMITID_FOUND" - gitBranch = resultBranch.getExitValue() == 0 ? branchStdOut.toString().trim() : "NO_GIT_BRANCH_FOUND" - } - - outputs.upToDateWhen { false } -} - - -task createBuildProperties(type: WriteProperties) { - group = "build" - description = "Create the ${buildProperties} file" - - dependsOn setGitVals - inputs.dir(sourceDir) - inputs.dir(resourceDir) - file(buildProperties).getParentFile().mkdirs() - outputFile (buildProperties) - // taking time specific comment out to allow better incremental builds - comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd HH:mm:ss") - //comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd") - property "BUILD_DATE", getDate("HH:mm:ss dd MMMM yyyy") - property "VERSION", JALVIEW_VERSION - property "INSTALLATION", INSTALLATION+" git-commit:"+gitHash+" ["+gitBranch+"]" - outputs.file(outputFile) -} - - -clean { - doFirst { - delete buildProperties - } -} - - -task cleanBuildingHTML(type: Delete) { - doFirst { - delete buildingHTML - } -} - - def convertMdToHtml (FileTree mdFiles, File cssFile) { MutableDataSet options = new MutableDataSet() @@ -1134,14 +1105,45 @@ def convertMdToHtml (FileTree mdFiles, File cssFile) { def htmlFilePath = mdFile.getPath().replaceAll(/\..*?$/, ".html") def htmlFile = file(htmlFilePath) + println("Creating ${htmlFilePath}") htmlFile.text = htmlText } } +task copyDocs(type: Copy) { + def inputDir = "${jalviewDir}/${doc_dir}" + def outputDir = "${docBuildDir}/${doc_dir}" + from(inputDir) { + include('**/*.txt') + include('**/*.md') + include('**/*.html') + include('**/*.xml') + filter(ReplaceTokens, + beginToken: '$$', + endToken: '$$', + tokens: [ + 'Version-Rel': JALVIEW_VERSION, + 'Year-Rel': getDate("yyyy") + ] + ) + } + from(inputDir) { + exclude('**/*.txt') + exclude('**/*.md') + exclude('**/*.html') + exclude('**/*.xml') + } + into outputDir + + inputs.dir(inputDir) + outputs.dir(outputDir) +} + + task convertMdFiles { - dependsOn cleanBuildingHTML - def mdFiles = fileTree(dir: "${jalviewDir}/${doc_dir}", include: "*.md") + dependsOn copyDocs + def mdFiles = fileTree(dir: docBuildDir, include: "**/*.md") def cssFile = file("${jalviewDir}/${flexmark_css}") doLast { @@ -1160,21 +1162,16 @@ task convertMdFiles { } -task syncDocs(type: Sync) { - dependsOn convertMdFiles - def syncDir = "${classesDir}/${doc_dir}" - from fileTree("${jalviewDir}/${doc_dir}") - into syncDir -} - - task copyHelp(type: Copy) { def inputDir = helpSourceDir - def outputDir = "${resourceClassesDir}/${help_dir}" + def outputDir = "${helpBuildDir}/${help_dir}" from(inputDir) { - exclude '**/*.gif' - exclude '**/*.jpg' - exclude '**/*.png' + include('**/*.txt') + include('**/*.md') + include('**/*.html') + include('**/*.hs') + include('**/*.xml') + include('**/*.jhm') filter(ReplaceTokens, beginToken: '$$', endToken: '$$', @@ -1185,9 +1182,12 @@ task copyHelp(type: Copy) { ) } from(inputDir) { - include '**/*.gif' - include '**/*.jpg' - include '**/*.png' + exclude('**/*.txt') + exclude('**/*.md') + exclude('**/*.html') + exclude('**/*.hs') + exclude('**/*.xml') + exclude('**/*.jhm') } into outputDir @@ -1197,40 +1197,121 @@ task copyHelp(type: Copy) { } -task syncLib(type: Sync) { - def syncDir = "${resourceClassesDir}/${libDistDir}" - from fileTree("${jalviewDir}/${libDistDir}") - into syncDir +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) { + include('**/*.txt') + include('**/*.md') + include('**/*.html') + include('**/*.xml') + filter(ReplaceTokens, + beginToken: '$$', + endToken: '$$', + tokens: [ + 'Version-Rel': JALVIEW_VERSION, + 'Year-Rel': getDate("yyyy") + ] + ) + } + from(inputDir) { + exclude('**/*.txt') + exclude('**/*.md') + exclude('**/*.html') + exclude('**/*.xml') + } + into outputDir + + inputs.dir(inputDir) + outputs.dir(outputDir) } +task copyChannelResources(type: Copy) { + dependsOn copyResources + group = "build" + description = "Copy the channel resources dir to the build resources area" -task syncResources(type: Sync) { - dependsOn createBuildProperties - from resourceDir - include "**/*.*" - into "${resourceClassesDir}" - preserve { - include "**" + def inputDir = "${channelDir}/${resource_dir}" + def outputDir = resourcesBuildDir + from inputDir + into outputDir + + inputs.dir(inputDir) + outputs.dir(outputDir) +} + +task createBuildProperties(type: WriteProperties) { + dependsOn copyResources + group = "build" + description = "Create the ${buildProperties} file" + + inputs.dir(sourceDir) + inputs.dir(resourcesBuildDir) + outputFile (buildProperties) + // taking time specific comment out to allow better incremental builds + comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd HH:mm:ss") + //comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd") + property "BUILD_DATE", getDate("HH:mm:ss dd MMMM yyyy") + property "VERSION", JALVIEW_VERSION + property "INSTALLATION", INSTALLATION+" git-commit:"+gitHash+" ["+gitBranch+"]" + if (getdownSetAppBaseProperty) { + property "GETDOWNAPPBASE", getdownAppBase + property "GETDOWNAPPDISTDIR", getdownAppDistDir } + outputs.file(outputFile) } +task buildIndices(type: JavaExec) { + dependsOn copyHelp + classpath = sourceSets.main.compileClasspath + main = "com.sun.java.help.search.Indexer" + workingDir = "${helpBuildDir}/${help_dir}" + def argDir = "html" + args = [ argDir ] + inputs.dir("${workingDir}/${argDir}") + + outputs.dir("${classesDir}/doc") + outputs.dir("${classesDir}/help") + outputs.file("${workingDir}/JavaHelpSearch/DOCS") + outputs.file("${workingDir}/JavaHelpSearch/DOCS.TAB") + outputs.file("${workingDir}/JavaHelpSearch/OFFSETS") + outputs.file("${workingDir}/JavaHelpSearch/POSITIONS") + outputs.file("${workingDir}/JavaHelpSearch/SCHEMA") + outputs.file("${workingDir}/JavaHelpSearch/TMAP") +} + +task buildResources { + dependsOn copyResources + dependsOn copyChannelResources + dependsOn createBuildProperties +} + task prepare { - dependsOn syncResources - dependsOn syncDocs + dependsOn buildResources + dependsOn copyDocs dependsOn copyHelp + dependsOn convertMdFiles + dependsOn buildIndices } +compileJava.dependsOn prepare +run.dependsOn compileJava +//run.dependsOn prepare + + //testReportDirName = "test-reports" // note that test workingDir will be $jalviewDir test { dependsOn prepare - //dependsOn compileJava ////? DELETE if (useClover) { dependsOn cloverClasses } else { //? - dependsOn compileJava //? + dependsOn compileJava //? } useTestNG() { @@ -1243,7 +1324,16 @@ test { maxHeapSize = "1024m" workingDir = jalviewDir - //systemProperties 'clover.jar' System.properties.clover.jar + def testLaf = project.findProperty("test_laf") + if (testLaf != null) { + println("Setting Test LaF to '${testLaf}'") + systemProperty "laf", testLaf + } + def testHiDPIScale = project.findProperty("test_HiDPIScale") + if (testHiDPIScale != null) { + println("Setting Test HiDPI Scale to '${testHiDPIScale}'") + systemProperty "sun.java2d.uiScale", testHiDPIScale + } sourceCompatibility = compile_source_compatibility targetCompatibility = compile_target_compatibility jvmArgs += additional_compiler_args @@ -1256,26 +1346,6 @@ test { } -task buildIndices(type: JavaExec) { - dependsOn copyHelp - classpath = sourceSets.main.compileClasspath - main = "com.sun.java.help.search.Indexer" - workingDir = "${classesDir}/${help_dir}" - def argDir = "html" - args = [ argDir ] - inputs.dir("${workingDir}/${argDir}") - - outputs.dir("${classesDir}/doc") - outputs.dir("${classesDir}/help") - outputs.file("${workingDir}/JavaHelpSearch/DOCS") - outputs.file("${workingDir}/JavaHelpSearch/DOCS.TAB") - outputs.file("${workingDir}/JavaHelpSearch/OFFSETS") - outputs.file("${workingDir}/JavaHelpSearch/POSITIONS") - outputs.file("${workingDir}/JavaHelpSearch/SCHEMA") - outputs.file("${workingDir}/JavaHelpSearch/TMAP") -} - - task compileLinkCheck(type: JavaCompile) { options.fork = true classpath = files("${jalviewDir}/${utils_dir}") @@ -1290,30 +1360,31 @@ task compileLinkCheck(type: JavaCompile) { task linkCheck(type: JavaExec) { - dependsOn prepare, compileLinkCheck + dependsOn prepare + dependsOn compileLinkCheck def helpLinksCheckerOutFile = file("${jalviewDir}/${utils_dir}/HelpLinksChecker.out") classpath = files("${jalviewDir}/${utils_dir}") main = "HelpLinksChecker" workingDir = jalviewDir - args = [ "${classesDir}/${help_dir}", "-nointernet" ] + args = [ "${helpBuildDir}/${help_dir}", "-nointernet" ] def outFOS = new FileOutputStream(helpLinksCheckerOutFile, false) // false == don't append - def errFOS = outFOS standardOutput = new org.apache.tools.ant.util.TeeOutputStream( outFOS, - standardOutput) + System.out) errorOutput = new org.apache.tools.ant.util.TeeOutputStream( outFOS, - errorOutput) + System.err) - inputs.dir("${classesDir}/${help_dir}") + inputs.dir(helpBuildDir) outputs.file(helpLinksCheckerOutFile) } + // import the pubhtmlhelp target ant.properties.basedir = "${jalviewDir}" -ant.properties.helpBuildDir = "${jalviewDirAbsolutePath}/${classes_dir}/${help_dir}" +ant.properties.helpBuildDir = "${helpBuildDir}/${help_dir}" ant.importBuild "${utils_dir}/publishHelp.xml" @@ -1325,19 +1396,22 @@ task cleanPackageDir(type: Delete) { jar { + dependsOn prepare dependsOn linkCheck - dependsOn buildIndices - dependsOn createBuildProperties manifest { attributes "Main-Class": main_class, "Permissions": "all-permissions", - "Application-Name": "Jalview Desktop", - "Codebase": application_codebase + "Application-Name": install4jApplicationName, + "Codebase": application_codebase, + "Implementation-Version": JALVIEW_VERSION } - destinationDir = file("${jalviewDir}/${package_dir}") - archiveName = rootProject.name+".jar" + def outputDir = "${jalviewDir}/${package_dir}" + destinationDirectory = file(outputDir) + archiveFileName = rootProject.name+".jar" + duplicatesStrategy "EXCLUDE" + exclude "cache*/**" exclude "*.jar" @@ -1345,8 +1419,11 @@ jar { exclude "**/*.jar" exclude "**/*.jar.*" - inputs.dir(classesDir) - outputs.file("${jalviewDir}/${package_dir}/${archiveName}") + inputs.dir(sourceSets.main.java.outputDir) + sourceSets.main.resources.srcDirs.each{ dir -> + inputs.dir(dir) + } + outputs.file("${outputDir}/${archiveFileName}") } @@ -1358,10 +1435,11 @@ task copyJars(type: Copy) { // doing a Sync instead of Copy as Copy doesn't deal with "outputs" very well task syncJars(type: Sync) { + dependsOn jar from fileTree(dir: "${jalviewDir}/${libDistDir}", include: "**/*.jar").files into "${jalviewDir}/${package_dir}" preserve { - include jar.archiveName + include jar.archiveFileName.getOrNull() } } @@ -1385,6 +1463,7 @@ task cleanDist { dependsOn clean } + shadowJar { group = "distribution" description = "Create a single jar file with all dependency libraries merged. Can be run with java -jar" @@ -1395,8 +1474,12 @@ shadowJar { include("*.jar") } manifest { - attributes 'Implementation-Version': JALVIEW_VERSION + attributes "Implementation-Version": JALVIEW_VERSION, + "Application-Name": install4jApplicationName } + + duplicatesStrategy "INCLUDE" + mainClassName = shadow_jar_main_class mergeServiceFiles() classifier = "all-"+JALVIEW_VERSION+"-j"+JAVA_VERSION @@ -1423,7 +1506,7 @@ task getdownWebsite() { copy { from buildProperties - rename(build_properties_file, getdown_build_properties) + rename(file(buildProperties).getName(), getdown_build_properties) into getdownAppDir } getdownWebsiteResourceFilenames += "${getdownAppDistDir}/${getdown_build_properties}" @@ -1439,6 +1522,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) @@ -1487,6 +1578,18 @@ task getdownWebsite() { 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 -> @@ -1527,6 +1630,11 @@ task getdownWebsite() { //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) @@ -1535,12 +1643,14 @@ task getdownWebsite() { 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) { @@ -1549,23 +1659,26 @@ task getdownWebsite() { 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 "${getdownWebsiteDir}/${getdown_build_properties}" + 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 @@ -1577,6 +1690,7 @@ task getdownWebsite() { into getdownFilesDir } + // and ./resources (not all downloaded by getdown) copy { from getdownResourceDir into "${getdownFilesDir}/${getdown_resource_dir}" @@ -1741,12 +1855,6 @@ task copyInstall4jTemplate { } } - // remove the "Uninstall Old Jalview (optional)" symlink from DMG for non-release DS_Stores - if (! (CHANNEL == "RELEASE" || CHANNEL == "TEST-RELEASE" ) ) { - def symlink = install4jConfigXml.'**'.topLevelFiles.symlink.find { sl -> sl.'@name' == "Uninstall Old Jalview (optional).app" } - symlink.parent().remove(symlink) - } - // write install4j file install4jConfFile.text = XmlUtil.serialize(install4jConfigXml) } @@ -1763,7 +1871,6 @@ clean { task installers(type: com.install4j.gradle.Install4jTask) { group = "distribution" description = "Create the install4j installers" - dependsOn setGitVals dependsOn getdown dependsOn copyInstall4jTemplate @@ -1788,6 +1895,8 @@ task installers(type: com.install4j.gradle.Install4jTask) { '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, @@ -1807,8 +1916,12 @@ task installers(type: com.install4j.gradle.Install4jTask) { 'BUNDLE_ID': install4jBundleId, 'INTERNAL_ID': install4jInternalId, 'WINDOWS_APPLICATION_ID': install4jWinApplicationId, - 'MACOS_DS_STORE': install4jDSStore, + '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, @@ -1824,6 +1937,11 @@ 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, + 'BACKGROUND': install4jBackground, + ] //println("INSTALL4J VARIABLES:") @@ -1835,15 +1953,25 @@ task installers(type: com.install4j.gradle.Install4jTask) { 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) @@ -1864,17 +1992,13 @@ spotless { 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" - // cater for buildship < 3.1 [3.0.1 is max version in eclipse 2018-09] - try { - archiveFileName = outputFileName - } catch (Exception e) { - archiveName = outputFileName - } + archiveFileName = outputFileName compression Compression.GZIP @@ -1957,6 +2081,15 @@ task sourceDist(type: Tar) { // 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+"]") + }) + } + } @@ -1964,7 +2097,7 @@ task helppages { dependsOn copyHelp dependsOn pubhtmlhelp - inputs.dir("${classesDir}/${help_dir}") + inputs.dir("${helpBuildDir}/${help_dir}") outputs.dir("${buildDir}/distributions/${help_dir}") } @@ -2266,13 +2399,19 @@ task jalviewjsSyncAllLibs (type: Sync) { preserve { include "**" } + + // should this be exclude really ? + duplicatesStrategy "INCLUDE" + outputs.files outputFiles inputs.files inputFiles } task jalviewjsSyncResources (type: Sync) { - def inputFiles = fileTree(dir: resourceDir) + dependsOn buildResources + + def inputFiles = fileTree(dir: resourcesBuildDir) def outputDir = "${jalviewDir}/${jalviewjsSiteDir}/${jalviewjs_j2s_subdir}" from inputFiles @@ -2418,12 +2557,12 @@ DEBUG: ${eclipseDebug} new org.apache.tools.ant.util.TeeOutputStream( logOutFOS, stdout), - standardOutput) + System.out) errorOutput = new org.apache.tools.ant.util.TeeOutputStream( new org.apache.tools.ant.util.TeeOutputStream( logErrFOS, stderr), - errorOutput) + System.err) } else { standardOutput = new org.apache.tools.ant.util.TeeOutputStream( logOutFOS, @@ -2511,7 +2650,7 @@ def jalviewjsCallCore(String name, FileCollection list, String prefixFile, Strin new org.apache.tools.ant.util.TeeOutputStream( logErrFOS, stderr), - errorOutput) + System.err) } else { standardOutput = new org.apache.tools.ant.util.TeeOutputStream( logOutFOS, @@ -2555,6 +2694,10 @@ task jalviewjsBuildAllCores { ] } + // _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 { @@ -2577,8 +2720,8 @@ task jalviewjsBuildAllCores { } def list = fileTree(dir: j2sDir, includes: filelist) - def jsfile = "${outputDir}/core_${name}.js" - def zjsfile = "${outputDir}/core_${name}.z.js" + def jsfile = "${outputDir}/core${name}.js" + def zjsfile = "${outputDir}/core${name}.z.js" jalviewjsCoreClasslists += [ 'jsfile': jsfile, @@ -2593,8 +2736,21 @@ task jalviewjsBuildAllCores { 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 allClasslistName = "_all" def allJsFiles = fileTree(dir: j2sDir, include: "**/*.js") allJsFiles += fileTree( dir: libJ2sDir, @@ -2617,8 +2773,8 @@ task jalviewjsBuildAllCores { ] ) def allClasslist = [ - 'jsfile': "${outputDir}/core_${allClasslistName}.js", - 'zjsfile': "${outputDir}/core_${allClasslistName}.z.js", + 'jsfile': "${outputDir}/core${allClasslistName}.js", + 'zjsfile': "${outputDir}/core${allClasslistName}.z.js", 'list': allJsFiles, 'name': allClasslistName ] @@ -2783,11 +2939,7 @@ task jalviewjsSiteTar(type: Tar) { description "Creates a tar.gz file for the website" dependsOn jalviewjsBuildSite def outputFilename = "jalviewjs-site-${JALVIEW_VERSION}.tar.gz" - try { - archiveFileName = outputFilename - } catch (Exception e) { - archiveName = outputFilename - } + archiveFileName = outputFilename compression Compression.GZIP @@ -2805,7 +2957,13 @@ task jalviewjsServer { def htmlFile = "${jalviewDirAbsolutePath}/${filename}" doLast { - SimpleHttpFileServerFactory factory = new SimpleHttpFileServerFactory() + 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 diff --git a/gradle.properties b/gradle.properties index cb25e71..f0c0d9e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -61,7 +61,6 @@ jalview_name = Jalview getdown_local = false getdown_website_dir = getdown/website getdown_resource_dir = resource -#getdown_j11lib_dir = j11lib getdown_files_dir = getdown/files getdown_lib_dir = getdown/lib getdown_launcher = getdown-launcher.jar @@ -70,11 +69,17 @@ getdown_launcher_new = getdown-launcher-new.jar getdown_core = getdown/lib/getdown-core.jar getdown_build_properties = build_properties getdown_launch_jvl_name = channel_launch +getdown_images_dir = utils/getdown +getdown_background_image = jalview_logo_background_getdown-640x480.png +getdown_instant_background_image = jalview_logo_background_getdown_instant-640x480.png +getdown_error_background = jalview_logo_background_getdown_error-640x480.png +getdown_progress_image = jalview_logo_background_getdown-progress.png +getdown_mac_dock_icon = jalview_logo.icns +getdown_icon = Jalview-Logo.png getdown_txt_allow_offline = true getdown_txt_max_concurrent_downloads = 10 -# now got better defaults when not set +# now got better (dynamic) defaults when jvmmem* not set #getdown_txt_jalview.jvmmempc = 90 -# now got better defaults when not set #getdown_txt_jalview.jvmmemmax = 32G getdown_txt_multi_jvmarg = -Dgetdownappdir=%APPDIR% getdown_txt_strict_comments = true @@ -83,27 +88,20 @@ getdown_txt_ui.progress_sync_after_shown = false getdown_txt_ui.keep_on_top = true getdown_txt_ui.display_appbase = true getdown_txt_ui.display_version = true -getdown_txt_ui.min_show_seconds = 6 +getdown_txt_ui.min_show_seconds = 8 getdown_txt_ui.background = FFFFFF -getdown_txt_ui.background_image = utils/getdown/jalview_logo_background_getdown-640x480.png -getdown_txt_ui.instant_background_image = utils/getdown/jalview_logo_background_getdown_instant-640x480.png -getdown_txt_ui.error_background = utils/getdown/jalview_logo_background_getdown_error-640x480.png -getdown_txt_ui.progress_image = utils/getdown/jalview_logo_background_getdown-progress.png -getdown_txt_ui.icon = resources/images/JalviewLogo_Huge.png getdown_txt_ui.progress = 20, 440, 600, 22 getdown_txt_ui.progress_bar = AAAAFF getdown_txt_ui.progress_text = 000000 getdown_txt_ui.status = 20, 380, 600, 58 getdown_txt_ui.status_text = 000066 -#getdown_txt_ui.text_shadow = FFFFFF getdown_txt_ui.install_error = https://www.jalview.org/faq/getdownerror -getdown_txt_ui.mac_dock_icon = resources/images/jalview_logos.ico getdown_alt_java8_min_version = 01080000 getdown_alt_java8_max_version = 01089999 getdown_alt_java11_min_version = 11000000 getdown_alt_java11_max_version = -#getdown_alt_java11_txt_multi_java_location = [windows-amd64] /getdown/jre/windows-jre11.jar,[linux-amd64] /getdown/jre/linux-jre11.tgz,[mac os x] /getdown/jre/macos-jre11.tgz -#getdown_alt_java8_txt_multi_java_location = [windows-amd64] /getdown/jre/windows-jre1.8.tgz,[linux-amd64] /getdown/jre/linux-jre1.8.tgz,[mac os x] /getdown/jre/macos-jre1.8.tgz +#getdown_alt_java11_txt_multi_java_location = [windows-amd64] /getdown/jre/jre-11-windows-x64.zip,[linux-amd64] /getdown/jre/jre-11-linux-x64.zip,[mac os x] /getdown/jre/jre-11-mac-x64.zip +#getdown_alt_java8_txt_multi_java_location = [windows-amd64] /getdown/jre/jre-8-windows-x64.zip,[linux-amd64] /getdown/jre/jre-8-linux-x64.zip,[mac os x] /getdown/jre/jre-8-mac-x64.zip jre_installs_dir = ~/buildtools/jre j8libDir = j8lib @@ -113,23 +111,39 @@ j11modules = com.sun.istack.runtime,com.sun.xml.bind,com.sun.xml.fastinfoset,com flexmark_css = utils/doc/github.css +channel_properties_dir = utils/channels + install4j_home_dir = ~/buildtools/install4j8 install4j_copyright_message = ... install4j_bundle_id = org.jalview.jalview-desktop install4j_utils_dir = utils/install4j +install4j_images_dir = utils/install4j install4j_template = install4j8_template.install4j install4j_info_plist_file_associations = file_associations_auto-Info_plist.xml install4j_installer_file_associations = file_associations_auto-install4j8.xml #install4j_DMG_uninstaller_app_files = uninstall_old_jalview_files.xml install4j_build_dir = build/install4j +install4j_executable_name = jalviewg install4j_media_types = windows,macosArchive,unixArchive,unixInstaller install4j_faster = false install4j_application_categories = Science;Biology;Java; install4j_release_win_application_id = 6595-2347-1923-0725 +install4j_mac_icons_file = jalview_logo.icns +install4j_windows_icons_file = jalview_logo.ico +install4j_png_icon_file = jalview_logo.png +install4j_background = jalview_logo_background_fade-640x480.png +install4j_dmg_background = jalview_dmg_background-NON-RELEASE.png +install4j_dmg_ds_store = jalview_dmg_DS_Store +getdown_wrapper_script_dir = bin +getdown_bash_wrapper_script = jalview.sh +getdown_powershell_wrapper_script = jalview.ps1 +getdown_batch_wrapper_script = jalview.bat OSX_KEYSTORE = OSX_KEYPASS = JSIGN_SH = echo +OSX_APPLEID = +OSX_ALTOOLPASS = CHANNEL=LOCAL getdown_channel_base = https://www.jalview.org/getdown @@ -190,6 +204,7 @@ jalviewjs_eclipse_build_arg = cleanBuild jalviewjs_server_port = 9001 jalviewjs_server_wait = 30 jalviewjs_server_resource = /jalview_bin_Jalview.html +jalviewjs_core_name = _jalview jalviewjs_name = JalviewJS jalviewjs_core_key = core #jalviewjs_core_key = preloadCore