build: add support for meson

Change-Id: I331522a09257d4ae787893ff72c270886c1aa210
Reviewed-by: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
This commit is contained in:
Vladimir Stoiakin
2019-01-18 19:21:41 +03:00
committed by Adrien Béraud
parent c4a7918c0c
commit 387f6988cd
22 changed files with 1347 additions and 57 deletions

84
README
View File

@ -19,7 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
Introduction
------------
GNU Ring is a Voice-over-IP software phone. We want it to be:
GNU Jami is a Voice-over-IP software phone. We want it to be:
- user friendly (fast, sleek, easy to learn interface)
- professional grade (transfers, holds, optimal audio quality)
- compatible with Asterisk (using SIP account)
@ -27,17 +27,17 @@ GNU Ring is a Voice-over-IP software phone. We want it to be:
- customizable
As the SIP/audio daemon and the user interface are separate processes,
it is easy to provide different user interfaces. GNU Ring comes with
it is easy to provide different user interfaces. GNU Jami comes with
various graphical user interfaces and even scripts to control the daemon from
the shell.
GNU Ring is currently used by the support team of Savoir-faire Linux Inc.
GNU Jami is currently used by the support team of Savoir-faire Linux Inc.
More information is available on the project homepage:
https://www.jami.net/
This source tree contains the daemon application only, DRing, that handles
the business logic of GNU Ring. UIs are located in differents repositories. See
This source tree contains the daemon application only that handles
the business logic of GNU Jami. UIs are located in differents repositories. See
the Contributing section for more information.
@ -47,7 +47,6 @@ Short description of content of source tree
- src/ is the core of DRing.
- bin/ contains applications main code.
- bin/dbus, the D-Bus XML interfaces, and C++ bindings
- bin/restcpp, the C++ REST API implemented with Restinio
About Savoir-faire Linux
------------------------
@ -68,19 +67,54 @@ cd native
../bootstrap
make
2) Then the dring application
2) Then the jamid application
cd ../../
./autogen.sh
./configure
make
make install
mkdir build
export PATH=$PATH:`pwd`/contrib/`cc -dumpmachine`/bin
meson -Dpkg_config_path=`pwd`/contrib/`cc -dumpmachine`/lib/pkgconfig -Ddefault_library=static -Dinterfaces=dbus build
cd build
ninja
ninja install
Done !
More details available here:
https://git.jami.net/savoirfairelinux/ring-project/wikis/technical/Build-instructions
How to compile on Linux for Android
-----------------------------------
1) Download and install Android NDK
2) Compile the dependencies
export ANDROID_NDK=<NDK>
export ANDROID_ABI=arm64-v8a
export ANDROID_API=29
export TOOLCHAIN=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64
export TARGET=aarch64-linux-android
export CC=$TOOLCHAIN/bin/$TARGET$ANDROID_API-clang
export CXX=$TOOLCHAIN/bin/$TARGET$ANDROID_API-clang++
export AR=$TOOLCHAIN/bin/$TARGET-ar
export LD=$TOOLCHAIN/bin/$TARGET-ld
export RANLIB=$TOOLCHAIN/bin/$TARGET-ranlib
export STRIP=$TOOLCHAIN/bin/$TARGET-strip
export PATH=$PATH:$TOOLCHAIN/bin
cd contrib
mkdir native
cd native
../bootstrap --build=x86_64-pc-linux-gnu --host=$TARGET$ANDROID_API
make
3) Update directories in the file /cross-files/android_arm64_api29.txt
4) Compile the library libjami.so
cd ../../
mkdir build
meson --cross-file `pwd`/cross-files/android_arm64_api29.txt build
cd build
ninja
ninja install
How to compile on OSX
---------------------
@ -125,7 +159,7 @@ Run: 'brew link --force gettext' to fix it.
Clang compatibility (developers only)
-------------------------------------
It is possible to compile dring with Clang by setting CC and CXX variables
It is possible to compile jamid with Clang by setting CC and CXX variables
to 'clang' and 'clang++' respectively when calling ./configure.
Currently it is not possible to use the DBus interface mechanism, and the
@ -133,26 +167,6 @@ interaction between daemon and client will not work; for each platform where
D-Bus is not available the client should implement all the methods in the
*_stub.cpp files.
How to compile with the REST API
--------------------------------
GNU Ring offers two REST API. One written in C++, and the other written in Cython.
Up to this date, only the C++ API is available. The Cython API will soon follow.
To compile Ring-daemon with the C++ REST API, follow these two steps :
1) Compile the dependencies
cd contrib
mkdir native
cd native
../bootstrap
make
2) Then compile the daemon
cd ../../
./autogen.sh
./configure --without-dbus --with-restcpp
make
SIP accounts
---------------------
@ -162,7 +176,7 @@ clients (KDE and GNOME).
By doing this, you will be able to call other accounts known to this server.
Contributing to GNU Ring
Contributing to GNU Jami
------------------------
Of course we love patches. And contributions. And spring rolls.
@ -175,10 +189,10 @@ contains the client subprojects:
- https://gerrit-ring.savoirfairelinux.com/#/admin/projects/
Do not hesitate to join us and post comments, suggestions, questions
and general feedback on the GNU Ring mailing-list:
and general feedback on the GNU Jami mailing-list:
https://lists.gnu.org/mailman/listinfo/ring
IRC (on #freenode):
- #ring
-- The GNU Ring Team
-- The GNU Jami Team

View File

@ -19,7 +19,7 @@
*/
#include "dbusvideomanager.h"
#include "client/videomanager.h"
#include "dring/videomanager_interface.h"
DBusVideoManager::DBusVideoManager(DBus::Connection& connection)
: DBus::ObjectAdaptor(connection, "/cx/ring/Ring/VideoManager")

64
bin/dbus/jamid.pod Normal file
View File

@ -0,0 +1,64 @@
=head1 NAME
jamid - core daemon for Jami: secure and distributed voice, video and chat communication platform.
=head1 SYNOPSIS
B<jamid> [OPTION]...
=head1 DESCRIPTION
Jami is meant to be a robust enterprise-class desktop phone. It provides functions like call transfer, call hold, multiple lines, multiple accounts support.
Jami audio layer is build upon a native ALSA interface and a native PulseAudio interface.
B<jamid> is the core of Jami; it provides the DBus service "cx.ring.Ring". You need to install a client to use the daemon, for instance GTK+ client, B<jami-gnome>.
=head1 OPTIONS
=over 8
=item B<-c, --console>
Output the log to the console instead of syslog.
=item B<-d, --debug>
Debug mode (more verbose output).
=item B<-a, --auto-answer>
Force automatic answer to incoming calls.
=item B<-p, --persistent>
Stay alive after all clients quit.
=item B<-h, --help>
Print short list of command-line options.
=back
=head1 BUGS
Please report bugs at https://git.jami.net.
=head1 AUTHORS
B<jamid> is developed in Montreal by Savoir-faire Linux Inc.
This manual page was written by Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>.
=head1 SEE ALSO
B<jami-gnome>(1)
=head1 COPYRIGHT
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License version 3 as published by the
Free Software Foundation.
On Debian GNU/Linux systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL'.
=cut

187
bin/dbus/main.cpp Normal file
View File

@ -0,0 +1,187 @@
/*
* Copyright (C) 2004-2020 Savoir-faire Linux Inc.
*
* Author: Alexandre Bourget <alexandre.bourget@savoirfairelinux.com>
* Author: Yan Morin <yan.morin@savoirfairelinux.com>
* Author: Laurielle Lea <laurielle.lea@savoirfairelinux.com>
* Author: Simon Zeni <simon.zeni@savoirfairelinux.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "dbusclient.h"
#include "dring/dring.h"
#include <signal.h>
#include <getopt.h>
#include <iostream>
#include <thread>
#include <memory>
#include <cstring>
#include <cstdlib>
static int ringFlags = 0;
static std::weak_ptr<DBusClient> weakClient;
static void
print_title()
{
std::cout
<< "Jami Daemon " << DRing::version()
<< ", by Savoir-faire Linux 2004-2020" << std::endl
<< "https://jami.net/" << std::endl
#ifdef ENABLE_VIDEO
<< "[Video support enabled]" << std::endl
#endif
<< std::endl;
}
static void
print_usage()
{
std::cout << std::endl <<
"-c, --console \t- Log in console (instead of syslog)" << std::endl <<
"-d, --debug \t- Debug mode (more verbose)" << std::endl <<
"-p, --persistent \t- Stay alive after client quits" << std::endl <<
"--auto-answer \t- Force automatic answer to incoming calls" << std::endl <<
"-h, --help \t- Print help" << std::endl;
}
// Parse command line arguments, setting debug options or printing a help
// message accordingly.
// returns true if we should quit (i.e. help was printed), false otherwise
static bool
parse_args(int argc, char *argv[], bool& persistent)
{
int consoleFlag = false;
int debugFlag = false;
int helpFlag = false;
int versionFlag = false;
int autoAnswer = false;
const struct option long_options[] = {
/* These options set a flag. */
{"debug", no_argument, nullptr, 'd'},
{"console", no_argument, nullptr, 'c'},
{"persistent", no_argument, nullptr, 'p'},
{"help", no_argument, nullptr, 'h'},
{"version", no_argument, nullptr, 'v'},
{"auto-answer", no_argument, &autoAnswer, true},
{nullptr, 0, nullptr, 0} /* Sentinel */
};
while (true) {
/* getopt_long stores the option index here. */
int option_index = 0;
auto c = getopt_long(argc, argv, "dcphv:", long_options, &option_index);
// end of the options
if (c == -1)
break;
switch (c) {
case 'd':
debugFlag = true;
break;
case 'c':
consoleFlag = true;
break;
case 'p':
persistent = true;
break;
case 'h':
case '?':
helpFlag = true;
break;
case 'v':
versionFlag = true;
break;
default:
break;
}
}
if (helpFlag) {
print_usage();
return true;
}
if (versionFlag) {
// We've always print the title/version, so we can just exit
return true;
}
if (consoleFlag)
ringFlags |= DRing::DRING_FLAG_CONSOLE_LOG;
if (debugFlag)
ringFlags |= DRing::DRING_FLAG_DEBUG;
if (autoAnswer)
ringFlags |= DRing::DRING_FLAG_AUTOANSWER;
return false;
}
static void
signal_handler(int code)
{
std::cerr << "Caught signal " << strsignal(code)
<< ", terminating..." << std::endl;
// Unset signal handlers
signal(SIGHUP, SIG_DFL);
signal(SIGINT, SIG_DFL);
signal(SIGTERM, SIG_DFL);
// Interrupt the process
if (auto client = weakClient.lock())
client->exit();
}
int
main(int argc, char *argv [])
{
print_title();
bool persistent = false;
if (parse_args(argc, argv, persistent))
return 0;
// TODO: Block signals for all threads but the main thread, decide how/if we should
// handle other signals
signal(SIGINT, signal_handler);
signal(SIGHUP, signal_handler);
signal(SIGTERM, signal_handler);
signal(SIGPIPE, SIG_IGN);
try {
if (auto client = std::make_shared<DBusClient>(ringFlags, persistent))
{
weakClient = client;
return client->event_loop();
}
} catch (const std::exception& ex) {
std::cerr << "Exception in the DBusClient: " << ex.what() << std::endl;
}
return 1;
}

