Pretty much all downstream distributions just enable all drivers anyway. Also, it should work well enough, so it seems right to simply add elanspi into the list of drivers that are enabled by default.
313 lines
8.4 KiB
Meson
313 lines
8.4 KiB
Meson
project('libfprint', [ 'c', 'cpp' ],
|
|
version: '1.90.7',
|
|
license: 'LGPLv2.1+',
|
|
default_options: [
|
|
'buildtype=debugoptimized',
|
|
'warning_level=1',
|
|
'c_std=gnu99',
|
|
],
|
|
meson_version: '>= 0.49.0')
|
|
|
|
gnome = import('gnome')
|
|
|
|
libfprint_conf = configuration_data()
|
|
|
|
cc = meson.get_compiler('c')
|
|
cpp = meson.get_compiler('cpp')
|
|
host_system = host_machine.system()
|
|
glib_min_version = '2.56'
|
|
|
|
glib_version_def = 'GLIB_VERSION_@0@_@1@'.format(
|
|
glib_min_version.split('.')[0], glib_min_version.split('.')[1])
|
|
common_cflags = cc.get_supported_arguments([
|
|
'-Wall',
|
|
'-Wcast-align',
|
|
'-Wformat-nonliteral',
|
|
'-Wformat-security',
|
|
'-Wformat=2',
|
|
'-Wignored-qualifiers',
|
|
'-Wlogical-op',
|
|
'-Wmissing-declarations',
|
|
'-Wmissing-format-attribute',
|
|
'-Wmissing-include-dirs',
|
|
'-Wmissing-noreturn',
|
|
'-Wpointer-arith',
|
|
'-Wshadow',
|
|
'-Wswitch-enum',
|
|
'-Wtype-limits',
|
|
'-Wundef',
|
|
'-Wunused',
|
|
'-Werror=address',
|
|
'-Werror=array-bounds',
|
|
'-Werror=empty-body',
|
|
'-Werror=init-self',
|
|
'-Werror=int-to-pointer-cast',
|
|
'-Werror=main',
|
|
'-Werror=missing-braces',
|
|
'-Werror=nonnull',
|
|
'-Werror=redundant-decls',
|
|
'-Werror=return-type',
|
|
'-Werror=sequence-point',
|
|
'-Werror=trigraphs',
|
|
'-Werror=write-strings',
|
|
'-fno-strict-aliasing',
|
|
'-DGLIB_VERSION_MIN_REQUIRED=' + glib_version_def,
|
|
'-DGLIB_VERSION_MAX_ALLOWED=' + glib_version_def,
|
|
'-D_GNU_SOURCE',
|
|
'-DG_LOG_DOMAIN="@0@"'.format(meson.project_name()),
|
|
])
|
|
c_cflags = cc.get_supported_arguments([
|
|
'-Wimplicit-function-declaration',
|
|
'-Wmissing-prototypes',
|
|
'-Wnested-externs',
|
|
'-Wold-style-definition',
|
|
'-Wstrict-prototypes',
|
|
'-Werror=implicit',
|
|
'-Werror=pointer-to-int-cast',
|
|
])
|
|
add_project_arguments(common_cflags + c_cflags, language: 'c')
|
|
add_project_arguments(common_cflags, language: 'cpp')
|
|
|
|
# maintaining compatibility with the previous libtool versioning
|
|
# current = binary - interface
|
|
# revision = interface
|
|
soversion = 2
|
|
current = 0
|
|
revision = 0
|
|
libversion = '@0@.@1@.@2@'.format(soversion, current, revision)
|
|
versioned_libname = meson.project_name() + '-' + soversion.to_string()
|
|
|
|
# Dependencies
|
|
glib_dep = dependency('glib-2.0', version: '>=' + glib_min_version)
|
|
gio_dep = dependency('gio-unix-2.0', version: '>=' + glib_min_version)
|
|
gobject_dep = dependency('gobject-2.0', version: '>=' + glib_min_version)
|
|
gusb_dep = dependency('gusb', version: '>= 0.2.0')
|
|
mathlib_dep = cc.find_library('m', required: false)
|
|
|
|
# The following dependencies are only used for tests
|
|
cairo_dep = dependency('cairo', required: false)
|
|
|
|
# introspection scanning and Gio-2.0.gir
|
|
gobject_introspection = dependency('gobject-introspection-1.0', required: get_option('introspection'))
|
|
|
|
# Drivers
|
|
drivers = get_option('drivers').split(',')
|
|
virtual_drivers = [
|
|
'virtual_image',
|
|
'virtual_device',
|
|
'virtual_device_storage',
|
|
]
|
|
|
|
default_drivers = [
|
|
'upektc_img',
|
|
'vfs5011',
|
|
'vfs7552',
|
|
'aes3500',
|
|
'aes4000',
|
|
'aes1610',
|
|
'aes1660',
|
|
'aes2660',
|
|
'aes2501',
|
|
'aes2550',
|
|
'vfs101',
|
|
'vfs301',
|
|
'vfs0050',
|
|
'etes603',
|
|
'vcom5s',
|
|
'synaptics',
|
|
'elan',
|
|
'uru4000',
|
|
'upektc',
|
|
'upeksonly',
|
|
'upekts',
|
|
'goodixmoc',
|
|
'nb1010',
|
|
|
|
# SPI
|
|
'elanspi',
|
|
]
|
|
|
|
# FIXME: All the drivers should be fixed by adjusting the byte order.
|
|
# See https://gitlab.freedesktop.org/libfprint/libfprint/-/issues/236
|
|
endian_independent_drivers = virtual_drivers + [
|
|
'aes3500',
|
|
'synaptics',
|
|
]
|
|
|
|
all_drivers = default_drivers + virtual_drivers
|
|
|
|
if drivers == [ 'all' ]
|
|
drivers = all_drivers
|
|
endif
|
|
|
|
if drivers == [ 'default' ]
|
|
drivers = default_drivers
|
|
endif
|
|
|
|
# For detection whether udev is needed
|
|
udev_drivers = [
|
|
'elanspi'
|
|
]
|
|
|
|
if drivers.length() == 0 or drivers[0] == ''
|
|
error('Cannot build libfprint without drivers, please specify a valid value for the drivers option')
|
|
endif
|
|
|
|
if drivers == all_drivers or drivers == default_drivers
|
|
default_drivers_are_enabled = true
|
|
else
|
|
default_drivers_are_enabled = true
|
|
foreach driver: default_drivers
|
|
if driver not in drivers
|
|
default_drivers_are_enabled = false
|
|
break
|
|
endif
|
|
endforeach
|
|
endif
|
|
|
|
nss_dep = dependency('', required: false)
|
|
imaging_dep = dependency('', required: false)
|
|
gudev_dep = dependency('', required: false)
|
|
libfprint_conf.set10('HAVE_PIXMAN', false)
|
|
|
|
udev_rules = get_option('udev_rules')
|
|
install_udev_rules = udev_rules.enabled()
|
|
|
|
foreach driver: drivers
|
|
if driver == 'uru4000'
|
|
nss_dep = dependency('nss', required: false)
|
|
if not nss_dep.found()
|
|
error('NSS is required for the URU4000/URU4500 driver')
|
|
endif
|
|
endif
|
|
if driver == 'aes3500' or driver == 'aes4000' or driver == 'elanspi'
|
|
imaging_dep = dependency('pixman-1', required: false)
|
|
if not imaging_dep.found()
|
|
error('pixman is required for imaging support')
|
|
endif
|
|
|
|
libfprint_conf.set10('HAVE_PIXMAN', true)
|
|
endif
|
|
if udev_drivers.contains(driver)
|
|
install_udev_rules = true
|
|
|
|
gudev_dep = dependency('gudev-1.0', required: false)
|
|
if not gudev_dep.found()
|
|
error('udev is required for SPI support')
|
|
endif
|
|
|
|
libfprint_conf.set10('HAVE_UDEV', true)
|
|
endif
|
|
if not all_drivers.contains(driver)
|
|
error('Invalid driver \'' + driver + '\'')
|
|
endif
|
|
endforeach
|
|
|
|
if udev_rules.disabled()
|
|
install_udev_rules = false
|
|
endif
|
|
|
|
if install_udev_rules
|
|
udev_rules_dir = get_option('udev_rules_dir')
|
|
if udev_rules_dir == 'auto'
|
|
udev_dep = dependency('udev')
|
|
udev_rules_dir = udev_dep.get_pkgconfig_variable('udevdir') + '/hwdb.d'
|
|
endif
|
|
endif
|
|
|
|
supported_drivers = []
|
|
foreach driver: drivers
|
|
if build_machine.endian() == 'little' or driver in endian_independent_drivers
|
|
supported_drivers += driver
|
|
else
|
|
warning('Driver @0@ is not supported by big endian cpu @1@. Please, fix it!'.format(
|
|
driver, build_machine.cpu()))
|
|
endif
|
|
endforeach
|
|
|
|
if default_drivers_are_enabled and supported_drivers != drivers
|
|
default_drivers_are_enabled = false
|
|
endif
|
|
|
|
# Export the drivers' types to the core code
|
|
drivers_type_list = []
|
|
drivers_type_func = []
|
|
drivers_type_list += '#include <glib-object.h>'
|
|
drivers_type_list += '#include "fpi-context.h"'
|
|
drivers_type_list += ''
|
|
drivers_type_func += 'GArray *'
|
|
drivers_type_func += 'fpi_get_driver_types (void)'
|
|
drivers_type_func += '{'
|
|
drivers_type_func += ' GArray *drivers = g_array_new (TRUE, FALSE, sizeof (GType));'
|
|
drivers_type_func += ' GType t;'
|
|
drivers_type_func += ''
|
|
foreach driver: supported_drivers
|
|
drivers_type_list += 'extern GType (fpi_device_' + driver + '_get_type) (void);'
|
|
drivers_type_func += ' t = fpi_device_' + driver + '_get_type ();'
|
|
drivers_type_func += ' g_array_append_val (drivers, t);'
|
|
drivers_type_func += ''
|
|
endforeach
|
|
drivers_type_list += ''
|
|
drivers_type_func += ' return drivers;'
|
|
drivers_type_func += '}'
|
|
|
|
root_inc = include_directories('.')
|
|
|
|
udev_hwdb = get_option('udev_hwdb')
|
|
if not udev_hwdb.disabled()
|
|
# systemd v248 includes our autosuspend rules
|
|
udev_versioned_dep = dependency('udev', version: '>= 248', required: false)
|
|
udev_hwdb_dir = get_option('udev_hwdb_dir')
|
|
if udev_hwdb.auto()
|
|
if udev_versioned_dep.found()
|
|
udev_hwdb_dir = ''
|
|
endif
|
|
else
|
|
if udev_versioned_dep.found()
|
|
warning('udev hwdb will be installed by both systemd and libfprint')
|
|
endif
|
|
endif
|
|
|
|
if udev_hwdb_dir == 'auto'
|
|
udev_dep = dependency('udev')
|
|
udev_hwdb_dir = udev_dep.get_pkgconfig_variable('udevdir') + '/hwdb.d'
|
|
endif
|
|
else
|
|
udev_hwdb_dir = ''
|
|
endif
|
|
|
|
if get_option('gtk-examples')
|
|
gnome = import('gnome')
|
|
|
|
gtk_dep = dependency('gtk+-3.0', required: false)
|
|
if not gtk_dep.found()
|
|
error('GTK+ 3.x is required for GTK+ examples')
|
|
endif
|
|
endif
|
|
|
|
configure_file(output: 'config.h', configuration: libfprint_conf)
|
|
|
|
subdir('libfprint')
|
|
subdir('examples')
|
|
if get_option('doc')
|
|
gnome = import('gnome')
|
|
subdir('doc')
|
|
endif
|
|
if get_option('gtk-examples')
|
|
subdir('demo')
|
|
endif
|
|
|
|
subdir('data')
|
|
subdir('tests')
|
|
|
|
pkgconfig = import('pkgconfig')
|
|
pkgconfig.generate(
|
|
name: versioned_libname,
|
|
description: 'Generic C API for fingerprint reader access',
|
|
version: meson.project_version(),
|
|
libraries: libfprint,
|
|
requires: [gio_dep, gobject_dep],
|
|
subdirs: versioned_libname,
|
|
filebase: versioned_libname,
|
|
)
|