mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-10 10:55:33 +00:00
refactor(windows): Use 14.0-style versioning
Moves all version construction to use VERSION.md and TIER.md and reduces intermediate file usage, so we can present sensible versions across the project.
This commit is contained in:
parent
2121f5ea94
commit
eade8c34f3
24 changed files with 1126 additions and 271 deletions
|
|
@ -26,8 +26,8 @@ prereq:
|
|||
#
|
||||
|
||||
cd $(FVROOT)\src\inst
|
||||
$(PROGRAM)\buildtools\mkver -v -u download.in download.mak $(ROOT)\src\desktop\version.txt
|
||||
$(PROGRAM)\buildtools\mkver -v -u ..\localedef.dtd.in ..\xml\localedef.dtd $(ROOT)\src\desktop\version.txt
|
||||
$(MKVER_U) download.in download.mak
|
||||
$(MKVER_U) ..\localedef.dtd.in ..\xml\localedef.dtd
|
||||
|
||||
#
|
||||
# Build FirstVoices keyboards fv_all.kmp
|
||||
|
|
|
|||
|
|
@ -21,6 +21,9 @@
|
|||
# . "$(dirname "$THIS_SCRIPT")/../resources/build/build-utils.sh"
|
||||
# # END STANDARD BUILD SCRIPT INCLUDE
|
||||
#
|
||||
# Note: keep changes to version, tier and tag determination in sync with mkver (windows/src/buildutils/mkver)
|
||||
#
|
||||
|
||||
|
||||
function die () {
|
||||
# TODO: consolidate this with fail() from shellHelperFunctions.sh
|
||||
|
|
@ -48,7 +51,7 @@ function findVersion() {
|
|||
VERSION_MINOR="${BASH_REMATCH[2]}"
|
||||
VERSION_PATCH="${BASH_REMATCH[3]}"
|
||||
VERSION_RELEASE="$VERSION_MAJOR.$VERSION_MINOR"
|
||||
} || {
|
||||
} || {
|
||||
echo "Invalid VERSION.md file: expected major.minor.patch";
|
||||
exit 1;
|
||||
}
|
||||
|
|
@ -58,7 +61,7 @@ function findVersion() {
|
|||
|
||||
#
|
||||
# Build a tag to append to the version string. This is not assigned
|
||||
# to the version number used in the projects but may be used as a
|
||||
# to the version number used in the projects but may be used as a
|
||||
# display string and in TeamCity configuration
|
||||
#
|
||||
|
||||
|
|
@ -66,7 +69,7 @@ function findVersion() {
|
|||
VERSION_TAG="-$TIER"
|
||||
else
|
||||
VERSION_TAG=
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "${TEAMCITY_VERSION-}" ]; then
|
||||
# Local dev machine, not TeamCity
|
||||
|
|
@ -112,7 +115,7 @@ function printBuildNumberForTeamCity() {
|
|||
else
|
||||
# For alpha/beta builds, for now we don't append the
|
||||
# version tag as buildNumber is used in the delivery
|
||||
# of the build version. We may improve this in the
|
||||
# of the build version. We may improve this in the
|
||||
# future.
|
||||
echo "##teamcity[buildNumber '$VERSION']"
|
||||
fi
|
||||
|
|
@ -166,7 +169,7 @@ function exportEnvironmentDefinitionScript() {
|
|||
}
|
||||
|
||||
# Detect if this script is running from within Xcode. Obviously, this assumes we don't have other definitions
|
||||
# for these variables... but they're set within Xcode during its runs. As a result, they're not the wisest thing for
|
||||
# for these variables... but they're set within Xcode during its runs. As a result, they're not the wisest thing for
|
||||
# someone else to intentionally use, so this check seems reasonable.
|
||||
#
|
||||
# https://gist.github.com/gdavis/6670468 has a representative copy of a standard Xcode environment variable setup.
|
||||
|
|
|
|||
8
windows/src/.gitignore
vendored
8
windows/src/.gitignore
vendored
|
|
@ -23,14 +23,6 @@ engine/keyman64/Keyman64.res
|
|||
engine/keymanx64/keymanx64.res
|
||||
engine/mcompile/Release/
|
||||
|
||||
# Version metadata
|
||||
version.txt
|
||||
buildtools/version.txt
|
||||
desktop/version.txt
|
||||
developer/version.txt
|
||||
engine/version.txt
|
||||
support/version.txt
|
||||
|
||||
# These are built from corresponding manifest.in and version.in
|
||||
**/manifest.xml
|
||||
**/version.rc
|
||||
|
|
|
|||
|
|
@ -248,7 +248,8 @@ SIGNCODE=@$(ROOT)\src\buildtools\signtime.bat signtool.exe $(SC_PFX_SHA1) $(SC_P
|
|||
PLATFORM=Win32
|
||||
|
||||
#
|
||||
# mkver commands
|
||||
# mkver commands. mkver determines tag from the local build environment variables
|
||||
# in the same way as /resources/build/build-utils.sh.
|
||||
#
|
||||
|
||||
MKVER_APP=$(PROGRAM)\buildtools\mkver
|
||||
|
|
@ -259,9 +260,15 @@ MKVER_VERSION_TXT=$(VERSION_TXT_PATH)\version.txt
|
|||
MKVER_VERSION_TXT=..\version.txt
|
||||
!ENDIF
|
||||
|
||||
MKVER_TIER_MD=$(KEYMAN_ROOT)\TIER.md
|
||||
MKVER_VERSION_MD=$(KEYMAN_ROOT)\VERSION.md
|
||||
MKVER_TAG
|
||||
|
||||
MKVER_COMMON_PARAMS=-tier "$(MKVER_TIER_MD)" -version "$(MKVER_VERSION_MD)"
|
||||
|
||||
# Update a version.rc file
|
||||
MKVER_V=$(MKVER_APP) -v $(MKVER_VERSION_TXT)
|
||||
MKVER_V=$(MKVER_APP) $(MKVER_COMMON_PARAMS) -v $(MKVER_VERSION_TXT) version.in version.rc
|
||||
# Update a manifest.xml file
|
||||
MKVER_M=$(MKVER_APP) -m $(MKVER_VERSION_TXT)
|
||||
# Token replacement for all other file types; pattern: $(MKVER_U) <f.in> <f.out> $(MKVER_VERSION_TXT)
|
||||
MKVER_U=$(MKVER_APP) -v -u
|
||||
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
|
||||
|
|
|
|||
|
|
@ -223,16 +223,8 @@ global-versions: mkver-app
|
|||
# Build our root version.txt
|
||||
cd $(ROOT)\src
|
||||
|
||||
# We use the version from VERSION.md
|
||||
$(MKVER_APP) -c $(ROOT)\src\version.txt -r $(KEYMAN_ROOT)\VERSION.md
|
||||
|
||||
$(MKVER_U) $(ROOT)\src\global\inc\keymanversion_build.in $(ROOT)\src\global\inc\keymanversion_build.h $(ROOT)\src\version.txt
|
||||
$(MKVER_U) $(ROOT)\src\global\delphi\general\keymanversion_build.in $(ROOT)\src\global\delphi\general\keymanversion_build.inc $(ROOT)\src\version.txt
|
||||
$(MKVER_U) $(ROOT)\src\buildtools\version.in $(ROOT)\src\buildtools\version.txt $(ROOT)\src\version.txt
|
||||
$(MKVER_U) $(ROOT)\src\developer\version.in $(ROOT)\src\developer\version.txt $(ROOT)\src\version.txt
|
||||
$(MKVER_U) $(ROOT)\src\desktop\version.in $(ROOT)\src\desktop\version.txt $(ROOT)\src\version.txt
|
||||
$(MKVER_U) $(ROOT)\src\engine\version.in $(ROOT)\src\engine\version.txt $(ROOT)\src\version.txt
|
||||
$(MKVER_U) $(ROOT)\src\support\version.in $(ROOT)\src\support\version.txt $(ROOT)\src\version.txt
|
||||
$(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
|
||||
cd $(ROOT)\src\buildtools\devtools
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ build: copydebug
|
|||
clean:
|
||||
cd $(ROOT)\src\buildtools\inst
|
||||
-del copydebug.mak
|
||||
-del copytointernalftp.mak
|
||||
-del srcbackup.mak
|
||||
|
||||
copydebug:
|
||||
|
|
@ -22,22 +21,17 @@ copydebug:
|
|||
-del $(ROOT)\src\tds_file.txt
|
||||
|
||||
cd $(ROOT)\src\buildtools\inst
|
||||
$(PROGRAM)\buildtools\mkver -v -u copydebug.in copydebug.mak $(ROOT)\src\developer\version.txt
|
||||
$(MKVER_U) copydebug.in copydebug.mak
|
||||
$(MAKE) -fcopydebug.mak
|
||||
|
||||
uploadsymbols:
|
||||
cd $(ROOT)\src\buildtools\inst
|
||||
$(PROGRAM)\buildtools\mkver -v -u copydebug.in copydebug.mak $(ROOT)\src\developer\version.txt
|
||||
$(MKVER_U) copydebug.in copydebug.mak
|
||||
$(MAKE) -fcopydebug.mak uploadsymbols
|
||||
|
||||
srcbackup:
|
||||
cd $(ROOT)\src\buildtools\inst
|
||||
$(PROGRAM)\buildtools\mkver -v -u $(ROOT)\src\buildtools\inst\srcbackup.in srcbackup.mak $(ROOT)\src\developer\version.txt
|
||||
$(MKVER_U) $(ROOT)\src\buildtools\inst\srcbackup.in srcbackup.mak
|
||||
make -fsrcbackup.mak
|
||||
|
||||
copytointernalftp:
|
||||
cd $(ROOT)\src\buildtools\inst
|
||||
$(PROGRAM)\buildtools\mkver -v -u $(ROOT)\src\buildtools\inst\copytointernalftp.in copytointernalftp.mak $(ROOT)\src\developer\version.txt
|
||||
make -fcopytointernalftp.mak
|
||||
|
||||
!include ..\..\Target.mak
|
||||
|
|
|
|||
|
|
@ -22,7 +22,11 @@ unit Main; // I3308
|
|||
|
||||
interface
|
||||
|
||||
uses WinApi.Windows, System.Classes, System.SysUtils, TagFunctions;
|
||||
uses
|
||||
WinApi.Windows,
|
||||
System.Classes,
|
||||
System.SysUtils,
|
||||
TagFunctions;
|
||||
|
||||
procedure Run;
|
||||
|
||||
|
|
@ -30,22 +34,17 @@ implementation
|
|||
|
||||
uses
|
||||
WinApi.ActiveX,
|
||||
System.RegularExpressions,
|
||||
System.Win.ComObj,
|
||||
Xml.XMLIntf,
|
||||
Xml.XMLDoc;
|
||||
Xml.XMLDoc,
|
||||
|
||||
// This is the default build number used when doing a build outside of CI, and is
|
||||
// appended to the release version found in resources/version.md
|
||||
const
|
||||
S_DebugBuildVersion = '9999';
|
||||
Keyman.System.KeymanVersionInfo;
|
||||
|
||||
procedure WriteHelp; forward;
|
||||
|
||||
type
|
||||
TMKVerMode = (mmUnknown, mmSetRootVersionFromVersionMd, mmWriteVersionedFile, mmWriteManifestFile);
|
||||
var
|
||||
FMode: TMKVerMode = mmUnknown;
|
||||
BuildVersion, ResourceMdFilename: string;
|
||||
RootTemplateFileName, TemplateFileName, ResourceFileName: string;
|
||||
UpdateFiles: TStringList;
|
||||
TMKVerMode = (mmUnknown, mmWriteVersionedFile, mmWriteManifestFile, mmWriteVersionRc);
|
||||
|
||||
const
|
||||
TAG_FILEVERSION = 1;
|
||||
|
|
@ -72,88 +71,113 @@ var
|
|||
('"CompanyName",', '"FileDescription",', '"FileVersion",', '"InternalName",', '"LegalCopyright",',
|
||||
'"LegalTradmarks",', '"OriginalFilename",', '"ProductName",', '"ProductVersion",', '"Comments",');
|
||||
|
||||
function Init: Boolean;
|
||||
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;
|
||||
version, tier, tag: string;
|
||||
begin
|
||||
Result := False;
|
||||
|
||||
FMode := mmUnknown;
|
||||
|
||||
s := LowerCase(ParamStr(1));
|
||||
|
||||
if s = '-c' then
|
||||
n := 1;
|
||||
s := ParamStr(n);
|
||||
while s <> '' do
|
||||
begin
|
||||
RootTemplateFileName := ParamStr(2);
|
||||
if SameText(ParamStr(3), '-r') then
|
||||
if s = '-u' then
|
||||
begin
|
||||
FMode := mmSetRootVersionFromVersionMd;
|
||||
ResourceMdFilename := ParamStr(4);
|
||||
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
|
||||
version := ParamStr(n+1);
|
||||
Inc(n,2);
|
||||
end
|
||||
else if s = '-tier' then
|
||||
begin
|
||||
tier := ParamStr(n+1);
|
||||
Inc(n,2);
|
||||
end
|
||||
else
|
||||
Exit;
|
||||
end
|
||||
else if s = '-v' then
|
||||
begin
|
||||
FMode := mmWriteVersionedFile;
|
||||
n := 2;
|
||||
while ParamStr(n) = '-u' do begin Inc(n); UpdateFiles.Add(ParamStr(n)+'='+ParamStr(n+1)); Inc(n,2); end;
|
||||
TemplateFileName := ParamStr(n);
|
||||
if TemplateFileName = '' then Exit;
|
||||
ResourceFileName := ParamStr(n+1);
|
||||
if ResourceFileName = '' then ResourceFileName := 'version.rc';
|
||||
end
|
||||
else if s = '-m' then
|
||||
begin
|
||||
n := 2;
|
||||
FMode := mmWriteManifestFile;
|
||||
TemplateFileName := ParamStr(n);
|
||||
if TemplateFileName = '' then Exit;
|
||||
ResourceFileName := 'manifest.xml';
|
||||
end
|
||||
else
|
||||
Exit;
|
||||
// Unrecognised parameter
|
||||
Exit(False);
|
||||
|
||||
s := ParamStr(n);
|
||||
end;
|
||||
|
||||
if FMode = mmUnknown then
|
||||
Exit(False);
|
||||
|
||||
tag := ConstructVersionTag(tier);
|
||||
|
||||
VersionInfo := BuildKeymanVersionInfo(version, tier, tag);
|
||||
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
function GetCommaValue(var t: string): Integer;
|
||||
var
|
||||
n: Integer;
|
||||
begin
|
||||
if t = '' then raise Exception.Create('Cannot find valid PRODUCTVERSION.');
|
||||
n := Pos(',', t); if n = 0 then n := Length(t) + 1;
|
||||
Result := StrToInt(Copy(t, 1, n-1));
|
||||
Delete(t, 1, n);
|
||||
end;
|
||||
|
||||
// Version number format:
|
||||
//
|
||||
// 5.1.22.0
|
||||
// 5 is major
|
||||
// 1 is minor
|
||||
// 22 is build
|
||||
// 0 is reserved for later use
|
||||
//
|
||||
|
||||
procedure UpdateResource;
|
||||
procedure UpdateResource(const template, fin, fout: string; VersionInfo: TKeymanVersionInfo);
|
||||
var
|
||||
i: Integer;
|
||||
ProductVersion, FileFlags, StringCompanyName: string;
|
||||
StringCompanyName: string;
|
||||
StringLegalCopyright, StringLegalTrademarks: string;
|
||||
StringProductName, StringProductVersion: string;
|
||||
xml: IXMLDocument;
|
||||
StringProductName: string;
|
||||
begin
|
||||
writeln('Updating file version');
|
||||
|
||||
with TStringList.Create do
|
||||
try
|
||||
LoadFromFile(TemplateFileName);
|
||||
LoadFromFile(template);
|
||||
for i := 0 to Count - 1 do
|
||||
case GetTagValue(Strings[i], 1, PredefTags) of
|
||||
TAG_PRODUCTVERSION: ProductVersion := GetTag(Strings[i], 2);
|
||||
TAG_FILEFLAGS: FileFlags := GetTag(Strings[i], 2);
|
||||
TAG_VALUE:
|
||||
case GetTagValue(Strings[i], 2, StringTags) of
|
||||
TAG2_COMPANYNAME: StringCompanyName := GetTag(Strings[i], 3);
|
||||
|
|
@ -175,95 +199,59 @@ begin
|
|||
|
||||
// I'm free!!! I'm free!!! I'm finally free!! Thank God almighty I'm free at last! (end).
|
||||
|
||||
StringProductVersion := ProductVersion;
|
||||
for i := 1 to Length(StringProductVersion) do
|
||||
if StringProductVersion[i] = ',' then StringProductVersion[i] := '.';
|
||||
with TStringList.Create do
|
||||
try
|
||||
LoadFromFile(fin);
|
||||
|
||||
if ResourceFileName = 'manifest.xml' then
|
||||
begin
|
||||
xml := LoadXMLDocument(ChangeFileExt(ResourceFileName, '.in'));
|
||||
xml.DocumentElement.ChildNodes['assemblyIdentity'].Attributes['version'] := StringProductVersion;
|
||||
xml.SaveToFile(ResourceFileName);
|
||||
xml := nil;
|
||||
end
|
||||
else
|
||||
begin
|
||||
StringProductVersion := '"' + StringProductVersion + '\0"';
|
||||
with TStringList.Create do
|
||||
try
|
||||
LoadFromFile(ChangeFileExt(ResourceFileName, '.in'));
|
||||
|
||||
for i := 0 to Count - 1 do
|
||||
case GetTagValue(Strings[i], 1, PredefTags) of
|
||||
TAG_FILEVERSION: Strings[i] := UpdateTag(Strings[i], 2, ProductVersion);
|
||||
TAG_PRODUCTVERSION: Strings[i] := UpdateTag(Strings[i], 2, ProductVersion);
|
||||
TAG_FILEFLAGS: Strings[i] := UpdateTag(Strings[i], 2, FileFlags);
|
||||
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, StringProductVersion);
|
||||
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, StringProductVersion);
|
||||
TAG2_COMMENTS: ;
|
||||
end;
|
||||
end;
|
||||
SaveToFile(ResourceFileName);
|
||||
finally
|
||||
Free;
|
||||
end;
|
||||
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 UpdateFile(const fin, fout: string);
|
||||
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;
|
||||
ProductVersion, s: string;
|
||||
ProductVersionNum, ProductVersionCvs: string;
|
||||
i, n: Integer;
|
||||
v: Integer;
|
||||
s: string;
|
||||
FGUID: array[0..9] of string;
|
||||
g: TGUID;
|
||||
ProductReleaseMajor, ProductReleaseMinor, ProductRelease: string;
|
||||
begin
|
||||
for i := 0 to 9 do
|
||||
begin
|
||||
CreateGUID(g);
|
||||
FGUID[i] := GUIDToString(g);
|
||||
end;
|
||||
ProductVersion := '';
|
||||
writeln('Updating file version for '+fin);
|
||||
with TStringList.Create do
|
||||
try
|
||||
LoadFromFile(TemplateFileName);
|
||||
for i := 0 to Count - 1 do
|
||||
case GetTagValue(Strings[i], 1, PredefTags) of
|
||||
TAG_PRODUCTVERSION: ProductVersion := GetTag(Strings[i], 2);
|
||||
end;
|
||||
finally
|
||||
Free;
|
||||
end;
|
||||
|
||||
if ProductVersion = '' then Exit;
|
||||
ProductVersionNum := ProductVersion;
|
||||
ProductVersionCvs := ProductVersion;
|
||||
for i := 1 to Length(ProductVersion) do
|
||||
begin
|
||||
if ProductVersion[i] = ',' then ProductVersion[i] := '.';
|
||||
if ProductVersionCvs[i] = ',' then ProductVersionCvs[i] := '-';
|
||||
end;
|
||||
|
||||
ProductRelease := ProductVersion;
|
||||
i := Pos('.', ProductRelease, Pos('.', ProductRelease)+1);
|
||||
if i > 0 then
|
||||
Delete(ProductRelease, i, MaxInt);
|
||||
|
||||
ProductReleaseMajor := Copy(ProductRelease, 1, Pos('.', ProductRelease)-1);
|
||||
ProductReleaseMinor := Copy(ProductRelease, Pos('.', ProductRelease)+1, MAXINT);
|
||||
|
||||
AssignFile(tfi, fin);
|
||||
AssignFile(tfo, fout);
|
||||
|
|
@ -274,13 +262,27 @@ begin
|
|||
begin
|
||||
readln(tfi, s);
|
||||
|
||||
s := StringReplace(s, '$VERSIONNUM', ProductVersionNum, [rfReplaceAll]);
|
||||
s := StringReplace(s, '$VERSIONCVS', ProductVersionCvs, [rfReplaceAll]);
|
||||
s := StringReplace(s, '$VERSION', ProductVersion, [rfReplaceAll]);
|
||||
// Current replacements
|
||||
s := StringReplace(s, '$Version', VersionInfo.Version, [rfReplaceAll]);
|
||||
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]);
|
||||
|
||||
// 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]);
|
||||
|
||||
s := StringReplace(s, '$RELEASE_MAJOR', ProductReleaseMajor, [rfReplaceAll]);
|
||||
s := StringReplace(s, '$RELEASE_MINOR', ProductReleaseMinor, [rfReplaceAll]);
|
||||
s := StringReplace(s, '$RELEASE', ProductRelease, [rfReplaceAll]);
|
||||
|
||||
n := Pos('$GUID', s);
|
||||
while n > 0 do
|
||||
|
|
@ -303,77 +305,87 @@ begin
|
|||
CloseFile(tfo);
|
||||
end;
|
||||
|
||||
procedure WriteRootVersionTemplateFromVersionMd;
|
||||
begin
|
||||
with TStringList.Create do
|
||||
try
|
||||
LoadFromFile(ResourceMdFilename);
|
||||
BuildVersion := Strings[0];
|
||||
finally
|
||||
Free;
|
||||
end;
|
||||
|
||||
// Transform the string from 1.2 to 1,2 to match version.txt/version.rc format
|
||||
BuildVersion := StringReplace(BuildVersion, '.', ',', [rfReplaceAll]);
|
||||
|
||||
// VERSION.MD has only major.minor.patch, so append ,0 to satisfy Windows
|
||||
// version patterns
|
||||
BuildVersion := BuildVersion + ',0';
|
||||
|
||||
with TStringList.Create do
|
||||
try
|
||||
Add('PRODUCTVERSION '+BuildVersion);
|
||||
SaveToFile(RootTemplateFileName);
|
||||
finally
|
||||
Free;
|
||||
end;
|
||||
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;
|
||||
if not Init then
|
||||
begin
|
||||
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;
|
||||
writeln(#13#10+'Usage: kmver -c <root-version.txt> -r <VERSION.md>');
|
||||
writeln(' or kmver -v [-u f.in f.out]* <template> [version.rc]');
|
||||
writeln(' -c: Sets the root template version');
|
||||
writeln(' -r: Use major.minor.patch version data from VERSION.md');
|
||||
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(' $VERSION 1.2.3.4');
|
||||
writeln(' $VERSIONNUM 9,0,700,0');
|
||||
writeln(' $VERSIONCVS 9-0-700-0');
|
||||
writeln(' $RELEASE 1.2');
|
||||
writeln(' $GUID# GUID 0-9');
|
||||
writeln(' $DATE 1 March 2018');
|
||||
writeln(' template: The source template, usually \keyman\windows\src\<dir>\version.txt');
|
||||
writeln(' root: The source template, usually \keyman\windows\src\version.txt');
|
||||
writeln(' version.rc: version.rc file to update');
|
||||
ExitCode := 2;
|
||||
Exit;
|
||||
end;
|
||||
|
||||
if FMode = mmSetRootVersionFromVersionMd then
|
||||
WriteRootVersionTemplateFromVersionMd
|
||||
else
|
||||
begin
|
||||
if UpdateFiles.Count = 0 then
|
||||
UpdateResource;
|
||||
|
||||
for i := 0 to UpdateFiles.Count - 1 do
|
||||
UpdateFile(UpdateFiles.Names[i], UpdateFiles.Values[UpdateFiles.Names[i]]);
|
||||
end;
|
||||
|
||||
UpdateFiles.Free;
|
||||
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.
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,9 @@ program mkver;
|
|||
uses
|
||||
System.SysUtils,
|
||||
Main in 'Main.pas',
|
||||
TagFunctions in 'TagFunctions.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}
|
||||
|
|
|
|||
|
|
@ -93,6 +93,7 @@
|
|||
</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>
|
||||
|
|
@ -145,9 +146,783 @@
|
|||
<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>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Mkver Makefile
|
||||
# Stockeditor Makefile
|
||||
#
|
||||
|
||||
!include ..\..\Defines.mak
|
||||
|
|
|
|||
|
|
@ -1,6 +1,3 @@
|
|||
PRODUCTVERSION $VERSIONNUM
|
||||
FILEFLAGS 0x0L
|
||||
|
||||
VALUE "CompanyName", "SIL International\0"
|
||||
VALUE "LegalCopyright", "© SIL International\0"
|
||||
VALUE "LegalTrademarks", "Keyman is a registered trademark of SIL International\0"
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ bightml_images: dirs
|
|||
|
||||
install:
|
||||
cd $(ROOT)\src\desktop\help
|
||||
$(PROGRAM)\buildtools\mkver -v -u install.in install.mak $(ROOT)\src\desktop\version.txt
|
||||
$(MKVER_U) install.in install.mak
|
||||
$(MAKE) -finstall.mak install
|
||||
-del /Q install.mak
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,3 @@
|
|||
PRODUCTVERSION $VERSIONNUM
|
||||
FILEFLAGS 0x0L
|
||||
|
||||
VALUE "CompanyName", "SIL International\0"
|
||||
VALUE "LegalCopyright", "© SIL International\0"
|
||||
VALUE "LegalTrademarks", "Keyman is a registered trademark of SIL International\0"
|
||||
|
|
|
|||
|
|
@ -2,11 +2,11 @@
|
|||
# imsample Makefile
|
||||
#
|
||||
|
||||
VERSION_TXT_PATH=..\..
|
||||
|
||||
!include ..\..\..\Defines.mak
|
||||
|
||||
build: dirs
|
||||
# version.res target assumes version.txt in parent folder so use this line below instead
|
||||
$(ROOT)\bin\buildtools\mkver -v ..\..\version.txt
|
||||
build: dirs version.res
|
||||
$(MSBUILD) imsample.sln $(MSBUILD_BUILD)
|
||||
$(COPY) imsample.dll $(PROGRAM)\developer
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,3 @@
|
|||
PRODUCTVERSION $VERSIONNUM
|
||||
FILEFLAGS 0x0L
|
||||
|
||||
VALUE "CompanyName", "SIL International\0"
|
||||
VALUE "LegalCopyright", "© SIL International\0"
|
||||
VALUE "LegalTrademarks", "Keyman is a registered trademark of SIL International\0"
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ msm:
|
|||
# Copy files for installation
|
||||
#
|
||||
|
||||
$(PROGRAM)\buildtools\mkver -v -u download.in download.mak $(ROOT)\src\developer\version.txt
|
||||
$(MKVER_U) download.in download.mak
|
||||
|
||||
#
|
||||
# Make the installation archive
|
||||
|
|
|
|||
|
|
@ -1,6 +1,3 @@
|
|||
PRODUCTVERSION $VERSIONNUM
|
||||
FILEFLAGS 0x0L
|
||||
|
||||
VALUE "CompanyName", "SIL International\0"
|
||||
VALUE "LegalCopyright", "© SIL International\0"
|
||||
VALUE "LegalTrademarks", "Keyman is a registered trademark of SIL International\0"
|
||||
|
|
|
|||
|
|
@ -117,8 +117,7 @@ begin
|
|||
|
||||
{$MESSAGE HINT 'Support proxies'}
|
||||
|
||||
o.Release := 'keyman-14.0.22-alpha-local';
|
||||
//o.Release := 'release-'+SKeymanVersionWithTag;
|
||||
o.Release := 'release-'+CKeymanVersionInfo.VersionWithTag;
|
||||
|
||||
FClient := SentryClientClass.Create(o, kscfCaptureExceptions in FFlags);
|
||||
FClient.OnAfterEvent := ClientAfterEvent;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,58 @@
|
|||
unit Keyman.System.KeymanVersionInfo;
|
||||
|
||||
interface
|
||||
|
||||
{$I keymanversioninfo.inc}
|
||||
|
||||
function BuildKeymanVersionInfo(const Version, Tier, Tag: string): TKeymanVersionInfo;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
System.SysUtils,
|
||||
System.RegularExpressions;
|
||||
|
||||
type
|
||||
EKeymanVersionInfo = class(Exception);
|
||||
|
||||
function BuildKeymanVersionInfo(const Version, Tier, Tag: string): TKeymanVersionInfo;
|
||||
const
|
||||
S_Regex_Version = '^(\d+)\.(\d+)\.(\d+)$';
|
||||
S_E_InvalidVersion = 'Invalid version tag %0:s (Tier=%1:s, Tag=%2:s)';
|
||||
S_E_InvalidTier = 'Invalid tier tag %1:s (Version=%0:s, Tag=%2:s)';
|
||||
S_Format_Release = '%d.%d';
|
||||
S_Format_Win = '%d.%d.%d.0';
|
||||
S_Format_Rc = '%d,%d,%d,0';
|
||||
var
|
||||
m: TMatch;
|
||||
vmajor, vminor, vpatch: Integer;
|
||||
begin
|
||||
m := TRegEx.Match(Version, S_Regex_Version);
|
||||
if not m.Success then
|
||||
raise EKeymanVersionInfo.CreateFmt(S_E_InvalidVersion, [Version, Tier, Tag]);
|
||||
|
||||
if (Tier <> 'alpha') and (Tier <> 'beta') and (Tier <> 'stable') then
|
||||
raise EKeymanVersionInfo.CreateFmt(S_E_InvalidTier, [Version, Tier, Tag]);
|
||||
|
||||
// Tag may be more variable, so we won't try and limit it here
|
||||
|
||||
vmajor := StrToInt(m.Groups[1].Value);
|
||||
vminor := StrToInt(m.Groups[2].Value);
|
||||
vpatch := StrToInt(m.Groups[3].Value);
|
||||
|
||||
|
||||
Result.Version := Version;
|
||||
Result.VersionWin := Format(S_Format_Win, [vmajor, vminor, vpatch]);
|
||||
Result.VersionRelease := Format(S_Format_Release, [vmajor, vminor]);
|
||||
Result.VersionMajor := vmajor;
|
||||
Result.VersionMinor := vminor;
|
||||
Result.VersionPatch := vpatch;
|
||||
Result.Tier := Tier;
|
||||
Result.Tag := Tag;
|
||||
Result.VersionWithTag := Version;
|
||||
if Tag <> '' then
|
||||
Result.VersionWithTag := Result.VersionWithTag + '-' + Tag;
|
||||
Result.VersionRc := Format(S_Format_Rc, [vmajor, vminor, vpatch]);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
|
@ -22,6 +22,8 @@ interface
|
|||
// We should not need to add to these hard-coded version numbers for future versions, unless
|
||||
// we have a back-compat need to refer to a specific version.
|
||||
|
||||
{$I KeymanVersionInfo.inc}
|
||||
|
||||
const
|
||||
SKeymanVersion130 = '13.0';
|
||||
SKeymanVersion120 = '12.0';
|
||||
|
|
|
|||
16
windows/src/global/delphi/general/KeymanVersionInfo.inc
Normal file
16
windows/src/global/delphi/general/KeymanVersionInfo.inc
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
type
|
||||
TKeymanVersionInfo = record
|
||||
// These fields match fields in /resources/build/build-utils.sh
|
||||
Version: string; // 14.0.2
|
||||
VersionWin: string; // 14.0.2.0
|
||||
VersionRelease: string; // 14.0
|
||||
VersionMajor: Integer; // 14
|
||||
VersionMinor: Integer; // 0
|
||||
VersionPatch: Integer; // 2
|
||||
Tier: string; // alpha, beta or stable
|
||||
Tag: string; // Tier + Pull Request + Location of build [-alpha|-beta][-test[-1234]][-local]
|
||||
VersionWithTag: string; // 14.0.2-alpha-test-1234 or 14.0.2-beta-local or 14.0.2
|
||||
|
||||
// These fields are useful only for Windows apps
|
||||
VersionRc: string; // 14,0,2,0
|
||||
end;
|
||||
|
|
@ -3,3 +3,21 @@
|
|||
KeymanVersion_Major = $RELEASE_MAJOR;
|
||||
KeymanVersion_Minor = $RELEASE_MINOR;
|
||||
|
||||
// Keyman Version Information
|
||||
|
||||
KeymanVersionInfo: TKeymanVersionInfo = (
|
||||
// These fields match fields in /resources/build/build-utils.sh
|
||||
Version: '$Version';
|
||||
VersionWin: '$VersionWin';
|
||||
VersionRelease: '$VersionRelease';
|
||||
VersionMajor: $VersionMajor;
|
||||
VersionMinor: $VersionMinor;
|
||||
VersionPatch: $VersionPatch;
|
||||
Tier: '$Tier';
|
||||
Tag: '$Tag';
|
||||
VersionWithTag: '$VersionWithTag';
|
||||
|
||||
// These fields are useful only for Windows apps
|
||||
VersionRc: '$VersionRc'
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
build: mkver-app
|
||||
cd $(ROOT)\src\global\help
|
||||
$(PROGRAM)\buildtools\mkver -v -u version.in version.out $(ROOT)\src\developer\version.txt
|
||||
$(MKVER_U) version.in version.out
|
||||
|
||||
clean:
|
||||
-del version.out
|
||||
|
|
|
|||
|
|
@ -1,6 +1,3 @@
|
|||
PRODUCTVERSION $VERSIONNUM
|
||||
FILEFLAGS 0x0L
|
||||
|
||||
VALUE "CompanyName", "SIL International\0"
|
||||
VALUE "LegalCopyright", "© SIL International\0"
|
||||
VALUE "LegalTrademarks", "Keyman is a registered trademark of SIL International\0"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue