2
0

xmake.lua 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package("drogon")
  2. set_homepage("https://github.com/an-tao/drogon/")
  3. set_description("Drogon: A C++14/17/20 based HTTP web application framework running on Linux/macOS/Unix/Windows")
  4. set_license("MIT")
  5. add_urls("https://github.com/an-tao/drogon/archive/refs/tags/$(version).tar.gz",
  6. "https://github.com/an-tao/drogon.git", {submodules = false})
  7. add_versions("v1.9.11", "f50098bb21bd0013f8da16b796313816bf79b0ecb1d74bfe33216d5400ab2002")
  8. add_versions("v1.9.10", "5de93fe16682388f363bb4b26ab00b0253d39108d8e7f53d5637c1b7da59a48f")
  9. add_versions("v1.9.9", "4155f78196902ef2f9d06b708897c9e8acaa1536cc4a8c8da9726ceb8ada2aaf")
  10. add_versions("v1.9.8", "62332a4882cc7db1c7cf04391b65c91ddf6fcbb49af129fc37eb0130809e0449")
  11. add_versions("v1.9.6", "a81d0ea0e87b0214aa56f7fa7bb851011efe606af67891a0945825104505a08a")
  12. add_versions("v1.9.5", "ec17882835abeb0672db29cb36ab0c5523f144d5d8ff177861b8f5865803eaae")
  13. add_versions("v1.9.4", "b23d9d01d36fb1221298fcdbedcf7fd3e1b8b8821bf6fb8ed073c8b0c290d11d")
  14. add_versions("v1.9.3", "fb4ef351b3e4c06ed850cfbbf50c571502decb1738fb7d62a9d7d70077c9fc23")
  15. add_versions("v1.4.1", "ad794d7744b600240178348c15e216c919fe7a2bc196cf1239f129aee2af19c7")
  16. add_versions("v1.6.0", "9f8802b579aac29e9eddfb156e432276727a3d3c49fffdf453a2ddcd1cb69093")
  17. add_versions("v1.7.1", "a0bce1f32b6e1321486bb25c55ca7bd7a577cbd53f1e7be47367d0f9733730f1")
  18. add_versions("v1.7.3", "36dc5a3acad3b8a32bb1364764b26cf01c687a4f62358de9632e055b156313a6")
  19. add_versions("v1.7.5", "e2af7c55dcabafef16f26f5b3242692f5a2b54c19b7b626840bf9132d24766f6")
  20. add_versions("v1.8.0", "bc6503cf213ed961d4a5e9fd7cb8e75b6b11045a67840ea2241e57321dd8711b")
  21. add_versions("v1.8.1", "9665f001355cc72a5a9db941ae349cec50959d18bf44eb6c09311bf9c78336a4")
  22. add_versions("v1.8.2", "1182cab00c33e400eac617c6dbf44fa2f358e1844990b6b8c5c87783024f9971")
  23. add_versions("v1.9.1", "0f8bab22e02681d05787c88cbef5d04b105f6644ebf7cf29898d0a52ebe959e4")
  24. add_patches("1.4.1", path.join(os.scriptdir(), "patches", "1.4.1", "trantor.patch"), "7f9034a27bb63de8dedb80dd9f246ea7aa7724c87f2c0d0054f4b6097ea2a862")
  25. add_patches("1.4.1", path.join(os.scriptdir(), "patches", "1.4.1", "resolv.patch" ), "a1054822bf91f5f06de8bca9b1bd8859233228159a8ff8014ce6329d6c000f26")
  26. add_patches("1.6.0", path.join(os.scriptdir(), "patches", "1.6.0", "trantor.patch"), "87e317bf5e45b3f3dfe781db8a0af9603ebdab057a6aedbc36d8aec9e0da58a7")
  27. add_patches("1.6.0", path.join(os.scriptdir(), "patches", "1.6.0", "resolv.patch" ), "dc144ff1cdcfee413efbcdc568fed587318289e8fa1bb0da9d2ea94a15588b25")
  28. add_patches("1.7.1", path.join(os.scriptdir(), "patches", "1.7.1", "trantor.patch"), "3f93a1e78ba45c8f1e85c28d4fdbbd3e7961078da8cf417a97d8797a91fa2167")
  29. add_patches("1.7.1", path.join(os.scriptdir(), "patches", "1.7.1", "resolv.patch" ), "75d3618374d15a5ec12681c8659e183f3e620acc43c77ae66e7bea21a25ca546")
  30. add_patches(">=1.7.3 <1.8.0", path.join(os.scriptdir(), "patches", "1.7.3", "trantor.patch"), "27e479dd0e3f8adc75c9c21fe895937f727c3102e5bfb21ac3289d6ad2795b7a")
  31. add_patches(">=1.7.3 <1.8.0", path.join(os.scriptdir(), "patches", "1.7.3", "resolv.patch" ), "49694f090e169a5c0e524726e8b85ad0bac76c05ed633c60e986849c2e5adb85")
  32. add_patches("1.8.0", path.join(os.scriptdir(), "patches", "1.8.0", "redis.patch" ), "cf09beb4f07fd970ef4ad8911eec71ce7c94609ad9fbf1626b5ca8fcd070e09e")
  33. add_patches(">=1.8.0 <1.8.4", path.join(os.scriptdir(), "patches", "1.8.0", "resolv.patch"), "e9b6b320c70d17024931be8481f7b6413681216113466b5d6699431bb98d50e2")
  34. add_patches(">=1.8.0", path.join(os.scriptdir(), "patches", "1.8.0", "config.patch"), "67a921899a24c1646be6097943cc2ed8228c40f177493451f011539c6df0ed76")
  35. add_patches(">=1.8.0", path.join(os.scriptdir(), "patches", "1.8.0", "check.patch"), "e4731995bb754f04e1bb813bfe3dfb480a850fbbd5cdb48d5a53b32b4ed8669c")
  36. add_patches(">=1.8.2 <1.8.5", path.join(os.scriptdir(), "patches", "1.8.2", "gcc13.patch"), "d2842a734df52c590ab950414c7a95a1ac1be48f8680f909d0eeba5f36087cb0")
  37. add_patches(">=1.9.1", path.join(os.scriptdir(), "patches", "1.9.1", "resolv.patch"), "2b511e60fe99062396accab6b25d0092e111a83db11cffc23ce8e790370d017c")
  38. if is_plat("windows") then
  39. add_patches("1.9.6", path.join(os.scriptdir(), "patches", "1.9.6", "windows-build.patch"), "4a798dc3ba7df2f1541ecf66b1b03bab15f200d310ac63f7893770cb3b199453")
  40. end
  41. add_configs("c_ares", {description = "Enable async DNS query support.", default = false, type = "boolean"})
  42. add_configs("mysql", {description = "Enable mysql support.", default = false, type = "boolean"})
  43. add_configs("openssl", {description = "Enable openssl support.", default = true, type = "boolean"})
  44. add_configs("postgresql", {description = "Enable postgresql support.", default = false, type = "boolean"})
  45. add_configs("sqlite3", {description = "Enable sqlite3 support.", default = false, type = "boolean"})
  46. add_configs("redis", {description = "Enable redis support.", default = false, type = "boolean"})
  47. add_configs("yaml", {description = "Enable yaml support.", default = false, type = "boolean"})
  48. add_configs("spdlog", {description = "Allow using the spdlog logging library", default = false, type = "boolean"})
  49. add_configs("cpp20", {description = "Enable c++ 20 support.", default = false, type = "boolean"})
  50. add_deps("cmake")
  51. add_deps("jsoncpp", "brotli", "zlib")
  52. if not is_plat("windows", "mingw", "msys") then
  53. add_deps("libuuid")
  54. end
  55. if is_plat("windows") then
  56. -- enable mtt for drogon
  57. set_policy("package.msbuild.multi_tool_task", true)
  58. add_syslinks("ws2_32", "rpcrt4", "crypt32", "advapi32", "iphlpapi")
  59. elseif is_plat("mingw") then
  60. add_syslinks("ws2_32", "rpcrt4", "crypt32", "advapi32", "iphlpapi")
  61. elseif is_plat("linux", "bsd") then
  62. add_syslinks("pthread", "dl")
  63. end
  64. if on_check then
  65. on_check("wasm", function (target)
  66. raise("package(drogon) dep(openssl) unsupported platform")
  67. end)
  68. end
  69. on_load(function(package)
  70. local configdeps = {c_ares = "c-ares",
  71. mysql = "mariadb-connector-c",
  72. openssl = "openssl",
  73. postgresql = "postgresql",
  74. sqlite3 = "sqlite3",
  75. redis = "hiredis",
  76. yaml = "yaml-cpp"}
  77. for name, dep in pairs(configdeps) do
  78. if package:config(name) then
  79. package:add("deps", dep)
  80. end
  81. end
  82. if package:version() and package:version():le("v1.9.2") then
  83. package:config_set("spdlog", false)
  84. end
  85. if package:config("spdlog") then
  86. package:add("defines", "DROGON_SPDLOG_SUPPORT")
  87. package:add("deps", "trantor", {configs = {spdlog = true}})
  88. else
  89. package:add("deps", "trantor")
  90. end
  91. end)
  92. on_install("!android", function (package)
  93. io.replace("cmake/templates/config.h.in", "\"@COMPILATION_FLAGS@@DROGON_CXX_STANDARD@\"", "R\"(@COMPILATION_FLAGS@@DROGON_CXX_STANDARD@)\"", {plain = true})
  94. io.replace("cmake_modules/FindMySQL.cmake", "PATH_SUFFIXES mysql", "PATH_SUFFIXES mysql mariadb", {plain = true})
  95. local trantor = package:dep("trantor")
  96. if (not trantor:is_system() and not trantor:config("shared")) or package:config("openssl") then
  97. if package:is_plat("windows", "mingw") then
  98. io.replace("CMakeLists.txt", "Trantor::Trantor", "Trantor::Trantor ws2_32 user32 crypt32 advapi32", {plain = true})
  99. end
  100. end
  101. local configs = {
  102. "-DBUILD_EXAMPLES=OFF",
  103. "-DUSE_SUBMODULE=OFF",
  104. "-DBUILD_EXAMPLES=OFF",
  105. }
  106. table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:is_debug() and "Debug" or "Release"))
  107. table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
  108. table.insert(configs, "-DBUILD_DROGON_SHARED=" .. (package:config("shared") and "ON" or "OFF"))
  109. table.insert(configs, "-DBUILD_CTL=" .. (package:is_cross() and "OFF" or "ON"))
  110. for name, enabled in pairs(package:configs()) do
  111. if not package:extraconf("configs", name, "builtin") then
  112. if name == "sqlite3" then
  113. table.insert(configs, "-DBUILD_SQLITE=" .. (enabled and "ON" or "OFF"))
  114. elseif name == "yaml" then
  115. if package:version() and package:version():ge("1.8.4") then
  116. table.insert(configs, "-DBUILD_YAML_CONFIG=" .. (enabled and "ON" or "OFF"))
  117. end
  118. elseif name == "cpp20" then
  119. table.insert(configs, "-DCMAKE_CXX_STANDARD=20")
  120. else
  121. table.insert(configs, "-DBUILD_" .. name:upper() .. "=" .. (enabled and "ON" or "OFF"))
  122. end
  123. end
  124. end
  125. local openssl = package:dep("openssl")
  126. if not openssl:is_system() then
  127. table.insert(configs, "-DOPENSSL_ROOT_DIR=" .. openssl:installdir())
  128. end
  129. import("package.tools.cmake").install(package, configs)
  130. end)
  131. on_test(function (package)
  132. assert(package:has_cxxfuncs("drogon::getVersion()", {configs = {languages = "c++17"}, includes = "drogon/drogon.h"}))
  133. end)