Commit 92b1faa1 authored by Iñigo Martínez's avatar Iñigo Martínez

build: Port to meson build system

https://bugzilla.gnome.org/show_bug.cgi?id=785737
parent 7cd3120b
......@@ -2,7 +2,8 @@ SUBDIRS = icons lib sendto docs po
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
EXTRA_DIST = intltool-extract.in intltool-update.in intltool-merge.in ChangeLog.pre-2.27 gtk-doc.make
EXTRA_DIST = intltool-extract.in intltool-update.in intltool-merge.in ChangeLog.pre-2.27 gtk-doc.make \
meson.build meson_options.txt meson_post_install.py po/meson.build
AM_DISTCHECK_CONFIGURE_FLAGS = --disable-schemas-install \
--disable-desktop-update --disable-mime-update --disable-icon-update \
......
......@@ -90,7 +90,7 @@ include $(top_srcdir)/gtk-doc.make
# Other files to distribute
# e.g. EXTRA_DIST += version.xml.in
EXTRA_DIST += version.xml.in
EXTRA_DIST += version.xml.in meson.build
# Files not to distribute
# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
......
private_headers = [
'bluetooth-agent.h',
'bluetooth-chooser-private.h',
'bluetooth-client-glue.h',
'bluetooth-client-private.h',
'bluetooth-fdo-glue.h',
'bluetooth-settings-obexpush.h',
'bluetooth-settings-row.h',
'gnome-bluetooth-enum-types.h'
]
version_conf = configuration_data()
version_conf.set('VERSION', gnomebt_version)
version_xml = 'version.xml'
configure_file(
input: version_xml + '.in',
output: version_xml,
configuration: version_conf
)
doc_path = join_paths(gnomebt_datadir, 'gtk-doc', 'html', meson.project_name())
gnome.gtkdoc(
meson.project_name(),
main_sgml: meson.project_name() + '-docs.sgml',
src_dir: [
top_inc,
lib_inc
],
dependencies: libgnome_bluetooth_dep,
scan_args: [
'--rebuild-types',
'--ignore-headers=' + ' '.join(private_headers),
],
mkdb_args: [
'--sgml-mode',
'--output-format=xml'
],
gobject_typesfile: meson.project_name() + '.types',
install: true,
install_dir: doc_path
)
......@@ -34,7 +34,7 @@ noinst_DATA = hicolor_apps_16x16_bluetooth.svg \
hicolor_status_32x32_bluetooth-disabled.svg \
hicolor_status_48x48_bluetooth-disabled.svg
EXTRA_DIST = $(icons) $(noinst_DATA)
EXTRA_DIST = $(icons) $(noinst_DATA) meson.build
MAINTAINERCLEANFILES = Makefile.in
......
icons_files = [
['apps', 'bluetooth.png'],
['status', 'bluetooth-active.png'],
['status', 'bluetooth-disabled.png'],
['status', 'bluetooth-paired.png']
]
icons_48x48_files = [
['apps', 'bluetooth.png'],
['status', 'bluetooth-active.png'],
['status', 'bluetooth-disabled.png']
]
icons_scalable_files = [
['apps', 'bluetooth.svg'],
['status', 'bluetooth-paired.svg']
]
icons = [
['16x16', icons_files],
['22x22', icons_files],
['24x24', icons_files],
['32x32', icons_files],
['48x48', icons_48x48_files],
['scalable', icons_scalable_files]
]
foreach icon: icons
foreach icon_file: icon[1]
install_data(
'_'.join(['hicolor', icon_file[0], icon[0], icon_file[1]]),
install_dir: join_paths(gnomebt_icondir, icon[0], icon_file[0])
)
endforeach
endforeach
......@@ -10,7 +10,9 @@ bluetooth-settings-resources.c: bluetooth.gresource.xml $(resource_files)
bluetooth-settings-resources.h: bluetooth.gresource.xml $(resource_files)
$(AM_V_GEN) glib-compile-resources --target=$@ --sourcedir=$(srcdir) --generate-header --c-name bluetooth_settings $<
EXTRA_DIST += bluetooth.gresource.xml settings.ui bluetooth-pairing-dialog.ui bluetooth-settings-row.ui bluetooth-settings.css
EXTRA_DIST += bluetooth.gresource.xml settings.ui bluetooth-pairing-dialog.ui bluetooth-settings-row.ui bluetooth-settings.css \
meson.build
BUILT_SOURCES += bluetooth-settings-resources.c bluetooth-settings-resources.h
# will be scanned for introspection annotation, but won't be installed
......
{
global:
bluetooth_chooser_dump_selected_device;
bluetooth_chooser_get_type;
bluetooth_chooser_new;
bluetooth_chooser_set_title;
bluetooth_chooser_get_selected_device;
bluetooth_chooser_get_selected_device_info;
bluetooth_chooser_get_selected_device_name;
bluetooth_chooser_get_selected_device_icon;
bluetooth_chooser_get_selected_device_type;
bluetooth_chooser_get_selected_device_is_connected;
bluetooth_chooser_get_model;
bluetooth_chooser_get_treeview;
bluetooth_chooser_get_scrolled_window;
bluetooth_chooser_start_discovery;
bluetooth_chooser_stop_discovery;
bluetooth_chooser_button_get_type;
bluetooth_chooser_button_new;
bluetooth_chooser_button_available;
bluetooth_client_setup_device;
bluetooth_client_setup_device_finish;
bluetooth_client_dump_device;
bluetooth_client_get_type;
bluetooth_client_new;
bluetooth_client_get_model;
bluetooth_client_get_filter_model;
bluetooth_client_get_adapter_model;
bluetooth_client_get_device_model;
bluetooth_client_connect_service;
bluetooth_client_connect_service_finish;
bluetooth_client_set_trusted;
bluetooth_client_get_device;
bluetooth_class_to_type;
bluetooth_type_to_string;
bluetooth_type_to_filter_string;
bluetooth_verify_address;
bluetooth_uuid_to_string;
bluetooth_send_to_address;
bluetooth_column_get_type;
bluetooth_category_get_type;
bluetooth_type_get_type;
bluetooth_status_get_type;
bluetooth_filter_widget_new;
bluetooth_filter_widget_set_title;
bluetooth_filter_widget_get_type;
bluetooth_filter_widget_bind_filter;
bluetooth_chooser_combo_get_type;
bluetooth_chooser_combo_new;
bluetooth_agent_new;
bluetooth_agent_set_pincode_func;
bluetooth_agent_register;
bluetooth_agent_unregister;
bluetooth_agent_set_confirm_func;
bluetooth_agent_set_passkey_func;
bluetooth_agent_set_cancel_func;
bluetooth_agent_error_quark;
bluetooth_agent_set_authorize_func;
bluetooth_agent_set_display_func;
bluetooth_agent_set_display_pincode_func;
bluetooth_agent_set_authorize_service_func;
bluetooth_agent_setup;
bluetooth_settings_widget_get_type;
bluetooth_settings_widget_new;
bluetooth_settings_widget_get_default_adapter_powered;
bluetooth_pairing_dialog_new;
bluetooth_pairing_dialog_get_type;
bluetooth_pairing_dialog_set_mode;
bluetooth_pairing_dialog_get_mode;
bluetooth_pairing_dialog_set_pin_entered;
local:
*;
};
lib_inc = include_directories('.')
enum_headers = files('bluetooth-enums.h')
headers = enum_headers + files(
'bluetooth-client.h',
'bluetooth-chooser.h',
'bluetooth-chooser-button.h',
'bluetooth-chooser-combo.h',
'bluetooth-filter-widget.h',
'bluetooth-settings-widget.h',
'bluetooth-utils.h'
)
install_headers(
headers,
subdir: meson.project_name()
)
sources = files(
'bluetooth-agent.c',
'bluetooth-chooser.c',
'bluetooth-chooser-button.c',
'bluetooth-chooser-combo.c',
'bluetooth-client.c',
'bluetooth-filter-widget.c',
'bluetooth-pairing-dialog.c',
'bluetooth-settings-obexpush.c',
'bluetooth-settings-row.c',
'bluetooth-settings-widget.c',
'bluetooth-utils.c',
'pin.c'
)
built_sources = []
resource_data = files(
'bluetooth-pairing-dialog.ui',
'bluetooth-settings.css',
'bluetooth-settings-row.ui',
'settings.ui'
)
built_sources += gnome.compile_resources(
'bluetooth-settings-resources',
'bluetooth.gresource.xml',
source_dir: '.',
c_name: 'bluetooth_settings',
dependencies: resource_data,
export: true
)
enum_types = 'gnome-bluetooth-enum-types'
built_sources += gnome.mkenums(
enum_types + '.c',
sources: enum_headers,
fhead: '#include <bluetooth-enums.h>\n#include "gnome-bluetooth-enum-types.h"\n#include <glib-object.h>',
fprod: '\n/* enumerations from "@filename@" */',
vhead: 'GType\n@enum_name@_get_type (void)\n{\n static GType etype = 0;\n if (etype == 0) {\n static const G@Type@Value values[] = {',
vprod: ' { @VALUENAME@, "@VALUENAME@", "@valuenick@" },',
vtail: ' { 0, NULL, NULL }\n };\n etype = g_@type@_register_static ("@EnumName@", values);\n }\n return etype;\n}\n'
)
built_sources += gnome.mkenums(
enum_types + '.h',
sources: enum_headers,
fhead: '#ifndef __GNOME_BLUETOOTH_ENUM_TYPES_H__\n#define __GNOME_BLUETOOTH_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n',
fprod: '/* enumerations from "@filename@" */\n',
vhead: 'GType @enum_name@_get_type (void);\n#define BLUETOOTH_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n',
ftail: 'G_END_DECLS\n\n#endif /* __GNOME_BLUETOOTH_ENUM_TYPES_H__ */'
)
client = 'bluetooth-client'
built_sources += gnome.gdbus_codegen(
client + '-glue',
client + '.xml',
interface_prefix: 'org.bluez'
)
fdo = 'bluetooth-fdo'
built_sources += gnome.gdbus_codegen(
fdo + '-glue',
fdo + '.xml',
interface_prefix: 'org.freedesktop.DBus'
)
deps = [
gtk_dep,
m_dep,
dependency('gio-unix-2.0'),
dependency('gmodule-2.0'),
dependency('libcanberra-gtk3'),
dependency('libnotify', version: '>= 0.7.0'),
dependency('libudev')
]
cflags = [
'-DPKGDATADIR="@0@"'.format(gnomebt_pkgdatadir),
'-DG_LOG_DOMAIN="Bluetooth"'
]
symbol_map = meson.project_name() + '.map'
ldflag = '-Wl,--version-script,@0@/@1@'.format(meson.current_source_dir(), symbol_map)
ldflags = []
if host_machine.system().contains('linux') and cc.has_argument(ldflag)
ldflags += ldflag
endif
libgnome_bluetooth = shared_library(
meson.project_name(),
sources: sources + built_sources,
version: libversion,
include_directories: top_inc,
dependencies: deps,
c_args: cflags,
link_args: ldflags,
link_depends: symbol_map,
install: true,
install_dir: gnomebt_libdir
)
libgnome_bluetooth_dep = declare_dependency(
link_with: libgnome_bluetooth,
include_directories: lib_inc,
dependencies: deps
)
pkg.generate(
libraries: libgnome_bluetooth,
version: gnomebt_version,
name: gnomebt_api_name,
description: 'Widgets for Bluetooth device selection',
filebase: gnomebt_api_name,
subdirs: meson.project_name(),
requires: [
'gio-2.0',
'gtk+-3.0'
],
requires_private: 'libudev',
variables: 'exec_prefix=' + gnomebt_libexecdir,
install_dir: join_paths(gnomebt_libdir, 'pkgconfig')
)
if enable_gir
gir_sources = sources + headers
gir_incs = [
'GModule-2.0',
'GObject-2.0',
'Gtk-3.0'
]
gir_extra_args = '--warn-all'
gir_dir = join_paths(gnomebt_datadir, 'gir-' + gnomebt_gir_version)
typelib_dir = join_paths(gnomebt_libdir, 'girepository-' + gnomebt_gir_version)
gnome.generate_gir(
libgnome_bluetooth,
sources: gir_sources,
nsversion: gnomebt_api_version,
namespace: gnomebt_gir_ns,
symbol_prefix: 'bluetooth',
identifier_prefix: 'Bluetooth',
export_packages: gnomebt_api_name,
includes: gir_incs,
extra_args: gir_extra_args,
install: true,
install_dir_gir: gir_dir,
install_dir_typelib: typelib_dir,
)
endif
test_names = [
'test-agent',
'test-class',
'test-client',
'test-deviceselection',
'test-pairing-dialog',
'test-pin',
'test-settings'
]
foreach name: test_names
executable(
name,
[name + '.c'] + built_sources,
include_directories: top_inc,
dependencies: deps,
c_args: cflags,
link_with: libgnome_bluetooth
)
endforeach
database = 'pin-code-database.xml'
install_data(
database,
install_dir: gnomebt_pkgdatadir
)
custom_target(
database,
input: database,
output: database + '.valid',
command: [find_program('xmllint'), '--output', '@OUTPUT@', '--valid', '@INPUT']
)
project(
'gnome-bluetooth', 'c',
version: '3.20.1',
license: 'GPL2+',
default_options: [
'buildtype=debugoptimized',
'warning_level=1'
],
meson_version: '>= 0.41.0'
)
gnomebt_version = meson.project_version()
version_array = gnomebt_version.split('.')
gnomebt_major_version = version_array[0].to_int()
gnomebt_minor_version = version_array[1].to_int()
gnomebt_micro_version = version_array[2].to_int()
gnomebt_api_version = '1.0'
gnomebt_api_name = '@0@-@1@'.format(meson.project_name(), gnomebt_api_version)
gnomebt_gir_ns = 'GnomeBluetooth'
gnomebt_gir_version = '1.0'
gnomebt_gettext_package = meson.project_name() + '2'
gnomebt_prefix = get_option('prefix')
gnomebt_bindir = join_paths(gnomebt_prefix, get_option('bindir'))
gnomebt_datadir = join_paths(gnomebt_prefix, get_option('datadir'))
gnomebt_includedir = join_paths(gnomebt_prefix, get_option('includedir'))
gnomebt_libdir = join_paths(gnomebt_prefix, get_option('libdir'))
gnomebt_libexecdir = join_paths(gnomebt_prefix, get_option('libexecdir'))
gnomebt_localedir = join_paths(gnomebt_prefix, get_option('localedir'))
gnomebt_mandir = join_paths(gnomebt_prefix, get_option('mandir'))
gnomebt_pkgdatadir = join_paths(gnomebt_datadir, meson.project_name())
gnomebt_pkglibdir = join_paths(gnomebt_libdir, meson.project_name())
gnomebt_icondir = join_paths(gnomebt_datadir, 'icons', 'hicolor')
gnomebt_buildtype = get_option('buildtype')
gnomebt_debug = gnomebt_buildtype.contains('debug')
# options
enable_gtk_doc = get_option('enable-gtk-doc')
enable_gir = get_option('enable-introspection')
# Before making a release, the GNOMEBT_LT_VERSION string should be modified.
# The string is of the form C:R:A.
# - If interfaces have been changed or added, but binary compatibility has
# been preserved, change to C+1:0:A+1
# - If binary compatibility has been broken (eg removed or changed interfaces)
# change to C+1:0:0
# - If the interface is the same as the previous version, change to C:R+1:A
current = 13
revision = 1
age = 0
libversion = '@0@.@1@.@2@'.format(current, age, revision)
cc = meson.get_compiler('c')
config_h = configuration_data()
# defines
set_defines = [
# package
['PACKAGE', meson.project_name()],
['PACKAGE_BUGREPORT', 'http://bugzilla.gnome.org/enter_bug.cgi?product=' + meson.project_name()],
['PACKAGE_NAME', meson.project_name()],
['PACKAGE_STRING', '@0@ @1@'.format(meson.project_name(), gnomebt_version)],
['PACKAGE_TARNAME', meson.project_name()],
['PACKAGE_URL', ''],
['PACKAGE_VERSION', gnomebt_version],
['VERSION', gnomebt_version],
# i18n
['GETTEXT_PACKAGE', gnomebt_gettext_package],
['LOCALEDIR', gnomebt_localedir]
]
foreach define: set_defines
config_h.set_quoted(define[0], define[1])
endforeach
# debug
config_h.set('NDEBUG', not gnomebt_debug)
config_h.set('GNOME_ENABLE_DEBUG', gnomebt_debug)
# headers
check_headers = [
['HAVE_DLFCN_H', 'dlfcn.h'],
['HAVE_INTTYPES_H', 'inttypes.h'],
['HAVE_MEMORY_H', 'memory.h'],
['HAVE_STDINT_H', 'stdint.h'],
['HAVE_STDLIB_H', 'stdlib.h'],
['HAVE_STRINGS_H', 'strings.h'],
['HAVE_STRING_H', 'string.h'],
['HAVE_SYS_STAT_H', 'sys/stat.h'],
['HAVE_SYS_TYPES_H', 'sys/types.h'],
['HAVE_UNISTD_H', 'unistd.h']
]
foreach header: check_headers
config_h.set(header[0], cc.has_header(header[1]))
endforeach
# compiler flags
common_flags = [
'-DHAVE_CONFIG_H',
'-DBONOBO_DISABLE_DEPRECATED',
'-DBONOBO_DISABLE_SINGLE_INCLUDES',
'-DBONOBO_UI_DISABLE_DEPRECATED',
'-DBONOBO_UI_DISABLE_SINGLE_INCLUDES',
'-DGCONF_DISABLE_DEPRECATED',
'-DGCONF_DISABLE_SINGLE_INCLUDES',
'-DGNOME_DISABLE_DEPRECATED',
'-DGNOME_DISABLE_SINGLE_INCLUDES',
'-DGNOME_VFS_DISABLE_DEPRECATED',
'-DGNOME_VFS_DISABLE_SINGLE_INCLUDES',
'-DLIBGLADE_DISABLE_DEPRECATED',
'-DLIBGLADE_DISABLE_SINGLE_INCLUDES',
'-DLIBSOUP_DISABLE_DEPRECATED',
'-DLIBSOUP_DISABLE_SINGLE_INCLUDES',
'-DWNCK_DISABLE_DEPRECATED',
'-DWNCK_DISABLE_SINGLE_INCLUDES'
]
compiler_flags = []
if gnomebt_debug
test_flags = [
'-Werror=format=2',
'-Werror=implicit-function-declaration',
'-Werror=init-self',
'-Werror=missing-prototypes',
'-Werror=missing-include-dirs',
'-Werror=pointer-arith',
'-Werror=return-type',
'-Wnested-externs',
'-Wstrict-prototypes'
]
foreach flag: test_flags
if cc.has_argument(flag)
compiler_flags += [flag]
endif
endforeach
endif
add_project_arguments(common_flags + compiler_flags, language: 'c')
gtk_dep = dependency('gtk+-3.0', version: '>= 3.12.0')
m_dep = cc.find_library('m')
config_h.set('HAVE_LIBM', m_dep.found() and cc.has_function('sin', dependencies: m_dep))
configure_file(
output: 'config.h',
configuration: config_h
)
gnome = import('gnome')
i18n = import('i18n')
pkg = import('pkgconfig')
po_dir = join_paths(meson.source_root(), 'po')
intltool_merge = find_program('intltool-merge')
intltool_cache = join_paths(po_dir, '.intltool-merge-cache')
top_inc = include_directories('.')
subdir('icons')
subdir('lib')
subdir('sendto')
if enable_gtk_doc
subdir('docs/reference/libgnome-bluetooth')
endif
subdir('po')
meson.add_install_script('meson_post_install.py', get_option('enable-icon-update') ? 'icon-update' : '')
output = '\nConfigure summary:\n\n'
output += ' Compiler....................: ' + cc.get_id() + '\n\n'
output += ' Compiler Flags..............: ' + ' '.join(compiler_flags) + '\n'
output += ' Prefix......................: ' + gnomebt_prefix + '\n'
output += ' Documentation...............: ' + enable_gtk_doc.to_string() + '\n'
output += ' GObject-Introspection.......: ' + enable_gir.to_string()
message(output)
option('enable-icon-update', type: 'boolean', value: true, description: 'Enable icon cache update')
option('enable-gtk-doc', type: 'boolean', value: false, description: 'use gtk-doc to build documentation')
option('enable-introspection', type: 'boolean', value: true, description: 'Enable GObject Introspection (depends on GObject)')
#!/usr/bin/env python3
import glob
import os
import re
import subprocess
import sys
name_pattern = re.compile('hicolor_(?:apps|status)_(?:\d+x\d+|scalable)_(.*)')
search_pattern = '/**/hicolor_*'
icon_dir = os.path.join(os.environ['MESON_INSTALL_PREFIX'], 'share', 'icons', 'hicolor')
[os.rename(file, os.path.join(os.path.dirname(file), name_pattern.search(file).group(1)))
for file in glob.glob(icon_dir + search_pattern, recursive=True)]
if not os.environ.get('DESTDIR') and sys.argv[1] == 'icon-update':
print('Update icon cache...')
subprocess.call(['gtk-update-icon-cache', '-f', '-t', icon_dir])
i18n.gettext(gnomebt_gettext_package, preset: 'glib')
......@@ -24,7 +24,7 @@ desktop_in_files = bluetooth-sendto.desktop.in
desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
@INTLTOOL_DESKTOP_RULE@
EXTRA_DIST = $(man_MANS) $(desktop_in_in_files)
EXTRA_DIST = $(man_MANS) $(desktop_in_in_files) meson.build
DISTCLEANFILES = bluetooth-sendto.desktop
MAINTAINERCLEANFILES = Makefile.in
name = 'bluetooth-sendto'
deps = [
gtk_dep,
dependency('gio-2.0')
]
cflags = [
'-DDATADIR="@0@"'.format(gnomebt_datadir),
'-DICONDIR="@0@"'.format(gnomebt_icondir),
'-DLOCALEDIR="@0@"'.format(gnomebt_localedir)
]
executable(
name,
'main.c',
include_directories: [
top_inc,
lib_inc
],
dependencies: deps,
c_args: cflags,
link_with: libgnome_bluetooth,
install: true,
install_dir: gnomebt_bindir
)
install_man(
name + '.1',
install_dir: join_paths(gnomebt_mandir, 'man1')
)
desktop_conf = configuration_data()
desktop_conf.set('VERSION', gnomebt_version)
desktop_name = name + '.desktop'
desktop_in = configure_file(
input: desktop_name + '.in.in',
output: desktop_name + '.in',
configuration: desktop_conf
)