diff options
Diffstat (limited to 'meson.build')
-rw-r--r-- | meson.build | 301 |
1 files changed, 301 insertions, 0 deletions
diff --git a/meson.build b/meson.build new file mode 100644 index 00000000..c2d9d1c1 --- /dev/null +++ b/meson.build @@ -0,0 +1,301 @@ +project('atril', 'c', 'cpp', version : '1.28.1') + +gnome = import('gnome') +i18n = import('i18n') +pkgconfig = import('pkgconfig') + +cc = meson.get_compiler('c') + +version = meson.project_version() +version_list = version.split('.') +major_version = version_list[0] +minor_version = version_list[1] +micro_version = version_list[2] + +api_version = '1.5' +binary_version = '3.0.0' +binary_major_version = binary_version.split('.')[0] + +atril_conf = configuration_data() +atril_conf.set_quoted('VERSION', version) +atril_conf.set_quoted('GETTEXT_PACKAGE', meson.project_name()) + +if get_option('enable_dbus') + atril_conf.set('ENABLE_DBUS', '') +endif + +# directories +prefix = get_option('prefix') +bindir = get_option('bindir') +datadir = get_option('datadir') +libdir = get_option('libdir') +includedir = get_option('includedir') +libexecdir = get_option('libexecdir') +desktopdir = join_paths(datadir, 'applications') +schema_dir = join_paths(datadir, 'glib-2.0', 'schemas') +header_dir = join_paths(meson.project_name(), api_version) + +po_dir = join_paths(meson.project_source_root(), 'po') + +# dependencies +cairo = dependency('cairo', version: '>= 1.14.0') +gail = dependency('gail-3.0') +gio = dependency('gio-2.0', version: '>= 2.36.0') +glib_version = '2.36.0' +glib = dependency('glib-2.0', version: '>= ' + glib_version) +gmodule = dependency('gmodule-2.0') +gtk_version = '3.14.0' +gtk_api_version = '3.0' +gtk = dependency('gtk+-' + gtk_api_version, version: '>= ' + gtk_version) +ice = dependency('ice') +sm = dependency('sm') +X11 = dependency('x11') +xml = dependency('libxml-2.0', version: '>= 2.5.0') +zlib = dependency('zlib') +libsecret = dependency('libsecret-1', version: '>= 0.5', required: get_option('keyring')) +gtk_unix_print = dependency('gtk+-unix-print-3.0', version: '>= ' + gtk_version, required: get_option('gtk_unix_print')) + +enabled_backend_names = [] +backend_subdirs = [] +atril_mime_types = '' + +if get_option('pdf') + poppler = dependency('poppler-glib') + backend_subdirs += 'pdf' + atril_mime_types += 'application/pdf;application/x-bzpdf;application/x-gzpdf;application/x-xzpdf;' +endif +if get_option('ps') + spectre = dependency('libspectre', version: '>= 0.2.0') + backend_subdirs += 'ps' + atril_mime_types += 'application/postscript;application/x-bzpostscript;application/x-gzpostscript;image/x-eps;image/x-bzeps;image/x-gzeps;application/illustrator;' +endif +if get_option('dvi') + kpathsea = dependency('kpathsea') + spectre = dependency('libspectre', version: '>= 0.2.0') + if get_option('t1lib') + t1lib = cc.find_library('t1', required: false) + t1_enabled = t1lib.found() + else + t1_enabled = false + endif + backend_subdirs += 'dvi' + atril_mime_types += 'application/x-dvi;application/x-bzdvi;application/x-gzdvi;' +endif +if get_option('djvu') + djvu = dependency('ddjvuapi', version: '>= 3.5.17') + backend_subdirs += 'djvu' + atril_mime_types += 'image/vnd.djvu;image/vnd.djvu+multipage;' +endif +if get_option('tiff') + tiff = dependency('libtiff-4') + backend_subdirs += 'tiff' + atril_mime_types += 'image/tiff;' +endif +if get_option('pixbuf') + backend_subdirs += 'pixbuf' + atril_mime_types += 'image/*;' + atril_conf.set10('ENABLE_PIXBUF', true) +endif +if get_option('comics') + libarchive_req_version = '>= 3.6.0' + libarchive_dep = dependency('libarchive', version: '>= 3.6.0', required: true) + backend_subdirs += 'comics' + comic_mimetypes = ';'.join([ + 'application/vnd.comicbook-rar', + 'application/vnd.comicbook+zip', + 'application/x-cb7', + 'application/x-cbr', + 'application/x-cbt', + 'application/x-cbz', + 'application/x-ext-cb7', + 'application/x-ext-cbr', + 'application/x-ext-cbt', + 'application/x-ext-cbz', + ]) + ';' + atril_mime_types += comic_mimetypes +endif +if get_option('xps') + xps = dependency('libgxps', version: '>= 0.2.1') + backend_subdirs += 'xps' + atril_mime_types += 'application/oxps;application/vnd.ms-xpsdocument;' +endif + +thumbnailer_mime_types = atril_mime_types + +if get_option('epub') + webkit = dependency('webkit2gtk-4.1', version: '>= 2.4.3', required: false) + backend_subdirs += 'epub' + atril_mime_types += 'application/epub+zip;' +endif + +atril_conf.set_quoted('SUPPORTED_MIMETYPES', atril_mime_types) # This is generated by backends/meson.build + +# on some systems we need to find the math lib to make sure it builds +math = cc.find_library('m', required: false) + +intltool_merge = find_program('intltool-merge') + +mathjax_directory = get_option('mathjax-directory') +if mathjax_directory == '' + foreach dir: [ + # Arch Linux + '/usr/share/mathjax', + # Debian + '/usr/share/javascript/mathjax' + ] + if run_command('test', ['-f', join_paths(dir, 'MathJax.js')]).returncode() == 0 + mathjax_directory = dir + # break would require meson_version >= 0.49.0 so just let the last one win + endif + endforeach +endif + +if mathjax_directory != '' + atril_conf.set_quoted('MATHJAX_DIRECTORY', mathjax_directory) +elif get_option('epub') + error('"mathjax-directory" is undefined and could not be autodetected') +endif + +# generate config.h +config_h_file = configure_file( + output : 'config.h', + configuration : atril_conf +) + +config_h = declare_dependency( + sources: config_h_file +) + +include_dirs = include_directories('.', 'libdocument', 'libview', 'libmisc') +include_root = include_directories('.') + +atril_document_header = [ + 'atril-document.h' +] + +atril_view_header = [ + 'atril-view.h' +] + +# compiler flags +c_args = [ + '-DDATADIR="@0@"'.format(join_paths(prefix, datadir)), + '-DLIBDIR="@0@"'.format(join_paths(prefix, libdir)), + '-DBINDIR="@0@"'.format(join_paths(prefix, bindir)), + '-DEV_BACKENDSDIR="@0@"'.format(join_paths(prefix, libdir, meson.project_name(), binary_major_version, 'backends')), + '-DATRILDATADIR="@0@"'.format(join_paths(prefix, datadir, meson.project_name())), + '-Werror=implicit-function-declaration' +] + +cpp_args = [ + '-DATRIL_LOCALE_DIR="@0@"'.format(join_paths(prefix, datadir, 'locale')), + '-DATRIL_COMPILATION', + '-DHAVE_CONFIG_H', +] + +if get_option('enable_debug') + c_args += '-DEV_ENABLE_DEBUG' +endif + +if get_option('epub') + c_args += '-DENABLE_EPUB' +endif + +if not get_option('deprecated_warnings') + c_args += [ + '-Wno-deprecated-declarations', + '-Wno-deprecated', + '-Wno-declaration-after-statement', + ] +endif + +add_global_arguments(c_args, language: 'c') +add_global_arguments(cpp_args, language: ['c', 'cpp']) + +subdir('libdocument') +subdir('libview') +subdir('libmisc') +# 'backend' needs to be run before 'data' because the mimetypes defined in 'backend' +# are used to generate the .desktop file +subdir('backend') +subdir('data') +if get_option('thumbnailer') + subdir('thumbnailer') +endif +if get_option('previewer') + subdir('previewer') +endif + +# Define shell_core_deps +shell_core_deps = [ + glib, + gtk, + gio, +] +subdir('cut-n-paste/smclient') +subdir('cut-n-paste/toolbar-editor') +subdir('cut-n-paste/zoom-control') + +subdir('shell') +subdir('po') +subdir('help') +subdir('install-scripts') + +# The tests use an option that doesn't exist in meson before 0.46. +# Since they aren't strictly necessary, we'll just skip them for earlier versions +# rather than making 0.46 a hard requirement. This condition can be removed once we +# no longer need to worry about building on 0.45 or earlier +if meson.version().version_compare('>=0.46') + subdir('test') +endif + +atril_headers = [ + 'atril-document.h', + 'atril-view.h', +] + +install_headers( + atril_headers, + subdir: header_dir +) + +pc_conf = configuration_data() +pc_conf.set('prefix', prefix) +pc_conf.set('exec_prefix', '${prefix}') +pc_conf.set('libdir', join_paths('${prefix}', libdir)) +pc_conf.set('includedir', join_paths('${prefix}', includedir)) +pc_conf.set('EV_API_VERSION', api_version) +pc_conf.set('EV_BINARY_VERSION', binary_major_version) +pc_conf.set('VERSION', version) +pc_conf.set('GLIB_REQUIRED', glib_version) +pc_conf.set('GTK_API_VERSION', gtk_api_version) +pc_conf.set('GTK_REQUIRED', gtk_version) + +configure_file( + input: 'atril-document.pc.in', + output: 'atril-document-@[email protected]'.format(api_version), + configuration: pc_conf, + install_dir: join_paths(libdir, 'pkgconfig') +) + +configure_file( + input: 'atril-view.pc.in', + output: 'atril-view-@[email protected]'.format(api_version), + configuration: pc_conf, + install_dir: join_paths(libdir, 'pkgconfig') +) + +message('prefix = @0@'.format(prefix)) +message('bindir = @0@'.format(bindir)) +message('datadir = @0@'.format(datadir)) +message('libdir = @0@'.format(libdir)) +message('includedir = @0@'.format(includedir)) +message('libexecdir = @0@'.format(libexecdir)) +message('desktopdir = @0@'.format(desktopdir)) +message('schema_dir = @0@'.format(schema_dir)) +message('ENABLE_DBUS = @0@'.format(get_option('enable_dbus'))) +message('MathJax directory = @0@'.format(mathjax_directory)) +message('Backends enabled:') +foreach backend_name : backend_subdirs + message(' @0@'.format(backend_name)) +endforeach |