meson.build 9.67 KB
Newer Older
1 2
project(
  'gnome-control-center', 'c',
Georges Basile Stavracas Neto's avatar
Georges Basile Stavracas Neto committed
3
        version : '3.31.2',
4
        license : 'GPL2+',
5
  meson_version : '>= 0.48.0'
6 7 8 9 10 11 12 13 14 15 16 17 18
)

control_center_prefix = get_option('prefix')
control_center_bindir = join_paths(control_center_prefix, get_option('bindir'))
control_center_datadir = join_paths(control_center_prefix, get_option('datadir'))
control_center_libexecdir = join_paths(control_center_prefix, get_option('libexecdir'))
control_center_localedir = join_paths(control_center_prefix, get_option('localedir'))
control_center_mandir = join_paths(control_center_prefix, get_option('mandir'))
control_center_sysconfdir = join_paths(control_center_prefix, get_option('sysconfdir'))

control_center_pkgdatadir = join_paths(control_center_datadir, meson.project_name())
control_center_desktopdir = join_paths(control_center_datadir, 'applications')
control_center_icondir = join_paths(control_center_datadir, 'icons')
19
control_center_schemadir = join_paths (control_center_datadir, 'glib-2.0', 'schemas')
20 21 22

control_center_gettext = meson.project_name() + '-2.0'

23
host_is_linux = host_machine.system().contains('linux')
24
host_is_linux_not_s390 = host_is_linux and not host_machine.cpu().contains('s390')
25 26 27

cc = meson.get_compiler('c')

28 29 30
# Tracing
enable_tracing = get_option('tracing')

31 32
config_h = configuration_data()

33 34 35 36 37
py3 = import('python3')
python = py3.find_python()

config_h.set_quoted('TEST_NM_PYTHON', python.path())

38 39 40 41 42 43 44 45 46 47 48 49 50 51
# defines
set_defines = [
  # package
  ['PACKAGE', meson.project_name()],
  ['PACKAGE_VERSION', meson.project_version()],
  ['VERSION', meson.project_version()],
  # i18n
  ['GETTEXT_PACKAGE', control_center_gettext]
]

foreach define: set_defines
  config_h.set_quoted(define[0], define[1])
endforeach

52 53 54
# meson does not support octal values, so it must be handled as a
# string. See: https://github.com/mesonbuild/meson/issues/2047
config_h.set('USER_DIR_MODE', '0700',
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
             description: 'Permissions for creating the user\'s config, cache and data directories')

# compiler flags
common_flags = ['-DHAVE_CONFIG_H']

# Only add this when optimizing is enabled (default)
optimized_src = '''
  #if __OPTIMIZE__ == 0
  #error No optimization
  #endif
'''

control_center_optimized = get_option('buildtype').contains('optimized') and cc.compiles(optimized_src)

if control_center_optimized
  common_flags += '-Wp,-D_FORTIFY_SOURCE=2'
endif

if get_option('buildtype').contains('debug')
  test_cflags = [
    '-Wcast-align',
    '-Wmissing-field-initializers',
    '-Wmissing-declarations',
    '-Wmissing-prototypes',
    '-Wnested-externs',
    '-Wno-strict-aliasing',
    '-Wno-sign-compare'
  ]

  common_flags += cc.get_supported_arguments(test_cflags)
endif

add_project_arguments(common_flags, language: 'c')

# Check that we meet the dependencies
libgvc = subproject(
  'gvc',
92 93 94 95
  default_options: [
    'static=true',
    'alsa=false',
  ]
96 97 98
)
libgvc_dep = libgvc.get_variable('libgvc_dep')

99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
libhandy_dep = dependency('libhandy-0.0', version: '>= 0.0.4', required: false)
if not libhandy_dep.found()
  libhandy = subproject(
    'libhandy',
    default_options: [
      'examples=false',
      'glade_catalog=false',
      'introspection=false',
      'tests=false',
      'vapi=false',
    ]
  )
  libhandy_dep = libhandy.get_variable('libhandy_dep')
endif

114 115 116 117 118 119 120 121
goa_req_version = '>= 3.25.3'
pulse_req_version = '>= 2.0'

