From 933ea5bb58ac68642fa582c6e3101627cb448388 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Fri, 31 Oct 2025 17:08:56 +0100 Subject: [PATCH] change(developer): remove kmlmc and kmlmp These were replaced by kmc in v17.0. We kept them as legacy alternatives in v18.0, but it is time to remove them now to reduce the maintenance of having multiple entry points to kmc. Fixes: #13181 Test-bot: skip --- developer/docs/help/context/index.md | 6 -- developer/docs/help/context/kmlmc.md | 5 -- developer/docs/help/context/kmlmi.md | 5 -- developer/docs/help/context/kmlmp.md | 5 -- .../reference/kmc/cli/kmcomp-migration.md | 20 +----- developer/src/README.md | 2 +- developer/src/inst/kmdev.wxs | 8 --- developer/src/inst/node/kmlmc.cmd | 4 -- developer/src/inst/node/kmlmp.cmd | 4 -- developer/src/kmc/build-bundler.js | 2 - developer/src/kmc/package.json | 8 +-- developer/src/kmc/src/kmlmc.ts | 67 ------------------- developer/src/kmc/src/kmlmp.ts | 60 ----------------- developer/src/tike/build.sh | 2 - developer/src/tike/kmlmc.cmd | 20 ------ developer/src/tike/kmlmp.cmd | 20 ------ package-lock.json | 4 +- 17 files changed, 6 insertions(+), 236 deletions(-) delete mode 100644 developer/docs/help/context/kmlmc.md delete mode 100644 developer/docs/help/context/kmlmi.md delete mode 100644 developer/docs/help/context/kmlmp.md delete mode 100644 developer/src/inst/node/kmlmc.cmd delete mode 100644 developer/src/inst/node/kmlmp.cmd delete mode 100644 developer/src/kmc/src/kmlmc.ts delete mode 100644 developer/src/kmc/src/kmlmp.ts delete mode 100644 developer/src/tike/kmlmc.cmd delete mode 100644 developer/src/tike/kmlmp.cmd diff --git a/developer/docs/help/context/index.md b/developer/docs/help/context/index.md index 04028b35c1..d7bf164c30 100644 --- a/developer/docs/help/context/index.md +++ b/developer/docs/help/context/index.md @@ -42,12 +42,6 @@ title: Context Help [kmc Command-line Options](kmc) -[kmlmc Command-line Options](kmlmc) - -[kmlmi Command-line Options](kmlmi) - -[kmlmp Command-line Options](kmlmp) - [Character Map](character-map) [Message Window](messages) diff --git a/developer/docs/help/context/kmlmc.md b/developer/docs/help/context/kmlmc.md deleted file mode 100644 index 33edf500f5..0000000000 --- a/developer/docs/help/context/kmlmc.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: kmlmc - Command Line Lexical Model Compiler (deprecated) ---- - -kmlmc has been replaced by [kmc](../reference/kmc). diff --git a/developer/docs/help/context/kmlmi.md b/developer/docs/help/context/kmlmi.md deleted file mode 100644 index dc47cbbc39..0000000000 --- a/developer/docs/help/context/kmlmi.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: kmlmi - Command Line Lexical Model model_info Compiler (deprecated) ---- - -kmlmi has been replaced by [kmc](../reference/kmc). diff --git a/developer/docs/help/context/kmlmp.md b/developer/docs/help/context/kmlmp.md deleted file mode 100644 index 3442d8f142..0000000000 --- a/developer/docs/help/context/kmlmp.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: kmlmp - Command Line Lexical Model Package Compiler (deprecated) ---- - -kmlmp has been replaced by [kmc](../reference/kmc). diff --git a/developer/docs/help/reference/kmc/cli/kmcomp-migration.md b/developer/docs/help/reference/kmc/cli/kmcomp-migration.md index c864e1bc90..e3cd9f28b7 100644 --- a/developer/docs/help/reference/kmc/cli/kmcomp-migration.md +++ b/developer/docs/help/reference/kmc/cli/kmcomp-migration.md @@ -5,9 +5,8 @@ title: Migrating from kmcomp to kmc `kmcomp` was the command-line compiler for Keyman Developer through version 16.0. Version 17.0 replaces `kmcomp` with `kmc`. -The lexical model command-line tooling, `kmlmc`, `kmlmp`, and `kmlmi`, are all -still present in version 17, but are deprecated, as the same tasks can be -performed with `kmc`. +The lexical model command-line tooling, `kmlmc`, `kmlmp`, and `kmlmi`, have +been removed in version 19.0; instead use `kmc`. ## Benefits @@ -99,21 +98,6 @@ kmcomp | kmc | notes ## Compiling a lexical model -`kmlmc` and `kmlmp` were separate tools in earlier versions of Keyman Developer, -for compiling lexical models and lexical model packages. They have both been -replaced with `kmc`. - -Old method, using kmlmc and kmlmp: - -```bash -kmlmc file.model.ts -# or specifying output filename -kmlmc -o output/path/file.model.js file.model.ts -kmlmp file.model.kps -``` - -New method, using kmc: - ```bash # recommended, build the model project: kmc build . diff --git a/developer/src/README.md b/developer/src/README.md index f3419c71dc..f9b9092448 100644 --- a/developer/src/README.md +++ b/developer/src/README.md @@ -84,7 +84,7 @@ in Keyman for Windows. ## kmc -node-based next generation compiler, hosts kmc, (and legacy kmlmc, kmlmp) +node-based next generation compiler, hosts kmc ### kmc-analyze - Analysis tools diff --git a/developer/src/inst/kmdev.wxs b/developer/src/inst/kmdev.wxs index c57de43d82..8b10c138c7 100644 --- a/developer/src/inst/kmdev.wxs +++ b/developer/src/inst/kmdev.wxs @@ -262,14 +262,6 @@ - - - - - - - - diff --git a/developer/src/inst/node/kmlmc.cmd b/developer/src/inst/node/kmlmc.cmd deleted file mode 100644 index be3bdf06e0..0000000000 --- a/developer/src/inst/node/kmlmc.cmd +++ /dev/null @@ -1,4 +0,0 @@ -@rem This script avoids path dependencies for node for distribution -@rem with Keyman Developer. When used on platforms other than Windows, -@rem node can be used directly with the compiler (`npm link` will setup). -@"%~dp0\node.js\node.exe" "%~dp0\kmc\kmlmc.mjs" %* diff --git a/developer/src/inst/node/kmlmp.cmd b/developer/src/inst/node/kmlmp.cmd deleted file mode 100644 index 2062ae091c..0000000000 --- a/developer/src/inst/node/kmlmp.cmd +++ /dev/null @@ -1,4 +0,0 @@ -@rem This script avoids path dependencies for node for distribution -@rem with Keyman Developer. When used on platforms other than Windows, -@rem node can be used directly with the compiler (`npm link` will setup). -@"%~dp0\node.js\node.exe" "%~dp0\kmc\kmlmp.mjs" %* diff --git a/developer/src/kmc/build-bundler.js b/developer/src/kmc/build-bundler.js index 9b5f9cdd9b..1cfbe2568f 100644 --- a/developer/src/kmc/build-bundler.js +++ b/developer/src/kmc/build-bundler.js @@ -7,8 +7,6 @@ import esbuild from 'esbuild'; await esbuild.build({ entryPoints: [ 'build/src/kmc.js', - 'build/src/kmlmc.js', - 'build/src/kmlmp.js', ], bundle: true, format: 'esm', diff --git a/developer/src/kmc/package.json b/developer/src/kmc/package.json index 069e676ed1..39d839bc84 100644 --- a/developer/src/kmc/package.json +++ b/developer/src/kmc/package.json @@ -11,10 +11,8 @@ ], "scripts": { "build": "tsc -b", - "bundle": "npm run bundle-kmc && npm run bundle-kmlmc && npm run bundle-kmlmp", + "bundle": "npm run bundle-kmc", "bundle-kmc": "esbuild build/src/kmc.js --bundle --platform=node --target=es2022 > build/cjs-src/kmc.cjs", - "bundle-kmlmc": "esbuild build/src/kmlmc.js --bundle --platform=node --target=es2022 > build/cjs-src/kmlmc.cjs", - "bundle-kmlmp": "esbuild build/src/kmlmp.js --bundle --platform=node --target=es2022 > build/cjs-src/kmlmp.cjs", "test": "eslint . && cd test && tsc -b && cd .. && mocha" }, "type": "module", @@ -29,9 +27,7 @@ }, "main": "build/src/kmc.js", "bin": { - "kmc": "build/src/kmc.js", - "kmlmc": "build/src/kmlmc.js", - "kmlmp": "build/src/kmlmp.js" + "kmc": "build/src/kmc.js" }, "dependencies": { "@keymanapp/common-types": "*", diff --git a/developer/src/kmc/src/kmlmc.ts b/developer/src/kmc/src/kmlmc.ts deleted file mode 100644 index ca2fd4d6b0..0000000000 --- a/developer/src/kmc/src/kmlmc.ts +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env node -/** - * kmlmc - Keyman Lexical Model Compiler - */ - -import { Command } from 'commander'; -import { LexicalModelCompiler } from '@keymanapp/kmc-model'; -import { SysExits } from './util/sysexits.js'; -import KEYMAN_VERSION from "@keymanapp/keyman-version"; -import { NodeCompilerCallbacks } from './util/NodeCompilerCallbacks.js'; - -let inputFilename: string; -const program = new Command(); - -/* Arguments */ -program - .description('Compiles Keyman lexical models') - .version(KEYMAN_VERSION.VERSION_WITH_TAG) - .arguments('') - .action(infile => inputFilename = infile) - .option('-o, --outFile ', 'where to save the resultant file'); - -program.parse(process.argv); - -// Deal with input arguments: -if (!inputFilename) { - exitDueToUsageError('Must provide a lexical model source file.'); -} - -const callbacks = new NodeCompilerCallbacks({logLevel: 'info'}); - -const compiler = new LexicalModelCompiler(); -if(!await compiler.init(callbacks, null)) { - console.error('Initialization failed.'); - process.exit(SysExits.EX_DATAERR); -} - -let code = null; -// Compile: -try { - code = await compiler.run(inputFilename, program.opts().outFile); -} catch(e) { - console.error(e); - process.exit(SysExits.EX_DATAERR); -} - -if(!code) { - console.error('Compilation failed.') - process.exit(SysExits.EX_DATAERR); -} - -// Output: -if (program.opts().outFile) { - compiler.write(code.artifacts); -} else { - // TODO(lowpri): if writing to console then log messages should all be to stderr? - const decoder = new TextDecoder(); - const text = decoder.decode(code.artifacts.js.data); - console.log(text); -} - -function exitDueToUsageError(message: string): never { - console.error(`${program.name()}: ${message}`); - console.error(); - program.outputHelp(); - return process.exit(SysExits.EX_USAGE); -} \ No newline at end of file diff --git a/developer/src/kmc/src/kmlmp.ts b/developer/src/kmc/src/kmlmp.ts deleted file mode 100644 index d5fdb20c16..0000000000 --- a/developer/src/kmc/src/kmlmp.ts +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env node -/** - * kmlmp - Keyman Lexical Model Package Compiler - */ - -// Note: this is a deprecated package and will be removed in Keyman 19.0 - -import { Command } from 'commander'; -import { KmpCompiler } from '@keymanapp/kmc-package'; -import { SysExits } from './util/sysexits.js'; -import KEYMAN_VERSION from "@keymanapp/keyman-version"; -import { NodeCompilerCallbacks } from './util/NodeCompilerCallbacks.js'; - -let inputFilename: string; -const program = new Command(); - -/* Arguments */ -program - .description('Compiles Keyman lexical model packages\nDeprecated: use instead; will be removed in v18') - .version(KEYMAN_VERSION.VERSION_WITH_TAG) - .arguments('') - .action(infile => inputFilename = infile) - .option('-o, --outFile ', 'where to save the resultant file'); - -program.parse(process.argv); - -// Deal with input arguments: - -if (!inputFilename) { - exitDueToUsageError('Must provide a lexical model package source file.'); -} - -const outputFilename: string = program.opts().outFile ? program.opts().outFile : inputFilename.replace(/\.kps$/, ".kmp"); - -// -// Run the compiler -// - -const callbacks = new NodeCompilerCallbacks({logLevel: 'info'}); -const kmpCompiler = new KmpCompiler(); -if(!await kmpCompiler.init(callbacks, null)) { - process.exit(1); -} - -const result = await kmpCompiler.run(inputFilename, outputFilename); -if(!result) { - process.exit(1); -} - -if(!await kmpCompiler.write(result.artifacts)) { - console.error('Failed to write kmp file'); - process.exit(1); -} - -function exitDueToUsageError(message: string): never { - console.error(`${program.name()}: ${message}`); - console.error(); - program.outputHelp(); - return process.exit(SysExits.EX_USAGE); -} diff --git a/developer/src/tike/build.sh b/developer/src/tike/build.sh index b9e5349f3e..15e2add3c4 100755 --- a/developer/src/tike/build.sh +++ b/developer/src/tike/build.sh @@ -72,8 +72,6 @@ function do_build() { tds2dbg "$WIN32_TARGET" cp "$WIN32_TARGET" "$DEVELOPER_PROGRAM" - cp kmlmc.cmd "$DEVELOPER_PROGRAM" - cp kmlmp.cmd "$DEVELOPER_PROGRAM" cp kmc.cmd "$DEVELOPER_PROGRAM" cp "$KEYMAN_ROOT/core/build/x86/$TARGET_PATH/src/$KEYMANCORE_DLL" "$DEVELOPER_PROGRAM" builder_if_release_build_level cp "$WIN32_TARGET_PATH/tike.dbg" "$DEVELOPER_DEBUGPATH" diff --git a/developer/src/tike/kmlmc.cmd b/developer/src/tike/kmlmc.cmd deleted file mode 100644 index 4f86f2e3bd..0000000000 --- a/developer/src/tike/kmlmc.cmd +++ /dev/null @@ -1,20 +0,0 @@ -@echo off -setlocal -rem This script is based on /developer/src/node/inst/kmlmc.cmd. It is stored here -rem in order to allow TIKE to call out to the compiler while debugging. -if exist "%~dp0..\inst\node\dist\node.exe" ( - rem If running in developer/src/tike/: - set nodeexe="%~dp0..\inst\node\dist\node.exe" - set nodecli="%~dp0..\kmc\build\src\kmlmc.js" -) else if exist "%~dp0..\src\inst\node\dist\node.exe" ( - rem If running in developer/bin/: - set nodeexe="%~dp0..\src\inst\node\dist\node.exe" - set nodecli="%~dp0..\src\kmc\build\src\kmlmc.js" -) else ( - rem Cannot find node or kmlmc.js relative to execution path - echo Error: node.exe or kmlmc.js not found. - exit /b 1 -) - -%nodeexe% --enable-source-maps %nodecli% %* -exit /b %errorlevel% diff --git a/developer/src/tike/kmlmp.cmd b/developer/src/tike/kmlmp.cmd deleted file mode 100644 index 716a5bf940..0000000000 --- a/developer/src/tike/kmlmp.cmd +++ /dev/null @@ -1,20 +0,0 @@ -@echo off -setlocal -rem This script is based on /developer/src/node/inst/kmlmp.cmd. It is stored here -rem in order to allow TIKE to call out to the compiler while debugging. -if exist "%~dp0..\inst\node\dist\node.exe" ( - rem If running in developer/src/tike/: - set nodeexe="%~dp0..\inst\node\dist\node.exe" - set nodecli="%~dp0..\kmc\build\src\kmlmp.js" -) else if exist "%~dp0..\src\inst\node\dist\node.exe" ( - rem If running in developer/bin/: - set nodeexe="%~dp0..\src\inst\node\dist\node.exe" - set nodecli="%~dp0..\src\kmc\build\src\kmlmp.js" -) else ( - rem Cannot find node or kmlmp.js relative to execution path - echo Error: node.exe or kmlmp.js not found. - exit /b 1 -) - -%nodeexe% --enable-source-maps %nodecli% %* -exit /b %errorlevel% diff --git a/package-lock.json b/package-lock.json index 7618527727..f5c4e68d9e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -281,9 +281,7 @@ "supports-color": "^9.4.0" }, "bin": { - "kmc": "build/src/kmc.js", - "kmlmc": "build/src/kmlmc.js", - "kmlmp": "build/src/kmlmp.js" + "kmc": "build/src/kmc.js" }, "devDependencies": { "@sentry/cli": "^2.31.0",