xmake.lua 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package("msys2")
  2. set_kind("toolchain")
  3. set_homepage("https://www.msys2.org/")
  4. set_description("Software Distribution and Building Platform for Windows")
  5. add_deps("msys2-base")
  6. add_configs("msystem", {description = "Set msys2 system.", type = "string", values = {"MSYS", "MINGW32", "MINGW64", "UCRT64", "CLANG32", "CLANG64", "CLANGARM64"}})
  7. add_configs("pathtype", {description = "Set path type.", default = "inherit", type = "string", values = {"inherit"}})
  8. add_configs("make", {description = "Install gnumake.", default = false, type = "boolean"})
  9. add_configs("gcc", {description = "Install gcc.", default = false, type = "boolean"})
  10. add_configs("uchardet", {description = "Install uchardet.", default = false, type = "boolean"})
  11. add_configs("diffutils", {description = "Install diffutils.", default = false, type = "boolean"})
  12. add_configs("base_devel", {description = "Install base-devel.", default = false, type = "boolean"})
  13. add_configs("mingw64_gcc", {description = "Install mingw64 gcc.", default = false, type = "boolean"})
  14. add_configs("mingw64_toolchain", {description = "Install mingw64 toolchain.", default = false, type = "boolean"})
  15. add_configs("mingw32_gcc", {description = "Install mingw32 gcc.", default = false, type = "boolean"})
  16. add_configs("mingw32_toolchain", {description = "Install mingw32 toolchain.", default = false, type = "boolean"})
  17. set_policy("package.precompiled", false)
  18. on_install("@windows|x64", function (package)
  19. local msys2_base = package:dep("msys2-base")
  20. local bash = path.join(msys2_base:installdir("usr/bin"), "bash.exe")
  21. local msystem = package:config("msystem")
  22. if msystem then
  23. package:addenv("MSYSTEM", msystem)
  24. if msystem == "MINGW64" then
  25. package:addenv("PATH", msys2_base:installdir("mingw64/bin"))
  26. elseif msystem == "MINGW32" then
  27. package:addenv("PATH", msys2_base:installdir("mingw32/bin"))
  28. end
  29. end
  30. local pathtype = package:config("pathtype")
  31. if pathtype then
  32. package:addenv("MSYS2_PATH_TYPE", pathtype)
  33. end
  34. package:addenv("CHERE_INVOKING", "1")
  35. -- install additional packages
  36. local packages = {
  37. "gcc", "make", "diffutils",
  38. base_devel = "base-devel",
  39. uchardet = "mingw-w64-x86_64-uchardet",
  40. mingw32_gcc = "mingw-w64-i686-gcc",
  41. mingw32_toolchain = "mingw-w64-i686-toolchain",
  42. mingw64_gcc = "mingw-w64-x86_64-gcc",
  43. mingw64_toolchain = "mingw-w64-x86_64-toolchain"}
  44. for k, v in pairs(packages) do
  45. local configname = type(k) == "number" and v or k
  46. local packagename = v
  47. if package:config(configname) then
  48. os.vrunv(bash, {"-leo", "pipefail", "-c", "pacman --noconfirm -S --needed --overwrite * " .. packagename})
  49. end
  50. end
  51. end)
  52. on_test(function (package)
  53. os.vrun("sh --version")
  54. os.vrun("perl --version")
  55. os.vrun("ls -l")
  56. os.vrun("grep --version")
  57. os.vrun("uname -a")
  58. local msystem = package:config("msystem")
  59. if msystem then
  60. if msystem == "MINGW64" then
  61. if package:config("mingw64_gcc") or package:config("mingw64_toolchain") then
  62. os.vrun("x86_64-w64-mingw32-gcc --version")
  63. end
  64. elseif msystem == "MINGW32" then
  65. if package:config("mingw32_gcc") or package:config("mingw32_toolchain") then
  66. os.vrun("i686-w64-mingw32-gcc --version")
  67. end
  68. end
  69. end
  70. end)