xmake.lua 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package("tdtl")
  2. set_kind("binary")
  3. set_description("Toolset for building tdlib.")
  4. set_license("BSL-1.0")
  5. add_urls("https://github.com/tdlib/td.git")
  6. add_versions("1.8.51", "bb474a201baa798784d696d2d9d762a9d2807f96")
  7. local tools = {
  8. {
  9. project = "tl-parser",
  10. executable = "tl-parser",
  11. sourcedir = "td/generate/tl-parser/"
  12. },
  13. {
  14. project = "tl_generate_mtproto",
  15. executable = "generate_mtproto",
  16. sourcedir = "td/generate/"
  17. },
  18. {
  19. project = "tl_generate_common",
  20. executable = "generate_common",
  21. sourcedir = "td/generate/"
  22. },
  23. {
  24. project = "tl_generate_json",
  25. executable = "generate_json",
  26. sourcedir = "td/generate/"
  27. },
  28. {
  29. project = "generate_mime_types_gperf",
  30. executable = "generate_mime_types_gperf",
  31. sourcedir = "tdutils/generate/"
  32. }
  33. }
  34. add_deps("cmake", "zlib")
  35. add_deps("gperf")
  36. on_install(function (package)
  37. local targets = {}
  38. for _, tool in ipairs(tools) do
  39. table.insert(targets, tool.project)
  40. end
  41. io.replace("tdutils/CMakeLists.txt", "add_dependencies(tdutils tdmime_auto)", "", {plain = true})
  42. io.replace("tdutils/CMakeLists.txt", "${TDMIME_AUTO}\n", "", {plain = true})
  43. io.replace("td/generate/CMakeLists.txt", "${TDMIME_AUTO}\n", "", {plain = true})
  44. io.replace("td/generate/CMakeLists.txt", "COMMAND", "COMMENT", {plain = true})
  45. if is_plat("mingw", "msys") then
  46. io.replace("td/generate/tl-parser/wgetopt.h", "#ifdef __GNU_LIBRARY__", "#if 1", {plain = true})
  47. io.replace("td/generate/tl-parser/wgetopt.c", "extern char *getenv();", "#include <stdlib.h>", {plain = true})
  48. end
  49. import("package.tools.cmake").build(package, {}, {target = targets, builddir = "build"})
  50. os.cd("build")
  51. for _, tool in ipairs(tools) do
  52. local tooldir = tool.sourcedir .. tool.executable
  53. if is_host("windows") then
  54. tooldir = tooldir .. ".exe"
  55. end
  56. os.cp(tooldir, package:installdir("bin"))
  57. end
  58. end)
  59. on_test(function (package)
  60. for _, tool in ipairs(tools) do
  61. local tooldir = package:installdir("bin", tool.executable)
  62. if is_host("windows") then
  63. tooldir = tooldir .. ".exe"
  64. end
  65. assert(os.isexec(tooldir), tool.executable .. " not found!")
  66. end
  67. end)