Build with meson and add CI

This commit is contained in:
Marco Trevisan 2019-01-31 17:15:27 +00:00
parent a1bedfa65e
commit 593f260722
11 changed files with 281 additions and 1 deletions

42
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,42 @@
stages:
- build
.base_build_template: &base_build
stage: build
image: ubuntu:devel
.ubuntu_deps_install_template: &ubuntu_deps_install
apt-get update &&
apt-get install -q -y --no-install-recommends
gobject-introspection
gtk-doc-tools
libgdk-pixbuf2.0-dev
libgirepository1.0-dev
libglib2.0-dev
libgtk-3-dev
libpopt-dev
xmlto
build:ubuntu:autogen:
<<: *base_build
before_script:
- *ubuntu_deps_install
- apt-get install -q -y --no-install-recommends
gnome-common
script:
- ./autogen.sh --enable-gtk-doc=yes
- make
- make distcheck
build:ubuntu:meson:
<<: *base_build
before_script:
- *ubuntu_deps_install
- apt-get install -q -y --no-install-recommends
ninja-build
python3-pip
python3-setuptools
- pip3 install meson
script:
- meson _build -Dgtk_doc=true -Ddocbook_docs=enabled -Dtests=true
- ninja -C _build

4
config.h.meson Normal file
View File

@ -0,0 +1,4 @@
/* config.h.meson */
/* Version number of package */
#mesondefine VERSION

View File

