summaryrefslogtreecommitdiff
path: root/meson.build
blob: 9cc83823e57d2430b1bb32d067fff79a2b3f2075 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
project('pygobject', 'c',
  version : '3.29.3',
  meson_version : '>= 0.46.0',
  default_options : [ 'warning_level=1',
                      'buildtype=debugoptimized'])

pygobject_version = meson.project_version()
version_arr = pygobject_version.split('.')
pygobject_version_major = version_arr[0].to_int()
pygobject_version_minor = version_arr[1].to_int()
pygobject_version_micro = version_arr[2].to_int()

platform_version = '@0@.0'.format(pygobject_version_major)

pymod = import('python')
python = pymod.find_installation(get_option('python'))

python_dep = python.dependency()

glib_version_req = '>= 2.38.0'
gi_version_req = '>= 1.46.0'
pycairo_version_req = '>= 1.11.1'
libffi_version_req = '>= 3.0'

gi_dep = dependency('gobject-introspection-1.0', version : gi_version_req,
  fallback: ['gobject-introspection', 'girepo_dep'])
glib_dep = dependency('glib-2.0', version : glib_version_req,
  fallback: ['glib', 'libglib_dep'])
gobject_dep = dependency('gobject-2.0', version : glib_version_req,
  fallback: ['glib', 'libgobject_dep'])
gio_dep = dependency('gio-2.0', version : glib_version_req,
  fallback: ['glib', 'libgio_dep'])
gmodule_dep = dependency('gmodule-2.0', version : glib_version_req,
  fallback: ['glib', 'libgmodule_dep'])
ffi_dep = dependency('libffi', version : '>= 3.0',
  fallback : ['libffi', 'ffi_dep'])

with_pycairo = get_option('pycairo')

if with_pycairo
  cairo_dep = dependency('cairo')
  cairo_gobject_dep = dependency('cairo-gobject')

  if python.language_version().version_compare('>= 3.0')
    pycairo_name = 'py3cairo'
  else
    pycairo_name = 'pycairo'
  endif

  pycairo_dep = dependency(
    pycairo_name,
    version: pycairo_version_req,
    fallback: ['pycairo', 'pycairo_dep'],
    default_options: ['python=' + get_option('python')],
  )
endif

cc = meson.get_compiler('c')

main_c_args = [
  '-Wall',
  '-Warray-bounds',
  '-Wcast-align',
  '-Wdeclaration-after-statement',
  '-Wduplicated-branches',
  '-Wextra',
  '-Wformat=2',
  '-Wformat-nonliteral',
  '-Wformat-security',
  '-Wimplicit-function-declaration',
  '-Winit-self',
  '-Winline',
  '-Wjump-misses-init',
  '-Wlogical-op',
  '-Wmissing-declarations',
  '-Wmissing-format-attribute',
  '-Wmissing-include-dirs',
  '-Wmissing-noreturn',
  '-Wmissing-prototypes',
  '-Wnested-externs',
  '-Wnull-dereference',
  '-Wold-style-definition',
  '-Wpacked',
  '-Wpointer-arith',
  '-Wrestrict',
  '-Wreturn-type',
  '-Wshadow',
  '-Wsign-compare',
  '-Wstrict-aliasing',
  '-Wstrict-prototypes',
  '-Wundef',
  '-Wunused-but-set-variable',
  '-Wwrite-strings',
  '-Wconversion',
]

main_c_args += [
  '-Wno-incompatible-pointer-types-discards-qualifiers',
  '-Wno-missing-field-initializers',
  '-Wno-unused-parameter',
  '-Wno-discarded-qualifiers',
  '-Wno-sign-conversion',
  '-Wno-cast-function-type',
]

main_c_args += [
  '-fno-strict-aliasing',
  '-fvisibility=hidden',
]

if not ['3.3', '3.4'].contains(python.language_version())
  main_c_args += [
    '-Wswitch-default',
  ]
endif

main_c_args = cc.get_supported_arguments(main_c_args)

pyext_c_args = ['-DPY_SSIZE_T_CLEAN']

cdata = configuration_data()

cdata.set('PYGOBJECT_MAJOR_VERSION', pygobject_version_major)
cdata.set('PYGOBJECT_MINOR_VERSION', pygobject_version_minor)
cdata.set('PYGOBJECT_MICRO_VERSION', pygobject_version_micro)

configure_file(output : 'config.h', configuration : cdata)

pkgconf = configuration_data()

pkgconf.set('prefix', join_paths(get_option('prefix')))
pkgconf.set('exec_prefix', '${prefix}')
pkgconf.set('includedir', join_paths('${prefix}', get_option('includedir')))
pkgconf.set('datarootdir', join_paths('${prefix}', get_option('datadir')))
pkgconf.set('datadir', '${datarootdir}')
pkgconf.set('VERSION', pygobject_version)

pkg_install_dir = '@0@/pkgconfig'.format(get_option('libdir'))

configure_file(input : 'pygobject-@0@.pc.in'.format(platform_version),
  output : 'pygobject-@0@.pc'.format(platform_version),
  configuration : pkgconf,
  install_dir : pkg_install_dir)

if pygobject_version_minor.is_odd()
  py_version = '@0@.dev0'.format(pygobject_version)
else
  py_version = pygobject_version
endif

pkginfo_conf = configuration_data()
pkginfo_conf.set('VERSION', py_version)
configure_file(input : 'PKG-INFO.in',
  output : 'PyGObject-@0@.egg-info'.format(py_version),
  configuration : pkginfo_conf,
  install_dir : python.get_install_dir())

subdir('gi')
subdir('pygtkcompat')
subdir('tests')
subdir('examples')