* Implemented distclean command, which cleans up all targets

git-svn-id: trunk@17985 -
This commit is contained in:
joost 2011-07-12 20:45:52 +00:00
parent e32317bca4
commit 25a9052ced

View File

@ -102,7 +102,7 @@ Type
TLogEvent = Procedure (Level : TVerboseLevel; Const Msg : String) of Object; TLogEvent = Procedure (Level : TVerboseLevel; Const Msg : String) of Object;
TRunMode = (rmCompile,rmBuild,rmInstall,rmArchive,rmClean,rmManifest); TRunMode = (rmCompile,rmBuild,rmInstall,rmArchive,rmClean,rmDistClean,rmManifest);
Const Const
// Aliases // Aliases
@ -854,7 +854,8 @@ Type
Procedure Install(APackage : TPackage); Procedure Install(APackage : TPackage);
Procedure Archive(APackage : TPackage); Procedure Archive(APackage : TPackage);
Procedure Manifest(APackage : TPackage); Procedure Manifest(APackage : TPackage);
Procedure Clean(APackage : TPackage); Procedure Clean(APackage : TPackage; AllTargets: boolean);
Procedure Clean(APackage : TPackage; ACPU:TCPU; AOS : TOS);
Procedure CompileDependencies(APackage : TPackage); Procedure CompileDependencies(APackage : TPackage);
Function CheckExternalPackage(Const APackageName : String):TPackage; Function CheckExternalPackage(Const APackageName : String):TPackage;
procedure CreateOutputDir(APackage: TPackage); procedure CreateOutputDir(APackage: TPackage);
@ -863,7 +864,7 @@ Type
Procedure Install(Packages : TPackages); Procedure Install(Packages : TPackages);
Procedure Archive(Packages : TPackages); Procedure Archive(Packages : TPackages);
procedure Manifest(Packages: TPackages); procedure Manifest(Packages: TPackages);
Procedure Clean(Packages : TPackages); Procedure Clean(Packages : TPackages; AllTargets: boolean);
Property ListMode : Boolean Read FListMode Write FListMode; Property ListMode : Boolean Read FListMode Write FListMode;
Property ForceCompile : Boolean Read FForceCompile Write FForceCompile; Property ForceCompile : Boolean Read FForceCompile Write FForceCompile;
Property ExternalPackages: TPackages Read FExternalPackages; Property ExternalPackages: TPackages Read FExternalPackages;
@ -903,7 +904,7 @@ Type
Procedure AnalyzeOptions; Procedure AnalyzeOptions;
Procedure Usage(const FMT : String; Args : Array of const); Procedure Usage(const FMT : String; Args : Array of const);
Procedure Compile(Force : Boolean); virtual; Procedure Compile(Force : Boolean); virtual;
Procedure Clean; virtual; Procedure Clean(AllTargets: boolean); virtual;
Procedure Install; virtual; Procedure Install; virtual;
Procedure Archive; virtual; Procedure Archive; virtual;
Procedure Manifest; virtual; Procedure Manifest; virtual;
@ -2329,8 +2330,8 @@ Var
OB,OU : String; OB,OU : String;
I : Integer; I : Integer;
begin begin
OB:=IncludeTrailingPathDelimiter(GetBinOutputDir(Defaults.CPU,Defaults.OS)); OB:=IncludeTrailingPathDelimiter(GetBinOutputDir(ACPU,AOS));
OU:=IncludeTrailingPathDelimiter(GetUnitsOutputDir(Defaults.CPU,Defaults.OS)); OU:=IncludeTrailingPathDelimiter(GetUnitsOutputDir(ACPU,AOS));
AddConditionalStrings(List,CleanFiles,ACPU,AOS); AddConditionalStrings(List,CleanFiles,ACPU,AOS);
For I:=0 to FTargets.Count-1 do For I:=0 to FTargets.Count-1 do
FTargets.TargetItems[I].GetCleanFiles(List, OU, OB, ACPU, AOS); FTargets.TargetItems[I].GetCleanFiles(List, OU, OB, ACPU, AOS);
@ -3297,6 +3298,8 @@ begin
FRunMode:=rmInstall FRunMode:=rmInstall
else if CheckCommand(I,'c','clean') then else if CheckCommand(I,'c','clean') then
FRunMode:=rmClean FRunMode:=rmClean
else if CheckCommand(I,'dc','distclean') then
FRunMode:=rmDistClean
else if CheckCommand(I,'a','archive') then else if CheckCommand(I,'a','archive') then
FRunMode:=rmarchive FRunMode:=rmarchive
else if CheckCommand(I,'M','manifest') then else if CheckCommand(I,'M','manifest') then
@ -3418,9 +3421,9 @@ begin
end; end;
procedure TCustomInstaller.Clean; procedure TCustomInstaller.Clean(AllTargets: boolean);
begin begin
BuildEngine.Clean(Packages); BuildEngine.Clean(Packages, AllTargets);
end; end;
@ -3463,7 +3466,8 @@ begin
rmBuild : Compile(True); rmBuild : Compile(True);
rmInstall : Install; rmInstall : Install;
rmArchive : Archive; rmArchive : Archive;
rmClean : Clean; rmClean : Clean(False);
rmDistClean: Clean(True);
rmManifest : Manifest; rmManifest : Manifest;
end; end;
except except
@ -4980,48 +4984,28 @@ begin
end; end;
procedure TBuildEngine.Clean(APackage: TPackage); procedure TBuildEngine.Clean(APackage: TPackage; AllTargets: boolean);
Var var
List : TStringList; ACPU: TCpu;
DirectoryList : TStringList; AOS: TOS;
begin begin
Log(vlInfo,SInfoCleaningPackage,[APackage.Name]); Log(vlInfo,SInfoCleaningPackage,[APackage.Name]);
try try
If (APackage.Directory<>'') then If (APackage.Directory<>'') then
EnterDir(APackage.Directory); EnterDir(APackage.Directory);
DoBeforeClean(Apackage); DoBeforeClean(Apackage);
List:=TStringList.Create; if AllTargets then
try begin
List.Add(APackage.GetUnitsOutputDir(Defaults.CPU,Defaults.OS) + PathDelim + UnitConfigFile); for ACPU:=low(TCpu) to high(TCpu) do
APackage.GetCleanFiles(List,Defaults.CPU,Defaults.OS); for AOS:=low(TOS) to high(TOS) do
if (List.Count>0) then begin
begin if FileExists(APackage.GetUnitsOutputDir(ACPU,AOS)) or
CmdDeleteFiles(List); FileExists(APackage.GetBinOutputDir(ACPU,AOS)) then
DirectoryList := TStringList.Create; Clean(APackage,ACPU,AOS);
try end;
GetDirectoriesFromFilelist(List,DirectoryList); end
CmdRemoveDirs(DirectoryList); else
Clean(APackage, Defaults.CPU, Defaults.OS);
DirectoryList.Clear;
if DirectoryExists(APackage.GetBinOutputDir(Defaults.CPU,Defaults.OS)) then
DirectoryList.Add(APackage.GetBinOutputDir(Defaults.CPU,Defaults.OS));
if DirectoryExists(APackage.GetUnitsOutputDir(Defaults.CPU,Defaults.OS)) then
DirectoryList.Add(APackage.GetUnitsOutputDir(Defaults.CPU,Defaults.OS));
CmdRemoveDirs(DirectoryList);
DirectoryList.Clear;
if DirectoryExists(ExtractFileDir(APackage.GetBinOutputDir(Defaults.CPU,Defaults.OS))) then
DirectoryList.Add(ExtractFileDir(APackage.GetBinOutputDir(Defaults.CPU,Defaults.OS)));
if DirectoryExists(ExtractFileDir(APackage.GetUnitsOutputDir(Defaults.CPU,Defaults.OS))) then
DirectoryList.Add(ExtractFileDir(APackage.GetUnitsOutputDir(Defaults.CPU,Defaults.OS)));
CmdRemoveDirs(DirectoryList);
finally
DirectoryList.Free;
end;
end;
Finally
List.Free;
end;
DoAfterClean(Apackage); DoAfterClean(Apackage);
Finally Finally
If (APackage.Directory<>'') then If (APackage.Directory<>'') then
@ -5029,6 +5013,45 @@ begin
end; end;
end; end;
procedure TBuildEngine.Clean(APackage: TPackage; ACPU: TCPU; AOS: TOS);
Var
List : TStringList;
DirectoryList : TStringList;
begin
List:=TStringList.Create;
try
List.Add(APackage.GetUnitsOutputDir(ACPU,AOS) + PathDelim + UnitConfigFile);
APackage.GetCleanFiles(List,ACPU,AOS);
if (List.Count>0) then
begin
CmdDeleteFiles(List);
DirectoryList := TStringList.Create;
try
GetDirectoriesFromFilelist(List,DirectoryList);
CmdRemoveDirs(DirectoryList);
DirectoryList.Clear;
if DirectoryExists(APackage.GetBinOutputDir(ACPU,AOS)) then
DirectoryList.Add(APackage.GetBinOutputDir(ACPU,AOS));
if DirectoryExists(APackage.GetUnitsOutputDir(ACPU,AOS)) then
DirectoryList.Add(APackage.GetUnitsOutputDir(ACPU,AOS));
CmdRemoveDirs(DirectoryList);
DirectoryList.Clear;
if DirectoryExists(ExtractFileDir(APackage.GetBinOutputDir(ACPU,AOS))) then
DirectoryList.Add(ExtractFileDir(APackage.GetBinOutputDir(ACPU,AOS)));
if DirectoryExists(ExtractFileDir(APackage.GetUnitsOutputDir(ACPU,AOS))) then
DirectoryList.Add(ExtractFileDir(APackage.GetUnitsOutputDir(ACPU,AOS)));
CmdRemoveDirs(DirectoryList);
finally
DirectoryList.Free;
end;
end;
Finally
List.Free;
end;
end;
Procedure TBuildEngine.Manifest(APackage : TPackage); Procedure TBuildEngine.Manifest(APackage : TPackage);
Var Var
@ -5132,7 +5155,7 @@ begin
end; end;
procedure TBuildEngine.Clean(Packages: TPackages); procedure TBuildEngine.Clean(Packages: TPackages; AllTargets: boolean);
Var Var
I : Integer; I : Integer;
P : TPackage; P : TPackage;
@ -5144,7 +5167,7 @@ begin
begin begin
P:=Packages.PackageItems[i]; P:=Packages.PackageItems[i];
If PackageOK(P) then If PackageOK(P) then
Clean(P); Clean(P, AllTargets);
log(vlWarning, SWarnCleanPackagecomplete, [P.Name]); log(vlWarning, SWarnCleanPackagecomplete, [P.Name]);
end; end;
If Assigned(AfterClean) then If Assigned(AfterClean) then