| project('jami-daemon', ['c', 'cpp'], |
| version: '11.0.0', |
| license: 'GPL3+', |
| default_options: ['cpp_std=gnu++17', 'buildtype=debugoptimized'], |
| meson_version:'>= 0.54' |
| ) |
| |
| modpkgconfig = import('pkgconfig') |
| modcmake = import('cmake') |
| |
| if host_machine.system() == 'darwin' |
| add_languages('objcpp') |
| endif |
| |
| ################################################# |
| # Required dependencies |
| ################################################# |
| depthreads = dependency('threads') |
| depopendht = dependency('opendht', version: '>= 2.1.0') |
| depgnutls = dependency('gnutls', version: '>= 3.6.7') |
| depnettle = dependency('nettle', version: '>= 3.0.0') |
| deplibpjproject = dependency('libpjproject') |
| deplibgit2 = dependency('libgit2', version: '>= 1.1.0') |
| 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') |
| depspeexdsp = dependency('speexdsp') |
| depfmt = dependency('fmt', version: '>= 5.3') |
| |
| depyamlcpp = dependency('yaml-cpp', version: '>= 0.5.1', required: false) |
| if not depyamlcpp.found() |
| depyamlcpp = modcmake.subproject('yaml-cpp', cmake_options: [ |
| '-DCMAKE_BUILD_TYPE=Release', |
| '-DCMAKE_POSITION_INDEPENDENT_CODE=ON', |
| '-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') / 'jami') |
| |
| 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()) |
| |
| depwebrtcap = dependency('webrtc-audio-processing', required: get_option('aec')) |
| conf.set10('HAVE_WEBRTC_AP', depwebrtcap.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') |
| else |
| conf.set('RING_ACCEL', false) |
| conf.set('ENABLE_VIDEOTOOLBOX', false) |
| endif |
| else |
| conf.set('ENABLE_VIDEO', false) |
| conf.set('RING_ACCEL', false) |
| conf.set('ENABLE_VIDEOTOOLBOX', false) |
| endif |
| |
| if get_option('plugins') |
| conf.set('ENABLE_PLUGIN', true) |
| if host_machine.system() == 'darwin' |
| depminizip = dependency('minizip', version: '>= 3.0.0') |
| else |
| deplibarchive = dependency('libarchive', version: '>= 3.4.0', required: false) |
| if not deplibarchive.found() |
| deplibarchive = modcmake.subproject('libarchive', cmake_options: [ |
| '-DCMAKE_BUILD_TYPE=Release', |
| '-DCMAKE_POSITION_INDEPENDENT_CODE=ON', |
| '-DENABLE_TEST=OFF', |
| '-DENABLE_TAR=OFF', |
| '-DENABLE_CPIO=OFF', |
| '-DENABLE_CAT=OFF', |
| '-DENABLE_LIBXML2=OFF' |
| ]).dependency('archive_static') |
| endif |
| endif |
| depdl = meson.get_compiler('cpp').find_library('dl', required: false) |
| else |
| conf.set('ENABLE_PLUGIN', false) |
| endif |
| |
| conf.set10('HAVE_COREAUDIO', host_machine.system() == 'darwin') |
| conf.set10('HAVE_SHM', get_option('interfaces').contains('dbus')) |
| |
| 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('-Djami_EXPORTS', language: 'cpp') |
| add_project_arguments('-Djami_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 |