pkgfpmake.pp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. unit pkgfpmake;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils,pkghandler;
  6. type
  7. { TFPMakeCompiler }
  8. TFPMakeCompiler = Class(TPackagehandler)
  9. Private
  10. Procedure CompileFPMake;
  11. Public
  12. Function Execute(const Args:TActionArgs):boolean;override;
  13. end;
  14. { TFPMakeRunner }
  15. TFPMakeRunner = Class(TPackagehandler)
  16. Protected
  17. Function RunFPMake(const Command:string):Integer;
  18. end;
  19. { TFPMakeRunnerBuild }
  20. TFPMakeRunnerBuild = Class(TFPMakeRunner)
  21. Public
  22. Function Execute(const Args:TActionArgs):boolean;override;
  23. end;
  24. { TFPMakeRunnerInstall }
  25. TFPMakeRunnerInstall = Class(TFPMakeRunner)
  26. Public
  27. Function Execute(const Args:TActionArgs):boolean;override;
  28. end;
  29. implementation
  30. uses
  31. pkgoptions,
  32. pkgglobals,
  33. pkgmessages;
  34. { TFPMakeCompiler }
  35. Procedure TFPMakeCompiler.CompileFPMake;
  36. Var
  37. O,C : String;
  38. FPMakeBin,
  39. FPMakeSrc : string;
  40. HaveFpmake : boolean;
  41. begin
  42. SetCurrentDir(PackageBuildPath);
  43. { Check for fpmake source }
  44. FPMakeBin:='fpmake'+ExeExt;
  45. FPMakeSrc:='fpmake.pp';
  46. HaveFpmake:=FileExists(FPMakeSrc);
  47. If Not HaveFPMake then
  48. begin
  49. HaveFPMake:=FileExists('fpmake.pas');
  50. If HaveFPMake then
  51. FPMakeSrc:='fpmake.pas';
  52. end;
  53. { Need to compile fpmake executable? }
  54. if not FileExists(FPMakeBin) or
  55. (FileAge(FPMakeBin)<FileAge(FPMakeSrc)) then
  56. begin
  57. if Not HaveFPMake then
  58. Error(SErrMissingFPMake);
  59. { Call compiler }
  60. C:=Defaults.Compiler;
  61. O:=FPmakeSrc;
  62. If ExecuteProcess(C,O)<>0 then
  63. Error(SErrFailedToCompileFPCMake)
  64. end
  65. else
  66. Log(vCommands,SLogNotCompilingFPMake);
  67. end;
  68. function TFPMakeCompiler.Execute(const Args:TActionArgs):boolean;
  69. begin
  70. {$warning TODO Check arguments}
  71. CompileFPMake;
  72. result:=true;
  73. end;
  74. { TFPMakeRunner }
  75. Function TFPMakeRunner.RunFPMake(const Command:string) : Integer;
  76. Var
  77. I : integer;
  78. FPMakeBin : string;
  79. begin
  80. FPMakeBin:='fpmake'+ExeExt;
  81. SetCurrentDir(PackageBuildPath);
  82. Result:=ExecuteProcess(FPMakeBin,Command);
  83. end;
  84. function TFPMakeRunnerBuild.Execute(const Args:TActionArgs):boolean;
  85. begin
  86. result:=(RunFPMake('--build')=0);
  87. end;
  88. function TFPMakeRunnerInstall.Execute(const Args:TActionArgs):boolean;
  89. begin
  90. result:=(RunFPMake('--install')=0);
  91. end;
  92. initialization
  93. RegisterPkgHandler('compilefpmake',TFPMakeCompiler);
  94. RegisterPkgHandler('fpmakebuild',TFPMakeRunnerBuild);
  95. RegisterPkgHandler('fpmakeinstall',TFPMakeRunnerInstall);
  96. end.