|
@@ -15,7 +15,7 @@ procedure LoadLocalAvailableRepository;
|
|
|
procedure LoadUnitConfigFromFile(APackage:TFPPackage;const AFileName: String);
|
|
|
function LoadManifestFromFile(const AManifestFN:string):TFPPackage;
|
|
|
procedure FindInstalledPackages(ACompilerOptions:TCompilerOptions;showdups:boolean=true);
|
|
|
-function PackageIsBroken(APackage:TFPPackage):boolean;
|
|
|
+function PackageIsBroken(APackage:TFPPackage; MarkForReInstall: boolean):boolean;
|
|
|
function FindBrokenPackages(SL:TStrings):Boolean;
|
|
|
procedure CheckFPMakeDependencies;
|
|
|
function PackageInstalledVersionStr(const AName:String;const ShowUsed: boolean = false;const Local: boolean = false):string;
|
|
@@ -216,6 +216,8 @@ begin
|
|
|
V:=L.Values['version'];
|
|
|
APackage.Version.AsString:=V;
|
|
|
APackage.IsFPMakeAddIn:=Upcase(L.Values['FPMakeAddIn'])='Y';
|
|
|
+ APackage.SourcePath:=L.Values['SourcePath'];
|
|
|
+ APackage.FPMakeOptionsString:=L.Values['FPMakeOptions'];
|
|
|
V:=L.Values['checksum'];
|
|
|
if V<>'' then
|
|
|
APackage.Checksum:=StrToInt(V)
|
|
@@ -347,11 +349,12 @@ begin
|
|
|
end;
|
|
|
|
|
|
|
|
|
-function PackageIsBroken(APackage:TFPPackage):boolean;
|
|
|
+function PackageIsBroken(APackage:TFPPackage; MarkForReInstall: boolean):boolean;
|
|
|
var
|
|
|
j : integer;
|
|
|
D : TFPDependency;
|
|
|
DepPackage : TFPPackage;
|
|
|
+ AvailP: TFPPackage;
|
|
|
begin
|
|
|
result:=false;
|
|
|
for j:=0 to APackage.Dependencies.Count-1 do
|
|
@@ -368,6 +371,29 @@ begin
|
|
|
begin
|
|
|
Log(vlInfo,SLogPackageChecksumChanged,[APackage.Name,D.PackageName]);
|
|
|
result:=true;
|
|
|
+ if MarkForReInstall then
|
|
|
+ begin
|
|
|
+ // When the package is re-installed, use the same fpmake-options and sourcepath
|
|
|
+ // as used during the initial installation. (The AvailableRepository is used to install
|
|
|
+ // the package so make sure all properties are set there)
|
|
|
+ AvailP:=AvailableRepository.FindPackage(APackage.Name);
|
|
|
+ if not assigned(AvailP) then
|
|
|
+ begin
|
|
|
+ AvailP := AvailableRepository.AddPackage(APackage.Name);
|
|
|
+ AvailP.Assign(APackage);
|
|
|
+ end
|
|
|
+ else
|
|
|
+ begin
|
|
|
+ AvailP.SourcePath := APackage.SourcePath;
|
|
|
+ AvailP.FPMakeOptionsString := APackage.FPMakeOptionsString;
|
|
|
+ end;
|
|
|
+ AvailP.RecompileBroken:=true;
|
|
|
+ APackage.RecompileBroken:=true;
|
|
|
+ // If the fpmake.pp of the original installation is not available anymore, do not
|
|
|
+ // try to use it.
|
|
|
+ if (AvailP.SourcePath<>'') and not FileExists(IncludeTrailingPathDelimiter(APackage.SourcePath)+'fpmake.pp') then
|
|
|
+ AvailP.SourcePath:='';
|
|
|
+ end;
|
|
|
exit;
|
|
|
end;
|
|
|
end
|
|
@@ -387,8 +413,10 @@ begin
|
|
|
for i:=0 to InstalledRepository.PackageCount-1 do
|
|
|
begin
|
|
|
P:=InstalledRepository.Packages[i];
|
|
|
- if PackageIsBroken(P) then
|
|
|
- SL.Add(P.Name);
|
|
|
+ if PackageIsBroken(P,True) then
|
|
|
+ begin
|
|
|
+ SL.Add(P.Name);
|
|
|
+ end;
|
|
|
end;
|
|
|
Result:=(SL.Count>0);
|
|
|
end;
|
|
@@ -507,7 +535,7 @@ var
|
|
|
begin
|
|
|
result := '';
|
|
|
P:=InstalledRepository.FindPackage(AName);
|
|
|
- if (P<>nil) and PackageIsBroken(P) then
|
|
|
+ if (P<>nil) and PackageIsBroken(P,false) then
|
|
|
result:='B';
|
|
|
end;
|
|
|
|