xmake.lua 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package("rttr")
  2. set_homepage("https://www.rttr.org")
  3. set_description("rttr: An open source library, which adds reflection to C++.")
  4. set_license("MIT")
  5. if is_plat("macosx") then
  6. add_extsources("brew::rttr")
  7. end
  8. add_urls("https://www.rttr.org/releases/rttr-$(version)-src.tar.gz",
  9. "https://github.com/rttrorg/rttr/releases/download/v$(version)/rttr-$(version)-src.tar.gz",
  10. "https://github.com/rttrorg/rttr.git")
  11. add_versions("0.9.6", "f62caee43016489320f8a69145c9208cddd72e451ea95618bc26a49a4cd6c990")
  12. add_versions("0.9.5", "caa8d404840b0e156f869a947e475b09f7b602ab53c290271f40ce028c8d7d91")
  13. add_deps("cmake")
  14. on_install(function (package)
  15. local configs = {}
  16. table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
  17. table.insert(configs, "-DBUILD_EXAMPLES=OFF")
  18. table.insert(configs, "-DBUILD_DOCUMENTATION=OFF")
  19. table.insert(configs, "-DBUILD_UNIT_TESTS=OFF") -- rttr has problem building unit tests on macosx.
  20. -- rttr use BUILD_RTTR_DYNAMIC and BUILD_STATIC options to control whether to build dynamic or static libraries.
  21. table.insert(configs, "-DBUILD_RTTR_DYNAMIC=" .. (package:config("shared") and "ON" or "OFF"))
  22. table.insert(configs, "-DBUILD_STATIC=" .. (package:config("shared") and "OFF" or "ON"))
  23. local cxflags
  24. if package:has_tool("cxx", "gcc", "gxx", "clang", "clangxx") then
  25. if not package:is_plat("windows") then
  26. -- Passing this flag to clang-cl may cause errors.
  27. -- gcc does not seem to support -Wno-error options.
  28. cxflags = "-Wno-implicit-float-conversion"
  29. end
  30. end
  31. if package:is_plat("windows") and package:config("shared") then
  32. package:add("defines", "RTTR_DLL")
  33. end
  34. import("package.tools.cmake").install(package, configs, {cxflags = cxflags})
  35. end)
  36. on_test(function (package)
  37. assert(package:check_cxxsnippets({test = [[
  38. #include <cassert>
  39. #include <string>
  40. #include "rttr/registration.h"
  41. using namespace rttr;
  42. struct ctor_test {
  43. ctor_test(){}
  44. ctor_test(const ctor_test& other) {}
  45. ctor_test(int, double) {}
  46. static ctor_test create_object() { return ctor_test(); }
  47. };
  48. static ctor_test global_create_object() { return ctor_test(); }
  49. RTTR_REGISTRATION {
  50. registration::class_<ctor_test>("ctor_test")
  51. .constructor<>()(
  52. policy::ctor::as_object
  53. )
  54. .constructor<const ctor_test&>()(
  55. policy::ctor::as_object
  56. )
  57. .constructor<int, double>()(
  58. policy::ctor::as_object
  59. )
  60. .constructor(&ctor_test::create_object)
  61. .constructor(&global_create_object);
  62. }
  63. void test() {
  64. auto t = type::get<ctor_test>();
  65. assert(t.is_valid());
  66. {
  67. constructor ctor = t.get_constructor();
  68. assert(ctor.is_valid());
  69. }
  70. {
  71. constructor ctor = t.get_constructor({type::get<ctor_test>()});
  72. assert(ctor.is_valid());
  73. }
  74. {
  75. constructor ctor = t.get_constructor({type::get<int>(), type::get<double>()});
  76. assert(ctor.is_valid());
  77. }
  78. }
  79. ]]}, { configs = {languages = "c++14"} }))
  80. end)