mirror of
https://git.jami.net/savoirfairelinux/jami-daemon.git
synced 2025-08-12 22:09:25 +08:00
build: add support for meson
Change-Id: I331522a09257d4ae787893ff72c270886c1aa210 Reviewed-by: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
This commit is contained in:

committed by
Adrien Béraud

parent
c4a7918c0c
commit
387f6988cd
84
README
84
README
@ -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
|
||||
|
@ -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
64
bin/dbus/jamid.pod
Normal 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
187
bin/dbus/main.cpp
Normal 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
93
bin/dbus/meson.build
Normal 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
|
3
bin/dbus/net.jami.daemon.service.in
Normal file
3
bin/dbus/net.jami.daemon.service.in
Normal file
@ -0,0 +1,3 @@
|
||||
[D-BUS Service]
|
||||
Name=cx.ring.Ring
|
||||
Exec=@LIBDIR@/jamid
|
18
bin/nodejs/meson.build
Normal file
18
bin/nodejs/meson.build
Normal 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
|
||||
)
|
89
contrib/src/pjproject/0010-fix-pkgconfig.patch
Normal file
89
contrib/src/pjproject/0010-fix-pkgconfig.patch
Normal 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
|
||||
|
@ -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
|
||||
|
29
cross-files/android_arm64_api29.txt
Normal file
29
cross-files/android_arm64_api29.txt
Normal 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
|
23
cross-files/mingw_w64_x86-64.txt
Normal file
23
cross-files/mingw_w64_x86-64.txt
Normal 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
184
meson.build
Normal 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
15
meson_options.txt
Normal 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')
|
@ -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
14
ringtones/meson.build
Normal 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'
|
||||
)
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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
309
src/meson.build
Normal 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
10
subprojects/jsoncpp.wrap
Normal 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
|
6
subprojects/yaml-cpp.wrap
Normal file
6
subprojects/yaml-cpp.wrap
Normal 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
10
subprojects/zlib.wrap
Normal 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
221
test/meson.build
Normal 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)
|
Reference in New Issue
Block a user