Browse Source

add libsoundio (#285)

* 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 <[email protected]>
ruki 4 years ago
parent
commit
a8bcd72dcb
1 changed files with 99 additions and 0 deletions
  1. 99 0
      packages/l/libsoundio/xmake.lua

+ 99 - 0
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)