load.lua 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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") then
  49. package:add("deps", "icu4c")
  50. end
  51. if package:config("locale") then
  52. package:add("deps", "libiconv", "icu4c")
  53. end
  54. if package:config("python") then
  55. package:add("deps", "python", {configs = {headeronly = true}})
  56. end
  57. if package:config("openssl") then
  58. package:add("deps", "openssl >=1.1.1-a") -- same as python on_load
  59. end
  60. if package:config("iostreams") then
  61. _add_iostreams_deps(package)
  62. end
  63. end
  64. function _add_header_only_configs(package)
  65. libs.for_each(function (libname)
  66. package:config_set(libname, false)
  67. end)
  68. -- TODO: find cmake option to install header only library
  69. -- libs.for_each_header_only_buildable_lib(function (libname)
  70. -- package:config_set(libname, true)
  71. -- end)
  72. end
  73. function main(package)
  74. import("libs", {rootdir = package:scriptdir()})
  75. if package:config("header_only") then
  76. package:set("kind", "library", {headeronly = true})
  77. _add_header_only_configs(package)
  78. else
  79. if package:config("all") then
  80. package:config_set("openssl", true) -- mysql/redis require
  81. libs.for_each(function (libname)
  82. package:config_set(libname, true)
  83. end)
  84. else
  85. _auto_enabled_dep_configs(package)
  86. end
  87. end
  88. if package:config("mpi") then
  89. -- TODO: add mpi to xrepo
  90. package:config_set("mpi", false)
  91. wprint("package(boost) Unsupported mpi config")
  92. end
  93. _add_deps(package)
  94. _add_defines(package)
  95. end