2
0

fpmake.pp 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. {$mode objfpc}{$H+}
  2. program fpmake;
  3. uses {$ifdef unix}cthreads,{$endif} sysutils, fpmkunit;
  4. Procedure CreateConfigFile(CfgFile,BaseDir : String);
  5. Var
  6. F : Text;
  7. Procedure AddLn(S : String);
  8. begin
  9. Writeln(F,S);
  10. end;
  11. begin
  12. if not ForceDirectories(ExtractFilePath(CfgFile)) then
  13. begin
  14. Writeln(StdErr,'Could not create destination directory ',ExtractFilePath(CfgFile));
  15. Halt(2);
  16. end;
  17. Assign(F,CfgFile);
  18. try
  19. Rewrite(F);
  20. except
  21. On E : exception do
  22. begin
  23. Writeln(StdErr,'Could not create config file ',CfgFile,' : ',E.Message);
  24. Halt(3);
  25. end;
  26. end;
  27. if (BaseDir<>'') then
  28. BaseDir:=ExcludeTrailingPathDelimiter(BaseDir);
  29. if (BaseDir<>'') then
  30. BaseDir:=ExcludeLeadingPathDelimiter(BaseDir);
  31. Addln('#');
  32. Addln('# Minimal config file for pas2js compiler');
  33. Addln('#');
  34. Addln('# not yet implemented: -d is the same as #DEFINE');
  35. Addln('# not yet implemented: -u is the same as #UNDEF');
  36. Addln('#');
  37. Addln('# Write always a nice logo ;)');
  38. Addln('-l');
  39. Addln('');
  40. Addln('# Display Hints, Warnings and Notes');
  41. Addln('-vwnh');
  42. Addln('# If you don''t want so much verbosity use');
  43. Addln('#-vw');
  44. Addln('');
  45. Addln('-Fu$CfgDir/'+BASEDIR+'/rtl');
  46. Addln('-Fu$CfgDir/'+BASEDIR+'/fcl-base');
  47. Addln('-Fu$CfgDir/'+BASEDIR+'/fcl-db');
  48. Addln('-Fu$CfgDir/'+BASEDIR+'/fpcunit');
  49. Addln('');
  50. Addln('#IFDEF nodejs');
  51. Addln('-Jirtl.js');
  52. Addln('#ENDIF');
  53. Addln('');
  54. Addln('# end.');
  55. Close(F);
  56. end;
  57. Procedure AddInstallFiles(Files : TConditionalDestStrings; ADir,AllowedExt,APrefix : String);
  58. Var
  59. Info : TSearchRec;
  60. ADestDir,E : String;
  61. P : Integer;
  62. begin
  63. ADestDir:=ADir;
  64. P:=Pos(PathDelim,ADestDir);
  65. if (P>0) then
  66. Delete(ADestDir,1,P);
  67. ADir:=IncludeTrailingPathDelimiter(ADir);
  68. ADestDir:=IncludeTrailingPathDelimiter(ADestDir);
  69. if FindFirst(aDir+AllFilesMask,0,Info)=0 then
  70. try
  71. Repeat
  72. E:=LowerCase(ExtractFileExt(Info.Name));
  73. if pos(E,AllowedExt)>0 then
  74. Files.Add(ADir+Info.Name,aPrefix+ADestDir);
  75. until (FindNext(Info)<>0);
  76. finally
  77. FindClose(Info);
  78. end;
  79. end;
  80. Procedure AddPackageFiles(Files : TConditionalDestStrings; ADir,APrefix : String);
  81. Const
  82. PackExt = '.pp.pas.inc.lpk';
  83. begin
  84. AddInstallFiles(Files,'packages'+PathDelim+ADir,packExt,aPrefix);
  85. end;
  86. Procedure AddDemoFiles(Files : TConditionalDestStrings; ADir,APrefix : String);
  87. Const
  88. DemoExt = '.pp.pas.inc.lpr.lpi.html.md';
  89. begin
  90. AddInstallFiles(Files,'demo'+PathDelim+ADir,demoExt,APrefix);
  91. end;
  92. Var
  93. P : TPackage;
  94. UnitDir,DemoDir,BD : String;
  95. begin
  96. With Installer do
  97. begin
  98. P:=AddPackage('pas2js');
  99. P.Author := 'Free Pascal Team';
  100. P.License := 'LGPL with modification';
  101. P.HomepageURL := 'www.freepascal.org';
  102. P.Description := 'Convert pascal sources to javascript.';
  103. P.Email := '[email protected]';
  104. P.NeedLibC:= false;
  105. P.Version:='3.1.1';
  106. P.SourcePath.Add('compiler/utils/pas2js');
  107. P.UnitPath.Add('compiler/utils/pas2js');
  108. P.UnitPath.Add('compiler/packages/pastojs/src');
  109. P.UnitPath.Add('compiler/packages/fcl-passrc/src');
  110. P.UnitPath.Add('compiler/packages/fcl-js/src');
  111. P.UnitPath.Add('compiler/packages/fcl-json/src');
  112. {$IFDEF VER3_0}
  113. P.UnitPath.Add('compiler/packages/compat');
  114. {$ENDIF}
  115. P.UnitPath.Add('compiler/packages/webidl/src');
  116. P.IncludePath.Add('compiler/packages/pastojs/src');
  117. P.Dependencies.Clear;
  118. Defaults.Options.Add('-Sc');
  119. P.Targets.AddProgram('pas2js.pp');
  120. P.Targets.AddProgram('webidl2pas.pp');
  121. {$IF FPC_FULLVERSION>=30101}
  122. P.Targets.AddLibrary('pas2jslib.pp');
  123. {$ENDIF}
  124. P.Targets.AddImplicitUnit('fpjson',False).ResourceStrings:=True;
  125. P.Targets.AddImplicitUnit('fppas2js',False).ResourceStrings:=True;
  126. P.Targets.AddImplicitUnit('fppjssrcmap',False);
  127. P.Targets.AddImplicitUnit('jsbase',False);
  128. P.Targets.AddImplicitUnit('jsonparser',False).ResourceStrings:=True;
  129. P.Targets.AddImplicitUnit('jsonreader',False).ResourceStrings:=True;
  130. P.Targets.AddImplicitUnit('jsonscanner',False).ResourceStrings:=True;
  131. P.Targets.AddImplicitUnit('jssrcmap',False);
  132. P.Targets.AddImplicitUnit('jstoken',False);
  133. P.Targets.AddImplicitUnit('jstree',False);
  134. P.Targets.AddImplicitUnit('jswriter',False).ResourceStrings:=True;
  135. P.Targets.AddImplicitUnit('pas2jscompiler',False);
  136. P.Targets.AddImplicitUnit('pas2jsfilecache',False);
  137. P.Targets.AddImplicitUnit('pas2jsfileutils',False);
  138. P.Targets.AddImplicitUnit('pas2jslibcompiler',False);
  139. P.Targets.AddImplicitUnit('pas2jslogger',False);
  140. P.Targets.AddImplicitUnit('pas2jspparser',False);
  141. P.Targets.AddImplicitUnit('pasresolveeval',False).ResourceStrings:=True;
  142. P.Targets.AddImplicitUnit('pasresolver',False);
  143. P.Targets.AddImplicitUnit('pastree',False).ResourceStrings:=True;
  144. P.Targets.AddImplicitUnit('pasuseanalyzer',False);
  145. P.Targets.AddImplicitUnit('pparser',False).ResourceStrings:=True;
  146. P.Targets.AddImplicitUnit('pscanner',False).ResourceStrings:=True;
  147. P.Targets.AddImplicitUnit('webidldefs',False).ResourceStrings:=True;
  148. P.Targets.AddImplicitUnit('webidlscanner',False).ResourceStrings:=True;
  149. P.Targets.AddImplicitUnit('webidlparser',False).ResourceStrings:=True;
  150. P.Targets.AddImplicitUnit('webidltopas',False).ResourceStrings:=True;
  151. // Determine unit files location
  152. BD:=IncludeTrailingPathDelimiter(P.GetBinOutputDir(Defaults.BuildCPU,Defaults.BuildOS));
  153. UnitDir:=ExcludeTrailingPathDelimiter(Defaults.UnitInstallDir);
  154. UnitDir:=ExcludeTrailingPathDelimiter(ExtractFilePath(UnitDir));
  155. UnitDir:=ExcludeTrailingPathDelimiter(ExtractFilePath(UnitDir));
  156. UnitDir:=ExtractFilePath(UnitDir);
  157. UnitDir:=UnitDir+'pas2js'+PathDelim;
  158. Case Installer.RunMode of
  159. rmInstall,rmArchive,rmZipInstall:
  160. begin
  161. // Config file
  162. // Create config file
  163. CreateConfigFile(BD+'pas2js.cfg',ExtractRelativePath(IncludeTrailingPathDelimiter(Defaults.BinInstallDir),IncludeTrailingPathDelimiter(UnitDir)));
  164. P.InstallFiles.Add(BD+'pas2js.cfg',Defaults.BinInstallDir);
  165. P.InstallFiles.Add('compiler/utils/pas2js/dist/rtl.js',IncludeTrailingPathDelimiter(UnitDir)+'rtl');
  166. AddPackageFiles(P.InstallFiles,'rtl',UnitDir);
  167. AddPackageFiles(P.InstallFiles,'fcl-base',UnitDir);
  168. AddPackageFiles(P.InstallFiles,'fcl-db',UnitDir);
  169. AddPackageFiles(P.InstallFiles,'fpcunit',UnitDir);
  170. // Demo files
  171. DemoDir:=IncludeTrailingPathDelimiter(Defaults.ExamplesInstallDir);
  172. AddDemoFiles(P.InstallFiles,'rtl',DemoDir);
  173. AddDemoFiles(P.InstallFiles,'fcldb',DemoDir);
  174. AddDemoFiles(P.InstallFiles,'fpcunit',DemoDir);
  175. AddDemoFiles(P.InstallFiles,'fpreport',DemoDir);
  176. AddDemoFiles(P.InstallFiles,'hotreload',DemoDir);
  177. AddDemoFiles(P.InstallFiles,'jquery',DemoDir);
  178. end;
  179. rmClean:
  180. if FileExists(BD+'pas2js.cfg') then
  181. P.CleanFiles.Add(BD+'pas2js.cfg');
  182. end;
  183. Run;
  184. end;
  185. end.