load.lua 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. function _get_linkname(package, libname)
  2. local linkname
  3. if package:is_plat("windows") then
  4. linkname = (package:config("shared") and "boost_" or "libboost_") .. libname
  5. else
  6. linkname = "boost_" .. libname
  7. end
  8. if libname == "python" or libname == "numpy" then
  9. linkname = linkname .. package:config("pyver"):gsub("%p+", "")
  10. end
  11. if package:config("multi") then
  12. linkname = linkname .. "-mt"
  13. end
  14. if package:is_plat("windows") then
  15. if package:config("shared") then
  16. if package:debug() then
  17. linkname = linkname .. "-gd"
  18. end
  19. elseif package:config("asan") or package:has_runtime("MTd") then
  20. linkname = linkname .. "-sgd"
  21. elseif package:has_runtime("MT") then
  22. linkname = linkname .. "-s"
  23. elseif package:config("asan") or package:has_runtime("MDd") then
  24. linkname = linkname .. "-gd"
  25. end
  26. else
  27. if package:debug() then
  28. linkname = linkname .. "-d"
  29. end
  30. end
  31. return linkname
  32. end
  33. function main(package)
  34. import("libs", {rootdir = package:scriptdir()})
  35. -- we need the fixed link order
  36. local headeronly = not package:config("all")
  37. local sublibs = {log = {"log_setup", "log"},
  38. python = {"python", "numpy"},
  39. stacktrace = {"stacktrace_backtrace", "stacktrace_basic"}}
  40. libs.for_each(function (libname)
  41. if package:config(libname) then
  42. headeronly = false
  43. end
  44. local libs = sublibs[libname]
  45. if libs then
  46. for _, lib in ipairs(libs) do
  47. package:add("links", _get_linkname(package, lib))
  48. end
  49. else
  50. package:add("links", _get_linkname(package, libname))
  51. end
  52. end)
  53. if headeronly then
  54. package:set("kind", "library", {headeronly = true})
  55. end
  56. -- disable auto-link all libs
  57. if package:is_plat("windows") then
  58. package:add("defines", "BOOST_ALL_NO_LIB")
  59. if package:config("shared") then
  60. package:add("defines", "BOOST_ALL_DYN_LINK")
  61. end
  62. end
  63. if package:config("python") then
  64. if not package:config("shared") then
  65. package:add("defines", "BOOST_PYTHON_STATIC_LIB")
  66. end
  67. package:add("deps", "python " .. package:config("pyver") .. ".x", {configs = {headeronly = true}})
  68. end
  69. if package:config("zstd") then
  70. package:add("deps", "zstd")
  71. end
  72. if package:config("lzma") then
  73. package:add("deps", "xz")
  74. end
  75. if package:config("zlib") then
  76. package:add("deps", "zlib")
  77. end
  78. if package:config("bzip2") then
  79. package:add("deps", "bzip2")
  80. end
  81. if package:is_plat("windows") and package:version():le("1.85.0") then
  82. local vs_toolset = package:toolchain("msvc"):config("vs_toolset")
  83. if vs_toolset then
  84. local vs_toolset_ver = import("core.base.semver").new(vs_toolset)
  85. local minor = vs_toolset_ver:minor()
  86. if minor and minor >= 40 then
  87. package:add("patches", "<=1.85.0", "patches/1.85.0/fix-v144.patch", "1ba99cb2e2f03a4ba489a32596c62e1310b6c73ba4d19afa8796bcf180c84422")
  88. end
  89. end
  90. end
  91. end