fpmake.pp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. {$ifndef ALLPACKAGES}
  2. {$mode objfpc}{$H+}
  3. program fpmake;
  4. uses {$ifdef unix}cthreads,{$endif} sysutils, classes, fpmkunit;
  5. {$ENDIF ALLPACKAGES}
  6. Type
  7. THackPackage = class(TPackage)
  8. property Dictionary;
  9. end;
  10. procedure BeforeInstall_LibPipeWire(Sender: TObject);
  11. Var
  12. P : TPackage;
  13. lInstDir,lDest : string;
  14. begin
  15. P:=Sender as TPackage;
  16. lDest:=P.GetUnitsOutputDir(Defaults.BuildTarget);
  17. if P.Directory<>'' then
  18. lDest:=IncludeTrailingPathDelimiter(P.Directory)+lDest;
  19. lDest:=IncludeTrailingPathDelimiter(lDest)+'spabridge.o';
  20. if FileExists(lDest) then
  21. begin
  22. // no prefix this time
  23. lDest:=P.GetUnitsOutputDir(Defaults.BuildTarget);
  24. lDest:=IncludeTrailingPathDelimiter(lDest)+'spabridge.o';
  25. // not clear why packagename does not exist at this point?
  26. THackPackage(P).Dictionary.AddVariable('packagename',P.Name);
  27. Writeln('Defaults ',Defaults.UnitInstallDir);
  28. lInstDir:=THackPackage(P).Dictionary.ReplaceStrings(Defaults.UnitInstallDir);
  29. P.InstallFiles.Add(lDest,lInstDir);
  30. end;
  31. end;
  32. procedure BeforeCompile_LibPipeWire(Sender: TObject);
  33. var
  34. lGCC : string;
  35. lArgs : TStrings;
  36. lDest,lSrc : String;
  37. P : TPackage;
  38. begin
  39. P:=Sender as TPackage;
  40. lDest:=P.GetUnitsOutputDir(Defaults.BuildTarget);
  41. if P.Directory<>'' then
  42. begin
  43. lSrc:=IncludeTrailingPathDelimiter(P.Directory);
  44. lDest:=IncludeTrailingPathDelimiter(P.Directory)+lDest;
  45. end
  46. else
  47. lSrc:=IncludeTrailingPathDelimiter(Installer.BuildEngine.StartDir);
  48. lSrc:=IncludeTrailingPathDelimiter(LSrc+'src')+'spabridge.c';
  49. lDest:=IncludeTrailingPathDelimiter(lDest)+'spabridge.o';
  50. lgcc:=ExeSearch('gcc',GetEnvironmentVariable('PATH'));
  51. lArgs:=TStringList.Create();
  52. try
  53. lArgs.Add('-c');
  54. lArgs.Add('-I/usr/include/spa-0.2/');
  55. lArgs.Add(lSrc);
  56. lArgs.Add('-o'+lDest);
  57. try
  58. Installer.BuildEngine.ExecuteCommand(lgcc,lArgs);
  59. except
  60. On E : Exception do
  61. Installer.BuildEngine.Log(vlWarning,'Could not compile spabridge.c, it will need to be compiled manually. install libpipewire-0.3-dev package');
  62. end;
  63. finally
  64. lArgs.Free;
  65. end;
  66. end;
  67. procedure add_libpipewire(const ADirectory: string);
  68. Var
  69. P : TPackage;
  70. T : TTarget;
  71. begin
  72. With Installer do
  73. begin
  74. P:=AddPackage('libpipewire');
  75. P.ShortName:='libpw';
  76. P.Directory:=ADirectory;
  77. P.Version:='3.3.1';
  78. P.SourcePath.Add('src');
  79. P.IncludePath.Add('src');
  80. { only enable for darwin after testing }
  81. P.OSes := [linux];
  82. if Defaults.CPU=jvm then
  83. P.OSes := [];
  84. P.SupportBuildModes:= [bmOneByOne];
  85. P.BeforeCompileProc:=@BeforeCompile_LibPipeWire;
  86. P.BeforeInstallProc:=@BeforeInstall_LibPipeWire;
  87. T:=P.Targets.AddUnit('libspa.pp');
  88. With T.Dependencies do
  89. begin
  90. AddInclude('spabridge.inc');
  91. end;
  92. T:=P.Targets.AddUnit('libpipewire.pp');
  93. with T.Dependencies do
  94. begin
  95. AddUnit('libspa');
  96. AddInclude('array.inc');
  97. AddInclude('permission.inc');
  98. AddInclude('client.inc');
  99. AddInclude('loop.inc');
  100. AddInclude('properties.inc');
  101. AddInclude('work_queue.inc');
  102. AddInclude('context.inc');
  103. AddInclude('device.inc');
  104. AddInclude('mem.inc');
  105. AddInclude('buffers.inc');
  106. AddInclude('core.inc');
  107. AddInclude('factory.inc');
  108. AddInclude('keys.inc');
  109. AddInclude('log.inc');
  110. AddInclude('link.inc');
  111. AddInclude('main_loop.inc');
  112. AddInclude('map.inc');
  113. AddInclude('module.inc');
  114. AddInclude('node.inc');
  115. AddInclude('protocol.inc');
  116. AddInclude('proxy.inc');
  117. AddInclude('port.inc');
  118. AddInclude('stream.inc');
  119. AddInclude('filter.inc');
  120. AddInclude('data_loop.inc');
  121. AddInclude('type.inc');
  122. AddInclude('utils.inc');
  123. AddInclude('version.inc');
  124. AddInclude('thread_loop.inc');
  125. AddInclude('core_impl.inc');
  126. AddInclude('loop_impl.inc');
  127. end;
  128. P.NamespaceMap:='namespaces.lst';
  129. end;
  130. end;
  131. {$ifndef ALLPACKAGES}
  132. begin
  133. add_libpipewire('');
  134. Installer.Run;
  135. end.
  136. {$endif ALLPACKAGES}