Skip to content

Fix wine executable check #513

Open
Open
@aentwist

Description

@aentwist

Description

The check for wine executable is incorrect. When installing wine, we use the wine metapackage wine. It only installs wine64 behind the scenes.

export async function createWindowsInstaller(options: SquirrelWindowsOptions): Promise<void> {
let useMono = false;
const monoExe = 'mono';
const wineExe = ['arm64', 'x64'].includes(process.arch) ? 'wine64' : 'wine';
if (process.platform !== 'win32') {
useMono = true;
const [hasWine, hasMono] = await Promise.all([
checkIfCommandExists(wineExe),
checkIfCommandExists(monoExe)
]);
if (!hasWine || !hasMono) {
throw new Error('You must install both Mono and Wine on non-Windows');
}

function checkIfCommandExists(command: string): Promise<boolean> {
const checkCommand = os.platform() === 'win32' ? 'where' : 'which';
return new Promise((resolve) => {
exec(`${checkCommand} ${command}`, (error) => {

x64 -> check for wine64 -> not found -> fail

Meanwhile

$ which wine
/usr/bin/wine
$ which wine64

$ apt search wine | grep wine
[...]
wine/stable,now 8.0~repack-4 all [installed] <- we install this metapackage
wine-binfmt/stable 8.0~repack-4 all
wine64/stable,now 8.0~repack-4 amd64 [installed,automatic] <- we get this

Expected

npm run make -- --platform win32 no wine or mono error

Actual

You must install both Mono and Wine on non-Windows

Proposed Solution

The proposal is to not trouble ourselves with it too much unless there is a real reason we need to make sure 64-bit has 64-bit and 32 has 32. But couldn't a 64-bit user have a 32-bit copy anyway..?

const wineExe = "wine";
const wine64Exe = "wine64";

///

    // Promise.all would be helpful if we were trying to combine these promises into one... but we aren't
    const hasWine = await checkIfCommandExists(wineExe);
    const hasWine64 = await checkIfCommandExists(wine64Exe);
    const hasMono = await checkIfCommandExists(monoExe);

    if (!(hasWine || hasWine64) || !hasMono) {
      throw new Error('You must install both Mono and Wine on non-Windows');
    }

Environment

Debian 12

$ uname -r
5.15.146.1-microsoft-standard-WSL2
$ node
> process.arch
x64

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions