xmake.lua 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package("libbacktrace")
  2. set_homepage("https://github.com/ianlancetaylor/libbacktrace")
  3. set_description("A C library that may be linked into a C/C++ program to produce symbolic backtraces")
  4. set_license("BSD-3-Clause")
  5. add_urls("https://github.com/ianlancetaylor/libbacktrace.git")
  6. add_versions("2025.04.10", "793921876c981ce49759114d7bb89bb89b2d3a2d")
  7. add_configs("bitswidth", {default = "64", type = "string", values = {"64", "32"}})
  8. add_deps("xz", "zlib", "zstd")
  9. if is_plat("windows") then
  10. add_deps("unistd_h")
  11. end
  12. on_check("cross", function (package)
  13. if not package:is_arch64() then
  14. assert(false, "package(libbacktrace): Unsupported on non-arch64 cross.")
  15. end
  16. end)
  17. on_install(function (package)
  18. if package:is_plat("windows") then
  19. local internal_h_content = io.readfile("internal.h")
  20. io.writefile("internal.h", internal_h_content .. [[
  21. #if !defined(_SSIZE_T_) && !defined(_SSIZE_T_DEFINED)
  22. # ifndef ssize_t
  23. typedef intptr_t ssize_t;
  24. # endif
  25. # define SSIZE_MAX INTPTR_MAX
  26. # define _SSIZE_T_
  27. # define _SSIZE_T_DEFINED
  28. #endif]])
  29. end
  30. local configs = {bitswidth = package:is_arch64() and "64" or "32"}
  31. io.gsub("config.h.in", "# *undef (.-)\n", "${define %1}\n")
  32. io.gsub("backtrace-supported.h.in", "# *define (.-)\n", "${define %1}\n")
  33. os.cp(path.join(package:scriptdir(), "port", "xmake.lua"), "xmake.lua")
  34. import("package.tools.xmake").install(package, configs)
  35. end)
  36. on_test(function (package)
  37. assert(package:has_cfuncs("backtrace_create_state", {includes = "backtrace.h"}))
  38. assert(package:has_cfuncs("backtrace_full", {includes = "backtrace.h"}))
  39. end)