Lua.hx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package runci.targets;
  2. import runci.System.*;
  3. import runci.Config.*;
  4. import haxe.io.*;
  5. using StringTools;
  6. class Lua {
  7. static final miscLuaDir = getMiscSubDir('lua');
  8. static public function getLuaDependencies(){
  9. switch (systemName){
  10. case "Linux":
  11. Linux.requireAptPackages(["libpcre2-dev", "libssl-dev", "libreadline-dev"]);
  12. runCommand("pip", ["install", "--user", "hererocks"]);
  13. final pyUserBase = commandResult("python", ["-m", "site", "--user-base"]).stdout.trim();
  14. addToPATH(Path.join([pyUserBase, "bin"]));
  15. case "Mac": {
  16. if (commandSucceed("python3", ["-V"]))
  17. infoMsg('python3 has already been installed.');
  18. else
  19. runNetworkCommand("brew", ["install", "python3"]);
  20. runCommand("pip3", ["install", "hererocks"]);
  21. runCommand("brew", ["install", "openssl"]);
  22. }
  23. }
  24. }
  25. static function installLib(lib : String, version : String, ?server :String){
  26. if (!commandSucceed("luarocks", ["show", lib, version])) {
  27. final args = ["install", lib, version];
  28. if (systemName == "Mac") {
  29. args.push('OPENSSL_DIR=/usr/local/opt/openssl@3');
  30. }
  31. if (server != null){
  32. final server_arg = '--server=$server';
  33. args.push(server_arg);
  34. }
  35. runCommand("luarocks", args);
  36. } else {
  37. infoMsg('Lua dependency $lib is already installed at version $version');
  38. }
  39. }
  40. static public function run(args:Array<String>) {
  41. getLuaDependencies();
  42. for (lv in ["-l5.1", "-l5.2", "-l5.3", "-l5.4"].concat(systemName == 'Linux' && Linux.arch == Arm64 ? [] : ["-j2.0", "-j2.1"])) {
  43. final envpath = getInstallPath() + '/lua_env/lua$lv';
  44. addToPATH(envpath + '/bin');
  45. if (systemName == "Mac" && lv.startsWith("-j")) continue;
  46. Sys.println('--------------------');
  47. Sys.println('Lua Version: $lv');
  48. runCommand("hererocks", [envpath, lv, "-rlatest", "-i"]);
  49. trace('path: ' + Sys.getEnv("PATH"));
  50. runCommand("lua",["-v"]);
  51. runCommand("luarocks", ["config", "--lua-incdir"]);
  52. runCommand("luarocks", ["config", "--lua-libdir"]);
  53. runCommand("luarocks", ["config", "--lua-ver"]);
  54. runCommand("luarocks", ["config", "--system-config"]);
  55. runCommand("luarocks", ["config", "--rock-trees"]);
  56. // Note: don't use a user config
  57. // attemptCommand("luarocks", ["config", "--user-config"]);
  58. installLib("luasec", "1.0.2-1");
  59. installLib("lrexlib-pcre2", "2.9.1-1");
  60. installLib("luasocket", "3.0rc1-2");
  61. //Install bit32 for lua 5.1
  62. if (lv == "-l5.1")
  63. installLib("bit32", "5.2.2-1");
  64. if (lv == "-l5.4") {
  65. installLib("bit32", "5.3.5.1-1");
  66. installLib("luv", "1.44.2-1");
  67. installLib("luautf8", "0.1.5-2");
  68. } else {
  69. installLib("luv", "1.36.0-0");
  70. installLib("luautf8", "0.1.1-1");
  71. }
  72. installLib("hx-lua-simdjson", "0.0.1-1");
  73. changeDirectory(unitDir);
  74. final luaDefine = if (lv.startsWith("-l")) {
  75. lv.replace("-l", "lua").replace(".", "_");
  76. } else lv.replace("-j", "luajit").replace(".", "_");
  77. final luaVer = ["-D", luaDefine];
  78. runCommand("haxe", ["compile-lua.hxml"].concat(args).concat(luaVer));
  79. runCommand("lua", ["bin/unit.lua"]);
  80. changeDirectory(sysDir);
  81. runCommand("haxe", ["compile-lua.hxml"].concat(args).concat(luaVer));
  82. runSysTest("lua", ["bin/lua/sys.lua"]);
  83. changeDirectory(getMiscSubDir("luaDeadCode", "stringReflection"));
  84. runCommand("haxe", ["compile.hxml"]);
  85. changeDirectory(miscLuaDir);
  86. runCommand("haxe", ["run.hxml"]);
  87. }
  88. }
  89. }