From d6bc1a7237bf3d5b4ae256f746b7536bb7095324 Mon Sep 17 00:00:00 2001 From: Dief Bell Date: Thu, 28 Nov 2024 10:55:37 +0000 Subject: [PATCH] Can find MSVS 2019+ automatically now --- src/argumentBuilder.ts | 7 ++++++- src/lib.ts | 2 +- src/util.ts | 23 +++++++++++++++-------- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/argumentBuilder.ts b/src/argumentBuilder.ts index bf10fa7..88de654 100644 --- a/src/argumentBuilder.ts +++ b/src/argumentBuilder.ts @@ -20,7 +20,12 @@ export class ArgumentBuilder { const defines = await this.buildDefines(); baseCommand += ` ${ defines.map(d => `-D${d[0]}="${d[1]}"`).join(" ")}`; if (this.options.generatorToUse !== 'native') { - baseCommand += ` -G"${this.options.generatorToUse}"`; + let generatorString = ` -G"${this.options.generatorToUse}"`; + if(generatorString.match(/Visual\s+Studio\s+\d+\s+\d+\s-A/)) { + generatorString = generatorString.replace(/\s-A/, ''); + generatorString += ` -A ${this.config.arch}`; + } + baseCommand += generatorString; } console.log(baseCommand) return baseCommand; diff --git a/src/lib.ts b/src/lib.ts index 3dc56fc..9100786 100644 --- a/src/lib.ts +++ b/src/lib.ts @@ -212,7 +212,7 @@ export async function defaultBuildOptions(configs: BuildOptions, buildmode: Buil let ninja: string | null; let make: string | null; if (configs.generatorToUse === undefined) { - console.log('no generator specified, checking ninja'); + console.log('no generator specified in package.json, checking ninja'); ninja = await ninjaP; if (!ninja) { console.log('ninja not found, checking make'); diff --git a/src/util.ts b/src/util.ts index 399ae11..bd891c1 100644 --- a/src/util.ts +++ b/src/util.ts @@ -3,6 +3,12 @@ import splitargs from 'splitargs2'; import { PathLike, stat as rawStat, StatOptions, Stats } from 'fs-extra'; export const GET_CMAKE_VS_GENERATOR = async (cmake: string, arch: string): Promise => { + const archString = arch === 'x64' ? 'Win64' : arch === "x86" ? '' : null; + if(archString === null) { + console.error('Failed to find valid VS gen, using native. Good Luck.'); + return 'native'; + } + const generators = await EXEC_CAPTURE(`"${cmake}" -G`); const hasCR = generators.includes('\r\n'); const output = hasCR ? generators.split('\r\n') : generators.split('\n'); @@ -19,23 +25,24 @@ export const GET_CMAKE_VS_GENERATOR = async (cmake: string, arch: string): Promi // Some descriptions are multi-line continue; } - genParts[0] = genParts[0].trim(); + /** + * Current MSVS compiler selected in Windows generally is prefixed with "* " + */ + genParts[0] = genParts[0].replace(/^(\* )/, "").trim(); // eslint-disable-next-line optimize-regex/optimize-regex - if (genParts[0].match(/Visual\s+Studio\s+\d+\s+\d+\s+\[arch\]/)) { + if (genParts[0].match(/Visual\s+Studio\s+\d+\s+\d+(\s+\[arch\])?/)) { console.log('Found generator: ', genParts[0]); // The first entry is usually the latest entry useVSGen = genParts[0]; break; } } - if (arch === 'x64') { - useVSGen = useVSGen.replace('[arch]', 'Win64').trim(); - } else if (arch === 'x86') { - useVSGen = useVSGen.replace('[arch]', '').trim(); + const useSwitch = !useVSGen.match(/.*\[arch\]/); + if(useSwitch) { + useVSGen += " -A" // essentially using this as a flag } else { - console.error('Failed to find valid VS gen, using native. Good Luck.'); - return 'native'; + useVSGen = useVSGen.replace('[arch]', archString).trim(); } return useVSGen; }