Move provider plugins into a dedicated directory

Since we will introduce another type of plugin for the policy engine
we want to have each plugin type in separate directories.

We also have to adjust:

- plugin search directories
- po file location
- update paths for calls-doc target
This commit is contained in:
Evangelos Ribeiro Tzaras
2022-07-16 22:16:24 +02:00
committed by Guido Günther
parent 8c6ece6a87
commit 86a8f3ae22
60 changed files with 19 additions and 13 deletions

View File

@@ -0,0 +1,147 @@
/*
* Copyright (C) 2018 Purism SPC
*
* This file is part of Calls.
*
* Calls 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.
*
* Calls 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 Calls. If not, see <http://www.gnu.org/licenses/>.
*
* Author: Bob Ham <bob.ham@puri.sm>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
*/
#include "calls-dummy-call.h"
#include "calls-message-source.h"
#include "calls-call.h"
#include <glib/gi18n.h>
struct _CallsDummyCall {
GObject parent_instance;
};
static void calls_dummy_call_message_source_interface_init (CallsMessageSourceInterface *iface);
G_DEFINE_TYPE_WITH_CODE (CallsDummyCall, calls_dummy_call, CALLS_TYPE_CALL,
G_IMPLEMENT_INTERFACE (CALLS_TYPE_MESSAGE_SOURCE,
calls_dummy_call_message_source_interface_init))
static const char*
calls_dummy_call_get_protocol (CallsCall *call)
{
return "tel";
}
static void
calls_dummy_call_answer (CallsCall *call)
{
g_return_if_fail (CALLS_IS_DUMMY_CALL (call));
g_return_if_fail (calls_call_get_state (call) == CALLS_CALL_STATE_INCOMING);
calls_call_set_state (call, CALLS_CALL_STATE_ACTIVE);
}
static void
calls_dummy_call_hang_up (CallsCall *call)
{
g_return_if_fail (CALLS_IS_DUMMY_CALL (call));
calls_call_set_state (call, CALLS_CALL_STATE_DISCONNECTED);
}
static void
calls_dummy_call_send_dtmf_tone (CallsCall *call,
char key)
{
g_debug ("Beep! (%c)", key);
}
static gboolean
outbound_timeout_cb (CallsDummyCall *self)
{
CallsCall *call;
g_assert (CALLS_IS_DUMMY_CALL (self));
call = CALLS_CALL (self);
switch (calls_call_get_state (call)) {
case CALLS_CALL_STATE_DIALING:
calls_call_set_state (call, CALLS_CALL_STATE_ALERTING);
g_timeout_add_seconds
(3, (GSourceFunc) outbound_timeout_cb, self);
break;
case CALLS_CALL_STATE_ALERTING:
calls_call_set_state (call, CALLS_CALL_STATE_ACTIVE);
break;
default:
break;
}
return G_SOURCE_REMOVE;
}
CallsDummyCall *
calls_dummy_call_new (const gchar *id,
gboolean inbound)
{
return g_object_new (CALLS_TYPE_DUMMY_CALL,
"id", id,
"inbound", inbound,
"call-type", CALLS_CALL_TYPE_CELLULAR,
NULL);
}
static void
constructed (GObject *object)
{
CallsDummyCall *self = CALLS_DUMMY_CALL (object);
if (!calls_call_get_inbound (CALLS_CALL (object)))
g_timeout_add_seconds (1, (GSourceFunc) outbound_timeout_cb, self);
G_OBJECT_CLASS (calls_dummy_call_parent_class)->constructed (object);
}
static void
calls_dummy_call_class_init (CallsDummyCallClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
CallsCallClass *call_class = CALLS_CALL_CLASS (klass);
object_class->constructed = constructed;
call_class->get_protocol = calls_dummy_call_get_protocol;
call_class->answer = calls_dummy_call_answer;
call_class->hang_up = calls_dummy_call_hang_up;
call_class->send_dtmf_tone = calls_dummy_call_send_dtmf_tone;
}
static void
calls_dummy_call_message_source_interface_init (CallsMessageSourceInterface *iface)
{
}
static void
calls_dummy_call_init (CallsDummyCall *self)
{
}

View File

@@ -0,0 +1,43 @@
/*
* Copyright (C) 2018 Purism SPC
*
* This file is part of Calls.
*
* Calls 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.
*
* Calls 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 Calls. If not, see <http://www.gnu.org/licenses/>.
*
* Author: Bob Ham <bob.ham@puri.sm>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
*/
#ifndef CALLS_DUMMY_CALL_H__
#define CALLS_DUMMY_CALL_H__
#include <glib-object.h>
#include "calls-call.h"
G_BEGIN_DECLS
#define CALLS_TYPE_DUMMY_CALL (calls_dummy_call_get_type ())
G_DECLARE_FINAL_TYPE (CallsDummyCall, calls_dummy_call, CALLS, DUMMY_CALL, CallsCall)
CallsDummyCall *calls_dummy_call_new (const gchar *number,
gboolean inbound);
G_END_DECLS
#endif /* CALLS_DUMMY_CALL_H__ */

View File

@@ -0,0 +1,309 @@
/*
* Copyright (C) 2018 Purism SPC
*
* This file is part of Calls.
*
* Calls 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.
*
* Calls 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 Calls. If not, see <http://www.gnu.org/licenses/>.
*
* Author: Bob Ham <bob.ham@puri.sm>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
*/
#include "calls-dummy-origin.h"
#include "calls-message-source.h"
#include "calls-origin.h"
#include "calls-dummy-call.h"
#include <glib/gi18n.h>
#include <glib-object.h>
struct _CallsDummyOrigin {
GObject parent_instance;
GString *name;
GList *calls;
};
static void calls_dummy_origin_message_source_interface_init (CallsOriginInterface *iface);
static void calls_dummy_origin_origin_interface_init (CallsOriginInterface *iface);
G_DEFINE_TYPE_WITH_CODE (CallsDummyOrigin, calls_dummy_origin, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (CALLS_TYPE_MESSAGE_SOURCE,
calls_dummy_origin_message_source_interface_init)
G_IMPLEMENT_INTERFACE (CALLS_TYPE_ORIGIN,
calls_dummy_origin_origin_interface_init))
enum {
PROP_0,
PROP_ID,
/* Property for setting the origins name upon construction */
PROP_DUMMY_NAME_CONSTRUCTOR,
/* The origins name. The implements the name property from CallsOrigin.
* Readonly property, can't be set directly. */
PROP_NAME,
PROP_CALLS,
PROP_COUNTRY_CODE,
PROP_LAST_PROP,
};
static GParamSpec *props[PROP_LAST_PROP];
static void
remove_call (CallsDummyOrigin *self,
CallsCall *call,
const gchar *reason)
{
CallsOrigin *origin;
origin = CALLS_ORIGIN (self);
self->calls = g_list_remove (self->calls, call);
g_signal_emit_by_name (origin, "call-removed", call, reason);
g_object_unref (G_OBJECT (call));
}
static void
remove_calls (CallsDummyOrigin *self, const gchar *reason)
{
gpointer call;
GList *next;
while (self->calls != NULL) {
call = self->calls->data;
next = self->calls->next;
g_list_free_1 (self->calls);
self->calls = next;
g_signal_emit_by_name (self, "call-removed", call, reason);
g_object_unref (call);
}
}
struct DisconnectedData {
CallsDummyOrigin *self;
CallsCall *call;
};
static void
call_state_changed_cb (CallsCall *call,
GParamSpec *pspec,
CallsDummyOrigin *self)
{
g_assert (CALLS_IS_DUMMY_ORIGIN (self));
g_assert (CALLS_IS_DUMMY_CALL (call));
if (calls_call_get_state (call) != CALLS_CALL_STATE_DISCONNECTED)
return;
remove_call (self, call, "Disconnected");
}
static void
add_call (CallsDummyOrigin *self, const gchar *number, gboolean inbound)
{
CallsDummyCall *dummy_call;
CallsCall *call;
dummy_call = calls_dummy_call_new (number, inbound);
g_assert (dummy_call != NULL);
call = CALLS_CALL (dummy_call);
g_signal_connect (call, "notify::state",
G_CALLBACK (call_state_changed_cb),
self);
self->calls = g_list_append (self->calls, dummy_call);
g_signal_emit_by_name (CALLS_ORIGIN (self), "call-added", call);
}
static void
dial (CallsOrigin *origin, const gchar *number)
{
g_return_if_fail (number != NULL);
g_return_if_fail (CALLS_IS_DUMMY_ORIGIN (origin));
add_call (CALLS_DUMMY_ORIGIN (origin), number, FALSE);
}
static gboolean
supports_protocol (CallsOrigin *origin,
const char *protocol)
{
g_assert (protocol != NULL);
g_assert (CALLS_IS_DUMMY_ORIGIN (origin));
return g_strcmp0 (protocol, "tel") == 0;
}
CallsDummyOrigin *
calls_dummy_origin_new (const gchar *name)
{
return g_object_new (CALLS_TYPE_DUMMY_ORIGIN,
"dummy-name-constructor", name,
NULL);
}
static void
set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec)
{
CallsDummyOrigin *self = CALLS_DUMMY_ORIGIN (object);
switch (property_id) {
case PROP_DUMMY_NAME_CONSTRUCTOR:
g_string_assign (self->name, g_value_get_string (value));
break;
case PROP_ID: /* ignored for the dummy origin */
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static void
get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec)
{
CallsDummyOrigin *self = CALLS_DUMMY_ORIGIN (object);
switch (property_id) {
case PROP_ID:
g_value_set_string (value, self->name->str);
break;
case PROP_NAME:
g_value_set_string (value, self->name->str);
break;
case PROP_CALLS:
g_value_set_pointer (value, g_list_copy (self->calls));
break;
case PROP_COUNTRY_CODE:
g_value_set_string (value, NULL);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static void
dispose (GObject *object)
{
CallsDummyOrigin *self = CALLS_DUMMY_ORIGIN (object);
remove_calls (self, NULL);
G_OBJECT_CLASS (calls_dummy_origin_parent_class)->dispose (object);
}
static void
finalize (GObject *object)
{
CallsDummyOrigin *self = CALLS_DUMMY_ORIGIN (object);
g_string_free (self->name, TRUE);
g_list_free (self->calls);
G_OBJECT_CLASS (calls_dummy_origin_parent_class)->finalize (object);
}
static void
calls_dummy_origin_class_init (CallsDummyOriginClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->dispose = dispose;
object_class->finalize = finalize;
object_class->get_property = get_property;
object_class->set_property = set_property;
props[PROP_DUMMY_NAME_CONSTRUCTOR] =
g_param_spec_string ("dummy-name-constructor",
"Name",
"The name of the origin",
"Dummy origin",
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
g_object_class_install_property (object_class, PROP_DUMMY_NAME_CONSTRUCTOR, props[PROP_DUMMY_NAME_CONSTRUCTOR]);
#define IMPLEMENTS(ID, NAME) \
g_object_class_override_property (object_class, ID, NAME); \
props[ID] = g_object_class_find_property(object_class, NAME);
IMPLEMENTS (PROP_ID, "id");
IMPLEMENTS (PROP_NAME, "name");
IMPLEMENTS (PROP_CALLS, "calls");
IMPLEMENTS (PROP_COUNTRY_CODE, "country-code");
#undef IMPLEMENTS
}
static void
calls_dummy_origin_message_source_interface_init (CallsOriginInterface *iface)
{
}
static void
calls_dummy_origin_origin_interface_init (CallsOriginInterface *iface)
{
iface->dial = dial;
iface->supports_protocol = supports_protocol;
}
static void
calls_dummy_origin_init (CallsDummyOrigin *self)
{
self->name = g_string_new (NULL);
}
void
calls_dummy_origin_create_inbound (CallsDummyOrigin *self,
const gchar *number)
{
g_return_if_fail (CALLS_IS_DUMMY_ORIGIN (self));
add_call (self, number, TRUE);
}

View File

@@ -0,0 +1,39 @@
/*
* Copyright (C) 2018 Purism SPC
*
* This file is part of Calls.
*
* Calls 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.
*
* Calls 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 Calls. If not, see <http://www.gnu.org/licenses/>.
*
* Author: Bob Ham <bob.ham@puri.sm>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
*/
#pragma once
#include <glib-object.h>
G_BEGIN_DECLS
#define CALLS_TYPE_DUMMY_ORIGIN (calls_dummy_origin_get_type ())
G_DECLARE_FINAL_TYPE (CallsDummyOrigin, calls_dummy_origin, CALLS, DUMMY_ORIGIN, GObject);
CallsDummyOrigin *calls_dummy_origin_new (const gchar *name);
void calls_dummy_origin_create_inbound (CallsDummyOrigin *self,
const gchar *number);
G_END_DECLS

View File

@@ -0,0 +1,232 @@
/*
* Copyright (C) 2018 Purism SPC
*
* This file is part of Calls.
*
* Calls 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.
*
* Calls 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 Calls. If not, see <http://www.gnu.org/licenses/>.
*
* Author: Bob Ham <bob.ham@puri.sm>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
*/
#define G_LOG_DOMAIN "CallsDummyProvider"
#include "calls-dummy-provider.h"
#include "calls-message-source.h"
#include "calls-provider.h"
#include "calls-dummy-origin.h"
#include <libpeas/peas.h>
#include <glib-unix.h>
static const char * const supported_protocols[] = {
"tel",
NULL
};
struct _CallsDummyProvider {
CallsProvider parent_instance;
GListStore *origins;
};
static void calls_dummy_provider_message_source_interface_init (CallsMessageSourceInterface *iface);
#ifdef FOR_TESTING
G_DEFINE_TYPE_WITH_CODE
(CallsDummyProvider, calls_dummy_provider, CALLS_TYPE_PROVIDER,
G_IMPLEMENT_INTERFACE (CALLS_TYPE_MESSAGE_SOURCE,
calls_dummy_provider_message_source_interface_init))
#else
G_DEFINE_DYNAMIC_TYPE_EXTENDED
(CallsDummyProvider, calls_dummy_provider, CALLS_TYPE_PROVIDER, 0,
G_IMPLEMENT_INTERFACE_DYNAMIC (CALLS_TYPE_MESSAGE_SOURCE,
calls_dummy_provider_message_source_interface_init))
#endif /* FOR_TESTING */
static gboolean
usr1_handler (CallsDummyProvider *self)
{
GListModel *model;
g_autoptr (CallsDummyOrigin) origin = NULL;
model = G_LIST_MODEL (self->origins);
g_return_val_if_fail (g_list_model_get_n_items (model) > 0, FALSE);
g_debug ("Received SIGUSR1, adding new incoming call");
origin = g_list_model_get_item (model, 0);
calls_dummy_origin_create_inbound (origin, "0987654321");
return TRUE;
}
static gboolean
usr2_handler (CallsDummyProvider *self)
{
g_autoptr (CallsDummyOrigin) origin = NULL;
GListModel *model;
model = G_LIST_MODEL (self->origins);
g_return_val_if_fail (g_list_model_get_n_items (model) > 0, FALSE);
g_debug ("Received SIGUSR2, adding new anonymous incoming call");
origin = g_list_model_get_item (model, 0);
calls_dummy_origin_create_inbound (origin, NULL);
return TRUE;
}
static const char *
calls_dummy_provider_get_name (CallsProvider *provider)
{
return "Dummy provider";
}
static const char *
calls_dummy_provider_get_status (CallsProvider *provider)
{
return "Normal";
}
static GListModel *
calls_dummy_provider_get_origins (CallsProvider *provider)
{
CallsDummyProvider *self = CALLS_DUMMY_PROVIDER (provider);
return G_LIST_MODEL (self->origins);
}
static const char *const *
calls_dummy_provider_get_protocols (CallsProvider *provider)
{
return supported_protocols;
}
static gboolean
calls_dummy_provider_is_modem (CallsProvider *provider)
{
return TRUE;
}
static void
constructed (GObject *object)
{
CallsDummyProvider *self = CALLS_DUMMY_PROVIDER (object);
calls_dummy_provider_add_origin (self, "Dummy origin");
g_unix_signal_add (SIGUSR1,
(GSourceFunc) usr1_handler,
self);
g_unix_signal_add (SIGUSR2,
(GSourceFunc) usr2_handler,
self);
G_OBJECT_CLASS (calls_dummy_provider_parent_class)->constructed (object);
}
static void
dispose (GObject *object)
{
CallsDummyProvider *self = CALLS_DUMMY_PROVIDER (object);
g_list_store_remove_all (self->origins);
g_clear_object (&self->origins);
G_OBJECT_CLASS (calls_dummy_provider_parent_class)->dispose (object);
}
static void
calls_dummy_provider_class_init (CallsDummyProviderClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
CallsProviderClass *provider_class = CALLS_PROVIDER_CLASS (klass);
object_class->constructed = constructed;
object_class->dispose = dispose;
provider_class->get_name = calls_dummy_provider_get_name;
provider_class->get_status = calls_dummy_provider_get_status;
provider_class->get_origins = calls_dummy_provider_get_origins;
provider_class->get_protocols = calls_dummy_provider_get_protocols;
provider_class->is_modem = calls_dummy_provider_is_modem;
}
static void
calls_dummy_provider_message_source_interface_init (CallsMessageSourceInterface *iface)
{
}
static void
calls_dummy_provider_init (CallsDummyProvider *self)
{
self->origins = g_list_store_new (CALLS_TYPE_ORIGIN);
}
void
calls_dummy_provider_add_origin (CallsDummyProvider *self,
const gchar *name)
{
g_autoptr (CallsDummyOrigin) origin = NULL;
origin = calls_dummy_origin_new (name);
g_list_store_append (self->origins, origin);
}
CallsDummyProvider *
calls_dummy_provider_new (void)
{
return g_object_new (CALLS_TYPE_DUMMY_PROVIDER, NULL);
}
#ifndef FOR_TESTING
static void
calls_dummy_provider_class_finalize (CallsDummyProviderClass *klass)
{
}
G_MODULE_EXPORT void
peas_register_types (PeasObjectModule *module)
{
calls_dummy_provider_register_type (G_TYPE_MODULE (module));
peas_object_module_register_extension_type (module,
CALLS_TYPE_PROVIDER,
CALLS_TYPE_DUMMY_PROVIDER);
}
#endif /* FOR_TESTING */

View File

@@ -0,0 +1,46 @@
/*
* Copyright (C) 2018 Purism SPC
*
* This file is part of Calls.
*
* Calls 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.
*
* Calls 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 Calls. If not, see <http://www.gnu.org/licenses/>.
*
* Author: Bob Ham <bob.ham@puri.sm>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
*/
#ifndef CALLS_DUMMY_PROVIDER_H__
#define CALLS_DUMMY_PROVIDER_H__
#include "calls-provider.h"
#include <glib-object.h>
#include <libpeas/peas.h>
G_BEGIN_DECLS
#define CALLS_TYPE_DUMMY_PROVIDER (calls_dummy_provider_get_type ())
G_DECLARE_FINAL_TYPE (CallsDummyProvider, calls_dummy_provider, CALLS, DUMMY_PROVIDER, CallsProvider)
CallsDummyProvider *calls_dummy_provider_new (void);
void calls_dummy_provider_add_origin (CallsDummyProvider *self,
const gchar *name);
void peas_register_types (PeasObjectModule *module);
G_END_DECLS
#endif /* CALLS_DUMMY_PROVIDER_H__ */

View File

@@ -0,0 +1,7 @@
[Plugin]
Module=dummy
Name=Dummy
Description=Dummy calls provider
Authors=Bob Ham <rah@settrans.net>
Copyright=Copyright (C) 2018 Purism SPC
Website=@PACKAGE_URL_RAW@

View File

@@ -0,0 +1,57 @@
#
# Copyright (C) 2018 Purism SPC
#
# This file is part of Calls.
#
# Calls 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.
#
# Calls 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 Calls. If not, see <http://www.gnu.org/licenses/>.
#
# Author: Bob Ham <bob.ham@puri.sm>
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
dummy_include = include_directories('.')
dummy_install_dir = join_paths(full_calls_plugin_libdir, 'dummy')
dummy_plugin = configure_file(
input: 'dummy.plugin.in',
output: 'dummy.plugin',
configuration: config_data,
install_dir: dummy_install_dir
)
dummy_deps = [
dependency('gobject-2.0'),
dependency('gtk+-3.0'),
dependency('libpeas-1.0'),
]
dummy_sources = files(
[
'calls-dummy-call.c', 'calls-dummy-call.h',
'calls-dummy-origin.c', 'calls-dummy-origin.h',
'calls-dummy-provider.c', 'calls-dummy-provider.h'
]
)
calls_dummy = shared_module(
'dummy',
dummy_sources,
dependencies: dummy_deps,
include_directories: src_include,
link_with: libcalls,
install: true,
install_dir: dummy_install_dir
)