93
bin/dbus/meson.build Normal file
View File

@ -0,0 +1,93 @@
jamid_includedirs = include_directories(
'../..',
'../../src',
'../../src/dring'
)
jamid_sources = files(
'dbuscallmanager.cpp',
'dbusclient.cpp',
'dbusconfigurationmanager.cpp',
'dbusinstance.cpp',
'dbuspresencemanager.cpp',
'main.cpp'
)
jamid_targets = []
jamid_targets += custom_target('callmanager.adaptor',
command: [progdbusxxxml2cpp, '@INPUT@', '--adaptor=@OUTPUT@'],
input: 'cx.ring.Ring.CallManager.xml',
output: 'dbuscallmanager.adaptor.h'
)
jamid_targets += custom_target('configurationmanager.adaptor',
command: [progdbusxxxml2cpp, '@INPUT@', '--adaptor=@OUTPUT@'],
input: 'cx.ring.Ring.ConfigurationManager.xml',
output: 'dbusconfigurationmanager.adaptor.h'
)
jamid_targets += custom_target('instance.adaptor',
command: [progdbusxxxml2cpp, '@INPUT@', '--adaptor=@OUTPUT@'],
input: 'cx.ring.Ring.Instance.xml',
output: 'dbusinstance.adaptor.h'
)
jamid_targets += custom_target('presencemanager.adaptor',
command: [progdbusxxxml2cpp, '@INPUT@', '--adaptor=@OUTPUT@'],
input: 'cx.ring.Ring.PresenceManager.xml',
output: 'dbuspresencemanager.adaptor.h'
)
if conf.get('ENABLE_VIDEO')
jamid_targets += custom_target('videomanager.adaptor',
command: [progdbusxxxml2cpp, '@INPUT@', '--adaptor=@OUTPUT@'],
input: 'cx.ring.Ring.VideoManager.xml',
output: 'dbusvideomanager.adaptor.h'
)
jamid_sources += files(
'dbusvideomanager.cpp'
)
endif
if progpod2man.found()
jamid_targets += custom_target('jamid.man',
command: [progpod2man, '--section=8', '--release='+meson.project_version(), '--center', '""', '@INPUT@', '@OUTPUT@'],
input: 'jamid.pod',
output: 'jamid.8',
install: true,
install_dir: get_option('mandir') / 'man8'
)
endif
jamid = executable('jamid',
jamid_targets,
include_directories: jamid_includedirs,
sources: jamid_sources,
dependencies: depdbuscpp,
link_with: libjami,
install: true,
install_dir: get_option('libdir')
)
configure_file(
configuration: {'LIBDIR': get_option('prefix') / get_option('libdir')},
input: 'net.jami.daemon.service.in',
output: 'cx.ring.Ring.service',
install: true,
install_dir: get_option('datadir') / 'dbus-1' / 'services'
)
install_data(
'cx.ring.Ring.CallManager.xml',
'cx.ring.Ring.ConfigurationManager.xml',
'cx.ring.Ring.Instance.xml',
'cx.ring.Ring.PresenceManager.xml',
install_dir: get_option('datadir') / 'dbus-1' / 'interfaces'
)
if conf.get('ENABLE_VIDEO')
install_data(
'cx.ring.Ring.VideoManager.xml',
install_dir: get_option('datadir') / 'dbus-1' / 'interfaces'
)
endif

