project('audacious', 'c', 'cpp', version: '4.1', meson_version: '>= 0.46', default_options: [ 'c_std=gnu99', 'cpp_std=gnu++11', 'warning_level=1' ]) copyright = 'Copyright (C) 2001-2021 Audacious developers and others' qt5 = import('qt5') gnome = import('gnome') glib_req = '>= 2.32' glib_dep = dependency('glib-2.0', version: glib_req, required: true) gmodule_dep = dependency('gmodule-2.0', version: glib_req, required: true) thread_dep = dependency('threads', required: true) if get_option('qt') qt_req = '>= 5.2' qt_dep = dependency('qt5', version: qt_req, required: true, modules: ['Core', 'Widgets', 'Gui']) endif if get_option('gtk') gtk_req = '>= 2.24' gtk_dep = dependency('gtk+-2.0', version: gtk_req, required: true) endif if get_option('libarchive') libarchive_dep = dependency('libarchive', required: true) endif have_darwin = host_machine.system() == 'darwin' have_windows = host_machine.system() == 'windows' cc = meson.get_compiler('c') cxx = meson.get_compiler('cpp') if cc.get_id() in ['gcc', 'clang'] common_flags = [ '-ffast-math', '-Wtype-limits', '-Wno-stringop-truncation', '-fvisibility=hidden' ] cxx_flags = [ '-Wno-non-virtual-dtor', '-Woverloaded-virtual' ] check_cflags = common_flags check_cxxflags = common_flags + cxx_flags add_project_arguments(cc.get_supported_arguments(check_cflags), language: 'c') add_project_arguments(cxx.get_supported_arguments(check_cxxflags), language: 'cpp') endif conf = configuration_data() conf.set_quoted('BUILDSTAMP', get_option('buildstamp')) conf.set_quoted('COPYRIGHT', copyright) conf.set_quoted('PACKAGE', meson.project_name()) conf.set_quoted('VERSION', meson.project_version()) conf.set('PACKAGE_VERSION', meson.project_version()) if host_machine.endian() == 'big' conf.set10('WORDS_BIGENDIAN', true) conf.set10('BIGENDIAN', true) else conf.set10('BIGENDIAN', false) endif # XXX - investigate to see if we can do better if have_windows conf.set_quoted('PLUGIN_SUFFIX', '.dll') elif have_darwin conf.set_quoted('PLUGIN_SUFFIX', '.dylib') else conf.set_quoted('PLUGIN_SUFFIX', '.so') endif if have_windows conf.set('EXPORT', '__declspec(dllexport)') elif cxx.has_argument('-fvisibility=default') conf.set('EXPORT', '__attribute__((visibility("default")))') else error('Could not define EXPORT keyword for public symbols.') endif # XXX - why do we have to define this manually? if (cxx.has_header('libintl.h')) add_project_arguments('-DHAVE_GETTEXT', language: ['c', 'cpp']) if have_darwin or have_windows add_project_link_arguments('-lintl', language: ['c', 'cpp']) endif endif install_bindir = get_option('bindir') install_datadir = join_paths(get_option('datadir'), 'audacious') install_plugindir = join_paths(get_option('libdir'), 'audacious') install_localedir = get_option('localedir') install_desktoppath = join_paths(get_option('datadir'), 'applications') install_desktopfile = join_paths(install_desktoppath, 'audacious.desktop') install_iconpath = join_paths(get_option('datadir'), 'icons') install_unscalable_iconpath = join_paths(install_iconpath, 'hicolor', '48x48', 'apps') install_scalable_iconpath = join_paths(install_iconpath, 'hicolor', 'scalable', 'apps') install_iconfile = join_paths(install_unscalable_iconpath, 'audacious.png') conf.set_quoted('INSTALL_BINDIR', join_paths(get_option('prefix'), install_bindir)) conf.set_quoted('INSTALL_DATADIR', join_paths(get_option('prefix'), install_datadir)) conf.set_quoted('INSTALL_PLUGINDIR', join_paths(get_option('prefix'), install_plugindir)) conf.set_quoted('INSTALL_LOCALEDIR', join_paths(get_option('prefix'), install_localedir)) conf.set_quoted('INSTALL_DESKTOPFILE', join_paths(get_option('prefix'), install_desktopfile)) conf.set_quoted('INSTALL_ICONFILE', join_paths(get_option('prefix'), install_iconfile)) conf.set('plugindir', install_plugindir) conf.set('datarootdir', get_option('datadir')) if get_option('dbus') conf.set10('USE_DBUS', true) endif if get_option('qt') conf.set10('USE_QT', true) endif if get_option('gtk') conf.set10('USE_GTK', true) endif if get_option('libarchive') conf.set10('USE_LIBARCHIVE', true) endif if get_option('valgrind') conf.set10('VALGRIND_FRIENDLY', true) endif subdir('src') subdir('po') subdir('man') subdir('images') install_data('AUTHORS', 'COPYING') install_data('audacious.desktop', install_dir: install_desktoppath) pkg = import('pkgconfig') # When Meson fixes the utter disappointment that is # https://github.com/mesonbuild/meson/issues/5836, # use libaudcore_lib as base dependency here. pkg.generate( libraries: ['-L${libdir} -laudcore'], variables: [ 'plugin_dir=${libdir}/audacious', # Appease broken third-party plugin build systems. 'audacious_include_dir=${includedir}', 'include_dir=${includedir}', 'lib_dir=${libdir}' ], description: 'versatile and handy multi platform media player', name: 'audacious', url: 'https://audacious-media-player.org' ) if meson.version().version_compare('>= 0.53') summary({ 'Prefix': get_option('prefix'), 'Bin dir': get_option('bindir'), 'Lib dir': get_option('libdir'), 'Data dir': get_option('datadir'), }, section: 'Directories') summary({ 'D-Bus support': get_option('dbus'), 'Qt support': get_option('qt'), 'GTK support': get_option('gtk'), 'Libarchive support': get_option('libarchive'), 'Valgrind analysis support': get_option('valgrind'), 'Build stamp': get_option('buildstamp'), }, section: 'Configuration') endif