IDE: build all: compile all packages with -B, lazbuild: -B and -r: apply -B to all packages

git-svn-id: trunk@33175 -
This commit is contained in:
mattias 2011-10-30 13:37:25 +00:00
parent ce82b57b84
commit 5c8ad97065
5 changed files with 54 additions and 25 deletions

View File

@ -478,6 +478,7 @@ var
Dependency: TPkgDependency;
OldDependency: TPkgDependency;
CurResult: TModalResult;
CompilePolicy: TPackageUpdatePolicy;
begin
Result:=false;
PackageGraph.BeginUpdate(false);
@ -498,8 +499,11 @@ begin
PackageGraph.FirstAutoInstallDependency);
// compile all auto install dependencies
CompilePolicy:=pupAsNeeded;
if BuildRecursive and BuildAll then
CompilePolicy:=pupOnRebuildingAll;
CurResult:=PackageGraph.CompileRequiredPackages(nil,
PackageGraph.FirstAutoInstallDependency,false,[pupAsNeeded]);
PackageGraph.FirstAutoInstallDependency,false,CompilePolicy);
if CurResult<>mrOk then exit;
finally
@ -591,6 +595,7 @@ var
TargetExeName: String;
TargetExeDir: String;
NewBuildMode: TProjectBuildMode;
CompilePolicy: TPackageUpdatePolicy;
begin
Result:=false;
CloseProject(Project1);
@ -626,10 +631,13 @@ begin
PackageGraph.BeginUpdate(false);
try
// automatically compile required packages
CompilePolicy:=pupAsNeeded;
if BuildRecursive and BuildAll then
CompilePolicy:=pupOnRebuildingAll;
if PackageGraph.CompileRequiredPackages(nil,
Project1.FirstRequiredDependency,
not (pfUseDesignTimePackages in Project1.Flags),
[pupAsNeeded])<>mrOk
CompilePolicy)<>mrOk
then
Error(ErrorBuildFailed,'Project dependencies of '+AFilename);
finally

View File

@ -12164,6 +12164,7 @@ var
InheritedOptionStrings: TInheritedCompOptsStrings;
CompiledUnitExt: String;
FPCVersion, FPCRelease, FPCPatch: integer;
PkgCompileFlags: TPkgCompileFlags;
begin
if ToolStatus<>itNone then begin
MessageDlg(lisNotNow,
@ -12185,8 +12186,10 @@ begin
MainBuildBoss.SetBuildTargetIDE;
// clean up
PkgCompileFlags:=[];
if (not (blfDontCleanAll in Flags))
and (BuildLazProfiles.Current.IdeBuildMode=bmCleanAllBuild) then begin
PkgCompileFlags:=PkgCompileFlags+[pcfCompileDependenciesClean];
SourceEditorManager.ClearErrorLines;
Result:=BuildLazarus(BuildLazProfiles,ExternalTools,GlobalMacroList,
'',EnvironmentOptions.GetCompilerFilename,
@ -12198,7 +12201,7 @@ begin
end;
// compile auto install static packages
Result:=PkgBoss.DoCompileAutoInstallPackages([],false);
Result:=PkgBoss.DoCompileAutoInstallPackages(PkgCompileFlags,false);
if Result<>mrOk then begin
DebugLn('TMainIDE.DoBuildLazarus: Compile AutoInstall Packages failed.');
exit;

View File

@ -44,8 +44,8 @@ unit PackageDefs;
interface
uses
Classes, SysUtils, contnrs, LCLProc, LCLType, LResources, Graphics, Forms,
FileProcs, FileUtil, AVL_Tree, LazConfigStorage,
Classes, SysUtils, contnrs, typinfo, LCLProc, LCLType, LResources, Graphics,
Forms, FileProcs, FileUtil, AVL_Tree, LazConfigStorage,
CodeToolsCfgScript, DefineTemplates, CodeToolManager, Laz_XMLCfg, CodeCache,
PropEdits, LazIDEIntf, MacroIntf, PackageIntf, IDEOptionsIntf,
EditDefineTree, CompilerOptions, CompOptsModes, IDEOptionDefs,
@ -863,9 +863,6 @@ const
'lpfAutoIncrementVersionOnBuild', 'lpfModified',
'lpfNeeded', 'lpfVisited', 'lpfDestroying', 'lpfLoading', 'lpfSkipSaving',
'lpfCircle');
PackageUpdatePolicies: array[TPackageUpdatePolicy] of string = (
'pupManually', 'pupOnRebuildingAll', 'pupAsNeeded'
);
AutoUpdateNames: array[TPackageUpdatePolicy] of string = (
'Manually', 'OnRebuildingAll', 'AsNeeded'
);
@ -945,6 +942,8 @@ procedure PkgVersionLoadFromXMLConfig(Version: TPkgVersion;
var
Package1: TLazPackage; // don't use it - only for options dialog
function dbgs(p: TPackageUpdatePolicy): string; overload;
implementation
@ -1412,6 +1411,11 @@ begin
PkgVersionLoadFromXMLConfig(Version,XMLConfig,Path+'Version/',FileVersion);
end;
function dbgs(p: TPackageUpdatePolicy): string;
begin
Result:=GetEnumName(TypeInfo(p),ord(p));
end;
function IndexOfDependencyInList(First: TPkgDependency;
ListType: TPkgDependencyList; FindDependency: TPkgDependency): integer;
var

View File

@ -257,7 +257,7 @@ type
function GetAutoCompilationOrder(APackage: TLazPackage;
FirstDependency: TPkgDependency;
SkipDesignTimePackages: boolean;
Policies: TPackageUpdatePolicies): TFPList;
Policy: TPackageUpdatePolicy): TFPList;
function GetBrokenDependenciesWhenChangingPkgID(APackage: TLazPackage;
const NewName: string; NewVersion: TPkgVersion): TFPList;
procedure GetPackagesChangedOnDisk(var ListOfPackages: TFPList);
@ -312,7 +312,7 @@ type
function CompileRequiredPackages(APackage: TLazPackage;
FirstDependency: TPkgDependency;
SkipDesignTimePackages: boolean;
Policies: TPackageUpdatePolicies): TModalResult;
Policy: TPackageUpdatePolicy): TModalResult;
function CompilePackage(APackage: TLazPackage; Flags: TPkgCompileFlags;
ShowAbort: boolean): TModalResult;
function ConvertPackageRSTFiles(APackage: TLazPackage): TModalResult;
@ -2949,10 +2949,10 @@ end;
function TLazPackageGraph.GetAutoCompilationOrder(APackage: TLazPackage;
FirstDependency: TPkgDependency; SkipDesignTimePackages: boolean;
Policies: TPackageUpdatePolicies): TFPList;
Policy: TPackageUpdatePolicy): TFPList;
// Returns all required auto update packages, including indirect requirements.
// The packages will be in topological order, with the package that should be
// compiled first at the end.
// compiled first at 0.
procedure GetTopologicalOrder(Dependency: TPkgDependency);
var
@ -2963,7 +2963,7 @@ function TLazPackageGraph.GetAutoCompilationOrder(APackage: TLazPackage;
RequiredPackage:=Dependency.RequiredPackage;
if not (lpfVisited in RequiredPackage.Flags) then begin
RequiredPackage.Flags:=RequiredPackage.Flags+[lpfVisited];
if RequiredPackage.AutoUpdate in Policies then begin
if ord(RequiredPackage.AutoUpdate)>=ord(Policy) then begin
// add first all needed packages
GetTopologicalOrder(RequiredPackage.FirstRequiredDependency);
// then add this package
@ -3632,24 +3632,28 @@ end;
function TLazPackageGraph.CompileRequiredPackages(APackage: TLazPackage;
FirstDependency: TPkgDependency; SkipDesignTimePackages: boolean;
Policies: TPackageUpdatePolicies): TModalResult;
Policy: TPackageUpdatePolicy): TModalResult;
var
AutoPackages: TFPList;
i: Integer;
Flags: TPkgCompileFlags;
begin
{$IFDEF VerbosePkgCompile}
debugln('TLazPackageGraph.CompileRequiredPackages A ');
debugln('TLazPackageGraph.CompileRequiredPackages A ',dbgs(Policy));
{$ENDIF}
AutoPackages:=PackageGraph.GetAutoCompilationOrder(APackage,
FirstDependency,SkipDesignTimePackages,Policies);
FirstDependency,SkipDesignTimePackages,Policy);
if AutoPackages<>nil then begin
//DebugLn('TLazPackageGraph.CompileRequiredPackages B Count=',IntToStr(AutoPackages.Count));
try
Flags:=[pcfDoNotCompileDependencies,pcfDoNotSaveEditorFiles];
if Policy=pupAsNeeded then
Flags:=Flags+[pcfOnlyIfNeeded]
else
Flags:=Flags+[pcfCleanCompile];
i:=0;
while i<AutoPackages.Count do begin
Result:=CompilePackage(TLazPackage(AutoPackages[i]),
[pcfDoNotCompileDependencies,pcfOnlyIfNeeded,
pcfDoNotSaveEditorFiles],false);
Result:=CompilePackage(TLazPackage(AutoPackages[i]),Flags,false);
if Result<>mrOk then exit;
inc(i);
end;
@ -3684,7 +3688,7 @@ var
CompilerParams: String;
SrcFilename: String;
EffectiveCompilerParams: String;
CompilePolicies: TPackageUpdatePolicies;
CompilePolicy: TPackageUpdatePolicy;
BlockBegan: Boolean;
NeedBuildAllFlag: Boolean;
CompileResult, MsgResult: TModalResult;
@ -3704,11 +3708,12 @@ begin
try
// automatically compile required packages
if not (pcfDoNotCompileDependencies in Flags) then begin
CompilePolicies:=[pupAsNeeded];
if pcfCompileDependenciesClean in Flags then
Include(CompilePolicies,pupOnRebuildingAll);
CompilePolicy:=pupOnRebuildingAll
else
CompilePolicy:=pupAsNeeded;
Result:=CompileRequiredPackages(APackage,nil,
pcfSkipDesignTimePackages in Flags,CompilePolicies);
pcfSkipDesignTimePackages in Flags,CompilePolicy);
if Result<>mrOk then begin
DebugLn(['TLazPackageGraph.CompilePackage CompileRequiredPackages failed: ',APackage.IDAsString]);
exit;

View File

@ -2517,6 +2517,8 @@ end;
function TPkgManager.DoCompileProjectDependencies(AProject: TProject;
Flags: TPkgCompileFlags): TModalResult;
var
CompilePolicy: TPackageUpdatePolicy;
begin
// check graph for circles and broken dependencies
if not (pcfDoNotCompileDependencies in Flags) then begin
@ -2536,10 +2538,13 @@ begin
try
// automatically compile required packages
if not (pcfDoNotCompileDependencies in Flags) then begin
CompilePolicy:=pupAsNeeded;
if pcfCompileDependenciesClean in Flags then
CompilePolicy:=pupOnRebuildingAll;
Result:=PackageGraph.CompileRequiredPackages(nil,
AProject.FirstRequiredDependency,
not (pfUseDesignTimePackages in AProject.Flags),
[pupAsNeeded]);
CompilePolicy);
if Result<>mrOk then exit;
end;
finally
@ -3963,6 +3968,7 @@ var
OldDependency: TPkgDependency;
Dependencies: TPkgDependency;
AutoRemove: Boolean;
CompilePolicy: TPackageUpdatePolicy;
begin
PackageGraph.BeginUpdate(false);
Dependencies:=PackageGraph.FirstAutoInstallDependency;
@ -4025,8 +4031,11 @@ begin
end;
// compile all auto install dependencies
CompilePolicy:=pupAsNeeded;
if pcfCompileDependenciesClean in Flags then
CompilePolicy:=pupOnRebuildingAll;
Result:=PackageGraph.CompileRequiredPackages(nil,Dependencies,false,
[pupAsNeeded]);
CompilePolicy);
if Result<>mrOk then exit;
finally