View File

@ -0,0 +1,3 @@
[D-BUS Service]
Name=cx.ring.Ring
Exec=@LIBDIR@/jamid

18
bin/nodejs/meson.build Normal file
View File

@ -0,0 +1,18 @@
nodejs_wrapper_target = custom_target('nodejs.wrapper',
command: [progswig, '-v', '-c++', '-javascript', '-node', '-o', '@OUTPUT@', '@INPUT@'],
input: 'nodejs_interface.i',
output: 'nodejs_wrapper.cpp'
)
nodejs_makefile_target = custom_target('nodejs.makefile',
command: [prognodegyp, 'configure', '--target=1.6.2', '--arch=x64', '--dist-url=https://atom.io/download/electron'],
output: 'build/Makefile',
depends: nodejs_wrapper_target
)
nodejs_node_target = custom_target('nodejs.node',
command: [prognodegyp, 'build'],
output: 'build/Release/obj.target/dring.node',
depends: nodejs_makefile_target,
build_by_default: true
)

View File

@ -0,0 +1,89 @@
From 078414b75fe0544a529332d42c583bcb76e271be Mon Sep 17 00:00:00 2001
From: Vladimir Stoiakin <VStoiakin@lavabit.com>
Date: Thu, 23 Apr 2020 14:06:40 +0300
Subject: [PATCH] libpjproject.pc: correct the field 'cflags'
---
Makefile | 6 ++----
aconfigure.ac | 3 +++
build.mak.in | 7 +++----
libpjproject.pc.in | 4 ++--
4 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/Makefile b/Makefile
index ffaf638dd..3fd5cab40 100644
--- a/Makefile
+++ b/Makefile
@@ -132,10 +132,8 @@ install:
sed -e "s!@INCLUDEDIR@!$(includedir)!" | \
sed -e "s!@LIBDIR@!$(libdir)!" | \
sed -e "s/@PJ_VERSION@/$(PJ_VERSION)/" | \
- sed -e "s!@PJ_LDLIBS@!!" | \
- sed -e "s!@PJ_LDXXLIBS@!$(PJ_LDXXLIBS)!" | \
- sed -e "s!@PJ_INSTALL_CFLAGS@!!" | \
- sed -e "s!@PJ_INSTALL_CXXFLAGS@!$(PJ_INSTALL_CXXFLAGS)!" > $(DESTDIR)/$(libdir)/pkgconfig/libpjproject.pc
+ sed -e "s!@PJ_INSTALL_LDFLAGS@!$(PJ_INSTALL_LDFLAGS)!" | \
+ sed -e "s!@PJ_INSTALL_CFLAGS@!$(PJ_INSTALL_CFLAGS)!" > $(DESTDIR)/$(libdir)/pkgconfig/libpjproject.pc
uninstall:
$(RM) $(DESTDIR)$(libdir)/pkgconfig/libpjproject.pc
diff --git a/aconfigure.ac b/aconfigure.ac
index 0367679e2..954b81515 100644
--- a/aconfigure.ac
+++ b/aconfigure.ac
@@ -71,6 +71,7 @@ AC_SUBST(CC_CFLAGS)
AC_SUBST(ac_pjdir)
AC_SUBST(ac_build_mak_vars)
+AC_SUBST(ac_cflags)
case $host in
*mingw* | *cygw* | *win32* | *w32* )
@@ -144,8 +145,10 @@ AC_C_BIGENDIAN
if test "x$ac_cv_c_bigendian" = "xyes"; then
CFLAGS="$CFLAGS -DPJ_IS_BIG_ENDIAN=1 -DPJ_IS_LITTLE_ENDIAN=0"
+ ac_cflags="$ac_cflags -DPJ_IS_BIG_ENDIAN=1 -DPJ_IS_LITTLE_ENDIAN=0"
else
CFLAGS="$CFLAGS -DPJ_IS_BIG_ENDIAN=0 -DPJ_IS_LITTLE_ENDIAN=1"
+ ac_cflags="$ac_cflags -DPJ_IS_BIG_ENDIAN=0 -DPJ_IS_LITTLE_ENDIAN=1"
fi
dnl
diff --git a/build.mak.in b/build.mak.in
index abc0c4fa0..a9078bb25 100644
--- a/build.mak.in
+++ b/build.mak.in
@@ -299,7 +299,7 @@ export APP_LDXXLIBS := $(PJSUA2_LIB_LDLIB) \
-lstdc++ \
$(APP_LDLIBS)
-# Here are the variabels to use if application is using the library
+# Here are the variables to use if application is using the library
# from within the source distribution
export PJ_CC := $(APP_CC)
export PJ_CXX := $(APP_CXX)
@@ -317,6 +317,5 @@ export PJ_LIBXX_FILES := $(APP_LIBXX_FILES)
export PJ_INSTALL_DIR := @prefix@
export PJ_INSTALL_INC_DIR := @includedir@
export PJ_INSTALL_LIB_DIR := @libdir@
-export PJ_INSTALL_CFLAGS := -I$(PJ_INSTALL_INC_DIR) -DPJ_AUTOCONF=1 @CFLAGS@
-export PJ_INSTALL_CXXFLAGS := @CXXFLAGS@ $(PJ_INSTALL_CFLAGS)
-export PJ_INSTALL_LDFLAGS := -L$(PJ_INSTALL_LIB_DIR) $(APP_LDLIBS)
+export PJ_INSTALL_CFLAGS := -I$(PJ_INSTALL_INC_DIR) -DPJ_AUTOCONF=1 @ac_cflags@
+export PJ_INSTALL_LDFLAGS := -L$(PJ_INSTALL_LIB_DIR) $(APP_LDXXLIBS)
diff --git a/libpjproject.pc.in b/libpjproject.pc.in
index fa8d39114..30ea05c07 100644
--- a/libpjproject.pc.in
+++ b/libpjproject.pc.in
@@ -9,5 +9,5 @@ Name: libpjproject
Description: Multimedia communication library
URL: http://www.pjsip.org
Version: @PJ_VERSION@
-Libs: -L${libdir} @PJ_LDXXLIBS@
-Cflags: -I${includedir} @PJ_INSTALL_CXXFLAGS@
+Libs: @PJ_INSTALL_LDFLAGS@
+Cflags: @PJ_INSTALL_CFLAGS@
--
2.26.2