@ -5,7 +5,7 @@ dnl # Initialize autoconf
dnl ################################################################
AC_INIT([libnotify],
[0.7.7],
[https://bugzilla.gnome.org/enter_bug.cgi?product=libnotify],
[https://gitlab.gnome.org/GNOME/libnotify/issues],
[libnotify])
AC_PREREQ([2.63])

27
docs/meson.build Normal file
View File

@ -0,0 +1,27 @@
docbook_docs = get_option('docbook_docs')
if not docbook_docs.disabled()
xmlto = find_program('xmlto', required: docbook_docs.enabled())
if xmlto.found()
spec_files = ['notification-spec']
foreach spec: spec_files
custom_target(spec + '.html',
output: spec + '.html',
input: spec + '.xml',
depend_files: 'config.xsl',
command: [xmlto,
'xhtml-nochunks',
'-m', join_paths(meson.current_source_dir(), 'config.xsl'),
'-o', '@OUTDIR@',
'@INPUT@'
],
install: true,
install_dir: join_paths(docdir, 'spec'))
endforeach
endif
endif
if get_option('gtk_doc')
subdir('reference')
endif

View File

@ -0,0 +1,10 @@
gnome.gtkdoc(meson.project_name(),
mode: 'sgml',
main_sgml: meson.project_name() + '-docs.sgml',
src_dir: join_paths(meson.source_root(), meson.project_name()),
dependencies: libnotify_dep,
gobject_typesfile: meson.project_name() + '.types',
ignore_headers: ['notify-enum-types.h', 'notify-marshal.h', 'internal.h'],
scan_args: [ '--deprecated-guards=LIBNOTIFY_DISABLE_DEPRECATED' ],
install: true,
)

6
libnotify/libnotify.map Normal file
View File

@ -0,0 +1,6 @@
{
global:
notify_*;
local:
*;
};

84
libnotify/meson.build Normal file
View File

@ -0,0 +1,84 @@
libnotify_includedir = join_paths(includedir, meson.project_name())
headers = [
'notify.h',
'notification.h',
]
sources = [
'notify.c',
'notification.c',
]
features_data = configuration_data()
features_data.set('LIBNOTIFY_MAJOR_VERSION', VERSION_ARRAY[0])
features_data.set('LIBNOTIFY_MINOR_VERSION', VERSION_ARRAY[1])
features_data.set('LIBNOTIFY_MICRO_VERSION', VERSION_ARRAY[2])
headers += configure_file(
input: 'notify-features.h.in',
output: 'notify-features.h',
configuration: features_data)
enum_types = gnome.mkenums_simple('@0@-enum-types'.format(LIBNAME),
sources : headers,
install_header: true,
install_dir: libnotify_includedir
)
marshal = gnome.genmarshal('@0@-marshal'.format(LIBNAME),
prefix: '@0@_marshal'.format(LIBNAME),
sources: '@0@-marshal.list'.format(LIBNAME),
)
libnotify_cflags = [
'-DG_LOG_DOMAIN="libnotify"',
]
mapfile = meson.project_name() + '.map'
libnotify_ldflags = [
'-Wl,--version-script,'+join_paths(meson.current_source_dir(), mapfile),
]
notify_dep = declare_dependency(
include_directories: default_includes,
dependencies: libnotify_deps,
compile_args: libnotify_cflags,
sources: headers + [enum_types[1]] + [marshal[1]],
link_args: libnotify_ldflags,
)
libnotify_lib = shared_library(LIBNAME,
dependencies: notify_dep,
sources: sources + enum_types + marshal,
version: '@0@.@1@.@2@'.format(LT_CURRENT, LT_REVISION, LT_AGE),
soversion: LT_CURRENT,
install: true,
)
libnotify_dep = declare_dependency(
dependencies: notify_dep,
link_with: libnotify_lib
)
pkgconfig.generate(libnotify_lib,
name: meson.project_name(),
libraries: libnotify_deps,
description: 'Notifications Library',
)
introspection = get_option('introspection')
if not introspection.disabled()
find_program('g-ir-scanner', required: introspection.enabled())
gnome.generate_gir(libnotify_lib,
sources: headers + sources + enum_types,
namespace: 'Notify',
nsversion: MODULE_VERSION,
export_packages: meson.project_name(),
includes: ['GLib-2.0', 'GdkPixbuf-2.0'],
extra_args: '--c-include=@0@/@1@.h'.format(meson.project_name(), LIBNAME),
install: true
)
endif
install_headers(headers, subdir: libnotify_includedir)

56
meson.build Normal file
View File

@ -0,0 +1,56 @@
project('libnotify',
'c',
version: '0.7.7',
meson_version: '>= 0.47.0')
gnome = import('gnome')
pkgconfig = import('pkgconfig')
################################################################
# libtool versioning
################################################################
#
# +1 : 0 : +1 == new interface that does not break old one.
# +1 : 0 : 0 == removed an interface. Breaks old apps.
# ? : +1 : ? == internal changes that doesn't break anything.
#
# CURRENT : REVISION : AGE
#
LT_CURRENT=4
LT_REVISION=0
LT_AGE=0
VERSION_ARRAY = meson.project_version().split('.')
MODULE_VERSION = '@0@.@1@'.format(VERSION_ARRAY[0], VERSION_ARRAY[1])
LIBNAME = meson.project_name().split('lib')[1]
default_includes = include_directories('.')
prefix = get_option('prefix')
includedir = join_paths(prefix, get_option('includedir'))
docdir = join_paths(prefix, get_option('datadir'), 'doc', meson.project_name())
libnotify_deps = []
extra_deps = []
gdk_pixbuf_dep = dependency('gdk-pixbuf-2.0')
glib_dep = dependency('glib-2.0', version: '>= 2.26.0')
gio_dep = dependency('gio-2.0', version: glib_dep.version())
gtk_dep = dependency('gtk+-3.0', version: '>= 2.90', required: get_option('tests'))
libnotify_deps = [gdk_pixbuf_dep, gio_dep, glib_dep]
tests_deps = [gtk_dep]
conf = configuration_data()
conf.set_quoted('VERSION', meson.project_version())
configure_file(input: 'config.h.meson',
output : 'config.h',
configuration : conf)
subdir('libnotify')
subdir('tools')
subdir('docs')
if get_option('tests')
subdir('tests')
endif

16
meson_options.txt Normal file
View File

@ -0,0 +1,16 @@
option('tests',
type: 'boolean',
value: true,
description: 'Build tests')
option('introspection',
type: 'feature',
value: 'enabled',
description: 'Enable GObject introspection')
option('gtk_doc',
type: 'boolean',
value: true,
description: 'Enable generating the API reference (depends on GTK-Doc)')
option('docbook_docs',
type: 'feature',
value: 'auto',
description: 'Build DocBook documentation (requires xmlto)')

28
tests/meson.build Normal file
View File

@ -0,0 +1,28 @@
test_progs = [
'replace',
'replace-widget',
'server-info',
'default-action',
'multi-actions',
'action-icons',
'image',
'basic',
'error',
'markup',
'persistence',
'removal',
'resident',
'rtl',
'size-changes',
'transient',
'urgency',
'xy',
'xy-actions',
'xy-stress',
]
foreach tprog: test_progs
executable('test-' + tprog, ['test-' + tprog + '.c'],
dependencies: [libnotify_dep, tests_deps],
)
endforeach

7
tools/meson.build Normal file
View File

@ -0,0 +1,7 @@
progs = ['notify-send']
foreach prog: progs
executable(prog, [prog + '.c'],
dependencies: libnotify_dep,
install: true)
endforeach