2
0
Эх сурвалжийг харах

* TPackageHandler.Execute is now a function which returns false in case
of an error. This way it is possible to stop executing follow-up
commands in case of an error.

git-svn-id: trunk@36474 -

joost 8 жил өмнө
parent
commit
c7539f4252

+ 100 - 59
packages/fppkg/src/pkgcommands.pp

@@ -25,56 +25,56 @@ type
 
   TCommandAddConfig = Class(TPackagehandler)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
   { TCommandUpdate }
 
   TCommandUpdate = Class(TPackagehandler)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
   { TCommandListPackages }
 
   TCommandListPackages = Class(TPackagehandler)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
   { TCommandScanPackages }
 
   TCommandScanPackages = Class(TPackagehandler)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
   { TCommandDownload }
 
   TCommandDownload = Class(TPackagehandler)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
   { TCommandUnzip }
 
   TCommandUnzip = Class(TPackagehandler)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
   { TCommandCompile }
 
   TCommandCompile = Class(TPackagehandler)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
   { TCommandBuild }
 
   TCommandBuild = Class(TPackagehandler)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
   { TCommandInstall }
@@ -83,7 +83,7 @@ type
   protected
     function ForceInstall: Boolean; virtual;
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
   { TCommandInstallForced }
@@ -98,49 +98,49 @@ type
 
   TCommandUnInstall = Class(TPackagehandler)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
   { TCommandClean }
 
   TCommandClean = Class(TPackagehandler)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
   { TCommandArchive }
 
   TCommandArchive = Class(TPackagehandler)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
   { TCommandInstallDependencies }
 
   TCommandInstallDependencies = Class(TPackagehandler)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
   { TCommandFixBroken }
 
   TCommandFixBroken = Class(TPackagehandler)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
   { TCommandListSettings }
 
   TCommandListSettings = Class(TPackagehandler)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
   { TCommandInfo }
 
   TCommandInfo = Class(TPackagehandler)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
 var
@@ -155,12 +155,13 @@ end;
 
 { TCommandInfo }
 
-procedure TCommandInfo.Execute;
+function TCommandInfo.Execute: Boolean;
 var
   P : TFPPackage;
   S : string;
   I : Integer;
 begin
+  Result := True;
   if PackageName='' then
     Error(SErrNoPackageSpecified);
   P:=PackageManager.PackageByName(PackageName, pkgpkAvailable);
@@ -197,10 +198,11 @@ end;
 
 { TCommandUnInstall }
 
-procedure TCommandUnInstall.Execute;
+function TCommandUnInstall.Execute: Boolean;
 var
   AvailP: TFPPackage;
 begin
+  Result := False;
   if PackageName<>'' then
     begin
       if (PackageName=CmdLinePackageName) then
@@ -217,21 +219,23 @@ begin
             end;
         end;
     end;
-  ExecuteAction(PackageName,'fpmakeuninstall');
+  Result := ExecuteAction(PackageName,'fpmakeuninstall');
 end;
 
 { TCommandListSettings }
 
-procedure TCommandListSettings.Execute;
+function TCommandListSettings.Execute: Boolean;
 begin
+  Result := True;
   PackageManager.Options.LogValues(llProgres);
   PackageManager.CompilerOptions.LogValues(llProgres,'');
   PackageManager.FPMakeCompilerOptions.LogValues(llProgres,'fpmake-building ');
 end;
 
 
-procedure TCommandAddConfig.Execute;
+function TCommandAddConfig.Execute: Boolean;
 begin
