From: Ben Soares Date: Mon, 27 May 2019 15:06:02 +0000 (+0100) Subject: Merge branch 'task/JAL-3247_JAL-3246_JAL-3254_JAL-3236_merge' into task/JAL-3141_JAL... X-Git-Tag: Release_2_11_1_0~53^2~11 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=54360f0110522c5832ebabff8a8498ed4a087261;hp=b8683aaaf600239e94d658bdf99012f5e684d9a8;p=jalview.git Merge branch 'task/JAL-3247_JAL-3246_JAL-3254_JAL-3236_merge' into task/JAL-3141_JAL-3247_merge merge attempt --- diff --git a/build.gradle b/build.gradle index 07a4095..fb311a4 100644 --- a/build.gradle +++ b/build.gradle @@ -846,15 +846,26 @@ task copyInstall4jTemplate(type: Copy) { outputs.files(install4jConf) doLast { + // include file associations in installer def installerFileAssociationsXml = file("$install4jDir/$install4jInstallerFileAssociations").text ant.replaceregexp( byline: false, flags: "s", match: '', - //match: '', replace: installerFileAssociationsXml, file: install4jConf ) + /* + // include uninstaller applescript app files in dmg + def installerDMGUninstallerXml = file("$install4jDir/$install4jDMGUninstallerAppFiles").text + ant.replaceregexp( + byline: false, + flags: "s", + match: '', + replace: installerDMGUninstallerXml, + file: install4jConf + ) + */ } } diff --git a/getdown/lib/getdown-core-1.8.3-SNAPSHOT.jar b/getdown/lib/getdown-core-1.8.3-SNAPSHOT.jar index 7230883..c09d3e4 100644 Binary files a/getdown/lib/getdown-core-1.8.3-SNAPSHOT.jar and b/getdown/lib/getdown-core-1.8.3-SNAPSHOT.jar differ diff --git a/getdown/lib/getdown-launcher.jar b/getdown/lib/getdown-launcher.jar index cb5f670..321b5ce 100644 Binary files a/getdown/lib/getdown-launcher.jar and b/getdown/lib/getdown-launcher.jar differ diff --git a/getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/Application.java b/getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/Application.java index 25cd109..0de5c8a 100644 --- a/getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/Application.java +++ b/getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/Application.java @@ -26,6 +26,7 @@ import java.util.zip.GZIPInputStream; import com.sun.management.OperatingSystemMXBean; import java.lang.management.ManagementFactory; +import jalview.bin.MemorySetting; import com.threerings.getdown.util.*; // avoid ambiguity with java.util.Base64 which we can't use as it's 1.8+ @@ -753,28 +754,34 @@ public class Application jvmmempc = config.getInt(appPrefix + "jvmmempc", jvmmempc); } if (0 <= jvmmempc && jvmmempc <= 100) { - final Object o = ManagementFactory.getOperatingSystemMXBean(); - - try { - if (o instanceof OperatingSystemMXBean) { - final OperatingSystemMXBean osb = (OperatingSystemMXBean) o; - long physicalMem = osb.getTotalPhysicalMemorySize(); - long requestedMem = physicalMem*jvmmempc/100; - String[] maxMemHeapArg = new String[]{"-Xmx"+Long.toString(requestedMem)}; - // remove other max heap size arg - ARG: for (int i = 0; i < _jvmargs.size(); i++) { - if (_jvmargs.get(i) instanceof java.lang.String && _jvmargs.get(i).startsWith("-Xmx")) { - _jvmargs.remove(i); - } - } - addAll(maxMemHeapArg, _jvmargs); + + long maxMemLong = -1; + + try + { + maxMemLong = MemorySetting.memPercent(jvmmempc); + } catch (Exception e) + { + e.printStackTrace(); + } catch (Throwable t) + { + t.printStackTrace(); + } - } - } - catch (NoClassDefFoundError e) { - // com.sun.management.OperatingSystemMXBean doesn't exist in this JVM - System.out.println("No com.sun.management.OperatingSystemMXBean. Cannot use 'jvmmempc'."); + if (maxMemLong > 0) + { + + String[] maxMemHeapArg = new String[]{"-Xmx"+Long.toString(maxMemLong)}; + // remove other max heap size arg + ARG: for (int i = 0; i < _jvmargs.size(); i++) { + if (_jvmargs.get(i) instanceof java.lang.String && _jvmargs.get(i).startsWith("-Xmx")) { + _jvmargs.remove(i); + } } + addAll(maxMemHeapArg, _jvmargs); + + } + } else if (jvmmempc != -1) { System.out.println("'jvmmempc' value must be in range 0 to 100 (read as '"+Integer.toString(jvmmempc)+"')"); } diff --git a/getdown/src/getdown/core/src/main/java/jalview/bin/MemorySetting.java b/getdown/src/getdown/core/src/main/java/jalview/bin/MemorySetting.java new file mode 100644 index 0000000..b3bae2d --- /dev/null +++ b/getdown/src/getdown/core/src/main/java/jalview/bin/MemorySetting.java @@ -0,0 +1,51 @@ +package jalview.bin; + +import java.lang.management.ManagementFactory; +import java.lang.management.OperatingSystemMXBean; + +public class MemorySetting +{ + public static final long leaveFreeMinMemory = 536870912; // 0.5 GB + + public static final long applicationMinMemory = 536870912; // 0.5 GB + + protected static long getPhysicalMemory() + { + final OperatingSystemMXBean o = ManagementFactory + .getOperatingSystemMXBean(); + + try + { + if (o instanceof com.sun.management.OperatingSystemMXBean) + { + final com.sun.management.OperatingSystemMXBean osb = (com.sun.management.OperatingSystemMXBean) o; + return osb.getTotalPhysicalMemorySize(); + } + } catch (NoClassDefFoundError e) + { + // com.sun.management.OperatingSystemMXBean doesn't exist in this JVM + System.out.println("No com.sun.management.OperatingSystemMXBean"); + } + + // We didn't get a com.sun.management.OperatingSystemMXBean. + return -1; + } + + public static long memPercent(int percent) + { + long memPercent = -1; + + long physicalMem = getPhysicalMemory(); + if (physicalMem > applicationMinMemory) + { + // try and set at least applicationMinMemory and thereafter ensure + // leaveFreeMinMemory is left for the OS + memPercent = Math.max(applicationMinMemory, + physicalMem - Math.max(physicalMem * (100 - percent) / 100, + leaveFreeMinMemory)); + } + + return memPercent; + } + +} diff --git a/gradle.properties b/gradle.properties index e49c3ab..57119cb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -59,7 +59,7 @@ getdown_txt_title = Jalview getdown_channel_base = http://www.jalview.org/getdown/jalview getdown_channel_name = TEST getdown_txt_allow_offline = true -getdown_txt_jvmmempc = 95 +getdown_txt_jalview.jvmmempc = 90 getdown_txt_multi_jvmarg = -Dgetdownappdir="%APPDIR%" getdown_txt_strict_comments = true getdown_txt_title = Jalview @@ -100,8 +100,8 @@ install4jResourceDir = utils/install4j install4jTemplate = install4j_template.install4j install4jInfoPlistFileAssociations = file_associations_auto-Info_plist.xml install4jInstallerFileAssociations = file_associations_auto-install4j.xml +install4jDMGUninstallerAppFiles = uninstall_old_jalview_files.xml install4jBuildDir = build/install4j -install4jMediaTypes = windows,macosArchive,linuxRPM,linuxDeb,unixArchive install4jMediaTypes = windows,macosArchive,linuxRPM,linuxDeb,unixArchive,unixInstaller install4jFaster = false diff --git a/j11lib/getdown-core.jar b/j11lib/getdown-core.jar index 7230883..c09d3e4 100644 Binary files a/j11lib/getdown-core.jar and b/j11lib/getdown-core.jar differ diff --git a/j8lib/getdown-core.jar b/j8lib/getdown-core.jar index 7230883..c09d3e4 100644 Binary files a/j8lib/getdown-core.jar and b/j8lib/getdown-core.jar differ diff --git a/src/jalview/bin/Jalview.java b/src/jalview/bin/Jalview.java index c66e63e..449c1fb 100755 --- a/src/jalview/bin/Jalview.java +++ b/src/jalview/bin/Jalview.java @@ -360,10 +360,12 @@ public class Jalview JalviewTaskbar.setTaskbar(this); } catch (Exception e) { - e.printStackTrace(); + System.out.println("Cannot set Taskbar"); + // e.printStackTrace(); } catch (Throwable t) { - t.printStackTrace(); + System.out.println("Cannot set Taskbar"); + // t.printStackTrace(); } desktop.setVisible(true); diff --git a/src/jalview/bin/JalviewTaskbar.java b/src/jalview/bin/JalviewTaskbar.java index 5747263..7dd0382 100644 --- a/src/jalview/bin/JalviewTaskbar.java +++ b/src/jalview/bin/JalviewTaskbar.java @@ -29,7 +29,7 @@ public class JalviewTaskbar } } catch (Exception e) { - e.printStackTrace(); + System.out.println("Unable to setIconImage()"); } } } diff --git a/src/jalview/bin/Launcher.java b/src/jalview/bin/Launcher.java index aec3acd..412f119 100644 --- a/src/jalview/bin/Launcher.java +++ b/src/jalview/bin/Launcher.java @@ -1,8 +1,8 @@ package jalview.bin; import java.io.File; +import java.io.IOException; import java.lang.management.ManagementFactory; -import java.lang.management.OperatingSystemMXBean; import java.util.ArrayList; public class Launcher @@ -10,7 +10,9 @@ public class Launcher private final static String startClass = "jalview.bin.Jalview"; - private final static int maxHeapSizePerCent = 95; + private final static int maxHeapSizePerCent = 90; + + private final static String maxHeapSizePerCentProperty = "jvmmempc"; private final static String dockIconPath = "JalviewLogo_Huge.png"; @@ -22,6 +24,8 @@ public class Launcher ArrayList command = new ArrayList<>(); command.add(javaBin); + String memSetting = null; + boolean isAMac = System.getProperty("os.name").indexOf("Mac") > -1; for (String jvmArg : ManagementFactory.getRuntimeMXBean() @@ -40,39 +44,81 @@ public class Launcher // add memory setting if not specified boolean memSet = false; boolean dockIcon = false; + boolean dockName = false; ARG: for (int i = 0; i < command.size(); i++) { String arg = command.get(i); if (arg.startsWith("-Xmx")) { + memSetting = arg; memSet = true; } else if (arg.startsWith("-Xdock:icon")) { dockIcon = true; } + else if (arg.startsWith("-Xdock:name")) + { + dockName = true; + } } if (!memSet) { long maxMemLong = -1; - long physicalMem = getPhysicalMemory(); - if (physicalMem > 0) + int percent = maxHeapSizePerCent; + String jvmmempc = System.getProperty(maxHeapSizePerCentProperty); + try + { + if (jvmmempc != null) + { + int trypercent = Integer.parseInt(jvmmempc); + if (0 < trypercent && trypercent <= 100) + { + percent = trypercent; + } + else + { + System.out.println("Property '" + maxHeapSizePerCentProperty + + "' should be in range 1..100"); + } + } + } catch (Exception e) + { + System.out.println("Error parsing " + maxHeapSizePerCentProperty + + " '" + jvmmempc + "'"); + } + + try { - maxMemLong = physicalMem * maxHeapSizePerCent / 100; + maxMemLong = MemorySetting.memPercent(percent); + } catch (Exception e) + { + e.printStackTrace(); + } catch (Throwable t) + { + t.printStackTrace(); } + if (maxMemLong > 0) { - command.add("-Xmx" + Long.toString(maxMemLong)); + memSetting = "-Xmx" + Long.toString(maxMemLong); + command.add(memSetting); } } - if (!dockIcon && isAMac) + if (isAMac) { - command.add("-Xdock:icon=" + dockIconPath); - // -Xdock:name=... doesn't actually work :( - // Leaving it in in case it gets fixed - command.add("-Xdock:name=" + "Jalview"); + if (!dockIcon) + { + command.add("-Xdock:icon=" + dockIconPath); + } + if (!dockName) + { + // -Xdock:name=... doesn't actually work :( + // Leaving it in in case it gets fixed + command.add("-Xdock:name=" + "Jalview"); + } } command.add(startClass); @@ -80,41 +126,53 @@ public class Launcher final ProcessBuilder builder = new ProcessBuilder(command); - System.out.println("COMMAND: " + String.join(" ", builder.command())); + // System.out.println("COMMAND: " + String.join(" ", builder.command())); + System.out.println("Running " + startClass + " with " + + (memSetting == null ? "no memSetting" : memSetting)); try { builder.inheritIO(); Process process = builder.start(); process.waitFor(); - } catch (Exception e) + } catch (IOException e) { - e.printStackTrace(); - } - // System.exit(0); - - } - - public static long getPhysicalMemory() - { - final OperatingSystemMXBean o = ManagementFactory - .getOperatingSystemMXBean(); - - try - { - if (o instanceof com.sun.management.OperatingSystemMXBean) + if (e.getMessage().toLowerCase().contains("memory")) + { + System.out.println("Caught a memory exception: " + e.getMessage()); + // Probably the "Cannot allocate memory" error, try without the memory setting + ArrayList commandNoMem = new ArrayList<>(); + for (int i = 0; i < command.size(); i++) + { + if (!command.get(i).startsWith("-Xmx")) + { + commandNoMem.add(command.get(i)); + } + } + final ProcessBuilder builderNoMem = new ProcessBuilder( + commandNoMem); + System.out.println("NO MEM COMMAND: " + + String.join(" ", builderNoMem.command())); + try + { + builderNoMem.inheritIO(); + Process processNoMem = builderNoMem.start(); + processNoMem.waitFor(); + } catch (Exception ex) + { + ex.printStackTrace(); + } + } + else { - final com.sun.management.OperatingSystemMXBean osb = (com.sun.management.OperatingSystemMXBean) o; - return osb.getTotalPhysicalMemorySize(); + e.printStackTrace(); } - } catch (NoClassDefFoundError e) + } catch (Exception e) { - // com.sun.management.OperatingSystemMXBean doesn't exist in this JVM - System.out.println("No com.sun.management.OperatingSystemMXBean"); + e.printStackTrace(); } + // System.exit(0); - // We didn't get a com.sun.management.OperatingSystemMXBean. - return -1; } } diff --git a/src/jalview/bin/MemorySetting.java b/src/jalview/bin/MemorySetting.java new file mode 100644 index 0000000..b3bae2d --- /dev/null +++ b/src/jalview/bin/MemorySetting.java @@ -0,0 +1,51 @@ +package jalview.bin; + +import java.lang.management.ManagementFactory; +import java.lang.management.OperatingSystemMXBean; + +public class MemorySetting +{ + public static final long leaveFreeMinMemory = 536870912; // 0.5 GB + + public static final long applicationMinMemory = 536870912; // 0.5 GB + + protected static long getPhysicalMemory() + { + final OperatingSystemMXBean o = ManagementFactory + .getOperatingSystemMXBean(); + + try + { + if (o instanceof com.sun.management.OperatingSystemMXBean) + { + final com.sun.management.OperatingSystemMXBean osb = (com.sun.management.OperatingSystemMXBean) o; + return osb.getTotalPhysicalMemorySize(); + } + } catch (NoClassDefFoundError e) + { + // com.sun.management.OperatingSystemMXBean doesn't exist in this JVM + System.out.println("No com.sun.management.OperatingSystemMXBean"); + } + + // We didn't get a com.sun.management.OperatingSystemMXBean. + return -1; + } + + public static long memPercent(int percent) + { + long memPercent = -1; + + long physicalMem = getPhysicalMemory(); + if (physicalMem > applicationMinMemory) + { + // try and set at least applicationMinMemory and thereafter ensure + // leaveFreeMinMemory is left for the OS + memPercent = Math.max(applicationMinMemory, + physicalMem - Math.max(physicalMem * (100 - percent) / 100, + leaveFreeMinMemory)); + } + + return memPercent; + } + +} diff --git a/src/jalview/gui/APQHandlers.java b/src/jalview/gui/APQHandlers.java index 5f6651c..05f5e08 100644 --- a/src/jalview/gui/APQHandlers.java +++ b/src/jalview/gui/APQHandlers.java @@ -135,12 +135,12 @@ public class APQHandlers { System.out.println( "Exception when looking for About, Preferences, Quit Handlers"); - e.printStackTrace(); + // e.printStackTrace(); } catch (Throwable t) { System.out.println( "Throwable when looking for About, Preferences, Quit Handlers"); - t.printStackTrace(); + // t.printStackTrace(); } } diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index ac5ed6d..0523d41 100644 --- a/src/jalview/gui/Desktop.java +++ b/src/jalview/gui/Desktop.java @@ -366,12 +366,12 @@ public class Desktop extends jalview.jbgui.GDesktop APQHandlers.setAPQHandlers(this); } catch (Exception e) { - System.out.println("Exception when trying to set APQHandlers"); - e.printStackTrace(); + System.out.println("Cannot set APQHandlers"); + // e.printStackTrace(); } catch (Throwable t) { - System.out.println("Throwable when trying to set APQHandlers"); - t.printStackTrace(); + System.out.println("Cannot set APQHandlers"); + // t.printStackTrace(); } diff --git a/utils/install4j/DS_Store b/utils/install4j/DS_Store index 374da46..2eafdbc 100644 Binary files a/utils/install4j/DS_Store and b/utils/install4j/DS_Store differ diff --git a/utils/install4j/DS_Store_1 b/utils/install4j/DS_Store_1 new file mode 100644 index 0000000..374da46 Binary files /dev/null and b/utils/install4j/DS_Store_1 differ diff --git a/utils/install4j/DS_Store_2 b/utils/install4j/DS_Store_2 new file mode 100644 index 0000000..2eafdbc Binary files /dev/null and b/utils/install4j/DS_Store_2 differ diff --git a/utils/install4j/Uninstall Old Jalview.app/Contents/Info.plist b/utils/install4j/Uninstall Old Jalview.app/Contents/Info.plist new file mode 100644 index 0000000..c10a834 --- /dev/null +++ b/utils/install4j/Uninstall Old Jalview.app/Contents/Info.plist @@ -0,0 +1,52 @@ + + + + + CFBundleAllowMixedLocalizations + + CFBundleDevelopmentRegion + English + CFBundleExecutable + applet + CFBundleIconFile + applet + CFBundleIdentifier + com.apple.ScriptEditor.id.Uninstall-Old-Jalview + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Uninstall Old Jalview + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + aplt + LSMinimumSystemVersionByArchitecture + + x86_64 + 10.6 + + LSRequiresCarbon + + WindowState + + bundleDividerCollapsed + + bundlePositionOfDivider + 0.0 + dividerCollapsed + + eventLogLevel + 2 + name + ScriptWindowState + positionOfDivider + 223 + savedFrame + 329 957 700 672 0 0 3360 1867 + selectedTab + description + + + diff --git a/utils/install4j/Uninstall Old Jalview.app/Contents/MacOS/applet b/utils/install4j/Uninstall Old Jalview.app/Contents/MacOS/applet new file mode 100755 index 0000000..171d0cc Binary files /dev/null and b/utils/install4j/Uninstall Old Jalview.app/Contents/MacOS/applet differ diff --git a/utils/install4j/Uninstall Old Jalview.app/Contents/PkgInfo b/utils/install4j/Uninstall Old Jalview.app/Contents/PkgInfo new file mode 100644 index 0000000..3253614 --- /dev/null +++ b/utils/install4j/Uninstall Old Jalview.app/Contents/PkgInfo @@ -0,0 +1 @@ +APPLaplt \ No newline at end of file diff --git a/utils/install4j/Uninstall Old Jalview.app/Contents/Resources/Scripts/main.scpt b/utils/install4j/Uninstall Old Jalview.app/Contents/Resources/Scripts/main.scpt new file mode 100644 index 0000000..1dce96c Binary files /dev/null and b/utils/install4j/Uninstall Old Jalview.app/Contents/Resources/Scripts/main.scpt differ diff --git a/utils/install4j/Uninstall Old Jalview.app/Contents/Resources/applet.icns b/utils/install4j/Uninstall Old Jalview.app/Contents/Resources/applet.icns new file mode 100644 index 0000000..67a2cbd Binary files /dev/null and b/utils/install4j/Uninstall Old Jalview.app/Contents/Resources/applet.icns differ diff --git a/utils/install4j/Uninstall Old Jalview.app/Contents/Resources/applet.rsrc b/utils/install4j/Uninstall Old Jalview.app/Contents/Resources/applet.rsrc new file mode 100644 index 0000000..c41bb4e Binary files /dev/null and b/utils/install4j/Uninstall Old Jalview.app/Contents/Resources/applet.rsrc differ diff --git a/utils/install4j/Uninstall Old Jalview.app/Contents/Resources/description.rtfd/TXT.rtf b/utils/install4j/Uninstall Old Jalview.app/Contents/Resources/description.rtfd/TXT.rtf new file mode 100644 index 0000000..76ac711 --- /dev/null +++ b/utils/install4j/Uninstall Old Jalview.app/Contents/Resources/description.rtfd/TXT.rtf @@ -0,0 +1,5 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1561\cocoasubrtf600 +{\fonttbl} +{\colortbl;\red255\green255\blue255;} +{\*\expandedcolortbl;;} +} \ No newline at end of file diff --git a/utils/install4j/Uninstall Old Jalview.scpt b/utils/install4j/Uninstall Old Jalview.scpt new file mode 100644 index 0000000..1692009 Binary files /dev/null and b/utils/install4j/Uninstall Old Jalview.scpt differ diff --git a/utils/install4j/install4j_template.install4j b/utils/install4j/install4j_template.install4j index 7a924e2..2f65f51 100644 --- a/utils/install4j/install4j_template.install4j +++ b/utils/install4j/install4j_template.install4j @@ -1,6 +1,6 @@ - + @@ -8,6 +8,8 @@ + + @@ -25,17 +27,23 @@ + + + + + + @@ -50,6 +58,12 @@ + + + + + + + + @@ -149,6 +177,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -700,6 +761,36 @@ return console.askOkCancel(message, true); + + + + + + false + + + ${compiler:sys.shortName} + + + + ${compiler:sys.shortName} + + + + + ../../resources/images/jalview_logos.ico + + + + + ../../resources/images/JalviewLogo_Huge.png + + + + + + !context.getBooleanVariable("sys.programGroupDisabled") + @@ -1666,20 +1757,24 @@ return console.askYesNo(message, true); - + + + + + @@ -1701,20 +1796,24 @@ return console.askYesNo(message, true); - + + + + + @@ -1736,11 +1835,13 @@ return console.askYesNo(message, true); - + + + @@ -1751,6 +1852,31 @@ return console.askYesNo(message, true); + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1758,10 +1884,11 @@ return console.askYesNo(message, true); - + + @@ -1769,6 +1896,7 @@ return console.askYesNo(message, true); + @@ -1782,12 +1910,14 @@ return console.askYesNo(message, true); + - + + @@ -1795,6 +1925,7 @@ return console.askYesNo(message, true); + @@ -1808,10 +1939,17 @@ return console.askYesNo(message, true); + - - + + + + + + + + @@ -1819,9 +1957,10 @@ return console.askYesNo(message, true); - + + @@ -1832,11 +1971,40 @@ return console.askYesNo(message, true); - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1844,18 +2012,25 @@ return console.askYesNo(message, true); - + + + + + + - + + + @@ -1864,13 +2039,15 @@ return console.askYesNo(message, true); + + - + @@ -1881,6 +2058,8 @@ return console.askYesNo(message, true); + + diff --git a/utils/install4j/uninstall_app_dmg_file_inclusions.sh b/utils/install4j/uninstall_app_dmg_file_inclusions.sh new file mode 100644 index 0000000..f5bed50 --- /dev/null +++ b/utils/install4j/uninstall_app_dmg_file_inclusions.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +find Uninstall\ Old\ Jalview.app | perl -p -e 'chomp;$_=qq( \n);' > uninstall_old_jalview_files.xml + +# makes the file used to replace the line +# +# (replacement happens in gradle) diff --git a/utils/install4j/uninstall_old_jalview.icns b/utils/install4j/uninstall_old_jalview.icns new file mode 100644 index 0000000..67a2cbd Binary files /dev/null and b/utils/install4j/uninstall_old_jalview.icns differ diff --git a/utils/install4j/uninstall_old_jalview_files.xml b/utils/install4j/uninstall_old_jalview_files.xml new file mode 100644 index 0000000..342fd90 --- /dev/null +++ b/utils/install4j/uninstall_old_jalview_files.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + +