diff --git a/libfprint/meson.build b/libfprint/meson.build index 55ecb46..6855f1e 100644 --- a/libfprint/meson.build +++ b/libfprint/meson.build @@ -80,128 +80,87 @@ nbis_sources = [ 'nbis/mindtct/xytreps.c', ] -aeslib = false -aesx660 = false -aes3k = false +driver_sources = { + 'upekts' : + [ 'drivers/upekts.c', 'drivers/upek_proto.c' ], + 'upektc' : + [ 'drivers/upektc.c' ], + 'upeksonly' : + [ 'drivers/upeksonly.c' ], + 'uru4000' : + [ 'drivers/uru4000.c' ], + 'aes1610' : + [ 'drivers/aes1610.c' ], + 'aes1660' : + [ 'drivers/aes1660.c' ], + 'aes2501' : + [ 'drivers/aes2501.c' ], + 'aes2550' : + [ 'drivers/aes2550.c' ], + 'aes2660' : + [ 'drivers/aes2660.c' ], + 'aes3500' : + [ 'drivers/aes3500.c' ], + 'aes4000' : + [ 'drivers/aes4000.c' ], + 'vcom5s' : + [ 'drivers/vcom5s.c' ], + 'vfs101' : + [ 'drivers/vfs101.c' ], + 'vfs301' : + [ 'drivers/vfs301.c', 'drivers/vfs301_proto.c' ], + 'vfs5011' : + [ 'drivers/vfs5011.c' ], + 'vfs7552' : + [ 'drivers/vfs7552.c' ], + 'upektc_img' : + [ 'drivers/upektc_img.c', 'drivers/upek_proto.c' ], + 'etes603' : + [ 'drivers/etes603.c' ], + 'vfs0050' : + [ 'drivers/vfs0050.c' ], + 'elan' : + [ 'drivers/elan.c' ], + 'elanspi' : + [ 'drivers/elanspi.c' ], + 'nb1010' : + [ 'drivers/nb1010.c' ], + 'virtual_image' : + [ 'drivers/virtual-image.c' ], + 'virtual_device' : + [ 'drivers/virtual-device.c' ], + 'virtual_device_storage' : + [ 'drivers/virtual-device-storage.c' ], + 'synaptics' : + [ 'drivers/synaptics/synaptics.c', 'drivers/synaptics/bmkt_message.c' ], + 'goodixmoc' : + [ 'drivers/goodixmoc/goodix.c', 'drivers/goodixmoc/goodix_proto.c' ], +} + +helper_sources = { + 'aeslib' : + [ 'drivers/aeslib.c' ], + 'aesx660' : + [ 'drivers/aesx660.c' ], + 'aes3k' : + [ 'drivers/aes3k.c' ], + 'nss' : + [ ], + 'udev' : + [ ], + 'virtual' : + [ 'drivers/virtual-device-listener.c' ], +} + drivers_sources = [] drivers_cflags = [] foreach driver: drivers - if driver == 'upekts' - drivers_sources += [ 'drivers/upekts.c', 'drivers/upek_proto.c' ] - endif - if driver == 'upektc' - drivers_sources += [ 'drivers/upektc.c' ] - endif - if driver == 'upeksonly' - drivers_sources += [ 'drivers/upeksonly.c' ] - endif - if driver == 'uru4000' - drivers_sources += [ 'drivers/uru4000.c' ] - endif - if driver == 'aes1610' - drivers_sources += [ 'drivers/aes1610.c' ] - aeslib = true - endif - if driver == 'aes1660' - drivers_sources += [ 'drivers/aes1660.c' ] - aeslib = true - aesx660 = true - endif - if driver == 'aes2501' - drivers_sources += [ 'drivers/aes2501.c' ] - aeslib = true - endif - if driver == 'aes2550' - drivers_sources += [ 'drivers/aes2550.c' ] - aeslib = true - endif - if driver == 'aes2660' - drivers_sources += [ 'drivers/aes2660.c' ] - aeslib = true - aesx660 = true - endif - if driver == 'aes3500' - drivers_sources += [ 'drivers/aes3500.c' ] - aeslib = true - aes3k = true - endif - if driver == 'aes4000' - drivers_sources += [ 'drivers/aes4000.c' ] - aeslib = true - aes3k = true - endif - if driver == 'vcom5s' - drivers_sources += [ 'drivers/vcom5s.c' ] - endif - if driver == 'vfs101' - drivers_sources += [ 'drivers/vfs101.c' ] - endif - if driver == 'vfs301' - drivers_sources += [ 'drivers/vfs301.c', 'drivers/vfs301_proto.c' ] - endif - if driver == 'vfs5011' - drivers_sources += [ 'drivers/vfs5011.c' ] - endif - if driver == 'vfs7552' - drivers_sources += [ 'drivers/vfs7552.c' ] - endif - if driver == 'upektc_img' - drivers_sources += [ 'drivers/upektc_img.c', 'drivers/upek_proto.c' ] - endif - if driver == 'etes603' - drivers_sources += [ 'drivers/etes603.c' ] - endif - if driver == 'vfs0050' - drivers_sources += [ 'drivers/vfs0050.c' ] - endif - if driver == 'elan' - drivers_sources += [ 'drivers/elan.c' ] - endif - if driver == 'elanspi' - drivers_sources += [ 'drivers/elanspi.c' ] - endif - if driver == 'virtual_image' - drivers_sources += [ 'drivers/virtual-image.c' ] - endif - if driver == 'virtual_device' - drivers_sources += [ 'drivers/virtual-device.c' ] - endif - if driver == 'virtual_device_storage' - drivers_sources += [ 'drivers/virtual-device-storage.c' ] - endif - if driver.startswith('virtual_') - drivers_sources += [ 'drivers/virtual-device-listener.c' ] - endif - if driver == 'synaptics' - drivers_sources += [ - 'drivers/synaptics/synaptics.c', - 'drivers/synaptics/bmkt_message.c', - ] - endif - if driver == 'goodixmoc' - drivers_sources += [ - 'drivers/goodixmoc/goodix.c', - 'drivers/goodixmoc/goodix_proto.c', - ] - endif - if driver == 'nb1010' - drivers_sources += [ - 'drivers/nb1010.c', - ] - endif + drivers_sources += driver_sources[driver] +endforeach +foreach helper : driver_helpers + drivers_sources += helper_sources[helper] endforeach -if aeslib - drivers_sources += [ 'drivers/aeslib.c' ] -endif -if aesx660 - drivers_sources += ['drivers/aesx660.c' ] -endif -if aes3k - drivers_sources += ['drivers/aes3k.c' ] -endif - -other_sources = [] fp_enums = gnome.mkenums_simple('fp-enums', sources: libfprint_public_headers, @@ -256,11 +215,8 @@ deps = [ glib_dep, gobject_dep, gusb_dep, - gudev_dep, - imaging_dep, mathlib_dep, - nss_dep, -] +] + optional_deps # These are empty and only exist so that the include directories are created # in the build tree. This silences a build time warning. @@ -307,7 +263,6 @@ libfprint = shared_library(versioned_libname.split('lib')[1], sources: [ fp_enums, libfprint_sources, - other_sources, ], soversion: soversion, version: libversion, diff --git a/meson.build b/meson.build index d76055a..d2bc8e8 100644 --- a/meson.build +++ b/meson.build @@ -144,10 +144,32 @@ if drivers == [ 'default' ] drivers = default_drivers endif -# For detection whether udev is needed -udev_drivers = [ - 'elanspi' -] +driver_helper_mapping = { + 'aes1610' : [ 'aeslib' ], + 'aes1660' : [ 'aeslib', 'aesx660' ], + 'aes2501' : [ 'aeslib' ], + 'aes2550' : [ 'aeslib' ], + 'aes2660' : [ 'aeslib', 'aesx660' ], + 'aes3500' : [ 'aeslib', 'aes3k' ], + 'aes4000' : [ 'aeslib', 'aes3k' ], + 'uru4000' : [ 'nss' ], + 'elanspi' : [ 'udev' ], + 'virtual_image' : [ 'virtual' ], + 'virtual_device' : [ 'virtual' ], + 'virtual_device_storage' : [ 'virtual' ], +} + +driver_helpers = [] +foreach driver : drivers + if driver in driver_helper_mapping + foreach helper : driver_helper_mapping[driver] + if helper not in driver_helpers + driver_helpers += helper + endif + endforeach + endif +endforeach + if drivers.length() == 0 or drivers[0] == '' error('Cannot build libfprint without drivers, please specify a valid value for the drivers option') @@ -165,41 +187,46 @@ else 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') +optional_deps = [] + +# Resolve extra dependencies +foreach i : driver_helpers + foreach d, helpers : driver_helper_mapping + if i in helpers + driver = d + break endif - endif - if driver == 'aes3500' or driver == 'aes4000' or driver == 'elanspi' + endforeach + + if i == 'aes3k' imaging_dep = dependency('pixman-1', required: false) if not imaging_dep.found() - error('pixman is required for imaging support') + error('pixman is required for @0@ and possibly others'.format(driver)) 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) + optional_deps += imaging_dep + elif i == 'nss' + nss_dep = dependency('nss', required: false) + if not nss_dep.found() + error('nss is required for @0@ and possibly others'.format(driver)) endif - if not all_drivers.contains(driver) - error('Invalid driver \'' + driver + '\'') + + optional_deps += nss_dep + elif i == 'udev' + 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) + + optional_deps += gudev_dep endif endforeach @@ -263,9 +290,11 @@ if get_option('gtk-examples') endif endif +# Some dependency resolving happens inside here +subdir('libfprint') + configure_file(output: 'config.h', configuration: libfprint_conf) -subdir('libfprint') subdir('examples') if get_option('doc') gnome = import('gnome')