summaryrefslogtreecommitdiff
path: root/meson.build
blob: d7f409388a6d4e640b6e22ed4a7a5b4e808d040d (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
project('gobject-introspection', 'c',
  version: '1.55.0',
  meson_version: '>= 0.42.0',
  default_options: [
    'warning_level=1',
    'buildtype=debugoptimized',
  ],
)

py3 = import('python3')

gi_prefix = get_option('prefix')
gi_bindir = join_paths(gi_prefix, get_option('bindir'))
gi_libdir = join_paths(gi_prefix, get_option('libdir'))
gi_datadir = join_paths(gi_prefix, get_option('datadir'))
gi_includedir = join_paths(gi_prefix, get_option('includedir'))

cc = meson.get_compiler('c')
config = configuration_data()
config.set_quoted('GIR_SUFFIX', 'gir-1.0')
config.set_quoted('GIR_DIR', join_paths(gi_datadir, 'gir-1.0'))
config.set_quoted('GOBJECT_INTROSPECTION_LIBDIR', gi_libdir)

foreach type : ['char', 'short', 'int', 'long']
  size = cc.sizeof(type)
  if size == -1
    error('Failed to get size of @0@'.format(type))
  endif
  config.set('SIZEOF_@0@'.format(type.to_upper()), size)
endforeach

add_project_arguments([
    '-I' + meson.build_root(),
    '-DHAVE_CONFIG_H',
  ], language: 'c',
)

gi_hidden_visibility_cflags = []
if host_machine.system() == 'windows'
  config.set('DLL_EXPORT', true)
  config.set('_GI_EXTERN', '__declspec(dllexport) extern')
  if cc.get_id() != 'msvc'
    gi_hidden_visibility_cflags += '-fvisibility=hidden'
  endif
else
  config.set('_GI_EXTERN', '__attribute__((visibility("default"))) extern')
  gi_hidden_visibility_cflags += '-fvisibility=hidden'
endif

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

gobject_dep = dependency('gobject-2.0', version: '>= 2.52.0')
gio_dep = dependency('gio-2.0')
giounix_dep = dependency('gio-unix-2.0', required: false)
gmodule_dep = dependency('gmodule-2.0')
libffi_dep = dependency('libffi')

gir_build = get_option('gir_build')
subdir('girepository')
subdir('tools')
subdir('giscanner')
if gir_build
  ### To do in a second time
  subdir('gir')
endif
subdir('examples')
subdir('docs')

### Missing meson.build file
### subdir('tests')

install_data('Makefile.introspection', install_dir: join_paths(gi_datadir, 'gobject-introspection-1.0'))
install_data('m4/introspection.m4', install_dir: join_paths(gi_datadir, 'aclocal'))

pkgconfig_conf = configuration_data()
pkgconfig_conf.set('prefix', prefix)
pkgconfig_conf.set('exec_prefix', '${prefix}')
pkgconfig_conf.set('bindir', gi_bindir)
pkgconfig_conf.set('libdir', gi_libdir)
pkgconfig_conf.set('datarootdir', gi_datadir)
pkgconfig_conf.set('datadir', '${datarootdir}')
pkgconfig_conf.set('includedir', gi_includedir)
pkgconfig_conf.set('EXEEXT', '') # TODO?
pkgconfig_conf.set('VERSION', meson.project_version())
pkgconfig_conf.set('FFI_PC_CFLAGS', libffi_dep.get_pkgconfig_variable('Cflags'))
pkgconfig_conf.set('FFI_PC_LIBS', libffi_dep.get_pkgconfig_variable('Libs'))
pkgconfig_conf.set('FFI_PC_PACKAGES', 'libffi')

configure_file(
  input: 'gobject-introspection-1.0.pc.in',
  output: 'gobject-introspection-1.0.pc',
  configuration: pkgconfig_conf,
  install: true,
  install_dir: join_paths(gi_libdir, 'pkgconfig'),
)