From b5ab6802478d5e58ea6a3188c3d8752409fa615e Mon Sep 17 00:00:00 2001 From: juha Date: Sun, 9 Feb 2014 15:48:41 +0000 Subject: [PATCH] IDE: refactor functions that build Lazarus. Make them a class. Reduces func parameters and makes changes later easier. git-svn-id: trunk@43977 - --- ide/buildlazdialog.lfm | 5 +- ide/buildlazdialog.pas | 245 +++++++++++++++++++++-------------------- ide/main.pp | 72 ++++++------ 3 files changed, 160 insertions(+), 162 deletions(-) diff --git a/ide/buildlazdialog.lfm b/ide/buildlazdialog.lfm index 8828d58b5f..20bc5a3eb4 100644 --- a/ide/buildlazdialog.lfm +++ b/ide/buildlazdialog.lfm @@ -15,7 +15,7 @@ object ConfigureBuildLazarusDlg: TConfigureBuildLazarusDlg OnResize = FormResize OnShow = FormShow Position = poScreenCenter - LCLVersion = '1.1' + LCLVersion = '1.3' object CBLDBtnPanel: TPanel AnchorSideTop.Side = asrBottom Left = 0 @@ -359,12 +359,11 @@ object ConfigureBuildLazarusDlg: TConfigureBuildLazarusDlg Height = 15 Top = 345 Width = 684 - AutoSize = True + Caption = 'CommonsDividerBevel' Anchors = [akLeft, akRight, akBottom] BorderSpacing.Left = 6 BorderSpacing.Right = 6 BorderSpacing.Bottom = 6 - Caption = 'CommonsDividerBevel' Font.Style = [fsBold] ParentFont = False end diff --git a/ide/buildlazdialog.pas b/ide/buildlazdialog.pas index 4c9a3e7817..c063ba1aac 100644 --- a/ide/buildlazdialog.pas +++ b/ide/buildlazdialog.pas @@ -146,23 +146,37 @@ type procedure UpdateProfileNamesUI; end; -function ShowConfigureBuildLazarusDlg(AProfiles: TBuildLazarusProfiles): TModalResult; + { TLazarusBuilder } -function MakeLazarus(Profile: TBuildLazarusProfile; - {$IFNDEF EnableNewExtTools}ExternalTools: TBaseExternalToolList;{$ENDIF} - Macros: TTransferMacroList; - const PackageOptions, CompilerPath, MakePath: string; - Flags: TBuildLazarusFlags; var ProfileChanged: boolean): TModalResult; - -function CreateIDEMakeOptions(Profile: TBuildLazarusProfile; - Macros: TTransferMacroList; const PackageOptions: string; - Flags: TBuildLazarusFlags; var ExtraOptions: string; - out UpdateRevisionInc: boolean; out OutputDirRedirected: boolean; - out TargetFilename: string): TModalResult; - -function SaveIDEMakeOptions(Profile: TBuildLazarusProfile; - Macros: TTransferMacroList; - const PackageOptions: string; Flags: TBuildLazarusFlags): TModalResult; + TLazarusBuilder = class + private + fProfile: TBuildLazarusProfile; + fProfileChanged: Boolean; + fExtraOptions: string; // var + fUpdateRevisionInc: Boolean; + fOutputDirRedirected: Boolean; + fTargetFilename: string; + fPkgOptions: string; + fMacros: TTransferMacroList; + function CreateIDEMakeOptions(Flags: TBuildLazarusFlags): TModalResult; + public + {$IFNDEF EnableNewExtTools} + ExtTools: TBaseExternalToolList; + {$ENDIF} + constructor Create(aProfile: TBuildLazarusProfile); + destructor Destroy; override; + function ShowConfigureBuildLazarusDlg(AProfiles: TBuildLazarusProfiles): TModalResult; + function MakeLazarus(Flags: TBuildLazarusFlags): TModalResult; + function SaveIDEMakeOptions(Flags: TBuildLazarusFlags): TModalResult; + public + property Profile: TBuildLazarusProfile read fProfile write fProfile; + property ProfileChanged: Boolean read fProfileChanged; + property ExtraOptions: string read fExtraOptions; + property UpdateRevisionInc: Boolean read fUpdateRevisionInc; + property OutputDirRedirected: Boolean read fOutputDirRedirected; + property TargetFilename: string read fTargetFilename; + property PkgOptions: string read fPkgOptions write fPkgOptions; +end; function GetMakeIDEConfigFilename: string; function GetBackupExeFilename(Filename: string): string; @@ -171,10 +185,35 @@ implementation {$R *.lfm} +function GetMakeIDEConfigFilename: string; const DefaultIDEMakeOptionFilename = 'idemake.cfg'; +begin + Result:=AppendPathDelim(GetPrimaryConfigPath)+DefaultIDEMakeOptionFilename; +end; -function ShowConfigureBuildLazarusDlg(AProfiles: TBuildLazarusProfiles): TModalResult; +function GetBackupExeFilename(Filename: string): string; +var + Ext: String; +begin + Ext:=ExtractFileExt(Filename); + Result:=LeftStr(Filename,length(Filename)-length(Ext))+'.old'+Ext; +end; + +{ TLazarusBuilder } + +constructor TLazarusBuilder.Create(aProfile: TBuildLazarusProfile); +begin + fProfile:=aProfile; + fMacros:=GlobalMacroList; +end; + +destructor TLazarusBuilder.Destroy; +begin + inherited Destroy; +end; + +function TLazarusBuilder.ShowConfigureBuildLazarusDlg(AProfiles: TBuildLazarusProfiles): TModalResult; // mrOk=save // mrYes=save and compile // mrAll=save and compile all selected profiles @@ -193,18 +232,14 @@ begin end; end; -function MakeLazarus(Profile: TBuildLazarusProfile; - {$IFNDEF EnableNewExtTools}ExternalTools: TBaseExternalToolList;{$ENDIF} - Macros: TTransferMacroList; - const PackageOptions, CompilerPath, MakePath: string; - Flags: TBuildLazarusFlags; var ProfileChanged: boolean): TModalResult; +function TLazarusBuilder.MakeLazarus(Flags: TBuildLazarusFlags): TModalResult; procedure ApplyCleanOnce; begin - if not Profile.CleanOnce then exit; - if Profile.IdeBuildMode=bmBuild then exit; - Profile.IdeBuildMode:=bmBuild; - ProfileChanged:=true; + if not fProfile.CleanOnce then exit; + if fProfile.IdeBuildMode=bmBuild then exit; + fProfile.IdeBuildMode:=bmBuild; + fProfileChanged:=true; end; function CheckDirectoryWritable(Dir: string): boolean; @@ -304,8 +339,8 @@ var Params: String; begin Params:=UTF8Trim(CmdLineParams,[]); - if Macros<>nil then - Macros.SubstituteStr(Params); + if fMacros<>nil then + fMacros.SubstituteStr(Params); if Params<>'' then Params:=Cmd+' '+Params else @@ -334,35 +369,32 @@ var Tool.ScanOutputForMakeMessages:=true; Tool.CmdLineParams:=Params; Tool.EnvironmentOverrides.Assign(EnvironmentOverrides); - Result:=ExternalTools.Run(Tool,Macros,false); + Result:=ExtTools.Run(Tool,fMacros,false); {$ENDIF} end; var - ExtraOptions: String; - OutputDirRedirected, UpdateRevisionInc: boolean; IdeBuildMode: TIdeBuildMode; - Dir: String; - LazExeFilename: string; - Cmd: String; + Cmd, s: String; begin Result:=mrCancel; if LazarusIDE<>nil then - LazarusIDE.MainBarSubTitle:=Profile.Name; - IdeBuildMode:=Profile.IdeBuildMode; + LazarusIDE.MainBarSubTitle:=fProfile.Name; + IdeBuildMode:=fProfile.IdeBuildMode; EnvironmentOverrides:=TStringList.Create; Tool:=nil; try // setup external tool EnvironmentOverrides.Values['LCL_PLATFORM']:= - LCLPlatformDirNames[Profile.TargetPlatform]; + LCLPlatformDirNames[fProfile.TargetPlatform]; EnvironmentOverrides.Values['LANG']:= 'en_US'; - if CompilerPath<>'' then - EnvironmentOverrides.Values['PP']:=CompilerPath; + s := EnvironmentOptions.GetParsedCompilerFilename; + if s<>'' then + EnvironmentOverrides.Values['PP']:=s; - Executable:=MakePath; + Executable:=EnvironmentOptions.GetParsedMakeFilename; if (Executable<>'') and (not FileExistsUTF8(Executable)) then Executable:=FindDefaultExecutablePath(Executable); if (Executable='') or (not FileExistsUTF8(Executable)) then begin @@ -379,11 +411,11 @@ begin // add -w option to print leaving/entering messages of "make" CmdLineParams:=' -w'; // append target OS - if Profile.TargetOS<>'' then - CmdLineParams+=' OS_TARGET='+Profile.FPCTargetOS+' OS_SOURCE='+Profile.FPCTargetOS; + if fProfile.TargetOS<>'' then + CmdLineParams+=' OS_TARGET='+fProfile.FPCTargetOS+' OS_SOURCE='+fProfile.FPCTargetOS; // append target CPU - if Profile.TargetCPU<>'' then - CmdLineParams+=' CPU_TARGET='+Profile.FPCTargetCPU+' CPU_SOURCE='+Profile.FPCTargetCPU; + if fProfile.TargetCPU<>'' then + CmdLineParams+=' CPU_TARGET='+fProfile.FPCTargetCPU+' CPU_SOURCE='+fProfile.FPCTargetCPU; // clean up if (IdeBuildMode<>bmBuild) and (not (blfDontClean in Flags)) then begin @@ -409,10 +441,10 @@ begin CleanLazarusSrcDir(GetPrimaryConfigPath+PathDelim+'units'); // clean custom target directory - if Profile.TargetDirectory<>'' then begin - Dir:=Profile.GetParsedTargetDirectory(Macros); - if (Dir<>'') and DirPathExists(Dir) then - CleanLazarusSrcDir(Dir); + if fProfile.TargetDirectory<>'' then begin + s:=fProfile.GetParsedTargetDirectory(fMacros); + if (s<>'') and DirPathExists(s) then + CleanLazarusSrcDir(s); end; end; @@ -436,19 +468,17 @@ begin Cmd:='idepkg' else Cmd:='cleanide ide'; - // append extra Profile - ExtraOptions:=''; - Result:=CreateIDEMakeOptions(Profile,Macros,PackageOptions,Flags, - ExtraOptions,UpdateRevisionInc,OutputDirRedirected, - LazExeFilename); + // append extra fProfile + fExtraOptions:=''; + Result:=CreateIDEMakeOptions(Flags); // ExtraOptions,UpdateRevisionInc,OutputDirRedirected,LazExeFilename if Result<>mrOk then exit; if (not OutputDirRedirected) and (not CheckDirectoryWritable(WorkingDirectory)) then exit(mrCancel); - if ExtraOptions<>'' then - EnvironmentOverrides.Values['OPT'] := ExtraOptions; + if fExtraOptions<>'' then + EnvironmentOverrides.Values['OPT'] := fExtraOptions; if not UpdateRevisionInc then begin CheckRevisionInc; EnvironmentOverrides.Values['USESVN2REVISIONINC'] := '0'; @@ -460,7 +490,7 @@ begin ApplyCleanOnce; if Result<>mrOk then begin // build failed: restore backup of lazarus.exe - RestoreBackup(LazExeFilename); + RestoreBackup(fTargetFilename); exit; end; end; @@ -475,11 +505,7 @@ begin end; end; -function CreateIDEMakeOptions(Profile: TBuildLazarusProfile; - Macros: TTransferMacroList; const PackageOptions: string; - Flags: TBuildLazarusFlags; var ExtraOptions: string; - out UpdateRevisionInc: boolean; out OutputDirRedirected: boolean; - out TargetFilename: string): TModalResult; +function TLazarusBuilder.CreateIDEMakeOptions(Flags: TBuildLazarusFlags): TModalResult; procedure BackupExe(var ExeFilename: string); var @@ -540,13 +566,13 @@ function CreateIDEMakeOptions(Profile: TBuildLazarusProfile; procedure AppendExtraOption(const AddOption: string; EncloseIfSpace: boolean); begin if AddOption='' then exit; - if ExtraOptions<>'' then - ExtraOptions:=ExtraOptions+' '; + if fExtraOptions<>'' then + fExtraOptions:=fExtraOptions+' '; if EncloseIfSpace and (Pos(' ',AddOption)>0) then - ExtraOptions:=ExtraOptions+'"'+AddOption+'"' + fExtraOptions:=fExtraOptions+'"'+AddOption+'"' else - ExtraOptions:=ExtraOptions+AddOption; - //DebugLn(['AppendExtraOption ',ExtraOptions]); + fExtraOptions:=fExtraOptions+AddOption; + //DebugLn(['AppendExtraOption ',fExtraOptions]); end; procedure AppendExtraOption(const AddOption: string); @@ -571,11 +597,11 @@ var TargetLCLPlatform: String; begin Result:=mrOk; - OutputDirRedirected:=false; - UpdateRevisionInc:=Profile.UpdateRevisionInc; + fOutputDirRedirected:=false; + fUpdateRevisionInc:=fProfile.UpdateRevisionInc; - // create extra Profile - ExtraOptions:=Profile.ExtraOptions; + // create extra fProfile + fExtraOptions:=fProfile.ExtraOptions; // check for special IDE config file if (blfUseMakeIDECfg in Flags) then begin @@ -584,7 +610,7 @@ begin if (FileExistsUTF8(MakeIDECfgFilename)) then begin // If a file name contains spaces, a file name whould need to be quoted. // Using a single quote is not possible, it is used already in the - // makefile to group all Profile in OPT='bla bla'. + // makefile to group all fProfile in OPT='bla bla'. // using " implicates that make uses a shell to execute the command of // that line. But using shells (i.e. command.com, cmd.exe, etc) is so // fragile (see bug 11362), that is better to avoid this. @@ -611,7 +637,7 @@ begin // The target directory is writable, the lazarus.o file can be created. // Otherwise: Don't touch the target filename. - TargetFilename:=''; + fTargetFilename:=''; UnitOutDir:=''; TargetDirectory:=''; CodeToolBoss.FPCDefinesCache.ConfigCaches.GetDefaultCompilerTarget( @@ -620,20 +646,20 @@ begin DefaultTargetOS:=GetCompiledTargetOS; if DefaultTargetCPU='' then DefaultTargetCPU:=GetCompiledTargetCPU; - TargetOS:=Profile.FPCTargetOS; - TargetCPU:=Profile.FPCTargetCPU; - TargetLCLPlatform:=LCLPlatformDirNames[Profile.TargetPlatform]; + TargetOS:=fProfile.FPCTargetOS; + TargetCPU:=fProfile.FPCTargetCPU; + TargetLCLPlatform:=LCLPlatformDirNames[fProfile.TargetPlatform]; if TargetOS='' then TargetOS:=DefaultTargetOS; if TargetCPU='' then TargetCPU:=DefaultTargetCPU; DefaultTargetFilename:='lazarus'+GetExecutableExt(TargetOS); CrossCompiling:=(CompareText(TargetOS,DefaultTargetOS)<>0) or (CompareText(TargetCPU,DefaultTargetCPU)<>0); //DebugLn(['CreateBuildLazarusOptions NewTargetOS=',TargetOS,' NewTargetCPU=',TargetCPU]); - if (Profile.TargetDirectory<>'') then begin + if (fProfile.TargetDirectory<>'') then begin // Case 1. the user has set a target directory - TargetDirectory:=Profile.GetParsedTargetDirectory(Macros); + TargetDirectory:=fProfile.GetParsedTargetDirectory(fMacros); if TargetDirectory='' then begin - debugln('CreateBuildLazarusOptions macro aborted Options.TargetDirectory=',Profile.TargetDirectory); + debugln('CreateBuildLazarusOptions macro aborted Options.TargetDirectory=',fProfile.TargetDirectory); Result:=mrAbort; exit; end; @@ -653,8 +679,8 @@ begin // ppu files to /units/-/ UnitOutDir:=AppendPathDelim(GetPrimaryConfigPath)+'units' +PathDelim+TargetCPU+'-'+TargetOS+PathDelim+TargetLCLPlatform; - debugln('CreateBuildLazarusOptions Options.TargetOS=',Profile.FPCTargetOS,' Options.TargetCPU=', - Profile.FPCTargetCPU,' DefaultOS=',DefaultTargetOS,' DefaultCPU=',DefaultTargetCPU); + debugln('CreateBuildLazarusOptions Options.TargetOS=',fProfile.FPCTargetOS,' Options.TargetCPU=', + fProfile.FPCTargetCPU,' DefaultOS=',DefaultTargetOS,' DefaultCPU=',DefaultTargetCPU); end else begin // -> normal compile for this platform @@ -666,7 +692,7 @@ begin // Case 3. the lazarus directory is not writable // lazarus.exe to /bin/ // ppu files to /units/-/ - UpdateRevisionInc:=false; + fUpdateRevisionInc:=false; TargetDirectory:=AppendPathDelim(GetPrimaryConfigPath)+'bin'; debugln('CreateBuildLazarusOptions LazDir readonly NewTargetDirectory=',TargetDirectory); UnitOutDir:=AppendPathDelim(GetPrimaryConfigPath)+'units' @@ -689,13 +715,13 @@ begin if not FilenameIsAbsolute(TargetDirectory) then TargetDirectory:= TrimFilename(AppendPathDelim(EnvironmentOptions.GetParsedLazarusDirectory)+TargetDirectory); - if TargetFilename='' then - TargetFilename:='lazarus'+GetExecutableExt(TargetOS); - if not FilenameIsAbsolute(TargetFilename) then - TargetFilename:=TrimFilename(AppendPathDelim(TargetDirectory)+TargetFilename); + if fTargetFilename='' then + fTargetFilename:='lazarus'+GetExecutableExt(TargetOS); + if not FilenameIsAbsolute(fTargetFilename) then + fTargetFilename:=TrimFilename(AppendPathDelim(TargetDirectory)+fTargetFilename); // backup old exe - BackupExe(TargetFilename); + BackupExe(fTargetFilename); // check if target file is default NewTargetDirectoryIsDefault:= @@ -703,7 +729,7 @@ begin ChompPathDelim(TargetDirectory))=0; NewTargetFilenameIsDefault:=NewTargetDirectoryIsDefault; if NewTargetFilenameIsDefault then begin - CurTargetFilename:=CreateRelativePath(TargetFilename,TargetDirectory); + CurTargetFilename:=CreateRelativePath(fTargetFilename,TargetDirectory); NewTargetFilenameIsDefault:=CurTargetFilename=DefaultTargetFilename; end; @@ -717,14 +743,14 @@ begin if Result<>mrOk then exit; end; - OutputDirRedirected:=not NewTargetDirectoryIsDefault; + fOutputDirRedirected:=not NewTargetDirectoryIsDefault; // create apple bundle if needed //debugln(['CreateBuildLazarusOptions NewTargetDirectory=',TargetDirectory]); - if (Profile.TargetPlatform in [lpCarbon,lpCocoa]) + if (fProfile.TargetPlatform in [lpCarbon,lpCocoa]) and (not NewTargetDirectoryIsDefault) and (DirectoryIsWritableCached(TargetDirectory)) then begin - CurTargetFilename:=TargetFilename; + CurTargetFilename:=fTargetFilename; BundleDir:=ChangeFileExt(CurTargetFilename,'.app'); //debugln(['CreateBuildLazarusOptions checking bundle ',BundleDir]); if not FileExistsCached(BundleDir) then begin @@ -768,19 +794,17 @@ begin // Note: FPC automatically changes the last extension (append or replace) // For example under linux, where executables don't need any extension // fpc removes the last extension of the -o option. - AppendExtraOption('-o'+TargetFilename); + AppendExtraOption('-o'+fTargetFilename); end; - // add package Profile for IDE + // add package fProfile for IDE //DebugLn(['CreateBuildLazarusOptions blfUseMakeIDECfg=',blfUseMakeIDECfg in FLags,' ExtraOptions="',ExtraOptions,'" ',PackageOptions]); if not (blfUseMakeIDECfg in Flags) then - AppendExtraOption(PackageOptions,false); + AppendExtraOption(fPkgOptions,false); //DebugLn(['CreateBuildLazarusOptions ',MMDef.Name,' ',ExtraOptions]); end; -function SaveIDEMakeOptions(Profile: TBuildLazarusProfile; - Macros: TTransferMacroList; - const PackageOptions: string; Flags: TBuildLazarusFlags): TModalResult; +function TLazarusBuilder.SaveIDEMakeOptions(Flags: TBuildLazarusFlags): TModalResult; function BreakOptions(const OptionString: string): string; var @@ -831,25 +855,19 @@ function SaveIDEMakeOptions(Profile: TBuildLazarusProfile; end; var - ExOptions: String; - Filename: String; + Filename, OptionsAsText: String; fs: TFileStreamUTF8; - OptionsAsText: String; - UpdateRevisionInc: boolean; - OutputDirRedirected: boolean; - LazExeFilename: string; begin - ExOptions:=''; - Result:=CreateIDEMakeOptions(Profile, Macros, PackageOptions, - Flags, ExOptions, UpdateRevisionInc, OutputDirRedirected, LazExeFilename); + fExtraOptions:=''; + Result:=CreateIDEMakeOptions(Flags); // fExtraOptions,UpdateRevisionInc,OutputDirRedirected,LazExeFilename if Result<>mrOk then exit; Filename:=GetMakeIDEConfigFilename; try InvalidateFileStateCache; fs:=TFileStreamUTF8.Create(Filename,fmCreate); try - if ExOptions<>'' then begin - OptionsAsText:=BreakOptions(ExOptions); + if fExtraOptions<>'' then begin + OptionsAsText:=BreakOptions(fExtraOptions); fs.Write(OptionsAsText[1],length(OptionsAsText)); end; finally @@ -867,19 +885,6 @@ begin Result:=mrOk; end; -function GetMakeIDEConfigFilename: string; -begin - Result:=AppendPathDelim(GetPrimaryConfigPath)+DefaultIDEMakeOptionFilename; -end; - -function GetBackupExeFilename(Filename: string): string; -var - Ext: String; -begin - Ext:=ExtractFileExt(Filename); - Result:=LeftStr(Filename,length(Filename)-length(Ext))+'.old'+Ext; -end; - { TConfigureBuildLazarusDlg } constructor TConfigureBuildLazarusDlg.Create(TheOwner: TComponent); diff --git a/ide/main.pp b/ide/main.pp index 90ced26f51..1fd3420d7a 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -391,6 +391,7 @@ type procedure mnuChgBuildModeClicked(Sender: TObject); procedure mnuSetBuildModeClick(Sender: TObject); // event for drop down items private + fBuilder: TLazarusBuilder; function DoBuildLazarusSub(Flags: TBuildLazarusFlags): TModalResult; {$IFNDEF EnableNewExtTools} function ExternalTools: TExternalToolList; @@ -4650,19 +4651,20 @@ end; procedure TMainIDE.mnuToolConfigBuildLazClicked(Sender: TObject); var - CmdLineDefines: TDefineTemplate; - LazSrcTemplate: TDefineTemplate; - LazSrcDirTemplate: TDefineTemplate; + CmdLineDefines, LazSrcTemplate, LazSrcDirTemplate: TDefineTemplate; DlgResult: TModalResult; begin MainBuildBoss.SetBuildTargetIDE; + fBuilder := TLazarusBuilder.Create(Nil); // Build profile is not known yet. try - DlgResult:=ShowConfigureBuildLazarusDlg(MiscellaneousOptions.BuildLazProfiles); + try + DlgResult:=fBuilder.ShowConfigureBuildLazarusDlg(MiscellaneousOptions.BuildLazProfiles); finally MainBuildBoss.SetBuildTargetProject1(true); end; if DlgResult in [mrOk,mrYes,mrAll] then begin + fBuilder.Profile := MiscellaneousOptions.BuildLazProfiles.Current; // Update selected profile. MiscellaneousOptions.Save; IncreaseCompilerParseStamp; if DlgResult=mrAll then @@ -4684,6 +4686,9 @@ begin DoBuildLazarus([]); end; end; + finally + FreeAndNil(fBuilder); + end; end; procedure TMainIDE.mnuCustomExtToolClick(Sender: TObject); @@ -7561,30 +7566,28 @@ end; function TMainIDE.DoSaveBuildIDEConfigs(Flags: TBuildLazarusFlags): TModalResult; var - PkgOptions: string; InheritedOptionStrings: TInheritedCompOptsStrings; FPCVersion, FPCRelease, FPCPatch: integer; + Builder: TLazarusBuilder; begin // create uses section addition for lazarus.pp Result:=PkgBoss.DoSaveAutoInstallConfig; if Result<>mrOk then exit; - // prepare static auto install packages - PkgOptions:=''; - // create inherited compiler options - PkgOptions:=PackageGraph.GetIDEInstallPackageOptions( - PackageGraph.FirstAutoInstallDependency,InheritedOptionStrings); - // check ambiguous units - CodeToolBoss.GetFPCVersionForDirectory( - EnvironmentOptions.GetParsedLazarusDirectory, - FPCVersion,FPCRelease,FPCPatch); + CodeToolBoss.GetFPCVersionForDirectory(EnvironmentOptions.GetParsedLazarusDirectory, + FPCVersion,FPCRelease,FPCPatch); if (FPCVersion=0) or (FPCRelease=0) or (FPCPatch=0) then ; // save extra options - Result:=SaveIDEMakeOptions(MiscellaneousOptions.BuildLazProfiles.Current, - GlobalMacroList,PkgOptions,Flags+[blfOnlyIDE]); - if Result<>mrOk then exit; + Builder:=TLazarusBuilder.Create(MiscellaneousOptions.BuildLazProfiles.Current); + try + // create inherited compiler options + Builder.PkgOptions:=PackageGraph.GetIDEInstallPackageOptions(PackageGraph.FirstAutoInstallDependency,InheritedOptionStrings); + Result:=Builder.SaveIDEMakeOptions(Flags+[blfOnlyIDE]); + finally + Builder.Free; + end; end; function TMainIDE.DoExampleManager: TModalResult; @@ -7594,13 +7597,12 @@ end; function TMainIDE.DoBuildLazarusSub(Flags: TBuildLazarusFlags): TModalResult; var - PkgOptions: string; IDEBuildFlags: TBuildLazarusFlags; InheritedOptionStrings: TInheritedCompOptsStrings; CompiledUnitExt: String; FPCVersion, FPCRelease, FPCPatch: integer; PkgCompileFlags: TPkgCompileFlags; - ProfileChanged: Boolean; + BuilderCreated: Boolean; begin if ToolStatus<>itNone then begin IDEMessageDialog(lisNotNow, @@ -7616,10 +7618,13 @@ begin exit; end; + BuilderCreated := fBuilder = Nil; + if BuilderCreated then + fBuilder:=TLazarusBuilder.Create(MiscellaneousOptions.BuildLazProfiles.Current); {$IFNDEF EnableNewExtTools} MessagesView.BeginBlock; + fBuilder.ExtTools:=ExternalTools; {$ENDIF} - ProfileChanged:=false; with MiscellaneousOptions do try MainBuildBoss.SetBuildTargetIDE; @@ -7631,12 +7636,8 @@ begin PkgCompileFlags:=PkgCompileFlags+[pcfCompileDependenciesClean]; if BuildLazProfiles.Current.IdeBuildMode=bmCleanAllBuild then begin SourceEditorManager.ClearErrorLines; - Result:=MakeLazarus(BuildLazProfiles.Current, - {$IFNDEF EnableNewExtTools}ExternalTools,{$ENDIF} - GlobalMacroList, - '',EnvironmentOptions.GetParsedCompilerFilename, - EnvironmentOptions.GetParsedMakeFilename, [blfDontBuild], - ProfileChanged); + fBuilder.PkgOptions:=''; + Result:=fBuilder.MakeLazarus([blfDontBuild]); if Result<>mrOk then begin DebugLn('TMainIDE.DoBuildLazarus: Clean all failed.'); exit; @@ -7659,8 +7660,7 @@ begin end; // create inherited compiler options - PkgOptions:=PackageGraph.GetIDEInstallPackageOptions( - PackageGraph.FirstAutoInstallDependency,InheritedOptionStrings); + fBuilder.PkgOptions:=PackageGraph.GetIDEInstallPackageOptions(PackageGraph.FirstAutoInstallDependency,InheritedOptionStrings); // check ambiguous units CodeToolBoss.GetFPCVersionForDirectory(EnvironmentOptions.GetParsedLazarusDirectory, @@ -7678,8 +7678,7 @@ begin // save extra options IDEBuildFlags:=Flags; - Result:=SaveIDEMakeOptions(BuildLazProfiles.Current,GlobalMacroList,PkgOptions, - IDEBuildFlags-[blfUseMakeIDECfg,blfDontClean]+[blfBackupOldExe]); + Result:=fBuilder.SaveIDEMakeOptions(IDEBuildFlags-[blfUseMakeIDECfg,blfDontClean]+[blfBackupOldExe]); if Result<>mrOk then begin DebugLn('TMainIDE.DoBuildLazarus: Save IDEMake options failed.'); exit; @@ -7688,24 +7687,19 @@ begin // make lazarus ide SourceEditorManager.ClearErrorLines; IDEBuildFlags:=IDEBuildFlags+[blfUseMakeIDECfg,blfDontClean]; - Result:=MakeLazarus(BuildLazProfiles.Current, - {$IFNDEF EnableNewExtTools}ExternalTools,{$ENDIF} - GlobalMacroList, - PkgOptions,EnvironmentOptions.GetParsedCompilerFilename, - EnvironmentOptions.GetParsedMakeFilename,IDEBuildFlags, - ProfileChanged); + Result:=fBuilder.MakeLazarus(IDEBuildFlags); if Result<>mrOk then exit; - if ProfileChanged then + if fBuilder.ProfileChanged then MiscellaneousOptions.Save; finally + if BuilderCreated then + FreeAndNil(fBuilder); MainBuildBoss.SetBuildTargetProject1(true); - DoCheckFilesOnDisk; {$IFNDEF EnableNewExtTools} MessagesView.EndBlock; {$ENDIF} - if Result in [mrOK, mrIgnore] then CompileProgress.Ready(lisinfoBuildSuccess) else