load.lua 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. function _add_defines(package)
  2. if package:is_plat("windows") then
  3. package:add("defines", "BOOST_ALL_NO_LIB")
  4. end
  5. if package:config("shared") then
  6. package:add("defines", "BOOST_ALL_DYN_LINK")
  7. end
  8. end
  9. function _recursion_enabled_dep_configs(package, libname, deps, visited_table)
  10. if package:config(libname) and not visited_table[libname] then
  11. visited_table[libname] = true
  12. for _, dep_libname in ipairs(deps) do
  13. package:config_set(dep_libname, true)
  14. _recursion_enabled_dep_configs(package, dep_libname, libs.get_lib_deps()[dep_libname], visited_table)
  15. end
  16. end
  17. end
  18. function _auto_enabled_dep_configs(package)
  19. -- workaround
  20. if package:config("locale") then
  21. package:config_set("regex", true)
  22. end
  23. if package:config("python") then
  24. package:config_set("thread", true)
  25. end
  26. local visited_table = {}
  27. libs.for_each_lib_deps(function (libname, deps)
  28. _recursion_enabled_dep_configs(package, libname, deps, visited_table)
  29. end)
  30. end
  31. function _add_iostreams_deps(package)
  32. if package:config("zlib") then
  33. package:add("deps", "zlib")
  34. end
  35. if package:config("bzip2") then
  36. package:add("deps", "bzip2")
  37. end
  38. if package:config("lzma") then
  39. package:add("deps", "xz")
  40. end
  41. if package:config("zstd") then
  42. package:add("deps", "zstd")
  43. package:add("deps", (is_subhost("windows") and "pkgconf") or "pkg-config")
  44. package:add("patches", ">=1.86.0", "patches/1.86.0/find-zstd.patch", "7a90f2cbf01fc26bc8a98d58468c20627974f30e45bdd4a00c52644b60af1ef6")
  45. end
  46. end
  47. function _add_deps(package)
  48. if package:config("regex") and package:config("icu") then
  49. package:add("deps", "icu4c")
  50. end
  51. if package:config("locale") then
  52. package:add("deps", "libiconv")
  53. if package:config("icu") then
  54. package:add("deps", "icu4c")
  55. end
  56. end
  57. if package:config("python") then
  58. package:add("deps", "python", {configs = {headeronly = true}})
  59. end
  60. if package:config("openssl") then
  61. package:add("deps", "openssl >=1.1.1-a") -- same as python on_load
  62. end
  63. if package:config("iostreams") then
  64. _add_iostreams_deps(package)
  65. end
  66. end
  67. function _add_header_only_configs(package)
  68. libs.for_each(function (libname)
  69. package:config_set(libname, false)
  70. end)
  71. -- TODO: find cmake option to install header only library
  72. -- libs.for_each_header_only_buildable_lib(function (libname)
  73. -- package:config_set(libname, true)
  74. -- end)
  75. end
  76. function main(package)
  77. import("libs", {rootdir = package:scriptdir()})
  78. if package:config("header_only") then
  79. package:set("kind", "library", {headeronly = true})
  80. _add_header_only_configs(package)
  81. else
  82. if package:config("all") then
  83. package:config_set("openssl", true) -- mysql/redis require
  84. libs.for_each(function (libname)
  85. package:config_set(libname, true)
  86. end)
  87. else
  88. _auto_enabled_dep_configs(package)
  89. end
  90. end
  91. if package:config("mpi") then
  92. -- TODO: add mpi to xrepo
  93. package:config_set("mpi", false)
  94. wprint("package(boost) Unsupported mpi config")
  95. end
  96. _add_deps(package)
  97. _add_defines(package)
  98. end