xmake.lua 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package("qt6lib")
  2. set_kind("template")
  3. set_homepage("https://www.qt.io")
  4. set_description("Qt is the faster, smarter way to create innovative devices, modern UIs & applications for multiple screens. Cross-platform software development at its best.")
  5. set_license("LGPL-3")
  6. add_configs("shared", {description = "Download shared binaries.", default = true, type = "boolean", readonly = true})
  7. add_configs("vs_runtime", {description = "Set vs compiler runtime.", default = "MD", readonly = true})
  8. -- Sync with qt6base and qt-tools
  9. add_versions("6.3.0", "dummy")
  10. add_versions("6.3.1", "dummy")
  11. add_versions("6.3.2", "dummy")
  12. add_versions("6.4.0", "dummy")
  13. add_versions("6.4.1", "dummy")
  14. add_versions("6.4.2", "dummy")
  15. add_versions("6.4.3", "dummy")
  16. add_versions("6.5.0", "dummy")
  17. add_versions("6.5.1", "dummy")
  18. add_versions("6.5.2", "dummy")
  19. add_versions("6.5.3", "dummy")
  20. add_versions("6.6.0", "dummy")
  21. add_versions("6.6.1", "dummy")
  22. add_versions("6.6.2", "dummy")
  23. add_versions("6.6.3", "dummy")
  24. add_versions("6.7.0", "dummy")
  25. add_versions("6.7.1", "dummy")
  26. add_versions("6.7.2", "dummy")
  27. add_versions("6.8.0", "dummy")
  28. add_versions("6.8.1", "dummy")
  29. add_versions("6.8.2", "dummy")
  30. add_versions("6.8.3", "dummy")
  31. add_versions("6.9.0", "dummy")
  32. add_versions("6.9.1", "dummy")
  33. on_load(function (package)
  34. package:add("deps", "qt6base", {debug = package:is_debug(), version = package:version_str()})
  35. end)
  36. on_fetch(function (package)
  37. local qt = package:dep("qt6base"):fetch()
  38. if not qt then
  39. return
  40. end
  41. -- Ensure all direct dependencies are fetched
  42. for _, dep in ipairs(package:plaindeps()) do
  43. if not dep:fetch() and dep:parents(package:name()) then
  44. return
  45. end
  46. end
  47. local libname = assert(package:data("libname"), "this package must not be used directly")
  48. local links = table.wrap(package:data("links"))
  49. local includedirs = {qt.includedir}
  50. local linkname
  51. local frameworks
  52. if package:is_plat("windows") then
  53. linkname = "Qt6" .. libname
  54. if package:is_debug() then
  55. linkname = linkname .. "d"
  56. end
  57. table.insert(includedirs, path.join(qt.includedir, "Qt" .. libname))
  58. elseif package:is_plat("android") then
  59. linkname = "Qt6" .. libname
  60. if package:is_arch("x86_64", "x64") then
  61. linkname = linkname .. "_x86_64"
  62. elseif package:is_arch("arm64", "arm64-v8a") then
  63. linkname = linkname .. "_arm64-v8a"
  64. elseif package:is_arch("armv7", "armeabi-v7a", "armeabi", "armv7-a", "armv5te") then
  65. linkname = linkname .. "_armeabi-v7a"
  66. elseif package:is_arch("x86") then
  67. linkname = linkname .. "_x86"
  68. end
  69. table.insert(includedirs, path.join(qt.includedir, "Qt" .. libname))
  70. elseif package:is_plat("macosx") then
  71. table.insert(includedirs, path.join(qt.libdir, "Qt" .. libname .. ".framework", "Headers"))
  72. frameworks = "Qt" .. libname
  73. else
  74. linkname = "Qt6" .. libname
  75. table.insert(includedirs, path.join(qt.includedir, "Qt" .. libname))
  76. end
  77. table.insert(links, 1, linkname)
  78. if frameworks then
  79. table.join2(frameworks, package:data("frameworks"))
  80. else
  81. frameworks = package:data("frameworks")
  82. end
  83. return {
  84. qtdir = qt,
  85. version = qt.version,
  86. includedirs = includedirs,
  87. links = links,
  88. linkdirs = qt.libdir,
  89. frameworks = frameworks,
  90. frameworkdirs = qt.libdir,
  91. syslinks = package:data("syslinks")
  92. }
  93. end)
  94. on_install("windows|x64,linux|x86_64,linux|arm64,macosx,mingw|x86_64@windows,linux,macosx", function (package)
  95. local qt = package:dep("qt6base"):data("qt")
  96. assert(qt, "qt6base is required")
  97. end)
  98. on_install("android|arm64-v8a,armeabi-v7a,armeabi,x86_64,x86@windows,linux,macosx", function (package)
  99. local qt = package:dep("qt6base"):data("qt")
  100. assert(qt, "qt6base is required")
  101. end)
  102. on_install("iphoneos,wasm@windows,linux,macosx", function (package)
  103. local qt = package:dep("qt6base"):data("qt")
  104. assert(qt, "qt6base is required")
  105. end)