diff options
author | Richard Hughes <richard@hughsie.com> | 2017-12-19 09:40:13 +0000 |
---|---|---|
committer | Richard Hughes <richard@hughsie.com> | 2017-12-19 11:00:27 +0000 |
commit | 5f6c65a6e21fc2e7cc3edfa9568f0363837ce55e (patch) | |
tree | 6f11eed3146a207567b568e21a1cc86da84bb629 | |
parent | fdc103cc80f0054907114c669bc3cddc9e7f87dd (diff) | |
download | gusb-5f6c65a6e21fc2e7cc3edfa9568f0363837ce55e.tar.gz |
Port to the Meson build system
-rw-r--r-- | contrib/libgusb.spec.in | 19 | ||||
-rw-r--r-- | docs/api/meson.build | 15 | ||||
-rw-r--r-- | docs/meson.build | 1 | ||||
-rw-r--r-- | gusb/meson.build | 157 | ||||
-rw-r--r-- | meson.build | 111 | ||||
-rw-r--r-- | meson_options.txt | 3 | ||||
-rw-r--r-- | tools/meson.build | 22 |
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 +) |