summaryrefslogtreecommitdiff
path: root/meson.build
diff options
context:
space:
mode:
Diffstat (limited to 'meson.build')
-rw-r--r--meson.build360
1 files changed, 360 insertions, 0 deletions
diff --git a/meson.build b/meson.build
new file mode 100644
index 00000000..a8dc8ba7
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,360 @@
+project('atril', 'c', 'cpp',
+ version: '1.28.2',
+ meson_version: '>=0.56.0',
+ default_options: [
+ 'warning_level=1',
+ 'buildtype=debugoptimized',
+ ]
+)
+
+# Import modules
+gnome = import('gnome')
+i18n = import('i18n')
+pkgconfig = import('pkgconfig')
+
+# Get compiler
+cc = meson.get_compiler('c')
+
+# Version information
+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]
+
+# Configuration data
+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
+
+# Directory paths
+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
+glib_version = '2.36.0'
+gtk_version = '3.14.0'
+gtk_api_version = '3.0'
+
+cairo = dependency('cairo', version: '>= 1.14.0')
+gail = dependency('gail-3.0')
+gio = dependency('gio-2.0', version: '>= 2.36.0')
+glib = dependency('glib-2.0', version: '>= ' + glib_version)
+gmodule = dependency('gmodule-2.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'))
+mate_desktop = dependency('mate-desktop-2.0', version: '>= 1.27.1')
+
+# Backend configuration
+enabled_backend_names = []
+backend_subdirs = []
+atril_mime_types = ''
+
+# PDF backend
+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
+
+# PostScript backend
+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
+
+# DVI backend
+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
+
+# DJVU backend
+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
+
+# TIFF backend
+if get_option('tiff')
+ tiff = dependency('libtiff-4')
+ backend_subdirs += 'tiff'
+ atril_mime_types += 'image/tiff;'
+endif
+
+# Pixbuf backend
+if get_option('pixbuf')
+ backend_subdirs += 'pixbuf'
+ atril_mime_types += 'image/*;'
+ atril_conf.set10('ENABLE_PIXBUF', true)
+endif
+
+# Comics backend
+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
+
+# XPS backend
+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
+
+# EPUB backend
+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)
+
+# Math library
+math = cc.find_library('m', required: false)
+
+# MathJax configuration
+mathjax_directory = get_option('mathjax-directory')
+if mathjax_directory == ''
+ foreach dir: [
+ '/usr/share/mathjax',
+ '/usr/share/javascript/mathjax'
+ ]
+ if run_command('test', ['-f', join_paths(dir, 'MathJax.js')], check: false).returncode() == 0
+ mathjax_directory = dir
+ 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
+
+mate_submodules_dep = dependency('mate-submodules', version: '1.24.0',
+fallback: ['mate-submodules', 'mate_submodules_dep'])
+
+# Generate config.h
+config_h_file = configure_file(
+ output: 'config.h',
+ configuration: atril_conf
+)
+
+config_h = declare_dependency(
+ sources: config_h_file
+)
+
+# Include directories
+include_dirs = include_directories('.', 'libdocument', 'libview', 'libmisc', 'cut-n-paste/toolbar-editor', 'properties')
+include_root = include_directories('.')
+
+# Headers
+atril_document_header = [
+ 'atril-document.h'
+]
+
+atril_view_header = [
+ 'atril-view.h'
+]
+
+# Compiler flags
+c_args = [
+ '-DGETTEXT_PACKAGE="@0@"'.format(meson.project_name()),
+ '-DDATADIR="@0@"'.format(join_paths(prefix, datadir)),
+ '-DMATEDATADIR="@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())),
+ '-DMATELOCALEDIR="@0@"'.format(join_paths(prefix, datadir, 'locale')),
+ '-Werror=implicit-function-declaration',
+ '-DATRIL_COMPILATION',
+ '-DPACKAGE_URL="https://mate-desktop.org"',
+ '-include', 'config.h',
+]
+
+cpp_args = [
+ '-DATRIL_LOCALE_DIR="@0@"'.format(join_paths(prefix, datadir, 'locale')),
+ '-DMATELOCALEDIR="@0@"'.format(join_paths(prefix, datadir, 'locale')),
+ '-DATRIL_COMPILATION',
+ '-DHAVE_CONFIG_H',
+ '-DPACKAGE_URL="https://mate-desktop.org"'
+]
+
+# Maintainer mode configuration
+if get_option('maintainer_mode')
+ domains = ['G', 'ATK', 'PANGO', 'GDK', 'GDK_PIXBUF', 'GTK', 'MATE', 'LIBGLADE', 'VTE', 'WNCK', 'LIBSOUP']
+
+ disable_deprecated_flags = []
+ foreach domain : domains
+ disable_deprecated_flags += '-D@0@_DISABLE_DEPRECATED'.format(domain)
+ disable_deprecated_flags += '-D@0@_DISABLE_SINGLE_INCLUDES'.format(domain)
+ endforeach
+
+ c_args += disable_deprecated_flags
+ cpp_args += disable_deprecated_flags
+endif
+
+# Additional conditional flags
+if get_option('enable_debug')
+ c_args += '-DEV_ENABLE_DEBUG'
+ cpp_args += '-DEV_ENABLE_DEBUG'
+endif
+
+if get_option('epub')
+ c_args += '-DENABLE_EPUB'
+ cpp_args += '-DENABLE_EPUB'
+endif
+
+# Add compiler arguments
+add_project_arguments(c_args, language: 'c')
+add_project_arguments(cpp_args, language: 'cpp')
+
+# Define shell_core_deps before including subdirectories that need it
+shell_core_deps = [
+ glib,
+ gtk,
+ gio,
+]
+
+subdir('libdocument')
+subdir('libview')
+subdir('libmisc')
+subdir('backend')
+subdir('data')
+
+if get_option('thumbnailer')
+ subdir('thumbnailer')
+endif
+
+if get_option('previewer')
+ subdir('previewer')
+endif
+
+subdir('cut-n-paste/toolbar-editor')
+subdir('cut-n-paste/zoom-control')
+subdir('properties')
+
+subdir('shell')
+subdir('po')
+subdir('help')
+subdir('install-scripts')
+
+# Tests (conditional on Meson version)
+if meson.version().version_compare('>=0.46')
+ subdir('test')
+endif
+
+# Install headers
+atril_headers = [
+ 'atril-document.h',
+ 'atril-view.h',
+]
+
+install_headers(
+ atril_headers,
+ subdir: header_dir
+)
+
+# Generate pkg-config files
+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')
+)
+
+# Summary output
+summary = [
+ '',
+ '--- Build Configuration Summary For Atril ---',
+ '',
+ 'prefix = @0@'.format(prefix),
+ 'bindir = @0@'.format(bindir),
+ 'datadir = @0@'.format(datadir),
+ 'libdir = @0@'.format(libdir),
+ 'includedir = @0@'.format(includedir),
+ 'libexecdir = @0@'.format(libexecdir),
+ 'desktopdir = @0@'.format(desktopdir),
+ 'schema_dir = @0@'.format(schema_dir),
+ 'ENABLE_DBUS = @0@'.format(get_option('enable_dbus')),
+ 'MathJax directory = @0@'.format(mathjax_directory),
+ '',
+ 'Backends enabled:',
+]
+
+foreach backend_name : backend_subdirs
+ summary += ' @0@'.format(backend_name)
+endforeach
+
+message('\n'.join(summary))