mirror of
https://github.com/keymanapp/keyman.git
synced 2026-09-28 02:27:41 +00:00
chore(developer): Merge branch 'master' into feat/developer/node-based-debugger-server
This commit is contained in:
commit
e569f0aba4
201 changed files with 2465 additions and 2943 deletions
27
HISTORY.md
27
HISTORY.md
|
|
@ -1,5 +1,32 @@
|
|||
# Keyman Version History
|
||||
|
||||
## 15.0.170 alpha 2021-12-16
|
||||
|
||||
* docs(linux): Document how to disable error reporting (#6051)
|
||||
* fix(linux): fix release version number for Sentry reporting (#6052)
|
||||
* fix(linux): Fix package description (#6054)
|
||||
|
||||
## 15.0.169 alpha 2021-12-15
|
||||
|
||||
* fix(mac): display Unicode package name correctly instead of '????' (#6016)
|
||||
* fix(linux): Improve ibus-keyman tests (#6044)
|
||||
|
||||
## 15.0.168 alpha 2021-12-14
|
||||
|
||||
* feat(linux): Add support for Ubuntu 22.04 Jammy (#6037)
|
||||
|
||||
## 15.0.167 alpha 2021-12-13
|
||||
|
||||
* fix(windows): remove unused variable (#6039)
|
||||
|
||||
## 15.0.166 alpha 2021-12-11
|
||||
|
||||
* chore(windows): version.rc use macros instead of mkver (#6019)
|
||||
* chore(windows): move from Borland make to nmake (#6020)
|
||||
* chore(windows): use findstr instead of Borland grep (#6021)
|
||||
* chore(windows): replace mkver with mkver.sh (#6022)
|
||||
* chore(windows): build without delphi (#6030)
|
||||
|
||||
## 15.0.165 alpha 2021-12-08
|
||||
|
||||
* fix(web): font size was not consistently set (#5906)
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
15.0.166
|
||||
15.0.171
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/input-processor",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/input-processor",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"description": "The core text and prediction processing engine for KeymanWeb",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
|
@ -18,8 +18,8 @@
|
|||
},
|
||||
"homepage": "https://github.com/keymanapp/keyman#readme",
|
||||
"devDependencies": {
|
||||
"@keymanapp/lexical-model-compiler": "^15.0.166",
|
||||
"@keymanapp/resources-gosh": "^15.0.166",
|
||||
"@keymanapp/lexical-model-compiler": "^15.0.171",
|
||||
"@keymanapp/resources-gosh": "^15.0.171",
|
||||
"@types/node": "^11.9.4",
|
||||
"chai": "^4.3.4",
|
||||
"mocha": "^8.4.0",
|
||||
|
|
@ -34,11 +34,11 @@
|
|||
"mocha": "mocha"
|
||||
},
|
||||
"dependencies": {
|
||||
"@keymanapp/keyboard-processor": "^15.0.166",
|
||||
"@keymanapp/lexical-model-layer": "^15.0.166",
|
||||
"@keymanapp/models-types": "^15.0.166",
|
||||
"@keymanapp/web-environment": "^15.0.166",
|
||||
"@keymanapp/web-utils": "^15.0.166",
|
||||
"@keymanapp/keyboard-processor": "^15.0.171",
|
||||
"@keymanapp/lexical-model-layer": "^15.0.171",
|
||||
"@keymanapp/models-types": "^15.0.171",
|
||||
"@keymanapp/web-environment": "^15.0.171",
|
||||
"@keymanapp/web-utils": "^15.0.171",
|
||||
"eventemitter3": "^4.0.0"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/keyboard-processor",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/keyboard-processor",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"description": "Core module for Keyman keyboard support in KeymanWeb.",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
|
@ -18,7 +18,7 @@
|
|||
},
|
||||
"homepage": "https://github.com/keymanapp/keyman#readme",
|
||||
"devDependencies": {
|
||||
"@keymanapp/resources-gosh": "^15.0.166",
|
||||
"@keymanapp/resources-gosh": "^15.0.171",
|
||||
"chai": "^4.3.4",
|
||||
"mocha": "^8.4.0",
|
||||
"mocha-teamcity-reporter": "^4.0.0",
|
||||
|
|
@ -32,9 +32,9 @@
|
|||
"mocha": "mocha"
|
||||
},
|
||||
"dependencies": {
|
||||
"@keymanapp/models-types": "^15.0.166",
|
||||
"@keymanapp/web-environment": "^15.0.166",
|
||||
"@keymanapp/web-utils": "^15.0.166",
|
||||
"@keymanapp/models-types": "^15.0.171",
|
||||
"@keymanapp/web-environment": "^15.0.171",
|
||||
"@keymanapp/web-utils": "^15.0.171",
|
||||
"@types/node": "^11.9.4"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
2
common/core/web/tools/recorder/package-lock.json
generated
2
common/core/web/tools/recorder/package-lock.json
generated
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/recorder-core",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/recorder-core",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"description": "Core classes used to develop KeymanWeb test cases based on keystrokes",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
|
|
@ -17,10 +17,10 @@
|
|||
},
|
||||
"homepage": "https://github.com/keymanapp/keyman#readme",
|
||||
"dependencies": {
|
||||
"@keymanapp/keyboard-processor": "^15.0.166",
|
||||
"@keymanapp/models-types": "^15.0.166",
|
||||
"@keymanapp/web-environment": "^15.0.166",
|
||||
"@keymanapp/web-utils": "^15.0.166",
|
||||
"@keymanapp/keyboard-processor": "^15.0.171",
|
||||
"@keymanapp/models-types": "^15.0.171",
|
||||
"@keymanapp/web-environment": "^15.0.171",
|
||||
"@keymanapp/web-utils": "^15.0.171",
|
||||
"@types/node": "^11.9.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/web-sentry-manager",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/web-sentry-manager",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"description": "Common setup for KeymanWeb's Sentry-based error reporting",
|
||||
"main": "dist/index.js",
|
||||
"scripts": {
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
"typescript": "^3.8.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@keymanapp/web-environment": "^15.0.166",
|
||||
"@keymanapp/web-environment": "^15.0.171",
|
||||
"@sentry/browser": "^5.27.4"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
2
common/core/web/utils/package-lock.json
generated
2
common/core/web/utils/package-lock.json
generated
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/web-utils",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/web-utils",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"description": "Common utility functions used throughout other Keyman packages",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
|
|
@ -20,8 +20,8 @@
|
|||
},
|
||||
"homepage": "https://github.com/keymanapp/keyman#readme",
|
||||
"devDependencies": {
|
||||
"@keymanapp/resources-gosh": "^15.0.166",
|
||||
"@keymanapp/web-environment": "^15.0.166",
|
||||
"@keymanapp/resources-gosh": "^15.0.171",
|
||||
"@keymanapp/web-environment": "^15.0.171",
|
||||
"@types/node": "^14.0.5",
|
||||
"typescript": "^3.8.3"
|
||||
}
|
||||
|
|
|
|||
2
common/models/templates/package-lock.json
generated
2
common/models/templates/package-lock.json
generated
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/models-templates",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/models-templates",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"description": "Backing model implementations (templates) for Keyman's modelling layer",
|
||||
"keywords": [
|
||||
"lm",
|
||||
|
|
@ -42,8 +42,8 @@
|
|||
"url": "https://github.com/keymanapp/keyman/issues"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@keymanapp/models-types": "^15.0.166",
|
||||
"@keymanapp/web-utils": "^15.0.166",
|
||||
"@keymanapp/models-types": "^15.0.171",
|
||||
"@keymanapp/web-utils": "^15.0.171",
|
||||
"@types/chai": "^4.2.11",
|
||||
"@types/mocha": "^7.0.2",
|
||||
"@types/node": "^14.0.4",
|
||||
|
|
@ -52,6 +52,6 @@
|
|||
"typescript": "^3.8.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@keymanapp/models-wordbreakers": "^15.0.166"
|
||||
"@keymanapp/models-wordbreakers": "^15.0.171"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
2
common/models/types/package-lock.json
generated
2
common/models/types/package-lock.json
generated
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/models-types",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/models-types",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"description": "Type definitions in used in the modeling (lexical model/predictive text) component of Keyman.",
|
||||
"types": "./index.d.ts",
|
||||
"scripts": {
|
||||
|
|
|
|||
2
common/models/wordbreakers/package-lock.json
generated
2
common/models/wordbreakers/package-lock.json
generated
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/models-wordbreakers",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/models-wordbreakers",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"description": "Word breakers bundled in the modeling layer",
|
||||
"keywords": [
|
||||
"lexical model",
|
||||
|
|
@ -40,7 +40,7 @@
|
|||
"url": "https://github.com/keymanapp/keyman/issues"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@keymanapp/models-types": "^15.0.166",
|
||||
"@keymanapp/models-types": "^15.0.171",
|
||||
"@types/chai": "^4.2.11",
|
||||
"@types/mocha": "^7.0.2",
|
||||
"chai": "^4.3.4",
|
||||
|
|
|
|||
2
common/predictive-text/package-lock.json
generated
2
common/predictive-text/package-lock.json
generated
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/lexical-model-layer",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/lexical-model-layer",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"description": "Keyman/Predictive Text integration layer",
|
||||
"main": "build/index.js",
|
||||
"scripts": {
|
||||
|
|
@ -21,8 +21,8 @@
|
|||
},
|
||||
"homepage": "https://github.com/keymanapp/keyman#readme",
|
||||
"devDependencies": {
|
||||
"@keymanapp/models-types": "^15.0.166",
|
||||
"@keymanapp/resources-gosh": "^15.0.166",
|
||||
"@keymanapp/models-types": "^15.0.171",
|
||||
"@keymanapp/resources-gosh": "^15.0.171",
|
||||
"@types/node": "^10.17.21",
|
||||
"chai": "^4.3.4",
|
||||
"karma": "^6.3.4",
|
||||
|
|
@ -46,10 +46,10 @@
|
|||
"typescript": "^3.8.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@keymanapp/models-templates": "^15.0.166",
|
||||
"@keymanapp/models-wordbreakers": "^15.0.166",
|
||||
"@keymanapp/web-environment": "^15.0.166",
|
||||
"@keymanapp/web-utils": "^15.0.166",
|
||||
"@keymanapp/models-templates": "^15.0.171",
|
||||
"@keymanapp/models-wordbreakers": "^15.0.171",
|
||||
"@keymanapp/web-environment": "^15.0.171",
|
||||
"@keymanapp/web-utils": "^15.0.171",
|
||||
"es6-shim": "^0.35.5",
|
||||
"string.prototype.codepointat": "^0.2.1",
|
||||
"string.prototype.startswith": "^0.2.0"
|
||||
|
|
|
|||
2
developer/js/package-lock.json
generated
2
developer/js/package-lock.json
generated
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/lexical-model-compiler",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/lexical-model-compiler",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"description": "Keyman Developer lexical model compiler",
|
||||
"keywords": [
|
||||
"keyboard",
|
||||
|
|
@ -37,14 +37,14 @@
|
|||
"node": ">=12.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@keymanapp/models-types": "^15.0.166",
|
||||
"@keymanapp/models-types": "^15.0.171",
|
||||
"commander": "^3.0.0",
|
||||
"typescript": "^3.8.3",
|
||||
"xml2js": "^0.4.19"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@keymanapp/models-templates": "^15.0.166",
|
||||
"@keymanapp/models-wordbreakers": "^15.0.166",
|
||||
"@keymanapp/models-templates": "^15.0.171",
|
||||
"@keymanapp/models-wordbreakers": "^15.0.171",
|
||||
"@types/chai": "^4.1.7",
|
||||
"@types/mocha": "^5.2.7",
|
||||
"@types/node": "^10.14.6",
|
||||
|
|
|
|||
16
docs/build/windows.md
vendored
16
docs/build/windows.md
vendored
|
|
@ -147,18 +147,26 @@ choco install git jq python ninja pandoc
|
|||
refreshenv
|
||||
# choco meson (0.55) is too old, 0.56 required:
|
||||
python -m pip install meson
|
||||
|
||||
# choco rustup is not currently working:
|
||||
Invoke-WebRequest -Uri https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe -OutFile $env:TEMP\rustup-init.exe
|
||||
& "$env:TEMP\rustup-init.exe"
|
||||
refreshenv
|
||||
```
|
||||
|
||||
Restart PowerShell (because `refreshenv` doesn't seem to pick up the rust environment), then
|
||||
```ps1
|
||||
# Elevated Powershell
|
||||
rustup target add i686-pc-windows-msvc
|
||||
```
|
||||
|
||||
**Environment variables**:
|
||||
* [`KEYMAN_ROOT`](#keyman_root)
|
||||
* `PATH`: add your Python scripts folder to your path: it will normally be `%appdata%\Python\Python310\Scripts`.
|
||||
|
||||
```bat
|
||||
SET KEYMAN_ROOT=c:\Projects\keyman\keyman
|
||||
SET PATH=%path%;%appdata%\Python\Python310\Scripts
|
||||
```
|
||||
|
||||
To check whether environment variables are set, run `SET <variable>` in command
|
||||
|
|
@ -223,6 +231,14 @@ Invoke-WebRequest -Uri https://github.com/rustwasm/wasm-pack/releases/download/v
|
|||
Start Delphi IDE once after installation as it will create various environment
|
||||
files and take you through required registration.
|
||||
|
||||
* Note: It is possible to build all components that do _not_ require Delphi by
|
||||
adding the environment variable `NODELPHI=1` before starting the build.
|
||||
Currently many components are Delphi-based, but if you are working just in
|
||||
Keyman Core, the compiler, or Keyman Engine's C++ components, you may be
|
||||
able to get away without building them. In this situation, we recommend
|
||||
copying the relevant Delphi-built components into windows/bin folders from a
|
||||
compatible installed version of Keyman for testing and debugging purposes.
|
||||
|
||||
* Visual C++ 2019 Community or Professional
|
||||
|
||||
```ps1
|
||||
|
|
|
|||
|
|
@ -20,5 +20,5 @@
|
|||
"ts-node",
|
||||
"typescript"
|
||||
],
|
||||
"version": "15.0.166"
|
||||
"version": "15.0.171"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ DEBIAN_SUITES=($UNSTABLE_CODENAME $TESTING_CODENAME $STABLE_CODENAME $STABLE_BAC
|
|||
"experimental" "unstable" "testing" "stable")
|
||||
|
||||
# List of Ubuntu suites. Update these when needed.
|
||||
UBUNTU_SUITES=("impish" "hirsute" "groovy" "focal" "bionic")
|
||||
UBUNTU_SUITES=("jammy" "impish" "hirsute" "focal" "bionic")
|
||||
|
||||
# Mirrors to use. Update these to your preferred mirror.
|
||||
DEBIAN_MIRROR="deb.debian.org"
|
||||
|
|
|
|||
2
linux/Jenkinsfile
vendored
2
linux/Jenkinsfile
vendored
|
|
@ -5,7 +5,7 @@
|
|||
@Library('lsdev-pipeline-library') _
|
||||
|
||||
keymanPackaging {
|
||||
distributionsToPackage = 'bionic focal hirsute'
|
||||
distributionsToPackage = 'bionic focal hirsute jammy'
|
||||
arches = 'amd64 i386'
|
||||
packagesToBuild = ['keyman', 'kmflcomp', 'libkmfl', 'ibus-kmfl']
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,24 +7,24 @@
|
|||
<project_group>Keyman</project_group>
|
||||
<developer_name>SIL International</developer_name>
|
||||
<icon type="remote" width="96" height="96">https://keyman.com/cdn/dev/img/keyman-logo.png</icon>
|
||||
<name>Keyman Keyboards</name>
|
||||
<summary>Keyman makes it possible for you to type in over 1,000 languages</summary>
|
||||
<name>Keyman for Linux</name>
|
||||
<summary>Keyman makes it possible for you to type in over 2,000 languages</summary>
|
||||
|
||||
<description>
|
||||
<p>
|
||||
Keyman makes it possible for you to type in over 1,000 languages on Windows, macOS, Linux,
|
||||
Keyman makes it possible for you to type in over 2,000 languages on Windows, macOS, Linux,
|
||||
iPhone, iPad, Android tablets and phones, and even instantly in your web browser. With the
|
||||
world’s most powerful keyboarding engine, intuitive and rapid text input is now possible in
|
||||
your language, and for over 99% of the global population’s mother tongues!
|
||||
</p>
|
||||
<p>
|
||||
Originally created in 1993 to type Lao on Windows, Keyman is now a free and
|
||||
open source keyboarding platform which allows anyone to write a keyboard layout
|
||||
Originally created in 1993 to type Lao on Windows, Keyman is now a free and
|
||||
open source keyboarding platform which allows anyone to write and use a keyboard layout
|
||||
for their language. Keyman is available for many platforms, including Windows,
|
||||
macOS, iOS, Android, Linux and the web.
|
||||
</p>
|
||||
<p>
|
||||
Keyboard layouts are defined with a clear and easy to understand keyboard
|
||||
Keyboard layouts are defined with a clear and easy to understand keyboard
|
||||
grammar. Keyman's contextual input model means keyboard layouts can be
|
||||
intelligent and make it simple to type even the most complex languages.
|
||||
Keyboard layouts are distributed through an open catalog to all major desktop
|
||||
|
|
@ -39,7 +39,7 @@ and mobile platforms.
|
|||
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<caption>The Keyman Keyboards main window with a keyboard welcome window.</caption>
|
||||
<caption>The Keyman for Linux configuration window with a keyboard welcome window.</caption>
|
||||
<image type="source" width="920" height="518">https://keyman.com/go/linux/11.0/linux-configuration.png</image>
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
|
|
|
|||
|
|
@ -12,8 +12,7 @@
|
|||
<description>
|
||||
<p>
|
||||
This input method provides the Keyman IM engine for IBus. With this module, you can
|
||||
use keyboard layouts designed for Keyman version 11 or earlier under the IBus
|
||||
platform.
|
||||
use keyboard layouts designed for Keyman under the IBus platform.
|
||||
</p>
|
||||
<p>
|
||||
Originally created in 1993 to type Lao on Windows, Keyman is now a free and
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ Depends:
|
|||
Recommends:
|
||||
onboard-keyman,
|
||||
Description: Type in your language with Keyman for Linux
|
||||
Keyman makes it possible for you to type in over 1,000 languages on Windows,
|
||||
Keyman makes it possible for you to type in over 2,000 languages on Windows,
|
||||
macOS, Linux, iPhone, iPad, Android tablets and phones, and even instantly
|
||||
in your web browser. With the world’s most powerful keyboarding engine,
|
||||
intuitive and rapid text input is now possible in your language, and for
|
||||
|
|
@ -98,8 +98,8 @@ Description: Keyman for Linux configuration
|
|||
Keyboard layouts are distributed through an open catalog to all major desktop
|
||||
and mobile platforms.
|
||||
.
|
||||
Python module to install, uninstall and view information about Keyman
|
||||
keyboard packages.
|
||||
This package contains the Python module to install, uninstall and view
|
||||
information about Keyman keyboard packages.
|
||||
|
||||
Package: libkmnkbp-dev
|
||||
Architecture: amd64 arm64 armel armhf i386 mipsel mips64el ppc64el riscv64
|
||||
|
|
@ -121,7 +121,7 @@ Description: Development files for Keyman keyboard processing library
|
|||
and mobile platforms.
|
||||
.
|
||||
The Keyman keyboardprocessor library processes input from input method engines
|
||||
and applies rules from compiled Keyman 11 or earlier kmx keyboard files.
|
||||
and applies rules from compiled Keyman keyboard files.
|
||||
.
|
||||
This package contains development headers and libraries.
|
||||
|
||||
|
|
@ -149,7 +149,7 @@ Description: Keyman keyboard processing library
|
|||
and mobile platforms.
|
||||
.
|
||||
The Keyman keyboardprocessor library processes input from input method engines
|
||||
and applies rules from compiled Keyman 11 or earlier kmx keyboard files.
|
||||
and applies rules from compiled Keyman keyboard files.
|
||||
|
||||
Package: ibus-keyman
|
||||
Architecture: amd64 arm64 armel armhf i386 mipsel mips64el ppc64el riscv64
|
||||
|
|
@ -173,9 +173,8 @@ Description: Keyman engine for IBus
|
|||
Keyboard layouts are distributed through an open catalog to all major desktop
|
||||
and mobile platforms.
|
||||
.
|
||||
IBus-keyman is a IM (input method) Engine for multiple languages, based on
|
||||
ibus-keyman is a IM (input method) Engine for multiple languages, based on
|
||||
IBus.
|
||||
.
|
||||
This package provides the Keyman IM engine for IBus. With this module, you
|
||||
can use keyboard layouts designed for Keyman version 11 or earlier under the
|
||||
IBus platform.
|
||||
can use keyboard layouts designed for Keyman under the IBus platform.
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
[Desktop Entry]
|
||||
Name=Keyman Keyboards
|
||||
Name[en_GB]=Keyman Keyboards
|
||||
Comment=Configure Keyman keyboards
|
||||
Comment[en_GB]=Configure Keyman keyboards
|
||||
Name=Keyman Configuration
|
||||
Name[en_GB]=Keyman Configuration
|
||||
Comment=Configure Keyman for Linux keyboards
|
||||
Comment[en_GB]=Configure Keyman for Linux keyboards
|
||||
Exec=km-config %u
|
||||
Icon=km-config
|
||||
Terminal=false
|
||||
|
|
|
|||
|
|
@ -64,3 +64,14 @@ sudo dpkg --purge ibus-kmfl libkmfl
|
|||
|
||||
**A.** Most keyboards will work without change. A small subset of keyboards require features which
|
||||
are not yet available in Keyman for Linux. These features will be progressively implemented.
|
||||
|
||||
## Q. How can I disable automatically reporting errors?
|
||||
|
||||
**A.** If Keyman crashes, it will automatically send a report to the development team. This report
|
||||
is anonymous and contains only technical details relating to the crash. It does not include keystroke
|
||||
data or personally identifying data. If you don't want these automatic error reports to be sent you
|
||||
can set the environment variable `KEYMAN_NOSENTRY`:
|
||||
|
||||
```bash
|
||||
export KEYMAN_NOSENTRY=1
|
||||
```
|
||||
|
|
|
|||
|
|
@ -347,6 +347,7 @@ static void test_source(IBusKeymanTestsFixture *fixture, gconstpointer user_data
|
|||
keyman_put_options_todconf(data->test_name, data->test_name, key, value);
|
||||
}
|
||||
}
|
||||
g_settings_sync();
|
||||
|
||||
switch_keyboard(fixture, kmxfile.c_str());
|
||||
if (test_source.caps_lock_state() != get_caps_lock_state(fixture)) {
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ else:
|
|||
sentry_sdk.init(
|
||||
dsn=SentryUrl,
|
||||
environment=__environment__,
|
||||
release=__version__,
|
||||
release='release-' + __versionwithtag__,
|
||||
integrations=[sentry_logging],
|
||||
)
|
||||
set_user({'id': hash(getpass.getuser())})
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
# If needed set cowbuilder up for building Keyman Debian packages
|
||||
# Then cowbuilder update
|
||||
|
||||
distributions='bionic focal hirsute impish'
|
||||
distributions='bionic focal hirsute impish jammy'
|
||||
|
||||
dpkgcheck=`dpkg-query -l cowbuilder`
|
||||
if [ $? != 0 ]; then
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ echo "ppa: ${ppa}"
|
|||
if [ "${DIST}" != "" ]; then
|
||||
distributions="${DIST}"
|
||||
else
|
||||
distributions="bionic focal hirsute impish"
|
||||
distributions="bionic focal hirsute impish jammy"
|
||||
fi
|
||||
|
||||
if [ "${PACKAGEVERSION}" != "" ]; then
|
||||
|
|
|
|||
|
|
@ -283,7 +283,7 @@ CGEventRef eventTapFunction(CGEventTapProxy proxy, CGEventType type, CGEventRef
|
|||
}
|
||||
|
||||
NSString *packagePath = [kmxPath stringByDeletingLastPathComponent];
|
||||
NSDictionary *infoDict = [KMXFile infoDictionaryFromFilePath:kmxPath];
|
||||
NSDictionary *infoDict = [KMXFile keyboardInfoFromKmxFile:kmxPath];
|
||||
NSString *kvkFilename = [infoDict objectForKey:kKMVisualKeyboardKey];
|
||||
if (kvkFilename && [kvkFilename length]) {
|
||||
NSString *kvkPath = [packagePath stringByAppendingPathComponent:kvkFilename];
|
||||
|
|
@ -328,7 +328,7 @@ CGEventRef eventTapFunction(CGEventTapProxy proxy, CGEventType type, CGEventRef
|
|||
self.kmxList = [NSMutableArray arrayWithArray:[self KMXFiles]];
|
||||
NSMutableArray *kmxDesc = [[NSMutableArray alloc] initWithCapacity:0];
|
||||
for (NSString *path in self.kmxList) {
|
||||
NSDictionary *infoDict = [KMXFile infoDictionaryFromFilePath:path];
|
||||
NSDictionary *infoDict = [KMXFile keyboardInfoFromKmxFile:path];
|
||||
if (!infoDict)
|
||||
continue;
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,9 @@
|
|||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
290BC680274B9DB1005CD1C3 /* KMPackageInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 290BC67F274B9DB1005CD1C3 /* KMPackageInfo.m */; };
|
||||
290BC75E274F3FD7005CD1C3 /* KMKeyboardInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 290BC75D274F3FD7005CD1C3 /* KMKeyboardInfo.m */; };
|
||||
296FE2FC275DD21600F46898 /* KMPackageReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 296FE2FB275DD21600F46898 /* KMPackageReader.m */; };
|
||||
293EA3E627140D8100545EED /* KMAboutWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 293EA3E827140D8100545EED /* KMAboutWindowController.xib */; };
|
||||
293EA3EB27140DEC00545EED /* preferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = 293EA3ED27140DEC00545EED /* preferences.xib */; };
|
||||
293EA3F427181FDA00545EED /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 293EA3F627181FDA00545EED /* Localizable.strings */; };
|
||||
|
|
@ -122,6 +125,12 @@
|
|||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
290BC67E274B9DB1005CD1C3 /* KMPackageInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KMPackageInfo.h; sourceTree = "<group>"; };
|
||||
290BC67F274B9DB1005CD1C3 /* KMPackageInfo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KMPackageInfo.m; sourceTree = "<group>"; };
|
||||
290BC75C274F3FD7005CD1C3 /* KMKeyboardInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KMKeyboardInfo.h; sourceTree = "<group>"; };
|
||||
290BC75D274F3FD7005CD1C3 /* KMKeyboardInfo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KMKeyboardInfo.m; sourceTree = "<group>"; };
|
||||
296FE2FA275DD21600F46898 /* KMPackageReader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KMPackageReader.h; sourceTree = "<group>"; };
|
||||
296FE2FB275DD21600F46898 /* KMPackageReader.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KMPackageReader.m; sourceTree = "<group>"; };
|
||||
293EA3E527140D3A00545EED /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||
293EA3E727140D8100545EED /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/KMAboutWindowController.xib; sourceTree = "<group>"; };
|
||||
293EA3EA27140D8E00545EED /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/KMAboutWindowController.strings; sourceTree = "<group>"; };
|
||||
|
|
@ -437,6 +446,12 @@
|
|||
E240F598202DED740000067D /* KMPackage.m */,
|
||||
9A3D6C5B221531B0008785A3 /* KMOSVersion.h */,
|
||||
9A3D6C5C221531B0008785A3 /* KMOSVersion.m */,
|
||||
290BC67E274B9DB1005CD1C3 /* KMPackageInfo.h */,
|
||||
290BC75C274F3FD7005CD1C3 /* KMKeyboardInfo.h */,
|
||||
290BC75D274F3FD7005CD1C3 /* KMKeyboardInfo.m */,
|
||||
290BC67F274B9DB1005CD1C3 /* KMPackageInfo.m */,
|
||||
296FE2FA275DD21600F46898 /* KMPackageReader.h */,
|
||||
296FE2FB275DD21600F46898 /* KMPackageReader.m */,
|
||||
293EA3F627181FDA00545EED /* Localizable.strings */,
|
||||
);
|
||||
path = Keyman4MacIM;
|
||||
|
|
@ -808,6 +823,7 @@
|
|||
98F3C8931A8D739500F675E3 /* KMConfigurationWindowController.m in Sources */,
|
||||
9A3D6C5D221531B0008785A3 /* KMOSVersion.m in Sources */,
|
||||
989C9C111A7876DE00A20425 /* main.m in Sources */,
|
||||
290BC680274B9DB1005CD1C3 /* KMPackageInfo.m in Sources */,
|
||||
98BF924F1BF02DC20002126A /* KMBarView.m in Sources */,
|
||||
E240F599202DED740000067D /* KMPackage.m in Sources */,
|
||||
984B8F441AF1C3D900E096A8 /* OSKWindowController.m in Sources */,
|
||||
|
|
@ -821,12 +837,14 @@
|
|||
98BF92441BF01CBE0002126A /* KMAboutWindowController.m in Sources */,
|
||||
98FE10631B4DEE5600525F54 /* KMInfoWindowController.m in Sources */,
|
||||
9836B3721AE5F11D00780482 /* unzip.c in Sources */,
|
||||
296FE2FC275DD21600F46898 /* KMPackageReader.m in Sources */,
|
||||
9832472E1A9EABC70010B90C /* KMConfigColumn1CellView.m in Sources */,
|
||||
E22020F6200506F300B74FAC /* KMInputMethodSafariClientEventHandler.m in Sources */,
|
||||
E24C79EA1FFFCC7500D8E46F /* KMInputMethodBrowserClientEventHandler.m in Sources */,
|
||||
98FE105E1B4DE8F400525F54 /* NSWindow+SuppMethods.m in Sources */,
|
||||
9836B3741AE5F11D00780482 /* ZipArchive.mm in Sources */,
|
||||
983247B21A9EB9690010B90C /* KMConfigColumn3CellView.m in Sources */,
|
||||
290BC75E274F3FD7005CD1C3 /* KMKeyboardInfo.m in Sources */,
|
||||
98BF92521BF03D4D0002126A /* KMAboutBGView.m in Sources */,
|
||||
98BF92571BF0431F0002126A /* KMAboutWindow.m in Sources */,
|
||||
98BCD1F61B4E5998004E1AFD /* NSString+SuppMethods.m in Sources */,
|
||||
|
|
|
|||
|
|
@ -133,17 +133,17 @@
|
|||
if ([obj isKindOfClass:[NSArray class]]) {
|
||||
NSArray *pArray = (NSArray *)obj;
|
||||
NSString *packageFolder = [self packageFolderFromPath:[pArray objectAtIndex:0]];
|
||||
NSString *packageName = [self packageNameFromFolder:packageFolder];
|
||||
NSString *packageName = [self.AppDelegate packageNameFromPackageInfo:packageFolder];
|
||||
[_tableContents addObject:[NSDictionary dictionaryWithObjectsAndKeys:packageName, @"HeaderTitle", nil]];
|
||||
for (NSString *path in pArray) {
|
||||
NSDictionary *info = [KMXFile infoDictionaryFromFilePath:path];
|
||||
NSDictionary *info = [KMXFile keyboardInfoFromKmxFile:path];
|
||||
if (info)
|
||||
[_tableContents addObject:info];
|
||||
}
|
||||
}
|
||||
else {
|
||||
NSString *path = (NSString *)obj;
|
||||
NSDictionary *info = [KMXFile infoDictionaryFromFilePath:path];
|
||||
NSDictionary *info = [KMXFile keyboardInfoFromKmxFile:path];
|
||||
if (info)
|
||||
[_tableContents addObject:info];
|
||||
}
|
||||
|
|
@ -169,10 +169,6 @@
|
|||
return [self.AppDelegate packageFolderFromPath:path];
|
||||
}
|
||||
|
||||
- (NSString *)packageNameFromFolder:(NSString *)packageFolder {
|
||||
return [self.AppDelegate packageNameFromFolder:packageFolder];
|
||||
}
|
||||
|
||||
- (NSString *)keyboardsPath {
|
||||
return self.AppDelegate.keyboardsPath;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@
|
|||
|
||||
#import "KMInfoWindowController.h"
|
||||
#import "KMInputMethodAppDelegate.h"
|
||||
#import "KMPackageInfo.h"
|
||||
#import "KMKeyboardInfo.h"
|
||||
#import <WebKit/WebKit.h>
|
||||
|
||||
@interface KMInfoWindowController ()
|
||||
|
|
@ -15,7 +17,7 @@
|
|||
@property (nonatomic, weak) IBOutlet NSTabView *tabView;
|
||||
@property (nonatomic, weak) IBOutlet WebView *detailsView;
|
||||
@property (nonatomic, weak) IBOutlet WebView *readmeView;
|
||||
@property (nonatomic, strong) NSDictionary *infoDict;
|
||||
@property (nonatomic, strong) KMPackageInfo *packageInfo;
|
||||
@property (nonatomic, strong) NSTabViewItem *readMeTab;
|
||||
@end
|
||||
|
||||
|
|
@ -27,6 +29,8 @@
|
|||
|
||||
- (void)windowDidLoad {
|
||||
[super windowDidLoad];
|
||||
// TODO: rename
|
||||
[self.window setTitle:@"Keyboard/Package Info"];
|
||||
[self.tabView setDelegate:self];
|
||||
[self.detailsView setFrameLoadDelegate:(id<WebFrameLoadDelegate>)self];
|
||||
[self.detailsView setPolicyDelegate:(id<WebPolicyDelegate>)self];
|
||||
|
|
@ -34,12 +38,13 @@
|
|||
[self.readmeView setPolicyDelegate:(id<WebPolicyDelegate>)self];
|
||||
}
|
||||
|
||||
// TODO: rename, refactor, reset PackageInfo directly rather than making getter do it?
|
||||
- (void)setPackagePath:(NSString *)packagePath {
|
||||
_packagePath = packagePath;
|
||||
_infoDict = nil;
|
||||
_packageInfo = nil;
|
||||
[self.tabView selectTabViewItemAtIndex:0];
|
||||
if (packagePath != nil && packagePath.length) {
|
||||
NSString *imgName = [self.infoDict objectForKey:kGraphicFile];
|
||||
NSString *imgName = self.packageInfo.graphicFilename;
|
||||
if (imgName != nil) {
|
||||
NSString *imgFile = [packagePath stringByAppendingPathComponent:imgName];
|
||||
NSImage *img = [[NSImage alloc] initWithContentsOfFile:imgFile];
|
||||
|
|
@ -55,9 +60,9 @@
|
|||
else
|
||||
[self.detailsView.mainFrame loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
|
||||
|
||||
NSString *readMeFile = [self.infoDict objectForKey:kReadMeFile];
|
||||
if (readMeFile != nil) {
|
||||
[self.readmeView.mainFrame loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[packagePath stringByAppendingPathComponent:readMeFile]]]];
|
||||
NSString *readmeFilename = self.packageInfo.readmeFilename;
|
||||
if (readmeFilename != nil) {
|
||||
[self.readmeView.mainFrame loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[packagePath stringByAppendingPathComponent:readmeFilename]]]];
|
||||
if (_readMeTab != nil && ![self.tabView.tabViewItems containsObject:_readMeTab]) {
|
||||
[self.tabView addTabViewItem:_readMeTab];
|
||||
_readMeTab = nil;
|
||||
|
|
@ -120,33 +125,22 @@
|
|||
"</html>";
|
||||
|
||||
NSString *pBodyFormat = @"<p class='body'>%@</p><br>";
|
||||
NSMutableString *kbsStr = [NSMutableString stringWithString:@""];
|
||||
NSArray *kbs = [[self AppDelegate] keyboardNamesFromFolder:self.packagePath];
|
||||
if (kbs != nil && kbs.count) {
|
||||
for (NSArray *kbName in kbs) {
|
||||
[kbsStr appendString:[NSString stringWithFormat:pBodyFormat, kbName]];
|
||||
}
|
||||
}
|
||||
else {
|
||||
// This was the old logic (prior to fixing issue #994). Keeping as fallback, though
|
||||
// it's unlikely to be useful/needed.
|
||||
kbs = [self.infoDict objectForKey:kKeyboard];
|
||||
NSMutableString *keyboardString = [NSMutableString stringWithString:@""];
|
||||
|
||||
if (kbs != nil && kbs.count) {
|
||||
for (NSArray *kb in kbs) {
|
||||
[kbsStr appendString:[NSString stringWithFormat:pBodyFormat, [kb objectAtIndex:0]]];
|
||||
}
|
||||
}
|
||||
else {
|
||||
kbsStr = [NSMutableString stringWithString:@"<p class='body'><none></p><br>"];
|
||||
if (self.packageInfo.keyboards.count) {
|
||||
for (KMKeyboardInfo *keyboard in self.packageInfo.keyboards) {
|
||||
[keyboardString appendString:[NSString stringWithFormat:pBodyFormat, keyboard.name]];
|
||||
}
|
||||
} else {
|
||||
keyboardString = [NSMutableString stringWithString:@"<p class='body'><none></p><br>"];
|
||||
}
|
||||
|
||||
NSArray *fonts = [self.infoDict objectForKey:kFont];
|
||||
|
||||
NSArray *fonts = self.packageInfo.fonts;
|
||||
NSMutableString *fontsStr = [NSMutableString stringWithString:@""];
|
||||
|
||||
if (fonts != nil && fonts.count) {
|
||||
for (NSArray *font in fonts) {
|
||||
[fontsStr appendString:[NSString stringWithFormat:pBodyFormat, [font objectAtIndex:0]]];
|
||||
for (NSString *font in fonts) {
|
||||
[fontsStr appendString:[NSString stringWithFormat:pBodyFormat, font]];
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
|
@ -158,16 +152,17 @@
|
|||
|
||||
KeymanVersionInfo keymanVersionInfo = [[self AppDelegate] versionInfo];
|
||||
NSString *shareUrl = [NSString stringWithFormat:@"https://%@/go/keyboard/%@/share", keymanVersionInfo.keymanCom, packageId];
|
||||
NSString *name = [[self.infoDict objectForKey:kName] objectAtIndex:0];
|
||||
|
||||
NSString *name = self.packageInfo.packageName;
|
||||
if (name == nil)
|
||||
name = @"Unknown Keyboard Package";
|
||||
|
||||
NSString *version = [[self.infoDict objectForKey:kVersion] objectAtIndex:0];
|
||||
NSString *version = self.packageInfo.packageVersion;
|
||||
if (version == nil)
|
||||
version = @"";
|
||||
|
||||
NSString *authorV1 = [[self.infoDict objectForKey:kAuthor] objectAtIndex:0];
|
||||
NSString *authorV2 = [[self.infoDict objectForKey:kAuthor] objectAtIndex:1];
|
||||
NSString *authorV1 = self.packageInfo.authorName;
|
||||
NSString *authorV2 = self.packageInfo.authorUrl;
|
||||
NSString *author = @"";
|
||||
if (authorV1.length && authorV2.length)
|
||||
author = [NSString stringWithFormat:linkFormat, authorV2, authorV1];
|
||||
|
|
@ -175,29 +170,17 @@
|
|||
author = authorV1;
|
||||
else if (authorV2.length)
|
||||
author = [NSString stringWithFormat:linkFormat, authorV2, authorV2];
|
||||
|
||||
NSString *websiteV1 = [[self.infoDict objectForKey:kWebSite] objectAtIndex:0];
|
||||
NSString *websiteV2 = [[self.infoDict objectForKey:kWebSite] objectAtIndex:1];
|
||||
|
||||
NSString *website = @"";
|
||||
if (websiteV1.length && websiteV2.length)
|
||||
website = [NSString stringWithFormat:linkFormat, websiteV2, websiteV1];
|
||||
else if (websiteV1.length)
|
||||
website = websiteV1;
|
||||
else if (websiteV2.length)
|
||||
website = [NSString stringWithFormat:linkFormat, websiteV2, websiteV2];
|
||||
if (self.packageInfo.website.length)
|
||||
website = [NSString stringWithFormat:linkFormat, self.packageInfo.website, self.packageInfo.website];
|
||||
|
||||
NSString *copyrightV1 = [[self.infoDict objectForKey:kCopyright] objectAtIndex:0];
|
||||
NSString *copyrightV2 = [[self.infoDict objectForKey:kCopyright] objectAtIndex:1];
|
||||
NSString *copyright = @"";
|
||||
if (copyrightV1.length && copyrightV2.length)
|
||||
copyright = [NSString stringWithFormat:linkFormat, copyrightV2, copyrightV1];
|
||||
else if (copyrightV1.length)
|
||||
copyright = copyrightV1;
|
||||
else if (copyrightV2.length)
|
||||
copyright = [NSString stringWithFormat:linkFormat, copyrightV2, copyrightV2];
|
||||
if (self.packageInfo.copyright.length)
|
||||
copyright = self.packageInfo.copyright;
|
||||
|
||||
NSString *htmlStr = [NSString stringWithFormat:htmlFormat, name, shareUrl, shareUrl,
|
||||
kbsStr, fontsStr, version, author, website, copyright];
|
||||
keyboardString, fontsStr, version, author, website, copyright];
|
||||
|
||||
return htmlStr;
|
||||
}
|
||||
|
|
@ -207,13 +190,12 @@
|
|||
}
|
||||
}
|
||||
|
||||
- (NSDictionary *)infoDict {
|
||||
if (_infoDict == nil) {
|
||||
NSString *infoFile = [self.packagePath stringByAppendingPathComponent:@"kmp.inf"];
|
||||
_infoDict = [self.AppDelegate infoDictionaryFromFile:infoFile];
|
||||
- (KMPackageInfo *)packageInfo {
|
||||
if(_packageInfo == nil) {
|
||||
_packageInfo = [self.AppDelegate loadPackageInfo:self.packagePath];
|
||||
}
|
||||
|
||||
return _infoDict;
|
||||
|
||||
return _packageInfo;
|
||||
}
|
||||
|
||||
- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id<WebPolicyDecisionListener>)listener {
|
||||
|
|
|
|||
|
|
@ -224,7 +224,7 @@ NSMutableArray *servers;
|
|||
KMXFile *kmx = [[KMXFile alloc] initWithFilePath:path];
|
||||
[self.AppDelegate setKmx:kmx];
|
||||
KVKFile *kvk = nil;
|
||||
NSDictionary *kmxInfo = [KMXFile infoDictionaryFromFilePath:path];
|
||||
NSDictionary *kmxInfo = [KMXFile keyboardInfoFromKmxFile:path];
|
||||
NSString *kvkFilename = [kmxInfo objectForKey:kKMVisualKeyboardKey];
|
||||
if (kvkFilename != nil) {
|
||||
NSString *kvkFilePath = [self.AppDelegate kvkFilePathFromFilename:kvkFilename];
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
#import <Foundation/Foundation.h>
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import <KeymanEngine4Mac/KeymanEngine4Mac.h>
|
||||
#import "KMPackageReader.h"
|
||||
#import "KMInputController.h"
|
||||
#import "KMAboutWindowController.h"
|
||||
#import "KMInfoWindowController.h"
|
||||
|
|
@ -26,24 +27,6 @@ extern NSString *const kKMSelectedKeyboardKey;
|
|||
extern NSString *const kKMActiveKeyboardsKey;
|
||||
extern NSString *const kKeymanKeyboardDownloadCompletedNotification;
|
||||
|
||||
extern NSString *const kPackage;
|
||||
extern NSString *const kButtons;
|
||||
extern NSString *const kStartMenu;
|
||||
extern NSString *const kStartMenuEntries;
|
||||
extern NSString *const kInfo;
|
||||
extern NSString *const kFiles;
|
||||
|
||||
extern NSString *const kAuthor;
|
||||
extern NSString *const kCopyright;
|
||||
extern NSString *const kFile;
|
||||
extern NSString *const kFont;
|
||||
extern NSString *const kGraphicFile;
|
||||
extern NSString *const kKeyboard;
|
||||
extern NSString *const kName;
|
||||
extern NSString *const kReadMeFile;
|
||||
extern NSString *const kVersion;
|
||||
extern NSString *const kWebSite;
|
||||
|
||||
typedef struct {
|
||||
NSString *sentryEnvironment;
|
||||
NSString *versionRelease;
|
||||
|
|
@ -118,9 +101,9 @@ typedef struct {
|
|||
- (NSString *)packagePathAtIndex:(NSUInteger)index;
|
||||
- (NSInteger)indexForPackageFolder:(NSString *)packageFolder;
|
||||
- (NSString *)packageFolderFromPath:(NSString *)path;
|
||||
- (NSString *)packageNameFromFolder:(NSString *)packageFolder;
|
||||
- (KMPackageInfo *)loadPackageInfo:(NSString *)path;
|
||||
- (NSString *)packageNameFromPackageInfo:(NSString *)packageFolder;
|
||||
- (NSArray *)keyboardNamesFromFolder:(NSString *)packageFolder;
|
||||
- (NSDictionary *)infoDictionaryFromFile:(NSString *)infoFile;
|
||||
- (NSString *)kvkFilePathFromFilename:(NSString *)kvkFilename;
|
||||
- (NSString *)oskWindowTitle;
|
||||
- (void)postKeyboardEventWithSource: (CGEventSourceRef)source code:(CGKeyCode) virtualKey postCallback:(PostEventCallback)postEvent;
|
||||
|
|
|
|||
|
|
@ -19,6 +19,9 @@
|
|||
#import "KMConfigurationWindowController.h"
|
||||
#import "KMDownloadKBWindowController.h"
|
||||
#import "ZipArchive.h"
|
||||
#import "KMPackageReader.h"
|
||||
#import "KMPackageInfo.h"
|
||||
#import "KMKeyboardInfo.h"
|
||||
@import Sentry;
|
||||
|
||||
/** NSUserDefaults keys */
|
||||
|
|
@ -31,28 +34,9 @@ NSString *const kKMLegacyApps = @"KMLegacyApps";
|
|||
|
||||
NSString *const kKeymanKeyboardDownloadCompletedNotification = @"kKeymanKeyboardDownloadCompletedNotification";
|
||||
|
||||
NSString *const kPackage = @"[Package]";
|
||||
NSString *const kButtons = @"[Buttons]";
|
||||
NSString *const kStartMenu = @"[StartMenu]";
|
||||
NSString *const kStartMenuEntries = @"[StartMenuEntries]";
|
||||
NSString *const kInfo = @"[Info]";
|
||||
NSString *const kFiles = @"[Files]";
|
||||
|
||||
NSString *const kAuthor = @"Author";
|
||||
NSString *const kCopyright = @"Copyright";
|
||||
NSString *const kFile = @"File";
|
||||
NSString *const kFont = @"Font";
|
||||
NSString *const kGraphicFile = @"GraphicFile";
|
||||
NSString *const kKeyboard = @"Keyboard";
|
||||
NSString *const kName = @"Name";
|
||||
NSString *const kReadMeFile = @"ReadMeFile";
|
||||
NSString *const kVersion = @"Version";
|
||||
NSString *const kWebSite = @"WebSite";
|
||||
NSString *const kWelcome = @"Welcome";
|
||||
|
||||
typedef enum {
|
||||
ctPackage, ctButtons, ctStartMenu, ctStartMenuEntries, ctInfo, ctFiles, ctUnknown
|
||||
} ContentType;
|
||||
@interface KMInputMethodAppDelegate ()
|
||||
@property (nonatomic, strong) KMPackageReader *packageReader;
|
||||
@end
|
||||
|
||||
@implementation KMInputMethodAppDelegate
|
||||
@synthesize kme = _kme;
|
||||
|
|
@ -365,6 +349,15 @@ CGEventRef eventTapFunction(CGEventTapProxy proxy, CGEventType type, CGEventRef
|
|||
return _kme;
|
||||
}
|
||||
|
||||
- (KMPackageReader *)packageReader {
|
||||
if (_packageReader == nil) {
|
||||
_packageReader = [[KMPackageReader alloc] init];
|
||||
[_packageReader setDebugMode:self.debugMode];
|
||||
}
|
||||
|
||||
return _packageReader;
|
||||
}
|
||||
|
||||
- (void)setKmx:(KMXFile *)kmx {
|
||||
_kmx = kmx;
|
||||
[self.kme setKmx:_kmx];
|
||||
|
|
@ -448,6 +441,9 @@ CGEventRef eventTapFunction(CGEventTapProxy proxy, CGEventType type, CGEventRef
|
|||
_debugMode = useVerboseLogging;
|
||||
if (_kme != nil)
|
||||
[_kme setUseVerboseLogging:useVerboseLogging];
|
||||
if (_packageReader != nil) {
|
||||
[_packageReader setDebugMode:useVerboseLogging];
|
||||
}
|
||||
NSUserDefaults *userData = [NSUserDefaults standardUserDefaults];
|
||||
[userData setBool:useVerboseLogging forKey:kKMUseVerboseLogging];
|
||||
[userData synchronize];
|
||||
|
|
@ -464,6 +460,8 @@ CGEventRef eventTapFunction(CGEventTapProxy proxy, CGEventType type, CGEventRef
|
|||
return [userData boolForKey:kKMUseVerboseLogging];
|
||||
}
|
||||
|
||||
#pragma mark - Keyman Data
|
||||
|
||||
/**
|
||||
* Locate and create the Keyman data path; currently in ~/Documents/Keyman-Keyboards
|
||||
*/
|
||||
|
|
@ -602,35 +600,27 @@ CGEventRef eventTapFunction(CGEventTapProxy proxy, CGEventType type, CGEventRef
|
|||
return packageFolder;
|
||||
}
|
||||
|
||||
- (NSString *)packageNameFromFolder:(NSString *)packageFolder {
|
||||
- (KMPackageInfo *)loadPackageInfo:(NSString *)path {
|
||||
return [self.packageReader loadPackageInfo:path];
|
||||
}
|
||||
|
||||
- (NSString *)packageNameFromPackageInfo:(NSString *)packageFolder {
|
||||
NSString *packageName = nil;
|
||||
NSString *path = [[self keyboardsPath] stringByAppendingPathComponent:packageFolder];
|
||||
NSString *fileContents = [NSString stringWithContentsOfFile:[path stringByAppendingPathComponent:@"kmp.inf"] encoding:NSWindowsCP1252StringEncoding error:NULL];
|
||||
NSArray *lines = [fileContents componentsSeparatedByString:@"\n"];
|
||||
BOOL hasInfo = NO;
|
||||
for (NSString *line in lines) {
|
||||
if ([line startsWith:@"[Info]"]) {
|
||||
hasInfo = YES;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (hasInfo && [line startsWith:@"Name="]) {
|
||||
NSString *value = [[[line substringFromIndex:5] componentsSeparatedByString:@","] objectAtIndex:0];
|
||||
packageName = [NSString stringWithString:[value stringByReplacingOccurrencesOfString:@"\"" withString:@""]];
|
||||
break;
|
||||
}
|
||||
NSString *path = [[self keymanDataPath] stringByAppendingPathComponent:packageFolder];
|
||||
KMPackageInfo *packageInfo = [self.packageReader loadPackageInfo:path];
|
||||
|
||||
if (packageInfo) {
|
||||
packageName = packageInfo.packageName;
|
||||
}
|
||||
|
||||
if (packageName == nil)
|
||||
packageName = packageFolder;
|
||||
|
||||
|
||||
return packageName;
|
||||
}
|
||||
|
||||
- (NSArray *)keyboardNamesFromFolder:(NSString *)packageFolder {
|
||||
NSMutableArray *kbNames = [[NSMutableArray alloc] initWithCapacity:0];;
|
||||
for (NSString *kmxFile in [self KMXFilesAtPath:packageFolder]) {
|
||||
NSDictionary * infoDict = [KMXFile infoDictionaryFromFilePath:kmxFile];
|
||||
NSDictionary * infoDict = [KMXFile keyboardInfoFromKmxFile:kmxFile];
|
||||
if (infoDict != nil) {
|
||||
NSString *name = [infoDict objectForKey:kKMKeyboardNameKey];
|
||||
if (name != nil && [name length]) {
|
||||
|
|
@ -643,155 +633,6 @@ CGEventRef eventTapFunction(CGEventTapProxy proxy, CGEventType type, CGEventRef
|
|||
return kbNames;
|
||||
}
|
||||
|
||||
- (NSDictionary *)infoDictionaryFromFile:(NSString *)infoFile {
|
||||
NSMutableDictionary *infoDict = [NSMutableDictionary dictionaryWithCapacity:0];
|
||||
NSMutableArray *files = [NSMutableArray arrayWithCapacity:0];
|
||||
NSMutableArray *fonts = [NSMutableArray arrayWithCapacity:0];
|
||||
NSMutableArray *kbs = [NSMutableArray arrayWithCapacity:0];
|
||||
|
||||
@try {
|
||||
NSString *fileContents = [[NSString stringWithContentsOfFile:infoFile encoding:NSWindowsCP1252StringEncoding error:NULL] stringByReplacingOccurrencesOfString:@"\r" withString:@""];
|
||||
NSArray *lines = [fileContents componentsSeparatedByString:@"\n"];
|
||||
ContentType contentType = ctUnknown;
|
||||
for (NSString *line in lines) {
|
||||
if (!line.length)
|
||||
continue;
|
||||
|
||||
if ([line startsWith:kPackage]) {
|
||||
contentType = ctPackage;
|
||||
continue;
|
||||
}
|
||||
else if ([line startsWith:kButtons]) {
|
||||
contentType = ctButtons;
|
||||
continue;
|
||||
}
|
||||
else if ([line startsWith:kStartMenu]) {
|
||||
contentType = ctStartMenu;
|
||||
continue;
|
||||
}
|
||||
else if ([line startsWith:kStartMenuEntries]) {
|
||||
contentType = ctStartMenuEntries;
|
||||
continue;
|
||||
}
|
||||
else if ([line startsWith:kInfo]) {
|
||||
contentType = ctInfo;
|
||||
continue;
|
||||
}
|
||||
else if ([line startsWith:kFiles]) {
|
||||
contentType = ctFiles;
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (contentType) {
|
||||
case ctPackage: {
|
||||
if ([line startsWith:kReadMeFile])
|
||||
[infoDict setObject:[line substringFromIndex:kReadMeFile.length+1] forKey:kReadMeFile];
|
||||
else if ([line startsWith:kGraphicFile])
|
||||
[infoDict setObject:[line substringFromIndex:kGraphicFile.length+1] forKey:kGraphicFile];
|
||||
|
||||
break;
|
||||
}
|
||||
case ctButtons:
|
||||
break;
|
||||
case ctStartMenu:
|
||||
break;
|
||||
case ctStartMenuEntries: {
|
||||
if ([line startsWith:kWelcome]) {
|
||||
NSString *s = [line substringFromIndex:kWelcome.length+1];
|
||||
NSArray *vs = [s componentsSeparatedByString:@"\","];
|
||||
NSString *v1 = [[vs objectAtIndex:0] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
NSString *v2 = [[vs objectAtIndex:1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
[infoDict setObject:@[v1, v2] forKey:kWelcome];
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case ctInfo: {
|
||||
if ([line startsWith:kName]) {
|
||||
NSString *s = [line substringFromIndex:kName.length+1];
|
||||
NSArray *vs = [s componentsSeparatedByString:@"\","];
|
||||
NSString *v1 = [[vs objectAtIndex:0] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
NSString *v2 = [[vs objectAtIndex:1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
[infoDict setObject:@[v1, v2] forKey:kName];
|
||||
}
|
||||
else if ([line startsWith:kVersion]) {
|
||||
NSString *s = [line substringFromIndex:kVersion.length+1];
|
||||
NSArray *vs = [s componentsSeparatedByString:@"\","];
|
||||
NSString *v1 = [[vs objectAtIndex:0] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
NSString *v2 = [[vs objectAtIndex:1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
[infoDict setObject:@[v1, v2] forKey:kVersion];
|
||||
}
|
||||
else if ([line startsWith:kAuthor]) {
|
||||
NSString *s = [line substringFromIndex:kAuthor.length+1];
|
||||
NSArray *vs = [s componentsSeparatedByString:@"\","];
|
||||
NSString *v1 = [[vs objectAtIndex:0] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
NSString *v2 = [[vs objectAtIndex:1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
[infoDict setObject:@[v1, v2] forKey:kAuthor];
|
||||
}
|
||||
else if ([line startsWith:kCopyright]) {
|
||||
NSString *s = [line substringFromIndex:kCopyright.length+1];
|
||||
NSArray *vs = [s componentsSeparatedByString:@"\","];
|
||||
NSString *v1 = [[vs objectAtIndex:0] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
NSString *v2 = [[vs objectAtIndex:1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
[infoDict setObject:@[v1, v2] forKey:kCopyright];
|
||||
}
|
||||
else if ([line startsWith:kWebSite]) {
|
||||
NSString *s = [line substringFromIndex:kWebSite.length+1];
|
||||
NSArray *vs = [s componentsSeparatedByString:@"\","];
|
||||
NSString *v1 = [[vs objectAtIndex:0] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
NSString *v2 = [[vs objectAtIndex:1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
[infoDict setObject:@[v1, v2] forKey:kWebSite];
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case ctFiles: {
|
||||
NSUInteger x = [line rangeOfString:@"="].location;
|
||||
if (x == NSNotFound)
|
||||
continue;
|
||||
|
||||
NSString *s = [line substringFromIndex:x+2];
|
||||
if ([s startsWith:kFile]) {
|
||||
NSArray *vs = [s componentsSeparatedByString:@"\","];
|
||||
NSString *v1 = [[[vs objectAtIndex:0] substringFromIndex:kFile.length+1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
NSString *v2 = [[vs objectAtIndex:1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
[files addObject:@[v1, v2]];
|
||||
}
|
||||
else if ([s startsWith:kFont]) {
|
||||
NSArray *vs = [s componentsSeparatedByString:@"\","];
|
||||
NSString *v1 = [[[vs objectAtIndex:0] substringFromIndex:kFont.length+1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
NSString *v2 = [[vs objectAtIndex:1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
[fonts addObject:@[v1, v2]];
|
||||
}
|
||||
else if ([s startsWith:kKeyboard]) {
|
||||
NSArray *vs = [s componentsSeparatedByString:@"\","];
|
||||
NSString *v1 = [[[vs objectAtIndex:0] substringFromIndex:kKeyboard.length+1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
NSString *v2 = [[vs objectAtIndex:1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
[kbs addObject:@[v1, v2]];
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@catch (NSException *e) {
|
||||
NSLog(@"Error = %@", e.description);
|
||||
return nil;
|
||||
}
|
||||
|
||||
if (files.count)
|
||||
[infoDict setValue:files forKey:kFile];
|
||||
if (fonts.count)
|
||||
[infoDict setValue:fonts forKey:kFont];
|
||||
if (kbs.count)
|
||||
[infoDict setValue:kbs forKey:kKeyboard];
|
||||
|
||||
return infoDict.count?[NSDictionary dictionaryWithDictionary:infoDict]:nil;
|
||||
}
|
||||
|
||||
- (NSString *)selectedKeyboard {
|
||||
if (_selectedKeyboard == nil) {
|
||||
NSUserDefaults *userData = [NSUserDefaults standardUserDefaults];
|
||||
|
|
@ -907,7 +748,7 @@ CGEventRef eventTapFunction(CGEventTapProxy proxy, CGEventType type, CGEventRef
|
|||
NSInteger itag = 1000;
|
||||
[keyboards.submenu removeAllItems];
|
||||
for (NSString *path in self.activeKeyboards) {
|
||||
NSDictionary *infoDict = [KMXFile infoDictionaryFromFilePath:path];
|
||||
NSDictionary *infoDict = [KMXFile keyboardInfoFromKmxFile:path];
|
||||
if (!infoDict)
|
||||
continue;
|
||||
//NSString *str = [NSString stringWithFormat:@"%@ (%@)", [infoDict objectForKey:kKMKeyboardNameKey], [infoDict objectForKey:kKMKeyboardVersionKey]];
|
||||
|
|
@ -918,7 +759,7 @@ CGEventRef eventTapFunction(CGEventTapProxy proxy, CGEventType type, CGEventRef
|
|||
[item setState:NSOnState];
|
||||
KMXFile *kmx = [[KMXFile alloc] initWithFilePath:path];
|
||||
[self setKmx:kmx];
|
||||
NSDictionary *kmxInfo = [KMXFile infoDictionaryFromFilePath:path];
|
||||
NSDictionary *kmxInfo = [KMXFile keyboardInfoFromKmxFile:path];
|
||||
NSString *kvkFilename = [kmxInfo objectForKey:kKMVisualKeyboardKey];
|
||||
if (kvkFilename != nil) {
|
||||
NSString *kvkFilePath = [self kvkFilePathFromFilename:kvkFilename];
|
||||
|
|
@ -953,7 +794,7 @@ CGEventRef eventTapFunction(CGEventTapProxy proxy, CGEventType type, CGEventRef
|
|||
NSString *path = [self.activeKeyboards objectAtIndex:0];
|
||||
KMXFile *kmx = [[KMXFile alloc] initWithFilePath:path];
|
||||
[self setKmx:kmx];
|
||||
NSDictionary *kmxInfo = [KMXFile infoDictionaryFromFilePath:path];
|
||||
NSDictionary *kmxInfo = [KMXFile keyboardInfoFromKmxFile:path];
|
||||
NSString *kvkFilename = [kmxInfo objectForKey:kKMVisualKeyboardKey];
|
||||
if (kvkFilename != nil) {
|
||||
NSString *kvkFilePath = [self kvkFilePathFromFilename:kvkFilename];
|
||||
|
|
|
|||
|
|
@ -8,11 +8,12 @@
|
|||
|
||||
#import "KMKeyboardHelpWindowController.h"
|
||||
#import "KMInputMethodAppDelegate.h"
|
||||
#import "KMPackageInfo.h"
|
||||
#import <WebKit/WebKit.h>
|
||||
|
||||
@interface KMKeyboardHelpWindowController ()
|
||||
@property (nonatomic, weak) IBOutlet WebView *welcomeView;
|
||||
@property (nonatomic, strong) NSDictionary *infoDict;
|
||||
@property (nonatomic, strong) KMPackageInfo *packageInfo;
|
||||
@end
|
||||
|
||||
@implementation KMKeyboardHelpWindowController
|
||||
|
|
@ -30,10 +31,10 @@
|
|||
|
||||
- (void)setPackagePath:(NSString *)packagePath {
|
||||
_packagePath = packagePath;
|
||||
_infoDict = nil;
|
||||
_packageInfo = nil;
|
||||
if (packagePath != nil && packagePath.length) {
|
||||
@try {
|
||||
NSString *title = [[self.infoDict objectForKey:kName] objectAtIndex:0];
|
||||
NSString *title = self.packageInfo.packageName;
|
||||
if (title.length)
|
||||
[self.window setTitle:title];
|
||||
}
|
||||
|
|
@ -49,13 +50,12 @@
|
|||
}
|
||||
}
|
||||
|
||||
- (NSDictionary *)infoDict {
|
||||
if (_infoDict == nil) {
|
||||
NSString *infoFile = [self.packagePath stringByAppendingPathComponent:@"kmp.inf"];
|
||||
_infoDict = [self.AppDelegate infoDictionaryFromFile:infoFile];
|
||||
- (KMPackageInfo*)packageInfo {
|
||||
if(_packageInfo == nil) {
|
||||
_packageInfo = [self.AppDelegate loadPackageInfo:self.packagePath];
|
||||
}
|
||||
|
||||
return _infoDict;
|
||||
return _packageInfo;
|
||||
}
|
||||
|
||||
- (IBAction)okAction:(id)sender {
|
||||
|
|
|
|||
55
mac/Keyman4MacIM/Keyman4MacIM/KMKeyboardInfo.h
Normal file
55
mac/Keyman4MacIM/Keyman4MacIM/KMKeyboardInfo.h
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* Keyman is copyright (C) SIL International. MIT License.
|
||||
*
|
||||
* KMKeyboardInfo.h
|
||||
* Keyman
|
||||
*
|
||||
* Created by Shawn Schantz on 2021/11/25.
|
||||
*
|
||||
* Value object describing a keyboard element of a Keyman package.
|
||||
*/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface KMKeyboardInfoBuilder : NSObject
|
||||
@property (nonatomic,copy) NSString* name;
|
||||
@property (nonatomic,copy) NSString* identifier;
|
||||
@property (nonatomic,copy) NSString* version;
|
||||
@property (nonatomic,copy) NSString* oskFont;
|
||||
@property (nonatomic,copy) NSString* displayFont;
|
||||
@property (nonatomic,copy) NSArray* languages;
|
||||
|
||||
- (instancetype)init;
|
||||
|
||||
@end
|
||||
|
||||
@interface KMLanguageInfo : NSObject
|
||||
@property (nonatomic,readonly) NSString* name;
|
||||
@property (nonatomic,readonly) NSString* identifier;
|
||||
|
||||
- (instancetype)initWithName:(NSString*)name
|
||||
identifier:(NSString*)identifier;
|
||||
@end
|
||||
|
||||
@interface KMKeyboardInfo : NSObject
|
||||
@property (nonatomic,readonly) NSString* name;
|
||||
@property (nonatomic,readonly) NSString* identifier;
|
||||
@property (nonatomic,readonly) NSString* version;
|
||||
@property (nonatomic,readonly) NSString* oskFont;
|
||||
@property (nonatomic,readonly) NSString* displayFont;
|
||||
@property (nonatomic,readonly) NSArray* languages;
|
||||
|
||||
- (instancetype)initWithBuilder:(KMKeyboardInfoBuilder*)builder;
|
||||
|
||||
- (instancetype)initWithName:(NSString*)name
|
||||
identifier:(NSString*)identifier
|
||||
version:(NSString*)version
|
||||
oskFont:(NSString*)oskFont
|
||||
displayFont:(NSString*)displayFont
|
||||
languages:(NSArray*)languages;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
79
mac/Keyman4MacIM/Keyman4MacIM/KMKeyboardInfo.m
Normal file
79
mac/Keyman4MacIM/Keyman4MacIM/KMKeyboardInfo.m
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
/*
|
||||
* Keyman is copyright (C) SIL International. MIT License.
|
||||
*
|
||||
* KMKeyboardInfo.m
|
||||
* Keyman
|
||||
*
|
||||
* Created by Shawn Schantz on 2021/11/25.
|
||||
*
|
||||
* Value object describing a keyboard element of a Keyman package.
|
||||
*/
|
||||
|
||||
#import "KMKeyboardInfo.h"
|
||||
|
||||
@implementation KMKeyboardInfoBuilder
|
||||
- (instancetype)init {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_name = nil;
|
||||
_identifier = nil;
|
||||
_version = nil;
|
||||
_oskFont = nil;
|
||||
_displayFont = nil;
|
||||
_languages = nil;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
@end
|
||||
|
||||
|
||||
@implementation KMLanguageInfo
|
||||
|
||||
- (instancetype)initWithName:(NSString*)name
|
||||
identifier:(NSString*)identifier
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_name = [name copy];
|
||||
_identifier = [identifier copy];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation KMKeyboardInfo
|
||||
|
||||
- (instancetype)initWithBuilder:(KMKeyboardInfoBuilder *)builder {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_name = builder.name;
|
||||
_identifier = builder.identifier;
|
||||
_version = builder.version;
|
||||
_oskFont = builder.oskFont;
|
||||
_displayFont = builder.displayFont;
|
||||
_languages = builder.languages;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (instancetype)initWithName:(NSString*)name
|
||||
identifier:(NSString*)identifier
|
||||
version:(NSString*)version
|
||||
oskFont:(NSString*)oskFont
|
||||
displayFont:(NSString*)displayFont
|
||||
languages:(NSArray*)languages
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_name = [name copy];
|
||||
_identifier = [identifier copy];
|
||||
_version = [version copy];
|
||||
_oskFont = [oskFont copy];
|
||||
_displayFont = [displayFont copy];
|
||||
_languages = [languages copy];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
@end
|
||||
69
mac/Keyman4MacIM/Keyman4MacIM/KMPackageInfo.h
Normal file
69
mac/Keyman4MacIM/Keyman4MacIM/KMPackageInfo.h
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
/*
|
||||
* Keyman is copyright (C) SIL International. MIT License.
|
||||
*
|
||||
* KMPackageInfo.h
|
||||
* Keyman
|
||||
*
|
||||
* Created by Shawn Schantz on 2021/11/22.
|
||||
*
|
||||
* Value object describing a Keyman package.
|
||||
*/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface KMPackageInfoBuilder : NSObject
|
||||
@property (nonatomic,copy) NSString* packageName;
|
||||
@property (nonatomic,copy) NSString* packageVersion;
|
||||
@property (nonatomic,copy) NSString* readmeFilename;
|
||||
@property (nonatomic,copy) NSString* graphicFilename;
|
||||
@property (nonatomic,copy) NSString* fileVersion;
|
||||
@property (nonatomic,copy) NSString* keymanDeveloperVersion;
|
||||
@property (nonatomic,copy) NSString* copyright;
|
||||
@property (nonatomic,copy) NSString* authorName;
|
||||
@property (nonatomic,copy) NSString* authorUrl;
|
||||
@property (nonatomic,copy) NSString* website;
|
||||
@property (nonatomic,copy) NSArray* keyboards;
|
||||
@property (nonatomic,copy) NSArray* files;
|
||||
@property (nonatomic,copy) NSArray* fonts;
|
||||
|
||||
- (instancetype)init;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@interface KMPackageInfo : NSObject
|
||||
@property (nonatomic,readonly) NSString* packageName;
|
||||
@property (nonatomic,readonly) NSString* packageVersion;
|
||||
@property (nonatomic,readonly) NSString* readmeFilename;
|
||||
@property (nonatomic,readonly) NSString* graphicFilename;
|
||||
@property (nonatomic,readonly) NSString* fileVersion;
|
||||
@property (nonatomic,readonly) NSString* keymanDeveloperVersion;
|
||||
@property (nonatomic,readonly) NSString* copyright;
|
||||
@property (nonatomic,readonly) NSString* authorName;
|
||||
@property (nonatomic,readonly) NSString* authorUrl;
|
||||
@property (nonatomic,readonly) NSString* website;
|
||||
@property (nonatomic,readonly) NSArray* keyboards;
|
||||
@property (nonatomic,readonly) NSArray* files;
|
||||
@property (nonatomic,readonly) NSArray* fonts;
|
||||
|
||||
- (instancetype)initWithBuilder:(KMPackageInfoBuilder *)builder;
|
||||
|
||||
- (instancetype)initWithName:(NSString*)packageName
|
||||
packageVersion:(NSString*)packageVersion
|
||||
readmeFilename:(NSString*)readmeFilename
|
||||
graphicFilename:(NSString*)graphicFilename
|
||||
fileVersion:(NSString*)fileVersion
|
||||
keymanDeveloperVersion:(NSString*)keymanDeveloperVersion
|
||||
copyright:(NSString*)copyright
|
||||
authorName:(NSString*)authorName
|
||||
authorUrl:(NSString*)authorUrl
|
||||
website:(NSString*)website
|
||||
keyboards:(NSArray*)keyboards
|
||||
fonts:(NSArray*)fonts
|
||||
files:(NSArray*)files;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
91
mac/Keyman4MacIM/Keyman4MacIM/KMPackageInfo.m
Normal file
91
mac/Keyman4MacIM/Keyman4MacIM/KMPackageInfo.m
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
/*
|
||||
* Keyman is copyright (C) SIL International. MIT License.
|
||||
*
|
||||
* KMPackageInfo.m
|
||||
* Keyman
|
||||
*
|
||||
* Created by Shawn Schantz on 2021/11/22.
|
||||
*
|
||||
* Value object describing a Keyman package.
|
||||
*/
|
||||
|
||||
#import "KMPackageInfo.h"
|
||||
|
||||
@implementation KMPackageInfoBuilder
|
||||
- (instancetype)init {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_packageName = nil;
|
||||
_packageVersion = nil;
|
||||
_readmeFilename = nil;
|
||||
_graphicFilename = nil;
|
||||
_fileVersion = nil;
|
||||
_keymanDeveloperVersion = nil;
|
||||
_copyright = nil;
|
||||
_authorName = nil;
|
||||
_authorUrl = nil;
|
||||
_website = nil;
|
||||
_keyboards = nil;
|
||||
_fonts = nil;
|
||||
_files = nil;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation KMPackageInfo
|
||||
|
||||
- (instancetype)initWithBuilder:(KMPackageInfoBuilder *)builder {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_packageName = builder.packageName;
|
||||
_packageVersion = builder.packageVersion;
|
||||
_readmeFilename = builder.readmeFilename;
|
||||
_graphicFilename = builder.graphicFilename;
|
||||
_fileVersion = builder.fileVersion;
|
||||
_keymanDeveloperVersion = builder.keymanDeveloperVersion;
|
||||
_copyright = builder.copyright;
|
||||
_authorName = builder.authorName;
|
||||
_authorUrl = builder.authorUrl;
|
||||
_website = builder.website;
|
||||
_keyboards = builder.keyboards;
|
||||
_fonts = builder.fonts;
|
||||
_files = builder.files;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (instancetype)initWithName:(NSString*)packageName
|
||||
packageVersion:(NSString*)packageVersion
|
||||
readmeFilename:(NSString*)readmeFilename
|
||||
graphicFilename:(NSString*)graphicFilename
|
||||
fileVersion:(NSString*)fileVersion
|
||||
keymanDeveloperVersion:(NSString*)keymanDeveloperVersion
|
||||
copyright:(NSString*)copyright
|
||||
authorName:(NSString*)authorName
|
||||
authorUrl:(NSString*)authorUrl
|
||||
website:(NSString*)website
|
||||
keyboards:(NSArray*)keyboards
|
||||
fonts:(NSArray*)fonts
|
||||
files:(NSArray*)files
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_packageName = [packageName copy];
|
||||
_packageVersion = [packageVersion copy];
|
||||
_readmeFilename = [readmeFilename copy];
|
||||
_graphicFilename = [graphicFilename copy];
|
||||
_fileVersion = [fileVersion copy];
|
||||
_keymanDeveloperVersion = [keymanDeveloperVersion copy];
|
||||
_copyright = [copyright copy];
|
||||
_authorName = [authorName copy];
|
||||
_authorUrl = [authorUrl copy];
|
||||
_website = [website copy];
|
||||
_keyboards = [keyboards copy];
|
||||
_fonts = [fonts copy];
|
||||
_files = [files copy];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
@end
|
||||
29
mac/Keyman4MacIM/Keyman4MacIM/KMPackageReader.h
Normal file
29
mac/Keyman4MacIM/Keyman4MacIM/KMPackageReader.h
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* Keyman is copyright (C) SIL International. MIT License.
|
||||
*
|
||||
* KMPackageReader.m
|
||||
* Keyman
|
||||
*
|
||||
* Created by Shawn Schantz on 2021/12/06.
|
||||
*
|
||||
* Read package information from kmp.json, if it exists. If not, read from kmp.inf.
|
||||
* Then create and return KMPackageInfo object.
|
||||
*
|
||||
*/
|
||||
|
||||
#import "KMPackageInfo.h"
|
||||
#import "KMKeyboardInfo.h"
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface KMPackageReader : NSObject
|
||||
|
||||
@property (assign, nonatomic) BOOL debugMode;
|
||||
|
||||
- (instancetype)init;
|
||||
- (KMPackageInfo *)loadPackageInfo:(NSString *)path;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
337
mac/Keyman4MacIM/Keyman4MacIM/KMPackageReader.m
Normal file
337
mac/Keyman4MacIM/Keyman4MacIM/KMPackageReader.m
Normal file
|
|
@ -0,0 +1,337 @@
|
|||
/*
|
||||
* Keyman is copyright (C) SIL International. MIT License.
|
||||
*
|
||||
* KMPackageReader.m
|
||||
* Keyman
|
||||
*
|
||||
* Created by Shawn Schantz on 2021/12/06.
|
||||
*
|
||||
* Read package information from kmp.json, if it exists. If not, read from kmp.inf.
|
||||
* Then create and return KMPackageInfo object.
|
||||
*
|
||||
*/
|
||||
|
||||
#import "KMPackageReader.h"
|
||||
|
||||
static NSString *const kPackageJsonFile = @"kmp.json";
|
||||
static NSString *const kPackageInfFile = @"kmp.inf";
|
||||
|
||||
static NSString *const kPackage = @"[Package]";
|
||||
static NSString *const kButtons = @"[Buttons]";
|
||||
static NSString *const kStartMenu = @"[StartMenu]";
|
||||
static NSString *const kStartMenuEntries = @"[StartMenuEntries]";
|
||||
static NSString *const kInfo = @"[Info]";
|
||||
static NSString *const kFiles = @"[Files]";
|
||||
|
||||
static NSString *const kAuthor = @"Author";
|
||||
static NSString *const kCopyright = @"Copyright";
|
||||
static NSString *const kFile = @"File";
|
||||
static NSString *const kFont = @"Font";
|
||||
static NSString *const kGraphicFile = @"GraphicFile";
|
||||
static NSString *const kKeyboard = @"Keyboard";
|
||||
static NSString *const kName = @"Name";
|
||||
static NSString *const kReadMeFile = @"ReadMeFile";
|
||||
static NSString *const kVersion = @"Version";
|
||||
static NSString *const kWebSite = @"WebSite";
|
||||
static NSString *const kWelcome = @"Welcome";
|
||||
|
||||
typedef enum {
|
||||
ctPackage, ctButtons, ctStartMenu, ctStartMenuEntries, ctInfo, ctFiles, ctUnknown
|
||||
} ContentType;
|
||||
|
||||
@implementation KMPackageReader
|
||||
|
||||
- (instancetype)init {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_debugMode = NO;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to load Keyman Package Information from kmp.json.
|
||||
* If kmp.json file is not found or not readable, load from legacy kmp.inf file.
|
||||
* @param <path> the full path of the package folder.
|
||||
*/
|
||||
- (KMPackageInfo *)loadPackageInfo:(NSString *)path {
|
||||
KMPackageInfo *packageInfo = nil;
|
||||
NSString *jsonFilename = [path stringByAppendingPathComponent:kPackageJsonFile];
|
||||
|
||||
packageInfo = [self loadPackageInfoFromJsonFile:jsonFilename];
|
||||
|
||||
if (packageInfo == nil) {
|
||||
NSString *infoFilename = [path stringByAppendingPathComponent:kPackageInfFile];
|
||||
packageInfo = [self loadPackageInfoFromInfFile:infoFilename];
|
||||
}
|
||||
|
||||
return packageInfo;
|
||||
}
|
||||
|
||||
- (NSString *)packageNameFromPackageInfo:(NSString *)path {
|
||||
NSString *packageName = nil;
|
||||
|
||||
KMPackageInfo *packageInfo = [self loadPackageInfo:path];
|
||||
packageName = packageInfo.packageName;
|
||||
|
||||
return packageName;
|
||||
}
|
||||
|
||||
/**
|
||||
* read JSON file and load it into KMPackageInfo object
|
||||
* returns nil if the file does not exist or it cannot be parsed as JSON
|
||||
*/
|
||||
- (KMPackageInfo *) loadPackageInfoFromJsonFile:(NSString *)path {
|
||||
KMPackageInfo * packageInfo = nil;
|
||||
|
||||
if (self.debugMode)
|
||||
NSLog(@"Loading JSON package info from path: %@", path);
|
||||
NSError *readError = nil;
|
||||
NSData *data = [NSData dataWithContentsOfFile:path options:kNilOptions error:&readError];
|
||||
NSDictionary *parsedData = nil;
|
||||
|
||||
if (data == nil) {
|
||||
NSLog(@"Error reading JSON file at path : %@, error: %@ ", path, readError);
|
||||
} else {
|
||||
NSError *parseError = nil;
|
||||
parsedData = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&parseError];
|
||||
|
||||
if (parsedData == nil) {
|
||||
NSLog(@"Error parsing JSON file at path : %@, error: %@ ", path, parseError);
|
||||
} else {
|
||||
packageInfo = [self createPackageInfoFromJsonData:parsedData];
|
||||
}
|
||||
}
|
||||
|
||||
return packageInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a KeyboardInfo object using data loaded from kmp.json.
|
||||
* @param keyboard an NSDictionary containing all the key-value pairs of a keyboard object from the kmp.json keyboards array
|
||||
* @return the corresponding KeyboardInfo value object
|
||||
*/
|
||||
- (KMKeyboardInfo *) createKeyboardInfoFromJsonKeyboard:(NSDictionary *) keyboard {
|
||||
|
||||
KMKeyboardInfoBuilder *builder = [[KMKeyboardInfoBuilder alloc] init];
|
||||
|
||||
NSArray *languages = keyboard[@"languages"];
|
||||
NSMutableArray *languageInfoArray = [NSMutableArray arrayWithCapacity:0];
|
||||
|
||||
for (NSDictionary *language in languages) {
|
||||
KMLanguageInfo *languageInfo = [[KMLanguageInfo alloc] initWithName:language[@"name"]
|
||||
identifier:language[@"id"]];
|
||||
|
||||
[languageInfoArray addObject:languageInfo];
|
||||
}
|
||||
|
||||
builder.name = keyboard[@"name"];
|
||||
builder.identifier = keyboard[@"id"];
|
||||
builder.version = keyboard[@"version"];
|
||||
builder.oskFont = keyboard[@"oskFont"];
|
||||
builder.displayFont = keyboard[@"displayFont"];
|
||||
builder.languages = [languageInfoArray copy];
|
||||
|
||||
KMKeyboardInfo *keyboardInfo = [[KMKeyboardInfo alloc] initWithBuilder:builder];
|
||||
return keyboardInfo;
|
||||
}
|
||||
|
||||
- (KMPackageInfo *) createPackageInfoFromJsonData:(NSDictionary *) jsonData {
|
||||
|
||||
NSMutableArray *keyboardInfoArray = [NSMutableArray arrayWithCapacity:0];
|
||||
NSMutableArray *fontArray = [NSMutableArray arrayWithCapacity:0];
|
||||
NSArray *keyboards = jsonData[@"keyboards"];
|
||||
|
||||
// loop through keyboards array to add keyboards,
|
||||
// then loop through each keyboard's languages array to add languages
|
||||
|
||||
for (NSDictionary *keyboard in keyboards) {
|
||||
KMKeyboardInfo *keyboardInfo = [self createKeyboardInfoFromJsonKeyboard:keyboard];
|
||||
|
||||
// add oskFont to fontArray if not nil or empty string
|
||||
if ([keyboardInfo.oskFont length]) {
|
||||
[fontArray addObject:keyboardInfo.oskFont];
|
||||
}
|
||||
|
||||
// add displayFont to fontArray if not not nil or empty string and not equal to oskFont
|
||||
if ([keyboardInfo.displayFont length] &&
|
||||
![keyboardInfo.displayFont isEqualToString:keyboardInfo.displayFont]) {
|
||||
[fontArray addObject:keyboardInfo.displayFont];
|
||||
}
|
||||
|
||||
[keyboardInfoArray addObject:keyboardInfo];
|
||||
}
|
||||
|
||||
KMPackageInfoBuilder *builder =
|
||||
[[KMPackageInfoBuilder alloc] init];
|
||||
|
||||
builder.packageName = jsonData[@"info"][@"name"][@"description"];
|
||||
builder.packageVersion = jsonData[@"info"][@"version"][@"description"];
|
||||
builder.readmeFilename = jsonData[@"options"][@"readmeFile"];
|
||||
builder.graphicFilename = jsonData[@"options"][@"graphicFile"];
|
||||
builder.fileVersion = jsonData[@"system"][@"fileVersion"];
|
||||
builder.keymanDeveloperVersion = jsonData[@"system"][@"keymanDeveloperVersion"];
|
||||
builder.copyright = jsonData[@"info"][@"copyright"][@"description"];
|
||||
builder.authorName = jsonData[@"info"][@"author"][@"description"];
|
||||
builder.authorUrl = jsonData[@"info"][@"author"][@"url"];
|
||||
builder.website = jsonData[@"info"][@"website"][@"url"];
|
||||
builder.keyboards = [keyboardInfoArray copy];
|
||||
builder.fonts = [fontArray copy];
|
||||
|
||||
KMPackageInfo *packageInfo = [[KMPackageInfo alloc] initWithBuilder:builder];
|
||||
|
||||
return packageInfo;
|
||||
}
|
||||
|
||||
// TODO: refactor, break up and eliminate duplicate code
|
||||
/**
|
||||
* Creates a KMPackageInfo object from the specified kmp.inf file.
|
||||
* This code is adapted from legacy method keyboardInfoFromInfFile that loaded data from inf file to NSDictionary.
|
||||
*
|
||||
* @param path the full path to the kmp.inf file
|
||||
* @return the corresponding PackageInfo value object or nil if the file cannot be found or parsed
|
||||
*/
|
||||
- (KMPackageInfo *) loadPackageInfoFromInfFile:(NSString *)path {
|
||||
if (self.debugMode)
|
||||
NSLog(@"Loading inf package info from path: %@", path);
|
||||
|
||||
NSMutableArray *files = [NSMutableArray arrayWithCapacity:0];
|
||||
NSMutableArray *keyboardInfoArray = [NSMutableArray arrayWithCapacity:0];
|
||||
NSMutableArray *fontArray = [NSMutableArray arrayWithCapacity:0];
|
||||
KMPackageInfoBuilder *builder = [[KMPackageInfoBuilder alloc] init];
|
||||
|
||||
@try {
|
||||
NSString *fileContents = [[NSString stringWithContentsOfFile:path encoding:NSWindowsCP1252StringEncoding error:NULL] stringByReplacingOccurrencesOfString:@"\r" withString:@""];
|
||||
NSArray *lines = [fileContents componentsSeparatedByString:@"\n"];
|
||||
ContentType contentType = ctUnknown;
|
||||
for (NSString *line in lines) {
|
||||
if (!line.length)
|
||||
continue;
|
||||
|
||||
if ([[line lowercaseString] hasPrefix:[kPackage lowercaseString]]) {
|
||||
contentType = ctPackage;
|
||||
continue;
|
||||
}
|
||||
else if ([[line lowercaseString] hasPrefix:[kButtons lowercaseString]]) {
|
||||
contentType = ctButtons;
|
||||
continue;
|
||||
}
|
||||
else if ([[line lowercaseString] hasPrefix:[kStartMenu lowercaseString]]) {
|
||||
contentType = ctStartMenu;
|
||||
continue;
|
||||
}
|
||||
else if ([[line lowercaseString] hasPrefix:[kStartMenuEntries lowercaseString]]) {
|
||||
contentType = ctStartMenuEntries;
|
||||
continue;
|
||||
}
|
||||
else if ([[line lowercaseString] hasPrefix:[kInfo lowercaseString]]) {
|
||||
contentType = ctInfo;
|
||||
continue;
|
||||
}
|
||||
else if ([[line lowercaseString] hasPrefix:[kFiles lowercaseString]]) {
|
||||
contentType = ctFiles;
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (contentType) {
|
||||
case ctPackage: {
|
||||
if ([[line lowercaseString] hasPrefix:[kReadMeFile lowercaseString]])
|
||||
builder.readmeFilename = [line substringFromIndex:kReadMeFile.length+1];
|
||||
else if ([[line lowercaseString] hasPrefix:[kGraphicFile lowercaseString]])
|
||||
builder.graphicFilename = [line substringFromIndex:kGraphicFile.length+1];
|
||||
break;
|
||||
}
|
||||
case ctButtons:
|
||||
break;
|
||||
case ctStartMenu:
|
||||
break;
|
||||
case ctStartMenuEntries:
|
||||
break;
|
||||
case ctInfo: {
|
||||
if ([[line lowercaseString] hasPrefix:[kName lowercaseString]]) {
|
||||
NSString *s = [line substringFromIndex:kName.length+1];
|
||||
NSArray *vs = [s componentsSeparatedByString:@"\","];
|
||||
NSString *v1 = [[vs objectAtIndex:0] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
NSString *v2 = [[vs objectAtIndex:1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
builder.packageName = v1;
|
||||
}
|
||||
else if ([[line lowercaseString] hasPrefix:[kVersion lowercaseString]]) {
|
||||
NSString *s = [line substringFromIndex:kVersion.length+1];
|
||||
NSArray *vs = [s componentsSeparatedByString:@"\","];
|
||||
NSString *v1 = [[vs objectAtIndex:0] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
NSString *v2 = [[vs objectAtIndex:1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
builder.packageVersion = v1;
|
||||
}
|
||||
else if ([[line lowercaseString] hasPrefix:[kAuthor lowercaseString]]) {
|
||||
NSString *s = [line substringFromIndex:kAuthor.length+1];
|
||||
NSArray *vs = [s componentsSeparatedByString:@"\","];
|
||||
NSString *v1 = [[vs objectAtIndex:0] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
NSString *v2 = [[vs objectAtIndex:1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
builder.authorName = v1;
|
||||
builder.authorUrl = v2;
|
||||
}
|
||||
else if ([[line lowercaseString] hasPrefix:[kCopyright lowercaseString]]) {
|
||||
NSString *s = [line substringFromIndex:kCopyright.length+1];
|
||||
NSArray *vs = [s componentsSeparatedByString:@"\","];
|
||||
NSString *v1 = [[vs objectAtIndex:0] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
NSString *v2 = [[vs objectAtIndex:1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
builder.copyright = v1;
|
||||
}
|
||||
else if ([[line lowercaseString] hasPrefix:[kWebSite lowercaseString]]) {
|
||||
NSString *s = [line substringFromIndex:kWebSite.length+1];
|
||||
NSArray *vs = [s componentsSeparatedByString:@"\","];
|
||||
NSString *v1 = [[vs objectAtIndex:0] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
NSString *v2 = [[vs objectAtIndex:1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
builder.website = v1;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case ctFiles: {
|
||||
NSUInteger x = [line rangeOfString:@"="].location;
|
||||
if (x == NSNotFound)
|
||||
continue;
|
||||
|
||||
NSString *s = [line substringFromIndex:x+2];
|
||||
if ([[s lowercaseString] hasPrefix:[kFile lowercaseString]]) {
|
||||
NSArray *vs = [s componentsSeparatedByString:@"\","];
|
||||
NSString *v1 = [[[vs objectAtIndex:0] substringFromIndex:kFile.length+1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
NSString *fileName = [[vs objectAtIndex:1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
[files addObject:fileName];
|
||||
}
|
||||
else if ([[s lowercaseString] hasPrefix:[kFont lowercaseString]]) {
|
||||
NSArray *vs = [s componentsSeparatedByString:@"\","];
|
||||
NSString *fontName = [[[vs objectAtIndex:0] substringFromIndex:kFont.length+1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
NSString *fontFileName = [[vs objectAtIndex:1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
[fontArray addObject:fontName];
|
||||
}
|
||||
else if ([[s lowercaseString] hasPrefix:[kKeyboard lowercaseString]]) {
|
||||
NSArray *vs = [s componentsSeparatedByString:@"\","];
|
||||
NSString *keyboardName = [[[vs objectAtIndex:0] substringFromIndex:kKeyboard.length+1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
NSString *keyboardFileName = [[vs objectAtIndex:1] stringByReplacingOccurrencesOfString:@"\"" withString:@""];
|
||||
|
||||
KMKeyboardInfoBuilder *builder = [[KMKeyboardInfoBuilder alloc] init];
|
||||
builder.name = keyboardName;
|
||||
KMKeyboardInfo *keyboardInfo = [[KMKeyboardInfo alloc] initWithBuilder:builder];
|
||||
[keyboardInfoArray addObject:keyboardInfo];
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@catch (NSException *e) {
|
||||
NSLog(@"Error = %@", e.description);
|
||||
return nil;
|
||||
}
|
||||
|
||||
builder.keyboards = keyboardInfoArray;
|
||||
builder.fonts = fontArray;
|
||||
KMPackageInfo *packageInfo = [[KMPackageInfo alloc] initWithBuilder:builder];
|
||||
return packageInfo;
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
@ -45,7 +45,7 @@ extern NSString *const kKMVisualKeyboardKey;
|
|||
* \param path KMX file path
|
||||
* \returns NSDictionary with keyboard name, version, copyright & icon.
|
||||
*/
|
||||
+ (NSDictionary *)infoDictionaryFromFilePath:(NSString *)path;
|
||||
+ (NSDictionary *)keyboardInfoFromKmxFile:(NSString *)path;
|
||||
|
||||
@end
|
||||
|
||||
|
|
|
|||
|
|
@ -163,8 +163,9 @@ NSString *const kKMVisualKeyboardKey = @"KMVisualKeyboardKey";
|
|||
return YES;
|
||||
}
|
||||
|
||||
+ (NSDictionary *)infoDictionaryFromFilePath:(NSString *)path {
|
||||
+ (NSDictionary *)keyboardInfoFromKmxFile:(NSString *)path {
|
||||
NSFileHandle *file = [NSFileHandle fileHandleForReadingAtPath:path];
|
||||
|
||||
if (file == nil) {
|
||||
//NSLog(@"Failed to open file");
|
||||
return nil;
|
||||
|
|
@ -206,7 +207,7 @@ NSString *const kKMVisualKeyboardKey = @"KMVisualKeyboardKey";
|
|||
if (cmp_str[i].dwSystemID == TSS_VISUALKEYBOARD)
|
||||
visualKeyboard = [KMXFile UTF16StringWithPointer:cmp_str[i].dpString inFile:file];
|
||||
}
|
||||
|
||||
|
||||
[file seekToFileOffset:cmp_kb.dpBitmapOffset];
|
||||
NSData *bitmapData = [file readDataOfLength:cmp_kb.dwBitmapSize];
|
||||
NSBitmapImageRep *imageRep = [NSBitmapImageRep imageRepWithData:bitmapData];
|
||||
|
|
@ -214,8 +215,9 @@ NSString *const kKMVisualKeyboardKey = @"KMVisualKeyboardKey";
|
|||
|
||||
[file closeFile];
|
||||
|
||||
if (!nameStr || !nameStr.length)
|
||||
if (!nameStr || !nameStr.length) {
|
||||
nameStr = [path.lastPathComponent stringByReplacingOccurrencesOfString:@".kmx" withString:@""];
|
||||
}
|
||||
if (!verStr)
|
||||
verStr = @"";
|
||||
if (!copyrightStr)
|
||||
|
|
|
|||
|
|
@ -21,19 +21,18 @@ manual-setup: check setup
|
|||
setup: desktop
|
||||
|
||||
prereq:
|
||||
#
|
||||
# Prepare make file to copy versioned filenames to release folder
|
||||
#
|
||||
|
||||
#
|
||||
# Prepare make file to copy versioned filenames to release folder
|
||||
#
|
||||
cd $(FVROOT)\src\inst
|
||||
$(MKVER_U) download.in download.mak
|
||||
|
||||
cd $(FVROOT)\src\xml
|
||||
$(MKVER_U) sentry.init.js.in sentry.init.js
|
||||
|
||||
#
|
||||
# Build FirstVoices keyboards fv_all.kmp
|
||||
#
|
||||
#
|
||||
# Build FirstVoices keyboards fv_all.kmp
|
||||
#
|
||||
|
||||
cd $(KEYMAN_ROOT)\..\keyboards
|
||||
|
||||
|
|
|
|||
2
resources/gosh/package-lock.json
generated
2
resources/gosh/package-lock.json
generated
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"name": "@keymanapp/resources-gosh",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"lockfileVersion": 1
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/resources-gosh",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"description": "Good Ol' Shell",
|
||||
"author": "Marc Durdin <marc@keyman.com> (https://github.com/mcdurdin)",
|
||||
"contributors": [
|
||||
|
|
|
|||
2
resources/web-environment/package-lock.json
generated
2
resources/web-environment/package-lock.json
generated
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"name": "@keymanapp/web-environment",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"lockfileVersion": 1
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@keymanapp/web-environment",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"description": "A compilation utility for passing select environment variables into our TS builds",
|
||||
"author": "Joshua Horton <joshua_horton@sil.org> (https://github.com/jahorton)",
|
||||
"homepage": "https://github.com/keymanapp/keyman",
|
||||
|
|
@ -17,6 +17,6 @@
|
|||
"url": "https://github.com/keymanapp/keyman/issues"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@keymanapp/resources-gosh": "^15.0.166"
|
||||
"@keymanapp/resources-gosh": "^15.0.171"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
2
web/package-lock.json
generated
2
web/package-lock.json
generated
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "keyman",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "keyman",
|
||||
"version": "15.0.166",
|
||||
"version": "15.0.171",
|
||||
"description": "Facilitates text input in any language.",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
|
@ -18,8 +18,8 @@
|
|||
},
|
||||
"homepage": "https://github.com/keymanapp/keyman#readme",
|
||||
"devDependencies": {
|
||||
"@keymanapp/resources-gosh": "^15.0.166",
|
||||
"@keymanapp/web-sentry-manager": "^15.0.166",
|
||||
"@keymanapp/resources-gosh": "^15.0.171",
|
||||
"@keymanapp/web-sentry-manager": "^15.0.171",
|
||||
"@sentry/cli": "^1.52.3",
|
||||
"chai": "^4.3.4",
|
||||
"google-closure-compiler-java": "^20200224.0.0",
|
||||
|
|
@ -52,13 +52,13 @@
|
|||
"sentry-cli": "sentry-cli"
|
||||
},
|
||||
"dependencies": {
|
||||
"@keymanapp/input-processor": "^15.0.166",
|
||||
"@keymanapp/keyboard-processor": "^15.0.166",
|
||||
"@keymanapp/lexical-model-layer": "^15.0.166",
|
||||
"@keymanapp/models-types": "^15.0.166",
|
||||
"@keymanapp/recorder-core": "^15.0.166",
|
||||
"@keymanapp/web-environment": "^15.0.166",
|
||||
"@keymanapp/web-utils": "^15.0.166",
|
||||
"@keymanapp/input-processor": "^15.0.171",
|
||||
"@keymanapp/keyboard-processor": "^15.0.171",
|
||||
"@keymanapp/lexical-model-layer": "^15.0.171",
|
||||
"@keymanapp/models-types": "^15.0.171",
|
||||
"@keymanapp/recorder-core": "^15.0.171",
|
||||
"@keymanapp/web-environment": "^15.0.171",
|
||||
"@keymanapp/web-utils": "^15.0.171",
|
||||
"@types/node": "^11.9.4",
|
||||
"es6-shim": "^0.35.5",
|
||||
"eventemitter3": "^4.0.0"
|
||||
|
|
|
|||
1
windows/src/.gitignore
vendored
1
windows/src/.gitignore
vendored
|
|
@ -30,7 +30,6 @@ global/delphi/cust/MessageIdentifierConsts.pas
|
|||
|
||||
# These are built from corresponding manifest.in and version.in
|
||||
**/manifest.xml
|
||||
**/version.rc
|
||||
|
||||
# Breakpad files generated for Sentry
|
||||
**/*.sym
|
||||
|
|
|
|||
|
|
@ -15,8 +15,10 @@ EXT=$(ROOT)\src\ext
|
|||
INCLUDE=$(ROOT)\src\global\inc;$(INCLUDE)
|
||||
|
||||
!ifndef EXCLUDEPATHDEFINES
|
||||
!ifndef NODELPHI
|
||||
!include $(ROOT)\src\PathDefines.mak
|
||||
!endif
|
||||
!endif
|
||||
|
||||
PROGRAM=$(ROOT)\bin
|
||||
BUILD=$(ROOT)\build
|
||||
|
|
@ -28,26 +30,26 @@ INSTALLPATH_KEYMANDEVELOPER=%ProgramFiles(X86)%\Keyman\Keyman Developer
|
|||
INSTALLPATH_KEYMANENGINE=%CommonProgramFiles(X86)%\Keyman\Keyman Engine
|
||||
|
||||
!IFDEF DEBUG
|
||||
MAKEFLAG_DEBUG=-DDEBUG
|
||||
DELPHI_MSBUILD_FLAG_DEBUG=/p:Config=Debug
|
||||
MAKEFLAG_DEBUG="DEBUG=$(DEBUG)"
|
||||
DELPHI_MSBUILD_FLAG_DEBUG="/p:Config=Debug"
|
||||
!ELSE
|
||||
DELPHI_MSBUILD_FLAG_DEBUG=/p:Config=Release
|
||||
DELPHI_MSBUILD_FLAG_DEBUG="/p:Config=Release"
|
||||
!ENDIF
|
||||
|
||||
!IFDEF USERDEFINES
|
||||
MAKEFLAG_USERDEFINES=-DUSERDEFINES
|
||||
MAKEFLAG_USERDEFINES="USERDEFINES=$(USERDEFINES)"
|
||||
!ENDIF
|
||||
|
||||
!IFDEF SC_TIMESTAMP
|
||||
MAKEFLAG_SC_TIMESTAMP=-DSC_TIMESTAMP
|
||||
MAKEFLAG_SC_TIMESTAMP="SC_TIMESTAMP=$(SC_TIMESTAMP)"
|
||||
!ENDIF
|
||||
|
||||
!IFDEF BUILDHELP
|
||||
MAKEFLAG_BUILDHELP=-DBUILDHELP
|
||||
MAKEFLAG_BUILDHELP="BUILDHELP=$(BUILDHELP)"
|
||||
!ENDIF
|
||||
|
||||
!IFDEF BUILDRTF
|
||||
MAKEFLAG_BUILDRTF=-DBUILDRTF
|
||||
MAKEFLAG_BUILDRTF="BUILDRTF=$(BUILDRTF)"
|
||||
!ENDIF
|
||||
|
||||
!IFDEF REL_SUFFIX
|
||||
|
|
@ -55,23 +57,23 @@ INSTALLPATH_KEYMANENGINE=%CommonProgramFiles(X86)%\Keyman\Keyman Engine
|
|||
!ENDIF
|
||||
|
||||
!IFDEF LINT
|
||||
MAKEFLAG_LINT=-DLINT
|
||||
MAKEFLAG_LINT="LINT=$(LINT)"
|
||||
!ENDIF
|
||||
|
||||
!IFDEF NOUI
|
||||
MAKEFLAG_QUIET=-DNOUI
|
||||
MAKEFLAG_QUIET="NOUI=$(NOUI)"
|
||||
!ELSE
|
||||
!IFDEF QUIET
|
||||
MAKEFLAG_QUIET=-DQUIET
|
||||
MAKEFLAG_QUIET="QUIET=$(QUIET)"
|
||||
!ENDIF
|
||||
!ENDIF
|
||||
|
||||
!IFDEF RELEASE_OEM
|
||||
MAKEFLAG_RELEASE_OEM=-DRELEASE_OEM
|
||||
MAKEFLAG_RELEASE_OEM="RELEASE_OEM=$(RELEASE_OEM)"
|
||||
!ENDIF
|
||||
|
||||
!IFDEF QUICK_BUILD_KEYMAN
|
||||
MAKEFLAG_QUICK_BUILD_KEYMAN=-DQUICK_BUILD_KEYMAN
|
||||
MAKEFLAG_QUICK_BUILD_KEYMAN="QUICK_BUILD_KEYMAN=$(QUICK_BUILD_KEYMAN)"
|
||||
!ENDIF
|
||||
|
||||
#
|
||||
|
|
@ -97,7 +99,7 @@ DCC32PATH=C:\Program Files (x86)\Embarcadero\Studio\$(DELPHI_VERSION)\bin
|
|||
# Pass local configuration through to sub-instances of MAKE
|
||||
#
|
||||
|
||||
MAKE="$(DCC32PATH)\make" -l $(MAKEFLAG_QUICK_BUILD_KEYMAN) $(MAKEFLAG_USERDEFINES) $(MAKEFLAG_DEBUG) $(MAKEFLAG_BUILDHELP) $(MAKEFLAG_BUILDRTF) $(MAKEFLAG_SC_TIMESTAMP) $(MAKEFLAG_LINT) $(MAKEFLAG_QUIET) $(MAKEFLAG_RELEASE_OEM)
|
||||
MAKE="nmake" /C $(MAKEFLAG_QUICK_BUILD_KEYMAN) $(MAKEFLAG_USERDEFINES) $(MAKEFLAG_DEBUG) $(MAKEFLAG_BUILDHELP) $(MAKEFLAG_BUILDRTF) $(MAKEFLAG_SC_TIMESTAMP) $(MAKEFLAG_LINT) $(MAKEFLAG_QUIET) $(MAKEFLAG_RELEASE_OEM)
|
||||
|
||||
#
|
||||
# Delphi build commands
|
||||
|
|
@ -118,13 +120,13 @@ DELPHIWARNINGS=-W+MESSAGE_DIRECTIVE -W+IMPLICIT_STRING_CAST -W+IMPLICIT_STRING_C
|
|||
DELPHIWARNINGS=-W-MESSAGE_DIRECTIVE -W-IMPLICIT_STRING_CAST -W-IMPLICIT_STRING_CAST_LOSS -W-EXPLICIT_STRING_CAST -W-EXPLICIT_STRING_CAST_LOSS -W-CVT_WCHAR_TO_ACHAR -W-CVT_NARROWING_STRING_LOST -W-CVT_ACHAR_TO_WCHAR -W-CVT_WIDENING_STRING_LOST -W-UNICODE_TO_LOCALE -W-LOCALE_TO_UNICODE -W-IMPLICIT_VARIANTS -W-IMPLICIT_INTEGER_CAST_LOSS -W-IMPLICIT_CONVERSION_LOSS -W-COMBINING_SIGNED_UNSIGNED64 -W-COMBINING_SIGNED_UNSIGNED64
|
||||
!ENDIF
|
||||
|
||||
DELPHIDPRPARAMS=-Q -B -GD -H -VT -$C+ -$D+ -$J+ -$L+ -$O+ -$Q- -$R- -$W+ -$Y+ -E. $(DELPHIWARNINGS) -I$(DELPHIINCLUDES) -U$(DELPHIINCLUDES) -R$(DELPHIINCLUDES) -NSVcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Web;Soap;Winapi;System.Win -NU.\obj\Win32\$(TARGET_PATH) -E.\bin\Win32\$(TARGET_PATH)
|
||||
DELPHIDPRPARAMS64=-Q -B -GD -H -VT -$C+ -$D+ -$J+ -$L+ -$O+ -$Q- -$R- -$W+ -$Y+ -E. $(DELPHIWARNINGS) -I$(DELPHIINCLUDES) -U$(DELPHIINCLUDES) -R$(DELPHIINCLUDES) -NSVcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Web;Soap;Winapi;System.Win -NU.\obj\Win64\$(TARGET_PATH) -E.\bin\Win64\$(TARGET_PATH)
|
||||
DELPHIDPKPARAMS=-Q -B -GD -VT -$C+ -$D+ -$J+ -$L+ -$O+ -$Q- -$R- -$W+ -$Y+ -E. $(DELPHIWARNINGS) -I$(DELPHIINCLUDES) -U$(DELPHIINCLUDES) -R$(DELPHIINCLUDES) -NSVcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Web;Soap;Winapi;System.Win -LE$(OUTLIB) -LN$(OUTLIB) -NSData -NUobj\Win32\$(TARGET_PATH)
|
||||
DELPHIDPRPARAMS=-Q -B -GD -H -VT -^$C+ -^$D+ -^$J+ -^$L+ -^$O+ -^$Q- -^$R- -^$W+ -^$Y+ -E. $(DELPHIWARNINGS) -I$(DELPHIINCLUDES) -U$(DELPHIINCLUDES) -R$(DELPHIINCLUDES) -NSVcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Web;Soap;Winapi;System.Win -NU.\obj\Win32\$(TARGET_PATH) -E.\bin\Win32\$(TARGET_PATH)
|
||||
DELPHIDPRPARAMS64=-Q -B -GD -H -VT -^$C+ -^$D+ -^$J+ -^$L+ -^$O+ -^$Q- -^$R- -^$W+ -^$Y+ -E. $(DELPHIWARNINGS) -I$(DELPHIINCLUDES) -U$(DELPHIINCLUDES) -R$(DELPHIINCLUDES) -NSVcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Web;Soap;Winapi;System.Win -NU.\obj\Win64\$(TARGET_PATH) -E.\bin\Win64\$(TARGET_PATH)
|
||||
DELPHIDPKPARAMS=-Q -B -GD -VT -^$C+ -^$D+ -^$J+ -^$L+ -^$O+ -^$Q- -^$R- -^$W+ -^$Y+ -E. $(DELPHIWARNINGS) -I$(DELPHIINCLUDES) -U$(DELPHIINCLUDES) -R$(DELPHIINCLUDES) -NSVcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Web;Soap;Winapi;System.Win -LE$(OUTLIB) -LN$(OUTLIB) -NSData -NUobj\Win32\$(TARGET_PATH)
|
||||
|
||||
!IFDEF NOUI
|
||||
DCC32="$(DCC32PATH)\dcc32.exe" $(DELPHIDPRPARAMS)
|
||||
DCC32DPK="$(DCC32PATH)\dcc32.exe" $(DELPHIDPKPARAMS)
|
||||
DCC32=cmd /c "$(DCC32PATH)\dcc32.exe" $(DELPHIDPRPARAMS)
|
||||
DCC32DPK=cmd /c "$(DCC32PATH)\dcc32.exe" $(DELPHIDPKPARAMS)
|
||||
!ELSE
|
||||
!IFDEF QUIET
|
||||
DCC32=@$(DEVTOOLS) -dccq $(DELPHIDPRPARAMS)
|
||||
|
|
@ -141,8 +143,14 @@ DCC64="$(DCC32PATH)\dcc64.exe" $(DELPHIDPRPARAMS64) -N0x64\ -Ex64\
|
|||
# Delphi MSBuild related commands and macros
|
||||
#
|
||||
|
||||
# Warning: whitespace is horribly significant in the following macro -- particularly lack of space before &&
|
||||
DELPHI_MSBUILD=set DCC32PATH=$(DCC32PATH)&& $(ROOT)\src\buildtools\msbuild-wrapper.bat $(DELPHI_MSBUILD_FLAG_DEBUG)
|
||||
DELPHI_MSBUILD=$(ROOT)\src\buildtools\msbuild-wrapper.bat "$(DCC32PATH)" $(DELPHI_MSBUILD_FLAG_DEBUG)
|
||||
|
||||
!IFDEF NODELPHI
|
||||
DCC32=echo skipping
|
||||
DCC32DPK=echo skipping
|
||||
DCC64=echo skipping
|
||||
DELPHI_MSBUILD=echo skipping
|
||||
!ENDIF
|
||||
|
||||
# Visual C++ x86, x64
|
||||
WIN32_TARGET_PATH=bin\Win32\$(TARGET_PATH)
|
||||
|
|
@ -170,11 +178,11 @@ MT=mt.exe
|
|||
VCBUILD=error
|
||||
|
||||
!IFDEF DEBUG
|
||||
MSBUILD_BUILD=/t:Build /p:Configuration=Debug
|
||||
MSBUILD_CLEAN=/t:Clean /p:Configuration=Debug
|
||||
MSBUILD_BUILD=/t:Build /p:Configuration=Debug
|
||||
MSBUILD_CLEAN=/t:Clean /p:Configuration=Debug
|
||||
!ELSE
|
||||
MSBUILD_BUILD=/t:Rebuild /p:Configuration=Release
|
||||
MSBUILD_CLEAN=/t:Clean /p:Configuration=Release
|
||||
MSBUILD_BUILD=/t:Rebuild /p:Configuration=Release
|
||||
MSBUILD_CLEAN=/t:Clean /p:Configuration=Release
|
||||
!ENDIF
|
||||
|
||||
COPY=copy
|
||||
|
|
@ -186,7 +194,9 @@ WZUNZIP=$(WZZIPPATH) e
|
|||
# TDSPACK=error! $(ROOT)\src\buildtools\tdspack\tdspack -e
|
||||
# TDSPACKCOMPRESS=error! $(ROOT)\src\buildtools\tdspack\tdspack -o
|
||||
|
||||
TDS2DBG=$(ROOT)\bin\buildtools\tds2dbg
|
||||
# we are using cmd /c because tds2dbg is failing on direct execution
|
||||
# from nmake
|
||||
TDS2DBG=cmd /c $(ROOT)\bin\buildtools\tds2dbg
|
||||
SENTRYTOOL=$(ROOT)\bin\buildtools\sentrytool
|
||||
SENTRYTOOL_DELPHIPREP=$(SENTRYTOOL) delphiprep -r $(KEYMAN_ROOT) -i $(DELPHIINCLUDES)
|
||||
|
||||
|
|
@ -205,14 +215,12 @@ WIXHEAT=$(WIXPATH)\heat.exe
|
|||
|
||||
LINKPATH=link.exe
|
||||
|
||||
TORTOISEPROC=C:\Progra~1\TortoiseSVN\bin\TortoiseProc.exe
|
||||
|
||||
#
|
||||
# Certificates and code signing
|
||||
#
|
||||
|
||||
!ifdef SIGNCODE_BUILD
|
||||
MAKE=$(MAKE) -DSIGNCODE_BUILD
|
||||
MAKE=$(MAKE) "SIGNCODE_BUILD=$(SIGNCODE_BUILD)"
|
||||
!else
|
||||
MAKE=$(MAKE)
|
||||
!endif
|
||||
|
|
@ -252,25 +260,14 @@ PLATFORM=Win32
|
|||
# in the same way as /resources/build/build-utils.sh.
|
||||
#
|
||||
|
||||
MKVER_APP=$(PROGRAM)\buildtools\mkver
|
||||
!ifdef GIT_BASH_FOR_KEYMAN
|
||||
MKVER_SH=$(GIT_BASH_FOR_KEYMAN) $(ROOT)\src\buildtools\mkver.sh
|
||||
!else
|
||||
MKVER_SH=start /wait $(ROOT)\src\buildtools\mkver.sh
|
||||
!endif
|
||||
|
||||
!IFDEF VERSION_TXT_PATH
|
||||
MKVER_VERSION_TXT=$(VERSION_TXT_PATH)\version.in
|
||||
!ELSE
|
||||
MKVER_VERSION_TXT=..\version.in
|
||||
!ENDIF
|
||||
|
||||
MKVER_TIER_MD=$(KEYMAN_ROOT)\TIER.md
|
||||
MKVER_VERSION_MD=$(KEYMAN_ROOT)\VERSION.md
|
||||
|
||||
MKVER_COMMON_PARAMS=-tier "$(MKVER_TIER_MD)" -version "$(MKVER_VERSION_MD)"
|
||||
|
||||
# Update a version.rc file
|
||||
MKVER_V=$(MKVER_APP) $(MKVER_COMMON_PARAMS) -v $(MKVER_VERSION_TXT) version.in version.rc
|
||||
# Update a manifest.xml file
|
||||
MKVER_M=$(MKVER_APP) $(MKVER_COMMON_PARAMS) -m manifest.in manifest.xml
|
||||
# Token replacement for all other file types; pattern: $(MKVER_U) <f.in> <f.out>
|
||||
MKVER_U=$(MKVER_APP) $(MKVER_COMMON_PARAMS) -u
|
||||
MKVER_M=$(MKVER_SH) manifest.in manifest.xml
|
||||
MKVER_U=$(MKVER_SH)
|
||||
|
||||
#
|
||||
# Symstore
|
||||
|
|
@ -294,10 +291,10 @@ KEYMAN_SYMSTOREPATH=$(KEYMAN_ROOT)\..\symbols
|
|||
# symbols in the symstore index which we can purge later on.
|
||||
__VERSION_WITH_TAG=$(VERSION_WIN)-$(VERSION_TIER)
|
||||
!IFNDEF TEAMCITY_VERSION
|
||||
__VERSION_WITH_TAG=$(__VERSION_WITH_TAG)-local
|
||||
__VERSION_WITH_TAG=$(__VERSION_WITH_TAG)-local
|
||||
!ELSE
|
||||
!IFDEF TEAMCITY_PR_NUMBER
|
||||
__VERSION_WITH_TAG=$(__VERSION_WITH_TAG)-test-$(TEAMCITY_PR_NUMBER)
|
||||
__VERSION_WITH_TAG=$(__VERSION_WITH_TAG)-test-$(TEAMCITY_PR_NUMBER)
|
||||
!ENDIF
|
||||
!ENDIF
|
||||
|
||||
|
|
@ -308,3 +305,5 @@ SYMSTORE="C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\symstore.exe" add
|
|||
/v "$(VERSION_WIN)" \
|
||||
/c "Version: $(__VERSION_WITH_TAG)" \
|
||||
/compress /f
|
||||
|
||||
CLEAN=-del /S /Q
|
||||
|
|
|
|||
|
|
@ -24,14 +24,14 @@ ROOT=c:\keyman\windows
|
|||
#
|
||||
|
||||
build: $(BUILDPREREQ)
|
||||
$(MAKE) -DTARGET=build $(TARGETS)
|
||||
$(MAKE) "TARGET=build" $(TARGETS)
|
||||
|
||||
!IFNDEF NOTARGET_SIGNCODE
|
||||
signcode:
|
||||
$(MAKE) -DTARGET=signcode $(TARGETS)
|
||||
$(MAKE) "TARGET=signcode" $(TARGETS)
|
||||
|
||||
symbols:
|
||||
$(MAKE) -DTARGET=symbols $(TARGETS)
|
||||
$(MAKE) "TARGET=symbols" $(TARGETS)
|
||||
!ELSE
|
||||
signcode:
|
||||
rem no signcode required
|
||||
|
|
@ -42,20 +42,20 @@ symbols:
|
|||
|
||||
build-release:
|
||||
!IFDEF RELEASE_TARGETS
|
||||
$(MAKE) -DTARGET=build-release $(RELEASE_TARGETS)
|
||||
$(MAKE) "TARGET=build-release" $(RELEASE_TARGETS)
|
||||
!ELSE
|
||||
@rem
|
||||
!ENDIF
|
||||
|
||||
clean:
|
||||
$(MAKE) -DTARGET=clean $(TARGETS) $(CLEANS)
|
||||
$(MAKE) "TARGET=clean" $(TARGETS) $(CLEANS)
|
||||
|
||||
install:
|
||||
$(MAKE) -DTARGET=install $(TARGETS)
|
||||
$(MAKE) "TARGET=install" $(TARGETS)
|
||||
|
||||
test-manifest:
|
||||
!IFDEF MANIFESTS
|
||||
$(MAKE) -DTARGET=test-manifest $(MANIFESTS)
|
||||
$(MAKE) "TARGET=test-manifest" $(MANIFESTS)
|
||||
!ELSE
|
||||
$(MAKE) -DTARGET=test-manifest $(TARGETS)
|
||||
$(MAKE) "TARGET=test-manifest" $(TARGETS)
|
||||
!ENDIF
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
default:
|
||||
@echo The following make targets are available:
|
||||
@echo . build builds everything except help files (-DBUILDHELP to build help)
|
||||
@echo . build builds everything except help files (BUILDHELP=1 to build help)
|
||||
@echo . install installs packages into Delphi IDE (run after a build)
|
||||
@echo . clean removes all temp files
|
||||
@echo . release make a release
|
||||
|
|
@ -18,7 +18,7 @@ default:
|
|||
@echo . DEBUG Include debug information
|
||||
@echo . SC_TIMESTAMP Don't timestamp certificates (for internal releases only, offline)
|
||||
@echo . BUILDHELP Build the helpfiles (implicit when 'make release')
|
||||
@echo . LINT Turns on $MESSAGE hints and warnings and all extra string warnings
|
||||
@echo . LINT Turns on ^$MESSAGE hints and warnings and all extra string warnings
|
||||
@echo . QUIET Ignore hints and warnings
|
||||
@echo . RELEASE_OEM Build executables for third party products in oem folder (e.g. FirstVoices)
|
||||
@echo.
|
||||
|
|
@ -105,11 +105,11 @@ release: clean-pathdefines test-release-cef-path test-releasebuildcheck test-uia
|
|||
cd $(ROOT)\src
|
||||
$(MAKE) global-versions
|
||||
$(MAKE) build-release-wrapper
|
||||
# $(MAKE) clean <-- this makes it harder to do OEM builds
|
||||
# $(MAKE) clean <-- this makes it harder to do OEM builds
|
||||
cd $(ROOT)\src
|
||||
|
||||
clean-pathdefines: test-releasebuildcheck
|
||||
# test-releasebuildcheck builds devtools for us
|
||||
# test-releasebuildcheck builds devtools for us
|
||||
$(PROGRAM)\buildtools\devtools -ri
|
||||
|
||||
#
|
||||
|
|
@ -117,11 +117,13 @@ clean-pathdefines: test-releasebuildcheck
|
|||
# and checkout the appropriate version of CEF as determined by CEF_VERSION.md
|
||||
#
|
||||
test-release-cef-path:
|
||||
!ifndef SC_TIMESTAMP
|
||||
!ifdef GIT_BASH_FOR_KEYMAN
|
||||
$(GIT_BASH_FOR_KEYMAN) $(ROOT)\src\buildtools\cef-checkout.sh
|
||||
!else
|
||||
start /wait $(ROOT)\src\buildtools\cef-checkout.sh
|
||||
!endif
|
||||
!endif
|
||||
|
||||
#
|
||||
# Test that certificate checking is enabled and that certificate is accessible
|
||||
|
|
@ -156,7 +158,7 @@ test-7zip:
|
|||
# Test that klog is disabled
|
||||
#
|
||||
|
||||
test-klog: mkver-app
|
||||
test-klog:
|
||||
cd $(ROOT)\src\buildtools\test-klog
|
||||
$(MAKE) verify
|
||||
cd $(ROOT)\src
|
||||
|
|
@ -165,7 +167,7 @@ test-klog: mkver-app
|
|||
# Test that we haven't already built this release
|
||||
#
|
||||
|
||||
test-releaseexists: mkver-app
|
||||
test-releaseexists:
|
||||
cd $(ROOT)\src\developer\inst
|
||||
$(MAKE) test-releaseexists
|
||||
cd $(ROOT)\src
|
||||
|
|
@ -210,7 +212,7 @@ test-coverity:
|
|||
tar cvzf keyman-windows-coverity.tgz cov-int
|
||||
rd /s/q cov-int
|
||||
echo Manual upload keyman-windows-coverity.tgz to coverity
|
||||
# TODO: automated upload as part of build
|
||||
# TODO: automated upload as part of build
|
||||
|
||||
test-coverity-internal:
|
||||
cd $(ROOT)\src\developer\kmanalyze
|
||||
|
|
@ -236,14 +238,14 @@ build-release-wrapper: clean-output global-versions
|
|||
$(MAKE) dirs
|
||||
$(MAKE) build-tools
|
||||
!ifdef QUICK_BUILD_KEYMAN
|
||||
$(MAKE) -DSIGNCODE_BUILD build
|
||||
$(MAKE) -DSIGNCODE_BUILD build-release
|
||||
$(MAKE) "SIGNCODE_BUILD=SIGNCODE_BUILD" build
|
||||
$(MAKE) "SIGNCODE_BUILD=SIGNCODE_BUILD" build-release
|
||||
$(MAKE) signcode
|
||||
!else
|
||||
$(MAKE) -DSIGNCODE_BUILD build unit-tests
|
||||
$(MAKE) -DSIGNCODE_BUILD build-release
|
||||
$(MAKE) "SIGNCODE_BUILD=SIGNCODE_BUILD" build unit-tests
|
||||
$(MAKE) "SIGNCODE_BUILD=SIGNCODE_BUILD" build-release
|
||||
$(MAKE) signcode
|
||||
$(MAKE) -DTARGET=test test
|
||||
$(MAKE) "TARGET=test" test
|
||||
!endif
|
||||
|
||||
cd $(ROOT)\src\engine\inst
|
||||
|
|
@ -273,23 +275,32 @@ build-release-wrapper-oem:
|
|||
# Tools needed to complete a build
|
||||
#
|
||||
|
||||
global-versions: mkver-app
|
||||
# Build our root version.txt
|
||||
global-versions:
|
||||
# Build our root version.txt
|
||||
cd $(ROOT)\src
|
||||
|
||||
$(MKVER_U) $(ROOT)\src\global\inc\keymanversion_build.in $(ROOT)\src\global\inc\keymanversion_build.h
|
||||
$(MKVER_U) $(ROOT)\src\global\delphi\general\keymanversion_build.in $(ROOT)\src\global\delphi\general\keymanversion_build.inc
|
||||
|
||||
build-tools: global-versions
|
||||
!ifdef NODELPHI
|
||||
echo Skipping build-tools
|
||||
!else
|
||||
# we need to build devtools directly because otherwise we have a
|
||||
# chicken-and-egg issue with PathDefines.mak
|
||||
cd $(ROOT)\src\buildtools\devtools
|
||||
$(MAKE)
|
||||
|
||||
# We'll build a default PathDefines.mak if it is missing here so we can
|
||||
# go on and do the rest of the build
|
||||
# We'll build a default PathDefines.mak if it is missing here so we can
|
||||
# go on and do the rest of the build
|
||||
$(PROGRAM)\buildtools\devtools -ti
|
||||
!endif
|
||||
|
||||
message-constants: build-tools
|
||||
!ifdef NODELPHI
|
||||
echo Skipping message-constants
|
||||
!else
|
||||
$(PROGRAM)\buildtools\devtools -buildmessageconstants $(ROOT)\src\desktop\kmshell\xml\strings.xml $(ROOT)\src\global\delphi\cust\MessageIdentifierConsts.pas
|
||||
!endif
|
||||
|
||||
#
|
||||
# Remove all files from output folders to ensure no legacy files left in a release
|
||||
|
|
|
|||
3
windows/src/NMAKE.md
Normal file
3
windows/src/NMAKE.md
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
# Using nmake for build
|
||||
|
||||
Note: you must use nmake to run the build now; Borland make will no longer work.
|
||||
|
|
@ -7,27 +7,37 @@
|
|||
## Building Keyman for Windows and Keyman Developer
|
||||
|
||||
1. Start 'Developer Command Prompt for VS 2019'.
|
||||
2. Run `make build` from the **windows/src** folder.
|
||||
2. Run `nmake build` from the **windows/src** folder.
|
||||
3. Artifacts from a successful build will be placed in **windows/bin** folder.
|
||||
|
||||
*Note*: running `make build` will currently reset the packages and path settings
|
||||
*Note*: running `nmake build` will currently reset the packages and path settings
|
||||
in your Delphi environment. If you use Delphi for other projects, you should
|
||||
consider building Keyman under a login user dedicated to it, or in a VM.
|
||||
|
||||
Type `make` to see build targets. Common build targets are:
|
||||
Type `nmake` to see build targets. Common build targets are:
|
||||
|
||||
* `make build`
|
||||
* `nmake build`
|
||||
: builds Keyman for Windows and Keyman Developer
|
||||
|
||||
* `make clean`
|
||||
* `nmake clean`
|
||||
: remove temporary files and build artifacts
|
||||
|
||||
* `make release`
|
||||
* `nmake release`
|
||||
: makes a release of all Keyman Windows projects
|
||||
|
||||
* `make install`
|
||||
* `nmake install`
|
||||
: install some or all components to Program Files (requires elevated command prompt).
|
||||
|
||||
### Building without Delphi
|
||||
|
||||
It is possible to build all components that do _not_ require Delphi by adding
|
||||
the environment variable `NODELPHI=1` before starting the build. Currently many
|
||||
components are Delphi-based, but if you are working just in Keyman Core, the
|
||||
compiler, or Keyman Engine's C++ components, you may be able to get away without
|
||||
building them. In this situation, we recommend copying the relevant Delphi-built
|
||||
components into windows/bin folders from a compatible installed version of
|
||||
Keyman for testing and debugging purposes.
|
||||
|
||||
### Release builds
|
||||
|
||||
A release build is not usually needed for local development. To run a release
|
||||
|
|
@ -36,7 +46,7 @@ Certificates, below. Official release builds for Keyman are built in the Keyman
|
|||
project's CI environment.
|
||||
|
||||
1. Start 'Developer Command Prompt for VS 2019'.
|
||||
2. Run `make release` from the **windows/src** folder.
|
||||
2. Run `nmake release` from the **windows/src** folder.
|
||||
3. Artifacts from a successful build will be placed in **windows/release**
|
||||
folder.
|
||||
4. **buildtools/help-keyman-com.sh** will push updated documentation to
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
CLEAN=@-del /S /Q
|
||||
!CMDSWITCHES +S
|
||||
|
||||
def-clean:
|
||||
$(CLEAN) *.err *.stat *.dproj.local *.Build.CppClean.Log *.suo *.jdbg *.dbg *.dcu *.~* *.dsk *.exe *.rsm *.ncb *.opt *.pch *.plg *.aps *.001 *.sbr *.dep *.drc *.bak *.pdb *.lib *.cod *.ilk *.tds vc80.idb *.map *.bsc version.rc version.res manifest.xml manifest.res >nul 2>nul
|
||||
$(CLEAN) *.err *.stat *.dproj.local *.Build.CppClean.Log *.suo *.jdbg *.dbg *.dcu *.~* *.dsk *.exe *.rsm *.ncb *.opt *.pch *.plg *.aps *.001 *.sbr *.dep *.drc *.bak *.pdb *.lib *.cod *.ilk *.tds vc80.idb *.map *.bsc version.res manifest.xml manifest.res >nul 2>nul
|
||||
$(CLEAN) ExcMagic.Debug *.wixpdb *.identcache *.embed.manifest *.embed.manifest.res *.intermediate.manifest error.log >nul 2>nul
|
||||
if exist bin rd /s/q bin
|
||||
if exist obj rd /s/q obj
|
||||
|
||||
!CMDSWITCHES -S
|
||||
|
||||
versionhistory-app: dirs
|
||||
$(MAKE) versionhistory-app2
|
||||
|
||||
|
|
@ -13,59 +15,57 @@ versionhistory-app2:
|
|||
cd $(ROOT)\src\buildtools
|
||||
$(MAKE) versionhistory
|
||||
|
||||
mkver-app: dirs
|
||||
cd $(ROOT)\src\buildtools\mkver
|
||||
$(MAKE)
|
||||
cd $(ROOT)\src
|
||||
|
||||
devtools-app: dirs
|
||||
cd $(ROOT)\src\buildtools
|
||||
$(MAKE) devtools
|
||||
cd $(ROOT)\src
|
||||
|
||||
version.res: version.in
|
||||
$(MKVER_V)
|
||||
rc version.rc
|
||||
version.res: version.rc
|
||||
rc $?
|
||||
|
||||
manifest.res: version.res
|
||||
manifest.res: manifest.in version.res
|
||||
$(MKVER_M)
|
||||
rc manifest.rc
|
||||
|
||||
!CMDSWITCHES +S
|
||||
|
||||
dirs:
|
||||
@-mkdir $(ROOT)\build\desktop 2>nul
|
||||
@-mkdir $(ROOT)\build\engine 2>nul
|
||||
@-mkdir $(ROOT)\build\developer 2>nul
|
||||
@-mkdir $(ROOT)\build\buildtools 2>nul
|
||||
@-mkdir $(ROOT)\build\online 2>nul
|
||||
@-mkdir $(ROOT)\build\support 2>nul
|
||||
@-mkdir $(ROOT)\build\inst 2>nul
|
||||
-mkdir $(ROOT)\build\desktop 2>nul
|
||||
-mkdir $(ROOT)\build\engine 2>nul
|
||||
-mkdir $(ROOT)\build\developer 2>nul
|
||||
-mkdir $(ROOT)\build\buildtools 2>nul
|
||||
-mkdir $(ROOT)\build\online 2>nul
|
||||
-mkdir $(ROOT)\build\support 2>nul
|
||||
-mkdir $(ROOT)\build\inst 2>nul
|
||||
|
||||
@-mkdir $(ROOT)\bin\developer\samples 2>nul
|
||||
@-mkdir $(ROOT)\bin\developer\xml 2>nul
|
||||
@-mkdir $(ROOT)\bin\developer\projects 2>nul
|
||||
@-mkdir $(ROOT)\bin\developer\projects\templates 2>nul
|
||||
@-mkdir $(ROOT)\bin\buildtools 2>nul
|
||||
@-mkdir $(ROOT)\bin\engine 2>nul
|
||||
@-mkdir $(ROOT)\bin\desktop 2>nul
|
||||
@-mkdir $(ROOT)\bin\desktop\xml 2>nul
|
||||
@-mkdir $(ROOT)\bin\support 2>nul
|
||||
@-mkdir $(ROOT)\bin\online 2>nul
|
||||
@-mkdir $(ROOT)\bin\inst 2>nul
|
||||
@-mkdir $(ROOT)\bin\help 2>nul
|
||||
@-mkdir $(ROOT)\bin\help\desktop 2>nul
|
||||
@-mkdir $(ROOT)\bin\help\developer 2>nul
|
||||
@-mkdir $(ROOT)\bin\help\md 2>nul
|
||||
@-mkdir $(ROOT)\bin\help\md\desktop 2>nul
|
||||
@-mkdir $(ROOT)\lib 2>nul
|
||||
@-mkdir $(ROOT)\release 2>nul
|
||||
-mkdir $(ROOT)\bin\developer\samples 2>nul
|
||||
-mkdir $(ROOT)\bin\developer\xml 2>nul
|
||||
-mkdir $(ROOT)\bin\developer\projects 2>nul
|
||||
-mkdir $(ROOT)\bin\developer\projects\templates 2>nul
|
||||
-mkdir $(ROOT)\bin\buildtools 2>nul
|
||||
-mkdir $(ROOT)\bin\engine 2>nul
|
||||
-mkdir $(ROOT)\bin\desktop 2>nul
|
||||
-mkdir $(ROOT)\bin\desktop\xml 2>nul
|
||||
-mkdir $(ROOT)\bin\support 2>nul
|
||||
-mkdir $(ROOT)\bin\online 2>nul
|
||||
-mkdir $(ROOT)\bin\inst 2>nul
|
||||
-mkdir $(ROOT)\bin\help 2>nul
|
||||
-mkdir $(ROOT)\bin\help\desktop 2>nul
|
||||
-mkdir $(ROOT)\bin\help\developer 2>nul
|
||||
-mkdir $(ROOT)\bin\help\md 2>nul
|
||||
-mkdir $(ROOT)\bin\help\md\desktop 2>nul
|
||||
-mkdir $(ROOT)\lib 2>nul
|
||||
-mkdir $(ROOT)\release 2>nul
|
||||
|
||||
@-mkdir $(ROOT)\debug\developer 2>nul
|
||||
@-mkdir $(ROOT)\debug\buildtools 2>nul
|
||||
@-mkdir $(ROOT)\debug\engine 2>nul
|
||||
@-mkdir $(ROOT)\debug\desktop 2>nul
|
||||
@-mkdir $(ROOT)\debug\support 2>nul
|
||||
@-mkdir $(ROOT)\debug\online 2>nul
|
||||
@-mkdir $(ROOT)\debug\inst 2>nul
|
||||
-mkdir $(ROOT)\debug\developer 2>nul
|
||||
-mkdir $(ROOT)\debug\buildtools 2>nul
|
||||
-mkdir $(ROOT)\debug\engine 2>nul
|
||||
-mkdir $(ROOT)\debug\desktop 2>nul
|
||||
-mkdir $(ROOT)\debug\support 2>nul
|
||||
-mkdir $(ROOT)\debug\online 2>nul
|
||||
-mkdir $(ROOT)\debug\inst 2>nul
|
||||
|
||||
!CMDSWITCHES -S
|
||||
|
||||
vcvars32:
|
||||
vcvars32.bat
|
||||
|
|
@ -80,5 +80,10 @@ symbols:
|
|||
cmd /C \
|
||||
for /f %v in ($(KEYMAN_ROOT)\VERSION.md) do \
|
||||
for /f %t in ($(KEYMAN_ROOT)\TIER.md) do \
|
||||
$(MAKE) -DVERSION_TIER=%t -DVERSION_WIN=%v wrap-symbols
|
||||
!ENDIF
|
||||
$(MAKE) "VERSION_TIER=%t" "VERSION_WIN=%v" wrap-symbols
|
||||
!ENDIF
|
||||
|
||||
# This virtual rule forces targets which are folders, e.g. `kmshell` to
|
||||
# always execute
|
||||
.virtual:
|
||||
rem always execute
|
||||
|
|
|
|||
|
|
@ -1,19 +0,0 @@
|
|||
@echo off
|
||||
|
||||
path C:\Windows\Microsoft.NET\Framework\v1.1.4322\
|
||||
path %path%;C:\Program Files\Borland\BDS\4.0\Bin
|
||||
path %path%;%SystemRoot%\system32
|
||||
path %path%;%SystemRoot%
|
||||
path %path%;%SystemRoot%\System32\Wbem
|
||||
path %path%;C:\Program Files\Borland\CaliberRM SDK 2005 R2\lib
|
||||
path %path%;C:\Program Files\Microsoft SQL Server\80\Tools\Binn\
|
||||
path %path%;C:\Program Files\Microsoft SQL Server\90\Tools\binn\
|
||||
path %path%;C:\Program Files\Microsoft SQL Server\90\DTS\Binn\
|
||||
path %path%;C:\Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\
|
||||
path %path%;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\
|
||||
path %path%;c:\program files\wix
|
||||
path %path%;c:\bin
|
||||
|
||||
@call "c:\program files\microsoft platform sdk\setenv.cmd" > nul
|
||||
|
||||
make build signcode
|
||||
|
|
@ -4,51 +4,52 @@
|
|||
|
||||
NOTARGET_SIGNCODE=yes
|
||||
|
||||
TARGETS=devtools sentrytool tds2dbg mkver \
|
||||
!ifdef NODELPHI
|
||||
TARGETS=.virtual
|
||||
!else
|
||||
TARGETS=devtools sentrytool tds2dbg \
|
||||
buildunidata build_standards_data buildpkg test-klog delphiprojectmanager
|
||||
!endif
|
||||
|
||||
CLEANS=clean-buildtools
|
||||
|
||||
!include ..\Header.mak
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
help:
|
||||
cd $(ROOT)\src\buildtools\help
|
||||
$(MAKE) $(TARGET)
|
||||
|
||||
build_standards_data:
|
||||
build_standards_data: .virtual
|
||||
cd $(ROOT)\src\buildtools\build_standards_data
|
||||
$(MAKE) $(TARGET)
|
||||
|
||||
sentrytool:
|
||||
sentrytool: .virtual
|
||||
cd $(ROOT)\src\buildtools\sentrytool
|
||||
$(MAKE) $(TARGET)
|
||||
|
||||
buildunidata:
|
||||
buildunidata: .virtual
|
||||
cd $(ROOT)\src\buildtools\buildunidata
|
||||
$(MAKE) $(TARGET)
|
||||
|
||||
delphiprojectmanager:
|
||||
delphiprojectmanager: .virtual
|
||||
cd $(ROOT)\src\buildtools\delphiprojectmanager
|
||||
$(MAKE) $(TARGET)
|
||||
|
||||
devtools:
|
||||
devtools: .virtual
|
||||
!ifdef NODELPHI
|
||||
echo Skipping devtools
|
||||
!else
|
||||
cd $(ROOT)\src\buildtools\devtools
|
||||
$(MAKE) $(TARGET)
|
||||
!endif
|
||||
|
||||
mkver:
|
||||
cd $(ROOT)\src\buildtools\mkver
|
||||
$(MAKE) $(TARGET)
|
||||
|
||||
buildpkg:
|
||||
buildpkg: .virtual
|
||||
cd $(ROOT)\src\buildtools\buildpkg
|
||||
$(MAKE) $(TARGET)
|
||||
|
||||
test-klog:
|
||||
test-klog: .virtual
|
||||
cd $(ROOT)\src\buildtools\test-klog
|
||||
$(MAKE) $(TARGET)
|
||||
|
||||
tds2dbg:
|
||||
tds2dbg: .virtual
|
||||
cd $(ROOT)\src\buildtools\tds2dbg
|
||||
$(MAKE) $(TARGET)
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
!include ..\..\Defines.mak
|
||||
|
||||
build: version.res dirs
|
||||
$(DELPHI_MSBUILD) buildpkg.dproj /p:Platform=Win32
|
||||
$(DELPHI_MSBUILD) buildpkg.dproj "/p:Platform=Win32"
|
||||
$(SENTRYTOOL_DELPHIPREP) $(WIN32_TARGET_PATH)\buildpkg.exe -dpr buildpkg.dpr
|
||||
$(TDS2DBG) $(WIN32_TARGET_PATH)\buildpkg.exe
|
||||
$(COPY) $(WIN32_TARGET_PATH)\Buildpkg.exe $(PROGRAM)\online
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
#include "../../global/inc/keymanversion.h"
|
||||
|
||||
1 VERSIONINFO
|
||||
FILEVERSION $VERSIONNUM
|
||||
PRODUCTVERSION $VERSIONNUM
|
||||
FILEVERSION KV_FILEVERSION
|
||||
PRODUCTVERSION KV_PRODUCTVERSION
|
||||
FILEFLAGSMASK 0x3fL
|
||||
FILEFLAGS 0x0L
|
||||
FILEOS 0x4L
|
||||
|
|
@ -11,15 +13,15 @@
|
|||
BEGIN
|
||||
BLOCK "0C0904E4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "SIL International\0"
|
||||
VALUE "CompanyName", KV_COMPANY_NAME
|
||||
VALUE "FileDescription", "Buildpkg\0"
|
||||
VALUE "FileVersion", "$VERSION\0"
|
||||
VALUE "FileVersion", KV_VERSION_STRING
|
||||
VALUE "InternalName", "BUILDPKG\0"
|
||||
VALUE "LegalCopyright", "© SIL International\0"
|
||||
VALUE "LegalTrademarks", "\0"
|
||||
VALUE "LegalCopyright", KV_LEGAL_COPYRIGHT
|
||||
VALUE "LegalTrademarks", KV_LEGAL_TRADEMARKS
|
||||
VALUE "OriginalFilename", "BUILDPKG.EXE\0"
|
||||
VALUE "ProductName", "Keyman Build Environment\0"
|
||||
VALUE "ProductVersion", "$VERSION\0"
|
||||
VALUE "ProductVersion", KV_VERSION_STRING
|
||||
VALUE "Comments", "\0"
|
||||
END
|
||||
END
|
||||
|
|
@ -5,7 +5,7 @@
|
|||
!include ..\..\Defines.mak
|
||||
|
||||
build: dirs version.res
|
||||
$(DELPHI_MSBUILD) buildunidata.dproj /p:Platform=Win32
|
||||
$(DELPHI_MSBUILD) buildunidata.dproj "/p:Platform=Win32"
|
||||
$(COPY) $(WIN32_TARGET_PATH)\buildunidata.exe $(PROGRAM)\buildtools
|
||||
|
||||
run:
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
#include "../../global/inc/keymanversion.h"
|
||||
|
||||
1 VERSIONINFO
|
||||
FILEVERSION $VERSIONNUM
|
||||
PRODUCTVERSION $VERSIONNUM
|
||||
FILEVERSION KV_FILEVERSION
|
||||
PRODUCTVERSION KV_PRODUCTVERSION
|
||||
FILEFLAGSMASK 0x3fL
|
||||
FILEFLAGS 0x0L
|
||||
FILEOS 0x4L
|
||||
|
|
@ -11,15 +13,15 @@
|
|||
BEGIN
|
||||
BLOCK "0C0904E4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "SIL International\0"
|
||||
VALUE "CompanyName", KV_COMPANY_NAME
|
||||
VALUE "FileDescription", "MakeCert\0"
|
||||
VALUE "FileVersion", "$VERSION\0"
|
||||
VALUE "FileVersion", KV_VERSION_STRING
|
||||
VALUE "InternalName", "MAKECERT\0"
|
||||
VALUE "LegalCopyright", "© SIL International\0"
|
||||
VALUE "LegalTrademarks", "\0"
|
||||
VALUE "LegalCopyright", KV_LEGAL_COPYRIGHT
|
||||
VALUE "LegalTrademarks", KV_LEGAL_TRADEMARKS
|
||||
VALUE "OriginalFilename", "MAKECERT.EXE\0"
|
||||
VALUE "ProductName", "Keyman Build Environment\0"
|
||||
VALUE "ProductVersion", "$VERSION\0"
|
||||
VALUE "ProductVersion", KV_VERSION_STRING
|
||||
VALUE "Comments", "\0"
|
||||
END
|
||||
END
|
||||
|
|
@ -32,7 +32,10 @@ CEF_VERSION=`cat $CEF_VERSION_MD | tr -d "[:space:]"`
|
|||
# repo!
|
||||
git reset --hard
|
||||
git clean -fd
|
||||
git fetch origin "v$CEF_VERSION"
|
||||
|
||||
if [ "${1-}" != "--offline" ]; then
|
||||
git fetch origin "v$CEF_VERSION"
|
||||
fi
|
||||
git switch "v$CEF_VERSION"
|
||||
|
||||
if [ ! -f ./libcef.dll ]; then
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@
|
|||
!include ..\..\Defines.mak
|
||||
|
||||
build: dirs
|
||||
# build with DCC32 as $DCC32 command uses devtools.exe, and devtools uses this package...
|
||||
# build with DCC32 as $DCC32 command uses devtools.exe, and devtools uses this package...
|
||||
@-mkdir obj\Win32\$(TARGET_PATH)
|
||||
"$(DCC32PATH)\dcc32.exe" -B -E. -I$(DELPHIINCLUDES) -U$(DELPHIINCLUDES) -NSVcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Web;Soap;Winapi;System.Win -LE$(OUTLIB) -LN$(OUTLIB) -NUobj\Win32\$(TARGET_PATH) delphiprojectmanager.dpk
|
||||
cmd /c "$(DCC32PATH)\dcc32.exe" -B -E. -I$(DELPHIINCLUDES) -U$(DELPHIINCLUDES) -NSVcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Web;Soap;Winapi;System.Win -LE$(OUTLIB) -LN$(OUTLIB) -NUobj\Win32\$(TARGET_PATH) delphiprojectmanager.dpk
|
||||
$(DEVTOOLS) -ip $(OUTLIB)\delphiprojectmanager.bpl
|
||||
|
||||
clean: def-clean
|
||||
|
|
|
|||
|
|
@ -15,10 +15,10 @@ EXCLUDEPATHDEFINES=1
|
|||
!include ..\..\Defines.mak
|
||||
|
||||
build: dirs
|
||||
# build with DCC32PATH as $DCC32 command uses devtools.exe...
|
||||
# $(DCC32) devtools.dpr
|
||||
# build with DCC32PATH as $DCC32 command uses devtools.exe...
|
||||
# $(DCC32) devtools.dpr
|
||||
$(DELPHI_MSBUILD) devtools.dproj
|
||||
#"$(DCC32PATH)\dcc32.exe" -Q -B -E. -NSVcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Web;Soap;Winapi;System.Win devtools.dpr
|
||||
#"$(DCC32PATH)\dcc32.exe" -Q -B -E. -NSVcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Web;Soap;Winapi;System.Win devtools.dpr
|
||||
$(COPY) $(WIN32_TARGET_PATH)\devtools.exe $(PROGRAM)\buildtools
|
||||
|
||||
test-releasebuildcheck: build
|
||||
|
|
|
|||
50
windows/src/buildtools/mkver.sh
Normal file
50
windows/src/buildtools/mkver.sh
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Set sensible script defaults:
|
||||
# set -e: Terminate script if a command returns an error
|
||||
set -e
|
||||
# set -u: Terminate script if an unset variable is used
|
||||
set -u
|
||||
|
||||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "$(dirname "$THIS_SCRIPT")/../../../resources/build/build-utils.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
display_usage() {
|
||||
echo "Usage: mkver.sh <file.in> <file.out>"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [[ $# -lt 2 ]]; then
|
||||
display_usage
|
||||
fi
|
||||
|
||||
replaceVersionStrings_Mkver() {
|
||||
# This is similar to replaceVersionStrings in build-utils.sh but supports all
|
||||
# the old mkver strings
|
||||
local infile=$1
|
||||
local outfile=$2
|
||||
|
||||
sed "
|
||||
s/\$VersionWin/$VERSION_WIN/g;
|
||||
s/\$VersionRelease/$VERSION_RELEASE/g;
|
||||
s/\$VersionMajor/$VERSION_MAJOR/g;
|
||||
s/\$VersionMinor/$VERSION_MINOR/g;
|
||||
s/\$VersionPatch/$VERSION_PATCH/g;
|
||||
s/\$Tier/$TIER/g;
|
||||
s/\$Tag/$VERSION_TAG/g;
|
||||
s/\$VersionWithTag/$VERSION_WITH_TAG/g;
|
||||
s/\$VersionRc/$VERSION_MAJOR,$VERSION_MINOR,$VERSION_PATCH,0/g;
|
||||
s/\$Environment/$VERSION_ENVIRONMENT/g;
|
||||
s/\$Version/$VERSION/g;
|
||||
s/\$VERSIONNUM/$VERSION_MAJOR,$VERSION_MINOR,$VERSION_PATCH,0/g;
|
||||
s/\$VERSION/$VERSION_WIN/g;
|
||||
s/\$RELEASE_MAJOR/$VERSION_MAJOR/g;
|
||||
s/\$RELEASE_MINOR/$VERSION_MINOR/g;
|
||||
s/\$RELEASE/$VERSION_RELEASE/g;
|
||||
" "$infile" > "$outfile"
|
||||
}
|
||||
|
||||
replaceVersionStrings_Mkver "$1" "$2"
|
||||
|
|
@ -1,431 +0,0 @@
|
|||
(*
|
||||
Name: Main
|
||||
Copyright: Copyright (C) SIL International.
|
||||
Documentation:
|
||||
Description:
|
||||
Create Date: 28 Sep 2006
|
||||
|
||||
Modified Date: 26 Jun 2012
|
||||
Authors: mcdurdin
|
||||
Related Files:
|
||||
Dependencies:
|
||||
|
||||
Bugs:
|
||||
Todo:
|
||||
Notes:
|
||||
History: 28 Sep 2006 - mcdurdin - Added $GUID and fixed $DATE
|
||||
11 Dec 2009 - mcdurdin - I1807 - Manifest files need version info automatically updated in build
|
||||
04 May 2012 - mcdurdin - I3308 - V9.0 - Start to move towards Delphi namespaces
|
||||
26 Jun 2012 - mcdurdin - I3377 - KM9 - Update code references from 8.0 to 9.0
|
||||
*)
|
||||
unit Main; // I3308
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
WinApi.Windows,
|
||||
System.Classes,
|
||||
System.SysUtils,
|
||||
TagFunctions;
|
||||
|
||||
procedure Run;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
WinApi.ActiveX,
|
||||
System.RegularExpressions,
|
||||
System.Win.ComObj,
|
||||
Xml.XMLIntf,
|
||||
Xml.XMLDoc,
|
||||
|
||||
Keyman.System.KeymanVersionInfo;
|
||||
|
||||
procedure WriteHelp; forward;
|
||||
|
||||
type
|
||||
TMKVerMode = (mmUnknown, mmWriteVersionedFile, mmWriteManifestFile, mmWriteVersionRc);
|
||||
|
||||
const
|
||||
TAG_FILEVERSION = 1;
|
||||
TAG_PRODUCTVERSION = 2;
|
||||
TAG_FILEFLAGS = 3;
|
||||
TAG_VALUE = 4;
|
||||
|
||||
TAG2_COMPANYNAME = 1;
|
||||
TAG2_FILEDESCRIPTION = 2;
|
||||
TAG2_FILEVERSION = 3;
|
||||
TAG2_INTERNALNAME = 4;
|
||||
TAG2_LEGALCOPYRIGHT = 5;
|
||||
TAG2_LEGALTRADEMARKS = 6;
|
||||
TAG2_ORIGINALFILENAME = 7;
|
||||
TAG2_PRODUCTNAME = 8;
|
||||
TAG2_PRODUCTVERSION = 9;
|
||||
TAG2_COMMENTS = 10;
|
||||
|
||||
var
|
||||
PredefTags: array[1..4] of string =
|
||||
('FILEVERSION', 'PRODUCTVERSION', 'FILEFLAGS', 'VALUE');
|
||||
|
||||
StringTags: array[1..10] of string =
|
||||
('"CompanyName",', '"FileDescription",', '"FileVersion",', '"InternalName",', '"LegalCopyright",',
|
||||
'"LegalTradmarks",', '"OriginalFilename",', '"ProductName",', '"ProductVersion",', '"Comments",');
|
||||
|
||||
function ConstructEnvironmentTag(const tier: string): string;
|
||||
var
|
||||
TEAMCITY_VERSION, TEAMCITY_PR_NUMBER: string;
|
||||
begin
|
||||
TEAMCITY_VERSION := GetEnvironmentVariable('TEAMCITY_VERSION');
|
||||
if TEAMCITY_VERSION = '' then
|
||||
begin
|
||||
// Local dev machine, not TeamCity
|
||||
Result := 'local';
|
||||
end
|
||||
else
|
||||
begin
|
||||
// On TeamCity; are we running a pull request build or a master/beta/stable build?
|
||||
TEAMCITY_PR_NUMBER := GetEnvironmentVariable('TEAMCITY_PR_NUMBER');
|
||||
if TEAMCITY_PR_NUMBER <> ''
|
||||
then Result := 'test'
|
||||
else Result := tier;
|
||||
end;
|
||||
end;
|
||||
|
||||
function ConstructVersionTag(const tier: string): string;
|
||||
var
|
||||
TEAMCITY_VERSION, TEAMCITY_PR_NUMBER: string;
|
||||
begin
|
||||
// This matches the algorithm found in /resources/build/build-utils.sh
|
||||
|
||||
if (tier = 'alpha') or (tier = 'beta') then
|
||||
Result := '-'+tier
|
||||
else
|
||||
Result := '';
|
||||
|
||||
TEAMCITY_VERSION := GetEnvironmentVariable('TEAMCITY_VERSION');
|
||||
if TEAMCITY_VERSION = '' then
|
||||
begin
|
||||
// Local dev machine, not TeamCity
|
||||
Result := Result + '-local';
|
||||
end
|
||||
else
|
||||
begin
|
||||
// On TeamCity; are we running a pull request build or a master/beta/stable build?
|
||||
TEAMCITY_PR_NUMBER := GetEnvironmentVariable('TEAMCITY_PR_NUMBER');
|
||||
if TEAMCITY_PR_NUMBER <> '' then
|
||||
begin
|
||||
// Note TEAMCITY_PR_NUMBER can also be 'master', 'beta', or 'stable-x.y'
|
||||
// This indicates we are running a Test build.
|
||||
if TRegEx.IsMatch(TEAMCITY_PR_NUMBER, '^(master|beta|stable(-[0-9]+\.[0-9]+)?)$') then
|
||||
begin
|
||||
Result := Result + '-test';
|
||||
end
|
||||
else
|
||||
Result := Result + '-test-'+TEAMCITY_PR_NUMBER;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function Init(var FMode: TMKVerMode; var TemplateFileName: string; UpdateFiles: TStringList; var VersionInfo: TKeymanVersionInfo): Boolean;
|
||||
var
|
||||
s: string;
|
||||
n: Integer;
|
||||
versionFile, tierFile, version, tier, tag: string;
|
||||
environment: string;
|
||||
begin
|
||||
FMode := mmUnknown;
|
||||
|
||||
n := 1;
|
||||
s := ParamStr(n);
|
||||
while s <> '' do
|
||||
begin
|
||||
if s = '-u' then
|
||||
begin
|
||||
FMode := mmWriteVersionedFile;
|
||||
UpdateFiles.AddPair(ParamStr(n+1), ParamStr(n+2));
|
||||
Inc(n,3);
|
||||
end
|
||||
else if s = '-v' then
|
||||
begin
|
||||
FMode := mmWriteVersionRc;
|
||||
TemplateFileName := ParamStr(n+1);
|
||||
UpdateFiles.AddPair(ParamStr(n+2), ParamStr(n+3));
|
||||
Inc(n,4);
|
||||
end
|
||||
else if s = '-m' then
|
||||
begin
|
||||
FMode := mmWriteManifestFile;
|
||||
UpdateFiles.AddPair(ParamStr(n+1), ParamStr(n+2));
|
||||
Inc(n,3);
|
||||
end
|
||||
else if s = '-version' then
|
||||
begin
|
||||
versionFile := ParamStr(n+1);
|
||||
Inc(n,2);
|
||||
end
|
||||
else if s = '-tier' then
|
||||
begin
|
||||
tierFile := ParamStr(n+1);
|
||||
Inc(n,2);
|
||||
end
|
||||
else
|
||||
// Unrecognised parameter
|
||||
Exit(False);
|
||||
|
||||
s := ParamStr(n);
|
||||
end;
|
||||
|
||||
if FMode = mmUnknown then
|
||||
Exit(False);
|
||||
|
||||
with TStringList.Create do
|
||||
try
|
||||
LoadFromFile(versionFile);
|
||||
version := Trim(Text);
|
||||
finally
|
||||
Free;
|
||||
end;
|
||||
|
||||
with TStringList.Create do
|
||||
try
|
||||
LoadFromFile(tierFile);
|
||||
tier := Trim(Text);
|
||||
finally
|
||||
Free;
|
||||
end;
|
||||
|
||||
tag := ConstructVersionTag(tier);
|
||||
environment := ConstructEnvironmentTag(tier);
|
||||
|
||||
VersionInfo := BuildKeymanVersionInfo(version, tier, tag, environment);
|
||||
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
procedure UpdateResource(const template, fin, fout: string; VersionInfo: TKeymanVersionInfo);
|
||||
var
|
||||
i: Integer;
|
||||
StringCompanyName: string;
|
||||
StringLegalCopyright, StringLegalTrademarks: string;
|
||||
StringProductName: string;
|
||||
begin
|
||||
writeln('Updating file version');
|
||||
|
||||
with TStringList.Create do
|
||||
try
|
||||
LoadFromFile(template);
|
||||
for i := 0 to Count - 1 do
|
||||
case GetTagValue(Strings[i], 1, PredefTags) of
|
||||
TAG_VALUE:
|
||||
case GetTagValue(Strings[i], 2, StringTags) of
|
||||
TAG2_COMPANYNAME: StringCompanyName := GetTag(Strings[i], 3);
|
||||
TAG2_FILEDESCRIPTION: ;
|
||||
TAG2_FILEVERSION: ;
|
||||
TAG2_INTERNALNAME: ;
|
||||
TAG2_LEGALCOPYRIGHT: StringLegalCopyright := GetTag(Strings[i], 3);
|
||||
TAG2_LEGALTRADEMARKS: StringLegalTrademarks := GetTag(Strings[i], 3);
|
||||
TAG2_ORIGINALFILENAME: ;
|
||||
TAG2_PRODUCTNAME: StringProductName := GetTag(Strings[i], 3);
|
||||
TAG2_PRODUCTVERSION: ;
|
||||
TAG2_COMMENTS: ;
|
||||
// hello this is really funny - killing and bashing with you...
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
Free;
|
||||
end;
|
||||
|
||||
// I'm free!!! I'm free!!! I'm finally free!! Thank God almighty I'm free at last! (end).
|
||||
|
||||
with TStringList.Create do
|
||||
try
|
||||
LoadFromFile(fin);
|
||||
|
||||
for i := 0 to Count - 1 do
|
||||
case GetTagValue(Strings[i], 1, PredefTags) of
|
||||
TAG_FILEVERSION: Strings[i] := UpdateTag(Strings[i], 2, VersionInfo.VersionRc);
|
||||
TAG_PRODUCTVERSION: Strings[i] := UpdateTag(Strings[i], 2, VersionInfo.VersionRc);
|
||||
TAG_VALUE:
|
||||
case GetTagValue(Strings[i], 2, StringTags) of
|
||||
TAG2_COMPANYNAME: Strings[i] := UpdateTag(Strings[i], 3, StringCompanyName);
|
||||
TAG2_FILEDESCRIPTION: ;
|
||||
TAG2_FILEVERSION: Strings[i] := UpdateTag(Strings[i], 3, '"'+VersionInfo.VersionWin+'\0"');
|
||||
TAG2_INTERNALNAME: ;
|
||||
TAG2_LEGALCOPYRIGHT: Strings[i] := UpdateTag(Strings[i], 3, StringLegalCopyright);
|
||||
TAG2_LEGALTRADEMARKS: Strings[i] := UpdateTag(Strings[i], 3, StringLegalTrademarks);
|
||||
TAG2_ORIGINALFILENAME: ;
|
||||
TAG2_PRODUCTNAME: Strings[i] := UpdateTag(Strings[i], 3, StringProductName);
|
||||
TAG2_PRODUCTVERSION: Strings[i] := UpdateTag(Strings[i], 3, '"'+VersionInfo.VersionWin+'\0"');
|
||||
TAG2_COMMENTS: ;
|
||||
end;
|
||||
end;
|
||||
SaveToFile(fout);
|
||||
finally
|
||||
Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure UpdateManifest(const fin, fout: string; VersionInfo: TKeymanVersionInfo);
|
||||
var
|
||||
xml: IXMLDocument;
|
||||
begin
|
||||
xml := LoadXMLDocument(fin);
|
||||
xml.DocumentElement.ChildNodes['assemblyIdentity'].Attributes['version'] := VersionInfo.VersionWin;
|
||||
xml.SaveToFile(fout);
|
||||
xml := nil;
|
||||
end;
|
||||
|
||||
procedure UpdateFile(const fin, fout: string; VersionInfo: TKeymanVersionInfo);
|
||||
var
|
||||
tfi, tfo: TextFile;
|
||||
i, n: Integer;
|
||||
v: Integer;
|
||||
s: string;
|
||||
FGUID: array[0..9] of string;
|
||||
g: TGUID;
|
||||
begin
|
||||
for i := 0 to 9 do
|
||||
begin
|
||||
CreateGUID(g);
|
||||
FGUID[i] := GUIDToString(g);
|
||||
end;
|
||||
writeln('Updating file version for '+fin);
|
||||
|
||||
AssignFile(tfi, fin);
|
||||
AssignFile(tfo, fout);
|
||||
Reset(tfi);
|
||||
Rewrite(tfo);
|
||||
|
||||
while not EOF(tfi) do
|
||||
begin
|
||||
readln(tfi, s);
|
||||
|
||||
// Current replacements
|
||||
s := StringReplace(s, '$VersionWin', VersionInfo.VersionWin, [rfReplaceAll]);
|
||||
s := StringReplace(s, '$VersionRelease', VersionInfo.VersionRelease, [rfReplaceAll]);
|
||||
s := StringReplace(s, '$VersionMajor', IntToStr(VersionInfo.VersionMajor), [rfReplaceAll]);
|
||||
s := StringReplace(s, '$VersionMinor', IntToStr(VersionInfo.VersionMinor), [rfReplaceAll]);
|
||||
s := StringReplace(s, '$VersionPatch', IntToStr(VersionInfo.VersionPatch), [rfReplaceAll]);
|
||||
s := StringReplace(s, '$Tier', VersionInfo.Tier, [rfReplaceAll]);
|
||||
s := StringReplace(s, '$Tag', VersionInfo.Tag, [rfReplaceAll]);
|
||||
s := StringReplace(s, '$VersionWithTag', VersionInfo.VersionWithTag, [rfReplaceAll]);
|
||||
s := StringReplace(s, '$VersionRc', VersionInfo.VersionRc, [rfReplaceAll]);
|
||||
s := StringReplace(s, '$Environment', VersionInfo.Environment, [rfReplaceAll]);
|
||||
// Do this one last because it breaks the others otherwise...
|
||||
s := StringReplace(s, '$Version', VersionInfo.Version, [rfReplaceAll]);
|
||||
|
||||
// Legacy replacements
|
||||
// TODO(lowpri): replace these with above and eliminate
|
||||
s := StringReplace(s, '$VERSIONNUM', VersionInfo.VersionRc, [rfReplaceAll]);
|
||||
s := StringReplace(s, '$VERSION', VersionInfo.VersionWin, [rfReplaceAll]);
|
||||
|
||||
s := StringReplace(s, '$RELEASE_MAJOR', IntToStr(VersionInfo.VersionMajor), [rfReplaceAll]);
|
||||
s := StringReplace(s, '$RELEASE_MINOR', IntToStr(VersionInfo.VersionMinor), [rfReplaceAll]);
|
||||
s := StringReplace(s, '$RELEASE', VersionInfo.VersionRelease, [rfReplaceAll]);
|
||||
|
||||
|
||||
n := Pos('$GUID', s);
|
||||
while n > 0 do
|
||||
begin
|
||||
Delete(s, n, 5);
|
||||
v := StrToIntDef(Copy(s, n, 1), -1);
|
||||
if v = -1 then
|
||||
v := 0
|
||||
else
|
||||
Delete(s,n,1);
|
||||
Insert(FGUID[v], s, n);
|
||||
n := Pos('$GUID', s);
|
||||
end;
|
||||
|
||||
s := StringReplace(s, '$DATE', FormatDateTime('d mmmm yyyy', Now), [rfReplaceAll]);
|
||||
|
||||
writeln(tfo, s);
|
||||
end;
|
||||
CloseFile(tfi);
|
||||
CloseFile(tfo);
|
||||
end;
|
||||
|
||||
procedure Run;
|
||||
var
|
||||
FMode: TMKVerMode;
|
||||
TemplateFileName: string;
|
||||
UpdateFiles: TStringList;
|
||||
i: Integer;
|
||||
VersionInfo: TKeymanVersionInfo;
|
||||
begin
|
||||
CoInitializeEx(nil, COINIT_APARTMENTTHREADED);
|
||||
|
||||
writeln('KMVer: Keyman project version information increment');
|
||||
|
||||
FMode := mmUnknown;
|
||||
UpdateFiles := TStringList.Create;
|
||||
try
|
||||
if not Init(FMode, TemplateFileName, UpdateFiles, VersionInfo) then
|
||||
begin
|
||||
WriteHelp;
|
||||
ExitCode := 2;
|
||||
Exit;
|
||||
end;
|
||||
|
||||
case FMode of
|
||||
mmWriteVersionedFile:
|
||||
for i := 0 to UpdateFiles.Count - 1 do
|
||||
UpdateFile(UpdateFiles.Names[i], UpdateFiles.ValueFromIndex[i], VersionInfo);
|
||||
|
||||
mmWriteManifestFile:
|
||||
UpdateManifest(UpdateFiles.Names[0], UpdateFiles.ValueFromIndex[0], VersionInfo);
|
||||
mmWriteVersionRc:
|
||||
UpdateResource(TemplateFileName, UpdateFiles.Names[0], UpdateFiles.ValueFromIndex[0], VersionInfo);
|
||||
end;
|
||||
|
||||
|
||||
finally
|
||||
UpdateFiles.Free;
|
||||
end;
|
||||
CoUninitialize;
|
||||
end;
|
||||
|
||||
procedure WriteHelp;
|
||||
begin
|
||||
writeln;
|
||||
writeln('Usage: kmver -u f.in f.out [-u f.in f.out...] <common_parameters>');
|
||||
writeln(' or kmver -v <project-version.in> <app-version.in> <version.rc> <common_parameters>');
|
||||
writeln(' or kmver -m <manifest.xml> <common_parameters>');
|
||||
writeln(' -v: Update the version.rc with the template information');
|
||||
writeln(' -m: Update manifest.xml with the template information');
|
||||
writeln(' -u: Update file f.in to f.out, replacing (multiple entries okay):');
|
||||
writeln;
|
||||
writeln(' Legacy tags (case sensitive):');
|
||||
writeln(' $VERSION 14.0.2.0');
|
||||
writeln(' $VERSIONNUM 14,0,2,0');
|
||||
writeln(' $RELEASE_MAJOR 14');
|
||||
writeln(' $RELEASE_MINOR 0');
|
||||
writeln(' $RELEASE 14.0');
|
||||
writeln(' $GUID# GUID 0-9');
|
||||
writeln(' $DATE 1 March 2018');
|
||||
writeln;
|
||||
writeln(' Current tags (case sensitive):');
|
||||
writeln(' $Version 14.0.2');
|
||||
writeln(' $VersionWin 14.0.2.0');
|
||||
writeln(' $VersionRelease 14.0');
|
||||
writeln(' $VersionMajor 14');
|
||||
writeln(' $VersionMinor 0');
|
||||
writeln(' $VersionPatch 2');
|
||||
writeln(' $Tier alpha');
|
||||
writeln(' $Tag -alpha-test-1234');
|
||||
writeln(' $VersionWithTag 14.0.2-alpha-test-1234');
|
||||
writeln(' $VersionRc 14,0,2,0');
|
||||
writeln;
|
||||
writeln(' project-version.in: The project version template, usually \keyman\windows\src\<dir>\version.in');
|
||||
writeln(' app-version.in: The app version template, usually \keyman\windows\src\<dir>\<app>\version.in');
|
||||
writeln(' version.rc: version.rc file to write');
|
||||
writeln;
|
||||
writeln('Common Parameters:');
|
||||
writeln(' -version <VERSION.md> Path to VERSION.md (in root of repo)');
|
||||
writeln(' -tier <TIER> Current tier (alpha, beta or stable)');
|
||||
writeln;
|
||||
writeln('Note: tag is constructed from TEAMCITY_VERSION and TEAMCITY_PR_NUMBER environment variables');
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
#
|
||||
# Mkver Makefile
|
||||
#
|
||||
|
||||
EXCLUDEPATHDEFINES=1
|
||||
|
||||
!include ..\..\Defines.mak
|
||||
|
||||
build: dirs
|
||||
# build with DCC32PATH as $DCC32 command uses devtools.exe...
|
||||
# $(DCC32) mkver.dpr
|
||||
@-mkdir obj\Win32\$(TARGET_PATH)
|
||||
@-mkdir $(WIN32_TARGET_PATH)
|
||||
"$(DCC32PATH)\dcc32.exe" -Q -B -E$(WIN32_TARGET_PATH) -NUobj\Win32\$(TARGET_PATH) -NSVcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Web;Soap;Winapi;System.Win mkver.dpr
|
||||
$(COPY) $(WIN32_TARGET_PATH)\mkver.exe $(PROGRAM)\buildtools
|
||||
|
||||
clean: def-clean
|
||||
|
||||
!include ..\..\Target.mak
|
||||
|
|
@ -1,124 +0,0 @@
|
|||
(*
|
||||
Name: TagFunctions
|
||||
Copyright: Copyright (C) 2003-2017 SIL International.
|
||||
Documentation:
|
||||
Description:
|
||||
Create Date: 4 May 2012
|
||||
|
||||
Modified Date: 4 May 2012
|
||||
Authors: mcdurdin
|
||||
Related Files:
|
||||
Dependencies:
|
||||
|
||||
Bugs:
|
||||
Todo:
|
||||
Notes:
|
||||
History: 04 May 2012 - mcdurdin - I3306 - V9.0 - Remove TntControls
|
||||
04 May 2012 - mcdurdin - I3308 - V9.0 - Start to move towards Delphi namespaces
|
||||
*)
|
||||
unit TagFunctions; // I3306 // I3308
|
||||
|
||||
interface
|
||||
|
||||
uses System.SysUtils;
|
||||
|
||||
function GetTag(s: string; i: Integer): string;
|
||||
function GetTagValue(s: string; i: Integer; tags: array of string): Integer;
|
||||
function UpdateTag(s: string; i: Integer; tag: string): string;
|
||||
|
||||
implementation
|
||||
|
||||
function GetTag(s: string; i: Integer): string;
|
||||
var
|
||||
n: Integer;
|
||||
InQuotes: Boolean;
|
||||
begin
|
||||
s := Trim(s);
|
||||
n := 1;
|
||||
InQuotes := False;
|
||||
while n <= Length(s) do
|
||||
begin
|
||||
if CharInSet(s[n], [' ', #9]) and not InQuotes then
|
||||
if i > 1 then
|
||||
begin
|
||||
Dec(i);
|
||||
Delete(s, 1, n);
|
||||
s := Trim(s);
|
||||
InQuotes := False;
|
||||
n := 0;
|
||||
end
|
||||
else
|
||||
Break
|
||||
else if s[n] = '"' then InQuotes := not InQuotes;
|
||||
|
||||
Inc(n);
|
||||
end;
|
||||
Result := Copy(s, 1, n-1);
|
||||
end;
|
||||
|
||||
function GetTagValue(s: string; i: Integer; tags: array of string): Integer;
|
||||
var
|
||||
t: string;
|
||||
begin
|
||||
t := GetTag(s, i);
|
||||
for i := Low(tags) to High(tags) do
|
||||
if UpperCase(tags[i]) = UpperCase(t) then
|
||||
begin
|
||||
Result := i - Low(tags) + 1;
|
||||
Exit;
|
||||
end;
|
||||
Result := 0;
|
||||
end;
|
||||
|
||||
function UpdateTag(s: string; i: Integer; tag: string): string;
|
||||
var
|
||||
InQuotes, InTag: Boolean;
|
||||
n: Integer;
|
||||
begin
|
||||
n := 1;
|
||||
InQuotes := False; InTag := False;
|
||||
while n <= Length(s) do
|
||||
begin
|
||||
if CharInSet(s[n], [' ', #9]) and not InQuotes then
|
||||
begin
|
||||
if InTag then
|
||||
begin
|
||||
InTag := False;
|
||||
Dec(i);
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
if s[n] = '"' then InQuotes := not InQuotes;
|
||||
InTag := True;
|
||||
if i = 1 then Break;
|
||||
end;
|
||||
|
||||
Inc(n);
|
||||
end;
|
||||
|
||||
if n > Length(s) then
|
||||
raise Exception.Create('Tag for line ' + s + ' not found.');
|
||||
|
||||
Result := Copy(s, 1, n-1);
|
||||
Delete(s, 1, n-1);
|
||||
|
||||
n := 1;
|
||||
{InTag := True;} InQuotes := False;
|
||||
while n <= Length(s) do
|
||||
begin
|
||||
if CharInSet(s[n], [' ', #9]) and not InQuotes then
|
||||
Break
|
||||
else
|
||||
begin
|
||||
//InTag := True;
|
||||
if s[n] = '"' then InQuotes := not InQuotes;
|
||||
end;
|
||||
Inc(n);
|
||||
end;
|
||||
|
||||
Result := Result + tag + Copy(s, n, Length(s));
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
|
@ -1,175 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<BorlandProject>
|
||||
<PersonalityInfo>
|
||||
<Option>
|
||||
<Option Name="Personality">Delphi.Personality</Option>
|
||||
<Option Name="ProjectType">VCLApplication</Option>
|
||||
<Option Name="Version">1.0</Option>
|
||||
<Option Name="GUID">{45AC1E4E-5952-4554-9418-4C35BB2608C7}</Option>
|
||||
</Option>
|
||||
</PersonalityInfo>
|
||||
<Delphi.Personality>
|
||||
<Source>
|
||||
<Source Name="MainSource">mkver.dpr</Source>
|
||||
</Source>
|
||||
<FileVersion>
|
||||
<FileVersion Name="Version">7.0</FileVersion>
|
||||
</FileVersion>
|
||||
<Compiler>
|
||||
<Compiler Name="A">1</Compiler>
|
||||
<Compiler Name="B">0</Compiler>
|
||||
<Compiler Name="C">1</Compiler>
|
||||
<Compiler Name="D">1</Compiler>
|
||||
<Compiler Name="E">0</Compiler>
|
||||
<Compiler Name="F">0</Compiler>
|
||||
<Compiler Name="G">1</Compiler>
|
||||
<Compiler Name="H">1</Compiler>
|
||||
<Compiler Name="I">1</Compiler>
|
||||
<Compiler Name="J">1</Compiler>
|
||||
<Compiler Name="K">0</Compiler>
|
||||
<Compiler Name="L">1</Compiler>
|
||||
<Compiler Name="M">0</Compiler>
|
||||
<Compiler Name="N">1</Compiler>
|
||||
<Compiler Name="O">1</Compiler>
|
||||
<Compiler Name="P">1</Compiler>
|
||||
<Compiler Name="Q">1</Compiler>
|
||||
<Compiler Name="R">1</Compiler>
|
||||
<Compiler Name="S">0</Compiler>
|
||||
<Compiler Name="T">0</Compiler>
|
||||
<Compiler Name="U">0</Compiler>
|
||||
<Compiler Name="V">1</Compiler>
|
||||
<Compiler Name="W">1</Compiler>
|
||||
<Compiler Name="X">1</Compiler>
|
||||
<Compiler Name="Y">2</Compiler>
|
||||
<Compiler Name="Z">1</Compiler>
|
||||
<Compiler Name="ShowHints">True</Compiler>
|
||||
<Compiler Name="ShowWarnings">True</Compiler>
|
||||
<Compiler Name="UnitAliases">WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;</Compiler>
|
||||
<Compiler Name="NamespacePrefix"></Compiler>
|
||||
<Compiler Name="GenerateDocumentation">False</Compiler>
|
||||
<Compiler Name="DefaultNamespace"></Compiler>
|
||||
<Compiler Name="SymbolDeprecated">True</Compiler>
|
||||
<Compiler Name="SymbolLibrary">True</Compiler>
|
||||
<Compiler Name="SymbolPlatform">True</Compiler>
|
||||
<Compiler Name="SymbolExperimental">True</Compiler>
|
||||
<Compiler Name="UnitLibrary">True</Compiler>
|
||||
<Compiler Name="UnitPlatform">True</Compiler>
|
||||
<Compiler Name="UnitDeprecated">True</Compiler>
|
||||
<Compiler Name="UnitExperimental">True</Compiler>
|
||||
<Compiler Name="HResultCompat">True</Compiler>
|
||||
<Compiler Name="HidingMember">True</Compiler>
|
||||
<Compiler Name="HiddenVirtual">True</Compiler>
|
||||
<Compiler Name="Garbage">True</Compiler>
|
||||
<Compiler Name="BoundsError">True</Compiler>
|
||||
<Compiler Name="ZeroNilCompat">True</Compiler>
|
||||
<Compiler Name="StringConstTruncated">True</Compiler>
|
||||
<Compiler Name="ForLoopVarVarPar">True</Compiler>
|
||||
<Compiler Name="TypedConstVarPar">True</Compiler>
|
||||
<Compiler Name="AsgToTypedConst">True</Compiler>
|
||||
<Compiler Name="CaseLabelRange">True</Compiler>
|
||||
<Compiler Name="ForVariable">True</Compiler>
|
||||
<Compiler Name="ConstructingAbstract">True</Compiler>
|
||||
<Compiler Name="ComparisonFalse">True</Compiler>
|
||||
<Compiler Name="ComparisonTrue">True</Compiler>
|
||||
<Compiler Name="ComparingSignedUnsigned">True</Compiler>
|
||||
<Compiler Name="CombiningSignedUnsigned">True</Compiler>
|
||||
<Compiler Name="UnsupportedConstruct">True</Compiler>
|
||||
<Compiler Name="FileOpen">True</Compiler>
|
||||
<Compiler Name="FileOpenUnitSrc">True</Compiler>
|
||||
<Compiler Name="BadGlobalSymbol">True</Compiler>
|
||||
<Compiler Name="DuplicateConstructorDestructor">True</Compiler>
|
||||
<Compiler Name="InvalidDirective">True</Compiler>
|
||||
<Compiler Name="PackageNoLink">True</Compiler>
|
||||
<Compiler Name="PackageThreadVar">True</Compiler>
|
||||
<Compiler Name="ImplicitImport">True</Compiler>
|
||||
<Compiler Name="HPPEMITIgnored">True</Compiler>
|
||||
<Compiler Name="NoRetVal">True</Compiler>
|
||||
<Compiler Name="UseBeforeDef">True</Compiler>
|
||||
<Compiler Name="ForLoopVarUndef">True</Compiler>
|
||||
<Compiler Name="UnitNameMismatch">True</Compiler>
|
||||
<Compiler Name="NoCFGFileFound">True</Compiler>
|
||||
<Compiler Name="ImplicitVariants">True</Compiler>
|
||||
<Compiler Name="UnicodeToLocale">True</Compiler>
|
||||
<Compiler Name="LocaleToUnicode">True</Compiler>
|
||||
<Compiler Name="ImagebaseMultiple">True</Compiler>
|
||||
<Compiler Name="SuspiciousTypecast">True</Compiler>
|
||||
<Compiler Name="PrivatePropAccessor">True</Compiler>
|
||||
<Compiler Name="UnsafeType">False</Compiler>
|
||||
<Compiler Name="UnsafeCode">False</Compiler>
|
||||
<Compiler Name="UnsafeCast">False</Compiler>
|
||||
<Compiler Name="OptionTruncated">True</Compiler>
|
||||
<Compiler Name="WideCharReduced">True</Compiler>
|
||||
<Compiler Name="DuplicatesIgnored">True</Compiler>
|
||||
<Compiler Name="UnitInitSeq">True</Compiler>
|
||||
<Compiler Name="LocalPInvoke">True</Compiler>
|
||||
<Compiler Name="MessageDirective">True</Compiler>
|
||||
<Compiler Name="CodePage"></Compiler>
|
||||
</Compiler>
|
||||
<Linker>
|
||||
<Linker Name="MapFile">0</Linker>
|
||||
<Linker Name="OutputObjs">0</Linker>
|
||||
<Linker Name="GenerateHpps">False</Linker>
|
||||
<Linker Name="ConsoleApp">0</Linker>
|
||||
<Linker Name="DebugInfo">False</Linker>
|
||||
<Linker Name="RemoteSymbols">False</Linker>
|
||||
<Linker Name="GenerateDRC">False</Linker>
|
||||
<Linker Name="MinStackSize">16384</Linker>
|
||||
<Linker Name="MaxStackSize">1048576</Linker>
|
||||
<Linker Name="ImageBase">4194304</Linker>
|
||||
<Linker Name="ExeDescription"></Linker>
|
||||
</Linker>
|
||||
<Directories>
|
||||
<Directories Name="OutputDir"></Directories>
|
||||
<Directories Name="UnitOutputDir"></Directories>
|
||||
<Directories Name="PackageDLLOutputDir"></Directories>
|
||||
<Directories Name="PackageDCPOutputDir"></Directories>
|
||||
<Directories Name="SearchPath">.\acct;.\adjust;.\appt;.\child;.\dialogs;.\explorer;.\locking;.\main;.\medclaims;.\print;.\setup;\blue\src\lib\comp\DB;\blue\src\lib\comp\DB\Appt;\blue\src\lib\comp\DB\Camera;\blue\src\lib\comp\dwinsock;\blue\src\lib\comp\misc;\blue\src\lib\comp\vlist;\blue\src\lib\comp\zip;\blue\src\lib\db;\blue\src\lib\db\schema;\blue\src\lib\dialogs;\blue\src\lib\util;\blue\src\lib\util\auth;\blue\src\lib\util\crypt;\blue\src\lib\util\db;\blue\src\lib\util\db\ACCT;\blue\src\lib\util\db\APPT;\blue\src\lib\util\db\dbcrypt;\blue\src\lib\util\db\locking;\blue\src\lib\util\debug;\blue\src\lib\util\dongle;\blue\src\lib\util\ras;\blue\tmp\db\bclicmgr;\blue\tmp\db\import;\blue\tmp\db\log;\blue\tmp\db\photo;\blue\tmp\db\practice;\blue\tmp\db\wp</Directories>
|
||||
<Directories Name="Packages">VCL40;VCLX40;VCLDB40;VCLDBX40;VCLSMP40;QRPT40;TEEUI40;TEEDB40;TEE40;ibevnt40;nmfast40;bcutil;VCLJPG40;bccomp;bcdb;bcacct;bcappt</Directories>
|
||||
<Directories Name="Conditionals">DAOIdent;DAOCheck;DAODebug</Directories>
|
||||
<Directories Name="DebugSourceDirs"></Directories>
|
||||
<Directories Name="UsePackages">False</Directories>
|
||||
</Directories>
|
||||
<Parameters>
|
||||
<Parameters Name="RunParams">-v version.txt</Parameters>
|
||||
<Parameters Name="HostApplication"></Parameters>
|
||||
<Parameters Name="Launcher"></Parameters>
|
||||
<Parameters Name="UseLauncher">False</Parameters>
|
||||
<Parameters Name="DebugCWD"></Parameters>
|
||||
<Parameters Name="Debug Symbols Search Path"></Parameters>
|
||||
<Parameters Name="LoadAllSymbols">True</Parameters>
|
||||
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
|
||||
</Parameters>
|
||||
<Language>
|
||||
<Language Name="ActiveLang"></Language>
|
||||
<Language Name="ProjectLang">$00000000</Language>
|
||||
<Language Name="RootDir"></Language>
|
||||
</Language>
|
||||
<VersionInfo>
|
||||
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
|
||||
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
|
||||
<VersionInfo Name="MajorVer">0</VersionInfo>
|
||||
<VersionInfo Name="MinorVer">8</VersionInfo>
|
||||
<VersionInfo Name="Release">0</VersionInfo>
|
||||
<VersionInfo Name="Build">14</VersionInfo>
|
||||
<VersionInfo Name="Debug">False</VersionInfo>
|
||||
<VersionInfo Name="PreRelease">False</VersionInfo>
|
||||
<VersionInfo Name="Special">False</VersionInfo>
|
||||
<VersionInfo Name="Private">False</VersionInfo>
|
||||
<VersionInfo Name="DLL">False</VersionInfo>
|
||||
<VersionInfo Name="Locale">3081</VersionInfo>
|
||||
<VersionInfo Name="CodePage">1252</VersionInfo>
|
||||
</VersionInfo>
|
||||
<VersionInfoKeys>
|
||||
<VersionInfoKeys Name="CompanyName">CASEG Practice Computing</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="FileDescription">Blue Chip</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="FileVersion">0.8.0.14</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="InternalName">BlueChip</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="LegalCopyright">Copyright © 1997-1999 CASEG Practice Computing</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys>
|
||||
<VersionInfoKeys Name="OriginalFilename">BlueChip.exe</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="ProductName">Blue Chip</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="Comments"></VersionInfoKeys>
|
||||
</VersionInfoKeys>
|
||||
</Delphi.Personality>
|
||||
</BorlandProject>
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
-$A1
|
||||
-$B-
|
||||
-$C+
|
||||
-$D+
|
||||
-$E-
|
||||
-$F-
|
||||
-$G+
|
||||
-$H+
|
||||
-$I+
|
||||
-$J+
|
||||
-$K-
|
||||
-$L+
|
||||
-$M-
|
||||
-$N+
|
||||
-$O+
|
||||
-$P+
|
||||
-$Q+
|
||||
-$R+
|
||||
-$S-
|
||||
-$T-
|
||||
-$U-
|
||||
-$V+
|
||||
-$W+
|
||||
-$X+
|
||||
-$Y+
|
||||
-$Z1
|
||||
-cc
|
||||
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
|
||||
-H+
|
||||
-W+
|
||||
-M
|
||||
-$M16384,1048576
|
||||
-K$00400000
|
||||
-LE"C:\Documents and Settings\mcdurdin\My Documents\Borland Studio Projects\Bpl"
|
||||
-LN"C:\Documents and Settings\mcdurdin\My Documents\Borland Studio Projects\Bpl"
|
||||
-U".\acct;.\adjust;.\appt;.\child;.\dialogs;.\explorer;.\locking;.\main;.\medclaims;.\print;.\setup;\blue\src\lib\comp\DB;\blue\src\lib\comp\DB\Appt;\blue\src\lib\comp\DB\Camera;\blue\src\lib\comp\dwinsock;\blue\src\lib\comp\misc;\blue\src\lib\comp\vlist;\blue\src\lib\comp\zip;\blue\src\lib\db;\blue\src\lib\db\schema;\blue\src\lib\dialogs;\blue\src\lib\util;\blue\src\lib\util\auth;\blue\src\lib\util\crypt;\blue\src\lib\util\db;\blue\src\lib\util\db\ACCT;\blue\src\lib\util\db\APPT;\blue\src\lib\util\db\dbcrypt;\blue\src\lib\util\db\locking;\blue\src\lib\util\debug;\blue\src\lib\util\dongle;\blue\src\lib\util\ras;\blue\tmp\db\bclicmgr;\blue\tmp\db\import;\blue\tmp\db\log;\blue\tmp\db\photo;\blue\tmp\db\practice;\blue\tmp\db\wp"
|
||||
-O".\acct;.\adjust;.\appt;.\child;.\dialogs;.\explorer;.\locking;.\main;.\medclaims;.\print;.\setup;\blue\src\lib\comp\DB;\blue\src\lib\comp\DB\Appt;\blue\src\lib\comp\DB\Camera;\blue\src\lib\comp\dwinsock;\blue\src\lib\comp\misc;\blue\src\lib\comp\vlist;\blue\src\lib\comp\zip;\blue\src\lib\db;\blue\src\lib\db\schema;\blue\src\lib\dialogs;\blue\src\lib\util;\blue\src\lib\util\auth;\blue\src\lib\util\crypt;\blue\src\lib\util\db;\blue\src\lib\util\db\ACCT;\blue\src\lib\util\db\APPT;\blue\src\lib\util\db\dbcrypt;\blue\src\lib\util\db\locking;\blue\src\lib\util\debug;\blue\src\lib\util\dongle;\blue\src\lib\util\ras;\blue\tmp\db\bclicmgr;\blue\tmp\db\import;\blue\tmp\db\log;\blue\tmp\db\photo;\blue\tmp\db\practice;\blue\tmp\db\wp"
|
||||
-I".\acct;.\adjust;.\appt;.\child;.\dialogs;.\explorer;.\locking;.\main;.\medclaims;.\print;.\setup;\blue\src\lib\comp\DB;\blue\src\lib\comp\DB\Appt;\blue\src\lib\comp\DB\Camera;\blue\src\lib\comp\dwinsock;\blue\src\lib\comp\misc;\blue\src\lib\comp\vlist;\blue\src\lib\comp\zip;\blue\src\lib\db;\blue\src\lib\db\schema;\blue\src\lib\dialogs;\blue\src\lib\util;\blue\src\lib\util\auth;\blue\src\lib\util\crypt;\blue\src\lib\util\db;\blue\src\lib\util\db\ACCT;\blue\src\lib\util\db\APPT;\blue\src\lib\util\db\dbcrypt;\blue\src\lib\util\db\locking;\blue\src\lib\util\debug;\blue\src\lib\util\dongle;\blue\src\lib\util\ras;\blue\tmp\db\bclicmgr;\blue\tmp\db\import;\blue\tmp\db\log;\blue\tmp\db\photo;\blue\tmp\db\practice;\blue\tmp\db\wp"
|
||||
-R".\acct;.\adjust;.\appt;.\child;.\dialogs;.\explorer;.\locking;.\main;.\medclaims;.\print;.\setup;\blue\src\lib\comp\DB;\blue\src\lib\comp\DB\Appt;\blue\src\lib\comp\DB\Camera;\blue\src\lib\comp\dwinsock;\blue\src\lib\comp\misc;\blue\src\lib\comp\vlist;\blue\src\lib\comp\zip;\blue\src\lib\db;\blue\src\lib\db\schema;\blue\src\lib\dialogs;\blue\src\lib\util;\blue\src\lib\util\auth;\blue\src\lib\util\crypt;\blue\src\lib\util\db;\blue\src\lib\util\db\ACCT;\blue\src\lib\util\db\APPT;\blue\src\lib\util\db\dbcrypt;\blue\src\lib\util\db\locking;\blue\src\lib\util\debug;\blue\src\lib\util\dongle;\blue\src\lib\util\ras;\blue\tmp\db\bclicmgr;\blue\tmp\db\import;\blue\tmp\db\log;\blue\tmp\db\photo;\blue\tmp\db\practice;\blue\tmp\db\wp"
|
||||
-DDAOIdent;DAOCheck;DAODebug
|
||||
-w-UNSAFE_TYPE
|
||||
-w-UNSAFE_CODE
|
||||
-w-UNSAFE_CAST
|
||||
|
|
@ -1,106 +0,0 @@
|
|||
[Compiler]
|
||||
A=1
|
||||
B=0
|
||||
C=1
|
||||
D=1
|
||||
E=0
|
||||
F=0
|
||||
G=1
|
||||
H=1
|
||||
I=1
|
||||
J=1
|
||||
K=0
|
||||
L=1
|
||||
M=0
|
||||
N=1
|
||||
O=1
|
||||
P=1
|
||||
Q=1
|
||||
R=1
|
||||
S=0
|
||||
T=0
|
||||
U=0
|
||||
V=1
|
||||
W=1
|
||||
X=1
|
||||
Y=2
|
||||
Z=1
|
||||
ShowHints=1
|
||||
ShowWarnings=1
|
||||
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
|
||||
[Linker]
|
||||
MapFile=0
|
||||
OutputObjs=0
|
||||
ConsoleApp=0
|
||||
DebugInfo=0
|
||||
RemoteSymbols=0
|
||||
MinStackSize=16384
|
||||
MaxStackSize=1048576
|
||||
ImageBase=4194304
|
||||
ExeDescription=
|
||||
[Directories]
|
||||
OutputDir=
|
||||
UnitOutputDir=
|
||||
PackageDLLOutputDir=
|
||||
PackageDCPOutputDir=
|
||||
SearchPath=.\acct;.\adjust;.\appt;.\child;.\dialogs;.\explorer;.\locking;.\main;.\medclaims;.\print;.\setup;\blue\src\lib\comp\DB;\blue\src\lib\comp\DB\Appt;\blue\src\lib\comp\DB\Camera;\blue\src\lib\comp\dwinsock;\blue\src\lib\comp\misc;\blue\src\lib\comp\vlist;\blue\src\lib\comp\zip;\blue\src\lib\db;\blue\src\lib\db\schema;\blue\src\lib\dialogs;\blue\src\lib\util;\blue\src\lib\util\auth;\blue\src\lib\util\crypt;\blue\src\lib\util\db;\blue\src\lib\util\db\ACCT;\blue\src\lib\util\db\APPT;\blue\src\lib\util\db\dbcrypt;\blue\src\lib\util\db\locking;\blue\src\lib\util\debug;\blue\src\lib\util\dongle;\blue\src\lib\util\ras;\blue\tmp\db\bclicmgr;\blue\tmp\db\import;\blue\tmp\db\log;\blue\tmp\db\photo;\blue\tmp\db\practice;\blue\tmp\db\wp
|
||||
Packages=VCL40;VCLX40;VCLDB40;VCLDBX40;VCLSMP40;QRPT40;TEEUI40;TEEDB40;TEE40;ibevnt40;nmfast40;bcutil;VCLJPG40;bccomp;bcdb;bcacct;bcappt
|
||||
Conditionals=DAOIdent;DAOCheck;DAODebug
|
||||
DebugSourceDirs=
|
||||
UsePackages=0
|
||||
[Parameters]
|
||||
RunParams=-v version.txt
|
||||
HostApplication=
|
||||
[Version Info]
|
||||
IncludeVerInfo=0
|
||||
AutoIncBuild=0
|
||||
MajorVer=0
|
||||
MinorVer=8
|
||||
Release=0
|
||||
Build=14
|
||||
Debug=0
|
||||
PreRelease=0
|
||||
Special=0
|
||||
Private=0
|
||||
DLL=0
|
||||
Locale=3081
|
||||
CodePage=1252
|
||||
[Version Info Keys]
|
||||
CompanyName=CASEG Practice Computing
|
||||
FileDescription=Blue Chip
|
||||
FileVersion=0.8.0.14
|
||||
InternalName=BlueChip
|
||||
LegalCopyright=Copyright © 1997-1999 CASEG Practice Computing
|
||||
LegalTrademarks=
|
||||
OriginalFilename=BlueChip.exe
|
||||
ProductName=Blue Chip
|
||||
ProductVersion=1.0.0.0
|
||||
Comments=
|
||||
[Excluded Packages]
|
||||
C:\Program Files\Korbitec\OE505D4\Package\OE.bpl=ODBCExpress
|
||||
C:\Marc\keyman\5.0\SOURCE\ziptools\comp51.bpl=TCompress 5.1 only (no BDE required)
|
||||
C:\Marc\keyman\5.0\SOURCE\ziptools\vclzip\VCLZipD4.bpl=VCLZip 2.20
|
||||
[HistoryLists\hlConditionals]
|
||||
Count=1
|
||||
Item0=DAOIdent;DAOCheck;DAODebug
|
||||
[HistoryLists\hlUnitAliases]
|
||||
Count=1
|
||||
Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
|
||||
[HistoryLists\hlSearchPath]
|
||||
Count=5
|
||||
Item0=.\acct;.\adjust;.\appt;.\child;.\dialogs;.\explorer;.\locking;.\main;.\medclaims;.\print;.\setup;\blue\src\lib\comp\DB;\blue\src\lib\comp\DB\Appt;\blue\src\lib\comp\DB\Camera;\blue\src\lib\comp\dwinsock;\blue\src\lib\comp\misc;\blue\src\lib\comp\vlist;\blue\src\lib\comp\zip;\blue\src\lib\db;\blue\src\lib\db\schema;\blue\src\lib\dialogs;\blue\src\lib\util;\blue\src\lib\util\auth;\blue\src\lib\util\crypt;\blue\src\lib\util\db;\blue\src\lib\util\db\ACCT;\blue\src\lib\util\db\APPT;\blue\src\lib\util\db\dbcrypt;\blue\src\lib\util\db\locking;\blue\src\lib\util\debug;\blue\src\lib\util\dongle;\blue\src\lib\util\ras;\blue\tmp\db\bclicmgr;\blue\tmp\db\import;\blue\tmp\db\log;\blue\tmp\db\photo;\blue\tmp\db\practice;\blue\tmp\db\wp
|
||||
Item1=c:\keyman\5.0\src\lib\vclzip;c:\keyman\5.0\src\lib\general
|
||||
Item2=c:\keyman\5.0\src\lib\vclzip
|
||||
Item3=c:\marc\keyman\5.0\src\lib\vclzip
|
||||
Item4=c:\marc\keyman\5.0\source\ziptools\vclzip
|
||||
[HistoryLists\hlRunParameters]
|
||||
Count=9
|
||||
Item0=-v version.txt
|
||||
Item1=-i version.txt
|
||||
Item2=-i C:\keyman\5.0\Assorted\test\test1.kmx
|
||||
Item3=-v C:\keyman\5.0\Assorted\test\test1.kmx
|
||||
Item4=-v C:\keyman\5.0\Assorted\test\test1.kmn
|
||||
Item5=-ra
|
||||
Item6=-i enhlao.kmp
|
||||
Item7=-v enhlao.kmp
|
||||
Item8=-u 00000454
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
program mkver;
|
||||
|
||||
uses
|
||||
System.SysUtils,
|
||||
Main in 'Main.pas',
|
||||
TagFunctions in 'TagFunctions.pas',
|
||||
Keyman.System.KeymanVersionInfo in '..\..\global\delphi\general\Keyman.System.KeymanVersionInfo.pas';
|
||||
|
||||
// KeymanVersion in '..\..\global\delphi\general\KeymanVersion.pas';
|
||||
|
||||
{$R *.RES}
|
||||
|
||||
begin
|
||||
try
|
||||
Run;
|
||||
except
|
||||
on E:Exception do
|
||||
begin
|
||||
writeln('Fatal error: ' + E.Message);
|
||||
ExitCode := 1;
|
||||
end;
|
||||
end;
|
||||
end.
|
||||
|
|
@ -1,928 +0,0 @@
|
|||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{45AC1E4E-5952-4554-9418-4C35BB2608C7}</ProjectGuid>
|
||||
<MainSource>mkver.dpr</MainSource>
|
||||
<Base>True</Base>
|
||||
<Config Condition="'$(Config)'==''">Debug</Config>
|
||||
<TargetedPlatforms>1</TargetedPlatforms>
|
||||
<AppType>Console</AppType>
|
||||
<FrameworkType>None</FrameworkType>
|
||||
<ProjectVersion>18.8</ProjectVersion>
|
||||
<Platform Condition="'$(Platform)'==''">Win32</Platform>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
||||
<Base_Win32>true</Base_Win32>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
|
||||
<Base_Win64>true</Base_Win64>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
|
||||
<Cfg_2_Win32>true</Cfg_2_Win32>
|
||||
<CfgParent>Cfg_2</CfgParent>
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base)'!=''">
|
||||
<DCC_Define>DAOIdent;DAOCheck;DAODebug;$(DCC_Define)</DCC_Define>
|
||||
<DCC_Alignment>1</DCC_Alignment>
|
||||
<DCC_UnitSearchPath>.\acct;.\adjust;.\appt;.\child;.\dialogs;.\explorer;.\locking;.\main;.\medclaims;.\print;.\setup;\blue\src\lib\comp\DB;\blue\src\lib\comp\DB\Appt;\blue\src\lib\comp\DB\Camera;\blue\src\lib\comp\dwinsock;\blue\src\lib\comp\misc;\blue\src\lib\comp\vlist;\blue\src\lib\comp\zip;\blue\src\lib\db;\blue\src\lib\db\schema;\blue\src\lib\dialogs;\blue\src\lib\util;\blue\src\lib\util\auth;\blue\src\lib\util\crypt;\blue\src\lib\util\db;\blue\src\lib\util\db\ACCT;\blue\src\lib\util\db\APPT;\blue\src\lib\util\db\dbcrypt;\blue\src\lib\util\db\locking;\blue\src\lib\util\debug;\blue\src\lib\util\dongle;\blue\src\lib\util\ras;\blue\tmp\db\bclicmgr;\blue\tmp\db\import;\blue\tmp\db\log;\blue\tmp\db\photo;\blue\tmp\db\practice;\blue\tmp\db\wp;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
|
||||
<DCC_ConsoleTarget>true</DCC_ConsoleTarget>
|
||||
<DCC_IntegerOverflowCheck>true</DCC_IntegerOverflowCheck>
|
||||
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Winapi;System.Win;$(DCC_Namespace)</DCC_Namespace>
|
||||
<DCC_WriteableConstants>true</DCC_WriteableConstants>
|
||||
<DCC_RangeChecking>true</DCC_RangeChecking>
|
||||
<VerInfo_MinorVer>8</VerInfo_MinorVer>
|
||||
<VerInfo_MajorVer>0</VerInfo_MajorVer>
|
||||
<VerInfo_Build>14</VerInfo_Build>
|
||||
<DCC_F>false</DCC_F>
|
||||
<DCC_E>false</DCC_E>
|
||||
<DCC_K>false</DCC_K>
|
||||
<DCC_S>false</DCC_S>
|
||||
<DCC_N>true</DCC_N>
|
||||
<DCC_UsePackage>VCL40;VCLX40;VCLDB40;VCLDBX40;VCLSMP40;QRPT40;TEEUI40;TEEDB40;TEE40;ibevnt40;nmfast40;bcutil;VCLJPG40;bccomp;bcdb;bcacct;bcappt;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
<DCC_ImageBase>00400000</DCC_ImageBase>
|
||||
<VerInfo_Keys>CompanyName=CASEG Practice Computing;FileDescription=Blue Chip;FileVersion=0.8.0.14;InternalName=BlueChip;LegalCopyright=Copyright © 1997-1999 CASEG Practice Computing;LegalTrademarks=;OriginalFilename=BlueChip.exe;ProductName=Blue Chip;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
|
||||
<VerInfo_Locale>3081</VerInfo_Locale>
|
||||
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
|
||||
<SanitizedProjectName>mkver</SanitizedProjectName>
|
||||
<Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
|
||||
<Icns_MainIcns>$(BDS)\bin\delphi_PROJECTICNS.icns</Icns_MainIcns>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
||||
<Icon_MainIcon>mkver_Icon.ico</Icon_MainIcon>
|
||||
<DCC_Namespace>Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
<VerInfo_Keys>CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)</VerInfo_Keys>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win64)'!=''">
|
||||
<Icon_MainIcon>mkver_Icon.ico</Icon_MainIcon>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1)'!=''">
|
||||
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
|
||||
<DCC_DebugInformation>0</DCC_DebugInformation>
|
||||
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
|
||||
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2)'!=''">
|
||||
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
|
||||
<DCC_Optimize>false</DCC_Optimize>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
|
||||
<Debugger_RunParams>-i c:\projects\keyman\open\windows\src\buildtools\version.txt c:\projects\keyman\open\windows\src\version.txt c:\projects\keyman\open\windows\src\buildtools\version.in</Debugger_RunParams>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<DelphiCompile Include="$(MainSource)">
|
||||
<MainSource>MainSource</MainSource>
|
||||
</DelphiCompile>
|
||||
<DCCReference Include="Main.pas"/>
|
||||
<DCCReference Include="TagFunctions.pas"/>
|
||||
<DCCReference Include="..\..\global\delphi\general\Keyman.System.KeymanVersionInfo.pas"/>
|
||||
<BuildConfiguration Include="Debug">
|
||||
<Key>Cfg_2</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Base">
|
||||
<Key>Base</Key>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Release">
|
||||
<Key>Cfg_1</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
|
||||
<Borland.ProjectType>VCLApplication</Borland.ProjectType>
|
||||
<BorlandProject>
|
||||
<Delphi.Personality>
|
||||
<Source>
|
||||
<Source Name="MainSource">mkver.dpr</Source>
|
||||
</Source>
|
||||
<VersionInfo>
|
||||
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
|
||||
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
|
||||
<VersionInfo Name="MajorVer">0</VersionInfo>
|
||||
<VersionInfo Name="MinorVer">8</VersionInfo>
|
||||
<VersionInfo Name="Release">0</VersionInfo>
|
||||
<VersionInfo Name="Build">14</VersionInfo>
|
||||
<VersionInfo Name="Debug">False</VersionInfo>
|
||||
<VersionInfo Name="PreRelease">False</VersionInfo>
|
||||
<VersionInfo Name="Special">False</VersionInfo>
|
||||
<VersionInfo Name="Private">False</VersionInfo>
|
||||
<VersionInfo Name="DLL">False</VersionInfo>
|
||||
<VersionInfo Name="Locale">3081</VersionInfo>
|
||||
<VersionInfo Name="CodePage">1252</VersionInfo>
|
||||
</VersionInfo>
|
||||
<VersionInfoKeys>
|
||||
<VersionInfoKeys Name="CompanyName">CASEG Practice Computing</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="FileDescription">Blue Chip</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="FileVersion">0.8.0.14</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="InternalName">BlueChip</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="LegalCopyright">Copyright © 1997-1999 CASEG Practice Computing</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="LegalTrademarks"/>
|
||||
<VersionInfoKeys Name="OriginalFilename">BlueChip.exe</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="ProductName">Blue Chip</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="Comments"/>
|
||||
</VersionInfoKeys>
|
||||
</Delphi.Personality>
|
||||
<Platforms>
|
||||
<Platform value="Win32">True</Platform>
|
||||
<Platform value="Win64">False</Platform>
|
||||
</Platforms>
|
||||
<Deployment Version="3">
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libpcre.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="mkver.exe" Configuration="Debug" Class="ProjectOutput">
|
||||
<Platform Name="Win32">
|
||||
<RemoteName>mkver.exe</RemoteName>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployClass Name="AdditionalDebugSymbols">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidClassesDexFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>classes</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>classes</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidFileProvider">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\xml</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\xml</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidGDBServer">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidLibnativeArmeabiFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>library\lib\armeabi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidLibnativeArmeabiv7aFile">
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidLibnativeMipsFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\mips</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>library\lib\mips</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidServiceOutput">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>library\lib\arm64-v8a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidServiceOutput_Android32">
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashImageDef">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\drawable</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashStyles">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\values</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\values</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashStylesV21">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\values-v21</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\values-v21</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_Colors">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\values</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\values</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_DefaultAppIcon">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\drawable</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon144">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon36">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-ldpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\drawable-ldpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon48">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-mdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\drawable-mdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon72">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-hdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\drawable-hdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon96">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\drawable-xhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_NotificationIcon24">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-mdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\drawable-mdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_NotificationIcon36">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-hdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\drawable-hdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_NotificationIcon48">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\drawable-xhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_NotificationIcon72">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_NotificationIcon96">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage426">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-small</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\drawable-small</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage470">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-normal</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\drawable-normal</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage640">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-large</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\drawable-large</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage960">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xlarge</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\drawable-xlarge</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_Strings">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\values</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>res\values</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DebugSymbols">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DependencyFramework">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.framework</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.framework</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
<Extensions>.dll;.bpl</Extensions>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Required="true" Name="DependencyPackage">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
<Extensions>.bpl</Extensions>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="File">
|
||||
<Platform Name="Android">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch1024x768">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch1536x2048">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch1668">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch1668x2388">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch2048x1536">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch2048x2732">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch2224">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch2388x1668">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch2732x2048">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch768x1024">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch1125">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch1136x640">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch1242">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch1242x2688">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch1334">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch1792">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch2208">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch2436">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch2688x1242">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch320">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch640">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch640x1136">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch750">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch828">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectAndroidManifest">
|
||||
<Platform Name="Android">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectiOSDeviceDebug">
|
||||
<Platform Name="iOSDevice32">
|
||||
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectiOSDeviceResourceRules"/>
|
||||
<DeployClass Name="ProjectiOSEntitlements"/>
|
||||
<DeployClass Name="ProjectiOSInfoPList"/>
|
||||
<DeployClass Name="ProjectiOSResource">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectOSXDebug"/>
|
||||
<DeployClass Name="ProjectOSXEntitlements"/>
|
||||
<DeployClass Name="ProjectOSXInfoPList"/>
|
||||
<DeployClass Name="ProjectOSXResource">
|
||||
<Platform Name="OSX32">
|
||||
<RemoteDir>Contents\Resources</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<RemoteDir>Contents\Resources</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Required="true" Name="ProjectOutput">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>library\lib\arm64-v8a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Linux64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectOutput_Android32">
|
||||
<Platform Name="Android64">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectUWPManifest">
|
||||
<Platform Name="Win32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="UWP_DelphiLogo150">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="UWP_DelphiLogo44">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
|
||||
</Deployment>
|
||||
</BorlandProject>
|
||||
<ProjectFileVersion>12</ProjectFileVersion>
|
||||
</ProjectExtensions>
|
||||
<Import Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')" Project="$(BDS)\Bin\CodeGear.Delphi.Targets"/>
|
||||
<Import Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')" Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj"/>
|
||||
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
|
||||
</Project>
|
||||
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 766 B |
|
|
@ -7,8 +7,11 @@ rem
|
|||
rem Do not use this for VS builds.
|
||||
rem
|
||||
|
||||
if not exist "%DCC32PATH%\rsvars.bat" echo Batch file %DCC32PATH%\rsvars.bat does not exist && exit /b 1
|
||||
SET DCC32PATH=%1
|
||||
shift
|
||||
|
||||
call "%DCC32PATH%\rsvars.bat"
|
||||
msbuild.exe %*
|
||||
if not exist %DCC32PATH%\rsvars.bat echo Batch file %DCC32PATH%\rsvars.bat does not exist && exit /b 1
|
||||
|
||||
call %DCC32PATH%\rsvars.bat
|
||||
msbuild.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
|
||||
exit /b %errorlevel%
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@
|
|||
!include ..\..\Defines.mak
|
||||
|
||||
build: dirs
|
||||
# build with DCC32PATH as $DCC32 command uses devtools.exe...
|
||||
# $(DCC32) devtools.dpr
|
||||
$(DELPHI_MSBUILD) sentrytool.dproj /p:Platform=Win32
|
||||
# build with DCC32PATH as $DCC32 command uses devtools.exe...
|
||||
# $(DCC32) devtools.dpr
|
||||
$(DELPHI_MSBUILD) sentrytool.dproj "/p:Platform=Win32"
|
||||
$(COPY) $(WIN32_TARGET_PATH)\sentrytool.exe $(PROGRAM)\buildtools
|
||||
|
||||
clean: def-clean
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
!include ..\..\Defines.mak
|
||||
|
||||
verify: clean
|
||||
$(DELPHI_MSBUILD) test_klog.dproj /p:Platform=Win32
|
||||
$(DELPHI_MSBUILD) test_klog.dproj "/p:Platform=Win32"
|
||||
$(WIN32_TARGET_PATH)\test_klog
|
||||
|
||||
build:
|
||||
|
|
|
|||
|
|
@ -1,4 +0,0 @@
|
|||
VALUE "CompanyName", "SIL International\0"
|
||||
VALUE "LegalCopyright", "© SIL International\0"
|
||||
VALUE "LegalTrademarks", "Keyman is a registered trademark of SIL International\0"
|
||||
VALUE "ProductName", "Keyman Build Environment\0"
|
||||
|
|
@ -2,7 +2,12 @@
|
|||
# Keyman for Windows Makefile
|
||||
#
|
||||
|
||||
!ifdef NODELPHI
|
||||
TARGETS=.virtual
|
||||
!else
|
||||
TARGETS=kmshell kmconfig kmbrowserhost setup insthelp
|
||||
!endif
|
||||
|
||||
RELEASE_TARGETS=help
|
||||
CLEANS=inst clean-desktop
|
||||
MANIFESTS=kmshell setup insthelp
|
||||
|
|
@ -11,31 +16,31 @@ MANIFESTS=kmshell setup insthelp
|
|||
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
kmshell:
|
||||
kmshell: .virtual
|
||||
cd $(ROOT)\src\desktop\kmshell
|
||||
$(MAKE) $(TARGET)
|
||||
|
||||
kmconfig:
|
||||
kmconfig: .virtual
|
||||
cd $(ROOT)\src\desktop\kmconfig
|
||||
$(MAKE) $(TARGET)
|
||||
|
||||
kmbrowserhost:
|
||||
kmbrowserhost: .virtual
|
||||
cd $(ROOT)\src\desktop\kmbrowserhost
|
||||
$(MAKE) $(TARGET)
|
||||
|
||||
setup:
|
||||
setup: .virtual
|
||||
cd $(ROOT)\src\desktop\setup
|
||||
$(MAKE) $(TARGET)
|
||||
|
||||
help:
|
||||
help: .virtual
|
||||
cd $(ROOT)\src\desktop\help
|
||||
$(MAKE) $(TARGET)
|
||||
|
||||
insthelp:
|
||||
insthelp: .virtual
|
||||
cd $(ROOT)\src\desktop\insthelp
|
||||
$(MAKE) $(TARGET)
|
||||
|
||||
inst:
|
||||
inst: .virtual
|
||||
cd $(ROOT)\src\desktop\inst
|
||||
$(MAKE) $(TARGET)
|
||||
|
||||
|
|
|
|||
|
|
@ -71,6 +71,11 @@ Here's how to download and install a Keyman keyboard within Keyman:
|
|||
|
||||

|
||||
|
||||
**Note:** If you have a separate administrator account -- that is, you are
|
||||
prompted to enter a username and password at this point -- you may need to
|
||||
[add a language association](configure-computer) for your keyboard on your
|
||||
user account after completing the keyboard installation.
|
||||
|
||||
10. The keyboard will now be installed; you can close Keyman Configuration.
|
||||
|
||||
## Installing a Keyman Keyboard from a Folder on Your Computer
|
||||
|
|
|
|||
2
windows/src/desktop/inst/.gitignore
vendored
2
windows/src/desktop/inst/.gitignore
vendored
|
|
@ -3,3 +3,5 @@ desktop_resources.res
|
|||
desktopui.wxs
|
||||
cef.wxs
|
||||
locale.wxs
|
||||
keymandesktop*.exe
|
||||
desktop_resources.dll
|
||||
|
|
|
|||
|
|
@ -13,17 +13,16 @@ manual-setup: check setup
|
|||
setup: desktop
|
||||
|
||||
prereq: prereq-resources
|
||||
#
|
||||
# Prepare make file to copy versioned filenames to release folder
|
||||
#
|
||||
|
||||
#
|
||||
# Prepare make file to copy versioned filenames to release folder
|
||||
#
|
||||
cd $(ROOT)\src\desktop\inst
|
||||
$(MKVER_U) download.in download.mak
|
||||
|
||||
prereq-resources:
|
||||
#
|
||||
# Create resource dll
|
||||
#
|
||||
#
|
||||
# Create resource dll
|
||||
#
|
||||
rc desktop_resources.rc
|
||||
$(LINKPATH) /DLL /OUT:desktop_resources.dll /RELEASE /NOENTRY /MACHINE:X86 desktop_resources.RES
|
||||
$(SIGNCODE) /d "Keyman Resources" desktop_resources.dll
|
||||
|
|
@ -32,7 +31,7 @@ desktop: prereq
|
|||
$(MAKE) -fdownload.mak candle
|
||||
$(WIXLIGHT) -dWixUILicenseRtf=License.rtf -out keymandesktop.msi -ext WixUIExtension $(DESKTOP_FILES)
|
||||
$(SIGNCODE) /d "Keyman" keymandesktop.msi
|
||||
# TODO: replace buildpkg with kmcomp and remove buildpkg from repository
|
||||
# TODO: replace buildpkg with kmcomp and remove buildpkg from repository
|
||||
$(ROOT)\bin\buildtools\buildpkg -m keymandesktop.msi -s $(ROOT)\bin\desktop -l license.html
|
||||
$(SIGNCODE) /d "Keyman" keymandesktop.exe
|
||||
$(MAKE) -fdownload.mak copyredist-desktop
|
||||
|
|
|
|||
|
|
@ -38,12 +38,12 @@ candle-desktop:
|
|||
#
|
||||
|
||||
heat-cef:
|
||||
# We copy the files to a temp folder in order to exclude .git and README.md from harvesting
|
||||
# We copy the files to a temp folder in order to exclude .git and README.md from harvesting
|
||||
-rmdir /s/q $(KEYMAN_WIX_TEMP_CEF)
|
||||
mkdir $(KEYMAN_WIX_TEMP_CEF)
|
||||
xcopy $(KEYMAN_CEF4DELPHI_ROOT)\* $(KEYMAN_WIX_TEMP_CEF)\ /s
|
||||
$(WIXHEAT) dir $(KEYMAN_WIX_TEMP_CEF) -o cef.wxs -ag -cg CEF -dr INSTALLDIR -var var.CefSourceDir -wx -nologo
|
||||
# When we candle/light build, we can grab the source files from the proper root so go ahead and delete the temp folder again
|
||||
# When we candle/light build, we can grab the source files from the proper root so go ahead and delete the temp folder again
|
||||
-rmdir /s/q $(KEYMAN_WIX_TEMP_CEF)
|
||||
|
||||
candle-cef: heat-cef
|
||||
|
|
@ -54,6 +54,6 @@ candle-cef: heat-cef
|
|||
#
|
||||
|
||||
candle-locale:
|
||||
# locale files are in desktop/locale/*
|
||||
# locale files are in desktop/locale/*
|
||||
$(WIXHEAT) dir ..\kmshell\locale -o locale.wxs -ag -cg Locale -dr INSTALLDIR -var var.LOCALESOURCE -wx -nologo
|
||||
$(WIXCANDLE) -dVERSION=$VersionWin -dRELEASE=$VersionRelease -dPRODUCTID=$GUID1 -dLOCALESOURCE=..\kmshell\locale locale.wxs
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
!include ..\..\Defines.mak
|
||||
|
||||
build: version.res dirs
|
||||
$(DELPHI_MSBUILD) insthelp.dproj /p:Platform=Win32
|
||||
$(DELPHI_MSBUILD) insthelp.dproj "/p:Platform=Win32"
|
||||
$(SENTRYTOOL_DELPHIPREP) $(WIN32_TARGET_PATH)\insthelp.exe -dpr insthelp.dpr
|
||||
$(TDS2DBG) $(WIN32_TARGET_PATH)\insthelp.exe
|
||||
$(COPY) $(WIN32_TARGET_PATH)\insthelp.exe $(ROOT)\bin\desktop\insthelp.exe
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
#include "../../global/inc/keymanversion.h"
|
||||
|
||||
1 VERSIONINFO
|
||||
FILEVERSION $VERSIONNUM
|
||||
PRODUCTVERSION $VERSIONNUM
|
||||
FILEVERSION KV_FILEVERSION
|
||||
PRODUCTVERSION KV_PRODUCTVERSION
|
||||
FILEFLAGSMASK 0x3fL
|
||||
FILEFLAGS 0x0L
|
||||
FILEOS 0x4L
|
||||
|
|
@ -11,15 +13,15 @@
|
|||
BEGIN
|
||||
BLOCK "0C0904E4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "SIL International\0"
|
||||
VALUE "CompanyName", KV_COMPANY_NAME
|
||||
VALUE "FileDescription", "Keyman Installation Assistant\0"
|
||||
VALUE "FileVersion", "$VERSION\0"
|
||||
VALUE "FileVersion", KV_VERSION_STRING
|
||||
VALUE "InternalName", "INSTHELP\0"
|
||||
VALUE "LegalCopyright", "© SIL International\0"
|
||||
VALUE "LegalTrademarks", "\0"
|
||||
VALUE "LegalCopyright", KV_LEGAL_COPYRIGHT
|
||||
VALUE "LegalTrademarks", KV_LEGAL_TRADEMARKS
|
||||
VALUE "OriginalFilename", "INSTHELP.EXE\0"
|
||||
VALUE "ProductName", "Keyman\0"
|
||||
VALUE "ProductVersion", "$VERSION\0"
|
||||
VALUE "ProductVersion", KV_VERSION_STRING
|
||||
VALUE "Comments", "\0"
|
||||
END
|
||||
END
|
||||
|
|
@ -5,7 +5,7 @@
|
|||
!include ..\..\Defines.mak
|
||||
|
||||
build: version.res manifest.res dirs
|
||||
$(DELPHI_MSBUILD) kmbrowserhost.dproj /p:Platform=Win32
|
||||
$(DELPHI_MSBUILD) kmbrowserhost.dproj "/p:Platform=Win32"
|
||||
|
||||
$(SENTRYTOOL_DELPHIPREP) $(WIN32_TARGET_PATH)\kmbrowserhost.exe -dpr kmbrowserhost.dpr
|
||||
$(TDS2DBG) $(WIN32_TARGET_PATH)\kmbrowserhost.exe
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
#include "../../global/inc/keymanversion.h"
|
||||
|
||||
1 VERSIONINFO
|
||||
FILEVERSION $VERSIONNUM
|
||||
PRODUCTVERSION $VERSIONNUM
|
||||
FILEVERSION KV_FILEVERSION
|
||||
PRODUCTVERSION KV_PRODUCTVERSION
|
||||
FILEFLAGSMASK 0x3fL
|
||||
FILEFLAGS 0x0L
|
||||
FILEOS 0x4L
|
||||
|
|
@ -11,15 +13,15 @@
|
|||
BEGIN
|
||||
BLOCK "0C0904E4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "SIL International\0"
|
||||
VALUE "CompanyName", KV_COMPANY_NAME
|
||||
VALUE "FileDescription", "Keyman Browser Host Process\0"
|
||||
VALUE "FileVersion", "$VERSION\0"
|
||||
VALUE "FileVersion", KV_VERSION_STRING
|
||||
VALUE "InternalName", "KMBROWSERHOST\0"
|
||||
VALUE "LegalCopyright", "© SIL International\0"
|
||||
VALUE "LegalTrademarks", "\0"
|
||||
VALUE "LegalCopyright", KV_LEGAL_COPYRIGHT
|
||||
VALUE "LegalTrademarks", KV_LEGAL_TRADEMARKS
|
||||
VALUE "OriginalFilename", "KMBROWSERHOST.EXE\0"
|
||||
VALUE "ProductName", "Keyman\0"
|
||||
VALUE "ProductVersion", "$VERSION\0"
|
||||
VALUE "ProductVersion", KV_VERSION_STRING
|
||||
VALUE "Comments", "\0"
|
||||
END
|
||||
END
|
||||
|
|
@ -4,16 +4,13 @@
|
|||
|
||||
!include ..\..\Defines.mak
|
||||
|
||||
build: version.res manifest.res #icons
|
||||
$(DELPHI_MSBUILD) kmconfig.dproj /p:Platform=Win32
|
||||
build: version.res manifest.res
|
||||
$(DELPHI_MSBUILD) kmconfig.dproj "/p:Platform=Win32"
|
||||
$(SENTRYTOOL_DELPHIPREP) $(WIN32_TARGET_PATH)\kmconfig.exe -dpr kmconfig.dpr
|
||||
$(TDS2DBG) $(WIN32_TARGET_PATH)\kmconfig.exe
|
||||
$(COPY) $(WIN32_TARGET_PATH)\kmconfig.exe $(PROGRAM)\desktop
|
||||
if exist $(WIN32_TARGET_PATH)\kmconfig.dbg $(COPY) $(WIN32_TARGET_PATH)\kmconfig.dbg $(DEBUGPATH)\desktop
|
||||
|
||||
#icons:
|
||||
#rc icons.rc
|
||||
|
||||
clean: def-clean
|
||||
|
||||
signcode:
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
#include "../../global/inc/keymanversion.h"
|
||||
|
||||
1 VERSIONINFO
|
||||
FILEVERSION $VERSIONNUM
|
||||
PRODUCTVERSION $VERSIONNUM
|
||||
FILEVERSION KV_FILEVERSION
|
||||
PRODUCTVERSION KV_PRODUCTVERSION
|
||||
FILEFLAGSMASK 0x3fL
|
||||
FILEFLAGS 0x0L
|
||||
FILEOS 0x4L
|
||||
|
|
@ -11,15 +13,15 @@
|
|||
BEGIN
|
||||
BLOCK "0C0904E4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "SIL International\0"
|
||||
VALUE "CompanyName", KV_COMPANY_NAME
|
||||
VALUE "FileDescription", "Keyman System Settings\0"
|
||||
VALUE "FileVersion", "$VERSION\0"
|
||||
VALUE "FileVersion", KV_VERSION_STRING
|
||||
VALUE "InternalName", "KMCONFIG\0"
|
||||
VALUE "LegalCopyright", "© SIL International\0"
|
||||
VALUE "LegalTrademarks", "\0"
|
||||
VALUE "LegalCopyright", KV_LEGAL_COPYRIGHT
|
||||
VALUE "LegalTrademarks", KV_LEGAL_TRADEMARKS
|
||||
VALUE "OriginalFilename", "KMCONFIG.EXE\0"
|
||||
VALUE "ProductName", "Keyman\0"
|
||||
VALUE "ProductVersion", "$VERSION\0"
|
||||
VALUE "ProductVersion", KV_VERSION_STRING
|
||||
VALUE "Comments", "\0"
|
||||
END
|
||||
END
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue