IDE: InstallPackages: add all src base packages

This commit is contained in:
mattias 2023-05-21 20:48:26 +02:00
parent e9cf352190
commit f18e10ec0e
6 changed files with 65 additions and 53 deletions

View File

@ -1404,7 +1404,7 @@ begin
LazDir:=EnvironmentOptions.GetParsedLazarusDirectory;
try
PackageGraph.GetAllRequiredPackages(nil,
PackageGraph.FirstAutoInstallDependency,PkgList,[pirSkipDesignTimeOnly]);
PackageGraph.FirstInstallDependency,PkgList,[pirSkipDesignTimeOnly]);
// add detail nodes
if PkgList<>nil then

View File

@ -372,7 +372,7 @@ var
begin
ReqFlags:=[];
if Target=IDEAsTarget then begin
Result:=GetList(LazarusIDE,PackageGraph.FirstAutoInstallDependency,ReqFlags);
Result:=GetList(LazarusIDE,PackageGraph.FirstInstallDependency,ReqFlags);
end else if Target=ProjectAsTarget(Project1) then begin
if not (pfUseDesignTimePackages in Project1.Flags) then
Include(ReqFlags,pirSkipDesignTimeOnly);

View File

@ -663,7 +663,7 @@ begin
Result:=false;
PackageGraph.BeginUpdate(false);
try
Dependency:=PackageGraph.FirstAutoInstallDependency;
Dependency:=PackageGraph.FirstInstallDependency;
while Dependency<>nil do begin
OldDependency:=Dependency;
Dependency:=Dependency.NextRequiresDependency;
@ -676,14 +676,14 @@ begin
// check consistency
CheckPackageGraphForCompilation(nil,
PackageGraph.FirstAutoInstallDependency);
PackageGraph.FirstInstallDependency);
// compile all auto install dependencies
CompilePolicy:=pupAsNeeded;
if (BuildRecursive and BuildAll) or Clean then
CompilePolicy:=pupOnRebuildingAll;
CurResult:=PackageGraph.CompileRequiredPackages(nil,
PackageGraph.FirstAutoInstallDependency,false,CompilePolicy);
PackageGraph.FirstInstallDependency,false,CompilePolicy);
if CurResult<>mrOk then exit;
finally

View File

@ -429,7 +429,7 @@ type
function WriteFpmake(APackage: TLazPackage): TModalResult;
public
// installed packages
FirstAutoInstallDependency: TPkgDependency;
FirstInstallDependency: TPkgDependency;
function ParseBasePackages(Verbose: boolean): boolean; // read list from current sources
function SrcBasePackagesNeedLazbuild: string; // check if compiled-in and source base pkg list differ that a built using make is needed
procedure LoadStaticBasePackages;
@ -2255,14 +2255,14 @@ procedure TLazPackageGraph.LoadStaticBasePackages;
Dependency: TPkgDependency;
Quiet: Boolean;
begin
if FindDependencyByNameInList(FirstAutoInstallDependency,pddRequires,PkgName)<>nil
if FindDependencyByNameInList(FirstInstallDependency,pddRequires,PkgName)<>nil
then
exit;
Dependency:=TPkgDependency.Create;
Dependency.Owner:=Self;
Dependency.PackageName:=PkgName;
Dependency.DependencyType:=pdtLazarus;
Dependency.AddToList(FirstAutoInstallDependency,pddRequires);
Dependency.AddToList(FirstInstallDependency,pddRequires);
Quiet:=false;
OpenInstalledDependency(Dependency,pitStatic,Quiet);
end;
@ -2285,7 +2285,7 @@ begin
for i:=0 to PkgList.Count-1 do begin
PackageName:=PkgList[i];
if not IsValidPkgName(PackageName) then continue;
Dependency:=FindDependencyByNameInList(FirstAutoInstallDependency,
Dependency:=FindDependencyByNameInList(FirstInstallDependency,
pddRequires,PackageName);
//DebugLn('TLazPackageGraph.LoadAutoInstallPackages ',dbgs(Dependency),' ',PackageName);
if Dependency<>nil then continue;
@ -2293,7 +2293,7 @@ begin
Dependency.Owner:=Self;
Dependency.DependencyType:=pdtLazarus;
Dependency.PackageName:=PackageName;
Dependency.AddToList(FirstAutoInstallDependency,pddRequires);
Dependency.AddToList(FirstInstallDependency,pddRequires);
if OpenDependency(Dependency,false)<>lprSuccess then begin
IDEMessageDialog(lisPkgMangUnableToLoadPackage,
Format(lisPkgMangUnableToOpenThePackage, [PackageName, LineEnding]),
@ -2309,7 +2309,7 @@ end;
procedure TLazPackageGraph.SortAutoInstallDependencies;
begin
// sort install dependencies, so that lower packages come first
SortDependencyListTopologicallyOld(PackageGraph.FirstAutoInstallDependency,
SortDependencyListTopologicallyOld(PackageGraph.FirstInstallDependency,
false);
end;
@ -2333,7 +2333,7 @@ begin
Result:='';
// get all required packages
PkgList:=nil;
GetAllRequiredPackages(nil,FirstAutoInstallDependency,PkgList,[pirCompileOrder]);
GetAllRequiredPackages(nil,FirstInstallDependency,PkgList,[pirCompileOrder]);
if PkgList=nil then exit;
// get all usage options
AddOptionsList:=GetUsageOptionsList(PkgList);
@ -2369,7 +2369,7 @@ begin
// create auto install package list for the Lazarus uses section
PkgList:=nil;
try
GetAllRequiredPackages(nil,FirstAutoInstallDependency,PkgList,[pirCompileOrder]);
GetAllRequiredPackages(nil,FirstInstallDependency,PkgList,[pirCompileOrder]);
StaticPackagesInc:='// In case of duplicate identifier errors, see lazarus.pp'+LineEnding;
if PkgList<>nil then begin
for i:=0 to PkgList.Count-1 do begin
@ -2413,11 +2413,11 @@ procedure TLazPackageGraph.FreeAutoInstallDependencies;
var
Dependency: TPkgDependency;
begin
while Assigned(FirstAutoInstallDependency) do
while Assigned(FirstInstallDependency) do
begin
Dependency:=FirstAutoInstallDependency;
Dependency:=FirstInstallDependency;
Dependency.RequiredPackage:=nil;
Dependency.RemoveFromList(FirstAutoInstallDependency,pddRequires);
Dependency.RemoveFromList(FirstInstallDependency,pddRequires);
Dependency.Free;
end;
end;
@ -5194,7 +5194,7 @@ begin
if IsCompiledInBasePackage(PkgName) then
continue;
// new base package
if FindDependencyByNameInList(FirstAutoInstallDependency,pddRequires,PkgName)<>nil
if FindDependencyByNameInList(FirstInstallDependency,pddRequires,PkgName)<>nil
then
exit; // it will be installed anyway -> ok
// the sources need a base package, that this IDE will not install

View File

@ -320,7 +320,7 @@ begin
InstallPkgList:=nil;
try
PackageGraph.GetAllRequiredPackages(nil,
PackageGraph.FirstAutoInstallDependency,InstallPkgList,[]);
PackageGraph.FirstInstallDependency,InstallPkgList,[]);
i:=0;
Dependency:=Pkg.FirstRequiredDependency;
while Dependency<>nil do begin
@ -536,7 +536,7 @@ begin
for i:=0 to Cnt-1 do
fSortedPackages.Add(PackageGraph[i]);
PackageGraph.GetAllRequiredPackages(nil,
PackageGraph.FirstAutoInstallDependency,InstallPkgList,[]);
PackageGraph.FirstInstallDependency,InstallPkgList,[]);
// rebuild the TreeView
PkgTreeView.BeginUpdate;
// save old expanded state
@ -608,7 +608,7 @@ begin
for i:=0 to Cnt-1 do
fSortedPackages.Add(PackageGraph[i]);
PackageGraph.GetAllRequiredPackages(nil,
PackageGraph.FirstAutoInstallDependency,InstallPkgList,[]);
PackageGraph.FirstInstallDependency,InstallPkgList,[]);
// save old selection
OldSelected:='';
@ -643,7 +643,7 @@ begin
AddEdges(ProjectNode,Project1.FirstRequiredDependency);
// add IDE dependencies
AddEdges(IDENode,PackageGraph.FirstAutoInstallDependency);
AddEdges(IDENode,PackageGraph.FirstInstallDependency);
// add package dependencies
AVLNode:=fSortedPackages.FindLowest;

View File

@ -461,7 +461,7 @@ begin
RebuildIDE:=false;
PkgIDList:=nil;
try
if ShowEditInstallPkgsDialog(PackageGraph.FirstAutoInstallDependency,
if ShowEditInstallPkgsDialog(PackageGraph.FirstInstallDependency,
@CheckInstallPackageListHandler,PkgIDList,RebuildIDE)<>mrOk
then exit;
@ -1514,7 +1514,7 @@ var
sl: TStringListUTF8Fast;
begin
sl:=TStringListUTF8Fast.Create;
Dependency:=PackageGraph.FirstAutoInstallDependency;
Dependency:=PackageGraph.FirstInstallDependency;
while Dependency<>nil do begin
if (Dependency.LoadPackageResult=lprSuccess)
and (not Dependency.RequiredPackage.Missing)
@ -1584,10 +1584,10 @@ begin
Result:=NewDependency.RequiredPackage;
if AddToAutoInstall and (Result<>nil) then begin
if FindDependencyByNameInList(
PackageGraph.FirstAutoInstallDependency,pddRequires,PackageName)=nil
PackageGraph.FirstInstallDependency,pddRequires,PackageName)=nil
then begin
NewDependency.RequiredPackage.AutoInstall:=pitStatic;
NewDependency.AddToList(PackageGraph.FirstAutoInstallDependency,pddRequires)
NewDependency.AddToList(PackageGraph.FirstInstallDependency,pddRequires)
end else
NewDependency.Free;
PackageList:=MiscellaneousOptions.BuildLazProfiles.StaticAutoInstallPackages;
@ -3057,10 +3057,10 @@ var
Dependency: TPkgDependency;
begin
// unbind and free auto installed packages
while PackageGraph.FirstAutoInstallDependency<>nil do begin
Dependency:=PackageGraph.FirstAutoInstallDependency;
while PackageGraph.FirstInstallDependency<>nil do begin
Dependency:=PackageGraph.FirstInstallDependency;
Dependency.RequiredPackage:=nil;
Dependency.RemoveFromList(PackageGraph.FirstAutoInstallDependency,pddRequires);
Dependency.RemoveFromList(PackageGraph.FirstInstallDependency,pddRequires);
Dependency.Free;
end;
end;
@ -3097,7 +3097,7 @@ var
begin
PkgList:=nil;
PackageGraph.GetAllRequiredPackages(nil,
PackageGraph.FirstAutoInstallDependency,PkgList);
PackageGraph.FirstInstallDependency,PkgList);
if PkgList=nil then exit;
for i:=0 to PkgList.Count-1 do
if TObject(PkgList[i]) is TLazPackage then
@ -5035,7 +5035,7 @@ begin
else if AnOwner is TLazPackage then
Dependency:=TLazPackage(AnOwner).FirstRequiredDependency
else if AnOwner=PkgBoss then
Dependency:=PackageGraph.FirstAutoInstallDependency;
Dependency:=PackageGraph.FirstInstallDependency;
if Dependency=nil then exit;
PackageGraph.GetAllRequiredPackages(nil,Dependency,PkgList,Flags);
end;
@ -5592,7 +5592,7 @@ begin
if RequiredPackage.AutoInstall=pitNope then begin
RequiredPackage.AutoInstall:=pitStatic;
Dependency:=RequiredPackage.CreateDependencyWithOwner(Self);
Dependency.AddToList(PackageGraph.FirstAutoInstallDependency,pddRequires);
Dependency.AddToList(PackageGraph.FirstInstallDependency,pddRequires);
PackageGraph.OpenDependency(Dependency,false);
NeedSaving:=true;
end;
@ -5684,10 +5684,10 @@ begin
// remove package from auto installed packages
if APackage.AutoInstall<>pitNope then begin
APackage.AutoInstall:=pitNope;
Dependency:=FindCompatibleDependencyInList(PackageGraph.FirstAutoInstallDependency,
Dependency:=FindCompatibleDependencyInList(PackageGraph.FirstInstallDependency,
pddRequires,APackage);
if Dependency<>nil then begin
Dependency.RemoveFromList(PackageGraph.FirstAutoInstallDependency,pddRequires);
Dependency.RemoveFromList(PackageGraph.FirstInstallDependency,pddRequires);
Dependency.Free;
PackageGraph.SortAutoInstallDependencies;
end;
@ -5880,6 +5880,21 @@ function TPkgManager.InstallPackages(PkgIdList: TObjectList;
end;
end;
procedure AddPkg(Pkg: TLazPackage);
var
i: Integer;
PkgID: TLazPackageID;
begin
if Pkg=nil then exit;
i:=PkgIdList.Count-1;
while (i>=0) and (TLazPackageID(PkgIdList[i]).Compare(Pkg)<>0) do
dec(i);
if i>=0 then exit;
PkgID:=TLazPackageID.Create;
PkgID.AssignID(Pkg);
PkgIdList.Add(PkgID);
end;
var
NewFirstAutoInstallDependency: TPkgDependency;
BuildIDEFlags: TBuildLazarusFlags;
@ -5888,7 +5903,6 @@ var
RequiredPackage: TLazPackage;
i: Integer;
CurDependency: TPkgDependency;
OldID: TLazPackageID;
begin
Result:=mrCancel;
NewFirstAutoInstallDependency:=nil;
@ -5899,23 +5913,21 @@ begin
if not (piiifClear in Flags) then
begin
// add existing install packages to list
NewFirstAutoInstallDependency:=PackageGraph.FirstAutoInstallDependency;
NewFirstAutoInstallDependency:=PackageGraph.FirstInstallDependency;
while NewFirstAutoInstallDependency<>nil do begin
if NewFirstAutoInstallDependency.RequiredPackage<>nil then begin
i:=PkgIdList.Count-1;
while (i>=0)
and (TLazPackageID(PkgIdList[i]).Compare(NewFirstAutoInstallDependency.RequiredPackage)<>0)
do dec(i);
if i<0 then begin
OldID:=TLazPackageID.Create;
OldID.AssignID(NewFirstAutoInstallDependency.RequiredPackage);
PkgIdList.Add(OldID);
end;
end;
AddPkg(NewFirstAutoInstallDependency.RequiredPackage);
NewFirstAutoInstallDependency:=NewFirstAutoInstallDependency.NextRequiresDependency;
end;
end;
// add base packages
if PackageGraph.ParseBasePackages(true) then begin
for i:=0 to PackageGraph.SrcBasePackages.Count-1 do begin
RequiredPackage:=PackageGraph.FindPackageWithName(PackageGraph.SrcBasePackages[i],nil);
AddPkg(RequiredPackage);
end;
end;
if not (piiifSkipChecks in Flags) then
begin
if not CheckInstallPackageList(PkgIDList,Flags*[piiifQuiet,piiifRemoveConflicts]) then
@ -5936,7 +5948,7 @@ begin
try
Report:=TStringList.Create;
CreateChangeReport(
PackageGraph.FirstAutoInstallDependency,NewFirstAutoInstallDependency,
PackageGraph.FirstInstallDependency,NewFirstAutoInstallDependency,
Report);
if not ConfirmPackageList(Report) then exit(mrCancel);
finally
@ -5963,7 +5975,7 @@ begin
// mark packages for uninstall
//debugln('TPkgManager.MainIDEitmPkgEditInstallPkgsClick mark packages for uninstall');
CurDependency:=PackageGraph.FirstAutoInstallDependency;
CurDependency:=PackageGraph.FirstInstallDependency;
while CurDependency<>nil do begin
if (CurDependency.RequiredPackage<>nil)
and (not PackageGraph.IsCompiledInBasePackage(CurDependency.PackageName)) then
@ -5973,8 +5985,8 @@ begin
// replace install list
//debugln('TPkgManager.MainIDEitmPkgEditInstallPkgsClick replace install list');
FreeDependencyList(PackageGraph.FirstAutoInstallDependency,pddRequires);
PackageGraph.FirstAutoInstallDependency:=NewFirstAutoInstallDependency;
FreeDependencyList(PackageGraph.FirstInstallDependency,pddRequires);
PackageGraph.FirstInstallDependency:=NewFirstAutoInstallDependency;
NewFirstAutoInstallDependency:=nil;
finally
PackageGraph.EndUpdate;
@ -6032,12 +6044,12 @@ var
CompilePolicy: TPackageUpdatePolicy;
begin
PackageGraph.BeginUpdate(false);
Dependencies:=PackageGraph.FirstAutoInstallDependency;
Dependencies:=PackageGraph.FirstInstallDependency;
try
if OnlyBase then
begin
// create the list of base packages
OldDependency:=PackageGraph.FirstAutoInstallDependency;
OldDependency:=PackageGraph.FirstInstallDependency;
Dependencies:=nil;
while OldDependency<>nil do begin
if (OldDependency.RequiredPackage<>nil)
@ -6073,7 +6085,7 @@ begin
exit;
end;
end;
OldDependency.RemoveFromList(PackageGraph.FirstAutoInstallDependency,pddRequires);
OldDependency.RemoveFromList(PackageGraph.FirstInstallDependency,pddRequires);
OldDependency.Free;
end;
end;