xmake.lua 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package("promise-cpp")
  2. set_homepage("https://github.com/xhawk18/promise-cpp")
  3. set_description("C++ promise/A+ library in Javascript style.")
  4. set_license("MIT")
  5. add_urls("https://github.com/xhawk18/promise-cpp/archive/refs/tags/$(version).tar.gz",
  6. "https://github.com/xhawk18/promise-cpp.git")
  7. add_versions("2.1.3", "831f5c7fb36a1f0adda408898038b428d4afe96e7028947be0f755c6851eec26")
  8. add_patches("2.1.3", path.join(os.scriptdir(), "patches", "2.1.3", "cmake.patch"), "3ea274743d852c685e8a9fb4f609f768c2e5461061b87473092ee98c68e1ab88")
  9. add_configs("boost_asio", { description = "Enable boost asio.", default = false, type = "boolean"})
  10. add_deps("cmake")
  11. add_includedirs("include", "include/promise-cpp")
  12. on_load(function (package)
  13. if package:config("boost_asio") then
  14. package:add("deps", "boost")
  15. end
  16. end)
  17. on_install("linux", "macosx", "windows", function (package)
  18. local configs = {}
  19. table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
  20. table.insert(configs, "-DPROMISE_BUILD_SHARED=" .. (package:config("shared") and "ON" or "OFF"))
  21. import("package.tools.cmake").install(package, configs, {buildir = "build"})
  22. os.cp("include", package:installdir())
  23. os.cp("add_ons", package:installdir("include"))
  24. if package:is_plat("linux") then
  25. if package:config("shared") then
  26. os.cp("build/*.so", package:installdir("lib"))
  27. else
  28. os.cp("build/*.a", package:installdir("lib"))
  29. end
  30. elseif package:is_plat("macosx") then
  31. if package:config("shared") then
  32. os.cp("build/*.dylib", package:installdir("lib"))
  33. else
  34. os.cp("build/*.a", package:installdir("lib"))
  35. end
  36. end
  37. end)
  38. on_test(function (package)
  39. if package:config("boost_asio") then
  40. assert(package:check_cxxsnippets({test = [[
  41. #include <stdio.h>
  42. #include <boost/asio.hpp>
  43. #include "add_ons/asio/timer.hpp"
  44. using namespace promise;
  45. using namespace boost::asio;
  46. Promise myDelay(boost::asio::io_service &io, uint64_t time_ms) {
  47. return newPromise([&io, time_ms](Defer &d) {
  48. setTimeout(io, [d](bool cancelled) {
  49. if (cancelled) d.reject();
  50. else d.resolve();
  51. }, time_ms);
  52. });
  53. }
  54. Promise testTimer(io_service &io) {
  55. return myDelay(io, 3000).then([&] {
  56. return myDelay(io, 1000);
  57. }).then([&] {
  58. return myDelay(io, 2000);
  59. }).then([] {
  60. printf("timer after 2000 ms!\n");
  61. }).fail([] {
  62. printf("timer cancelled!\n");
  63. });
  64. }
  65. void test() {
  66. io_service io;
  67. Promise timer = testTimer(io);
  68. delay(io, 4500).then([=] {
  69. clearTimeout(timer);
  70. });
  71. io.run();
  72. }
  73. ]]}, {configs = {languages = "c++14"}}))
  74. else
  75. assert(package:has_cxxtypes("promise::Promise", {configs = {languages = "c++14"}, includes = "promise-cpp/promise.hpp"}))
  76. end
  77. end)