xmake.lua 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package("libsystemd")
  2. set_homepage("https://systemd.io")
  3. set_description("The systemd System and Service Manager.")
  4. add_urls("https://github.com/systemd/systemd/archive/refs/tags/$(version).tar.gz",
  5. "https://github.com/systemd/systemd.git")
  6. add_versions("v258.2", "05208e76bf1f9b369b1a8159e6631ef67c82f2d27c21e931962026a79bf4ba64")
  7. add_versions("v258.1", "8eb34eaf2f78330217280bd7a923578f37e28d3f3ac5168e336ebc9cad84a34d")
  8. add_versions("v258", "07a580cf21856f468f82b77b82973a926f42ccc696462459b53f8b88893dff8e")
  9. add_configs("udev", {description = "Build libudev.", default = true, type = "boolean"})
  10. add_configs("acl", {description = "Enable libacl support.", default = true, type = "boolean"})
  11. add_configs("audit", {description = "Enable libaudit support.", default = true, type = "boolean"})
  12. add_configs("blkid", {description = "Enable libblkid support.", default = true, type = "boolean"})
  13. add_configs("kmod", {description = "Enable support for loadable modules.", default = true, type = "boolean"})
  14. add_configs("pam", {description = "Enable PAM support.", default = true, type = "boolean"})
  15. add_configs("gcrypt", {description = "Enable gcrypt support.", default = true, type = "boolean"})
  16. add_configs("openssl", {description = "Enable openssl support.", default = "openssl3", type = "string", values = {false, "openssl", "openssl3"}})
  17. add_configs("p11kit", {description = "Enable p11kit support.", default = true, type = "boolean"})
  18. add_configs("xz", {description = "Enable xz compression support.", default = true, type = "boolean"})
  19. add_configs("lz4", {description = "Enable lz4 compression support.", default = true, type = "boolean"})
  20. add_configs("zstd", {description = "Enable zstd compression support.", default = true, type = "boolean"})
  21. add_configs("libmount", {description = "Enable lib support", default = true, type = "boolean"})
  22. add_configs("seccomp", {description = "Enable SECCOMP support.", default = true, type = "boolean"})
  23. add_configs("selinux", {description = "Enable SELinux support.", default = true, type = "boolean"})
  24. add_deps("python", {kind = "binary"})
  25. add_deps("libcap", "libxcrypt")
  26. on_load(function(package)
  27. if package:config("udev") then
  28. package:add("syslinks", "rt", "pthread")
  29. end
  30. function install_deps(opt, dep)
  31. dep = dep or opt
  32. if package:config(opt) then
  33. package:add("deps", dep)
  34. end
  35. end
  36. install_deps("acl")
  37. install_deps("audit")
  38. install_deps("kmod", "libkmod")
  39. install_deps("pam", "libpam")
  40. install_deps("gcrypt", "libgcrypt")
  41. install_deps("p11kit", "p11-kit")
  42. install_deps("xz")
  43. install_deps("lz4")
  44. install_deps("zstd")
  45. install_deps("seccomp", "libseccomp")
  46. install_deps("selinux", "libselinux")
  47. local openssl = package:config("openssl")
  48. if openssl and openssl ~= "disabled" then
  49. package:add("deps", openssl)
  50. end
  51. local util_linux_cfg = {}
  52. if package:config("blkid") then
  53. util_linux_cfg.libblkid = true
  54. end
  55. if package:config("libmount") then
  56. util_linux_cfg.libmount = true
  57. end
  58. if not table.empty(util_linux_cfg) then
  59. package:add("deps", "util-linux", {configs = util_linux_cfg})
  60. end
  61. end)
  62. on_install("linux", function (package)
  63. local buildscript = ""
  64. for _, line in ipairs(io.readfile("meson.build"):split("\n")) do
  65. if not line:startswith("runtest_env = custom_target(") then
  66. buildscript = buildscript .. line .. "\n"
  67. else
  68. break
  69. end
  70. end
  71. buildscript = buildscript:gsub("subdir%('catalog'%)", "")
  72. buildscript = buildscript:gsub("subdir%('po'%)", "")
  73. buildscript = buildscript:gsub("libsystemd = shared_library", "if static_libsystemd == 'false'\nlibsystemd = shared_library")
  74. buildscript = buildscript:gsub("libudev = shared_library", "if static_libudev == 'false'\nlibudev = shared_library")
  75. buildscript = buildscript:gsub("install_dir : libdir%)", "install_dir : libdir) endif")
  76. buildscript = buildscript:gsub("alias_target%b()", "")
  77. buildscript = buildscript .. "subdir('src/systemd')\n"
  78. if not package:config("udev") then
  79. buildscript = buildscript:gsub("subdir%('src/libudev'%)", "")
  80. buildscript = buildscript:gsub("static_libudev == 'false'", "false")
  81. buildscript = buildscript:gsub("static_libudev != 'false'", "false")
  82. end
  83. io.writefile("meson.build", buildscript)
  84. local configs = {"-Dtests=false"}
  85. table.insert(configs, "-Dmode=" .. (package:is_debug() and "developer" or "release"))
  86. if package:config("shared") then
  87. table.insert(configs, "-Dstatic-libsystemd=false")
  88. table.insert(configs, "-Dstatic-libudev=false")
  89. else
  90. table.insert(configs, "-Dstatic-libsystemd=" .. (package:config("pic") and "pic" or "no-pic"))
  91. table.insert(configs, "-Dstatic-libudev=" .. (package:config("pic") and "pic" or "no-pic"))
  92. end
  93. local sd_configs = {
  94. "acl", "audit", "blkid", "kmod", "pam", "gcrypt", "p11kit", "xz", "lz4", "zstd"
  95. }
  96. for _, sd_config in ipairs(sd_configs) do
  97. table.insert(configs, "-D" .. sd_config .. "=" .. (package:config(sd_config) and "enabled" or "disabled"))
  98. end
  99. io.replace("src/shared/meson.build", "install : true,", "build_by_default : false,", {plain = true})
  100. os.vrun("python -m pip install jinja2")
  101. local packagedeps = {"libcap"}
  102. if package:config("audit") then
  103. table.insert(packagedeps, "audit")
  104. end
  105. if package:config("gcrypt") then
  106. table.insert(packagedeps, "libgcrypt")
  107. table.insert(packagedeps, "libgpg-error")
  108. end
  109. local cflags = {}
  110. if package:config("kmod") then
  111. local info = package:dep("libkmod"):fetch()
  112. for _, includedir in ipairs(info.includedirs or info.sysincludedirs) do
  113. table.insert(cflags, "-I" .. includedir)
  114. end
  115. end
  116. import("package.tools.meson").install(package, configs, {packagedeps = packagedeps, cflags = cflags})
  117. end)
  118. on_test(function (package)
  119. assert(package:has_cfuncs("sd_watchdog_enabled", {includes = "systemd/sd-daemon.h"}))
  120. if package:config("udev") then
  121. assert(package:has_cfuncs("udev_new", {includes = "libudev.h"}))
  122. end
  123. end)