Skip to content

Commit

Permalink
Build with meson and add CI
Browse files Browse the repository at this point in the history
  • Loading branch information
3v1n0 committed Jan 31, 2019
1 parent a1bedfa commit 593f260
Show file tree
Hide file tree
Showing 11 changed files with 281 additions and 1 deletion.
42 changes: 42 additions & 0 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
@@ -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 changes: 4 additions & 0 deletions config.h.meson
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/* config.h.meson */

/* Version number of package */
#mesondefine VERSION
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -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])

Expand Down
27 changes: 27 additions & 0 deletions docs/meson.build
Original file line number Diff line number Diff line change
@@ -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
10 changes: 10 additions & 0 deletions docs/reference/meson.build
Original file line number Diff line number Diff line change
@@ -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 changes: 6 additions & 0 deletions libnotify/libnotify.map
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
global:
notify_*;
local:
*;
};
84 changes: 84 additions & 0 deletions libnotify/meson.build
Original file line number Diff line number Diff line change
@@ -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: '@[email protected]'.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@/@[email protected]'.format(meson.project_name(), LIBNAME),
install: true
)
endif

install_headers(headers, subdir: libnotify_includedir)
56 changes: 56 additions & 0 deletions meson.build
Original file line number Diff line number Diff line change
@@ -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 changes: 16 additions & 0 deletions meson_options.txt
Original file line number Diff line number Diff line change
@@ -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 changes: 28 additions & 0 deletions tests/meson.build
Original file line number Diff line number Diff line change
@@ -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 changes: 7 additions & 0 deletions tools/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
progs = ['notify-send']

foreach prog: progs
executable(prog, [prog + '.c'],
dependencies: libnotify_dep,
install: true)
endforeach

0 comments on commit 593f260

Please sign in to comment.