summaryrefslogtreecommitdiff
path: root/meson.build
diff options
context:
space:
mode:
Diffstat (limited to 'meson.build')
-rw-r--r--meson.build301
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