1project('libadwaita', 'c',
2          version: '1.0.0-alpha.2',
3          license: 'LGPL-2.1-or-later',
4    meson_version: '>= 0.53.0',
5  default_options: [ 'warning_level=1', 'buildtype=debugoptimized', 'c_std=gnu11' ],
6)
7
8version_arr = meson.project_version().split('-')[0].split('.')
9adwaita_version_major = version_arr[0].to_int()
10adwaita_version_minor = version_arr[1].to_int()
11adwaita_version_micro = version_arr[2].to_int()
12
13# The major api version as encoded in the libraries name
14apiversion = adwaita_version_major.to_string()
15# The so major version of the library
16soversion = 0
17package_api_name = '@0@-@1@'.format(meson.project_name(), apiversion)
18
19adwaita_interface_age = adwaita_version_micro
20
21# maintaining compatibility with libtool versioning
22# current = minor * 100 + micro - interface
23# revision = interface
24current = adwaita_version_minor * 100 + adwaita_version_micro - adwaita_interface_age
25revision = adwaita_interface_age
26libversion = '@0@.@1@.@2@'.format(soversion, current, revision)
27
28add_project_arguments([
29  '-DHAVE_CONFIG_H',
30  '-DADWAITA_COMPILATION',
31  '-I' + meson.build_root(),
32], language: 'c')
33
34root_inc = include_directories('.')
35src_inc = include_directories('src')
36
37cc = meson.get_compiler('c')
38
39global_c_args = []
40test_c_args = [
41  '-Wcast-align',
42  '-Wdate-time',
43  '-Wdeclaration-after-statement',
44  ['-Werror=format-security', '-Werror=format=2'],
45  '-Wendif-labels',
46  '-Werror=incompatible-pointer-types',
47  '-Werror=missing-declarations',
48  '-Werror=overflow',
49  '-Werror=return-type',
50  '-Werror=shift-count-overflow',
51  '-Werror=shift-overflow=2',
52  '-Werror=implicit-fallthrough=3',
53  '-Wformat-nonliteral',
54  '-Wformat-security',
55  '-Winit-self',
56  '-Wmaybe-uninitialized',
57  '-Wmissing-field-initializers',
58  '-Wmissing-include-dirs',
59  '-Wmissing-noreturn',
60  '-Wnested-externs',
61  '-Wno-missing-field-initializers',
62  '-Wno-sign-compare',
63  '-Wno-strict-aliasing',
64  '-Wno-unused-parameter',
65  '-Wold-style-definition',
66  '-Wpointer-arith',
67  '-Wredundant-decls',
68  '-Wshadow',
69  '-Wstrict-prototypes',
70  '-Wswitch-default',
71  '-Wswitch-enum',
72  '-Wtype-limits',
73  '-Wundef',
74  '-Wunused-function',
75]
76
77target_system = target_machine.system()
78
79if get_option('buildtype') != 'plain'
80  if target_system == 'windows'
81    test_c_args += '-fstack-protector'
82  else
83    test_c_args += '-fstack-protector-strong'
84  endif
85endif
86if get_option('profiling')
87  test_c_args += '-pg'
88endif
89
90foreach arg: test_c_args
91  if cc.has_multi_arguments(arg)
92    global_c_args += arg
93  endif
94endforeach
95add_project_arguments(
96  global_c_args,
97  language: 'c'
98)
99
100# Setup various paths that subdirectory meson.build files need
101package_subdir = get_option('package_subdir') # When used as subproject
102if package_subdir != ''
103  datadir    = get_option('datadir') / package_subdir
104  libdir     = get_option('libdir')  / package_subdir
105  girdir     = get_option('datadir') / package_subdir / 'gir-1.0'
106  typelibdir = get_option('libdir')  / package_subdir / 'girepository-1.0'
107  vapidir    = get_option('datadir') / package_subdir / 'vapi'
108else
109  datadir    = get_option('datadir')
110  libdir     = get_option('libdir')
111  girdir     = get_option('datadir') / 'gir-1.0'
112  typelibdir = get_option('libdir')  / 'girepository-1.0'
113  vapidir    = get_option('datadir') / 'vala' / 'vapi'
114endif
115
116introspection_feature = get_option('introspection')
117introspection = introspection_feature.enabled() or introspection_feature.auto()
118
119gnome = import('gnome')
120
121subdir('src')
122subdir('po')
123subdir('examples')
124subdir('tests')
125subdir('doc')
126
127run_data = configuration_data()
128run_data.set('ABS_BUILDDIR', meson.current_build_dir())
129run_data.set('ABS_SRCDIR', meson.current_source_dir())
130configure_file(
131          input: 'run.in',
132         output: 'run',
133  configuration: run_data)
134
135summary(
136  {
137    'Tests': get_option('tests'),
138    'Examples': get_option('examples'),
139    'Documentation': get_option('gtk_doc'),
140    'Introspection': introspection,
141    'Vapi': get_option('vapi'),
142  }, section: 'Options')
143
144