mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-12-07 21:18:43 +01:00
lazbuild: added options --build-twice
This commit is contained in:
parent
8ba0de5d29
commit
9be9ac65d7
@ -240,6 +240,7 @@ type
|
||||
TPkgCompileFlag = (
|
||||
pcfOnlyIfNeeded,
|
||||
pcfCleanCompile, // append -B to the compiler options
|
||||
pcfCompileTwice, // compile a second time and check if some unit was compiled again
|
||||
pcfGroupCompile,
|
||||
pcfDoNotCompileDependencies,
|
||||
pcfDoNotCompilePackage,
|
||||
|
||||
@ -69,6 +69,7 @@ type
|
||||
FBuildIDEOptions: string;
|
||||
FBuildModeOverride: String;
|
||||
FBuildRecursive: boolean;
|
||||
FBuildTwice: boolean;
|
||||
fCompilerInCfg: string;
|
||||
fCompilerOverride: String;
|
||||
fCPUOverride: String;
|
||||
@ -175,6 +176,7 @@ type
|
||||
|
||||
property PackageAction: TPkgAction read FPackageAction write FPackageAction;
|
||||
property BuildAll: boolean read FBuildAll write FBuildAll;// build all files of project/package
|
||||
property BuildTwice: boolean read FBuildTwice write FBuildTwice;// build all packages twice
|
||||
property BuildRecursive: boolean read FBuildRecursive // apply BuildAll flag to dependencies
|
||||
write FBuildRecursive;
|
||||
property SkipDependencies: boolean read FSkipDependencies
|
||||
@ -517,6 +519,8 @@ begin
|
||||
Include(Flags,pcfCleanCompile)
|
||||
else
|
||||
Include(Flags,pcfOnlyIfNeeded);
|
||||
if BuildTwice then
|
||||
Include(Flags,pcfCompileTwice);
|
||||
if BuildRecursive and BuildAll then
|
||||
Include(Flags,pcfCompileDependenciesClean);
|
||||
if SkipDependencies then
|
||||
@ -731,7 +735,7 @@ begin
|
||||
if (BuildRecursive and BuildAll) or Clean then
|
||||
CompilePolicy:=pupOnRebuildingAll;
|
||||
CurResult:=PackageGraph.CompileRequiredPackages(nil,
|
||||
PackageGraph.FirstInstallDependency,false,CompilePolicy);
|
||||
PackageGraph.FirstInstallDependency,false,BuildTwice,CompilePolicy);
|
||||
if CurResult<>mrOk then exit;
|
||||
|
||||
finally
|
||||
@ -892,7 +896,7 @@ var
|
||||
CompilePolicy:=pupOnRebuildingAll;
|
||||
if PackageGraph.CompileRequiredPackages(nil,Project1.FirstRequiredDependency,
|
||||
not (pfUseDesignTimePackages in Project1.Flags),
|
||||
CompilePolicy)<>mrOk
|
||||
BuildTwice,CompilePolicy)<>mrOk
|
||||
then
|
||||
PrintErrorAndHalt(ErrorBuildFailed, 'Project dependencies of "' + AFilename + '"');
|
||||
end;
|
||||
@ -1622,7 +1626,8 @@ begin
|
||||
LongOptions.Add('add-package');
|
||||
LongOptions.Add('add-package-link');
|
||||
LongOptions.Add('build-all');
|
||||
LongOptions.Add('build-ide::');
|
||||
LongOptions.Add('build-ide::'); // value is optional
|
||||
LongOptions.Add('build-twice');
|
||||
LongOptions.Add('recursive');
|
||||
LongOptions.Add('skip-dependencies');
|
||||
LongOptions.Add('widgetset:');
|
||||
@ -1708,6 +1713,10 @@ begin
|
||||
BuildAll:=true;
|
||||
PrintInfo('Parameter: --build-all');
|
||||
end;
|
||||
if HasOption('build-twice') then begin
|
||||
BuildTwice:=true;
|
||||
PrintInfo('Parameter: --build-twice');
|
||||
end;
|
||||
if HasShortOrLongOpt('r','recursive') then begin
|
||||
BuildAll:=true;
|
||||
BuildRecursive:=true;
|
||||
@ -1817,6 +1826,9 @@ begin
|
||||
writeln('-B, --build-all');
|
||||
w(lisBuildAllFilesOfProjectPackageIDE);
|
||||
writeln('');
|
||||
writeln('--build-twice');
|
||||
w('compile package twice and check if any unit was compiled again');
|
||||
writeln('');
|
||||
writeln('-r, --recursive');
|
||||
w(lisApplyBuildFlagsBToDependenciesToo);
|
||||
writeln('');
|
||||
|
||||
@ -429,7 +429,7 @@ type
|
||||
{%H-}Flags: TPkgCompileFlags; ShowAbort: boolean): TModalResult;
|
||||
function CompileRequiredPackages(APackage: TLazPackage;
|
||||
FirstDependency: TPkgDependency;
|
||||
SkipDesignTimePackages: boolean;
|
||||
SkipDesignTimePackages, BuildTwice: boolean;
|
||||
Policy: TPackageUpdatePolicy): TModalResult;
|
||||
function CompilePackage(APackage: TLazPackage; Flags: TPkgCompileFlags;
|
||||
ShowAbort: boolean;
|
||||
@ -2210,10 +2210,7 @@ begin
|
||||
begin
|
||||
FoundCompiling:=true;
|
||||
if CompareFilenames(Msg.Filename,MainFilename)<>0 then
|
||||
begin
|
||||
debugln(['Warning: (lazarus) [TLazPackageGraph.ExtToolBuildStopped] on second compile of "',aPackage.Name,'" the unit "',Msg.GetShortFilename,'" was recompiled']);
|
||||
break;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
if not FoundCompiling then
|
||||
@ -2228,10 +2225,7 @@ begin
|
||||
FoundCompiling:=true;
|
||||
aFilename:=ExtractFilename(copy(Msg.Msg,length(FPCCompilingPattern)+1));
|
||||
if CompareFilenames(aFilename,MainFilename)<>0 then
|
||||
begin
|
||||
debugln(['Warning: (lazarus) [TLazPackageGraph.ExtToolBuildStopped] on second compile of "',aPackage.Name,'" the unit "',aFilename,'" was recompiled']);
|
||||
break;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -4155,7 +4149,7 @@ begin
|
||||
end;
|
||||
|
||||
function TLazPackageGraph.CompileRequiredPackages(APackage: TLazPackage;
|
||||
FirstDependency: TPkgDependency; SkipDesignTimePackages: boolean;
|
||||
FirstDependency: TPkgDependency; SkipDesignTimePackages, BuildTwice: boolean;
|
||||
Policy: TPackageUpdatePolicy): TModalResult;
|
||||
var
|
||||
BuildItems: TObjectList;
|
||||
@ -4217,6 +4211,8 @@ begin
|
||||
Flags:=[pcfDoNotCompileDependencies,pcfDoNotSaveEditorFiles,pcfGroupCompile];
|
||||
if SkipDesignTimePackages then
|
||||
Include(Flags,pcfSkipDesignTimePackages);
|
||||
if BuildTwice then
|
||||
Include(Flags,pcfCompileTwice);
|
||||
if Policy=pupAsNeeded then
|
||||
Include(Flags,pcfOnlyIfNeeded)
|
||||
else
|
||||
@ -4421,8 +4417,8 @@ function TLazPackageGraph.CompilePackage(APackage: TLazPackage;
|
||||
Proc.Executable:=CompilerFilename;
|
||||
Proc.Parameters:=CompilerParams;
|
||||
if NeedBuildAll then
|
||||
PkgCompileTool.Process.Parameters.Add('-B')
|
||||
else if Run>0 then
|
||||
PkgCompileTool.Process.Parameters.Add('-B');
|
||||
if Run>0 then
|
||||
begin
|
||||
for i:=Proc.Parameters.Count-1 downto 0 do
|
||||
if Proc.Parameters[i]='-B' then
|
||||
@ -4437,7 +4433,7 @@ var
|
||||
FPCParser: TFPCParser;
|
||||
CompilerFilename: String;
|
||||
CompilePolicy: TPackageUpdatePolicy;
|
||||
NeedBuildAllFlag, NeedBuildAll, CompileTwice: Boolean;
|
||||
NeedBuildAllFlag, NeedBuildAll: Boolean;
|
||||
CompilerParams, CmdLineParams: TStrings;
|
||||
Note: String;
|
||||
WorkingDir: String;
|
||||
@ -4464,7 +4460,8 @@ begin
|
||||
else
|
||||
CompilePolicy:=pupAsNeeded;
|
||||
Result:=CompileRequiredPackages(APackage,nil,
|
||||
pcfSkipDesignTimePackages in Flags,CompilePolicy);
|
||||
pcfSkipDesignTimePackages in Flags,pcfCompileTwice in Flags,
|
||||
CompilePolicy);
|
||||
if Result<>mrOk then begin
|
||||
DebugLn(['Error: (lazarus) Compile required packages failed: ',APackage.IDAsString]);
|
||||
exit;
|
||||
@ -4618,19 +4615,17 @@ begin
|
||||
FHasCompiledFpmakePackages := True;
|
||||
end;
|
||||
|
||||
CompileTwice:={$IFDEF EnableCompilePkgTwice}true{$ELSE}false{$ENDIF};
|
||||
|
||||
ExtToolData:=nil;
|
||||
ExtToolData2:=nil;
|
||||
PkgCompileTool:=nil;
|
||||
PkgCompileTool2:=nil;
|
||||
try
|
||||
aTitle:=Format(lisPkgMangCompilePackage, [APackage.IDAsString]);
|
||||
if CompileTwice then
|
||||
if pcfCompileTwice in Flags then
|
||||
aTitle:=aTitle+' (first time)';
|
||||
SetupCompileTool(0,PkgCompileTool,ExtToolData,aTitle,Note,CompilerFilename,CompilerParams,NeedBuildAll);
|
||||
|
||||
if CompileTwice then
|
||||
if pcfCompileTwice in Flags then
|
||||
begin
|
||||
aTitle:=Format(lisPkgMangCompilePackage, [APackage.IDAsString])+' (second time)';
|
||||
SetupCompileTool(1,PkgCompileTool2,ExtToolData2,aTitle,Note,CompilerFilename,CompilerParams,NeedBuildAll);
|
||||
|
||||
@ -4167,6 +4167,7 @@ begin
|
||||
Result:=PackageGraph.CompileRequiredPackages(nil,
|
||||
AProject.FirstRequiredDependency,
|
||||
not (pfUseDesignTimePackages in AProject.Flags),
|
||||
pcfCompileTwice in Flags,
|
||||
CompilePolicy);
|
||||
if Result<>mrOk then exit;
|
||||
end;
|
||||
@ -6170,7 +6171,7 @@ begin
|
||||
CompilePolicy:=pupAsNeeded;
|
||||
if pcfCompileDependenciesClean in Flags then
|
||||
CompilePolicy:=pupOnRebuildingAll;
|
||||
Result:=PackageGraph.CompileRequiredPackages(nil,Dependencies,false,
|
||||
Result:=PackageGraph.CompileRequiredPackages(nil,Dependencies,false,pcfCompileTwice in Flags,
|
||||
CompilePolicy);
|
||||
if Result<>mrOk then begin
|
||||
if ConsoleVerbosity>0 then
|
||||
|
||||
Loading…
Reference in New Issue
Block a user