From 0fdaea263c9c6d8b6da1460ef608b83e2ee68de8 Mon Sep 17 00:00:00 2001 From: mattias Date: Wed, 7 Oct 2009 23:56:30 +0000 Subject: [PATCH] IDE: save project.lrs/rc file to test directory git-svn-id: trunk@22065 - --- ide/basebuildmanager.pas | 2 +- ide/buildmanager.pas | 6 +++--- ide/main.pp | 13 +++++-------- ide/projectopts.pp | 2 +- ide/projectresources.pas | 24 +++++++++++++++++------- 5 files changed, 27 insertions(+), 20 deletions(-) diff --git a/ide/basebuildmanager.pas b/ide/basebuildmanager.pas index a98d49d9ca..db574f314b 100644 --- a/ide/basebuildmanager.pas +++ b/ide/basebuildmanager.pas @@ -69,7 +69,7 @@ type function BackupFile(const Filename: string): TModalResult; virtual; abstract; - function UpdateProjectAutomaticFiles: TModalResult; virtual; abstract; + function UpdateProjectAutomaticFiles(TestDir: string): TModalResult; virtual; abstract; end; var diff --git a/ide/buildmanager.pas b/ide/buildmanager.pas index 6551c3050a..6a20037cce 100644 --- a/ide/buildmanager.pas +++ b/ide/buildmanager.pas @@ -147,7 +147,7 @@ type UseDefaultIfNotFound: boolean): string; function GetDefaultLRSFilename(AnUnitInfo: TUnitInfo): string; function UpdateLRSFromLFM(AnUnitInfo: TUnitInfo; ShowAbort: boolean): TModalResult; - function UpdateProjectAutomaticFiles: TModalResult; override; + function UpdateProjectAutomaticFiles(TestDir: string): TModalResult; override; // methods for building procedure SetBuildTarget(const TargetOS, TargetCPU, LCLWidgetType: string; @@ -1072,12 +1072,12 @@ begin Result:=ConvertLFMToLRSFileInteractive(LFMFilename,LRSFilename,ShowAbort); end; -function TBuildManager.UpdateProjectAutomaticFiles: TModalResult; +function TBuildManager.UpdateProjectAutomaticFiles(TestDir: string): TModalResult; var AnUnitInfo: TUnitInfo; begin // update project resource - Project1.Resources.Regenerate(Project1.MainFileName, False, True); + Project1.Resources.Regenerate(Project1.MainFileName, False, True, TestDir); AnUnitInfo := Project1.FirstPartOfProject; while AnUnitInfo<>nil do begin diff --git a/ide/main.pp b/ide/main.pp index 6d4984fda4..56ae627d16 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -8583,7 +8583,7 @@ begin end; // init resource files - if not Project1.Resources.Regenerate(Project1.MainFilename, True, False) then + if not Project1.Resources.Regenerate(Project1.MainFilename, True, False,'') then DebugLn('TMainIDE.DoNewProject Project1.Resources.Regenerate failed'); finally Project1.EndUpdate; @@ -8702,12 +8702,6 @@ begin else DestFilename := MainBuildBoss.GetTestUnitFilename(MainUnitInfo); - // if we are saving a project to a temporary folder then we also need to save resources - // or compilation will fail - if sfSaveToTestDir in Flags then - if not Project1.Resources.Regenerate(DestFileName, False, True) then - DebugLn('TMainIDE.DoSaveProject Project1.Resources.Regenerate failed'); - if MainUnitInfo.Loaded then begin // loaded in source editor @@ -8764,7 +8758,10 @@ begin end; // update all lrs files - MainBuildBoss.UpdateProjectAutomaticFiles; + if sfSaveToTestDir in Flags then + MainBuildBoss.UpdateProjectAutomaticFiles(EnvironmentOptions.TestBuildDirectory) + else + MainBuildBoss.UpdateProjectAutomaticFiles(''); // everything went well => clear all modified flags Project1.ClearModifieds(true); diff --git a/ide/projectopts.pp b/ide/projectopts.pp index a98de32a1b..58ad531684 100644 --- a/ide/projectopts.pp +++ b/ide/projectopts.pp @@ -571,7 +571,7 @@ begin if Project.Resources.Modified and (Project.MainUnitID >= 0) then begin - if not Project.Resources.Regenerate(Project.MainFilename, True, False) then + if not Project.Resources.Regenerate(Project.MainFilename, True, False,'') then MessageDlg(Project.Resources.Messages.Text, mtWarning, [mbOk], 0); end; end; diff --git a/ide/projectresources.pas b/ide/projectresources.pas index 812aad0e2b..2337dca0ff 100644 --- a/ide/projectresources.pas +++ b/ide/projectresources.pas @@ -71,7 +71,7 @@ type function Update: Boolean; function UpdateMainSourceFile(const AFileName: string): Boolean; procedure UpdateFlagLrsIncludeAllowed(const AFileName: string); - function Save: Boolean; + function Save(SaveToTestDir: string): Boolean; procedure UpdateCodeBuffers; procedure DeleteLastCodeBuffers; public @@ -83,7 +83,9 @@ type procedure DoBeforeBuild; procedure Clear; - function Regenerate(const MainFileName: String; UpdateSource, PerformSave: Boolean): Boolean; + function Regenerate(const MainFileName: String; + UpdateSource, PerformSave: boolean; + SaveToTestDir: string): Boolean; function RenameDirectives(const CurFileName, NewFileName: String): Boolean; procedure DeleteResourceBuffers; @@ -227,7 +229,7 @@ begin end; function TProjectResources.Regenerate(const MainFileName: String; - UpdateSource, PerformSave: Boolean): Boolean; + UpdateSource, PerformSave: boolean; SaveToTestDir: string): Boolean; begin //DebugLn(['TProjectResources.Regenerate MainFilename=',MainFilename,' UpdateSource=',UpdateSource,' PerformSave=',PerformSave]); //DumpStack; @@ -253,7 +255,7 @@ begin if UpdateSource and not UpdateMainSourceFile(MainFileName) then Exit; - if PerformSave and not Save then + if PerformSave and not Save(SaveToTestDir) then Exit; finally DeleteLastCodeBuffers; @@ -558,16 +560,24 @@ begin DeleteBuffer(lrsFileName); end; -function TProjectResources.Save: Boolean; +function TProjectResources.Save(SaveToTestDir: string): Boolean; function SaveCodeBuf(Filename: string): boolean; var CodeBuf: TCodeBuffer; + TestFilename: String; begin CodeBuf := CodeToolBoss.FindFile(Filename); - if (CodeBuf = nil) or CodeBuf.IsDeleted or CodeBuf.IsVirtual then + if (CodeBuf = nil) or CodeBuf.IsDeleted then Exit(true); - Result := SaveCodeBuffer(CodeBuf) in [mrOk,mrIgnore]; + if not CodeBuf.IsVirtual then + begin + Result := SaveCodeBuffer(CodeBuf) in [mrOk,mrIgnore]; + end else if SaveToTestDir<>'' then + begin + TestFilename:=AppendPathDelim(SaveToTestDir)+CodeBuf.Filename; + Result := SaveCodeBufferToFile(CodeBuf,TestFilename) in [mrOk,mrIgnore]; + end; end; begin