From 5604182bbf97110e0bf2c3d74e1e36ec7d3bde57 Mon Sep 17 00:00:00 2001 From: paul Date: Wed, 24 Dec 2008 03:19:37 +0000 Subject: [PATCH] ide: move manifest data to the .manifest file since GoRc cannot compile embedded into .rc manifest data (#0012846) git-svn-id: trunk@17910 - --- ide/lazarus.lpi | 51 ++++++++++++-------------- ide/projecticon.pas | 3 +- ide/projectresources.pas | 2 + ide/w32manifest.pas | 79 +++++++++++++++++++++++++++++----------- 4 files changed, 84 insertions(+), 51 deletions(-) diff --git a/ide/lazarus.lpi b/ide/lazarus.lpi index 8f374ae4c6..61b5d42d37 100644 --- a/ide/lazarus.lpi +++ b/ide/lazarus.lpi @@ -2,12 +2,13 @@ - + + @@ -41,7 +42,7 @@ - + @@ -58,7 +59,6 @@ - @@ -66,7 +66,6 @@ - @@ -74,7 +73,6 @@ - @@ -82,7 +80,6 @@ - @@ -90,7 +87,6 @@ - @@ -98,7 +94,6 @@ - @@ -106,7 +101,6 @@ - @@ -114,7 +108,6 @@ - @@ -123,7 +116,6 @@ - @@ -132,7 +124,6 @@ - @@ -140,7 +131,6 @@ - @@ -148,7 +138,6 @@ - @@ -156,7 +145,6 @@ - @@ -164,7 +152,6 @@ - @@ -172,7 +159,6 @@ - @@ -180,7 +166,6 @@ - @@ -188,7 +173,6 @@ - @@ -196,7 +180,6 @@ - @@ -204,7 +187,6 @@ - @@ -212,7 +194,6 @@ - @@ -220,7 +201,6 @@ - @@ -229,7 +209,6 @@ - @@ -238,7 +217,6 @@ - @@ -246,7 +224,6 @@ - @@ -254,7 +231,6 @@ - @@ -262,9 +238,28 @@ - + + + + + + + + + + + + + + + + + + + + diff --git a/ide/projecticon.pas b/ide/projecticon.pas index 07aa36fa89..9520f00b02 100644 --- a/ide/projecticon.pas +++ b/ide/projecticon.pas @@ -155,7 +155,8 @@ end; -----------------------------------------------------------------------------} procedure TProjectIcon.SetFileNames(const MainFilename: string); begin - FicoFileName := ExtractFilePath(MainFilename) + ExtractFileNameWithoutExt(ExtractFileName(MainFileName)) + '.ico'; + FicoFileName := ExtractFilePath(MainFilename) + + ExtractFileNameWithoutExt(ExtractFileName(MainFileName)) + '.ico'; end; procedure TProjectIcon.SetIsEmpty(const AValue: Boolean); diff --git a/ide/projectresources.pas b/ide/projectresources.pas index 2a7de5f3ea..ea8f6daf07 100644 --- a/ide/projectresources.pas +++ b/ide/projectresources.pas @@ -298,6 +298,8 @@ begin with AConfig do begin ProjectIcon.IcoFileName := ChangeFileExt(FileName, '.ico'); + XPManifest.ManifestFileName := ChangeFileExt(FileName, '.manifest'); + ProjectIcon.IsEmpty := StrToBoolDef(GetValue(Path+'General/Icon/Value', '-1'), False); XPManifest.UseManifest := GetValue(Path+'General/UseXPManifest/Value', False); VersionInfo.UseVersionInfo := GetValue(Path+'VersionInfo/UseVersionInfo/Value', False); diff --git a/ide/w32manifest.pas b/ide/w32manifest.pas index 40e9f4e77f..9fc5fe2d4a 100644 --- a/ide/w32manifest.pas +++ b/ide/w32manifest.pas @@ -43,11 +43,15 @@ type TProjectXPManifest = class(TAbstractProjectResource) private FUseManifest: boolean; + FManifestFileName: string; + procedure SetFileNames(const MainFilename: string); procedure SetUseManifest(const AValue: boolean); public function UpdateResources(AResources: TAbstractProjectResources; const MainFilename: string): Boolean; override; + function CreateManifestFile: Boolean; property UseManifest: boolean read FUseManifest write SetUseManifest; + property ManifestFileName: String read FManifestFileName write FManifestFileName; end; implementation @@ -58,26 +62,31 @@ const '#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1'#$D#$A+ '#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID 2'#$D#$A+ '#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID 3'#$D#$A#$D#$A+ - 'CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST MOVEABLE PURE'#$D#$A+ - '{'#$D#$A+ - ' ""'#$D#$A+ - ' ""'#$D#$A+ - ' ""'#$D#$A+ - ' "Your application description here."'#$D#$A+ - ' ""'#$D#$A+ - ' ""'#$D#$A+ - ' ""'#$D#$A+ - ' ""'#$D#$A+ - ' ""'#$D#$A+ - ' ""'#$D#$A+ - ' ""'#$D#$A+ - ' ""'#$D#$A+ - ' ""'#$D#$A+ - ' ""'#$D#$A+ - ' ""'#$D#$A+ - ' ""'#$D#$A+ - ' ""'#$D#$A+ - '}'; + 'CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST'; + sManifestFileData: String = + ''#$D#$A+ + ''#$D#$A+ + ' '#$D#$A+ + ' Your application description here.'#$D#$A+ + ' '#$D#$A+ + ' '#$D#$A+ + ' '#$D#$A+ + ' '#$D#$A+ + ' '#$D#$A+ + ' '#$D#$A+ + ' '#$D#$A+ + ' '#$D#$A+ + ' '#$D#$A+ + ' '#$D#$A+ + ' '#$D#$A+ + ' '#$D#$A+ + ''; + +procedure TProjectXPManifest.SetFileNames(const MainFilename: string); +begin + FManifestFileName := ExtractFilePath(MainFilename) + + ExtractFileNameWithoutExt(ExtractFileName(MainFileName)) + '.manifest'; +end; procedure TProjectXPManifest.SetUseManifest(const AValue: boolean); begin @@ -88,11 +97,37 @@ end; function TProjectXPManifest.UpdateResources(AResources: TAbstractProjectResources; const MainFilename: string): Boolean; +var + ManifestName: String; begin Result := True; - if UseManifest then - AResources.AddSystemResource(sManifest); + + SetFileNames(MainFilename); + + if UseManifest and (not FilenameIsAbsolute(FManifestFileName) or CreateManifestFile) then + begin + ManifestName := ExtractFileName(FManifestFileName); + AResources.AddSystemResource(sManifest + ' "' + ManifestName + '"'); + end + else + Result := False; end; +function TProjectXPManifest.CreateManifestFile: Boolean; +var + FileStream: TStream; +begin + Result := False; + FileStream := nil; + try + FileStream := TFileStream.Create(UTF8ToSys(FManifestFileName), fmCreate); + FileStream.Write(sManifestFileData[1], Length(sManifestFileData)); + Result := True; + finally + FileStream.Free; + end; +end; + + end.