Imported Upstream version 3.32.2
[platform/upstream/python-gobject.git] / meson.build
1 project('pygobject', 'c',
2   version : '3.32.2',
3   meson_version : '>= 0.46.0',
4   default_options : [ 'warning_level=1',
5                       'buildtype=debugoptimized'])
6
7 pygobject_version = meson.project_version()
8 version_arr = pygobject_version.split('.')
9 pygobject_version_major = version_arr[0].to_int()
10 pygobject_version_minor = version_arr[1].to_int()
11 pygobject_version_micro = version_arr[2].to_int()
12
13 platform_version = '@0@.0'.format(pygobject_version_major)
14
15 pymod = import('python')
16 python = pymod.find_installation(get_option('python'))
17
18 python_dep = python.dependency()
19
20 glib_version_req = '>= 2.48.0'
21 gi_version_req = '>= 1.46.0'
22 pycairo_version_req = '>= 1.11.1'
23 libffi_version_req = '>= 3.0'
24
25 gi_dep = dependency('gobject-introspection-1.0', version : gi_version_req,
26   fallback: ['gobject-introspection', 'girepo_dep'])
27 glib_dep = dependency('glib-2.0', version : glib_version_req,
28   fallback: ['glib', 'libglib_dep'])
29 gobject_dep = dependency('gobject-2.0', version : glib_version_req,
30   fallback: ['glib', 'libgobject_dep'])
31 gio_dep = dependency('gio-2.0', version : glib_version_req,
32   fallback: ['glib', 'libgio_dep'])
33 gmodule_dep = dependency('gmodule-2.0', version : glib_version_req,
34   fallback: ['glib', 'libgmodule_dep'])
35 ffi_dep = dependency('libffi', version : '>= 3.0',
36   fallback : ['libffi', 'ffi_dep'])
37
38 with_pycairo = get_option('pycairo')
39
40 cc = meson.get_compiler('c')
41
42 if with_pycairo
43   cairo_dep = dependency('cairo', required: cc.get_id() != 'msvc')
44   cairo_gobject_dep = dependency('cairo-gobject', required: cc.get_id() != 'msvc')
45
46   if cc.get_id() == 'msvc' and (not cairo_gobject_dep.found() or not cairo_dep.found())
47     if cc.has_header('cairo.h') and cc.has_header ('cairo-gobject.h')
48       cairo_dep = cc.find_library ('cairo')
49       cairo_gobject_dep = cc.find_library ('cairo-gobject')
50     endif
51   endif
52
53   if python.language_version().version_compare('>= 3.0')
54     pycairo_name = 'py3cairo'
55   else
56     pycairo_name = 'pycairo'
57   endif
58
59   pycairo_dep = dependency(
60     pycairo_name,
61     version: pycairo_version_req,
62     fallback: ['pycairo', 'pycairo_dep'],
63     default_options: ['python=' + get_option('python')],
64   )
65 endif
66
67 main_c_args = []
68 if cc.get_id() == 'msvc'
69   main_c_args += [ '-FImsvc_recommended_pragmas.h' ]
70 else
71   main_c_args += [
72     '-Wall',
73     '-Warray-bounds',
74     '-Wcast-align',
75     '-Wduplicated-branches',
76     '-Wextra',
77     '-Wformat=2',
78     '-Wformat-nonliteral',
79     '-Wformat-security',
80     '-Wimplicit-function-declaration',
81     '-Winit-self',
82     '-Wjump-misses-init',
83     '-Wlogical-op',
84     '-Wmissing-declarations',
85     '-Wmissing-format-attribute',
86     '-Wmissing-include-dirs',
87     '-Wmissing-noreturn',
88     '-Wmissing-prototypes',
89     '-Wnested-externs',
90     '-Wnull-dereference',
91     '-Wold-style-definition',
92     '-Wpacked',
93     '-Wpointer-arith',
94     '-Wrestrict',
95     '-Wreturn-type',
96     '-Wshadow',
97     '-Wsign-compare',
98     '-Wstrict-aliasing',
99     '-Wstrict-prototypes',
100     '-Wswitch-default',
101     '-Wundef',
102     '-Wunused-but-set-variable',
103     '-Wwrite-strings',
104   ]
105
106   if python.language_version().split('.')[0] == '2'
107     main_c_args += [
108         '-Wdeclaration-after-statement',
109     ]
110   endif
111
112   main_c_args += [
113     '-Wno-incompatible-pointer-types-discards-qualifiers',
114     '-Wno-missing-field-initializers',
115     '-Wno-unused-parameter',
116     '-Wno-discarded-qualifiers',
117     '-Wno-sign-conversion',
118     '-Wno-cast-function-type',
119     '-Wno-int-conversion',
120   ]
121
122   main_c_args += [
123     '-fno-strict-aliasing',
124     '-fvisibility=hidden',
125   ]
126
127   main_c_args = cc.get_supported_arguments(main_c_args)
128 endif
129
130 pyext_c_args = ['-DPY_SSIZE_T_CLEAN']
131
132 cdata = configuration_data()
133
134 cdata.set('PYGOBJECT_MAJOR_VERSION', pygobject_version_major)
135 cdata.set('PYGOBJECT_MINOR_VERSION', pygobject_version_minor)
136 cdata.set('PYGOBJECT_MICRO_VERSION', pygobject_version_micro)
137
138 configure_file(output : 'config.h', configuration : cdata)
139
140 pkgconf = configuration_data()
141
142 pkgconf.set('prefix', join_paths(get_option('prefix')))
143 pkgconf.set('exec_prefix', '${prefix}')
144 pkgconf.set('includedir', join_paths('${prefix}', get_option('includedir')))
145 pkgconf.set('datarootdir', join_paths('${prefix}', get_option('datadir')))
146 pkgconf.set('datadir', '${datarootdir}')
147 pkgconf.set('VERSION', pygobject_version)
148
149 pkg_install_dir = '@0@/pkgconfig'.format(get_option('libdir'))
150
151 configure_file(input : 'pygobject-@0@.pc.in'.format(platform_version),
152   output : 'pygobject-@0@.pc'.format(platform_version),
153   configuration : pkgconf,
154   install_dir : pkg_install_dir)
155
156 pygobject_dep = declare_dependency(
157   include_directories: include_directories('gi'),
158   dependencies: [gobject_dep, ffi_dep],
159   version: meson.project_version(),
160 )
161
162 if pygobject_version_minor.is_odd()
163   py_version = '@0@.dev0'.format(pygobject_version)
164 else
165   py_version = pygobject_version
166 endif
167
168 pkginfo_conf = configuration_data()
169 pkginfo_conf.set('VERSION', py_version)
170 configure_file(input : 'PKG-INFO.in',
171   output : 'PyGObject-@0@.egg-info'.format(py_version),
172   configuration : pkginfo_conf,
173   install_dir : python.get_install_dir(pure : false))
174
175 subdir('gi')
176 subdir('pygtkcompat')
177 with_tests = get_option('tests')
178 if with_tests
179 subdir('tests')
180 endif