accounts_dep = dependency('accountsservice', version: '>= 0.6.39')
colord_dep = dependency('colord', version: '>= 0.1.34')
gdk_pixbuf_dep = dependency('gdk-pixbuf-2.0', version: '>= 2.23.0')
gio_dep = dependency('gio-2.0')
glib_dep = dependency('glib-2.0', version: '>= 2.53.0')
122
gnome_desktop_dep = dependency('gnome-desktop-3.0', version: '>= 3.27.90')
123 124
gnome_settings_dep = dependency('gnome-settings-daemon', version: '>= 3.25.90')
goa_dep = dependency('goa-1.0', version: goa_req_version)
125
gsettings_desktop_dep = dependency('gsettings-desktop-schemas', version: '>= 3.31.0')
126 127 128 129
libxml_dep = dependency('libxml-2.0')
polkit_gobject_dep = dependency('polkit-gobject-1', version: '>= 0.103')
pulse_dep = dependency('libpulse', version: pulse_req_version)
pulse_mainloop_dep = dependency('libpulse-mainloop-glib', version: pulse_req_version)
130
upower_glib_dep = dependency('upower-glib', version: '>= 0.99.8')
131 132 133 134 135 136 137 138 139
x11_dep = dependency('x11')
xi_dep = dependency('xi', version: '>= 1.2')

m_dep = cc.find_library('m')

common_deps = [
  gio_dep,
  glib_dep,
  gsettings_desktop_dep,
140
  libhandy_dep,
141 142
  dependency('gio-unix-2.0'),
  dependency('gthread-2.0'),
143
  dependency('gtk+-3.0', version: '>= 3.22.20')
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
]

# Check for CUPS 1.4 or newer
cups_dep = dependency('cups', version : '>= 1.4', required: false)
assert(cups_dep.found(), 'CUPS 1.4 or newer not found')

# https://bugzilla.gnome.org/show_bug.cgi?id=696766
cups_cflags = []
if cups_dep.version().version_compare('>= 1.6')
  cups_cflags += '-D_PPD_DEPRECATED=""'
endif

# cups headers
check_headers = [
  ['HAVE_CUPS_CUPS_H', 'cups/cups.h'],
  ['HAVE_CUPS_PPD_H', 'cups/ppd.h']
]

foreach header: check_headers
  assert(cc.has_header(header[1], args: cups_cflags), 'CUPS headers not found: ' + header[1])
endforeach

# Optional dependency for the user accounts panel
enable_cheese = get_option('cheese')
if enable_cheese
  cheese_deps = [
170
    dependency('cheese', version: '>= 3.28.0'),
171 172 173 174 175 176 177 178 179 180 181 182 183 184
    dependency('cheese-gtk', version: '>= 3.5.91')
  ]
endif
config_h.set('HAVE_CHEESE', enable_cheese,
             description: 'Define to 1 to enable cheese webcam support')

# IBus support
enable_ibus = get_option('ibus')
if enable_ibus
  ibus_dep = dependency('ibus-1.0', version: '>= 1.5.2')
endif
config_h.set('HAVE_IBUS', enable_ibus,
             description: 'Defined if IBus support is enabled')

185 186 187 188 189 190 191 192 193 194 195
# wayland
enable_wayland = get_option('wayland')
if enable_wayland
  wayland_deps = [
    dependency('gdk-wayland-3.0'),
    dependency('gudev-1.0')
  ]
endif
config_h.set('HAVE_WAYLAND', enable_wayland,
             description: 'Define to 1 if Wayland is enabled')

196 197 198 199 200
# thunderbolt
config_h.set10('HAVE_FN_EXPLICIT_BZERO',
               cc.has_function('explicit_bzero', prefix: '''#include <string.h>'''),
               description: 'Define if explicit_bzero is available')

201
if host_is_linux
202
  # network manager
203
  network_manager_deps = [
204 205
    dependency('libnm', version: '>= 1.10.0'),
    dependency('libnma', version: '>= 1.8.0'),
206 207
    dependency('mm-glib', version: '>= 0.7')
  ]
