xmake.lua 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package("pyincpp")
  2. set_homepage("https://github.com/chen-qingyu/pyincpp")
  3. set_description("A C++ type library that is as easy to use as Python built-in types.")
  4. set_kind("library", {headeronly = true})
  5. set_license("MIT")
  6. add_urls("https://github.com/chen-qingyu/pyincpp/archive/refs/tags/$(version).tar.gz",
  7. "https://github.com/chen-qingyu/pyincpp.git")
  8. add_versions("v2.6.2", "ce8421d873fe879048990265b84903141ed2719234eb11b9c4b3f8c6b19d7623")
  9. add_versions("v2.6.1", "1157d85018d0a44157ff4a17f70f8a868f336790ce30bc62516d32f397644f84")
  10. add_versions("v2.6.0", "70d0dba92c51baf3591104e191a899f4f701b1450aa3bc4f9bcfffc532c68c97")
  11. add_versions("v2.5.2", "f99df02c2a2121e2658e770113a8c9ebec5643b81daf82786039653966999f2d")
  12. add_versions("v2.5.1", "305bdf437146e7230c1fc7a1e59009e765468b24133b6def4e17bb01d80f54ad")
  13. add_versions("v2.4.1", "766fc1dec895cf54803bf8ea7f9e86f9aa8e001b38c1f14a88907849e81f634b")
  14. add_versions("v2.4.0", "ae48bc62e9ed8f89e31235ee79385e59b0be6fd6720e8ebe0aa3d10ec7c9fee2")
  15. add_versions("v2.3.0", "e10640c03a6ae9365a299f57a68a5f2a873146b07f92fd33bc4f673e21d68072")
  16. add_versions("v1.6.1", "6a49657cb1f36f4fa400706a631c300771972015b4181f8cc352aa3de7e1a2a3")
  17. add_versions("v1.6.0", "1e8e4bfde447c439974180e206087b309f50ac0e24aeddf39d21d73fd7067368")
  18. add_versions("v1.4.1", "f3de3b5044a5c640811e87782264acbaf14697cd8c35bb21ddcd4de5664a60d0")
  19. add_versions("v1.3.3", "2689349de9faa35d8bbefddcc7d29d49308a2badd58961cc2b1a8f80c96d0823")
  20. add_versions("v1.3.2", "687148704f278c292962cffe1f440e5a4cc33f2a82f5e5a17b23aab88a282951")
  21. -- Some old platforms don't support the C++20 standard well.
  22. if on_check then
  23. on_check(function (package)
  24. if package:version():ge("2.0.0") then
  25. assert(package:check_cxxsnippets({test = [[
  26. #include <iterator>
  27. template <std::input_iterator InputIt>
  28. void test_concept(InputIt) {}
  29. #include <set>
  30. #include <string>
  31. struct TestCmp {
  32. std::string str_;
  33. auto operator<=>(const TestCmp&) const = default;
  34. };
  35. std::set<TestCmp> s = {TestCmp(), TestCmp()};
  36. ]]}, {configs = {languages = "c++20"}}), "Require supports C++20 standard.")
  37. end
  38. end)
  39. end
  40. on_install(function (package)
  41. if package:version():ge("2.0.0") then
  42. os.cp("sources/*.hpp", package:installdir("include/"))
  43. else
  44. os.cp("sources/*.hpp", package:installdir("include/pyincpp/"))
  45. end
  46. end)
  47. on_test(function (package)
  48. if package:version():ge("2.0.0") then
  49. assert(package:check_cxxsnippets({test = [[
  50. #include <cassert>
  51. using namespace pyincpp;
  52. void test() {
  53. Dict<Str, List<Int>> dict = {{"first", {"123", "456"}}, {"second", {"789"}}, {"third", {"12345678987654321", "5"}}};
  54. assert(dict.keys() == Set<Str>({"first", "second", "third"}));
  55. assert(dict["third"][-1].factorial() == 120);
  56. }
  57. ]]}, {configs = {languages = "c++20"}, includes = "pyincpp.hpp"}))
  58. else
  59. assert(package:check_cxxsnippets({test = [[
  60. #include <cassert>
  61. using namespace pyincpp;
  62. void test() {
  63. Map<String, List<Integer>> map = {{"first", {"123", "456"}}, {"second", {"789"}}, {"third", {"12345678987654321", "5"}}};
  64. assert(map.keys() == Set<String>({"first", "second", "third"}));
  65. assert(map["third"][-1].factorial() == 120);
  66. }
  67. ]]}, {configs = {languages = "c++17"}, includes = "pyincpp/pyincpp.hpp"}))
  68. end
  69. end)