| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- package("libdatachannel")
- set_homepage("https://libdatachannel.org/")
- set_description("C/C++ WebRTC network library featuring Data Channels, Media Transport, and WebSockets")
- set_license("MPL-2.0")
- add_urls("https://github.com/paullouisageneau/libdatachannel/archive/refs/tags/$(version).tar.gz",
- "https://github.com/paullouisageneau/libdatachannel.git", {submodules = false})
- add_versions("v0.23.2", "b9606efc5b2b173f2d22d0be3f6ba4f12af78c00ca02cde5932f3ff902980eb9")
- add_versions("v0.23.1", "63e14d619ac4d9cc310a0c7620b80e6da88abf878f27ccc78cd099f95d47b121")
- add_configs("gnutls", {description = "Use GnuTLS instead of OpenSSL", default = false, type = "boolean", readonly = true})
- add_configs("mbedtls", {description = "Use Mbed TLS instead of OpenSSL", default = false, type = "boolean"})
- add_configs("nice", {description = "Use libnice instead of libjuice", default = false, type = "boolean", readonly = true})
- add_configs("websocket", {description = "Enable WebSocket support", default = false, type = "boolean"})
- add_configs("media", {description = "Enable media transport support", default = false, type = "boolean"})
- add_configs("capi_stdcall", {description = "Set calling convention of C API callbacks stdcall", default = false, type = "boolean"})
- add_configs("sctp_debug", {description = "Enable SCTP debugging output to verbose log", default = false, type = "boolean"})
- add_configs("rtc_update_version_header", {description = "Enable updating the version header", default = false, type = "boolean"})
- if is_plat("windows", "mingw") then
- add_syslinks("ws2_32")
- elseif is_plat("linux", "bsd") then
- add_syslinks("pthread")
- end
- add_deps("cmake")
- add_deps("plog", "usrsctp")
- add_deps("nlohmann_json", {configs = {cmake = true}})
- on_check("wasm", function (target)
- raise("package(libdatachannel) dep(usrsctp) unsupported wasm platform")
- end)
- on_check("android", function (package)
- local ndk = package:toolchain("ndk")
- local ndk_sdkver = ndk:config("ndk_sdkver")
- assert(ndk_sdkver and tonumber(ndk_sdkver) > 23, "package(libdatachannel) dep(usrsctp) need ndk api level > 23")
- end)
- on_load(function (package)
- if package:config("mbedtls") then
- raise("Unsupported now, build failed with `src/impl/dtlstransport.cpp:373:7: error: 'mbedtls_ssl_srtp_profile' does not name a type; did you mean 'mbedtls_x509_crt_profile'?`")
- package:add("deps", "mbedtls")
- elseif package:config("gnutls") then
- package:add("deps", "gnutls")
- else
- package:add("deps", "openssl3")
- end
- if package:config("nice") then
- package:add("deps", "libnice")
- else
- package:add("deps", "libjuice")
- end
- if package:config("media") then
- package:add("deps", "srtp")
- else
- package:add("defines", "RTC_ENABLE_MEDIA=0")
- end
- if package:config("capi_stdcall") then
- package:add("defines", "CAPI_STDCALL")
- end
- package:add("defines", "RTC_ENABLE_WEBSOCKET=" .. (package:config("websocket") and "1" or "0"))
- if not package:config("shared") then
- package:add("defines", "RTC_STATIC")
- end
- end)
- on_install("!mingw", function (package)
- io.replace("CMakeLists.txt", "set(CMAKE_POSITION_INDEPENDENT_CODE ON)", "", {plain = true})
- -- add -DJUICE_STATIC from config mode
- io.replace("CMakeLists.txt", "find_package(LibJuice REQUIRED)", "find_package(LibJuice CONFIG REQUIRED)", {plain = true})
- -- Error evaluating generator expression: $<TARGET_PDB_FILE:datachannel>
- -- TARGET_PDB_FILE is allowed only for targets with linker created artifacts.
- if package:is_plat("windows") then
- io.replace("CMakeLists.txt", "if(MSVC)\n\tinstall", "if(0)\ninstall", {plain = true})
- end
- local configs = {
- "-DNO_EXAMPLES=ON",
- "-DNO_TESTS=ON",
- "-DWARNINGS_AS_ERRORS=OFF",
- "-DPREFER_SYSTEM_LIB=ON",
- }
- table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:is_debug() and "Debug" or "Release"))
- table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
- local openssl = package:dep("openssl3")
- if openssl and not openssl:is_system() then
- table.insert(configs, "-DOPENSSL_USE_STATIC_LIBS=" .. (not openssl:config("shared") and "ON" or "OFF"))
- table.insert(configs, "-DOPENSSL_ROOT_DIR=" .. openssl:installdir())
- end
- table.insert(configs, "-DUSE_GNUTLS=" .. (package:config("gnutls") and "ON" or "OFF"))
- table.insert(configs, "-DUSE_MBEDTLS=" .. (package:config("mbedtls") and "ON" or "OFF"))
- table.insert(configs, "-DUSE_NICE=" .. (package:config("nice") and "ON" or "OFF"))
- table.insert(configs, "-DNO_WEBSOCKET=" .. (not package:config("websocket") and "ON" or "OFF"))
- table.insert(configs, "-DNO_MEDIA=" .. (not package:config("media") and "ON" or "OFF"))
- table.insert(configs, "-DCAPI_STDCALL=" .. (package:config("capi_stdcall") and "ON" or "OFF"))
- table.insert(configs, "-DSCTP_DEBUG=" .. (package:config("sctp_debug") and "ON" or "OFF"))
- table.insert(configs, "-DRTC_UPDATE_VERSION_HEADER=" .. (package:config("rtc_update_version_header") and "ON" or "OFF"))
- import("package.tools.cmake").install(package, configs, {
- targets = {
- package:config("shared") and "datachannel" or "datachannel-static",
- }
- })
- end)
- on_test(function (package)
- assert(package:has_cfuncs("rtcSetUserPointer", {includes = "rtc/rtc.h"}))
- end)
|