diff -r 64adf683bc7b -r 61c44899b4eb src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WinMsiBundler.java
--- a/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WinMsiBundler.java Fri Oct 18 11:00:57 2019 -0400
+++ b/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WinMsiBundler.java Fri Oct 18 14:14:37 2019 -0400
@@ -33,10 +33,12 @@
import java.text.MessageFormat;
import java.util.*;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
import static jdk.jpackage.internal.OverridableResource.createResource;
+import static jdk.jpackage.internal.StandardBundlerParam.*;
import static jdk.jpackage.internal.WindowsBundlerParam.*;
@@ -52,10 +54,8 @@
* directory. The following WiX source files are generated:
*
* - main.wxs. Main source file with the installer description
- *
- bundle.wxi. Source file with application and Java run-time directory tree
- * description. This source file is included from main.wxs
- *
- icons.wxi. Source file with the list of icons used by the application.
- * This source file is included from main.wxs
+ *
- bundle.wxf. Source file with application and Java run-time directory tree
+ * description.
*
*
* main.wxs file is a copy of main.wxs resource from
@@ -86,15 +86,10 @@
* files.
*
JpIsSystemWide. Set to "yes" if --win-per-user-install command line
* option was not specified. Undefined otherwise
- * JpWixVersion36OrNewer. Set to "yes" if WiX Toolkit v3.6 or newer is used.
- * Undefined otherwise
*
*/
public class WinMsiBundler extends AbstractBundler {
- private static final ResourceBundle I18N = ResourceBundle.getBundle(
- "jdk.jpackage.internal.resources.WinResources");
-
public static final BundlerParamInfo APP_BUNDLER =
new WindowsBundlerParam<>(
"win.app.bundler",
@@ -102,13 +97,6 @@
params -> new WinAppBundler(),
null);
- public static final BundlerParamInfo CAN_USE_WIX36 =
- new WindowsBundlerParam<>(
- "win.msi.canUseWix36",
- Boolean.class,
- params -> false,
- (s, p) -> Boolean.valueOf(s));
-
public static final BundlerParamInfo MSI_IMAGE_DIR =
new WindowsBundlerParam<>(
"win.msi.imageDir",
@@ -154,66 +142,6 @@
params -> UUID.randomUUID(),
(s, p) -> UUID.fromString(s));
- private static final String TOOL_CANDLE = "candle.exe";
- private static final String TOOL_LIGHT = "light.exe";
- // autodetect just v3.7, v3.8, 3.9, 3.10 and 3.11
- private static final String AUTODETECT_DIRS =
- ";C:\\Program Files (x86)\\WiX Toolset v3.11\\bin;"
- + "C:\\Program Files\\WiX Toolset v3.11\\bin;"
- + "C:\\Program Files (x86)\\WiX Toolset v3.10\\bin;"
- + "C:\\Program Files\\WiX Toolset v3.10\\bin;"
- + "C:\\Program Files (x86)\\WiX Toolset v3.9\\bin;"
- + "C:\\Program Files\\WiX Toolset v3.9\\bin;"
- + "C:\\Program Files (x86)\\WiX Toolset v3.8\\bin;"
- + "C:\\Program Files\\WiX Toolset v3.8\\bin;"
- + "C:\\Program Files (x86)\\WiX Toolset v3.7\\bin;"
- + "C:\\Program Files\\WiX Toolset v3.7\\bin";
-
- private static String getCandlePath() {
- for (String dirString : (System.getenv("PATH")
- + AUTODETECT_DIRS).split(";")) {
- File f = new File(dirString.replace("\"", ""), TOOL_CANDLE);
- if (f.isFile()) {
- return f.toString();
- }
- }
- return null;
- }
-
- private static String getLightPath() {
- for (String dirString : (System.getenv("PATH")
- + AUTODETECT_DIRS).split(";")) {
- File f = new File(dirString.replace("\"", ""), TOOL_LIGHT);
- if (f.isFile()) {
- return f.toString();
- }
- }
- return null;
- }
-
-
- public static final StandardBundlerParam MENU_HINT =
- new WindowsBundlerParam<>(
- Arguments.CLIOptions.WIN_MENU_HINT.getId(),
- Boolean.class,
- params -> false,
- // valueOf(null) is false,
- // and we actually do want null in some cases
- (s, p) -> (s == null ||
- "null".equalsIgnoreCase(s))? true : Boolean.valueOf(s)
- );
-
- public static final StandardBundlerParam SHORTCUT_HINT =
- new WindowsBundlerParam<>(
- Arguments.CLIOptions.WIN_SHORTCUT_HINT.getId(),
- Boolean.class,
- params -> false,
- // valueOf(null) is false,
- // and we actually do want null in some cases
- (s, p) -> (s == null ||
- "null".equalsIgnoreCase(s))? false : Boolean.valueOf(s)
- );
-
@Override
public String getName() {
return I18N.getString("msi.bundler.name");
@@ -237,17 +165,10 @@
@Override
public boolean supported(boolean platformInstaller) {
- return isSupported();
- }
-
- @Override
- public boolean isDefault() {
- return false;
- }
-
- public static boolean isSupported() {
try {
- validateWixTools();
+ if (wixToolset == null) {
+ wixToolset = WixTool.toolset();
+ }
return true;
} catch (ConfigException ce) {
Log.error(ce.getMessage());
@@ -260,71 +181,29 @@
return false;
}
- private static String findToolVersion(String toolName) {
- try {
- if (toolName == null || "".equals(toolName)) return null;
-
- ProcessBuilder pb = new ProcessBuilder(
- toolName,
- "/?");
- VersionExtractor ve = new VersionExtractor("version (\\d+.\\d+)");
- // not interested in the output
- IOUtils.exec(pb, true, ve);
- String version = ve.getVersion();
- Log.verbose(MessageFormat.format(
- I18N.getString("message.tool-version"),
- toolName, version));
- return version;
- } catch (Exception e) {
- Log.verbose(e);
- return null;
- }
- }
-
- public static void validateWixTools() throws ConfigException{
- String candleVersion = findToolVersion(getCandlePath());
- String lightVersion = findToolVersion(getLightPath());
-
- // WiX 3.0+ is required
- String minVersion = "3.0";
- if (candleVersion == null || lightVersion == null) {
- throw new ConfigException(
- I18N.getString("error.no-wix-tools"),
- I18N.getString("error.no-wix-tools.advice"));
- }
-
- if (VersionExtractor.isLessThan(candleVersion, minVersion)) {
- throw new ConfigException(
- MessageFormat.format(
- I18N.getString("message.wrong-tool-version"),
- TOOL_CANDLE, candleVersion, minVersion),
- I18N.getString("error.no-wix-tools.advice"));
- }
- if (VersionExtractor.isLessThan(lightVersion, minVersion)) {
- throw new ConfigException(
- MessageFormat.format(
- I18N.getString("message.wrong-tool-version"),
- TOOL_LIGHT, lightVersion, minVersion),
- I18N.getString("error.no-wix-tools.advice"));
- }
+ @Override
+ public boolean isDefault() {
+ return false;
}
@Override
public boolean validate(Map params)
throws ConfigException {
try {
- if (params == null) throw new ConfigException(
- I18N.getString("error.parameters-null"),
- I18N.getString("error.parameters-null.advice"));
-
- // run basic validation to ensure requirements are met
+ if (wixToolset == null) {
+ wixToolset = WixTool.toolset();
+ }
- String lightVersion = findToolVersion(getLightPath());
- if (!VersionExtractor.isLessThan(lightVersion, "3.6")) {
- Log.verbose(I18N.getString("message.use-wix36-features"));
- params.put(CAN_USE_WIX36.getID(), Boolean.TRUE);
+ for (var toolInfo: wixToolset.values()) {
+ Log.verbose(MessageFormat.format(I18N.getString(
+ "message.tool-version"), toolInfo.path.getFileName(),
+ toolInfo.version));
}
+ wixSourcesBuilder.setWixVersion(wixToolset.get(WixTool.Light).version);
+
+ wixSourcesBuilder.logWixFeatures();
+
/********* validate bundle parameters *************/
String version = PRODUCT_VERSION.fetchFrom(params);
@@ -415,7 +294,7 @@
return true;
}
- private boolean prepareProto(Map params)
+ private void prepareProto(Map params)
throws PackagerException, IOException {
File appImage = StandardBundlerParam.getPredefinedAppImage(params);
File appDir = null;
@@ -445,28 +324,6 @@
destFile.setWritable(true);
ensureByMutationFileIsRTF(destFile);
}
-
- // copy file association icons
- List