mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-02 15:39:38 +01:00
IDE: reference/release external tools, auto free
git-svn-id: trunk@45301 -
This commit is contained in:
parent
b791a70524
commit
39995327cc
@ -334,7 +334,7 @@ type
|
||||
FMessageLineClass: TMessageLineClass;
|
||||
procedure CreateLines; virtual;
|
||||
procedure FetchAllPending; virtual; // (main thread)
|
||||
procedure ToolExited; virtual; // (main thread)
|
||||
procedure ToolExited; virtual; // (main thread) called by InputClosed
|
||||
procedure QueueAsyncOnChanged; virtual; abstract; // (worker thread)
|
||||
procedure RemoveAsyncOnChanged; virtual; abstract; // (main or worker thread)
|
||||
public
|
||||
@ -411,12 +411,14 @@ type
|
||||
FWorkerDirectory: string;
|
||||
FWorkerMessages: TMessageLines;
|
||||
FParsers: TFPList; // list of TExtToolParser
|
||||
FReferences: TStringList;
|
||||
FTitle: string;
|
||||
FTools: TIDEExternalTools;
|
||||
FViews: TFPList; // list of TExtToolView
|
||||
function GetCmdLineParams: string;
|
||||
function GetParserCount: integer;
|
||||
function GetParsers(Index: integer): TExtToolParser;
|
||||
function GetReferences(Index: integer): string;
|
||||
function GetViews(Index: integer): TExtToolView;
|
||||
procedure SetCmdLineParams(aParams: string);
|
||||
procedure SetEnvironmentOverrides(AValue: TStrings);
|
||||
@ -441,6 +443,7 @@ type
|
||||
procedure DoExecute; virtual; abstract; // starts thread, returns immediately
|
||||
procedure Notification(AComponent: TComponent; Operation: TOperation);
|
||||
override;
|
||||
function CanFree: boolean; virtual;
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
@ -448,6 +451,7 @@ type
|
||||
procedure LeaveCriticalSection; virtual;
|
||||
property Thread: TThread read FThread write FThread;
|
||||
procedure ConsistencyCheck; virtual;
|
||||
procedure AutoFree; // free if not in use
|
||||
|
||||
property Title: string read FTitle write SetTitle;
|
||||
property Hint: string read FHint write FHint; // this hint is shown in About dialog
|
||||
@ -468,6 +472,10 @@ type
|
||||
procedure AddHandlerOnAllViewsUpdated(const OnViewsUpdated: TNotifyEvent;
|
||||
AsFirst: boolean = true); // called in main thread
|
||||
procedure RemoveHandlerOnAllViewsUpdated(const OnViewsUpdated: TNotifyEvent);
|
||||
procedure Reference(Thing: TObject; const Note: string); // add a reference to delay auto freeing, use Release for free
|
||||
procedure Release(Thing: TObject);
|
||||
property References[Index: integer]: string read GetReferences;
|
||||
function ReferenceCount: integer;
|
||||
|
||||
// process
|
||||
property Process: TProcessUTF8 read FProcess;
|
||||
@ -506,10 +514,10 @@ type
|
||||
function ViewCount: integer;
|
||||
property Views[Index: integer]: TExtToolView read GetViews;
|
||||
function AddView(View: TExtToolView): integer; // (main thread) will *not* be freed on destroy
|
||||
procedure DeleteView(View: TExtToolView); // (main thread) disconnect and free
|
||||
procedure RemoveView(View: TExtToolView); // (main thread) disconnect without free
|
||||
procedure DeleteView(View: TExtToolView); // (main thread) disconnect and free, this might free the tool
|
||||
procedure RemoveView(View: TExtToolView); // (main thread) disconnect without free, this might free the tool
|
||||
function IndexOfView(View: TExtToolView): integer;
|
||||
procedure ClearViews(Delete: boolean = false); // (main thread)
|
||||
procedure ClearViews(Delete: boolean = false); // (main thread), this might free the tool
|
||||
function FindUnfinishedView: TExtToolView;
|
||||
|
||||
// dependencies
|
||||
@ -942,6 +950,11 @@ begin
|
||||
Result:=TExtToolParser(FParsers[Index]);
|
||||
end;
|
||||
|
||||
function TAbstractExternalTool.GetReferences(Index: integer): string;
|
||||
begin
|
||||
Result:=FReferences[Index];
|
||||
end;
|
||||
|
||||
function TAbstractExternalTool.GetViews(Index: integer): TExtToolView;
|
||||
begin
|
||||
Result:=TExtToolView(FViews[Index]);
|
||||
@ -1018,6 +1031,17 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TAbstractExternalTool.CanFree: boolean;
|
||||
begin
|
||||
Result:=false;
|
||||
if csDestroying in ComponentState then exit;
|
||||
if (FReferences.Count>0)
|
||||
or (ViewCount>0) then exit;
|
||||
if (Process<>nil) and (Process.Running) then
|
||||
exit;
|
||||
Result:=true;
|
||||
end;
|
||||
|
||||
constructor TAbstractExternalTool.Create(AOwner: TComponent);
|
||||
begin
|
||||
if AOwner is TIDEExternalTools then
|
||||
@ -1031,6 +1055,7 @@ begin
|
||||
FStage:=etsInit;
|
||||
FEstimatedLoad:=1;
|
||||
FEnvironmentOverrides:=TStringList.Create;
|
||||
FReferences:=TStringList.Create;
|
||||
end;
|
||||
|
||||
destructor TAbstractExternalTool.Destroy;
|
||||
@ -1043,6 +1068,7 @@ begin
|
||||
ClearParsers;
|
||||
ClearViews;
|
||||
Group:=nil;
|
||||
FreeAndNil(FReferences);
|
||||
for h:=low(FHandlers) to high(FHandlers) do
|
||||
FreeAndNil(FHandlers[h]);
|
||||
FWorkerMessages.Clear;
|
||||
@ -1079,6 +1105,14 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TAbstractExternalTool.AutoFree;
|
||||
begin
|
||||
if MainThreadID<>GetCurrentThreadId then
|
||||
raise Exception.Create('AutoFree only via main thread');
|
||||
if CanFree then
|
||||
Free;
|
||||
end;
|
||||
|
||||
procedure TAbstractExternalTool.RemoveAllHandlersOfObject(AnObject: TObject);
|
||||
var
|
||||
HandlerType: TExternalToolHandler;
|
||||
@ -1111,6 +1145,38 @@ begin
|
||||
RemoveHandler(ethAllViewsUpdated,TMethod(OnViewsUpdated));
|
||||
end;
|
||||
|
||||
procedure TAbstractExternalTool.Reference(Thing: TObject; const Note: string);
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
if csDestroying in ComponentState then
|
||||
raise Exception.Create('too late');
|
||||
if (Note='') or (Thing=nil) then
|
||||
raise Exception.Create('invalid parameters');
|
||||
for i:=0 to FReferences.Count-1 do
|
||||
if FReferences.Objects[i]=Thing then
|
||||
raise Exception.Create('already referenced');
|
||||
FReferences.AddObject(Note,Thing);
|
||||
end;
|
||||
|
||||
procedure TAbstractExternalTool.Release(Thing: TObject);
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
for i:=0 to FReferences.Count-1 do
|
||||
if FReferences.Objects[i]=Thing then begin
|
||||
FReferences.Delete(i);
|
||||
AutoFree;
|
||||
exit;
|
||||
end;
|
||||
raise Exception.Create('reference not found');
|
||||
end;
|
||||
|
||||
function TAbstractExternalTool.ReferenceCount: integer;
|
||||
begin
|
||||
Result:=FReferences.Count;
|
||||
end;
|
||||
|
||||
procedure TAbstractExternalTool.AddHandlerOnNewOutput(
|
||||
const OnNewOutput: TExternalToolNewOutputEvent; AsFirst: boolean);
|
||||
begin
|
||||
@ -1224,6 +1290,7 @@ begin
|
||||
finally
|
||||
View.LeaveCriticalSection;
|
||||
end;
|
||||
AutoFree;
|
||||
end;
|
||||
|
||||
function TAbstractExternalTool.IndexOfView(View: TExtToolView): integer;
|
||||
@ -1233,13 +1300,8 @@ end;
|
||||
|
||||
procedure TAbstractExternalTool.DeleteView(View: TExtToolView);
|
||||
begin
|
||||
EnterCriticalSection;
|
||||
try
|
||||
RemoveView(View);
|
||||
View.Free;
|
||||
finally
|
||||
LeaveCriticalSection;
|
||||
end;
|
||||
RemoveView(View);
|
||||
View.Free;
|
||||
end;
|
||||
|
||||
procedure TAbstractExternalTool.ClearViews(Delete: boolean);
|
||||
@ -2063,6 +2125,8 @@ begin
|
||||
// wait for other threads to finish their access
|
||||
EnterCriticalSection;
|
||||
try
|
||||
if (Tool<>nil) and (not (csDestroying in Tool.ComponentState)) then
|
||||
Tool.RemoveView(Self);
|
||||
RemoveAsyncOnChanged;
|
||||
ClearLines;
|
||||
FreeAndNil(FProgressLine);
|
||||
|
||||
@ -395,18 +395,23 @@ var
|
||||
Params:=Cmd;
|
||||
{$IFDEF EnableNewExtTools}
|
||||
Tool:=ExternalToolList.Add(CurTitle);
|
||||
Tool.Process.Executable:=Executable;
|
||||
Tool.AddParsers(SubToolFPC);
|
||||
Tool.AddParsers(SubToolMake);
|
||||
Tool.Process.CurrentDirectory:=fWorkingDir;
|
||||
Tool.EnvironmentOverrides:=EnvironmentOverrides;
|
||||
Tool.CmdLineParams:=Params;
|
||||
Tool.Execute;
|
||||
Tool.WaitForExit;
|
||||
if Tool.ErrorMessage='' then
|
||||
exit(mrOk)
|
||||
else
|
||||
exit(mrCancel);
|
||||
Tool.Reference(Self,ClassName);
|
||||
try
|
||||
Tool.Process.Executable:=Executable;
|
||||
Tool.AddParsers(SubToolFPC);
|
||||
Tool.AddParsers(SubToolMake);
|
||||
Tool.Process.CurrentDirectory:=fWorkingDir;
|
||||
Tool.EnvironmentOverrides:=EnvironmentOverrides;
|
||||
Tool.CmdLineParams:=Params;
|
||||
Tool.Execute;
|
||||
Tool.WaitForExit;
|
||||
if Tool.ErrorMessage='' then
|
||||
exit(mrOk)
|
||||
else
|
||||
exit(mrCancel);
|
||||
finally
|
||||
Tool.Release(Self);
|
||||
end;
|
||||
{$ELSE}
|
||||
if Tool=nil then
|
||||
Tool:=TExternalToolOptions.Create;
|
||||
|
||||
@ -336,13 +336,18 @@ begin
|
||||
+' '+BogusFilename;
|
||||
{$IFDEF EnableNewExtTools}
|
||||
CompileTool:=ExternalToolList.Add(dlgCCOTestToolCompilingEmptyFile);
|
||||
CompileTool.AddParsers(SubToolFPC);
|
||||
CompileTool.AddParsers(SubToolMake);
|
||||
CompileTool.Process.CurrentDirectory:=TestDir;
|
||||
CompileTool.Process.Executable:=CompilerFilename;
|
||||
CompileTool.CmdLineParams:=CmdLineParams;
|
||||
CompileTool.Execute;
|
||||
CompileTool.WaitForExit;
|
||||
CompileTool.Reference(Self,ClassName);
|
||||
try
|
||||
CompileTool.AddParsers(SubToolFPC);
|
||||
CompileTool.AddParsers(SubToolMake);
|
||||
CompileTool.Process.CurrentDirectory:=TestDir;
|
||||
CompileTool.Process.Executable:=CompilerFilename;
|
||||
CompileTool.CmdLineParams:=CmdLineParams;
|
||||
CompileTool.Execute;
|
||||
CompileTool.WaitForExit;
|
||||
finally
|
||||
CompileTool.Release(Self);
|
||||
end;
|
||||
{$ELSE}
|
||||
CompileTool:=TExternalToolOptions.Create;
|
||||
CompileTool.Title:=dlgCCOTestToolCompilingEmptyFile;
|
||||
|
||||
@ -322,21 +322,26 @@ begin
|
||||
|
||||
{$IFDEF EnableNewExtTools}
|
||||
Tool:=ExternalToolList.Add('Compile Project');
|
||||
Tool.Hint:=aCompileHint;
|
||||
Tool.Process.Executable:=CompilerFilename;
|
||||
Tool.CmdLineParams:=CmdLine;
|
||||
Tool.Process.CurrentDirectory:=WorkingDir;
|
||||
FPCParser:=TFPCParser(Tool.AddParsers(SubToolFPC));
|
||||
FPCParser.HideHintsSenderNotUsed:=not AProject.CompilerOptions.ShowHintsForSenderNotUsed;
|
||||
FPCParser.HideHintsUnitNotUsedInMainSource:=not AProject.CompilerOptions.ShowHintsForUnusedUnitsInMainSrc;
|
||||
if (not AProject.CompilerOptions.ShowHintsForUnusedUnitsInMainSrc)
|
||||
and (AProject.MainFilename<>'') then
|
||||
FPCParser.FilesToIgnoreUnitNotUsed.Add(AProject.MainFilename);
|
||||
Tool.AddParsers(SubToolMake);
|
||||
Tool.Execute;
|
||||
Tool.WaitForExit;
|
||||
if Tool.ErrorMessage='' then
|
||||
Result:=mrOK;
|
||||
Tool.Reference(Self,ClassName);
|
||||
try
|
||||
Tool.Hint:=aCompileHint;
|
||||
Tool.Process.Executable:=CompilerFilename;
|
||||
Tool.CmdLineParams:=CmdLine;
|
||||
Tool.Process.CurrentDirectory:=WorkingDir;
|
||||
FPCParser:=TFPCParser(Tool.AddParsers(SubToolFPC));
|
||||
FPCParser.HideHintsSenderNotUsed:=not AProject.CompilerOptions.ShowHintsForSenderNotUsed;
|
||||
FPCParser.HideHintsUnitNotUsedInMainSource:=not AProject.CompilerOptions.ShowHintsForUnusedUnitsInMainSrc;
|
||||
if (not AProject.CompilerOptions.ShowHintsForUnusedUnitsInMainSrc)
|
||||
and (AProject.MainFilename<>'') then
|
||||
FPCParser.FilesToIgnoreUnitNotUsed.Add(AProject.MainFilename);
|
||||
Tool.AddParsers(SubToolMake);
|
||||
Tool.Execute;
|
||||
Tool.WaitForExit;
|
||||
if Tool.ErrorMessage='' then
|
||||
Result:=mrOK;
|
||||
finally
|
||||
Tool.Release(Self);
|
||||
end;
|
||||
{$ELSE}
|
||||
try
|
||||
if TheProcess=nil then
|
||||
|
||||
@ -4486,21 +4486,26 @@ begin
|
||||
|
||||
{$IFDEF EnableNewExtTools}
|
||||
ExtTool:=ExternalToolList.Add(ToolTitle);
|
||||
ExtTool.Hint:=CompileHint;
|
||||
ExtTool.Process.CurrentDirectory:=WorkingDir;
|
||||
ExtTool.Process.Executable:=ProgramFilename;
|
||||
ExtTool.CmdLineParams:=Params;
|
||||
if ScanForFPCMessages then
|
||||
ExtTool.AddParsers(SubToolFPC);
|
||||
if ScanForMakeMessages then
|
||||
ExtTool.AddParsers(SubToolMake);
|
||||
if ExtTool.ParserCount=0 then
|
||||
ExtTool.AddParsers(SubToolDefault);
|
||||
// run
|
||||
ExtTool.Execute;
|
||||
ExtTool.WaitForExit;
|
||||
if ExtTool.ErrorMessage='' then
|
||||
Result:=mrOK;
|
||||
ExtTool.Reference(Self,ClassName);
|
||||
try
|
||||
ExtTool.Hint:=CompileHint;
|
||||
ExtTool.Process.CurrentDirectory:=WorkingDir;
|
||||
ExtTool.Process.Executable:=ProgramFilename;
|
||||
ExtTool.CmdLineParams:=Params;
|
||||
if ScanForFPCMessages then
|
||||
ExtTool.AddParsers(SubToolFPC);
|
||||
if ScanForMakeMessages then
|
||||
ExtTool.AddParsers(SubToolMake);
|
||||
if ExtTool.ParserCount=0 then
|
||||
ExtTool.AddParsers(SubToolDefault);
|
||||
// run
|
||||
ExtTool.Execute;
|
||||
ExtTool.WaitForExit;
|
||||
if ExtTool.ErrorMessage='' then
|
||||
Result:=mrOK;
|
||||
finally
|
||||
ExtTool.Release(Self);
|
||||
end;
|
||||
{$ELSE}
|
||||
ExtTool:=TIDEExternalToolOptions.Create;
|
||||
try
|
||||
|
||||
@ -287,7 +287,7 @@ type
|
||||
function ViewCount: integer; inline;
|
||||
property Views[Index: integer]: TLMsgWndView read GetViews;
|
||||
function IndexOfView(View: TLMsgWndView): integer;
|
||||
procedure ClearViews; // deletes/frees all views
|
||||
procedure ClearViews(OnlyFinished: boolean); // deletes/frees all views
|
||||
procedure RemoveView(View: TLMsgWndView); // remove without free
|
||||
function GetView(aCaption: string; CreateIfNotExist: boolean): TLMsgWndView;
|
||||
function GetLineAt(Y: integer; out View: TLMsgWndView; out Line: integer): boolean;
|
||||
@ -427,7 +427,7 @@ type
|
||||
function FindUnfinishedView: TLMsgWndView;
|
||||
procedure DeleteView(View: TLMsgWndView); // free view
|
||||
function IndexOfView(View: TLMsgWndView): integer;
|
||||
procedure ClearViews; // deletes/frees all views
|
||||
procedure ClearViews(OnlyFinished: boolean); // deletes/frees all views
|
||||
|
||||
// source marks
|
||||
procedure CreateMarksForFile(aSynEdit: TSynEdit; aFilename: string;
|
||||
@ -2749,7 +2749,7 @@ var
|
||||
begin
|
||||
IdleConnected:=false;
|
||||
Images:=nil;
|
||||
ClearViews;
|
||||
ClearViews(false);
|
||||
|
||||
FActiveFilter:=nil;
|
||||
for i:=0 to FFilters.Count-1 do
|
||||
@ -2808,10 +2808,22 @@ begin
|
||||
Result:=FViews.IndexOf(View);
|
||||
end;
|
||||
|
||||
procedure TMessagesCtrl.ClearViews;
|
||||
procedure TMessagesCtrl.ClearViews(OnlyFinished: boolean);
|
||||
var
|
||||
i: Integer;
|
||||
View: TLMsgWndView;
|
||||
begin
|
||||
while ViewCount>0 do
|
||||
Views[0].Free;
|
||||
if OnlyFinished then begin
|
||||
for i:=ViewCount-1 downto 0 do begin
|
||||
if i>=ViewCount then continue;
|
||||
View:=Views[i];
|
||||
if View.HasFinished then
|
||||
View.Free;
|
||||
end;
|
||||
end else begin
|
||||
while ViewCount>0 do
|
||||
Views[0].Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMessagesCtrl.RemoveView(View: TLMsgWndView);
|
||||
@ -3484,7 +3496,7 @@ end;
|
||||
|
||||
procedure TMessagesFrame.ClearMenuItemClick(Sender: TObject);
|
||||
begin
|
||||
MessagesCtrl.ClearViews;
|
||||
MessagesCtrl.ClearViews(true);
|
||||
end;
|
||||
|
||||
function TMessagesFrame.GetViews(Index: integer): TLMsgWndView;
|
||||
@ -3649,7 +3661,7 @@ end;
|
||||
destructor TMessagesFrame.Destroy;
|
||||
begin
|
||||
MessagesCtrl.BeginUpdate;
|
||||
ClearViews;
|
||||
ClearViews(false);
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
@ -3684,9 +3696,9 @@ begin
|
||||
Result:=MessagesCtrl.IndexOfView(View);
|
||||
end;
|
||||
|
||||
procedure TMessagesFrame.ClearViews;
|
||||
procedure TMessagesFrame.ClearViews(OnlyFinished: boolean);
|
||||
begin
|
||||
MessagesCtrl.ClearViews;
|
||||
MessagesCtrl.ClearViews(OnlyFinished);
|
||||
end;
|
||||
|
||||
procedure TMessagesFrame.CreateMarksForFile(aSynEdit: TSynEdit;
|
||||
|
||||
@ -163,7 +163,7 @@ end;
|
||||
|
||||
procedure TMessagesView.Clear;
|
||||
begin
|
||||
MessagesFrame1.ClearViews;
|
||||
MessagesFrame1.ClearViews(true);
|
||||
end;
|
||||
|
||||
procedure TMessagesView.DeleteView(View: TExtToolView);
|
||||
|
||||
@ -972,7 +972,7 @@ var
|
||||
begin
|
||||
Result:=mrCancel;
|
||||
CanAbort:=[sfCanAbort,sfProjectSaving]*Flags<>[];
|
||||
//writeln('TLazSourceFileManager.SaveEditorFile A PageIndex=',PageIndex,' Flags=',SaveFlagsToString(Flags));
|
||||
//debugln('TLazSourceFileManager.SaveEditorFile A PageIndex=',PageIndex,' Flags=',SaveFlagsToString(Flags));
|
||||
{$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('TLazSourceFileManager.SaveEditorFile A');{$ENDIF}
|
||||
if not (MainIDE.ToolStatus in [itNone,itDebugger]) then
|
||||
exit(mrAbort);
|
||||
@ -1137,7 +1137,7 @@ begin
|
||||
MainBuildBoss.CheckAmbiguousSources(DestFilename,false);
|
||||
|
||||
{$IFDEF IDE_DEBUG}
|
||||
writeln('*** HasResources=',AnUnitInfo.HasResources);
|
||||
debugln(['*** HasResources=',AnUnitInfo.HasResources]);
|
||||
{$ENDIF}
|
||||
{$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('TLazSourceFileManager.SaveEditorFile B');{$ENDIF}
|
||||
// save resource file and lfm file
|
||||
@ -1684,14 +1684,14 @@ begin
|
||||
// check readonly
|
||||
NewUnitInfo.FileReadOnly:=FileExistsUTF8(NewUnitInfo.Filename)
|
||||
and (not FileIsWritable(NewUnitInfo.Filename));
|
||||
//writeln('[TLazSourceFileManager.OpenEditorFile] B');
|
||||
//debugln('[TLazSourceFileManager.OpenEditorFile] B');
|
||||
// open file in source notebook
|
||||
Result:=OpenFileInSourceEditor(NewEditorInfo, PageIndex, WindowIndex, Flags, UseWindowID);
|
||||
if Result<>mrOk then begin
|
||||
DebugLn(['TLazSourceFileManager.OpenEditorFile failed DoOpenFileInSourceEditor: ',AFilename]);
|
||||
exit;
|
||||
end;
|
||||
//writeln('[TLazSourceFileManager.OpenEditorFile] C');
|
||||
//debugln('[TLazSourceFileManager.OpenEditorFile] C');
|
||||
// open resource component (designer, form, datamodule, ...)
|
||||
if NewUnitInfo.OpenEditorInfoCount = 1 then
|
||||
Result:=OpenResource;
|
||||
@ -1705,7 +1705,7 @@ begin
|
||||
end;
|
||||
|
||||
Result:=mrOk;
|
||||
//writeln('TLazSourceFileManager.OpenEditorFile END "',AFilename,'"');
|
||||
//debugln('TLazSourceFileManager.OpenEditorFile END "',AFilename,'"');
|
||||
{$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('TLazSourceFileManager.OpenEditorFile END');{$ENDIF}
|
||||
end;
|
||||
|
||||
@ -2319,7 +2319,7 @@ begin
|
||||
if Data=nil then exit;
|
||||
if Data is TPublishModuleOptions then begin
|
||||
Copy:=TPublishModuleOptions(Data).FileCanBePublished(Filename);
|
||||
//writeln('TLazSourceFileManager.OnCopyFile "',Filename,'" ',Copy);
|
||||
//debugln('TLazSourceFileManager.OnCopyFile "',Filename,'" ',Copy);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -2899,7 +2899,7 @@ function TLazSourceFileManager.CreateProjectForProgram(ProgramBuf: TCodeBuffer):
|
||||
var
|
||||
NewProjectDesc: TProjectDescriptor;
|
||||
begin
|
||||
//writeln('[TLazSourceFileManager.DoCreateProjectForProgram] A ',ProgramBuf.Filename);
|
||||
//debugln('[TLazSourceFileManager.DoCreateProjectForProgram] A ',ProgramBuf.Filename);
|
||||
if (Project1 <> nil)
|
||||
and (not MainIDE.DoResetToolStatus([rfInteractive, rfSuccessOnTrigger])) then exit;
|
||||
|
||||
@ -2928,7 +2928,7 @@ begin
|
||||
// create a new project
|
||||
Project1:=MainIDE.CreateProjectObject(NewProjectDesc,ProjectDescriptorProgram);
|
||||
Result:=InitProjectForProgram(ProgramBuf);
|
||||
//writeln('[TLazSourceFileManager.DoCreateProjectForProgram] END');
|
||||
//debugln('[TLazSourceFileManager.DoCreateProjectForProgram] END');
|
||||
end;
|
||||
|
||||
function TLazSourceFileManager.InitProjectForProgram(ProgramBuf: TCodeBuffer): TModalResult;
|
||||
@ -3079,7 +3079,7 @@ end;
|
||||
|
||||
function TLazSourceFileManager.CloseProject: TModalResult;
|
||||
begin
|
||||
//writeln('TLazSourceFileManager.CloseProject A');
|
||||
//debugln('TLazSourceFileManager.CloseProject A');
|
||||
{$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('TLazSourceFileManager.CloseProject A');{$ENDIF}
|
||||
Result:=DebugBoss.DoStopProject;
|
||||
if Result<>mrOk then begin
|
||||
@ -3114,7 +3114,7 @@ begin
|
||||
|
||||
{$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('TLazSourceFileManager.CloseProject C');{$ENDIF}
|
||||
Result:=mrOk;
|
||||
//writeln('TLazSourceFileManager.CloseProject end ',CodeToolBoss.ConsistencyCheck);
|
||||
//debugln('TLazSourceFileManager.CloseProject end ',CodeToolBoss.ConsistencyCheck);
|
||||
end;
|
||||
|
||||
procedure TLazSourceFileManager.OpenProject(aMenuItem: TIDEMenuItem);
|
||||
@ -3974,7 +3974,7 @@ begin
|
||||
end;
|
||||
if ComponentSavingOk then begin
|
||||
{$IFDEF IDE_DEBUG}
|
||||
writeln('TLazSourceFileManager.SaveFileResources E ',CompResourceCode);
|
||||
debugln('TLazSourceFileManager.SaveFileResources E ',CompResourceCode);
|
||||
{$ENDIF}
|
||||
// replace lazarus form resource code in include file (.lrs)
|
||||
if not (sfSaveToTestDir in Flags) then begin
|
||||
@ -4031,7 +4031,7 @@ begin
|
||||
end;
|
||||
if (LFMCode<>nil) then begin
|
||||
{$IFDEF IDE_DEBUG}
|
||||
writeln('TLazSourceFileManager.SaveFileResources E2 LFM=',LFMCode.Filename);
|
||||
debugln('TLazSourceFileManager.SaveFileResources E2 LFM=',LFMCode.Filename);
|
||||
{$ENDIF}
|
||||
if (ResType=rtRes) and (LFMCode.DiskEncoding<>EncodingUTF8) then
|
||||
begin
|
||||
@ -4113,7 +4113,7 @@ begin
|
||||
end;
|
||||
{$IFDEF IDE_DEBUG}
|
||||
if ResourceCode<>nil then
|
||||
writeln('TLazSourceFileManager.SaveFileResources F ',ResourceCode.Modified);
|
||||
debugln('TLazSourceFileManager.SaveFileResources F ',ResourceCode.Modified);
|
||||
{$ENDIF}
|
||||
// save binary stream (.lrs)
|
||||
if LRSCode<>nil then begin
|
||||
@ -4146,7 +4146,7 @@ begin
|
||||
|
||||
Result:=mrOk;
|
||||
{$IFDEF IDE_DEBUG}
|
||||
writeln('TLazSourceFileManager.SaveFileResources G ',LFMCode<>nil);
|
||||
debugln('TLazSourceFileManager.SaveFileResources G ',LFMCode<>nil);
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
@ -4732,7 +4732,7 @@ begin
|
||||
|
||||
Result:=mrOk;
|
||||
{$IFDEF IDE_VERBOSE}
|
||||
writeln('[TLazSourceFileManager.DoOpenMainUnit] END');
|
||||
debugln('[TLazSourceFileManager.DoOpenMainUnit] END');
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
@ -4985,7 +4985,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
if AnUnitInfo.HasResources then begin
|
||||
//writeln('TLazSourceFileManager.LoadResourceFile A "',AnUnitInfo.Filename,'" "',AnUnitInfo.ResourceFileName,'"');
|
||||
//debugln('TLazSourceFileManager.LoadResourceFile A "',AnUnitInfo.Filename,'" "',AnUnitInfo.ResourceFileName,'"');
|
||||
ResType:=MainBuildBoss.GetResourceType(AnUnitInfo);
|
||||
if ResType=rtLRS then begin
|
||||
LRSFilename:=MainBuildBoss.FindLRSFilename(AnUnitInfo,false);
|
||||
|
||||
@ -3571,38 +3571,43 @@ begin
|
||||
|
||||
{$IFDEF EnableNewExtTools}
|
||||
PkgCompileTool:=ExternalToolList.Add(Format(lisPkgMangCompilingPackage, [APackage.IDAsString]));
|
||||
FPCParser:=TFPCParser(PkgCompileTool.AddParsers(SubToolFPC));
|
||||
//debugln(['TLazPackageGraph.CompilePackage ',APackage.Name,' ',APackage.CompilerOptions.ShowHintsForUnusedUnitsInMainSrc,' ',APackage.MainUnit.Filename]);
|
||||
if (APackage.MainUnit<>nil)
|
||||
and (not APackage.CompilerOptions.ShowHintsForUnusedUnitsInMainSrc) then
|
||||
FPCParser.FilesToIgnoreUnitNotUsed.Add(APackage.MainUnit.Filename);
|
||||
FPCParser.HideHintsSenderNotUsed:=not APackage.CompilerOptions.ShowHintsForSenderNotUsed;
|
||||
FPCParser.HideHintsUnitNotUsedInMainSource:=not APackage.CompilerOptions.ShowHintsForUnusedUnitsInMainSrc;
|
||||
PkgCompileTool.AddParsers(SubToolMake);
|
||||
PkgCompileTool.Process.CurrentDirectory:=APackage.Directory;
|
||||
PkgCompileTool.Process.Executable:=CompilerFilename;
|
||||
PkgCompileTool.CmdLineParams:=EffectiveCompilerParams;
|
||||
PkgCompileTool.Hint:=Note;
|
||||
PkgCompileTool.Data:=TIDEExternalToolData.Create(IDEToolCompilePackage,
|
||||
APackage.Name,APackage.Filename);
|
||||
PkgCompileTool.FreeData:=true;
|
||||
// run
|
||||
PkgCompileTool.Execute;
|
||||
PkgCompileTool.WaitForExit;
|
||||
PkgCompileTool.Reference(Self,Classname);
|
||||
try
|
||||
FPCParser:=TFPCParser(PkgCompileTool.AddParsers(SubToolFPC));
|
||||
//debugln(['TLazPackageGraph.CompilePackage ',APackage.Name,' ',APackage.CompilerOptions.ShowHintsForUnusedUnitsInMainSrc,' ',APackage.MainUnit.Filename]);
|
||||
if (APackage.MainUnit<>nil)
|
||||
and (not APackage.CompilerOptions.ShowHintsForUnusedUnitsInMainSrc) then
|
||||
FPCParser.FilesToIgnoreUnitNotUsed.Add(APackage.MainUnit.Filename);
|
||||
FPCParser.HideHintsSenderNotUsed:=not APackage.CompilerOptions.ShowHintsForSenderNotUsed;
|
||||
FPCParser.HideHintsUnitNotUsedInMainSource:=not APackage.CompilerOptions.ShowHintsForUnusedUnitsInMainSrc;
|
||||
PkgCompileTool.AddParsers(SubToolMake);
|
||||
PkgCompileTool.Process.CurrentDirectory:=APackage.Directory;
|
||||
PkgCompileTool.Process.Executable:=CompilerFilename;
|
||||
PkgCompileTool.CmdLineParams:=EffectiveCompilerParams;
|
||||
PkgCompileTool.Hint:=Note;
|
||||
PkgCompileTool.Data:=TIDEExternalToolData.Create(IDEToolCompilePackage,
|
||||
APackage.Name,APackage.Filename);
|
||||
PkgCompileTool.FreeData:=true;
|
||||
// run
|
||||
PkgCompileTool.Execute;
|
||||
PkgCompileTool.WaitForExit;
|
||||
|
||||
// check if main ppu file was created
|
||||
SrcPPUFile:=APackage.GetSrcPPUFilename;
|
||||
SrcPPUFileExists:=(SrcPPUFile<>'') and FileExistsUTF8(SrcPPUFile);
|
||||
// write state file
|
||||
Result:=SavePackageCompiledState(APackage,
|
||||
CompilerFilename,CompilerParams,
|
||||
PkgCompileTool.ErrorMessage='',SrcPPUFileExists,true);
|
||||
if Result<>mrOk then begin
|
||||
DebugLn(['TLazPackageGraph.CompilePackage SavePackageCompiledState failed: ',APackage.IDAsString]);
|
||||
exit;
|
||||
// check if main ppu file was created
|
||||
SrcPPUFile:=APackage.GetSrcPPUFilename;
|
||||
SrcPPUFileExists:=(SrcPPUFile<>'') and FileExistsUTF8(SrcPPUFile);
|
||||
// write state file
|
||||
Result:=SavePackageCompiledState(APackage,
|
||||
CompilerFilename,CompilerParams,
|
||||
PkgCompileTool.ErrorMessage='',SrcPPUFileExists,true);
|
||||
if Result<>mrOk then begin
|
||||
DebugLn(['TLazPackageGraph.CompilePackage SavePackageCompiledState failed: ',APackage.IDAsString]);
|
||||
exit;
|
||||
end;
|
||||
if PkgCompileTool.ErrorMessage<>'' then
|
||||
exit(mrCancel);
|
||||
finally
|
||||
PkgCompileTool.Release(Self);
|
||||
end;
|
||||
if PkgCompileTool.ErrorMessage<>'' then
|
||||
exit(mrCancel);
|
||||
|
||||
{$ELSE}
|
||||
PkgCompileTool:=TIDEExternalToolOptions.Create;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user