summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2017-12-19 09:40:13 +0000
committerRichard Hughes <richard@hughsie.com>2017-12-19 11:00:27 +0000
commit5f6c65a6e21fc2e7cc3edfa9568f0363837ce55e (patch)
tree6f11eed3146a207567b568e21a1cc86da84bb629
parentfdc103cc80f0054907114c669bc3cddc9e7f87dd (diff)
downloadgusb-5f6c65a6e21fc2e7cc3edfa9568f0363837ce55e.tar.gz
Port to the Meson build system
-rw-r--r--contrib/libgusb.spec.in19
-rw-r--r--docs/api/meson.build15
-rw-r--r--docs/meson.build1
-rw-r--r--gusb/meson.build157
-rw-r--r--meson.build111
-rw-r--r--meson_options.txt3
-rw-r--r--tools/meson.build22
7 files changed, 316 insertions, 12 deletions
diff --git a/contrib/libgusb.spec.in b/contrib/libgusb.spec.in
index f1d2654..3624fda 100644
--- a/contrib/libgusb.spec.in
+++ b/contrib/libgusb.spec.in
@@ -9,9 +9,10 @@ URL: https://gitorious.org/gusb/
Source0: http://people.freedesktop.org/~hughsient/releases/%{name}-%{version}.tar.xz
BuildRequires: glib2-devel >= 2.38.0
-BuildRequires: libtool
-BuildRequires: libusb1-devel >= 1.0.19
BuildRequires: gobject-introspection-devel
+BuildRequires: gtk-doc
+BuildRequires: libusb1-devel >= 1.0.19
+BuildRequires: meson
BuildRequires: vala-devel
BuildRequires: vala-tools
@@ -31,19 +32,12 @@ GLib headers and libraries for gusb.
%setup -q
%build
-%configure \
- --disable-static \
- --enable-vala=yes \
- --enable-introspection=yes \
- --disable-gtk-doc \
- --disable-dependency-tracking
+%meson -Dvapi=true -Dtests=true
-make %{?_smp_mflags}
+%meson_build
%install
-make install DESTDIR=$RPM_BUILD_ROOT
-
-rm -f $RPM_BUILD_ROOT%{_libdir}/libgusb.la
+%meson_install
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
@@ -63,6 +57,7 @@ rm -f $RPM_BUILD_ROOT%{_libdir}/libgusb.la
%{_libdir}/pkgconfig/gusb.pc
%{_datadir}/gtk-doc/html/gusb
%{_datadir}/gir-1.0/GUsb-1.0.gir
+%{_datadir}/vala/vapi/gusb.deps
%{_datadir}/vala/vapi/gusb.vapi
%changelog
diff --git a/docs/api/meson.build b/docs/api/meson.build
new file mode 100644
index 0000000..1bdcb1d
--- /dev/null
+++ b/docs/api/meson.build
@@ -0,0 +1,15 @@
+gusb_version_xml = configure_file(
+ input : 'version.xml.in',
+ output : 'version.xml',
+ configuration : conf,
+)
+
+gnome.gtkdoc(
+ 'gusb',
+ src_dir : [
+ join_paths(meson.source_root(), 'gusb'),
+ join_paths(meson.build_root(), 'gusb'),
+ ],
+ main_sgml : 'gusb-docs.sgml',
+ install : true
+)
diff --git a/docs/meson.build b/docs/meson.build
new file mode 100644
index 0000000..dc2bb41
--- /dev/null
+++ b/docs/meson.build
@@ -0,0 +1 @@
+subdir('api')
diff --git a/gusb/meson.build b/gusb/meson.build
new file mode 100644
index 0000000..005dd0d
--- /dev/null
+++ b/gusb/meson.build
@@ -0,0 +1,157 @@
+cargs = [
+ '-DG_LOG_DOMAIN="libgusb"',
+ '-DUSB_IDS="' + get_option('usb_ids') + '"',
+]
+
+con2 = configuration_data()
+con2.set('G_USB_MAJOR_VERSION', gusb_major_version)
+con2.set('G_USB_MINOR_VERSION', gusb_minor_version)
+con2.set('G_USB_MICRO_VERSION', gusb_micro_version)
+
+gusb_version_h = configure_file(
+ input : 'gusb-version.h.in',
+ output : 'gusb-version.h',
+ configuration : con2
+)
+
+install_headers(
+ 'gusb.h',
+ subdir : 'gusb-1',
+)
+
+lib_incdir = include_directories('.')
+
+install_headers([
+ gusb_version_h,
+ 'gusb-autocleanups.h',
+ 'gusb-context.h',
+ 'gusb-context-private.h',
+ 'gusb-device.h',
+ 'gusb-device-private.h',
+ 'gusb-device-list.h',
+ 'gusb-interface.h',
+ 'gusb-interface-private.h',
+ 'gusb-source.h',
+ 'gusb-util.h',
+ ],
+ subdir : 'gusb-1/gusb',
+)
+
+mapfile = 'libgusb.ver'
+vflag = '-Wl,--version-script,@0@/@1@'.format(meson.current_source_dir(), mapfile)
+gusb = shared_library(
+ 'gusb',
+ sources : [
+ 'gusb-context.c',
+ 'gusb-device.c',
+ 'gusb-device-list.c',
+ 'gusb-interface.c',
+ 'gusb-source.c',
+ 'gusb-util.c',
+ ],
+ soversion : lt_current,
+ version : lt_version,
+ dependencies : [
+ libgio,
+ libusb,
+ ],
+ c_args : [
+ cargs,
+# '-DLOCALSTATEDIR="' + localstatedir + '"',
+ ],
+ include_directories : [
+ root_incdir,
+ lib_incdir,
+ ],
+ link_args : vflag,
+ link_depends : mapfile,
+ install : true
+)
+
+pkgg = import('pkgconfig')
+pkgg.generate(
+ libraries : gusb,
+ requires : [ 'gio-2.0', 'gobject-2.0', 'libusb-1.0' ],
+ subdirs : 'gusb-1',
+ version : meson.project_version(),
+ name : 'gusb',
+ filebase : 'gusb',
+ description : 'GUsb is a GLib binding for libusb1',
+)
+
+libgusb_girtarget = gnome.generate_gir(gusb,
+ sources : [
+ gusb_version_h,
+ 'gusb-autocleanups.h',
+ 'gusb-context.c',
+ 'gusb-context.h',
+ 'gusb-context-private.h',
+ 'gusb-device.c',
+ 'gusb-device.h',
+ 'gusb-device-list.c',
+ 'gusb-device-list.h',
+ 'gusb-device-private.h',
+ 'gusb-interface.c',
+ 'gusb-interface.h',
+ 'gusb-interface-private.h',
+ 'gusb-source.c',
+ 'gusb-source.h',
+ 'gusb-util.c',
+ 'gusb-util.h',
+ ],
+ nsversion : '1.0',
+ namespace : 'GUsb',
+ symbol_prefix : 'g_usb',
+ identifier_prefix : 'GUsb',
+ export_packages : 'gusb',
+ extra_args : [
+ '--c-include=gusb.h',
+ ],
+ link_with : gusb,
+ dependencies : [
+ libgio,
+ libusb,
+ ],
+ includes : [
+ 'Gio-2.0',
+ 'GObject-2.0',
+ ],
+ install : true
+)
+libgusb_gir = libgusb_girtarget[0]
+libgusb_typelib = libgusb_girtarget[1]
+
+if get_option('vapi')
+gnome.generate_vapi('gusb',
+ sources: libgusb_girtarget[0],
+ packages: ['gio-2.0'],
+ install: true,
+)
+endif
+
+if get_option('tests')
+ e = executable(
+ 'gusb-self-test',
+ sources : [
+ 'gusb-context.c',
+ 'gusb-device.c',
+ 'gusb-device-list.c',
+ 'gusb-interface.c',
+ 'gusb-self-test.c',
+ 'gusb-source.c',
+ 'gusb-util.c',
+ ],
+ include_directories : [
+ root_incdir,
+ lib_incdir,
+ ],
+ dependencies : [
+ libgio,
+ libusb,
+ ],
+ c_args : [
+ cargs,
+ ],
+ )
+ test('gusb-self-test', e)
+endif
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..0c7ba1b
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,111 @@
+project('libgusb', 'c',
+ version : '0.2.12',
+ license : 'LGPL-2.1+',
+ meson_version : '>=0.37.0',
+ default_options : ['c_std=c99']
+)
+
+gusb_version = meson.project_version()
+varr = gusb_version.split('.')
+gusb_major_version = varr[0]
+gusb_minor_version = varr[1]
+gusb_micro_version = varr[2]
+
+conf = configuration_data()
+conf.set_quoted('VERSION', gusb_version)
+
+# libtool versioning - this applies to libgusb
+lt_current = '2'
+lt_revision = '10'
+lt_age = '0'
+lt_version = '@0@.@1@.@2@'.format(lt_current, lt_age, lt_revision)
+
+# get suported warning flags
+test_args = [
+ '-fstack-protector-strong',
+ '-Waggregate-return',
+ '-Wunused',
+ '-Warray-bounds',
+ '-Wcast-align',
+ '-Wclobbered',
+ '-Wdeclaration-after-statement',
+ '-Wempty-body',
+ '-Wextra',
+ '-Wformat=2',
+ '-Wformat-nonliteral',
+ '-Wformat-security',
+ '-Wformat-signedness',
+ '-Wignored-qualifiers',
+ '-Wimplicit-function-declaration',
+ '-Winit-self',
+ '-Wmissing-declarations',
+ '-Wmissing-format-attribute',
+ '-Wmissing-include-dirs',
+ '-Wmissing-noreturn',
+ '-Wmissing-parameter-type',
+ '-Wmissing-prototypes',
+ '-Wnested-externs',
+ '-Wno-discarded-qualifiers',
+ '-Wno-missing-field-initializers',
+ '-Wno-strict-aliasing',
+ '-Wno-suggest-attribute=format',
+ '-Wno-unused-parameter',
+ '-Wold-style-definition',
+ '-Woverride-init',
+ '-Wpointer-arith',
+ '-Wreturn-type',
+ '-Wshadow',
+ '-Wsign-compare',
+ '-Wstrict-aliasing',
+ '-Wstrict-prototypes',
+ '-Wswitch-default',
+ '-Wtype-limits',
+ '-Wundef',
+ '-Wuninitialized',
+ '-Wunused-but-set-variable',
+ '-Wwrite-strings'
+]
+cc = meson.get_compiler('c')
+foreach arg: test_args
+ if cc.has_argument(arg)
+ add_project_arguments(arg, language : 'c')
+ endif
+endforeach
+
+# enable full RELRO where possible
+# FIXME: until https://github.com/mesonbuild/meson/issues/1140 is fixed
+global_link_args = []
+test_link_args = [
+ '-Wl,-z,relro',
+ '-Wl,-z,now',
+]
+foreach arg: test_link_args
+ if cc.has_argument(arg)
+ global_link_args += arg
+ endif
+endforeach
+add_global_link_arguments(
+ global_link_args,
+ language: 'c'
+)
+
+libgio = dependency('gio-2.0', version : '>= 2.44.0')
+libusb = dependency('libusb-1.0', version : '>= 1.0.19')
+
+gnome = import('gnome')
+
+add_project_arguments('-DGUSB_COMPILATION', language: 'c')
+
+prefix = get_option('prefix')
+bindir = join_paths(prefix, get_option('bindir'))
+
+configure_file(
+ output : 'config.h',
+ configuration : conf
+)
+
+root_incdir = include_directories('.')
+
+subdir('gusb')
+subdir('tools')
+subdir('docs')
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..2154da2
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,3 @@
+option('tests', type : 'boolean', value : true, description : 'Build self tests')
+option('vapi', type : 'boolean', value : true, description : 'Build VAPI')
+option('usb_ids', type : 'string', value : '/usr/share/hwdata/usb.ids', description : 'Path to usb.ids file')
diff --git a/tools/meson.build b/tools/meson.build
new file mode 100644
index 0000000..3bd2c6c
--- /dev/null
+++ b/tools/meson.build
@@ -0,0 +1,22 @@
+cargs = ['-DG_LOG_DOMAIN="GUsb"']
+
+executable(
+ 'gusbcmd',
+ sources : [
+ 'gusb-main.c',
+ ],
+ include_directories : [
+ lib_incdir,
+ root_incdir,
+ ],
+ dependencies : [
+ libgio,
+ libusb,
+ ],
+ link_with : gusb,
+ c_args : [
+ cargs,
+ ],
+ install : true,
+ install_dir : bindir
+)