X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=build.gradle;h=810eb578e4f6aeefe9f94ecf792df623d8c95a95;hb=b8149f41ceac6b73575206d76e1215f2370fb28e;hp=32816f341389196785ed78c349e55fc6b7124342;hpb=d6c54502c07af9e32afdaceb8ea877a1def93305;p=jalview.git diff --git a/build.gradle b/build.gradle index 32816f3..810eb57 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,6 @@ 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.XmlSlurper import groovy.util.XmlParser import groovy.xml.XmlUtil @@ -39,7 +38,7 @@ dependencies { // 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.toString() + return o == null ? "" : o.toString() } @@ -57,10 +56,12 @@ ext { localPropsFIS.close() p.each { key, val -> - def over = getProperty(key) != null + def oldval = findProperty(key) setProperty(key, val) - if (over) { - println("Overriding property '${key}' with local.properties value '${val}'") + if (oldval != null) { + println("Overriding property '${key}' ('${oldval}') with local.properties value '${val}'") + } else { + println("Setting unknown property '${key}' with local.properties value '${val}'") } } } catch (Exception e) { @@ -209,11 +210,16 @@ ext { break default: // something wrong specified - print("CHANNEL must be one of BUILD, RELEASE, ARCHIVE, DEVELOP, TEST-RELEASE, SCRATCH-..., LOCAL [default]") + println("CHANNEL must be one of BUILD, RELEASE, ARCHIVE, DEVELOP, TEST-RELEASE, SCRATCH-..., LOCAL [default]") exit break } + // override getdown_app_base if requested + if (findProperty("getdown_appbase_override") != null) { + getdown_app_base = string(getProperty("getdown_appbase_override")) + println("Overriding getdown appbase with '${getdown_app_base}'") + } getdownAppDir = string("${getdownWebsiteDir}/${getdown_app_dir}") //getdownJ11libDir = "${getdownWebsiteDir}/${getdown_j11lib_dir}" @@ -240,22 +246,22 @@ ext { compile_source_compatibility = 1.8 compile_target_compatibility = 1.8 // these are getdown.txt properties defined dependent on the JAVA_VERSION - getdown_alt_java_min_version = getdown_alt_java8_min_version - getdown_alt_java_max_version = getdown_alt_java8_max_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 - getdown_alt_multi_java_location = getdown_alt_java8_txt_multi_java_location + getdownAltMultiJavaLocation = string(findProperty("getdown_alt_java8_txt_multi_java_location")) // this property is for the Java library used in eclipse - eclipse_java_runtime_name = string("JavaSE-1.8") + 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 - getdown_alt_java_min_version = getdown_alt_java11_min_version - getdown_alt_java_max_version = getdown_alt_java11_max_version - getdown_alt_multi_java_location = getdown_alt_java11_txt_multi_java_location - eclipse_java_runtime_name = string("JavaSE-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, @@ -268,10 +274,10 @@ ext { libDistDir = j11libDir compile_source_compatibility = JAVA_VERSION compile_target_compatibility = JAVA_VERSION - getdown_alt_java_min_version = getdown_alt_java11_min_version - getdown_alt_java_max_version = getdown_alt_java11_max_version - getdown_alt_multi_java_location = getdown_alt_java11_txt_multi_java_location - eclipse_java_runtime_name = string("JavaSE-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, @@ -286,13 +292,19 @@ ext { // for install4j JAVA_MIN_VERSION = JAVA_VERSION JAVA_MAX_VERSION = JAVA_VERSION - macosJavaVMDir = string("${System.env.HOME}/buildtools/jre/openjdk-java_vm/getdown/macos-jre${JAVA_VERSION}/jre") - macosJavaVMTgz = string("${System.env.HOME}/buildtools/jre/openjdk-java_vm/install4j/tgz/macos-jre${JAVA_VERSION}.tar.gz") - windowsJavaVMDir = string("${System.env.HOME}/buildtools/jre/openjdk-java_vm/getdown/windows-jre${JAVA_VERSION}/jre") - windowsJavaVMTgz = string("${System.env.HOME}/buildtools/jre/openjdk-java_vm/install4j/tgz/windows-jre${JAVA_VERSION}.tar.gz") + 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-installers-java${JAVA_VERSION}.install4j") - install4jConfFile = string("${install4jDir}/${install4jConfFileName}") + 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) @@ -303,8 +315,7 @@ ext { buildingHTML = string("${jalviewDir}/${docDir}/building.html") helpFile = string("${classesDir}/${help_dir}/help.jhm") helpParentDir = string("${jalviewDir}/${help_parent_dir}") - helpDir = string("${help_dir}") - helpSourceDir = string("${helpParentDir}/${helpDir}") + helpSourceDir = string("${helpParentDir}/${help_dir}") relativeBuildDir = file(jalviewDirAbsolutePath).toPath().relativize(buildDir.toPath()) @@ -342,11 +353,13 @@ sourceSets { resources { srcDirs resourceDir + srcDirs += helpParentDir } jar.destinationDir = file("${jalviewDir}/${packageDir}") compileClasspath = files(sourceSets.main.java.outputDir) + //compileClasspath += files(sourceSets.main.resources.srcDirs) compileClasspath += fileTree(dir: "${jalviewDir}/${libDir}", include: ["*.jar"]) runtimeClasspath = compileClasspath @@ -455,8 +468,8 @@ eclipse { cp.entries.removeAll(removeTheseToo) //cp.entries += new Output("${eclipse_bin_dir}/main") - if (file(helpSourceDir).isDirectory()) { - cp.entries += new Library(fileReference(helpSourceDir)) + if (file(helpParentDir).isDirectory()) { + cp.entries += new Library(fileReference(helpParentDir)) } if (file(resourceDir).isDirectory()) { cp.entries += new Library(fileReference(resourceDir)) @@ -464,7 +477,7 @@ eclipse { HashMap alreadyAddedLibPath = new HashMap<>(); - sourceSets.main.compileClasspath.findAll { it.name.endsWith(".jar") }.each { + 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 @@ -484,7 +497,6 @@ eclipse { } } - //fileTree(dir: "$jalviewDir/$utilsDir", include: ["test*/*.jar"]).each { 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()) { @@ -518,7 +530,7 @@ eclipse { // for the IDE, use java 11 compatibility sourceCompatibility = compile_source_compatibility targetCompatibility = compile_target_compatibility - javaRuntimeName = eclipse_java_runtime_name + javaRuntimeName = eclipseJavaRuntimeName // add in jalview project specific properties/preferences into eclipse core preferences file { @@ -709,7 +721,8 @@ task convertBuildingMD(type: Exec) { } def hostname = "hostname".execute().text.trim() - if ((pandoc == null || ! file(pandoc).exists()) && hostname.equals("jv-bamboo")) { + def buildtoolsPandoc = System.getProperty("user.home")+"/buildtools/pandoc/bin/pandoc" + if ((pandoc == null || ! file(pandoc).exists()) && file(buildtoolsPandoc).exists()) { pandoc = System.getProperty("user.home")+"/buildtools/pandoc/bin/pandoc" } @@ -748,7 +761,7 @@ task syncDocs(type: Sync) { task copyHelp(type: Copy) { def inputDir = helpSourceDir - def outputDir = "${classesDir}/${helpDir}" + def outputDir = "${classesDir}/${help_dir}" from(inputDir) { exclude '**/*.gif' exclude '**/*.jpg' @@ -830,7 +843,7 @@ task buildIndices(type: JavaExec) { dependsOn copyHelp classpath = sourceSets.main.compileClasspath main = "com.sun.java.help.search.Indexer" - workingDir = "${classesDir}/${helpDir}" + workingDir = "${classesDir}/${help_dir}" def argDir = "html" args = [ argDir ] inputs.dir("${workingDir}/${argDir}") @@ -866,8 +879,7 @@ task linkCheck(type: JavaExec) { classpath = files("${jalviewDir}/${utilsDir}") main = "HelpLinksChecker" workingDir = jalviewDir - def help = "${classesDir}/${helpDir}" - args = [ "${classesDir}/${helpDir}", "-nointernet" ] + args = [ "${classesDir}/${help_dir}", "-nointernet" ] def outFOS = new FileOutputStream(helpLinksCheckerOutFile, false) // false == don't append def errFOS = outFOS @@ -878,13 +890,13 @@ task linkCheck(type: JavaExec) { outFOS, errorOutput) - inputs.dir("${classesDir}/${helpDir}") + inputs.dir("${classesDir}/${help_dir}") outputs.file(helpLinksCheckerOutFile) } // import the pubhtmlhelp target ant.properties.basedir = "${jalviewDir}" -ant.properties.helpBuildDir = "${jalviewDirAbsolutePath}/${classes_dir}/${helpDir}" +ant.properties.helpBuildDir = "${jalviewDirAbsolutePath}/${classes_dir}/${help_dir}" ant.importBuild "${utilsDir}/publishHelp.xml" @@ -1000,13 +1012,15 @@ task getdownWebsite() { // go through properties looking for getdown_txt_... def props = project.properties.sort { it.key } - if (getdown_alt_java_min_version.length() > 0) { - props.put("getdown_txt_java_min_version", getdown_alt_java_min_version) + if (getdownAltJavaMinVersion != null && getdownAltJavaMinVersion.length() > 0) { + props.put("getdown_txt_java_min_version", getdownAltJavaMinVersion) } - if (getdown_alt_java_max_version.length() > 0) { - props.put("getdown_txt_java_max_version", getdown_alt_java_max_version) + 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) } - props.put("getdown_txt_multi_java_location", getdown_alt_multi_java_location) props.put("getdown_txt_appbase", getdown_app_base) props.each{ prop, val -> @@ -1213,101 +1227,43 @@ install4j { } -task copyInstall4jTemplate(type: Copy) { - dependsOn setGitVals - - inputs.file("${install4jDir}/${install4j_template}") - inputs.file("${install4jDir}/${install4j_installer_file_associations}") - outputs.files(install4jConfFile) - - from (install4jDir) { - include install4j_template - rename (install4j_template, install4jConfFileName) - // TODO change these ReplaceTokens to something better. Possibly ${compiler:variables} but also the ant.replaceregexp below, or perhaps a proper xmldom parse - - /* - if (OSX_KEYPASS == "") { - filter(ReplaceTokens, - beginToken: 'codeSigning macEnabled="', - endToken: '"', - tokens: [ - 'true': 'codeSigning macEnabled="false"' - ] - ) - filter(ReplaceTokens, - beginToken: 'runPostProcessor="true" ', - endToken: 'Processor', - tokens: [ - 'post': 'runPostProcessor="false" postProcessor' - ] - ) - } - */ - } - into install4jDir +task copyInstall4jTemplate { + def install4jTemplateFile = file("${install4jDir}/${install4j_template}") + def install4jFileAssociationsFile = file("${install4jDir}/${install4j_installer_file_associations}") + inputs.file(install4jTemplateFile) + inputs.file(install4jFileAssociationsFile) + outputs.file(install4jConfFile) doLast { - // include file associations in installer - def install4jFileAssociationsFile = file("${install4jDir}/${install4j_installer_file_associations}") - def install4jFileAssociationsText = install4jFileAssociationsFile.text -/* - ant.replaceregexp( - byline: false, - flags: "s", - match: '', - replace: install4jFileAssociationsText, - file: install4jConfFile - ) -*/ - - def install4jFileAssociations = new XmlParser().parseText(''' - -${install4jFileAssociationsText} - -''' - ) - -println("TEXT=${install4jFileAssociationsText}") -println("ACTIONS") -install4jFileAssociationsXml.action.each { a -> - println("ACTION="+XmlUtil.serialize(a)) -} - - - def install4j = new XmlParser().parse(install4jConfFile) + def install4jConfigXml = new XmlParser().parse(install4jTemplateFile) + // turn off code signing if no OSX_KEYPASS if (OSX_KEYPASS == "") { - install4j.application.codeSigning.each { codeSigning -> + install4jConfigXml.'**'.codeSigning.each { codeSigning -> codeSigning.'@macEnabled' = "false" } - install4j.mediaSets.windows.each { windows -> + install4jConfigXml.'**'.windows.each { windows -> windows.'@runPostProcessor' = "false" } } - // reparse - //install4j = new XmlSlurper().parseText(XmlUtil.serialize(install4j)) - install4j.'**'.action.each { a -> + // put file association actions where placeholder action is + def install4jFileAssociationsText = install4jFileAssociationsFile.text + def fileAssociationActions = new XmlParser().parseText("${install4jFileAssociationsText}") + install4jConfigXml.'**'.action.any { a -> if (a.'@name' == 'EXTENSIONS_REPLACED_BY_GRADLE') { - //a.replaceNode(install4jFileAssociationsXml.action[0]) + 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 } } - // reparse - //install4j = new XmlSlurper().parseText(XmlUtil.serialize(install4j)) - - file(install4jConfFile).text = XmlUtil.serialize(install4j) - /* - // include uninstaller applescript app files in dmg - def installerDMGUninstallerXml = file("$install4jDir/$install4j_DMG_uninstaller_app_files").text - ant.replaceregexp( - byline: false, - flags: "s", - match: '', - replace: installerDMGUninstallerXml, - file: install4jConfFile - ) - */ + // write install4j file + install4jConfFile.text = XmlUtil.serialize(install4jConfigXml) } } @@ -1322,11 +1278,13 @@ clean { task installers(type: com.install4j.gradle.Install4jTask) { group = "distribution" description = "Create the install4j installers" + dependsOn setGitVals dependsOn getdown dependsOn copyInstall4jTemplate - projectFile = file(install4jConfFile) - def install4jTemplateMd5 = "" + 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 + @@ -1336,14 +1294,16 @@ task installers(type: com.install4j.gradle.Install4jTask) { if (filesMd5.length() >= 8) { filesMd5 = filesMd5.substring(0,8) } - install4jTemplateMd5 += filesMd5 - install4jTemplateMd5 += "_${gitHash}" - def install4jTemplateVersion = "${JALVIEW_VERSION}_${install4jTemplateMd5}" - def infoPlistFileAssociations = file("${install4jDir}/${install4j_info_plist_file_associations}").text + def install4jTemplateVersion = "${JALVIEW_VERSION}_F${filesMd5}_C${gitHash}" + // make install4jBuildDir relative to jalviewDir + def install4jBuildDir = "${install4j_build_dir}/${JAVA_VERSION}" variables = [ + 'JALVIEW_DIR': "../..", 'OSX_KEYSTORE': OSX_KEYSTORE, '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, @@ -1351,20 +1311,25 @@ task installers(type: com.install4j.gradle.Install4jTask) { 'JAVA_INTEGER_VERSION': JAVA_INTEGER_VERSION, 'VERSION': JALVIEW_VERSION, 'MACOS_JAVA_VM_DIR': macosJavaVMDir, - 'MACOS_JAVA_VM_TGZ': macosJavaVMTgz, 'WINDOWS_JAVA_VM_DIR': windowsJavaVMDir, + 'LINUX_JAVA_VM_DIR': linuxJavaVMDir, + 'MACOS_JAVA_VM_TGZ': macosJavaVMTgz, 'WINDOWS_JAVA_VM_TGZ': windowsJavaVMTgz, - 'INSTALL4JINFOPLISTFILEASSOCIATIONS': install4j_info_plist_file_associations, - 'INSTALLER_TEMPLATE_VERSION': install4jTemplateVersion, + 'LINUX_JAVA_VM_TGZ': linuxJavaVMTgz, 'COPYRIGHT_MESSAGE': install4j_copyright_message, 'MACOS_BUNDLE_ID': install4j_macOS_bundle_id, + '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': getdown_app_dir, 'GETDOWN_ALT_DIR': getdown_app_dir_alt, 'GETDOWN_INSTALL_DIR': getdown_install_dir, - 'INFO_PLIST_FILE_ASSOCIATIONS': infoPlistFileAssociations + 'INFO_PLIST_FILE_ASSOCIATIONS_FILE': install4j_info_plist_file_associations, + 'BUILD_DIR': install4jBuildDir, ] - destination = "${jalviewDir}/${install4j_build_dir}/${JAVA_VERSION}" + + destination = "${jalviewDir}/${install4jBuildDir}" buildSelected = true if (install4j_faster.equals("true") || CHANNEL.startsWith("DEVELOP") || CHANNEL.startsWith("LOCAL")) { @@ -1374,7 +1339,7 @@ task installers(type: com.install4j.gradle.Install4jTask) { } if (OSX_KEYPASS) { - macKeystorePassword=OSX_KEYPASS + macKeystorePassword = OSX_KEYPASS } doFirst { @@ -1390,7 +1355,7 @@ task installers(type: com.install4j.gradle.Install4jTask) { } -task sourceDist (type: Tar) { +task sourceDist(type: Tar) { def VERSION_UNDERSCORES = JALVIEW_VERSION.replaceAll("\\.", "_") def outputFileName = "${project.name}_${VERSION_UNDERSCORES}.tar.gz" @@ -1468,12 +1433,12 @@ task sourceDist (type: Tar) { } -task helppages { +task helppages { dependsOn copyHelp dependsOn pubhtmlhelp - inputs.dir("${classesDir}/${helpDir}") - outputs.dir("${buildDir}/distributions/${helpDir}") + inputs.dir("${classesDir}/${help_dir}") + outputs.dir("${buildDir}/distributions/${help_dir}") } // LARGE AMOUNT OF JALVIEWJS STUFF DELETED HERE