meson: Do not support drivers known to fail in Big Endian archs

When building in big endian architectures some device tests will fail,
as per this we're pretty sure that most of the drivers are not ready
to work in big-endian architectures.
Since we're aware of this, better to just stop supporting those drivers
instead of having each distribution to handle the problem.

So, add a list of supported drivers that is filled depending the
architecture type we're building on. Keep continue building those
drivers since we want to at least test-build them, but do not expose
them as libfprint drivers, so if a device in the system uses any of them
will be ignored.

At the same time, we keep track of the problem, so that we can fix the
drivers.

Related to #236
This commit is contained in:
Marco Trevisan (Treviño) 2020-12-10 20:22:54 +01:00
parent 66fc93eeff
commit 99c269b3fe
2 changed files with 21 additions and 2 deletions

View file

@ -89,6 +89,7 @@ cairo_dep = dependency('cairo', required: false)
# Drivers # Drivers
drivers = get_option('drivers').split(',') drivers = get_option('drivers').split(',')
virtual_drivers = [ 'virtual_image' ] virtual_drivers = [ 'virtual_image' ]
default_drivers = [ default_drivers = [
'upektc_img', 'upektc_img',
'vfs5011', 'vfs5011',
@ -113,6 +114,13 @@ default_drivers = [
'goodixmoc', 'goodixmoc',
] ]
# 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 all_drivers = default_drivers + virtual_drivers
if drivers == [ 'all' ] if drivers == [ 'all' ]
@ -150,6 +158,16 @@ foreach driver: drivers
endif endif
endforeach endforeach
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
# Export the drivers' types to the core code # Export the drivers' types to the core code
drivers_type_list = [] drivers_type_list = []
drivers_type_func = [] drivers_type_func = []
@ -162,7 +180,7 @@ drivers_type_func += '{'
drivers_type_func += ' GArray *drivers = g_array_new (TRUE, FALSE, sizeof (GType));' drivers_type_func += ' GArray *drivers = g_array_new (TRUE, FALSE, sizeof (GType));'
drivers_type_func += ' GType t;' drivers_type_func += ' GType t;'
drivers_type_func += '' drivers_type_func += ''
foreach driver: drivers foreach driver: supported_drivers
drivers_type_list += 'extern GType (fpi_device_' + driver + '_get_type) (void);' drivers_type_list += 'extern GType (fpi_device_' + driver + '_get_type) (void);'
drivers_type_func += ' t = fpi_device_' + driver + '_get_type ();' drivers_type_func += ' t = fpi_device_' + driver + '_get_type ();'
drivers_type_func += ' g_array_append_val (drivers, t);' drivers_type_func += ' g_array_append_val (drivers, t);'

View file

@ -70,7 +70,8 @@ if get_option('introspection')
driver_envs = envs driver_envs = envs
driver_envs.set('FP_DRIVERS_WHITELIST', driver_test) driver_envs.set('FP_DRIVERS_WHITELIST', driver_test)
if driver_test in drivers and gusb_dep.version().version_compare('>= 0.3.0') if (driver_test in supported_drivers and
gusb_dep.version().version_compare('>= 0.3.0'))
test(driver_test, test(driver_test,
find_program('umockdev-test.py'), find_program('umockdev-test.py'),
args: join_paths(meson.current_source_dir(), driver_test), args: join_paths(meson.current_source_dir(), driver_test),