xmake.lua 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package("libassert")
  2. set_homepage("https://github.com/jeremy-rifkin/libassert")
  3. set_description("The most over-engineered and overpowered C++ assertion library.")
  4. set_license("MIT")
  5. add_urls("https://github.com/jeremy-rifkin/libassert/archive/refs/tags/$(version).tar.gz",
  6. "https://github.com/jeremy-rifkin/libassert.git")
  7. add_versions("v1.2", "332f96181f4bdbd95ef5fcd6484782ba2d89b50fd5189bc2a33fd524962f6771")
  8. add_configs("decompose", {description = "Enables expression decomposition of && and || (this prevents short circuiting)", default = false, type = "boolean"})
  9. add_configs("lowercase", {description = "Enables assert alias for ASSERT", default = false, type = "boolean"})
  10. add_configs("magic_enum", {description = "Use the MagicEnum library to print better diagnostics for enum classes", default = true, type = "boolean"})
  11. add_deps("cpptrace")
  12. on_load(function (package)
  13. if package:config("magic_enum") then
  14. package:add("deps", "magic_enum")
  15. end
  16. end)
  17. on_install("windows", "linux", "macosx", function (package)
  18. local configs = {}
  19. io.writefile("xmake.lua", [[
  20. add_requires("cpptrace")
  21. if has_config("decompose") then
  22. add_defines("ASSERT_DECOMPOSE_BINARY_LOGICAL")
  23. end
  24. if has_config("lowercase") then
  25. add_defines("ASSERT_LOWERCASE")
  26. end
  27. if has_config("magic_enum") then
  28. add_requires("magic_enum")
  29. add_packages("magic_enum")
  30. add_defines("ASSERT_USE_MAGIC_ENUM")
  31. end
  32. add_rules("mode.debug", "mode.release")
  33. target("assert")
  34. set_kind("$(kind)")
  35. add_files("src/*.cpp")
  36. add_includedirs("include")
  37. add_headerfiles("include/*.hpp")
  38. set_languages("c++17")
  39. add_packages("cpptrace")
  40. if is_plat("windows") and is_kind("shared") then
  41. add_rules("utils.symbols.export_all", {export_classes = true})
  42. end
  43. ]])
  44. if package:config("shared") then
  45. configs.kind = "shared"
  46. end
  47. if package:config("decompose") then
  48. package:add("defines", "ASSERT_DECOMPOSE_BINARY_LOGICAL")
  49. end
  50. if package:config("lowercase") then
  51. package:add("defines", "ASSERT_LOWERCASE")
  52. end
  53. if package:config("magic_enum") then
  54. package:add("defines", "ASSERT_USE_MAGIC_ENUM")
  55. io.replace("include/assert.hpp", "../third_party/magic_enum.hpp", "magic_enum.hpp", {plain = true})
  56. end
  57. import("package.tools.xmake").install(package, configs)
  58. end)
  59. on_test(function (package)
  60. local opt = {configs = {languages = "c++17"}}
  61. if package:config("lowercase") then
  62. assert(package:check_cxxsnippets({test = [[
  63. #include <assert.hpp>
  64. void test() {
  65. int x = 0;
  66. assert(x != 1, "", x);
  67. }
  68. ]]}, opt))
  69. else
  70. assert(package:check_cxxsnippets({test = [[
  71. #include <assert.hpp>
  72. void test() {
  73. int x = 0;
  74. ASSERT(x != 1, "", x);
  75. }
  76. ]]}, opt))
  77. end
  78. end)