xmake.lua 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package("better-enums")
  2. set_kind("library", { headeronly = true })
  3. set_homepage("http://aantron.github.io/better-enums")
  4. set_description("C++ compile-time enum to string, iteration, in a single header file")
  5. set_license("BSD-2-Clause")
  6. add_urls("https://github.com/aantron/better-enums/archive/refs/tags/$(version).tar.gz",
  7. "https://github.com/aantron/better-enums.git")
  8. add_versions("0.11.3", "1b1597f0aa5452b971a94ab13d8de3b59cce17d9c43c8081aa62f42b3376df96")
  9. on_install(function (package)
  10. os.cp("enum.h", package:installdir(path.join("include", "better-enums")))
  11. os.cp("extra/better-enums/*.h", package:installdir(path.join("include", "better-enums")))
  12. end)
  13. on_test(function (package)
  14. assert(package:check_cxxsnippets({test = [[
  15. #include <iostream>
  16. BETTER_ENUM(Word, int, Hello, World)
  17. void test() {
  18. std::cout << (+Word::Hello)._to_string() << ", " << (+Word::World)._to_string() << "!" << std::endl;
  19. }
  20. ]]}, {configs = {languages = "cxx11"}, includes = "better-enums/enum.h"}))
  21. assert(package:check_cxxsnippets({test = [[
  22. #ifndef BETTER_ENUMS_CONSTEXPR_TO_STRING
  23. #define BETTER_ENUMS_CONSTEXPR_TO_STRING
  24. #endif
  25. #include <iostream>
  26. #include <better-enums/enum.h>
  27. #include <better-enums/n4428.h>
  28. BETTER_ENUM(Channel, char, Red = 1, Green, Blue)
  29. constexpr std::size_t size = std::enum_traits<Channel>::enumerators::size;
  30. constexpr Channel value_0 = std::enum_traits<Channel>::enumerators::get<0>::value;
  31. constexpr Channel value_1 = std::enum_traits<Channel>::enumerators::get<1>::value;
  32. constexpr const char *identifier_2 = std::enum_traits<Channel>::enumerators::get<2>::identifier;
  33. static_assert(size == 3, "");
  34. static_assert(value_0 == +Channel::Red, "");
  35. static_assert(value_1 == +Channel::Green, "");
  36. void test()
  37. {
  38. std::cout << identifier_2 << std::endl;
  39. }
  40. ]]}, {configs = {languages = "cxx11"}}))
  41. end)