* 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,20 +4984,44 @@ 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);
if AllTargets then
begin
for ACPU:=low(TCpu) to high(TCpu) do
for AOS:=low(TOS) to high(TOS) do
begin
if FileExists(APackage.GetUnitsOutputDir(ACPU,AOS)) or
FileExists(APackage.GetBinOutputDir(ACPU,AOS)) then
Clean(APackage,ACPU,AOS);
end;
end
else
Clean(APackage, Defaults.CPU, Defaults.OS);
DoAfterClean(Apackage);
Finally
If (APackage.Directory<>'') then
EnterDir('');
end;
end;
procedure TBuildEngine.Clean(APackage: TPackage; ACPU: TCPU; AOS: TOS);
Var
List : TStringList;
DirectoryList : TStringList;
begin
List:=TStringList.Create; List:=TStringList.Create;
try try
List.Add(APackage.GetUnitsOutputDir(Defaults.CPU,Defaults.OS) + PathDelim + UnitConfigFile); List.Add(APackage.GetUnitsOutputDir(ACPU,AOS) + PathDelim + UnitConfigFile);
APackage.GetCleanFiles(List,Defaults.CPU,Defaults.OS); APackage.GetCleanFiles(List,ACPU,AOS);
if (List.Count>0) then if (List.Count>0) then
begin begin
CmdDeleteFiles(List); CmdDeleteFiles(List);
@ -5003,17 +5031,17 @@ begin
CmdRemoveDirs(DirectoryList); CmdRemoveDirs(DirectoryList);
DirectoryList.Clear; DirectoryList.Clear;
if DirectoryExists(APackage.GetBinOutputDir(Defaults.CPU,Defaults.OS)) then if DirectoryExists(APackage.GetBinOutputDir(ACPU,AOS)) then
DirectoryList.Add(APackage.GetBinOutputDir(Defaults.CPU,Defaults.OS)); DirectoryList.Add(APackage.GetBinOutputDir(ACPU,AOS));
if DirectoryExists(APackage.GetUnitsOutputDir(Defaults.CPU,Defaults.OS)) then if DirectoryExists(APackage.GetUnitsOutputDir(ACPU,AOS)) then
DirectoryList.Add(APackage.GetUnitsOutputDir(Defaults.CPU,Defaults.OS)); DirectoryList.Add(APackage.GetUnitsOutputDir(ACPU,AOS));
CmdRemoveDirs(DirectoryList); CmdRemoveDirs(DirectoryList);
DirectoryList.Clear; DirectoryList.Clear;
if DirectoryExists(ExtractFileDir(APackage.GetBinOutputDir(Defaults.CPU,Defaults.OS))) then if DirectoryExists(ExtractFileDir(APackage.GetBinOutputDir(ACPU,AOS))) then
DirectoryList.Add(ExtractFileDir(APackage.GetBinOutputDir(Defaults.CPU,Defaults.OS))); DirectoryList.Add(ExtractFileDir(APackage.GetBinOutputDir(ACPU,AOS)));
if DirectoryExists(ExtractFileDir(APackage.GetUnitsOutputDir(Defaults.CPU,Defaults.OS))) then if DirectoryExists(ExtractFileDir(APackage.GetUnitsOutputDir(ACPU,AOS))) then
DirectoryList.Add(ExtractFileDir(APackage.GetUnitsOutputDir(Defaults.CPU,Defaults.OS))); DirectoryList.Add(ExtractFileDir(APackage.GetUnitsOutputDir(ACPU,AOS)));
CmdRemoveDirs(DirectoryList); CmdRemoveDirs(DirectoryList);
finally finally
DirectoryList.Free; DirectoryList.Free;
@ -5022,11 +5050,6 @@ begin
Finally Finally
List.Free; List.Free;
end; end;
DoAfterClean(Apackage);
Finally
If (APackage.Directory<>'') then
EnterDir('');
end;
end; end;
@ -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