diff --git a/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WixFragmentBuilder.java b/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WixFragmentBuilder.java index 4d180a948710b..3c98968c6e905 100644 --- a/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WixFragmentBuilder.java +++ b/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WixFragmentBuilder.java @@ -145,6 +145,25 @@ static boolean is64Bit() { return Architecture.is64bit(); } + enum Arch { + X64, + X86, + AARCH64, + OTHER; + } + + static Arch getArch() { + if (Architecture.isX64()) { + return Arch.X64; + } else if (Architecture.isX86()) { + return Arch.X86; + } else if (Architecture.isAARCH64()) { + return Arch.AARCH64; + } else { + return Arch.OTHER; + } + } + protected final Path getConfigRoot() { return configRoot; } diff --git a/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WixPipeline.java b/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WixPipeline.java index be15b2028771a..f6bf5db3a8209 100644 --- a/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WixPipeline.java +++ b/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WixPipeline.java @@ -40,6 +40,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import static jdk.jpackage.internal.ShortPathUtils.adjustPath; +import static jdk.jpackage.internal.WixFragmentBuilder.Arch; +import static jdk.jpackage.internal.WixFragmentBuilder.getArch; import jdk.jpackage.internal.util.PathUtils; /** @@ -201,6 +203,13 @@ private void buildMsiWix4(Path msi) throws IOException { }).flatMap(Function.identity()).collect(Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue)); + var archString = switch (WixFragmentBuilder.getArch()) { + case Arch.X64 -> "x64"; + case Arch.X86 -> "x86"; + case Arch.AARCH64 -> "arm64"; + case Arch.OTHER -> throw new IOException("Unsupported architecture."); + }; + List cmdline = new ArrayList<>(List.of( toolset.getToolPath(WixTool.Wix4).toString(), "build", @@ -208,7 +217,7 @@ private void buildMsiWix4(Path msi) throws IOException { "-pdbtype", "none", "-intermediatefolder", wixObjDir.toString(), "-ext", "WixToolset.Util.wixext", - "-arch", WixFragmentBuilder.is64Bit() ? "x64" : "x86" + "-arch", archString )); cmdline.addAll(lightOptions); @@ -249,12 +258,18 @@ private Path compileWix3(WixSource wixSource) throws IOException { Path wixObj = wixObjDir.toAbsolutePath().resolve(PathUtils.replaceSuffix( wixSource.path.getFileName(), ".wixobj")); + var archString = switch (WixFragmentBuilder.getArch()) { + case Arch.X64 -> "x64"; + case Arch.X86 -> "x86"; + case Arch.AARCH64, Arch.OTHER -> throw new IOException("Unsupported architecture."); + }; + List cmdline = new ArrayList<>(List.of( toolset.getToolPath(WixTool.Candle3).toString(), "-nologo", wixSource.path.toString(), "-ext", "WixUtilExtension", - "-arch", WixFragmentBuilder.is64Bit() ? "x64" : "x86", + "-arch", archString, "-out", wixObj.toString() ));