1project('media-session', ['c'], 2 version : '0.4.1', 3 license : [ 'MIT', 'LGPL-2.1-or-later', 'GPL-2.0-only' ], 4 meson_version : '>= 0.56.0', 5 default_options : [ 'warning_level=3', 6 'c_std=gnu99', 7 'b_pie=true', 8 #'b_sanitize=address,undefined', 9 'buildtype=debugoptimized' ]) 10 11media_session_version = meson.project_version() 12 13prefix = get_option('prefix') 14media_session_bindir = prefix / get_option('bindir') 15media_session_datadir = prefix / get_option('datadir') 16media_session_libdir = prefix / get_option('libdir') 17media_session_libexecdir = prefix / get_option('libexecdir') 18media_session_localedir = prefix / get_option('localedir') 19media_session_sysconfdir = prefix / get_option('sysconfdir') 20 21# For historical reasons, we drop our data into the pipewire directories 22media_session_configdir = media_session_sysconfdir / 'pipewire' 23media_session_confdatadir = media_session_datadir / 'pipewire' 24 25gnome = import('gnome') 26pkgconfig = import('pkgconfig') 27 28cc = meson.get_compiler('c') 29 30common_flags = [ 31 '-fvisibility=hidden', 32 '-Werror=suggest-attribute=format', 33 '-Wsign-compare', 34 '-Wpointer-arith', 35 '-Wpointer-sign', 36 '-Wformat', 37 '-Wformat-security', 38 '-Wimplicit-fallthrough', 39 '-Wmissing-braces', 40 '-Wtype-limits', 41 '-Wvariadic-macros', 42 '-Wno-missing-field-initializers', 43 '-Wno-unused-parameter', 44 '-Wno-pedantic', 45 '-Wold-style-declaration', 46 '-Wunused-result', 47] 48 49cc_flags = common_flags + [ 50 '-D_GNU_SOURCE', 51] 52add_project_arguments(cc.get_supported_arguments(cc_flags), language: 'c') 53 54cdata = configuration_data() 55cdata.set_quoted('MEDIA_SESSION_CONFDATADIR', media_session_confdatadir) 56cdata.set_quoted('LOCALEDIR', media_session_localedir) 57cdata.set_quoted('LIBDIR', media_session_libdir) 58cdata.set_quoted('GETTEXT_PACKAGE', meson.project_name()) 59cdata.set_quoted('PACKAGE', 'media-session') 60cdata.set_quoted('PACKAGE_NAME', '"media-session"') 61cdata.set_quoted('PACKAGE_STRING', 'media-session @0@'.format(media_session_version)) 62cdata.set_quoted('PACKAGE_TARNAME', 'media-session') 63cdata.set_quoted('PACKAGE_URL', '"https://pipewire.org"') 64cdata.set_quoted('PACKAGE_VERSION', media_session_version) 65 66pipewire_dep = dependency('libpipewire-0.3', version: '>= 0.3.39') 67 68systemd = dependency('systemd', required: get_option('systemd')) 69systemd_dep = dependency('libsystemd',required: get_option('systemd')) 70summary({'systemd conf data': systemd.found()}, bool_yn: true) 71summary({'libsystemd': systemd_dep.found()}, bool_yn: true) 72if systemd.found() and systemd_dep.found() 73 cdata.set('HAVE_SYSTEMD', 1) 74endif 75 76configinc = include_directories('.') 77 78# Find dependencies 79mathlib = cc.find_library('m', required : false) 80rt_lib = cc.find_library('rt', required : false) # clock_gettime 81dl_lib = cc.find_library('dl', required : false) 82pthread_lib = dependency('threads') 83dbus_dep = dependency('dbus-1') 84 85libinotify_dep = (build_machine.system() == 'dragonfly' 86 ? dependency('libinotify', required: true) 87 : dependency('', required: false)) 88 89# On FreeBSD, libintl library is required for gettext 90libintl_dep = dependency('intl', required: false) 91 92if not libintl_dep.found() 93 libintl_dep = cc.find_library('intl', required: false) 94endif 95summary({'intl support': libintl_dep.found()}, bool_yn: true) 96 97alsa_dep = dependency('alsa', version : '>=1.1.7') 98 99subdir('po') 100subdir('src') 101subdir('media-session.d') 102if systemd.found() 103 subdir('systemd') 104endif 105 106configure_file(output : 'config.h', 107 configuration : cdata) 108 109doxygen = find_program('doxygen', required : get_option('docs')) 110if doxygen.found() 111 subdir('doc') 112endif 113 114conf_uninstalled = configuration_data() 115conf_uninstalled.set('MESON', '') 116conf_uninstalled.set('MESON_SOURCE_ROOT', meson.project_source_root()) 117conf_uninstalled.set('MESON_BUILD_ROOT', meson.project_build_root()) 118 119ms_uninstalled = configure_file( 120 input : 'media-session-uninstalled.sh', 121 output : 'media-session-uninstalled.sh.in', 122 configuration : conf_uninstalled, 123) 124 125media_session_uninstalled = custom_target('media-session-uninstalled', 126 output : 'media-session-uninstalled.sh', 127 input : ms_uninstalled, 128 build_by_default : true, 129 command : ['cp', '@INPUT@', '@OUTPUT@'], 130) 131 132run_target('media-session-uninstalled', 133 command : [media_session_uninstalled, 134 '-b@0@'.format(meson.project_build_root()), 135 '-v@0@'.format(media_session_version)] 136) 137 138if meson.version().version_compare('>=0.58.0') 139 devenv = environment() 140 141 builddir = meson.current_build_dir() 142 srcdir = meson.current_source_dir() 143 144 devenv.set('MEDIA_SESSION_CONFIG_DIR', builddir / 'media-session.d') 145 146 devenv.set('PW_UNINSTALLED', '1') 147 148 meson.add_devenv(devenv) 149endif 150