summaryrefslogtreecommitdiff
path: root/meson.build
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2017-05-20 15:36:44 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2017-05-22 13:44:20 +0100
commit6adb5fa877a36014a05a755f1cf12d549c8f0fb3 (patch)
tree629c27f2d96635ba9bb126664314eb1f4e1357c8 /meson.build
parent1831a7b3e49bdaf206a613d7bdf3a48288b87735 (diff)
downloadatk-6adb5fa877a36014a05a755f1cf12d549c8f0fb3.tar.gz
Add Meson build system
Meson is a meta-build system that has several advantages over Autotools: - faster - simpler to use and understand - portable to various platforms - tailored to the needs of GNOME libraries - well maintained and supported Various other libraries in the GNOME stack have already adopted Meson in parallel, or exclusively, including GTK+. https://bugzilla.gnome.org/show_bug.cgi?id=782871
Diffstat (limited to 'meson.build')
-rw-r--r--meson.build131
1 files changed, 131 insertions, 0 deletions
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..ada80f3
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,131 @@
+project('atk', 'c',
+ version: '2.24.0',
+ license: 'LGPLv2.1+',
+ default_options: [
+ 'buildtype=debugoptimized',
+ 'warning_level=1',
+ 'c_std=c99',
+ ],
+ meson_version : '>= 0.40.1')
+
+cc = meson.get_compiler('c')
+host_system = host_machine.system()
+
+version = meson.project_version().split('.')
+atk_major_version = version[0].to_int()
+atk_minor_version = version[1].to_int()
+atk_micro_version = version[2].to_int()
+
+atk_interface_age = 1
+atk_binary_age = 10000 * atk_major_version + 100 * atk_minor_version + 10 + atk_micro_version
+
+atk_api_version = '1.0'
+atk_api_path = 'atk-@0@/atk'.format(atk_api_version)
+
+atk_prefix = get_option('prefix')
+atk_libdir = join_paths(atk_prefix, get_option('libdir'))
+atk_sysconfdir = join_paths(atk_prefix, get_option('sysconfdir'))
+atk_includedir = join_paths(atk_prefix, get_option('includedir'))
+atk_datadir = join_paths(atk_prefix, get_option('datadir'))
+atk_libexecdir = join_paths(atk_prefix, get_option('libexecdir'))
+
+atk_conf = configuration_data()
+
+atk_conf.set_quoted('VERSION', meson.project_version())
+atk_conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
+
+# Maintain version scheme with libtool
+atk_soversion = '0.@0@.@1@'.format((atk_binary_age - atk_interface_age), atk_interface_age)
+
+add_project_arguments([ '-DG_DISABLE_SINGLE_INCLUDES', '-DATK_DISABLE_SINGLE_INCLUDES' ], language: 'c')
+
+# Compiler and linker flags
+common_cflags = []
+common_ldflags = []
+
+test_cflags = []
+
+# Symbol visibility
+if get_option('default_library') != 'static'
+ if host_system == 'windows'
+ atk_conf.set('DLL_EXPORT', true)
+ atk_conf.set('_ATK_EXTERN', '__declspec(dllexport) extern')
+ if cc.get_id() != 'msvc'
+ test_cflags += ['-fvisibility=hidden']
+ endif
+ else
+ atk_conf.set('_ATK_EXTERN', '__attribute__((visibility("default"))) extern')
+ test_cflags += ['-fvisibility=hidden']
+ endif
+endif
+
+# Check all compiler flags
+foreach cflag: test_cflags
+ if cc.has_argument(cflag)
+ common_cflags += [ cflag ]
+ endif
+endforeach
+
+# Linker flags
+if host_machine.system() == 'linux'
+ foreach ldflag: [ '-Wl,-Bsymbolic', '-Wl,-z,relro', '-Wl,-z,now', ]
+ if cc.has_argument(ldflag)
+ common_ldflags += [ ldflag ]
+ endif
+ endforeach
+endif
+
+# Maintain compatibility with autotools on macOS
+if host_machine.system() == 'darwin'
+ common_ldflags += [ '-compatibility_version=1', '-current_version=1.0', ]
+endif
+
+# Functions
+checked_funcs = [
+ 'bind_textdomain_codeset',
+]
+
+foreach f: checked_funcs
+ if cc.has_function(f)
+ atk_conf.set('HAVE_' + f.underscorify().to_upper(), 1)
+ endif
+endforeach
+
+# Dependencies
+gobject_req_version = '>= 2.31.2'
+
+gobject_dep = dependency('gobject-2.0', version: gobject_req_version)
+
+# Compat variables for pkgconfig
+pkgconf = configuration_data()
+pkgconf.set('prefix', atk_prefix)
+pkgconf.set('exec_prefix', atk_prefix)
+pkgconf.set('libdir', atk_libdir)
+pkgconf.set('includedir', atk_includedir)
+pkgconf.set('VERSION', meson.project_version())
+pkgconf.set('GLIB_PACKAGES', 'gobject-2.0')
+pkgconf.set('ATK_API_VERSION', atk_api_version)
+pkgconf.set('srcdir', '.')
+
+foreach pkg: [ 'atk.pc', ]
+ configure_file(input: pkg + '.in',
+ output: pkg,
+ configuration: pkgconf,
+ install: true,
+ install_dir: join_paths(atk_libdir, 'pkgconfig'))
+endforeach
+
+gnome = import('gnome')
+
+# Internal configuration header
+configure_file(output: 'config.h', configuration: atk_conf)
+
+root_inc = include_directories('.')
+
+subdir('atk')
+subdir('tests')
+subdir('po')
+
+if get_option('enable_docs')
+ subdir('docs')
+endif