xmake.lua 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package("abseil")
  2. set_homepage("https://abseil.io")
  3. set_description("C++ Common Libraries")
  4. set_license("Apache-2.0")
  5. add_urls("https://github.com/abseil/abseil-cpp/archive/refs/tags/$(version).tar.gz",
  6. "https://github.com/abseil/abseil-cpp.git")
  7. add_versions("20260107.1", "4314e2a7cbac89cac25a2f2322870f343d81579756ceff7f431803c2c9090195")
  8. add_versions("20260107.0", "4c124408da902be896a2f368042729655709db5e3004ec99f57e3e14439bc1b2")
  9. add_versions("20250814.1", "1692f77d1739bacf3f94337188b78583cf09bab7e420d2dc6c5605a4f86785a1")
  10. add_versions("20250814.0", "9b2b72d4e8367c0b843fa2bcfa2b08debbe3cee34f7aaa27de55a6cbb3e843db")
  11. add_versions("20250512.1", "9b7a064305e9fd94d124ffa6cc358592eb42b5da588fb4e07d09254aa40086db")
  12. add_versions("20250512.0", "7262daa7c1711406248c10f41026d685e88223bc92817d16fb93c19adb57f669")
  13. add_versions("20250127.1", "b396401fd29e2e679cace77867481d388c807671dc2acc602a0259eeb79b7811")
  14. add_versions("20200225.1", "0db0d26f43ba6806a8a3338da3e646bb581f0ca5359b3a201d8fb8e4752fd5f8")
  15. add_versions("20210324.1", "441db7c09a0565376ecacf0085b2d4c2bbedde6115d7773551bc116212c2a8d6")
  16. add_versions("20210324.2", "59b862f50e710277f8ede96f083a5bb8d7c9595376146838b9580be90374ee1f")
  17. add_versions("20211102.0", "dcf71b9cba8dc0ca9940c4b316a0c796be8fab42b070bb6b7cab62b48f0e66c4")
  18. add_versions("20220623.0", "4208129b49006089ba1d6710845a45e31c59b0ab6bff9e5788a87f55c5abd602")
  19. add_versions("20230125.2", "9a2b5752d7bfade0bdeee2701de17c9480620f8b237e1964c1b9967c75374906")
  20. add_versions("20230802.1", "987ce98f02eefbaf930d6e38ab16aa05737234d7afbab2d5c4ea7adbe50c28ed")
  21. add_versions("20240116.1", "3c743204df78366ad2eaf236d6631d83f6bc928d1705dd0000b872e53b73dc6a")
  22. add_versions("20240116.2", "733726b8c3a6d39a4120d7e45ea8b41a434cdacde401cba500f14236c49b39dc")
  23. add_versions("20240722.0", "f50e5ac311a81382da7fa75b97310e4b9006474f9560ac46f54a9967f07d4ae3")
  24. add_versions("20250127.0", "16242f394245627e508ec6bb296b433c90f8d914f73b9c026fddb905e27276e8")
  25. add_patches("20240116.1", "https://github.com/abseil/abseil-cpp/commit/3335e58f198e899a500b744163f9b883035a5217.patch", "f83278086b42bc997846d2b931a266678f96e2727fce6ffd98b2b58ce75fa0a3")
  26. add_patches("20240116.2", "https://github.com/abseil/abseil-cpp/commit/3335e58f198e899a500b744163f9b883035a5217.patch", "f83278086b42bc997846d2b931a266678f96e2727fce6ffd98b2b58ce75fa0a3")
  27. add_deps("cmake")
  28. add_configs("cxx_standard", {description = "Select c++ standard to build.", default = "17", type = "string", values = {"14", "17", "20"}})
  29. on_load(function (package)
  30. if package:is_plat("windows", "mingw", "msys") then
  31. package:add("syslinks", "advapi32", "dbghelp", "bcrypt")
  32. elseif package:is_plat("linux", "bsd") then
  33. package:add("syslinks", "pthread")
  34. elseif package:is_plat("macosx", "iphoneos") then
  35. package:add("frameworks", "CoreFoundation")
  36. end
  37. if package:is_plat("windows") and package:config("shared") then
  38. package:add("defines", "ABSL_CONSUME_DLL")
  39. end
  40. end)
  41. on_install(function (package)
  42. local version = package:version()
  43. if version and version:eq("20230802.1") and package:is_plat("mingw") then
  44. io.replace(path.join("absl", "synchronization", "internal", "pthread_waiter.h"), "#ifndef _WIN32", "#if !defined(_WIN32) && !defined(__MINGW32__)", {plain = true})
  45. io.replace(path.join("absl", "synchronization", "internal", "win32_waiter.h"), "#if defined(_WIN32) && _WIN32_WINNT >= _WIN32_WINNT_VISTA", "#if defined(_WIN32) && !defined(__MINGW32__) && _WIN32_WINNT >= _WIN32_WINNT_VISTA", {plain = true})
  46. end
  47. io.replace("CMakeLists.txt", [[set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")]], "", {plain = true})
  48. io.replace("CMakeLists.txt", [[set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")]], "", {plain = true})
  49. if version and package:is_plat("macosx") then
  50. local file_path = path.join("absl", "time", "internal", "cctz", "src", "time_zone_format.cc")
  51. if version:ge("20240116.1") and version:le("20260107.0") then
  52. io.replace(
  53. file_path,
  54. "#if !defined(_XOPEN_SOURCE) && !defined(__FreeBSD__) && !defined(__OpenBSD__)",
  55. "#if !defined(_XOPEN_SOURCE) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__APPLE__)",
  56. {plain = true}
  57. )
  58. elseif version:eq("20230802.1") then
  59. io.replace(
  60. file_path,
  61. "#if !defined(_XOPEN_SOURCE) && !defined(__OpenBSD__)",
  62. "#if !defined(_XOPEN_SOURCE) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__APPLE__)",
  63. {plain = true}
  64. )
  65. end
  66. end
  67. local configs = {
  68. "-DCMAKE_CXX_STANDARD=" .. package:config("cxx_standard"),
  69. "-DABSL_ENABLE_INSTALL=ON",
  70. "-DABSL_PROPAGATE_CXX_STD=ON",
  71. }
  72. table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:is_debug() and "Debug" or "Release"))
  73. table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
  74. import("package.tools.cmake").install(package, configs, {builddir = os.tmpfile() .. ".dir"})
  75. -- get links and ensure link order
  76. import("core.base.graph")
  77. local dag = graph.new(true)
  78. local pkgconfigdir = package:installdir("lib", "pkgconfig")
  79. for _, pcfile in ipairs(os.files(path.join(pkgconfigdir, "*.pc"))) do
  80. local link = path.basename(pcfile)
  81. local content = io.readfile(pcfile)
  82. for _, line in ipairs(content:split("\n")) do
  83. if line:startswith("Requires: ") then
  84. local requires = line:sub(10):split(",")
  85. for _, dep in ipairs(requires) do
  86. dep = dep:split("=")[1]:trim()
  87. dag:add_edge(link, dep)
  88. end
  89. end
  90. end
  91. end
  92. local links = dag:topological_sort()
  93. package:add("links", links)
  94. local cycle = dag:find_cycle()
  95. if cycle then
  96. wprint("cycle links found", cycle)
  97. end
  98. end)
  99. on_test(function (package)
  100. assert(package:check_cxxsnippets({test = [[
  101. #include "absl/strings/numbers.h"
  102. #include "absl/strings/str_join.h"
  103. #include <iostream>
  104. #include <string>
  105. #include <vector>
  106. void test() {
  107. std::vector<std::string> v = {"foo", "bar", "baz"};
  108. std::string s = absl::StrJoin(v, "-");
  109. int result = 0;
  110. auto a = absl::SimpleAtoi("123", &result);
  111. std::cout << "Joined string: " << s << "\\n";
  112. }
  113. ]]}, {configs = {languages = "cxx" .. package:config("cxx_standard")}}))
  114. end)