xmake.lua 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. package("libkmod")
  2. set_homepage("https://github.com/kmod-project/kmod")
  3. set_description("libkmod - Linux kernel module handling")
  4. set_license("LGPL-2.1")
  5. add_urls("https://github.com/kmod-project/kmod/archive/refs/tags/$(version).tar.gz",
  6. "https://github.com/kmod-project/kmod.git")
  7. add_versions("v34", "cb47be49366b596e4554eeeb7595b128feb261619c7675603e004b07c5ebbd5b")
  8. add_versions("v33", "c72120a2582ae240221671ddc1aa53ee522764806f50f8bf1522bbf055679985")
  9. add_versions("v32", "9477fa096acfcddaa56c74b988045ad94ee0bac22e0c1caa84ba1b7d408da76e")
  10. add_versions("v31", "16c40aaa50fc953035b4811b29ce3182f220e95f3c9e5eacb4b07b1abf85f003")
  11. add_versions("v30", "1fa3974abd80b992d61324bcc04fa65ea96cfe2e9e1150f48394833030c4b583")
  12. -- "--enable-static" is not supported by kmod
  13. add_configs("shared", {description = "Build shared library", default = true, type = "boolean", readonly = true})
  14. add_configs("logging", {description = "Enable system logging.", default = true, type = "boolean"})
  15. add_configs("zstd", {description = "Enable Zstandard-compressed modules support.", default = true, type = "boolean"})
  16. add_configs("zlib", {description = "Enable gzipped modules support.", default = true, type = "boolean"})
  17. add_configs("xz", {description = "Enable Xz-compressed modules support.", default = true, type = "boolean"})
  18. add_configs("openssl", {description = "Enable PKCS7 signatures support", default = "openssl3", values = {false, "openssl", "openssl3"}})
  19. add_includedirs("include", "include/libkmod")
  20. on_check("android", function (package)
  21. -- bionic, fread_unlocked
  22. if package:version():ge("v34") then
  23. local ndk_sdkver = package:toolchain("ndk"):config("ndk_sdkver")
  24. assert(ndk_sdkver and tonumber(ndk_sdkver) >= 28, "package(libkmod): require ndk api level >= 28")
  25. end
  26. end)
  27. on_load(function (package)
  28. if package:version():lt("v34") then
  29. package:add("deps", "autotools")
  30. else
  31. package:add("deps", "meson", "ninja")
  32. end
  33. for _, lib in ipairs({"zstd", "zlib", "xz"}) do
  34. if package:config(lib) then
  35. package:add("deps", lib)
  36. end
  37. end
  38. local openssl = package:config("openssl")
  39. if openssl then
  40. package:add("deps", openssl)
  41. end
  42. end)
  43. on_install("linux", "android@linux,macosx", function (package)
  44. if package:is_plat("android") then
  45. local ndk_sdkver = package:toolchain("ndk"):config("ndk_sdkver")
  46. if package:version():lt("v33") and tonumber(ndk_sdkver) <= 23 then
  47. io.replace("shared/util.h", "#include <time.h>", [[
  48. #include <time.h>
  49. #include <string.h>
  50. // from libkmod v33
  51. static inline const char *basename(const char *s)
  52. {
  53. const char *p = strrchr(s, '/');
  54. return p ? p + 1 : s;
  55. }
  56. ]], {plain = true})
  57. end
  58. io.replace("shared/util.h", "#include <time.h>", [[
  59. #include <time.h>
  60. #include <unistd.h>
  61. // from https://android.googlesource.com/kernel/common/+/03c04a7cba972/tools/perf/util/get_current_dir_name.c
  62. static inline char *get_current_dir_name(void)
  63. {
  64. char pwd[PATH_MAX];
  65. return getcwd(pwd, sizeof(pwd)) == NULL ? NULL : strdup(pwd);
  66. }
  67. ]], {plain = true})
  68. end
  69. if package:version():lt("v34") then
  70. local configs = {
  71. "--disable-dependency-tracking",
  72. "--disable-manpages",
  73. "--disable-test-modules",
  74. "--disable-tools"
  75. }
  76. table.insert(configs, "--enable-logging=" .. (package:config("logging") and "yes" or "no"))
  77. table.insert(configs, "--with-zstd=" .. (package:config("zstd") and "yes" or "no"))
  78. table.insert(configs, "--with-zlib=" .. (package:config("zlib") and "yes" or "no"))
  79. table.insert(configs, "--with-xz=" .. (package:config("xz") and "yes" or "no"))
  80. table.insert(configs, "--with-openssl=" .. (package:config("openssl") and "yes" or "no"))
  81. local packagedeps = {}
  82. for _, dep in ipairs(package:librarydeps()) do
  83. table.insert(packagedeps, dep:name())
  84. end
  85. io.replace("Makefile.am", [[dist_bashcompletion_DATA = \
  86. shell-completion/bash/kmod]], "", {plain = true})
  87. import("package.tools.autoconf").configure(package, configs, {packagedeps = packagedeps})
  88. io.replace("libtool", " -all-static)", [[ --target=* )
  89. func_append compiler_flags " $arg"
  90. func_append linker_flags " $arg"
  91. ;;
  92. -all-static)]], {plain = true})
  93. os.vrunv("make")
  94. os.vrunv("make install")
  95. else
  96. local configs = {
  97. "-Dbashcompletiondir=no",
  98. "-Dfishcompletiondir=no",
  99. "-Dzshcompletiondir=no",
  100. "-Dmanpages=false",
  101. "-Dtools=false"
  102. }
  103. table.insert(configs, "-Dlogging=" .. (package:config("logging") and "true" or "false"))
  104. table.insert(configs, "-Dzstd=" .. (package:config("zstd") and "enabled" or "disabled"))
  105. table.insert(configs, "-Dzlib=" .. (package:config("zlib") and "enabled" or "disabled"))
  106. table.insert(configs, "-Dxz=" .. (package:config("xz") and "enabled" or "disabled"))
  107. table.insert(configs, "-Dopenssl=" .. (package:config("openssl") and "enabled" or "disabled"))
  108. io.replace("meson.build", "_tools = %[(.-)%]", "_tools = []")
  109. import("package.tools.meson").install(package, configs)
  110. end
  111. os.mv(path.join(package:installdir("include"), "libkmod.h"), path.join(package:installdir("include/libkmod"), "libkmod.h"))
  112. end)
  113. on_test(function (package)
  114. assert(package:has_cfuncs("kmod_new", {includes = "libkmod.h"}))
  115. assert(package:has_cfuncs("kmod_new", {includes = "libkmod/libkmod.h"}))
  116. end)