View File

@ -54,6 +54,7 @@ pjproject: pjproject-$(PJPROJECT_VERSION).tar.gz .sum-pjproject
$(APPLY) $(SRC)/pjproject/0007-pj_ice_sess.patch
$(APPLY) $(SRC)/pjproject/0008-fix_ioqueue_ipv6_sendto.patch
$(APPLY) $(SRC)/pjproject/0009-add-config-site.patch
$(APPLY) $(SRC)/pjproject/0010-fix-pkgconfig.patch
ifdef HAVE_ANDROID
$(APPLY) $(SRC)/pjproject/0001-android.patch
endif
@ -61,6 +62,7 @@ endif
$(MOVE)
.pjproject: pjproject
cd $< && autoconf -o aconfigure aconfigure.ac # for 0010-fix-pkgconfig.patch
ifdef HAVE_IOS
cd $< && ARCH="-arch $(ARCH)" IPHONESDK=$(IOS_SDK) $(HOSTVARS) EXCLUDE_APP=1 ./configure-iphone $(HOSTCONF) $(PJPROJECT_OPTIONS)
else

View File

@ -0,0 +1,29 @@
[host_machine]
system = 'linux'
cpu_family = 'aarch64'
cpu = 'aarch64'
endian = 'little'
# Compilers and tools reside in <NDK>/toolchains/llvm/prebuilt/<host-tag>/bin/
# Please add this path to the environment(PATH) before compiling
[binaries]
c = 'aarch64-linux-android29-clang'
cpp = 'aarch64-linux-android29-clang++'
ar = 'aarch64-linux-android-ar'
strip = 'aarch64-linux-android-strip'
pkgconfig = 'pkg-config'
#cmake = 'cmake'
#c_ld = 'gold'
#cpp_ld = 'gold'
#exe_wrapper = ''
[properties]
sys_root = '<daemon>/contrib/aarch64-linux-android29'
pkg_config_libdir = '<daemon>/contrib/aarch64-linux-android29/lib/pkgconfig'
#c_args = ['']
#c_link_args = ['']
#cpp_args = ['']
#cpp_link_args = ['']
#needs_exe_wrapper = true

View File

@ -0,0 +1,23 @@
[host_machine]
system = 'windows'
cpu_family = 'x86_64'
cpu = 'x86_64'
endian = 'little'
[binaries]
c = 'x86_64-w64-mingw32-gcc'
cpp = 'x86_64-w64-mingw32-g++'
ar = 'x86_64-w64-mingw32-ar'
strip = 'x86_64-w64-mingw32-strip'
pkgconfig = 'x86_64-w64-mingw32-pkg-config'
windres = 'x86_64-w64-mingw32-windres'
[properties]
#sys_root = ''
#pkg_config_libdir = ''
#c_args = ['']
#c_link_args = ['']
#cpp_args = ['']
#cpp_link_args = ['']
#needs_exe_wrapper = true

184
meson.build Normal file
View File

