Commit b19c3090 authored by Niels De Graef's avatar Niels De Graef

Add build support for Meson

To build with meson, use the following commands:

```
$ meson build
$ ninja -C build
 # in case you want to install
$ ninja -C build install
```
parent be0a1263
Pipeline #52300 passed with stages
in 7 minutes and 25 seconds
secret_tool_man = custom_target('secret-tool.1',
input: 'secret-tool.xml',
output: 'secret-tool.1',
command: [ find_program('xsltproc'),
'-o', '@OUTPUT@',
'--nonet',
'--stringparam', 'man.output.quietly', '1',
'--stringparam', 'man.funcsynopsis.style', 'ansi',
'--stringparam', 'man.th.extra1.suppress', '1',
'--stringparam', 'man.authors.section.enabled', '0',
'--stringparam', 'man.copyright.section.enabled', '0',
'http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl',
'@INPUT@',
],
build_by_default: true,
install: true,
install_dir: join_paths(libsecret_prefix, get_option('mandir'), 'man1'),
)
subdir('man')
if with_gtkdoc
subdir('reference/libsecret')
endif
reference_content_files = [
'libsecret-examples.sgml',
'libsecret-using.sgml',
'migrating-libgnome-keyring.xml',
]
# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
reference_expanded_content_files = [
'migrating-libgnome-keyring.xml',
]
reference_ignore_headers = [
'mock-service.h',
'secret-dbus-generated.h',
'secret-private.h',
]
version_conf = configuration_data()
version_conf.set('VERSION', meson.project_version())
configure_file(
input: 'version.xml.in',
output: 'version.xml',
configuration: version_conf,
)
gnome.gtkdoc('libsecret',
main_sgml: 'libsecret-docs.sgml',
content_files: reference_content_files,
src_dir: include_directories('../../../libsecret'),
dependencies: libsecret_dep,
gobject_typesfile: 'libsecret.types',
mkdb_args: '--expand-content-files=' + ' '.join(reference_expanded_content_files),
scan_args: [
'--deprecated-guards=SECRET_DISABLE_DEPRECATED',
'--rebuild-types',
'--ignore-headers=' + ' '.join(reference_ignore_headers),
],
module_version: api_version_major,
)
......@@ -23,6 +23,7 @@
#ifndef EGG_SECURE_MEMORY_H
#define EGG_SECURE_MEMORY_H
#include <glib.h>
#include <stdlib.h>
/* -------------------------------------------------------------------
......
libegg_sources = [
'egg-hex.c',
'egg-secure-memory.c',
'egg-testing.c',
]
if with_gcrypt
libegg_sources += [
'egg-dh.c',
'egg-hkdf.c',
'egg-libgcrypt.c',
]
endif
libegg_deps = [
glib_deps,
gcrypt_dep,
]
libegg = static_library('egg',
libegg_sources,
dependencies: libegg_deps,
include_directories: config_h_dir,
)
installed_headers_subdir = join_paths('libsecret-@0@'.format(api_version_major), 'libsecret')
libsecret_sources = [
'secret-attributes.c',
'secret-collection.c',
'secret-item.c',
'secret-methods.c',
'secret-password.c',
'secret-prompt.c',
'secret-schema.c',
'secret-schemas.c',
'secret-service.c',
'secret-value.c',
'secret-paths.c',
'secret-session.c',
'secret-util.c',
]
libsecret_headers = [
'secret.h',
'secret-attributes.h',
'secret-collection.h',
'secret-item.h',
'secret-password.h',
'secret-paths.h',
'secret-prompt.h',
'secret-schema.h',
'secret-schemas.h',
'secret-service.h',
'secret-types.h',
'secret-value.h',
]
_dbus_generated = gnome.gdbus_codegen('secret-dbus-generated',
sources: 'org.freedesktop.Secrets.xml',
interface_prefix: 'org.freedesktop.Secret.',
namespace: '_SecretGen',
)
_enums_generated = gnome.mkenums('secret-enum-types',
sources: libsecret_headers,
c_template: 'secret-enum-types.c.template',
h_template: 'secret-enum-types.h.template',
install_header: true,
install_dir: join_paths(includedir, installed_headers_subdir),
)
libsecret_dependencies = [
glib_deps,
]
if with_gcrypt
libsecret_dependencies += gcrypt_dep
endif
libsecret_cflags = [
'-DSECRET_COMPILATION',
]
libsecret = shared_library('secret-@0@'.format(api_version_major),
[ libsecret_sources, _dbus_generated, _enums_generated ],
version: libtool_version,
dependencies: libsecret_dependencies,
link_with: libegg,
c_args: libsecret_cflags,
include_directories: config_h_dir,
install: true,
)
install_headers(libsecret_headers,
subdir: installed_headers_subdir,
)
libsecret_dep = declare_dependency(
link_with: [ libsecret, libegg ],
dependencies: libsecret_dependencies,
)
# GObject Introspection
libsecret_gir_sources = [
'secret-attributes.c',
'secret-attributes.h',
'secret-collection.c',
'secret-collection.h',
'secret-item.c',
'secret-item.h',
'secret-methods.c',
'secret-password.c',
'secret-password.h',
'secret-paths.c',
'secret-paths.h',
'secret-prompt.c',
'secret-prompt.h',
'secret-schema.c',
'secret-schema.h',
'secret-schemas.c',
'secret-schemas.h',
'secret-service.c',
'secret-service.h',
'secret-types.h',
'secret-value.c',
'secret-value.h',
]
libsecret_gir = gnome.generate_gir(libsecret,
sources: libsecret_gir_sources,
namespace: 'Secret',
nsversion: api_version_major,
export_packages: 'libsecret-@0@'.format(api_version_major),
includes: [ 'GObject-2.0', 'Gio-2.0' ],
extra_args: [ '-D SECRET_COMPILATION'],
install: true,
)
# Vapi
if with_vapi
libsecret_vapi = gnome.generate_vapi('libsecret-@0@'.format(api_version_major),
sources: libsecret_gir[0],
metadata_dirs: join_paths(meson.source_root(), 'libsecret'),
packages: [ 'gobject-2.0', 'gio-2.0' ],
install: true,
)
endif
# pkg-config
pc_conf = configuration_data()
pc_conf.set('prefix', libsecret_prefix)
pc_conf.set('exec_prefix', '${prefix}')
pc_conf.set('libdir', join_paths('${prefix}', get_option('libdir')))
pc_conf.set('includedir', join_paths('${prefix}', get_option('includedir')))
pc_conf.set('datarootdir', join_paths('${prefix}', get_option('datadir')))
pc_conf.set('datadir', '${datarootdir}')
pc_conf.set('sysconfdir', join_paths('${prefix}', get_option('sysconfdir')))
pc_conf.set('SECRET_MAJOR', api_version_major)
pc_conf.set('VERSION', meson.project_version())
configure_file(
input: 'libsecret.pc.in',
output: 'libsecret-@0@.pc'.format(api_version_major),
configuration: pc_conf,
install: true,
install_dir: join_paths(libdir, 'pkgconfig'),
)
configure_file(
input: 'libsecret-unstable.pc.in',
output: 'libsecret-unstable.pc',
configuration: pc_conf,
install: true,
install_dir: join_paths(libdir, 'pkgconfig'),
)
# Tests
mock_cflags = [
libsecret_cflags,
'-DSRCDIR="@0@"'.format(meson.source_root()),
]
mock_service_lib = static_library('mock-service',
'mock-service.c',
dependencies: glib_deps,
c_args: mock_cflags,
include_directories: config_h_dir,
)
test_names = [
'test-attributes',
'test-value',
'test-prompt',
'test-service',
'test-session',
'test-paths',
'test-methods',
'test-password',
'test-item',
'test-collection',
]
foreach _test : test_names
test_bin = executable(_test,
'@0@.c'.format(_test),
dependencies: libsecret_dep,
link_with: mock_service_lib,
include_directories: config_h_dir,
c_args: libsecret_cflags,
)
test(_test, test_bin)
endforeach
project('libsecret', 'c',
version: '0.18.7',
license: 'GPL2+',
meson_version: '>= 0.48',
)
gnome = import('gnome')
i18n = import('i18n')
# API version
api_version = '1.0.0'
api_version_major = api_version.split('.')[0]
api_version_minor = api_version.split('.')[1]
api_version_micro = api_version.split('.')[2]
libtool_version = '0.0.0'
# Options
with_manpage = get_option('manpage')
with_gcrypt = get_option('gcrypt')
enable_debug = get_option('debugging')
with_vapi = get_option('vapi')
with_gtkdoc = get_option('gtk_doc')
# Some variables
config_h_dir = include_directories('.')
libsecret_prefix = get_option('prefix')
datadir = join_paths(libsecret_prefix, get_option('datadir'))
includedir = join_paths(libsecret_prefix, get_option('includedir'))
bindir = join_paths(libsecret_prefix, get_option('bindir'))
libdir = join_paths(libsecret_prefix, get_option('libdir'))
libexecdir = join_paths(libsecret_prefix, get_option('libexecdir'))
locale_dir = join_paths(libsecret_prefix, get_option('localedir'))
pkgdatadir = join_paths(datadir, meson.project_name())
pkglibdir = join_paths(libdir, meson.project_name())
sysconfdir = join_paths(libsecret_prefix, get_option('sysconfdir'))
po_dir = join_paths(meson.source_root(), 'po')
# Dependencies
min_glib_version = '2.44'
glib_deps = [
dependency('glib-2.0', version: '>=' + min_glib_version),
dependency('gio-2.0', version: '>=' + min_glib_version),
dependency('gio-unix-2.0', version: '>=' + min_glib_version),
]
if with_gcrypt
min_libgcrypt_version = '1.2.2'
libgcrypt_config = find_program('libgcrypt-config')
libgcrypt_version = run_command(libgcrypt_config, '--version').stdout().strip()
if (libgcrypt_version.version_compare('>' + libgcrypt_version))
error('@0@ requires at least gcrypt version @1@, but version found is @2@'
.format(meson.project_name(), min_libgcrypt_version, libgcrypt_version))
endif
message('gcrypt version: @0@'.format(libgcrypt_version))
gcrypt_dep = declare_dependency(
link_args: run_command(libgcrypt_config, '--libs').stdout().strip().split(),
compile_args: run_command(libgcrypt_config, '--cflags').stdout().strip().split(),
)
endif
# Libraries
math = meson.get_compiler('c').find_library('m')
# Configuration
conf = configuration_data()
conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
conf.set_quoted('G_LOG_DOMAIN', meson.project_name())
conf.set_quoted('LOCALEDIR', locale_dir)
conf.set_quoted('PACKAGE_NAME', meson.project_name())
conf.set_quoted('PACKAGE_STRING', meson.project_name())
conf.set_quoted('PACKAGE_VERSION', meson.project_version())
conf.set('WITH_GCRYPT', with_gcrypt)
if with_gcrypt
conf.set_quoted('LIBGCRYPT_VERSION', min_libgcrypt_version)
endif
conf.set('WITH_DEBUG', enable_debug)
conf.set('_DEBUG', enable_debug)
configure_file(output: 'config.h', configuration: conf)
# Subfolders
subdir('po')
subdir('egg')
subdir('libsecret')
subdir('tool')
subdir('docs')
option('manpage', type: 'boolean', value: true, description: 'Build man pages')
option('gcrypt', type: 'boolean', value: true, description: 'With gcrypt and transport encryption')
option('debugging', type: 'boolean', value: false, description: 'Turn debugging on/off')
option('vapi', type: 'boolean', value: true, description: 'Create VAPI file.')
option('gtk_doc', type: 'boolean', value: true, description: 'Build reference documentation using gtk-doc')
i18n.gettext(meson.project_name(),
preset: 'glib'
)
secret_tool_sources = [
'secret-tool.c',
]
secret_tool = executable('secret-tool',
secret_tool_sources,
dependencies: libsecret_dep,
include_directories: config_h_dir,
c_args: libsecret_cflags,
install: true,
)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment