summaryrefslogtreecommitdiffstats
path: root/meson.build
diff options
context:
space:
mode:
Diffstat (limited to 'meson.build')
-rw-r--r--meson.build256
1 files changed, 256 insertions, 0 deletions
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..08a71dc
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,256 @@
+# Copyright 2020-2022 David Robillard <d@drobilla.net>
+# SPDX-License-Identifier: CC0-1.0 OR GPL-3.0-or-later
+
+project('patchage', ['c', 'cpp'],
+ version: '1.0.7',
+ license: 'GPLv3+',
+ meson_version: '>= 0.56.0',
+ default_options: [
+ 'b_ndebug=if-release',
+ 'buildtype=release',
+ 'cpp_std=c++17',
+ ])
+
+patchage_src_root = meson.current_source_dir()
+major_version = meson.project_version().split('.')[0]
+version_suffix = '@0@-@1@'.format(meson.project_name(), major_version)
+
+#######################
+# Compilers and Flags #
+#######################
+
+# Required tools
+cpp = meson.get_compiler('cpp')
+
+# Set global warning flags
+if get_option('strict') and not meson.is_subproject()
+ subdir('meson/warnings')
+endif
+
+# Set global warning suppressions
+subdir('meson/suppressions')
+add_project_arguments(cpp_suppressions, language: ['cpp'])
+add_project_arguments(['-DFMT_HEADER_ONLY'], language: ['cpp'])
+
+##########################
+# Platform Configuration #
+##########################
+
+patchage_datadir = get_option('prefix') / get_option('datadir') / 'patchage'
+
+platform_defines = [
+ '-DPATCHAGE_VERSION="@0@"'.format(meson.project_version()),
+ '-DPATCHAGE_DATA_DIR="@0@"'.format(patchage_datadir),
+]
+
+if host_machine.system() in ['gnu', 'linux']
+ platform_defines += ['-D_GNU_SOURCE']
+endif
+
+if get_option('checks')
+ platform_defines += ['-DPATCHAGE_NO_DEFAULT_CONFIG']
+
+ dladdr_code = '''#include <dlfcn.h>
+int main(void) { Dl_info info; return dladdr(&info, &info); }'''
+
+ jack_metadata_code = '''#include <jack/metadata.h>
+int main(void) { return !!&jack_set_property; }'''
+
+ if cpp.compiles(dladdr_code, args: platform_defines, name: 'dladdr')
+ platform_defines += [
+ '-DHAVE_DLADDR=1',
+ '-DPATCHAGE_BINLOC=1',
+ ]
+ else
+ platform_defines += ['-DHAVE_DLADDR=0']
+ endif
+
+ platform_defines += '-DHAVE_JACK_METADATA=@0@'.format(
+ cpp.compiles(jack_metadata_code,
+ args: platform_defines,
+ name: 'jack_metadata').to_int())
+
+endif
+
+################
+# Dependencies #
+################
+
+m_dep = cpp.find_library('m', required: false)
+dl_dep = cpp.find_library('dl', required: false)
+thread_dep = dependency('threads', include_type: 'system')
+
+fmt_dep = dependency(
+ 'fmt',
+ fallback: ['fmt', 'fmt_dep'],
+ include_type: 'system',
+ version: '>= 7.1.3',
+)
+
+gthread_dep = dependency(
+ 'gthread-2.0',
+ include_type: 'system',
+ version: '>= 2.14.0',
+)
+
+glibmm_dep = dependency(
+ 'glibmm-2.4',
+ include_type: 'system',
+ version: '>= 2.14.0',
+)
+
+gtkmm_dep = dependency(
+ 'gtkmm-2.4',
+ include_type: 'system',
+ version: '>= 2.12.0',
+)
+
+ganv_dep = dependency(
+ 'ganv-1',
+ fallback: ['ganv', 'ganv_dep'],
+ include_type: 'system',
+ version: '>= 1.5.2',
+)
+
+dependencies = [
+ dl_dep,
+ fmt_dep,
+ ganv_dep,
+ glibmm_dep,
+ gthread_dep,
+ gtkmm_dep,
+ m_dep,
+ thread_dep,
+]
+
+#######################
+# Driver Dependencies #
+#######################
+
+# Optional ALSA sequencer support
+alsa_dep = dependency(
+ 'alsa',
+ include_type: 'system',
+ required: get_option('alsa'),
+)
+
+# Optional JACK support
+jack_dep = dependency(
+ 'jack',
+ include_type: 'system',
+ required: get_option('jack'),
+ version: '>= 0.120.0',
+)
+
+# Optional JACK D-Bus support
+
+dbus_dep = dependency(
+ 'dbus-1',
+ include_type: 'system',
+ required: get_option('jack_dbus'),
+)
+
+dbus_glib_dep = dependency(
+ 'dbus-glib-1',
+ include_type: 'system',
+ required: get_option('jack_dbus'),
+)
+
+if jack_dep.found() and dbus_dep.found() and dbus_glib_dep.found()
+ message('Both libjack and D-Bus available, defaulting to libjack')
+endif
+
+###########
+# Program #
+###########
+
+sources = files(
+ 'src/Canvas.cpp',
+ 'src/CanvasModule.cpp',
+ 'src/Configuration.cpp',
+ 'src/Drivers.cpp',
+ 'src/Legend.cpp',
+ 'src/Metadata.cpp',
+ 'src/Patchage.cpp',
+ 'src/Reactor.cpp',
+ 'src/TextViewLog.cpp',
+ 'src/event_to_string.cpp',
+ 'src/handle_event.cpp',
+ 'src/main.cpp',
+)
+
+if alsa_dep.found()
+ sources += files('src/AlsaDriver.cpp')
+ dependencies += [alsa_dep]
+else
+ sources += files('src/AlsaStubDriver.cpp')
+endif
+
+if jack_dep.found()
+ sources += files('src/JackLibDriver.cpp')
+ dependencies += [jack_dep]
+elif dbus_dep.found() and dbus_glib_dep.found()
+ sources += files('src/JackDbusDriver.cpp')
+ dependencies += [dbus_dep, dbus_glib_dep]
+else
+ sources += files('src/JackStubDriver.cpp')
+endif
+
+executable(
+ 'patchage',
+ sources,
+ cpp_args: cpp_suppressions + platform_defines,
+ dependencies: dependencies,
+ install: true,
+)
+
+########
+# Data #
+########
+
+subdir('icons')
+
+config = configuration_data()
+config.set('PATCHAGE_VERSION', meson.project_version())
+config.set('BINDIR', get_option('prefix') / get_option('bindir'))
+
+configure_file(
+ configuration: config,
+ input: files('src/patchage.ui.in'),
+ install: true,
+ install_dir: get_option('datadir') / 'patchage',
+ output: 'patchage.ui',
+)
+
+configure_file(
+ configuration: config,
+ input: files('patchage.desktop.in'),
+ install: true,
+ install_dir: get_option('datadir') / 'applications',
+ output: 'patchage.desktop',
+)
+
+install_man(files('doc/patchage.1'))
+
+#########
+# Tests #
+#########
+
+if not get_option('tests').disabled() and not meson.is_subproject()
+ # Check release metadata
+ autoship = find_program('autoship', required: false)
+ if autoship.found()
+ test(
+ 'autoship',
+ autoship,
+ args: ['test', patchage_src_root],
+ suite: 'data',
+ )
+ endif
+endif
+
+if not meson.is_subproject()
+ summary('Install prefix', get_option('prefix'))
+ summary('Executables', get_option('prefix') / get_option('bindir'))
+ summary('Man pages', get_option('prefix') / get_option('mandir'))
+endif