208 209 210 211 212 213 214 215 216
endif
config_h.set('BUILD_NETWORK', host_is_linux,
             description: 'Define to 1 to build the Network panel')
config_h.set('HAVE_NETWORK_MANAGER', host_is_linux,
             description: 'Define to 1 if NetworkManager is available')

if host_is_linux_not_s390
  # gnome-bluetooth
  gnome_bluetooth_dep = dependency('gnome-bluetooth-1.0', version: '>= 3.18.2')
217

218 219
  libwacom_dep = dependency('libwacom', version: '>= 0.7')

220
  wacom_deps = [
221
    libwacom_dep,
222
  ]
223 224
  config_h.set('HAVE_WACOM_3D_STYLUS', libwacom_dep.version().version_compare('>= 0.27'),
               description: 'Define to 1 if libwacom provides definition for 3D styli')
225 226
else
  message('Bluetooth and Wacom panels will not be built (no USB support on this platform)')
227
  message('Thunderbolt panel will not be built (not supported on this platform)')
228
endif
229
config_h.set('BUILD_BLUETOOTH', host_is_linux_not_s390,
230
             description: 'Define to 1 to build the Bluetooth panel')
231
config_h.set('HAVE_BLUETOOTH', host_is_linux_not_s390,
232
             description: 'Define to 1 if bluetooth support is available')
233
config_h.set('BUILD_WACOM', host_is_linux_not_s390,
234
             description: 'Define to 1 to build the Wacom panel')
235
config_h.set('HAVE_WACOM', host_is_linux_not_s390,
236
             description: 'Define to 1 if Wacom is supportted')
237 238
config_h.set('BUILD_THUNDERBOLT', host_is_linux_not_s390,
             description: 'Define to 1 to build the Thunderbolt panel')
239 240 241 242 243 244 245 246 247 248 249 250 251 252 253

# Check for info panel
gnome_session_libexecdir = get_option('gnome_session_libexecdir')
if gnome_session_libexecdir == ''
  gnome_session_libexecdir = control_center_libexecdir
endif

gnome = import('gnome')
i18n = import('i18n')
pkg = import('pkgconfig')

desktop_conf = configuration_data()
desktop_conf.set('VERSION', meson.project_version())

po_dir = join_paths(meson.source_root(), 'po')
254
its_dir = join_paths(meson.source_root(), 'gettext')
255

256 257 258 259
install_subdir(
  'gettext',
  install_dir: control_center_datadir
)
260 261 262 263

top_inc = include_directories('.')
shell_inc = include_directories('shell')

264
subdir('build-aux')
265 266 267 268 269
subdir('data/icons')
subdir('po')
subdir('panels')
subdir('shell')
subdir('search-provider')
270 271
subdir('tests')

272 273 274 275 276 277 278 279 280
if get_option('documentation')
  subdir('man')
endif

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

281 282 283 284 285 286 287
output = ''
output += '\n        ' + meson.project_name() + ' - ' + meson.project_version() + '\n'
output += '    ===================================\n'
output += ' Options \n'
output += '     Documentation .............................. ' + get_option('documentation').to_string() + '\n'
output += '     Tracing .................................... ' + enable_tracing.to_string() + '\n'
output += '     gnome-session libexecdir ................... ' + gnome_session_libexecdir + '\n'
288
output += '     Optimized .................................. ' + control_center_optimized.to_string() + '\n'
289 290 291 292 293 294 295
output += ' Panels \n'
output += '     GNOME Bluetooth (Bluetooth panel) .......... ' + host_is_linux_not_s390.to_string() + '\n'
output += '     Cheese (Users panel webcam support) ........ ' + enable_cheese.to_string() + '\n'
output += '     IBus (Region panel IBus support) ........... ' + enable_ibus.to_string() + '\n'
output += '     NetworkManager (Network panel) ............. ' + host_is_linux.to_string() + '\n'
output += '     Wacom (Wacom tablet panel) ................. ' + host_is_linux_not_s390.to_string() + '\n'
output += '     Wayland .................................... ' + enable_wayland.to_string() + '\n'
296

297
message(output)