[Libosinfo] [osinfo-db-tools PATCH v2 08/16] Add support to meson build system
Fabiano Fidêncio
fidencio at redhat.com
Tue Jul 9 10:47:36 UTC 2019
Meson build system is a way simpler and easier to understand build
system that can provide (with some work-arounds here and there) the same
functionalities currently available with our current build system
(autotools).
For now, as meson support is not fully complete* and requires a quite
new version of meson still not present in all systems supported on
libvirt-jenkis-ci, let's keep autotools around so more extensive testing
if meson's functionalities can be done before actually removing
autotools support.
*: the support is not fully complete as there's still no equivalent of
`make syntax-check` provided.
Signed-off-by: Fabiano Fidêncio <fidencio at redhat.com>
---
build-aux/dist.sh | 11 +++
meson.build | 218 ++++++++++++++++++++++++++++++++++++++++++++++
po/meson.build | 2 +
tests/meson.build | 21 +++++
tools/meson.build | 97 +++++++++++++++++++++
5 files changed, 349 insertions(+)
create mode 100755 build-aux/dist.sh
create mode 100644 meson.build
create mode 100644 po/meson.build
create mode 100644 tests/meson.build
create mode 100644 tools/meson.build
diff --git a/build-aux/dist.sh b/build-aux/dist.sh
new file mode 100755
index 0000000..422d593
--- /dev/null
+++ b/build-aux/dist.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+SOURCE_ROOT=$1
+BUILD_ROOT=$2
+
+$SOURCE_ROOT/build-aux/gitlog-to-changelog > $MESON_DIST_ROOT/ChangeLog
+
+cp $BUILD_ROOT/{mingw-,}osinfo-db-tools.spec $MESON_DIST_ROOT/
+
+out="`git log --pretty=format:'%aN <%aE>' | sort -u`"
+perl -p -e "s/#authorslist#// and print '$out'" < $SOURCE_ROOT/AUTHORS.in > $MESON_DIST_ROOT/AUTHORS
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..97ad60c
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,218 @@
+project(
+ 'osinfo-db-tools', 'c',
+ version: '1.6.0',
+ license: 'GPLv2+',
+ meson_version: '>= 0.49.0'
+)
+
+osinfo_db_tools_prefix = get_option('prefix')
+
+# those directories have to be known by the project
+osinfo_db_tools_datadir = join_paths(osinfo_db_tools_prefix, get_option('datadir'))
+osinfo_db_tools_localedir = join_paths(osinfo_db_tools_prefix, get_option('localedir'))
+osinfo_db_tools_pkgdatadir = join_paths(osinfo_db_tools_datadir, meson.project_name())
+osinfo_db_tools_sysconfdir = join_paths(osinfo_db_tools_prefix, get_option('sysconfdir'))
+
+# those directories will have files installed in
+osinfo_db_tools_bindir = join_paths(osinfo_db_tools_prefix, get_option('bindir'))
+osinfo_db_tools_docdir = join_paths(osinfo_db_tools_datadir, 'doc', meson.project_name())
+osinfo_db_tools_licensedir = join_paths(osinfo_db_tools_datadir, 'license', meson.project_name())
+osinfo_db_tools_mandir = join_paths(osinfo_db_tools_prefix, get_option('mandir'))
+
+# spec files
+osinfo_db_tools_spec_data = configuration_data()
+osinfo_db_tools_spec_data.set('VERSION', meson.project_version())
+
+specs = ['osinfo-db-tools.spec', 'mingw-osinfo-db-tools.spec']
+foreach spec: specs
+ configure_file(
+ input: spec + '.in',
+ output: spec,
+ configuration: osinfo_db_tools_spec_data
+ )
+endforeach
+
+# ninja dist helper
+meson.add_dist_script('build-aux/dist.sh', meson.source_root(), meson.build_root())
+
+# dependencies
+# glib stuff
+glib_version = '2.36'
+glib_version_info = '>= @0@'.format(glib_version)
+glib_dep = dependency('glib-2.0', version: glib_version_info)
+gio_dep = dependency('gio-2.0', version: glib_version_info)
+gobject_dep = dependency('gobject-2.0', version: glib_version_info)
+
+# everything else
+libarchive_dep = dependency('libarchive', version: '>= 3.0.0')
+libxml_dep = dependency('libxml-2.0', version: '>= 2.6.0')
+json_glib_dep = dependency('json-glib-1.0')
+
+# common dependencies
+osinfo_db_tools_common_dependencies = [gobject_dep, gio_dep, glib_dep]
+
+# arguments
+osinfo_db_tools_cflags = []
+
+# glib stuff
+osinfo_db_tools_cflags += [
+ '-DGLIB_MIN_REQUIRED_VERSION="0"'.format(glib_version),
+ '-DGLIB_MAX_ALLOWED_VERSION="0"'.format(glib_version)
+]
+
+# directories used
+osinfo_db_tools_cflags += [
+ '-DPKGDATADIR="@0@"'.format(osinfo_db_tools_pkgdatadir),
+ '-DDATA_DIR="@0@"'.format(osinfo_db_tools_datadir),
+ '-DSYSCONFDIR="@0@"'.format(osinfo_db_tools_sysconfdir),
+ '-DLOCALEDIR="@0@"'.format(osinfo_db_tools_localedir),
+]
+
+# gettext package name
+osinfo_db_tools_cflags += ['-DGETTEXT_PACKAGE="0"'.format(meson.project_name())]
+
+# cflags to check whether the compiler supports them or not
+osinfo_db_tools_check_cflags = [
+ '-W',
+ '-Waddress',
+ '-Waggressive-loop-optimizations',
+ '-Wall',
+ '-Warray-bounds',
+ '-Wattributes',
+ '-Wbuiltin-macro-redefined',
+ '-Wcast-align',
+ '-Wchar-subscripts',
+ '-Wclobbered',
+ '-Wcomment',
+ '-Wcomments',
+ '-Wcoverage-mismatch',
+ '-Wcpp',
+ '-Wdate-time',
+ '-Wdeprecated-declarations',
+ '-Wdisabled-optimization',
+ '-Wdiv-by-zero',
+ '-Wdouble-promotion',
+ '-Wempty-body',
+ '-Wendif-labels',
+ '-Wenum-compare',
+ '-Wextra',
+ '-Wformat-contains-nul',
+ '-Wformat-extra-args',
+ '-Wformat-security',
+ '-Wformat-y2k',
+ '-Wformat-zero-length',
+ '-Wfree-nonheap-object',
+ '-Wignored-qualifiers',
+ '-Wimplicit',
+ '-Wimplicit-function-declaration',
+ '-Wimplicit-int',
+ '-Winit-self',
+ '-Winline',
+ '-Wint-to-pointer-cast',
+ '-Winvalid-memory-model',
+ '-Winvalid-pch',
+ '-Wjump-misses-init',
+ '-Wlogical-op',
+ '-Wmain',
+ '-Wmaybe-uninitialized',
+ '-Wmissing-braces',
+ '-Wmissing-declarations',
+ '-Wmissing-field-initializers',
+ '-Wmissing-include-dirs',
+ '-Wmissing-parameter-type',
+ '-Wmissing-prototypes',
+ '-Wmultichar',
+ '-Wnarrowing',
+ '-Wnested-externs',
+ '-Wnonnull',
+ '-Wold-style-declaration',
+ '-Wold-style-definition',
+ '-Wopenmp-simd',
+ '-Woverflow',
+ '-Woverlength-strings',
+ '-Woverride-init',
+ '-Wpacked',
+ '-Wpacked-bitfield-compat',
+ '-Wparentheses',
+ '-Wpointer-arith',
+ '-Wpointer-sign',
+ '-Wpointer-to-int-cast',
+ '-Wpragmas',
+ '-Wreturn-local-addr',
+ '-Wreturn-type',
+ '-Wsequence-point',
+ '-Wshadow',
+ '-Wsizeof-pointer-memaccess',
+ '-Wstack-protector',
+ '-Wstrict-aliasing',
+ '-Wstrict-overflow',
+ '-Wstrict-prototypes',
+ '-Wsuggest-attribute=const',
+ '-Wsuggest-attribute=format',
+ '-Wsuggest-attribute=noreturn',
+ '-Wsuggest-attribute=pure',
+ '-Wswitch',
+ '-Wswitch-default',
+ '-Wsync-nand',
+ '-Wtrampolines',
+ '-Wtrigraphs',
+ '-Wtype-limits',
+ '-Wuninitialized',
+ '-Wunknown-pragmas',
+ '-Wunsafe-loop-optimizations',
+ '-Wunused',
+ '-Wunused-but-set-parameter',
+ '-Wunused-but-set-variable',
+ '-Wunused-function',
+ '-Wunused-label',
+ '-Wunused-local-typedefs',
+ '-Wunused-parameter',
+ '-Wunused-result',
+ '-Wunused-value',
+ '-Wunused-variable',
+ '-Wvarargs',
+ '-Wvariadic-macros',
+ '-Wvector-operation-performance',
+ '-Wvla',
+ '-Wvolatile-register-var',
+ '-Wwrite-strings',
+ '-Wnormalized=nfc',
+ '-Wno-sign-compare',
+ '-Wno-sign-conversion',
+ '-Wno-conversion',
+ '-Wno-unused-parameter',
+ '-Wjump-misses-init',
+ '-Wframe-larger-than=4096',
+ '-Wno-overlength-strings',
+ '-O2',
+ '-Wp,-D_FORTIFY_SOURCE=2',
+ '--param=ssp-buffer-size=4',
+ '-fexceptions',
+ '-fasynchronous-unwind-tables',
+ '-fdiagnostics-show-option',
+ '-funit-at-a-time',
+ '-fipa-pure-const',
+ '-Wno-suggest-attribute=pure',
+ '-Wno-suggest-attribute=const',
+]
+
+if host_machine.system() != 'windows'
+ osinfo_db_tools_check_cflags += ['-fstack-protector-all']
+endif
+
+if run_command('[', '-d', '.git', ']').returncode() == 0
+ osinfo_db_tools_check_cflags += ['-Werror']
+endif
+
+compiler = meson.get_compiler('c')
+foreach cflag: osinfo_db_tools_check_cflags
+ if compiler.has_argument(cflag)
+ osinfo_db_tools_cflags += [cflag]
+ endif
+endforeach
+
+add_project_arguments(osinfo_db_tools_cflags, language: 'c')
+
+subdir('tools')
+subdir('po')
+subdir('tests')
diff --git a/po/meson.build b/po/meson.build
new file mode 100644
index 0000000..79c6233
--- /dev/null
+++ b/po/meson.build
@@ -0,0 +1,2 @@
+i18n = import('i18n')
+i18n.gettext(meson.project_name(), preset: 'glib')
diff --git a/tests/meson.build b/tests/meson.build
new file mode 100644
index 0000000..6cf2ca8
--- /dev/null
+++ b/tests/meson.build
@@ -0,0 +1,21 @@
+python = import('python')
+
+python3 = python.find_installation('python3')
+if python3.found()
+ tests = {
+ 'export/import test': 'test_osinfo_db_export_import.py',
+ 'path test': 'test_osinfo_db_path.py',
+ 'validate test': 'test_osinfo_db_validate.py'
+ }
+
+ env_vars = [
+ 'abs_top_builddir=' + meson.build_root(),
+ 'abs_top_srcdir=' + meson.source_root(),
+ 'datadir=' + osinfo_db_tools_datadir,
+ 'sysconfdir=' + osinfo_db_tools_sysconfdir
+ ]
+
+ foreach name, file: tests
+ test(name, find_program(file), env: env_vars)
+ endforeach
+endif
diff --git a/tools/meson.build b/tools/meson.build
new file mode 100644
index 0000000..197e809
--- /dev/null
+++ b/tools/meson.build
@@ -0,0 +1,97 @@
+# includes
+osinfo_db_tools_include = [include_directories('.')]
+
+# sources
+# common sources
+osinfo_db_tools_common_sources = [
+ 'osinfo-db-util.c',
+ 'osinfo-db-util.h'
+]
+
+# osinfo-db-validate
+osinfo_db_validate_sources = [
+ osinfo_db_tools_common_sources,
+ 'osinfo-db-validate.c'
+]
+osinfo_db_validate_dependencies = [
+ osinfo_db_tools_common_dependencies,
+ libxml_dep
+]
+executable(
+ 'osinfo-db-validate',
+ sources: osinfo_db_validate_sources,
+ include_directories: osinfo_db_tools_include,
+ dependencies: osinfo_db_validate_dependencies,
+ install: true
+)
+
+# osinfo-db-import
+osinfo_db_import_sources = [
+ osinfo_db_tools_common_sources,
+ 'osinfo-db-import.c'
+]
+osinfo_db_import_dependencies = [
+ osinfo_db_tools_common_dependencies,
+ json_glib_dep,
+ libarchive_dep
+]
+executable(
+ 'osinfo-db-import',
+ sources: osinfo_db_import_sources,
+ include_directories: osinfo_db_tools_include,
+ dependencies: osinfo_db_import_dependencies,
+ install: true
+)
+
+# osinfo-db-export
+osinfo_db_export_sources = [
+ osinfo_db_tools_common_sources,
+ 'osinfo-db-export.c'
+]
+osinfo_db_export_dependencies = [
+ osinfo_db_tools_common_dependencies,
+ libarchive_dep
+]
+executable(
+ 'osinfo-db-export',
+ sources: osinfo_db_export_sources,
+ include_directories: osinfo_db_tools_include,
+ dependencies: osinfo_db_export_dependencies,
+ install: true)
+
+# osinfo-db-path
+osinfo_db_path_sources = [
+ osinfo_db_tools_common_sources,
+ 'osinfo-db-path.c'
+]
+osinfo_db_path_dependencies = [osinfo_db_tools_common_dependencies]
+executable(
+ 'osinfo-db-path',
+ sources: osinfo_db_path_sources,
+ include_directories: osinfo_db_tools_include,
+ dependencies: osinfo_db_path_dependencies,
+ install: true
+)
+
+# man pages
+pod2man = find_program('pod2man')
+if pod2man.found()
+ files = [
+ 'osinfo-db-validate',
+ 'osinfo-db-import',
+ 'osinfo-db-export',
+ 'osinfo-db-path'
+ ]
+
+ foreach file: files
+ custom_target(
+ file + '.1',
+ output: file + '.1',
+ input: file + '.c',
+ install: true,
+ install_dir: join_paths(osinfo_db_tools_datadir, 'man', 'man1'),
+ build_by_default: true,
+ command: [pod2man, '-c', 'Osinfo DB Tools', '@INPUT@', '@OUTPUT@']
+ )
+ endforeach
+endif
--
2.21.0
More information about the Libosinfo
mailing list