From a8bcd72dcb062818c57ade09eb06ca42f4450328 Mon Sep 17 00:00:00 2001 From: ruki Date: Fri, 12 Feb 2021 09:51:18 +0800 Subject: [PATCH] add libsoundio (#285) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add libsoundio * Fix libsoundio for Windows * Fix libsoundio * use xmake.lua to port libsoundio * remove patches * port libsoundio Co-authored-by: Jérôme Leclercq --- packages/l/libsoundio/xmake.lua | 99 +++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 packages/l/libsoundio/xmake.lua diff --git a/packages/l/libsoundio/xmake.lua b/packages/l/libsoundio/xmake.lua new file mode 100644 index 000000000..3bdc43cef --- /dev/null +++ b/packages/l/libsoundio/xmake.lua @@ -0,0 +1,99 @@ +package("libsoundio") + set_homepage("http://libsound.io/") + set_description("C library for cross-platform real-time audio input and output.") + set_license("MIT") + + set_urls("https://github.com/andrewrk/libsoundio/archive/$(version).tar.gz", + "https://github.com/andrewrk/libsoundio.git") + + add_versions("2.0.0", "67a8fc1c9bef2b3704381bfb3fb3ce99e3952bc4fea2817729a7180fddf4a71e") + + add_includedirs("include", "include/soundio") + + add_configs("jack", { description = "Enable JACK backend.", default = false, type = "boolean"}) + add_configs("pulseaudio", { description = "Enable PulseAudio backend.", default = false, type = "boolean"}) + add_configs("alsa", { description = "Enable Alsa backend.", default = false, type = "boolean"}) + add_configs("coreaudio", { description = "Enable CoreAudio backend.", default = false, type = "boolean"}) + add_configs("wasapi", { description = "Enable WASAPI backend.", default = false, type = "boolean"}) + + if is_plat("windows", "mingw") then + add_syslinks("ole32") + elseif is_plat("linux", "bsd", "macosx") then + add_syslinks("pthread") + end + + on_load(function (package) + if package:is_plat("windows", "mingw") and not package:config("shared") then + package:add("defines", "SOUNDIO_STATIC_LIBRARY") + elseif package:is_plat("macosx") and package:config("coreaudio") and not package:config("shared") then + package:add("frameworks", "CoreAudio", "CoreFoundation", "AudioToolbox") + end + end) + + on_install(function (package) + io.gsub("src/config.h.in", "#cmakedefine SOUNDIO_HAVE_JACK", "${define SOUNDIO_HAVE_JACK}") + io.gsub("src/config.h.in", "#cmakedefine SOUNDIO_HAVE_PULSEAUDIO", "${define SOUNDIO_HAVE_PULSEAUDIO}") + io.gsub("src/config.h.in", "#cmakedefine SOUNDIO_HAVE_ALSA", "${define SOUNDIO_HAVE_ALSA}") + io.gsub("src/config.h.in", "#cmakedefine SOUNDIO_HAVE_COREAUDIO", "${define SOUNDIO_HAVE_COREAUDIO}") + io.gsub("src/config.h.in", "#cmakedefine SOUNDIO_HAVE_WASAPI", "${define SOUNDIO_HAVE_WASAPI}") + io.gsub("src/config.h.in", "@LIBSOUNDIO_VERSION_MAJOR@", "${VERSION_MAJOR}") + io.gsub("src/config.h.in", "@LIBSOUNDIO_VERSION_MINOR@", "${VERSION_MINOR}") + io.gsub("src/config.h.in", "@LIBSOUNDIO_VERSION_PATCH@", "${VERSION_ALTER}") + io.gsub("src/config.h.in", "@LIBSOUNDIO_VERSION@", package:version_str()) + io.writefile("xmake.lua", ([[ + set_version("%s") + add_rules("mode.debug", "mode.release") + for _, name in ipairs({"jack", "pulseaudio", "alsa", "coreaudio", "wasapi"}) do + option(name) + set_default(false) + set_showmenu(true) + set_configvar("SOUNDIO_HAVE_" .. name:upper(), 1) + if name == "coreaudio" then + add_frameworks("CoreAudio", "CoreFoundation", "AudioToolbox") + else + -- TODO for other backend or use add_requires + end + option_end() + end + target("soundio") + set_kind("$(kind)") + add_files("src/*.c|alsa.c|jack.c|wasapi.c|pulseaudio.c|coreaudio.c") + add_includedirs(".", "soundio") + set_configdir("soundio") + add_configfiles("src/config.h.in") + add_headerfiles("(soundio/*.h)") + if is_plat("windows") then + add_cflags("/TP") -- fix missing stdatomic.h + end + for _, name in ipairs({"jack", "pulseaudio", "alsa", "coreaudio", "wasapi"}) do + if has_config(name) then + add_files("src/" .. name .. ".c") + add_options(name) + end + end + if is_kind("shared") then + if is_plat("windows", "mingw") then + add_syslinks("ole32") + elseif is_plat("linux", "bsd", "macosx") then + add_syslinks("pthread") + end + end + ]]):format(package:version_str())) + local configs = {} + if package:config("shared") then + configs.kind = "shared" + elseif not package:is_plat("windows", "mingw") and package:config("pic") ~= false then + configs.cxflags = "-fPIC" + end + -- TODO we only support coreaudio backend now + for _, name in ipairs({"jack", "pulseaudio", "alsa", "coreaudio", "wasapi"}) do + if package:config(name) then + configs[name] = true + end + end + import("package.tools.xmake").install(package, configs) + end) + + on_test(function (package) + assert(package:has_cfuncs("soundio_create", {includes = "soundio/soundio.h"})) + end)