pkgarchive.pp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. unit pkgarchive;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes,SysUtils,pkghandler;
  6. type
  7. { TUnzipArchive }
  8. TUnzipArchive = Class(TPackagehandler)
  9. Private
  10. Procedure UnzipArchive;
  11. Public
  12. Function Execute(const Args:TActionArgs):boolean;override;
  13. end;
  14. implementation
  15. uses
  16. zipper,
  17. uriparser,
  18. pkgglobals,
  19. pkgmessages;
  20. Procedure DeleteDir(const ADir:string);
  21. const
  22. {$ifdef unix}
  23. AllFiles='*';
  24. {$else}
  25. AllFiles='*.*';
  26. {$endif}
  27. var
  28. Info : TSearchRec;
  29. begin
  30. if FindFirst(ADir+PathDelim+AllFiles,faAnyFile, Info)=0 then
  31. try
  32. repeat
  33. if (Info.Attr and faDirectory)=faDirectory then
  34. DeleteDir(ADir+PathDelim+Info.Name)
  35. else
  36. DeleteFile(ADir+PathDelim+Info.Name);
  37. until FindNext(Info)<>0;
  38. finally
  39. FindClose(Info);
  40. end;
  41. end;
  42. { TFPMakeCompiler }
  43. Procedure TUnzipArchive.UnzipArchive;
  44. Var
  45. BuildDir : string;
  46. ArchiveFile : String;
  47. begin
  48. ArchiveFile:=PackageLocalArchive;
  49. BuildDir:=PackageBuildPath;
  50. { Remove existing builddir }
  51. if DirectoryExists(BuildDir) then
  52. DeleteDir(BuildDir);
  53. { Unzip Archive }
  54. ForceDirectories(BuildDir);
  55. SetCurrentDir(BuildDir);
  56. With TUnZipper.Create do
  57. try
  58. Log(vCommands,SLogUnzippping,[ArchiveFile]);
  59. OutputPath:=PackageBuildPath;
  60. UnZipAllFiles(ArchiveFile);
  61. Finally
  62. Free;
  63. end;
  64. end;
  65. function TUnzipArchive.Execute(const Args:TActionArgs):boolean;
  66. begin
  67. {$warning TODO Check arguments}
  68. UnzipArchive;
  69. result:=true;
  70. end;
  71. initialization
  72. RegisterPkgHandler('unziparchive',TUnzipArchive);
  73. end.