xmake.lua 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package("nana")
  2. set_homepage("http://nanapro.org")
  3. set_description("A modern C++ GUI library.")
  4. add_urls("https://github.com/cnjinhao/nana/archive/v$(version).tar.gz",
  5. "https://github.com/cnjinhao/nana.git")
  6. add_versions("1.6.2", "5f5cb791dff292e27bfa29d850b93f809a0d91d6044ea7e22ce7ae76a5d8b24e")
  7. add_versions("1.7.2", "e2efb3b7619e4ef3b6de93f8afc70ff477ec6cabf4f9740f0d786904c790613f")
  8. add_versions("1.7.4", "56f7b1ed006c750fccf8ef15ab1e83f96751f2dfdcb68d93e5f712a6c9b58bcb")
  9. add_patches("1.7.4", path.join(os.scriptdir(), "patches", "1.7.4", "cmake_policy_fix.patch"), "237a60d12eb2760c1010043686b1938b03e18791003d8ddfc639f458f0c7467d")
  10. if is_plat("linux") then
  11. add_patches("1.7.4", path.join(os.scriptdir(), "patches", "1.7.4", "u8string_fix.patch"), "c783588816664124ba3b4077e18696899c8389419a015773b5bfe988e3a73f6a")
  12. end
  13. add_configs("nana_filesystem_force", {description = "Force nana filesystem over ISO and boost?", default = is_plat("linux"), type = "boolean"})
  14. if is_plat("linux", "windows") then
  15. add_deps("cmake >=3.15")
  16. end
  17. if is_plat("windows") then
  18. add_syslinks("ole32", "shell32", "kernel32", "user32", "gdi32", "winspool", "comdlg32", "advapi32")
  19. add_defines("_SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING")
  20. elseif is_plat("linux") then
  21. add_deps("libxcursor", "libxft", "fontconfig")
  22. add_syslinks("pthread")
  23. end
  24. on_load("linux", "windows", function (package)
  25. if package:config("nana_filesystem_force") then
  26. package:add("defines", "NANA_FILESYSTEM_FORCE")
  27. end
  28. end)
  29. on_install("linux", "windows", function (package)
  30. -- The 'and' operator, which is an equivalent of '&&', is not supported by MSVC
  31. if package:is_plat("windows") then
  32. local file_name = path.join(os.curdir(), "source", "system", "split_string.cpp")
  33. io.gsub(file_name, " and ", " && ")
  34. end
  35. local configs = {"-DNANA_CMAKE_ENABLE_JPEG=OFF", "-DNANA_CMAKE_ENABLE_PNG=OFF", "-DBUILD_SHARED_LIBS=OFF"}
  36. if package:config("nana_filesystem_force") then
  37. table.insert(configs, "-DNANA_CMAKE_NANA_FILESYSTEM_FORCE=ON")
  38. end
  39. import("package.tools.cmake").build(package, configs, {buildir = "build_xmake"})
  40. os.cp("include", package:installdir())
  41. if package:is_plat("windows") then
  42. os.trycp(path.join("build_xmake", "*", "*.lib"), package:installdir("lib"))
  43. else
  44. os.trycp(path.join("build_xmake", "*.a"), package:installdir("lib"))
  45. end
  46. end)
  47. on_test(function (package)
  48. assert(package:check_cxxsnippets({test = [[
  49. #include <nana/gui.hpp>
  50. #include <nana/gui/widgets/form.hpp>
  51. #include <nana/gui/widgets/label.hpp>
  52. using namespace nana;
  53. void test() {
  54. form fm;
  55. label lb(fm, rectangle(fm.size()));
  56. lb.caption("Hello, World");
  57. fm.show();
  58. exec();
  59. }
  60. ]]}, {configs = {languages = "c++11"}}))
  61. end)