mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-15 19:39:28 +02:00
IDE: further migration external tools
git-svn-id: trunk@42282 -
This commit is contained in:
parent
e59bc52695
commit
1b4118f8a9
@ -80,7 +80,7 @@ type
|
|||||||
WithSrcPos, Downwards: boolean): boolean; virtual; abstract;
|
WithSrcPos, Downwards: boolean): boolean; virtual; abstract;
|
||||||
|
|
||||||
function AddCustomMessage(TheUrgency: TMessageLineUrgency; Msg: string;
|
function AddCustomMessage(TheUrgency: TMessageLineUrgency; Msg: string;
|
||||||
aFilename: string = ''; LineNumber: integer = 0; Column: integer = 0;
|
aSrcFilename: string = ''; LineNumber: integer = 0; Column: integer = 0;
|
||||||
const ViewCaption: string = ''): TMessageLine; virtual; abstract;
|
const ViewCaption: string = ''): TMessageLine; virtual; abstract;
|
||||||
function GetSelectedLine: TMessageLine; virtual; abstract;
|
function GetSelectedLine: TMessageLine; virtual; abstract;
|
||||||
end;
|
end;
|
||||||
|
@ -50,7 +50,7 @@ uses
|
|||||||
ComCtrls, DividerBevel, DefineTemplates, CodeToolManager,
|
ComCtrls, DividerBevel, DefineTemplates, CodeToolManager,
|
||||||
// IDEIntf
|
// IDEIntf
|
||||||
LazIDEIntf, IDEMsgIntf, IDEHelpIntf, IDEImagesIntf, IDEWindowIntf, IDEDialogs,
|
LazIDEIntf, IDEMsgIntf, IDEHelpIntf, IDEImagesIntf, IDEWindowIntf, IDEDialogs,
|
||||||
PackageIntf,
|
PackageIntf, IDEExternToolIntf,
|
||||||
// IDE
|
// IDE
|
||||||
LazarusIDEStrConsts, TransferMacros, LazConf, IDEProcs, DialogProcs,
|
LazarusIDEStrConsts, TransferMacros, LazConf, IDEProcs, DialogProcs,
|
||||||
MainBar, ExtToolEditDlg, EnvironmentOpts,
|
MainBar, ExtToolEditDlg, EnvironmentOpts,
|
||||||
@ -146,7 +146,8 @@ type
|
|||||||
function ShowConfigureBuildLazarusDlg(AProfiles: TBuildLazarusProfiles): TModalResult;
|
function ShowConfigureBuildLazarusDlg(AProfiles: TBuildLazarusProfiles): TModalResult;
|
||||||
|
|
||||||
function MakeLazarus(Profile: TBuildLazarusProfile;
|
function MakeLazarus(Profile: TBuildLazarusProfile;
|
||||||
ExternalTools: TBaseExternalToolList; Macros: TTransferMacroList;
|
{$IFNDEF EnableNewExtTools}ExternalTools: TBaseExternalToolList;{$ENDIF}
|
||||||
|
Macros: TTransferMacroList;
|
||||||
const PackageOptions, CompilerPath, MakePath: string;
|
const PackageOptions, CompilerPath, MakePath: string;
|
||||||
Flags: TBuildLazarusFlags; var ProfileChanged: boolean): TModalResult;
|
Flags: TBuildLazarusFlags; var ProfileChanged: boolean): TModalResult;
|
||||||
|
|
||||||
@ -190,7 +191,8 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
function MakeLazarus(Profile: TBuildLazarusProfile;
|
function MakeLazarus(Profile: TBuildLazarusProfile;
|
||||||
ExternalTools: TBaseExternalToolList; Macros: TTransferMacroList;
|
{$IFNDEF EnableNewExtTools}ExternalTools: TBaseExternalToolList;{$ENDIF}
|
||||||
|
Macros: TTransferMacroList;
|
||||||
const PackageOptions, CompilerPath, MakePath: string;
|
const PackageOptions, CompilerPath, MakePath: string;
|
||||||
Flags: TBuildLazarusFlags; var ProfileChanged: boolean): TModalResult;
|
Flags: TBuildLazarusFlags; var ProfileChanged: boolean): TModalResult;
|
||||||
|
|
||||||
@ -284,14 +286,61 @@ function MakeLazarus(Profile: TBuildLazarusProfile;
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
var
|
var
|
||||||
|
{$IFDEF EnableNewExtTools}
|
||||||
|
Tool: TAbstractExternalTool;
|
||||||
|
{$ELSE}
|
||||||
Tool: TExternalToolOptions;
|
Tool: TExternalToolOptions;
|
||||||
ExtraOptions: String;
|
{$ENDIF}
|
||||||
WorkingDirectory: String;
|
WorkingDirectory: String;
|
||||||
|
Executable: String;
|
||||||
|
EnvironmentOverrides: TStringList;
|
||||||
|
CmdLineParams: String;
|
||||||
|
|
||||||
|
function Run(CurTitle, Cmd: string): TModalResult;
|
||||||
|
var
|
||||||
|
Params: String;
|
||||||
|
begin
|
||||||
|
Params:=UTF8Trim(CmdLineParams,[]);
|
||||||
|
if Macros<>nil then
|
||||||
|
Macros.SubstituteStr(Params);
|
||||||
|
if Params<>'' then
|
||||||
|
Params:=Cmd+' '+Params
|
||||||
|
else
|
||||||
|
Params:=Cmd;
|
||||||
|
{$IFDEF EnableNewExtTools}
|
||||||
|
Tool:=ExternalToolList.Add(CurTitle);
|
||||||
|
Tool.Process.Executable:=Executable;
|
||||||
|
Tool.AddParsers(SubToolFPC);
|
||||||
|
Tool.AddParsers(SubToolMake);
|
||||||
|
Tool.Process.CurrentDirectory:=WorkingDirectory;
|
||||||
|
Tool.EnvironmentOverrides:=EnvironmentOverrides;
|
||||||
|
Tool.CmdLineParams:=Params;
|
||||||
|
Tool.Execute;
|
||||||
|
Tool.WaitForExit;
|
||||||
|
if Tool.ErrorMessage='' then
|
||||||
|
exit(mrOk)
|
||||||
|
else
|
||||||
|
exit(mrCancel);
|
||||||
|
{$ELSE}
|
||||||
|
if Tool=nil then
|
||||||
|
Tool:=TExternalToolOptions.Create;
|
||||||
|
Tool.Filename:=Executable;
|
||||||
|
Tool.WorkingDirectory:=WorkingDirectory;
|
||||||
|
Tool.ScanOutputForFPCMessages:=true;
|
||||||
|
Tool.ScanOutputForMakeMessages:=true;
|
||||||
|
Tool.CmdLineParams:=Params;
|
||||||
|
Tool.EnvironmentOverrides.Assign(EnvironmentOverrides);
|
||||||
|
Result:=ExternalTools.Run(Tool,Macros,false);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
ExtraOptions: String;
|
||||||
OutputDirRedirected, UpdateRevisionInc: boolean;
|
OutputDirRedirected, UpdateRevisionInc: boolean;
|
||||||
IdeBuildMode: TIdeBuildMode;
|
IdeBuildMode: TIdeBuildMode;
|
||||||
CmdLineParams: String;
|
|
||||||
Dir: String;
|
Dir: String;
|
||||||
LazExeFilename: string;
|
LazExeFilename: string;
|
||||||
|
Cmd: String;
|
||||||
begin
|
begin
|
||||||
Result:=mrCancel;
|
Result:=mrCancel;
|
||||||
|
|
||||||
@ -299,20 +348,22 @@ begin
|
|||||||
LazarusIDE.MainBarSubTitle:=Profile.Name;
|
LazarusIDE.MainBarSubTitle:=Profile.Name;
|
||||||
IdeBuildMode:=Profile.IdeBuildMode;
|
IdeBuildMode:=Profile.IdeBuildMode;
|
||||||
|
|
||||||
Tool:=TExternalToolOptions.Create;
|
EnvironmentOverrides:=TStringList.Create;
|
||||||
|
Tool:=nil;
|
||||||
try
|
try
|
||||||
// setup external tool
|
// setup external tool
|
||||||
Tool.Filename:=MakePath;
|
EnvironmentOverrides.Values['LCL_PLATFORM']:=
|
||||||
Tool.EnvironmentOverrides.Values['LCL_PLATFORM']:=
|
|
||||||
LCLPlatformDirNames[Profile.TargetPlatform];
|
LCLPlatformDirNames[Profile.TargetPlatform];
|
||||||
Tool.EnvironmentOverrides.Values['LANG']:= 'en_US';
|
EnvironmentOverrides.Values['LANG']:= 'en_US';
|
||||||
if CompilerPath<>'' then
|
if CompilerPath<>'' then
|
||||||
Tool.EnvironmentOverrides.Values['PP']:=CompilerPath;
|
EnvironmentOverrides.Values['PP']:=CompilerPath;
|
||||||
if (Tool.Filename<>'') and (not FileExistsUTF8(Tool.Filename)) then
|
|
||||||
Tool.Filename:=FindDefaultExecutablePath(Tool.Filename);
|
Executable:=MakePath;
|
||||||
if (Tool.Filename='') or (not FileExistsUTF8(Tool.Filename)) then begin
|
if (Executable<>'') and (not FileExistsUTF8(Executable)) then
|
||||||
Tool.Filename:=FindDefaultMakePath;
|
Executable:=FindDefaultExecutablePath(Executable);
|
||||||
if (Tool.Filename='') or (not FileExistsUTF8(Tool.Filename)) then begin
|
if (Executable='') or (not FileExistsUTF8(Executable)) then begin
|
||||||
|
Executable:=FindDefaultMakePath;
|
||||||
|
if (Executable='') or (not FileExistsUTF8(Executable)) then begin
|
||||||
IDEMessageDialog(lisMakeNotFound,
|
IDEMessageDialog(lisMakeNotFound,
|
||||||
Format(lisTheProgramMakeWasNotFoundThisToolIsNeededToBuildLa,
|
Format(lisTheProgramMakeWasNotFoundThisToolIsNeededToBuildLa,
|
||||||
['"', '"', LineEnding, LineEnding]),
|
['"', '"', LineEnding, LineEnding]),
|
||||||
@ -320,6 +371,7 @@ begin
|
|||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// add -w option to print leaving/entering messages of "make"
|
// add -w option to print leaving/entering messages of "make"
|
||||||
CmdLineParams:=' -w';
|
CmdLineParams:=' -w';
|
||||||
// append target OS
|
// append target OS
|
||||||
@ -329,9 +381,6 @@ begin
|
|||||||
if Profile.TargetCPU<>'' then
|
if Profile.TargetCPU<>'' then
|
||||||
CmdLineParams+=' CPU_TARGET='+Profile.FPCTargetCPU+' CPU_SOURCE='+Profile.FPCTargetCPU;
|
CmdLineParams+=' CPU_TARGET='+Profile.FPCTargetCPU+' CPU_SOURCE='+Profile.FPCTargetCPU;
|
||||||
|
|
||||||
Tool.ScanOutputForFPCMessages:=true;
|
|
||||||
Tool.ScanOutputForMakeMessages:=true;
|
|
||||||
|
|
||||||
// clean up
|
// clean up
|
||||||
if (IdeBuildMode<>bmBuild) and (not (blfDontClean in Flags)) then begin
|
if (IdeBuildMode<>bmBuild) and (not (blfDontClean in Flags)) then begin
|
||||||
WorkingDirectory:=EnvironmentOptions.GetParsedLazarusDirectory;
|
WorkingDirectory:=EnvironmentOptions.GetParsedLazarusDirectory;
|
||||||
@ -364,14 +413,11 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
// call make to clean up
|
// call make to clean up
|
||||||
Tool.Title:=lisCleanLazarusSource;
|
|
||||||
Tool.WorkingDirectory:=WorkingDirectory;
|
|
||||||
if (IdeBuildMode=bmCleanBuild) or (blfOnlyIDE in Flags) then
|
if (IdeBuildMode=bmCleanBuild) or (blfOnlyIDE in Flags) then
|
||||||
Tool.CmdLineParams:='cleanide'
|
Cmd:='cleanide'
|
||||||
else
|
else
|
||||||
Tool.CmdLineParams:='cleanlaz';
|
Cmd:='cleanlaz';
|
||||||
Tool.CmdLineParams:=Tool.CmdLineParams+CmdLineParams;
|
Result:=Run(lisCleanLazarusSource,Cmd);
|
||||||
Result:=ExternalTools.Run(Tool,Macros,false);
|
|
||||||
if Result<>mrOk then exit;
|
if Result<>mrOk then exit;
|
||||||
|
|
||||||
ApplyCleanOnce;
|
ApplyCleanOnce;
|
||||||
@ -382,12 +428,10 @@ begin
|
|||||||
WorkingDirectory:=EnvironmentOptions.GetParsedLazarusDirectory;
|
WorkingDirectory:=EnvironmentOptions.GetParsedLazarusDirectory;
|
||||||
if blfDontClean in Flags then
|
if blfDontClean in Flags then
|
||||||
IdeBuildMode:=bmBuild;
|
IdeBuildMode:=bmBuild;
|
||||||
Tool.Title:=lisIDE;
|
|
||||||
Tool.WorkingDirectory:=WorkingDirectory;
|
|
||||||
if IdeBuildMode=bmBuild then
|
if IdeBuildMode=bmBuild then
|
||||||
Tool.CmdLineParams:='idepkg'
|
Cmd:='idepkg'
|
||||||
else
|
else
|
||||||
Tool.CmdLineParams:='cleanide ide';
|
Cmd:='cleanide ide';
|
||||||
// append extra Profile
|
// append extra Profile
|
||||||
ExtraOptions:='';
|
ExtraOptions:='';
|
||||||
Result:=CreateIDEMakeOptions(Profile,Macros,PackageOptions,Flags,
|
Result:=CreateIDEMakeOptions(Profile,Macros,PackageOptions,Flags,
|
||||||
@ -400,14 +444,13 @@ begin
|
|||||||
exit(mrCancel);
|
exit(mrCancel);
|
||||||
|
|
||||||
if ExtraOptions<>'' then
|
if ExtraOptions<>'' then
|
||||||
Tool.EnvironmentOverrides.Values['OPT'] := ExtraOptions;
|
EnvironmentOverrides.Values['OPT'] := ExtraOptions;
|
||||||
if not UpdateRevisionInc then begin
|
if not UpdateRevisionInc then begin
|
||||||
CheckRevisionInc;
|
CheckRevisionInc;
|
||||||
Tool.EnvironmentOverrides.Values['USESVN2REVISIONINC'] := '0';
|
EnvironmentOverrides.Values['USESVN2REVISIONINC'] := '0';
|
||||||
end;
|
end;
|
||||||
Tool.CmdLineParams:=Tool.CmdLineParams+CmdLineParams;
|
|
||||||
// run
|
// run
|
||||||
Result:=ExternalTools.Run(Tool,Macros,false);
|
Result:=Run(lisIDE,Cmd);
|
||||||
// clean only once. If building failed the user must first fix the error
|
// clean only once. If building failed the user must first fix the error
|
||||||
// before a clean build is needed.
|
// before a clean build is needed.
|
||||||
ApplyCleanOnce;
|
ApplyCleanOnce;
|
||||||
@ -419,7 +462,10 @@ begin
|
|||||||
end;
|
end;
|
||||||
Result:=mrOk;
|
Result:=mrOk;
|
||||||
finally
|
finally
|
||||||
|
EnvironmentOverrides.Free;
|
||||||
|
{$IFNDEF EnableNewExtTools}
|
||||||
Tool.Free;
|
Tool.Free;
|
||||||
|
{$ENDIF}
|
||||||
if LazarusIDE<>nil then
|
if LazarusIDE<>nil then
|
||||||
LazarusIDE.MainBarSubTitle:='';
|
LazarusIDE.MainBarSubTitle:='';
|
||||||
end;
|
end;
|
||||||
@ -683,14 +729,22 @@ begin
|
|||||||
if not (Result in [mrOk,mrIgnore]) then begin
|
if not (Result in [mrOk,mrIgnore]) then begin
|
||||||
debugln(['CreateBuildLazarusOptions CreateApplicationBundle failed']);
|
debugln(['CreateBuildLazarusOptions CreateApplicationBundle failed']);
|
||||||
if IDEMessagesWindow<>nil then
|
if IDEMessagesWindow<>nil then
|
||||||
|
{$IFDEF EnableNewExtTools}
|
||||||
|
IDEMessagesWindow.AddCustomMessage(mluError,'to create application bundle '+BundleDir);
|
||||||
|
{$ELSE}
|
||||||
IDEMessagesWindow.AddMsg('Error: failed to create application bundle '+BundleDir,TargetDirectory,-1);
|
IDEMessagesWindow.AddMsg('Error: failed to create application bundle '+BundleDir,TargetDirectory,-1);
|
||||||
|
{$ENDIF}
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
Result:=CreateAppBundleSymbolicLink(CurTargetFilename);
|
Result:=CreateAppBundleSymbolicLink(CurTargetFilename);
|
||||||
if not (Result in [mrOk,mrIgnore]) then begin
|
if not (Result in [mrOk,mrIgnore]) then begin
|
||||||
debugln(['CreateBuildLazarusOptions CreateAppBundleSymbolicLink failed']);
|
debugln(['CreateBuildLazarusOptions CreateAppBundleSymbolicLink failed']);
|
||||||
if IDEMessagesWindow<>nil then
|
if IDEMessagesWindow<>nil then
|
||||||
|
{$IFDEF EnableNewExtTools}
|
||||||
|
IDEMessagesWindow.AddCustomMessage(mluError,'to create application bundle symlink to '+CurTargetFilename);
|
||||||
|
{$ELSE}
|
||||||
IDEMessagesWindow.AddMsg('Error: failed to create application bundle symlink to '+CurTargetFilename,TargetDirectory,-1);
|
IDEMessagesWindow.AddMsg('Error: failed to create application bundle symlink to '+CurTargetFilename,TargetDirectory,-1);
|
||||||
|
{$ENDIF}
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
@ -442,6 +442,7 @@ begin
|
|||||||
Config.SetValue('Scanners/',FScanners);
|
Config.SetValue('Scanners/',FScanners);
|
||||||
Config.SetDeleteValue('HideMainForm/Value',HideMainForm,true);
|
Config.SetDeleteValue('HideMainForm/Value',HideMainForm,true);
|
||||||
Modified:=false;
|
Modified:=false;
|
||||||
|
Result:=mrOk;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TExternalToolMenuItems }
|
{ TExternalToolMenuItems }
|
||||||
@ -625,7 +626,28 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
{$ENDIF}
|
{$ELSE EnableNewExtTools}
|
||||||
|
{ TExternalToolOptions }
|
||||||
|
|
||||||
|
procedure TExternalToolOptions.Assign(Source: TPersistent);
|
||||||
|
var
|
||||||
|
Src: TExternalToolOptions;
|
||||||
|
begin
|
||||||
|
if Source is TExternalToolOptions then begin
|
||||||
|
Src:=TExternalToolOptions(Source);
|
||||||
|
fKey:=Src.fKey;
|
||||||
|
fShift:=Src.fShift;
|
||||||
|
end;
|
||||||
|
inherited Assign(Source);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TExternalToolOptions.Clear;
|
||||||
|
begin
|
||||||
|
fKey:=VK_UNKNOWN;
|
||||||
|
fShift:=[];
|
||||||
|
inherited Clear;
|
||||||
|
end;
|
||||||
|
{$ENDIF EnableNewExtTools}
|
||||||
|
|
||||||
{ TExternalToolOptionDlg }
|
{ TExternalToolOptionDlg }
|
||||||
|
|
||||||
@ -765,7 +787,7 @@ begin
|
|||||||
ButtonPanel.HelpButton.Caption:=lisMenuHelp;
|
ButtonPanel.HelpButton.Caption:=lisMenuHelp;
|
||||||
ButtonPanel.CancelButton.Caption:=lisCancel;
|
ButtonPanel.CancelButton.Caption:=lisCancel;
|
||||||
|
|
||||||
fOptions:=TExternalToolOptions.Create;
|
fOptions:={$IFDEF EnableNewExtTools}TExternalToolMenuItem.Create(nil){$ELSE}TExternalToolOptions.Create{$ENDIF};
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TExternalToolOptionDlg.FormDestroy(Sender: TObject);
|
procedure TExternalToolOptionDlg.FormDestroy(Sender: TObject);
|
||||||
@ -866,25 +888,4 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TExternalToolOptions }
|
|
||||||
|
|
||||||
procedure TExternalToolOptions.Assign(Source: TPersistent);
|
|
||||||
var
|
|
||||||
Src: TExternalToolOptions;
|
|
||||||
begin
|
|
||||||
if Source is TExternalToolOptions then begin
|
|
||||||
Src:=TExternalToolOptions(Source);
|
|
||||||
fKey:=Src.fKey;
|
|
||||||
fShift:=Src.fShift;
|
|
||||||
end;
|
|
||||||
inherited Assign(Source);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TExternalToolOptions.Clear;
|
|
||||||
begin
|
|
||||||
fKey:=VK_UNKNOWN;
|
|
||||||
fShift:=[];
|
|
||||||
inherited Clear;
|
|
||||||
end;
|
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
Loading…
Reference in New Issue
Block a user