Files
ModemManager/src/meson.build
T
Andrey Skvortsov 8ac3dfb955 location-cache: add class to store cached location
This class allows to preserve cached position across ModemManager restarts.
Cached location can be used to improve time to first fix after device
start by injecting coarse position into location engine. Since there
wasn't any fix yet, position in ModemManager is unknown. To fix this
cached location is saved on disk (/var/lib/ModemManager/location.ini)
when location session is stopped or ModemManager is stopped and loaded
on the next start from the file.

install_emptydir is introduced in meson 0.60.

Distributions has to create directory to store cached location in
packaging, because ModemManager runs under systemd isolation with
limited rights and it can't create this directory by itself.

Signed-off-by: Andrey Skvortsov <andrej.skvortzov@gmail.com>
2026-01-10 02:04:10 +03:00

523 lines
11 KiB
Meson

# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2021 Iñigo Martinez <inigomartinez@gmail.com>
# helpers library
src_inc = include_directories('.')
kerneldevice_inc = include_directories('kerneldevice')
plugins_inc = include_directories('plugins')
headers = files(
'mm-modem-helpers.h',
'mm-sms-part.h',
)
enums_types = 'mm-helper-enums-types'
enums_sources = []
enums_sources += custom_target(
enums_types + '.c',
input: headers,
output: enums_types + '.c',
command: [
python,
mm_mkenums,
'--fhead', '#include "mm-helper-enums-types.h"\n',
'--template', files(templates_dir / enums_types + '.c.template'),
'@INPUT@'],
capture: true,
)
enums_sources += custom_target(
enums_types + '.h',
input: headers,
output: enums_types + '.h',
command: [
python,
mm_mkenums,
'--fhead', '#include "mm-sms-part.h"\n#include "mm-modem-helpers.h"\n#ifndef __MM_HELPER_ENUMS_TYPES_H__\n#define __MM_HELPER_ENUMS_TYPES_H__\n',
'--template', files(templates_dir / enums_types + '.h.template'),
'--ftail', '#endif /* __MM_HELPER_ENUMS_TYPES_H__ */\n',
'@INPUT@'],
capture: true,
)
sources = files(
'mm-cbm-part.c',
'mm-charsets.c',
'mm-error-helpers.c',
'mm-location-cache.c',
'mm-log.c',
'mm-log-object.c',
'mm-modem-helpers.c',
'mm-sms-part-3gpp.c',
'mm-sms-part.c',
'mm-sms-part-cdma.c',
)
incs = [
top_inc,
# FIXME: only necessary if qmi is enabled?
kerneldevice_inc,
]
deps = [libmm_glib_dep]
private_deps = []
if enable_qmi
sources += files('mm-modem-helpers-qmi.c')
deps += qmi_glib_dep
endif
if enable_mbim
sources += files('mm-modem-helpers-mbim.c')
deps += mbim_glib_dep
endif
if enable_systemd_journal
private_deps += libsystemd_dep
endif
c_args = [
'-DPKGSTATEDIR="@0@"'.format(mm_pkgsharedstatedir),
]
libhelpers = static_library(
'helpers',
sources: sources + enums_sources,
include_directories: incs,
dependencies: deps + private_deps,
c_args: c_args,
)
libhelpers_dep = declare_dependency(
sources: enums_sources[1],
include_directories: ['.', kerneldevice_inc],
dependencies: deps,
link_with: libhelpers,
)
# kerneldevice library
sources = files(
'kerneldevice/mm-kernel-device.c',
'kerneldevice/mm-kernel-device-generic.c',
'kerneldevice/mm-kernel-device-generic-rules.c',
'kerneldevice/mm-kernel-device-helpers.c',
)
deps = [libhelpers_dep]
if enable_qrtr
sources += files('kerneldevice/mm-kernel-device-qrtr.c')
deps += qrtr_glib_dep
endif
if enable_udev
sources += files('kerneldevice/mm-kernel-device-udev.c')
deps += gudev_dep
endif
libkerneldevice = static_library(
'kerneldevice',
sources: sources,
include_directories: top_inc,
dependencies: deps,
c_args: '-DUDEVRULESDIR="@0@"'.format(udev_rulesdir),
)
libkerneldevice_dep = declare_dependency(
dependencies: deps,
link_with: libkerneldevice,
)
# ports library
headers = files(
'mm-iface-port-at.h',
'mm-port.h',
'mm-port-serial-at.h',
'mm-port-scheduler.h',
'mm-port-scheduler-rr.h',
)
sources = files(
'mm-iface-port-at.c',
'mm-netlink.c',
'mm-port.c',
'mm-port-net.c',
'mm-port-serial-at.c',
'mm-port-serial.c',
'mm-port-serial-gps.c',
'mm-port-serial-qcdm.c',
'mm-serial-parsers.c',
'mm-port-scheduler.c',
'mm-port-scheduler-rr.c',
)
deps = [libkerneldevice_dep]
private_deps = [gio_unix_dep]
if enable_qmi
headers += files('mm-port-qmi.h')
sources += files('mm-port-qmi.c')
endif
if enable_mbim
sources += files('mm-port-mbim.c')
endif
enums_types = 'mm-port-enums-types'
port_enums_sources = []
port_enums_sources += custom_target(
enums_types + '.c',
input: headers,
output: enums_types + '.c',
command: [
python,
mm_mkenums,
'--fhead', '#include "mm-port-enums-types.h"\n',
'--template', files(templates_dir / enums_types + '.c.template'),
'@INPUT@'],
capture: true,
)
port_enums_sources += custom_target(
enums_types + '.h',
input: headers,
output: enums_types + '.h',
command: [
python,
mm_mkenums,
'--fhead', '#include "config.h"\n#include "mm-port.h"\n#include "mm-port-serial-at.h"\n#if defined WITH_QMI\n#include "mm-port-qmi.h"\n#endif\n#ifndef __MM_PORT_ENUMS_TYPES_H__\n#define __MM_PORT_ENUMS_TYPES_H__\n',
'--template', files(templates_dir / enums_types + '.h.template'),
'--ftail', '#endif /* __MM_PORT_ENUMS_TYPES_H__ */\n',
'@INPUT@'],
capture: true,
)
libport = static_library(
'port',
sources: sources + port_enums_sources,
include_directories: top_inc,
dependencies: deps + private_deps,
)
libport_dep = declare_dependency(
sources: port_enums_sources[1],
include_directories: '.',
dependencies: deps,
link_with: libport,
)
# auth provider library
sources = files(
'mm-auth-provider.c',
'mm-context.c',
'mm-bind.c',
)
incs = [
top_inc,
kerneldevice_inc,
]
deps = [libmm_glib_dep, libhelpers_dep]
if enable_polkit
deps += polkit_gobject_dep
endif
private_deps = []
libauth = static_library(
'auth',
sources: sources,
include_directories: incs,
dependencies: deps,
c_args: '-DPLUGINDIR="@0@"'.format(mm_prefix / mm_pkglibdir),
)
libauth_dep = declare_dependency(
include_directories: ['.', kerneldevice_inc],
dependencies: deps,
link_with: libauth,
)
# SMS library
sources = files(
'mm-sms-list.c',
'mm-base-sms.c',
)
incs = [
top_inc,
]
deps = [libmm_glib_dep, libhelpers_dep, libauth_dep]
private_deps = []
libsms = static_library(
'sms',
sources: sources,
include_directories: incs,
dependencies: deps,
)
libsms_dep = declare_dependency(
include_directories: ['.'],
dependencies: deps,
link_with: libsms,
)
# Daemon enums, required by plugins
headers = files(
'mm-base-bearer.h',
'mm-iface-op-lock.h',
'mm-filter.h',
'mm-port-probe.h',
)
enums_types = 'mm-daemon-enums-types'
daemon_enums_sources = []
daemon_enums_sources += custom_target(
enums_types + '.c',
input: headers,
output: enums_types + '.c',
command: [
python,
mm_mkenums,
'--fhead', '#include "mm-daemon-enums-types.h"\n',
'--template', files(templates_dir / enums_types + '.c.template'),
'@INPUT@'],
capture: true,
)
daemon_enums_sources += custom_target(
enums_types + '.h',
input: headers,
output: enums_types + '.h',
command: [
python,
mm_mkenums,
'--fhead', '#include "mm-filter.h"\n#include "mm-base-bearer.h"\n#include "mm-port-probe.h"\n#ifndef __MM_DAEMON_ENUMS_TYPES_H__\n#define __MM_DAEMON_ENUMS_TYPES_H__\n',
'--template', files(templates_dir / enums_types + '.h.template'),
'--ftail', '#endif /* __MM_DAEMON_ENUMS_TYPES_H__ */\n',
'@INPUT@'],
capture: true,
)
daemon_enums_types_dep = declare_dependency(
sources: daemon_enums_sources[1],
include_directories: '.',
)
base_sources = files(
'mm-base-bearer.c',
'mm-base-call.c',
'mm-call-at.c',
'mm-base-cbm.c',
'mm-base-modem-at.c',
'mm-base-modem.c',
'mm-base-sim.c',
'mm-sms-at.c',
'mm-bearer-list.c',
'mm-broadband-bearer.c',
'mm-broadband-modem.c',
'mm-call-list.c',
'mm-cbm-list.c',
'mm-device.c',
'mm-dispatcher.c',
'mm-dispatcher-connection.c',
'mm-dispatcher-fcc-unlock.c',
'mm-dispatcher-modem-setup.c',
'mm-iface-modem-3gpp.c',
'mm-iface-modem-3gpp-profile-manager.c',
'mm-iface-modem-3gpp-ussd.c',
'mm-iface-modem.c',
'mm-iface-modem-cdma.c',
'mm-iface-modem-cell-broadcast.c',
'mm-iface-modem-firmware.c',
'mm-iface-modem-location.c',
'mm-iface-modem-messaging.c',
'mm-iface-modem-oma.c',
'mm-iface-modem-sar.c',
'mm-iface-modem-signal.c',
'mm-iface-modem-simple.c',
'mm-iface-modem-time.c',
'mm-iface-modem-voice.c',
'mm-iface-op-lock.c',
'mm-log-helpers.c',
'mm-private-boxed-types.c',
'mm-sleep-context.c',
)
# MM base library (used by MM and tests)
incs = [
top_inc,
kerneldevice_inc,
]
deps = [
libmm_glib_dep,
libhelpers_dep,
libauth_dep,
libport_dep,
libqcdm_dep,
daemon_enums_types_dep,
]
private_deps = []
c_args = [
'-DMM_COMPILATION',
'-DPLUGINDIR="@0@"'.format(mm_prefix / mm_pkglibdir),
'-DMODEMSETUPDIRPACKAGE="@0@"'.format(mm_prefix / mm_pkglibdir / 'modem-setup.d'),
'-DMODEMSETUPDIRUSER="@0@"'.format(mm_prefix / mm_pkgsysconfdir / 'modem-setup.d'),
'-DFCCUNLOCKDIRPACKAGE="@0@"'.format(mm_prefix / mm_pkglibdir / 'fcc-unlock.d'),
'-DFCCUNLOCKDIRUSER="@0@"'.format(mm_prefix / mm_pkgsysconfdir / 'fcc-unlock.d'),
'-DCONNECTIONDIRPACKAGE="@0@"'.format(mm_prefix / mm_pkglibdir / 'connection.d'),
'-DCONNECTIONDIRUSER="@0@"'.format(mm_prefix / mm_pkgsysconfdir / 'connection.d'),
]
libmmbase = static_library(
'mmbase',
sources: base_sources + daemon_enums_sources,
include_directories: incs,
dependencies: deps,
c_args: c_args,
)
libmmbase_dep = declare_dependency(
include_directories: ['.', kerneldevice_inc],
dependencies: deps,
link_with: libmmbase,
)
# Additional vendor plugins
subdir('plugins')
# ModemManager daemon
sources = files(
'main.c',
'mm-base-manager.c',
'mm-filter.c',
'mm-plugin.c',
'mm-plugin-manager.c',
'mm-port-probe.c',
'mm-port-probe-at.c',
)
sources += daemon_enums_sources
sources += base_sources
deps = [
gmodule_dep,
libport_dep,
libqcdm_dep,
libsms_dep,
libauth_dep,
]
if enable_tests
deps += [libmm_test_generated_dep]
endif
c_args = [
'-DMM_COMPILATION',
'-DMODEMSETUPDIRPACKAGE="@0@"'.format(mm_prefix / mm_pkglibdir / 'modem-setup.d'),
'-DMODEMSETUPDIRUSER="@0@"'.format(mm_prefix / mm_pkgsysconfdir / 'modem-setup.d'),
'-DFCCUNLOCKDIRPACKAGE="@0@"'.format(mm_prefix / mm_pkglibdir / 'fcc-unlock.d'),
'-DFCCUNLOCKDIRUSER="@0@"'.format(mm_prefix / mm_pkgsysconfdir / 'fcc-unlock.d'),
'-DCONNECTIONDIRPACKAGE="@0@"'.format(mm_prefix / mm_pkglibdir / 'connection.d'),
'-DCONNECTIONDIRUSER="@0@"'.format(mm_prefix / mm_pkgsysconfdir / 'connection.d'),
]
if enable_qrtr
sources += files('mm-qrtr-bus-watcher.c')
endif
# Additional suspend/resume support via systemd
if enable_systemd_suspend_resume
sources += files('mm-sleep-monitor-systemd.c')
deps += [
gio_unix_dep,
libsystemd_dep,
]
endif
#suspend/resume support via powerd
if enable_powerd_suspend_resume
sources += files('mm-sleep-monitor-powerd.c')
endif
if enable_polkit
deps += polkit_gobject_dep
endif
# Additional QMI support in ModemManager
if enable_qmi
sources += files(
'mm-bearer-qmi.c',
'mm-broadband-modem-qmi.c',
'mm-call-qmi.c',
'mm-shared-qmi.c',
'mm-sim-qmi.c',
'mm-sms-qmi.c',
)
endif
# Additional MBIM support in ModemManager
if enable_mbim
sources += files(
'mm-bearer-mbim.c',
'mm-broadband-modem-mbim.c',
'mm-sim-mbim.c',
'mm-sms-mbim.c',
)
endif
executable(
'ModemManager',
sources: [sources, builtin_sources],
include_directories: [ top_inc, plugins_inc ],
dependencies: deps,
c_args: c_args,
link_whole: builtin_plugins,
install: true,
install_dir: mm_sbindir,
)
pkg.generate(
version: mm_version,
name: mm_name,
description: 'Common headers provided by ModemManager',
subdirs: mm_name,
variables: 'exec_prefix=${prefix}',
)
# generic udev rules
install_data(
'80-mm-candidate.rules',
install_dir: udev_rulesdir,
)
# empty directory for cached position
install_emptydir(
mm_pkgsharedstatedir,
)
if enable_tests
subdir('tests')
endif