From 33edf76b93b37244a36ad5aecee21ac7a15bad93 Mon Sep 17 00:00:00 2001 From: Radon Rosborough Date: Sun, 17 Jan 2021 13:34:58 -0800 Subject: [PATCH] Write all build scripts at once --- Makefile | 2 +- tools/generate-build-script.js | 44 +++++++++++++++++--------------- tools/write-all-build-scripts.js | 29 +++++++++++++++++++++ 3 files changed, 54 insertions(+), 21 deletions(-) create mode 100644 tools/write-all-build-scripts.js diff --git a/Makefile b/Makefile index e2ee72e..f53bb74 100644 --- a/Makefile +++ b/Makefile @@ -57,7 +57,7 @@ scripts: node tools/make-foreach.js --types script L=$(L) all-scripts: - node tools/make-foreach.js --pkgs script + node tools/write-all-build-scripts.js pkg-clean: @: $${L} $${T} diff --git a/tools/generate-build-script.js b/tools/generate-build-script.js index 71cc29e..e6c2c4a 100644 --- a/tools/generate-build-script.js +++ b/tools/generate-build-script.js @@ -1,5 +1,6 @@ import nodePath from "path"; import process from "process"; +import url from "url"; import { Command } from "commander"; import YAML from "yaml"; @@ -321,6 +322,22 @@ function makeSharedScript(langConfig) { return makeLangScript(langConfig, true); } +export async function generateBuildScript({ lang, type }) { + const scriptMaker = { + lang: makeLangScript, + config: makeConfigScript, + shared: makeSharedScript, + }[type]; + if (!scriptMaker) { + throw new Error(`unsupported script type ${type}`); + } + return scriptMaker( + type === "shared" + ? await readSharedDepConfig(lang) + : await readLangConfig(lang) + ); +} + // Parse command-line arguments, run main functionality, and exit. async function main() { const program = new Command(); @@ -331,26 +348,13 @@ async function main() { "package category (lang, config, shared)" ); program.parse(process.argv); - const scriptMaker = { - lang: makeLangScript, - config: makeConfigScript, - shared: makeSharedScript, - }[program.type]; - if (!scriptMaker) { - console.error(`make-script.js: unsupported --type ${program.type}`); - process.exit(1); - } - console.log( - scriptMaker( - program.type === "shared" - ? await readSharedDepConfig(program.lang) - : await readLangConfig(program.lang) - ) - ); + console.log(generateBuildScript({ lang: program.lang, type: program.type })); process.exit(0); } -main().catch((err) => { - console.error(err); - process.exit(1); -}); +if (process.argv[1] === url.fileURLToPath(import.meta.url)) { + main().catch((err) => { + console.error(err); + process.exit(1); + }); +} diff --git a/tools/write-all-build-scripts.js b/tools/write-all-build-scripts.js new file mode 100644 index 0000000..263c8bf --- /dev/null +++ b/tools/write-all-build-scripts.js @@ -0,0 +1,29 @@ +// This script is not really needed per se, but it's a bit slow to run +// Make/Node.js several hundred times in order to 'make all-scripts', +// hence having a single script that does the whole thing. + +import { promises as fs } from "fs"; +import process from "process"; +import url from "url"; + +import { getPackages } from "./config.js"; +import { generateBuildScript } from "./generate-build-script.js"; + +// Parse command-line arguments, run main functionality, and exit. +async function main() { + for (const { lang, type } of await getPackages()) { + await fs.mkdir(`build/${type}/${lang}`, { recursive: true }); + await fs.writeFile( + `build/${type}/${lang}/build.bash`, + await generateBuildScript({ lang, type }) + ); + } + process.exit(0); +} + +if (process.argv[1] === url.fileURLToPath(import.meta.url)) { + main().catch((err) => { + console.error(err); + process.exit(1); + }); +}