@ -0,0 +1,184 @@
project('jami-daemon', ['c', 'cpp'],
version: '9.1.0',
license: 'GPL3+',
default_options: ['cpp_std=gnu++14', 'buildtype=debugoptimized'],
meson_version:'>= 0.54'
)
modpkgconfig = import('pkgconfig')
modcmake = import('cmake')
#################################################
# Required dependencies
#################################################
depthreads = dependency('threads')
depopendht = dependency('opendht', version: '>= 2.1.0')
depgnutls = dependency('gnutls', version: '>= 3.6.7')
deplibpjproject = dependency('libpjproject')
deplibsecp256k1 = dependency('libsecp256k1', version: '>= 0.1')
deplibavcodec = dependency('libavcodec', version: '>= 56.60.100')
deplibavfilter = dependency('libavfilter', version: '>= 5.40.101')
deplibavdevice = dependency('libavdevice', version: '>= 56.4.100')
deplibavformat = dependency('libavformat', version: '>= 56.40.101')
deplibswscale = dependency('libswscale', version: '>= 3.1.101')
deplibswresample = dependency('libswresample', version: '>= 1.2.101')
deplibavutil = dependency('libavutil', version: '>= 55.75.100')
depspeex = dependency('speex')
depspeexdsp = dependency('speexdsp')
depyamlcpp = dependency('yaml-cpp', version: '>= 0.5.1', required: false)
if not depyamlcpp.found()
depyamlcpp = modcmake.subproject('yaml-cpp', cmake_options: [
'-DYAML_CPP_BUILD_TOOLS=OFF',
'-DYAML_CPP_BUILD_TESTS=OFF',
'-DYAML_CPP_BUILD_CONTRIB=OFF',
'-DBUILD_SHARED_LIBS=OFF'
]).dependency('yaml-cpp')
endif
depjsoncpp = dependency('jsoncpp', version: '>= 1.6.5',
fallback: ['jsoncpp', 'jsoncpp_dep'], default_options: ['default_library=static'])
depzlib = dependency('zlib', fallback: ['zlib', 'zlib_dep'], default_options: ['default_library=static'])
if get_option('interfaces').contains('dbus')
depdbuscpp = dependency('dbus-c++-1')
progdbusxxxml2cpp = find_program('dbusxx-xml2cpp', native: true)
endif
if get_option('interfaces').contains('nodejs')
progswig = find_program('swig', native: true)
prognodegyp = find_program('node-gyp', native: true)
endif
if get_option('tests')
depcppunit = dependency('cppunit', version: '>= 1.12')
endif
#################################################
# Optional dependencies and configuration
#################################################
progpod2man = find_program('pod2man', native: true, required: false)
conf = configuration_data()
conf.set_quoted('PACKAGE', 'jami')
conf.set_quoted('PACKAGE_NAME', 'Jami Daemon')
conf.set_quoted('PACKAGE_VERSION', meson.project_version())
conf.set_quoted('PACKAGE_STRING', 'Jami Daemon ' + meson.project_version())
conf.set_quoted('PROGSHAREDIR', get_option('datadir') / 'ring')
depopensl = meson.get_compiler('cpp').find_library('OpenSLES', has_headers: 'SLES/OpenSLES.h', required: get_option('opensl'))
conf.set10('HAVE_OPENSL', depopensl.found())
depalsa = dependency('alsa', version: '>= 1.0', required: get_option('alsa'))
conf.set10('HAVE_ALSA', depalsa.found())
deplibpulse = dependency('libpulse', version: '>= 0.9.15', required: get_option('pulseaudio'))
conf.set10('HAVE_PULSE', deplibpulse.found())
depjack = dependency('jack', required: get_option('jack'))
conf.set10('HAVE_JACK', depjack.found())
depportaudio = dependency('portaudio-2.0', required: get_option('portaudio'))
conf.set10('HAVE_PORTAUDIO', depportaudio.found())
deplibupnp = dependency('libupnp', required: get_option('upnp'))
conf.set10('HAVE_LIBUPNP', deplibupnp.found())
if get_option('natpmp_prefix') == ''
depnatpmp = meson.get_compiler('cpp').find_library('natpmp', has_headers: 'natpmp.h', required: get_option('natpmp'))
else
depnatpmp_ = meson.get_compiler('cpp').find_library('natpmp', dirs: get_option('natpmp_prefix') / 'lib', required: get_option('natpmp'))
if depnatpmp_.found()
depnatpmp = declare_dependency(
compile_args: '-I' + get_option('natpmp_prefix') / 'include',
dependencies: depnatpmp_
)
else
depnatpmp = depnatpmp_
endif
endif
conf.set10('HAVE_LIBNATPMP', depnatpmp.found())
depopenssl = dependency('openssl', required: get_option('name_service'))
conf.set10('HAVE_RINGNS', depopenssl.found())
if get_option('video')
conf.set('ENABLE_VIDEO', true)
if host_machine.system() == 'linux' and meson.get_compiler('cpp').get_define('__ANDROID__') != '1'
deplibudev = dependency('libudev')
endif
if get_option('hw_acceleration')
conf.set('RING_ACCEL', true)
conf.set('ENABLE_VIDEOTOOLBOX', host_machine.system() == 'darwin')
endif
endif
conf.set10('HAVE_COREAUDIO', host_machine.system() == 'darwin')
conf.set10('HAVE_SHM', host_machine.system() == 'linux' and meson.get_compiler('cpp').get_define('__ANDROID__') != '1')
configure_file(
output: 'config.h',
configuration: conf
)
add_project_arguments('-DHAVE_CONFIG_H', language: 'cpp')
add_project_arguments('-DHAVE_CONFIG_H', language: 'c')
#################################################
# Build targets
#################################################
add_project_arguments('-DRING_BUILD', language: 'cpp')
add_project_arguments('-DRING_BUILD', language: 'c')
if get_option('default_library') != 'static'
add_project_arguments('-Ddring_EXPORTS', language: 'cpp')
add_project_arguments('-Ddring_EXPORTS', language: 'c')
endif
add_project_arguments('-DASIO_STANDALONE', language: 'cpp')
add_project_arguments('-DASIO_STANDALONE', language: 'c')
subdir('src')
if get_option('interfaces').contains('dbus')
subdir('bin' / 'dbus')
endif
if get_option('interfaces').contains('nodejs')
subdir('bin' / 'nodejs')
endif
if get_option('tests')
subdir('test')
endif
#################################################
# Resources and metafiles
#################################################
subdir('ringtones')
if host_machine.system() == 'linux' and meson.get_compiler('cpp').get_define('__ANDROID__') != '1'
provides_content = ''
if get_option('interfaces').contains('dbus')
provides_content += ' <dbus type="user">cx.ring.Ring</dbus>'
endif
if get_option('interfaces').contains('library')
provides_content += (provides_content == '')? '' : '\n'
if get_option('default_library') == 'static'
provides_content += ' <library>libjami.a</library>'
elif get_option('default_library') == 'shared'
provides_content += ' <library>libjami.so</library>'
else
provides_content += ' <library>libjami.so</library>\n'
provides_content += ' <library>libjami.a</library>'
endif
endif
if provides_content != ''
configure_file(
configuration: {'PROVIDES_CONTENT': provides_content},
input: 'net.jami.daemon.metainfo.xml.in',
output: 'net.jami.daemon.metainfo.xml',
install: true,
install_dir: get_option('datadir') / 'metainfo'
)
endif
endif

15
meson_options.txt Normal file
View File

@ -0,0 +1,15 @@
option('interfaces', type: 'array', choices: ['library', 'dbus', 'nodejs'], value: ['library'])
option('video', type: 'boolean', value: true, description: 'Enable video support')
option('hw_acceleration', type: 'boolean', value: true, description: 'Enable hardware acceleration')
option('name_service', type: 'feature', value: 'auto', description: 'Enable Name Service')
option('opensl', type: 'feature', value: 'auto', description: 'Enable support for OpenSL')
option('alsa', type: 'feature', value: 'auto', description: 'Enable support for ALSA')
option('pulseaudio', type: 'feature', value: 'auto', description: 'Enable support for PulseAudio')
option('jack', type: 'feature', value: 'auto', description: 'Enable support for Jack')
option('portaudio', type: 'feature', value: 'auto', description: 'Enable support for PortAudio')
option('upnp', type: 'feature', value: 'auto', description: 'Enable support for UPnP')
option('natpmp', type: 'feature', value: 'auto', description: 'Enable support for NAT-PMP')
option('natpmp_prefix', type: 'string', value: '', description: 'Override a system directory to search for the library "natpmp"')
option('tests', type: 'boolean', value: false, description: 'Build tests')

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2019 Savoir-faire Linux -->
<!-- Copyright 2020 Savoir-faire Linux -->
<component>
<id>net.jami.daemon</id>
<metadata_license>CC-BY-SA-3.0</metadata_license>
@ -26,7 +26,7 @@
<url type="bugtracker">https://git.jami.net/savoirfairelinux/ring-daemon/issues/</url>
<provides>
<dbus type="user">cx.ring.Ring</dbus>
@PROVIDES_CONTENT@
</provides>
<categories>