+  Result := False;
 {
   Log(llInfo,SLogGeneratingCompilerConfig,[S]);
   Options.InitCompilerDefaults(Args[2]);
@@ -240,10 +244,11 @@ begin
 end;
 
 
-procedure TCommandUpdate.Execute;
+function TCommandUpdate.Execute: Boolean;
 var
   PackagesURL :  String;
 begin
+  Result := True;
   // Download and load mirrors.xml
   // This can be skipped when a custom RemoteRepository is configured
   if (PackageManager.Options.GlobalSection.RemoteMirrorsURL<>'') and
@@ -264,44 +269,51 @@ begin
 end;
 
 
-procedure TCommandListPackages.Execute;
+function TCommandListPackages.Execute: Boolean;
 begin
+  Result := True;
   ListPackages(PackageManager.Options.CommandLineSection.ShowLocation);
 end;
 
 
-procedure TCommandScanPackages.Execute;
+function TCommandScanPackages.Execute: Boolean;
 begin
+  Result := True;
   { nothing, already handled in fppkg.pp as special case
     before the local fppkg directory is processed }
 end;
 
 
-procedure TCommandDownload.Execute;
+function TCommandDownload.Execute: Boolean;
 var
   P : TFPPackage;
 begin
+  Result := False;
   if PackageName='' then
     Error(SErrNoPackageSpecified);
   P:=PackageManager.PackageByName(PackageName, pkgpkAvailable);
   if not FileExists(PackageManager.PackageLocalArchive(P)) then
-    ExecuteAction(PackageName,'downloadpackage');
+    Result := ExecuteAction(PackageName,'downloadpackage')
+  else
+    Result := True;
 end;
 
 
-procedure TCommandUnzip.Execute;
+function TCommandUnzip.Execute: Boolean;
 Var
   BuildDir : string;
   ArchiveFile : String;
   P : TFPPackage;
 begin
+  Result := False;
   if PackageName='' then
     Error(SErrNoPackageSpecified);
   P:=PackageManager.PackageByName(PackageName, pkgpkAvailable);
   BuildDir:=PackageManager.PackageBuildPath(P);
   ArchiveFile:=PackageManager.PackageLocalArchive(P);
   if not FileExists(ArchiveFile) then
-    ExecuteAction(PackageName,'downloadpackage');
+    if not ExecuteAction(PackageName,'downloadpackage') then
+      Exit;
   { Create builddir, remove it first if needed }
   if DirectoryExists(BuildDir) then
     DeleteDir(BuildDir);
@@ -313,13 +325,14 @@ begin
       Log(llCommands,SLogUnzippping,[ArchiveFile]);
       OutputPath:=PackageManager.PackageBuildPath(P);
       UnZipAllFiles(ArchiveFile);
+      Result := True;
     Finally
       Free;
     end;
 end;
 
 
-procedure TCommandCompile.Execute;
+function TCommandCompile.Execute: Boolean;
 begin
   if PackageName<>'' then
     begin
@@ -327,41 +340,50 @@ begin
       // dependencies
       if (PackageName=CmdLinePackageName) or (PackageName=URLPackageName) then
         begin
-          ExecuteAction(PackageName,'unzip');
-          ExecuteAction(PackageName,'installdependencies');
+          if not ExecuteAction(PackageName,'unzip') then
+            Exit;
+          if not ExecuteAction(PackageName,'installdependencies') then
+            Exit;
         end
       else
         if (PackageName=CurrentDirPackageName) then
           begin
-            ExecuteAction(PackageName,'installdependencies');
+            if not ExecuteAction(PackageName,'installdependencies') then
+              Exit;
           end
       else
         begin
-          ExecuteAction(PackageName,'installdependencies');
-          ExecuteAction(PackageName,'unzip');
+          if not ExecuteAction(PackageName,'installdependencies') then
+            Exit;
+          if not ExecuteAction(PackageName,'unzip') then
+            Exit;
         end;
     end;
-  ExecuteAction(PackageName,'fpmakecompile');
+  Result := ExecuteAction(PackageName,'fpmakecompile');
 end;
 
 
-procedure TCommandBuild.Execute;
+function TCommandBuild.Execute: Boolean;
 var
   P: TFPPackage;
 begin
+  Result := False;
   if PackageName<>'' then
     begin
       // For local files we need the information inside the zip to get the
       // dependencies
       if (PackageName=CmdLinePackageName) or (PackageName=URLPackageName) then
         begin
-          ExecuteAction(PackageName,'unzip');
-          ExecuteAction(PackageName,'installdependencies');
+          if not ExecuteAction(PackageName,'unzip') then
+            Exit;
+          if not ExecuteAction(PackageName,'installdependencies') then
+            Exit;
         end
       else
         if (PackageName=CurrentDirPackageName) then
           begin
-            ExecuteAction(PackageName,'installdependencies');
+            if not ExecuteAction(PackageName,'installdependencies') then
+              Exit;
           end
       else
         begin
@@ -373,11 +395,13 @@ begin
             end;
 
           if P.PackagesStructure.UnzipBeforeUse then
-            ExecuteAction(PackageName,'unzip');
-          ExecuteAction(PackageName,'installdependencies');
+            if not ExecuteAction(PackageName,'unzip') then
+              Exit;
+          if not ExecuteAction(PackageName,'installdependencies') then
+            Exit;
         end;
     end;
-  ExecuteAction(PackageName,'fpmakebuild');
+  Result := ExecuteAction(PackageName,'fpmakebuild');
 end;
 
 function TCommandInstall.ForceInstall: Boolean;
@@ -385,7 +409,7 @@ begin
   Result := False;
 end;
 
-procedure TCommandInstall.Execute;
+function TCommandInstall.Execute: Boolean;
 
 var
   S : String;
@@ -419,10 +443,12 @@ var
 begin
   if PackageName<>'' then
     begin
-      ExecuteAction(PackageName,'build');
+      Result := False;
+      if not ExecuteAction(PackageName,'build') then
+        Exit;
 
       AvailPackage := PackageManager.DetermineSourcePackage(PackageName);
-      InstallRepo := PackageManager.GetInstallRepository(AvailPackage);
+      InstallRepo := PackageManager.GetInstallRepository(AvailPackage);   // AvailPackage can be nil! currentdir - fixbroken ||  embweb - install-req
       case InstallRepo.DefaultPackagesStructure.IsInstallationNeeded(AvailPackage) of
         fpinInstallationNeeded:
           begin
@@ -431,14 +457,19 @@ begin
             else
               S := PackageName;
             log(llDebug,SDbgPackageInstallRequired,[S, InstallRepo.RepositoryName]);
-            ExecuteAction(PackageName,'fpmakeinstall');
+            if not ExecuteAction(PackageName,'fpmakeinstall') then
+              Exit;
           end;
         fpinInstallationImpossible:
-          Error(SErrInstallationImpossible,[PackageName, InstallRepo.RepositoryName]);
+          begin
+            Error(SErrInstallationImpossible,[PackageName, InstallRepo.RepositoryName]);
+            Exit;
+          end
         else if ForceInstall then
           begin
             log(llDebug,SDbgForcePackageInstall,[PackageName]);
-            ExecuteAction(PackageName,'fpmakeinstall');
+            if not ExecuteAction(PackageName,'fpmakeinstall') then
+              Exit;
           end;
       end;
 
@@ -447,7 +478,8 @@ begin
         begin
           // Load package name from manifest
           if not FileExists(ManifestFileName) then
-            ExecuteAction(PackageName,'fpmakemanifest');
+            if not ExecuteAction(PackageName,'fpmakemanifest') then
+              Exit;
           P:=LoadManifestFromFile(ManifestFileName);
           S:=P.Name;
           FreeAndNil(P);
@@ -471,25 +503,26 @@ begin
                 end;
             end;
         end;
+      Result := True;
     end
   else
-    ExecuteAction(PackageName,'fpmakeinstall');
+    Result := ExecuteAction(PackageName,'fpmakeinstall');
 end;
 
 
-procedure TCommandClean.Execute;
+function TCommandClean.Execute: Boolean;
 begin
-  ExecuteAction(PackageName,'fpmakeclean');
+  Result := ExecuteAction(PackageName,'fpmakeclean');
 end;
 
 
-procedure TCommandArchive.Execute;
+function TCommandArchive.Execute: Boolean;
 begin
-  ExecuteAction(PackageName,'fpmakearchive');
+  Result := ExecuteAction(PackageName,'fpmakearchive');
 end;
 
 
-procedure TCommandInstallDependencies.Execute;
+function TCommandInstallDependencies.Execute: Boolean;
 
   function PackageVersionStr(APackage: TFPPackage): string;
   begin
@@ -512,6 +545,7 @@ var
   L : TStringList;
   status : string;
 begin
+  Result := False;
   if PackageName='' then
     Error(SErrNoPackageSpecified);
   ManifestPackages:=nil;
@@ -536,6 +570,7 @@ begin
         begin
           ManifestPackages.Free;
           Error(SErrManifestNoSinglePackage,[ManifestFileName]);
+          Exit;
         end;
     end
   else
@@ -607,7 +642,8 @@ begin
       inc(DependenciesDepth);
 
       for i:=0 to L.Count-1 do
-        ExecuteAction(L[i],'install-req');
+        if not ExecuteAction(L[i],'install-req') then
+          Exit;
 
       dec(DependenciesDepth);
       if DependenciesDepth=0 then
@@ -616,15 +652,17 @@ begin
   FreeAndNil(L);
   if assigned(ManifestPackages) then
     ManifestPackages.Free;
+  Result := True;
 end;
 
 
-procedure TCommandFixBroken.Execute;
+function TCommandFixBroken.Execute: Boolean;
 var
   i : integer;
   SL : TStringList;
   BreakLoop : Boolean;
 begin
+  Result := False;
   SL:=TStringList.Create;
   BreakLoop := false;
   repeat
@@ -634,8 +672,10 @@ begin
     pkgglobals.Log(llProgres,SProgrReinstallDependent);
     for i:=0 to SL.Count-1 do
       begin
-        ExecuteAction(SL[i],'build');
-        ExecuteAction(SL[i],'install-req');
+        if not ExecuteAction(SL[i],'build') then
+          Exit;
+        if not ExecuteAction(SL[i],'install-req') then
+          Exit;
         if PackageManager.PackageIsBroken(PackageManager.PackageByName(SL[i], pkgpkInstalled), nil) then
           begin
             BreakLoop := true;
@@ -643,6 +683,7 @@ begin
           end;
       end;
   until BreakLoop;
+  Result := True;
   FreeAndNil(SL);
 end;
 

+ 4 - 2
packages/fppkg/src/pkgdownload.pp

@@ -30,7 +30,7 @@ Type
 
   TDownloadPackage = Class(TPackagehandler)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
 procedure RegisterDownloader(const AName:string;Downloaderclass:TBaseDownloaderClass);
@@ -159,12 +159,13 @@ end;
 
 { TDownloadPackage }
 
-procedure TDownloadPackage.Execute;
+function TDownloadPackage.Execute: Boolean;
 var
   DownloaderClass : TBaseDownloaderClass;
   P : TFPPackage;
   RemoteArchive: string;
 begin
+  Result := False;
   P:=PackageManager.PackageByName(PackageName, pkgpkAvailable);
   DownloaderClass:=GetDownloader(PackageManager.Options.GlobalSection.Downloader);
   if Assigned(DownloaderClass) then
@@ -182,6 +183,7 @@ begin
                 ForceDirectories(PackageManager.Options.GlobalSection.ArchivesDir);
 
               Download(RemoteArchive,PackageManager.PackageLocalArchive(P));
+              Result := True;
             end
           else
             Error(SErrDownloadPackageFailed);

+ 31 - 25
packages/fppkg/src/pkgfpmake.pp

@@ -26,7 +26,7 @@ type
   protected
     function DeterminePackage: TFPPackage;
   Public
-    Procedure Execute;override;
+    function Execute: Boolean; override;
   end;
 
 
@@ -43,7 +43,7 @@ type
 
   TFPMakeRunnerCompile = Class(TFPMakeRunner)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
 
@@ -51,7 +51,7 @@ type
 
   TFPMakeRunnerBuild = Class(TFPMakeRunner)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
 
@@ -61,7 +61,7 @@ type
   protected
     function IncludeInstallationOptions: Boolean; override;
   Public
-    procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
   { TFPMakeRunnerUnInstall }
@@ -70,28 +70,28 @@ type
   protected
     function IncludeInstallationOptions: Boolean; override;
   Public
-    procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
   { TFPMakeRunnerClean }
 
   TFPMakeRunnerClean = Class(TFPMakeRunner)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
   { TFPMakeRunnerManifest }
 
   TFPMakeRunnerManifest = Class(TFPMakeRunner)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
   { TFPMakeRunnerArchive }
 
   TFPMakeRunnerArchive = Class(TFPMakeRunner)
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
    TMyMemoryStream=class(TMemoryStream)
@@ -147,7 +147,7 @@ begin
     Raise EPackage.CreateFmt(SErrMissingPackage,[PackageName]);
 end;
 
-Procedure TFPMakeCompiler.Execute;
+function TFPMakeCompiler.Execute: Boolean;
 var
   OOptions : string;
 
@@ -214,6 +214,7 @@ Var
   DepPackage: TFPPackage;
   DepDirList: TStringList;
 begin
+  Result := True;
   P:=DeterminePackage;
   NeedFPMKUnitSource:=false;
   OOptions:='';
@@ -386,6 +387,7 @@ Var
   end;
 
 begin
+  Result := -1;
   OOptions:='';
   // Does the current package support this CPU-OS?
   if PackageName<>'' then
@@ -401,10 +403,14 @@ begin
       if (command<>'archive') and (command<>'manifest') and
          (not(PackageManager.CompilerOptions.CompilerOS in P.OSes) or
           not(PackageManager.CompilerOptions.CompilerCPU in P.CPUs)) then
-        Error(SErrPackageDoesNotSupportTarget,[P.Name,MakeTargetString(PackageManager.CompilerOptions.CompilerCPU,PackageManager.CompilerOptions.CompilerOS)]);
+        begin
+          Error(SErrPackageDoesNotSupportTarget,[P.Name,MakeTargetString(PackageManager.CompilerOptions.CompilerCPU,PackageManager.CompilerOptions.CompilerOS)]);
+          Exit;
+        end;
     end;
   { Maybe compile fpmake executable? }
-  ExecuteAction(PackageName,'compilefpmake');
+  if not ExecuteAction(PackageName,'compilefpmake') then
+    Exit;
   { Create options }
   if llDebug in LogLevels then
     AddOption('--debug')
@@ -479,15 +485,15 @@ begin
 end;
 
 
-procedure TFPMakeRunnerCompile.Execute;
+function TFPMakeRunnerCompile.Execute: Boolean;
 begin
-  RunFPMake('compile');
+  Result := RunFPMake('compile') = 0;
 end;
 
 
-procedure TFPMakeRunnerBuild.Execute;
+function TFPMakeRunnerBuild.Execute: Boolean;
 begin
-  RunFPMake('build');
+  Result := RunFPMake('build') = 0;
 end;
 
 function TFPMakeRunnerInstall.IncludeInstallationOptions: Boolean;
@@ -495,9 +501,9 @@ begin
   Result := True;
 end;
 
-procedure TFPMakeRunnerInstall.Execute;
+function TFPMakeRunnerInstall.Execute: Boolean;
 begin
-  RunFPMake('install');
+  Result := RunFPMake('install') = 0;
 end;
 
 function TFPMakeRunnerUnInstall.IncludeInstallationOptions: Boolean;
@@ -505,25 +511,25 @@ begin
   Result := True;
 end;
 
-procedure TFPMakeRunnerUnInstall.Execute;
+function TFPMakeRunnerUnInstall.Execute: Boolean;
 begin
-  RunFPMake('uninstall');
+  Result := RunFPMake('uninstall') = 0;
 end;
 
 
-procedure TFPMakeRunnerClean.Execute;
+function TFPMakeRunnerClean.Execute: Boolean;
 begin
-  RunFPMake('clean');
+  Result := RunFPMake('clean') = 0;
 end;
 
 
-procedure TFPMakeRunnerManifest.Execute;
+function TFPMakeRunnerManifest.Execute: Boolean;
 begin
-  RunFPMake('manifest');
+  Result := RunFPMake('manifest') = 0;
 end;
 
 
-procedure TFPMakeRunnerArchive.Execute;
+function TFPMakeRunnerArchive.Execute: Boolean;
 var
   StoredLocalPrefix: string;
   StoredGlobalPrefix: string;
@@ -534,7 +540,7 @@ begin
   PackageManager.CompilerOptions.GlobalPrefix := '';
   PackageManager.CompilerOptions.LocalPrefix := '';
   try
-    RunFPMake('archive');
+    Result := RunFPMake('archive') = 0;
   finally
     PackageManager.CompilerOptions.GlobalPrefix := StoredGlobalPrefix;
     PackageManager.CompilerOptions.LocalPrefix := StoredLocalPrefix;

+ 8 - 7
packages/fppkg/src/pkghandler.pp

@@ -44,8 +44,8 @@ type
   Public
     Constructor Create(AOwner:TComponent; APackageManager:TpkgFPpkg; const APackageName:string); virtual;
     function PackageLogPrefix:String;
-    procedure ExecuteAction(const APackageName,AAction:string);
-    procedure Execute; virtual; abstract;
+    function ExecuteAction(const APackageName,AAction:string): Boolean;
+    function Execute: Boolean; virtual; abstract;
     Property PackageName:string Read FPackageName;
   end;
   TPackageHandlerClass = class of TPackageHandler;
@@ -55,7 +55,7 @@ type
 // Actions/PkgHandler
 procedure RegisterPkgHandler(const AAction:string;pkghandlerclass:TPackageHandlerClass);
 function GetPkgHandler(const AAction:string):TPackageHandlerClass;
-procedure ExecuteAction(const APackageName,AAction:string; PackageManager: TpkgFPpkg);
+function ExecuteAction(const APackageName,AAction:string; PackageManager: TpkgFPpkg): Boolean;
 
 function PackageManifestFile(APackage:TFPPackage): String;
 procedure ClearExecutedAction;
@@ -94,11 +94,12 @@ begin
 end;
 
 
-procedure ExecuteAction(const APackageName,AAction:string; PackageManager: TpkgFPpkg);
+function ExecuteAction(const APackageName,AAction:string; PackageManager: TpkgFPpkg): Boolean;
 var
   pkghandlerclass : TPackageHandlerClass;
   FullActionName : string;
 begin
+  Result := True;
   // Check if we have already executed or are executing the action
   FullActionName:=APackageName+AAction;
   if ExecutedActions.Find(FullActionName)<>nil then
@@ -114,7 +115,7 @@ begin
   With pkghandlerclass.Create(nil,PackageManager,APackageName) do
     try
       Log(llDebug,SLogRunAction+' start',[AAction]);
-      Execute;
+      Result := Execute;
       Log(llDebug,SLogRunAction+' end',[AAction]);
     finally
       Free;
@@ -255,9 +256,9 @@ begin
 end;
 
 
-procedure TPackageHandler.ExecuteAction(const APackageName,AAction:string);
+function TPackageHandler.ExecuteAction(const APackageName, AAction: string): Boolean;
 begin
-  pkghandler.ExecuteAction(APackageName,AAction,PackageManager);
+  Result := pkghandler.ExecuteAction(APackageName,AAction,PackageManager);
 end;
 
 

+ 10 - 4
packages/fppkg/src/pkgmkconv.pp

@@ -42,7 +42,7 @@ Type
     procedure ConvertFile(const AFileName: String; Src: TStrings; Dir,OS : String);
     Procedure ConvertFile(Const Source,Dest: String);
   Public
-    Procedure Execute;override;
+    function Execute: Boolean;override;
   end;
 
 
@@ -696,12 +696,18 @@ begin
   end;
 end;
 
-procedure TMakeFileConverter.Execute;
+function TMakeFileConverter.Execute: Boolean;
 begin
   if not FileExists('fpmake.pp') then
-    ConvertFile('Makefile.fpc','fpmake.pp')
+    begin
+      ConvertFile('Makefile.fpc','fpmake.pp');
+      Result := True;
+    end
   else
-    Error(SErrConvertFPMakeExists);
+    begin
+      Error(SErrConvertFPMakeExists);
+      Result := False;
+    end;
 end;
 
 begin