2
0

xmake.lua 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package("libsoundio")
  2. set_homepage("http://libsound.io/")
  3. set_description("C library for cross-platform real-time audio input and output.")
  4. set_license("MIT")
  5. set_urls("https://github.com/andrewrk/libsoundio/archive/$(version).tar.gz",
  6. "https://github.com/andrewrk/libsoundio.git")
  7. add_versions("2.0.0", "67a8fc1c9bef2b3704381bfb3fb3ce99e3952bc4fea2817729a7180fddf4a71e")
  8. add_includedirs("include", "include/soundio")
  9. add_configs("jack", { description = "Enable JACK backend.", default = false, type = "boolean"})
  10. add_configs("pulseaudio", { description = "Enable PulseAudio backend.", default = false, type = "boolean"})
  11. add_configs("alsa", { description = "Enable Alsa backend.", default = false, type = "boolean"})
  12. add_configs("coreaudio", { description = "Enable CoreAudio backend.", default = false, type = "boolean"})
  13. add_configs("wasapi", { description = "Enable WASAPI backend.", default = false, type = "boolean"})
  14. if is_plat("windows", "mingw") then
  15. add_syslinks("ole32")
  16. elseif is_plat("linux", "bsd", "macosx") then
  17. add_syslinks("pthread")
  18. end
  19. on_load(function (package)
  20. if package:is_plat("windows", "mingw") and not package:config("shared") then
  21. package:add("defines", "SOUNDIO_STATIC_LIBRARY")
  22. elseif package:is_plat("macosx") and package:config("coreaudio") and not package:config("shared") then
  23. package:add("frameworks", "CoreAudio", "CoreFoundation", "AudioToolbox")
  24. end
  25. end)
  26. on_install(function (package)
  27. io.gsub("src/config.h.in", "#cmakedefine SOUNDIO_HAVE_JACK", "${define SOUNDIO_HAVE_JACK}")
  28. io.gsub("src/config.h.in", "#cmakedefine SOUNDIO_HAVE_PULSEAUDIO", "${define SOUNDIO_HAVE_PULSEAUDIO}")
  29. io.gsub("src/config.h.in", "#cmakedefine SOUNDIO_HAVE_ALSA", "${define SOUNDIO_HAVE_ALSA}")
  30. io.gsub("src/config.h.in", "#cmakedefine SOUNDIO_HAVE_COREAUDIO", "${define SOUNDIO_HAVE_COREAUDIO}")
  31. io.gsub("src/config.h.in", "#cmakedefine SOUNDIO_HAVE_WASAPI", "${define SOUNDIO_HAVE_WASAPI}")
  32. io.gsub("src/config.h.in", "@LIBSOUNDIO_VERSION_MAJOR@", "${VERSION_MAJOR}")
  33. io.gsub("src/config.h.in", "@LIBSOUNDIO_VERSION_MINOR@", "${VERSION_MINOR}")
  34. io.gsub("src/config.h.in", "@LIBSOUNDIO_VERSION_PATCH@", "${VERSION_ALTER}")
  35. io.gsub("src/config.h.in", "@LIBSOUNDIO_VERSION@", package:version_str())
  36. io.writefile("xmake.lua", ([[
  37. set_version("%s")
  38. add_rules("mode.debug", "mode.release")
  39. for _, name in ipairs({"jack", "pulseaudio", "alsa", "coreaudio", "wasapi"}) do
  40. option(name)
  41. set_default(false)
  42. set_showmenu(true)
  43. set_configvar("SOUNDIO_HAVE_" .. name:upper(), 1)
  44. if name == "coreaudio" then
  45. add_frameworks("CoreAudio", "CoreFoundation", "AudioToolbox")
  46. else
  47. -- TODO for other backend or use add_requires
  48. end
  49. option_end()
  50. end
  51. target("soundio")
  52. set_kind("$(kind)")
  53. add_files("src/*.c|alsa.c|jack.c|wasapi.c|pulseaudio.c|coreaudio.c")
  54. add_includedirs(".", "soundio")
  55. set_configdir("soundio")
  56. add_configfiles("src/config.h.in")
  57. add_headerfiles("(soundio/*.h)")
  58. if is_plat("windows") then
  59. add_cflags("/TP") -- fix missing stdatomic.h
  60. end
  61. for _, name in ipairs({"jack", "pulseaudio", "alsa", "coreaudio", "wasapi"}) do
  62. if has_config(name) then
  63. add_files("src/" .. name .. ".c")
  64. add_options(name)
  65. end
  66. end
  67. if is_kind("shared") then
  68. if is_plat("windows", "mingw") then
  69. add_syslinks("ole32")
  70. elseif is_plat("linux", "bsd", "macosx") then
  71. add_syslinks("pthread")
  72. end
  73. end
  74. ]]):format(package:version_str()))
  75. local configs = {}
  76. if package:config("shared") then
  77. configs.kind = "shared"
  78. elseif not package:is_plat("windows", "mingw") and package:config("pic") ~= false then
  79. configs.cxflags = "-fPIC"
  80. end
  81. -- TODO we only support coreaudio backend now
  82. for _, name in ipairs({"jack", "pulseaudio", "alsa", "coreaudio", "wasapi"}) do
  83. if package:config(name) then
  84. configs[name] = true
  85. end
  86. end
  87. import("package.tools.xmake").install(package, configs)
  88. end)
  89. on_test(function (package)
  90. assert(package:has_cfuncs("soundio_create", {includes = "soundio/soundio.h"}))
  91. end)