14
ringtones/meson.build Normal file
View File

@ -0,0 +1,14 @@
install_data(
'01_AfroNigeria.opus',
'02_AfroNigeria.opus',
'03_AcousticGuitar.opus',
'04_ElectricGuitar.opus',
'05_AcousticIndia.opus',
'06_RingSoft.opus',
'07_RingTribal.opus',
'08_RingFirefly.opus',
'09_ElectroCloud.opus',
'10_UrbanTrap.opus',
'default.opus',
install_dir: get_option('datadir') / 'ring' / 'ringtones'
)

View File

@ -177,6 +177,23 @@ getDebugMode(void)
return debugMode;
}
static const char* check_error(int result, char* buffer) {
switch (result) {
case 0:
return buffer;
case ERANGE: /* should never happen */
return "unknown (too big to display)";
default:
return "unknown (invalid error number)";
}
}
static const char* check_error(char* result, char*) {
return result;
}
void
strErr(void)
{
@ -184,23 +201,7 @@ strErr(void)
JAMI_ERR("%m");
#else
char buf[1000];
const char* errstr;
switch (strerror_r(errno, buf, sizeof(buf))) {
case 0:
errstr = buf;
break;
case ERANGE: /* should never happen */
errstr = "unknown (too big to display)";
break;
default:
errstr = "unknown (invalid error number)";
break;
}
JAMI_ERR("%s", errstr);
JAMI_ERR("%s", check_error(strerror_r(errno, buf, sizeof(buf)), buf));
#endif
}

View File

@ -33,8 +33,6 @@
#include <cmath>
namespace jami {
struct AudioLayer::EchoState;
enum Direction { Input = 0, Output = 1, IO = 2, End = 3 };

309
src/meson.build Normal file
View File

@ -0,0 +1,309 @@
libjami_includedirs = include_directories(
'..',
'dring',
'media',
'jamidht/eth'
)
libjami_sources = files(
'client/callmanager.cpp',
'client/configurationmanager.cpp',
'client/datatransfer.cpp',
'client/presencemanager.cpp',
'client/ring_signal.cpp',
'client/videomanager.cpp',
'config/yamlparser.cpp',
'hooks/urlhook.cpp',
'im/instant_messaging.cpp',
'im/message_engine.cpp',
'jamidht/eth/libdevcore/Common.cpp',
'jamidht/eth/libdevcore/CommonData.cpp',
'jamidht/eth/libdevcore/FixedHash.cpp',
'jamidht/eth/libdevcore/SHA3.cpp',
'jamidht/eth/libdevcrypto/Common.cpp',
'jamidht/accountarchive.cpp',
'jamidht/account_manager.cpp',
'jamidht/archive_account_manager.cpp',
'jamidht/channeled_transport.cpp',
'jamidht/connectionmanager.cpp',
'jamidht/contact_list.cpp',
'jamidht/jamiaccount.cpp',
'jamidht/multiplexed_socket.cpp',
'jamidht/namedirectory.cpp',
'jamidht/p2p.cpp',
'jamidht/server_account_manager.cpp',
'jamidht/sips_transport_ice.cpp',
'media/audio/sound/audiofile.cpp',
'media/audio/sound/dtmf.cpp',
'media/audio/sound/dtmfgenerator.cpp',
'media/audio/sound/tone.cpp',
'media/audio/sound/tonelist.cpp',
'media/audio/audiobuffer.cpp',
'media/audio/audio_frame_resizer.cpp',
'media/audio/audio_input.cpp',
'media/audio/audiolayer.cpp',
'media/audio/audioloop.cpp',
'media/audio/audio_receive_thread.cpp',
'media/audio/audio_rtp_session.cpp',
'media/audio/audio_sender.cpp',
'media/audio/dcblocker.cpp',
'media/audio/dsp.cpp',
'media/audio/resampler.cpp',
'media/audio/ringbuffer.cpp',
'media/audio/ringbufferpool.cpp',
'media/audio/tonecontrol.cpp',
'media/congestion_control.cpp',
'media/libav_utils.cpp',
'media/localrecorder.cpp',
'media/localrecordermanager.cpp',
'media/media_buffer.cpp',
'media/media_codec.cpp',
'media/media_decoder.cpp',
'media/media_encoder.cpp',
'media/media_filter.cpp',
'media/media_io_handle.cpp',
'media/media_player.cpp',
'media/media_recorder.cpp',
'media/recordable.cpp',
'media/socket_pair.cpp',
'media/srtp.c',
'media/system_codec_container.cpp',
'security/certstore.cpp',
'security/diffie-hellman.cpp',
'security/memory.cpp',
'security/tls_session.cpp',
'security/tlsvalidator.cpp',
'sip/pres_sub_client.cpp',
'sip/pres_sub_server.cpp',
'sip/sdes_negotiator.cpp',
'sip/sdp.cpp',
'sip/sipaccountbase.cpp',
'sip/sipaccount.cpp',
'sip/sipcall.cpp',
'sip/sippresence.cpp',
'sip/siptransport.cpp',
'sip/sip_utils.cpp',
'sip/sipvoiplink.cpp',
'upnp/protocol/igd.cpp',
'upnp/protocol/mapping.cpp',
'upnp/upnp_context.cpp',
'upnp/upnp_control.cpp',
'account.cpp',
'account_factory.cpp',
'archiver.cpp',
'base64.cpp',
'buildinfo.cpp',
'call.cpp',
'call_factory.cpp',
'conference.cpp',
'data_transfer.cpp',
'fileutils.cpp',
'ftp_server.cpp',
'ice_transport.cpp',
'ip_utils.cpp',
'logger.cpp',
'manager.cpp',
'peer_connection.cpp',
'preferences.cpp',
'ring_api.cpp',
'scheduled_executor.cpp',
'smartools.cpp',
'string_utils.cpp',
'threadloop.cpp',
'turn_transport.cpp',
'utf8_utils.cpp'
)
if host_machine.system() == 'windows'
libjami_sources += files('winsyslog.c')
endif
libjami_dependencies = [
depthreads,
depopendht,
depgnutls,
deplibpjproject,
deplibsecp256k1,
deplibavcodec,
deplibavfilter,
deplibavdevice,
deplibavformat,
deplibswscale,
deplibswresample,
deplibavutil,
depspeex,
depspeexdsp,
depyamlcpp,
depjsoncpp,
depzlib
]
if conf.get('HAVE_OPENSL') == 1
libjami_sources += files(
'media/audio/opensl/audio_player.cpp',
'media/audio/opensl/audio_recorder.cpp',
'media/audio/opensl/opensllayer.cpp'
)
libjami_dependencies += depopensl
endif
if conf.get('HAVE_ALSA') == 1
libjami_sources += files(
'media/audio/alsa/alsalayer.cpp'
)
libjami_dependencies += depalsa
endif
if conf.get('HAVE_PULSE') == 1
libjami_sources += files(
'media/audio/pulseaudio/audiostream.cpp',
'media/audio/pulseaudio/pulselayer.cpp'
)
libjami_dependencies += deplibpulse
endif
if conf.get('HAVE_JACK') == 1
libjami_sources += files(
'media/audio/jack/jacklayer.cpp'
)
libjami_dependencies += depjack
endif
if conf.get('HAVE_PORTAUDIO') == 1
libjami_sources += files(
'media/audio/portaudio/portaudiolayer.cpp'
)
libjami_dependencies += depportaudio
endif
if conf.get('HAVE_COREAUDIO') == 1
libjami_sources += files(
'media/audio/coreaudio/osx/audiodevice.cpp',
'media/audio/coreaudio/osx/corelayer.cpp'
)
endif
if conf.get('HAVE_LIBUPNP') == 1
libjami_sources += files(
'upnp/protocol/pupnp/pupnp.cpp',
'upnp/protocol/pupnp/upnp_igd.cpp'
)
libjami_dependencies += deplibupnp
endif
if conf.get('HAVE_LIBNATPMP') == 1
libjami_sources += files(
'upnp/protocol/natpmp/nat_pmp.cpp',
'upnp/protocol/natpmp/pmp_igd.cpp'
)
libjami_dependencies += depnatpmp
endif
if conf.get('HAVE_RINGNS') == 1
libjami_dependencies += depopenssl
endif
if conf.get('ENABLE_VIDEO')
libjami_sources += files(
'media/video/filter_transpose.cpp',
'media/video/sinkclient.cpp',
'media/video/video_base.cpp',
'media/video/video_device_monitor.cpp',
'media/video/video_input.cpp',
'media/video/video_mixer.cpp',
'media/video/video_receive_thread.cpp',
'media/video/video_rtp_session.cpp',
'media/video/video_scaler.cpp',
'media/video/video_sender.cpp'
)
if conf.get('RING_ACCEL')
libjami_sources += files(
'media/video/accel.cpp'
)
endif
if host_machine.system() == 'linux'
if meson.get_compiler('cpp').get_define('__ANDROID__') == '1'
libjami_sources += files(
'media/video/androidvideo/video_device_impl.cpp',
'media/video/androidvideo/video_device_monitor_impl.cpp'
)
else
libjami_sources += files(
'media/video/v4l2/video_device_impl.cpp',
'media/video/v4l2/video_device_monitor_impl.cpp'
)
libjami_dependencies += deplibudev
endif
elif host_machine.system() == 'darwin'
if meson.get_compiler('cpp').compiles('''#import <TargetConditionals.h>
#if TARGET_OS_IPHONE == 0
#error This is not an IPHONE
#endif''')
libjami_sources += files(
'media/video/iosvideo/video_device_impl.cpp',
'media/video/iosvideo/video_device_monitor_impl.cpp'
)
else
libjami_sources += files(
'media/video/osxvideo/video_device_impl.mm',
'media/video/osxvideo/video_device_monitor_impl.mm'
)
endif
elif host_machine.system() == 'windows'
libjami_sources += files(
'media/video/winvideo/video_device_impl.cpp',
'media/video/winvideo/video_device_monitor_impl.cpp'
)
else
error('Jami currently doesn\'t have support for video on @0@.\nPlease reconfigure the project with -Dvideo=false option.'.format(host_machine.system()))
endif
endif
libjami = library('jami',
version: meson.project_version(),
include_directories: libjami_includedirs,
sources: libjami_sources,
dependencies: libjami_dependencies,
install: get_option('interfaces').contains('library')
)
libjami_dep = declare_dependency(
include_directories: 'dring',
link_with: libjami,
variables: {'video': conf.get('ENABLE_VIDEO')? 'true' : 'false'}
)
if get_option('interfaces').contains('library')
install_headers(
'dring/account_const.h',
'dring/call_const.h',
'dring/callmanager_interface.h',
'dring/configurationmanager_interface.h',
'dring/datatransfer_interface.h',
'dring/def.h',
'dring/dring.h',
'dring/media_const.h',
'dring/presence_const.h',
'dring/presencemanager_interface.h',
'dring/security_const.h',
subdir: 'dring'
)
if conf.get('ENABLE_VIDEO')
install_headers(
'dring/videomanager_interface.h',
subdir: 'dring'
)
endif
modpkgconfig.generate(
libjami,
name: 'jami',
version: meson.project_version(),
description: 'The Jami core library',
url: 'https://jami.net/',
subdirs: 'dring',
filebase: 'jami',
variables: 'video=' + (conf.get('ENABLE_VIDEO')? 'true' : 'false')
)
endif

10
subprojects/jsoncpp.wrap Normal file
View File

@ -0,0 +1,10 @@
[wrap-file]
directory = jsoncpp-1.8.4
source_url = https://github.com/open-source-parsers/jsoncpp/archive/1.8.4.tar.gz
source_filename = jsoncpp-1.8.4.tar.gz
source_hash = c49deac9e0933bcb7044f08516861a2d560988540b23de2ac1ad443b219afdb6
patch_url = https://wrapdb.mesonbuild.com/v1/projects/jsoncpp/1.8.4/1/get_zip
patch_filename = jsoncpp-1.8.4-1-wrap.zip
patch_hash = 4503fcbfd31ee903a6bcfc898fdb4be1ebc3e2a71add8f24eecbd390dcf386a9

View File

@ -0,0 +1,6 @@
[wrap-file]
directory = yaml-cpp-yaml-cpp-0.6.3
source_url = https://github.com/jbeder/yaml-cpp/archive/yaml-cpp-0.6.3.tar.gz
source_filename = yaml-cpp-yaml-cpp-0.6.3.tar.gz
source_hash = 77ea1b90b3718aa0c324207cb29418f5bced2354c2e483a9523d98c3460af1ed

10
subprojects/zlib.wrap Normal file
View File

@ -0,0 +1,10 @@
[wrap-file]
directory = zlib-1.2.11
source_url = http://zlib.net/fossils/zlib-1.2.11.tar.gz
source_filename = zlib-1.2.11.tar.gz
source_hash = c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1
patch_url = https://wrapdb.mesonbuild.com/v1/projects/zlib/1.2.11/4/get_zip
patch_filename = zlib-1.2.11-4-wrap.zip
patch_hash = f733976fbfc59e0bcde01aa9469a24eeb16faf0a4280b17e9eaa60a301d75657

221
test/meson.build Normal file
View File

@ -0,0 +1,221 @@
progsipp = find_program('sipp', native: true, required: false)
if progsipp.found()
ut_sip = executable('ut_sip',
include_directories: include_directories('..', '../src', '../src/dring', '../src/media'),
sources: files('sip/sip.cpp', 'sip/test_SIP.cpp'),
link_with: libjami,
dependencies: [depcppunit, deplibpjproject]
)
test('sip', ut_sip, workdir: meson.current_source_dir() / 'sip')
endif
#ut_turn = executable('ut_turn',
# include_directories: include_directories('../src', '../src/dring'),
# sources: files('turn/main.cpp', 'turn/test_TURN.cpp'),
# link_with: libjami,
# dependencies: [depcppunit, depopendht]
#)
#test('turn', ut_turn)
####### Unit Tests ########
#
# account_factory
#
ut_account_factory = executable('ut_account_factory',
include_directories: include_directories('../src', '../src/dring'),
sources: files('unitTest/account_factory/testAccount_factory.cpp'),
link_with: libjami,
dependencies: depcppunit
)
test('account_factory', ut_account_factory)
#
# certstore
#
ut_certstore = executable('ut_certstore',
include_directories: include_directories('../src', '../src/dring'),
sources: files('unitTest/certstore.cpp'),
link_with: libjami,
dependencies: [depcppunit, depopendht]
)
test('certstore', ut_certstore)
#
# base64
#
ut_base64 = executable('ut_base64',
include_directories: include_directories('../src', '../src/dring'),
sources: files('unitTest/base64/base64.cpp'),
link_with: libjami,
dependencies: depcppunit
)
test('base64', ut_base64)
#
# channel
#
ut_channel = executable('ut_channel',
include_directories: include_directories('../src', '../src/dring'),
sources: files('unitTest/channel/testChannel.cpp'),
link_with: libjami,
dependencies: [depcppunit, depthreads]
)
test('channel', ut_channel)
#
# map_utils
#
ut_map_utils = executable('ut_map_utils',
include_directories: include_directories('../src', '../src/dring'),
sources: files('unitTest/map_utils/testMap_utils.cpp'),
link_with: libjami,
dependencies: depcppunit
)
test('map_utils', ut_map_utils)
#
# fileutils
#
ut_fileutils = executable('ut_fileutils',
include_directories: include_directories('../src', '../src/dring'),
sources: files('unitTest/fileutils/testFileutils.cpp'),
link_with: libjami,
dependencies: depcppunit
)
test('fileutils', ut_fileutils)
#
# smartools
#
ut_smartools = executable('ut_smartools',
include_directories: include_directories('../src', '../src/dring'),
sources: files('unitTest/smartools/testSmartools.cpp'),
link_with: libjami,
dependencies: depcppunit
)
test('smartools', ut_smartools)
#
# utf8_utils
#
ut_utf8_utils = executable('ut_utf8_utils',
include_directories: include_directories('../src', '../src/dring'),
sources: files('unitTest/utf8_utils/testUtf8_utils.cpp'),
link_with: libjami,
dependencies: depcppunit
)
test('utf8_utils', ut_utf8_utils)
#
# string_utils
#
ut_string_utils = executable('ut_string_utils',
include_directories: include_directories('../src', '../src/dring'),
sources: files('unitTest/string_utils/testString_utils.cpp'),
link_with: libjami,
dependencies: depcppunit
)
test('string_utils', ut_string_utils)
#
# media_encoder
#
ut_media_encoder = executable('ut_media_encoder',
include_directories: include_directories('..', '../src', '../src/dring', '../src/media'),
sources: files('unitTest/media/test_media_encoder.cpp'),
link_with: libjami,
dependencies: [depcppunit, deplibpjproject, deplibavutil]
)
test('media_encoder', ut_media_encoder)
#
# media_decoder
#
ut_media_decoder = executable('ut_media_decoder',
include_directories: include_directories('..', '../src', '../src/dring', '../src/media'),
sources: files('unitTest/media/test_media_decoder.cpp'),
link_with: libjami,
dependencies: [depcppunit, deplibpjproject, deplibavcodec]
)
test('media_decoder', ut_media_decoder)
#
# media_filter
#
#ut_media_filter = executable('ut_media_filter',
# include_directories: include_directories('..', '../src', '../src/dring', '../src/media'),
# sources: files('unitTest/media/test_media_filter.cpp'),
# link_with: libjami,
# dependencies: depcppunit
#)
#test('media_filter', ut_media_filter)
#
# media_frame
#
ut_media_frame = executable('ut_media_frame',
include_directories: include_directories('..', '../src', '../src/dring', '../src/media'),
sources: files('unitTest/media/test_media_frame.cpp'),
link_with: libjami,
dependencies: depcppunit
)
test('media_frame', ut_media_frame)
#
# resampler
#
ut_resampler = executable('ut_resampler',
include_directories: include_directories('..', '../src', '../src/dring', '../src/media'),
sources: files('unitTest/media/audio/test_resampler.cpp'),
link_with: libjami,
dependencies: depcppunit
)
test('resampler', ut_resampler)
#
# audio_frame_resizer
#
ut_audio_frame_resizer = executable('ut_audio_frame_resizer',
include_directories: include_directories('..', '../src', '../src/dring', '../src/media'),
sources: files('unitTest/media/audio/test_audio_frame_resizer.cpp'),
link_with: libjami,
dependencies: [depcppunit, deplibavutil]
)
test('audio_frame_resizer', ut_audio_frame_resizer)
if conf.get('ENABLE_VIDEO')
#
# video_input
#
ut_video_input = executable('ut_video_input',
include_directories: include_directories('..', '../src', '../src/dring', '../src/media'),
sources: files('unitTest/media/video/testVideo_input.cpp'),
link_with: libjami,
dependencies: depcppunit
)
test('video_input', ut_video_input)
#
# video_scaler
#
ut_video_scaler = executable('ut_video_scaler',
include_directories: include_directories('../src', '../src/dring'),
sources: files('unitTest/media/video/test_video_scaler.cpp'),
link_with: libjami,
dependencies: depcppunit
)
test('video_scaler', ut_video_scaler)
endif
#
# connectionManager
#
ut_connectionManager = executable('ut_connectionManager',
include_directories: include_directories('..', '../src', '../src/dring', '../src/media'),
sources: files('unitTest/connectionManager/connectionManager.cpp'),
link_with: libjami,
dependencies: [depcppunit, deplibpjproject]
)
test('connectionManager', ut_connectionManager)