diff --git a/Makefile b/Makefile index 1a607c6..37936ec 100644 --- a/Makefile +++ b/Makefile @@ -95,17 +95,7 @@ endif script: # L= T= : Generate a packaging script @: $${L} $${T} -ifeq ($(T),install) - @echo >&2 "use 'make script L=$(L) T=lang' instead" - @exit 1 -endif - mkdir -p $(BUILD) - node tools/generate-build-script.js --lang $(L) --type $(T) > $(BUILD)/build.bash - chmod +x $(BUILD)/build.bash -ifeq ($(T),lang) - node tools/generate-build-script.js --lang $(L) --type install > $(BUILD)/install.bash - chmod +x $(BUILD)/install.bash -endif + node tools/generate-build-script.js --lang $(L) --type $(T) all-scripts: # Generate packaging scripts for all languages node tools/write-all-build-scripts.js diff --git a/tools/generate-build-script.js b/tools/generate-build-script.js index f52335f..f6bb64d 100644 --- a/tools/generate-build-script.js +++ b/tools/generate-build-script.js @@ -1,3 +1,4 @@ +import { promises as fs } from "fs"; import nodePath from "path"; import process from "process"; import url from "url"; @@ -413,15 +414,32 @@ set -euxo pipefail`); } export async function generateBuildScript({ lang, type }) { - const scriptMaker = { - lang: async () => makeLangScript(await readLangConfig(lang)), - shared: async () => makeSharedScript(await readSharedDepConfig(lang)), - install: async () => makeInstallScript(await readLangConfig(lang)), - }[type]; - if (!scriptMaker) { + const funcs = { + lang: { + cfg: readLangConfig, + make: makeLangScript, + }, + shared: { + cfg: readSharedDepConfig, + make: makeSharedScript, + }, + }; + if (!funcs[type]) { throw new Error(`unsupported script type ${type}`); } - return scriptMaker(); + const { cfg, make } = funcs[type]; + const langConfig = await cfg(lang); + const buildScript = await make(langConfig); + const installScript = await makeInstallScript(langConfig); + await fs.mkdir(`build/${type}/${lang}`, { recursive: true, mode: 0o755 }); + const buildScriptPath = `build/${type}/${lang}/build.bash`; + const installScriptPath = `build/${type}/${lang}/install.bash`; + await Promise.all([ + fs.writeFile(buildScriptPath, buildScript + "\n") + .then(() => fs.chmod(buildScriptPath, 0o755)), + fs.writeFile(installScriptPath, installScript + "\n") + .then(() => fs.chmod(installScriptPath, 0o755)), + ]); } // Parse command-line arguments, run main functionality, and exit. @@ -431,10 +449,10 @@ async function main() { .requiredOption("--lang ", "language ID") .requiredOption( "--type ", - "package category (lang, shared, install)" + "package category (lang or shared)" ); program.parse(process.argv); - console.log(await generateBuildScript(program.opts())); + await generateBuildScript(program.opts()); process.exit(0); } diff --git a/tools/write-all-build-scripts.js b/tools/write-all-build-scripts.js index f03b394..59ad34f 100644 --- a/tools/write-all-build-scripts.js +++ b/tools/write-all-build-scripts.js @@ -12,23 +12,7 @@ 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()) { - const buildScriptPath = `build/${type}/${lang}/build.bash`; - const installScriptPath = `build/${type}/${lang}/install.bash`; - await fs.mkdir(nodePath.dirname(buildScriptPath), { recursive: true }); - await fs.writeFile( - buildScriptPath, - (await generateBuildScript({ lang, type })) + "\n" - ); - await fs.chmod(buildScriptPath, 0o755); - if (type === "lang") { - await fs.writeFile( - installScriptPath, - (await generateBuildScript({ lang, type: "install" })) + "\n" - ); - await fs.chmod(installScriptPath, 0o755); - } - } + await Promise.all((await getPackages()).map(generateBuildScript)); process.exit(0); }