diff --git a/package.json b/package.json index fe3f23a..156105c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@aminya/cmake-ts", - "version": "0.3.0-aminya.7", + "version": "0.4.1-aminya.1", "description": "cmake-js rewrite in typescript to support advanced build configurations", "main": "build/lib.js", "bin": "build/main.js", 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/urlRegistry.ts b/src/urlRegistry.ts index fc77ec5..6b83850 100644 --- a/src/urlRegistry.ts +++ b/src/urlRegistry.ts @@ -5,7 +5,7 @@ import os from 'os'; const NODE_MIRROR = process.env.NVM_NODEJS_ORG_MIRROR || "https://nodejs.org/dist"; const IOJS_MIRROR = process.env.NVM_IOJS_ORG_MIRROR || "https://iojs.org/dist"; -const ELECTRON_MIRROR = process.env.ELECTRON_MIRROR || "https://atom.io/download/atom-shell"; +const ELECTRON_MIRROR = process.env.ELECTRON_MIRROR || "https://artifacts.electronjs.org/headers/dist"; export const HOME_DIRECTORY = process.env[(os.platform() === "win32") ? "USERPROFILE" : "HOME"] as string; diff --git a/src/util.ts b/src/util.ts index 399ae11..a63aa85 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,22 @@ export const GET_CMAKE_VS_GENERATOR = async (cmake: string, arch: string): Promi // Some descriptions are multi-line continue; } - genParts[0] = genParts[0].trim(); + 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; }